Rev 50 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
//// ьр°шээючртшёшь√х яЁюЎхфєЁ√ ш юс· тыхэш
BYTE _veryoldreg
;
BYTE _baseN
;
UINT _reglist
;
CONST UINT _BIAS
= 0;
PROC asmbytepopvalue
()
{
DEC _nvalues
;
IF
(_asms
) {
;;writefout
((BYTE
)_value
[_nvalues
]/**(BYTE)asmpopvalue()*/); //compatible version
/*writefout(*(PBYTE)&_value[_nvalues]);*/ //fast version (little endian)
};
INC _curaddr
;
}
PROC asmwordpopvalue
() //Ёрчэр ЁрчЁ фэюёЄ№ UINT/DW
{
VAR UINT uinttempvalue
;
DEC _nvalues
;
IF
(_asms
) {
//яш°хь фрээ√х ЁхыюърЎшш яЁш эхэєыхтюь _isaddr!
IF
(_isaddr
!=0x00) {
uinttempvalue
= _curaddr
+_curshift
-_curbegin
; //_curaddr+_curshift-_BASEADDR;
fwrite((PBYTE
)&uinttempvalue
, 4, 1, _forg
);
}; //
;;uinttempvalue
= (UINT
)_value
[_nvalues
]; //(UINT)asmpopvalue()
;;writefout
((BYTE
)uinttempvalue
); //compatible version (эх _SIZEOF_UINT, Є.ъ. ЄєЄ эрфю ЁрчьхЁ фы ЄрЁухЄр!)
;;writefout
((BYTE
)(uinttempvalue
>>8)); //compatible version (эх _SIZEOF_UINT, Є.ъ. ЄєЄ эрфю ЁрчьхЁ фы ЄрЁухЄр!)
;;writefout
((BYTE
)(uinttempvalue
>>16)); //compatible version (эх _SIZEOF_UINT, Є.ъ. ЄєЄ эрфю ЁрчьхЁ фы ЄрЁухЄр!)
;;writefout
((BYTE
)(uinttempvalue
>>24)); //compatible version (эх _SIZEOF_UINT, Є.ъ. ЄєЄ эрфю ЁрчьхЁ фы ЄрЁухЄр!)
/*fwrite((PBYTE)&_value[_nvalues], 4, 1, _fout);*/ //fast version (little endian) (эх _SIZEOF_UINT, Є.ъ. ЄєЄ эрфю ЁрчьхЁ фы ЄрЁухЄр!)
};
_curaddr
= _curaddr
+ 4; //эх _SIZEOF_UINT, Є.ъ. ЄєЄ эрфю ЁрчьхЁ фы ЄрЁухЄр!
}
PROC asmlong
(LONG value
) //Ёрчэр ЁрчЁ фэюёЄ№ LONG/DL
{
asmbyte
((BYTE
)value
); //compatible version
asmbyte
((BYTE
)((UINT
)value
>>8)); //compatible version
asmbyte
((BYTE
)(value
>>16L)); //compatible version
asmbyte
((BYTE
)(value
>>24L)); //compatible version
asmbyte
((BYTE
)(value
>>32L)); //compatible version
asmbyte
((BYTE
)(value
>>40L)); //compatible version
asmbyte
((BYTE
)(value
>>48L)); //compatible version
asmbyte
((BYTE
)(value
>>56L)); //compatible version
}
PROC asmorgword
(LONG addr
) //Ёрчэр ЁрчЁ фэюёЄ№ POINTER
{
//todo ORG
}
PROC asmdispbshort
(INT ivalue
) //фы ъюЁюЄъшї яхЁхїюфют (-100..+100?) //ivalue = ёьх∙хэшх рфЁхёр
//Bcc addr
//%1101 cccc LLLL LLLL
//L фюьэюцрхЄё фю 2 ш яЁшсрты хЄё ъ PC+4!!! (схч юъЁєуыхэш фю 4)
{
IF
((UINT
)(ivalue
+ (INT
)0x0100) >= 0x0200) { //todo test
errstr
("far bcc +d"); enderr
();
};
asmbyte
((BYTE
)(ivalue
>>1)); //юс чрЄхы№эю чряшёрЄ№, шэрўх яюхфєЄ рфЁхёр!
asmbyte
(_base
); //юс чрЄхы№эю чряшёрЄ№, шэрўх яюхфєЄ рфЁхёр!
}
PROC asmdispb
(INT ivalue
) //фы ъюЁюЄъшї яхЁхїюфют (-800..+800) //ivalue = ёьх∙хэшх рфЁхёр
//B addr
//%1110 0sLL LLLL LLLL (S ё фюяюыэхэшхь фю 2)
//L фюьэюцрхЄё фю 2 ш яЁшсрты хЄё ъ PC+4!!! (схч юъЁєуыхэш фю 4)
{
VAR UINT uvalue
;
IF
((UINT
)(ivalue
+ (INT
)0x0800) >= 0x1000) {
errstr
("far b +d"); enderr
();
};
uvalue
= (UINT
)ivalue
>>1;
asmbyte
((BYTE
)uvalue
); //юс чрЄхы№эю чряшёрЄ№, шэрўх яюхфєЄ рфЁхёр!
asmbyte
(((BYTE
)((UINT
)uvalue
>>8)&0x07) + _base
); //юс чрЄхы№эю чряшёрЄ№, шэрўх яюхфєЄ рфЁхёр!
}
PROC asmdispbl
(LONG ivalue
) //фы фышээ√ї яхЁхїюфют (-400000..+400000) //ivalue = ёьх∙хэшх рфЁхёр
//%1111 0sHH HHHH HHHH
//%1111 1LLL LLLL LLLL
//HL фюьэюцрхЄё фю 2 ш яЁшсрты хЄё ъ PC яюёых ъюэЎр ъюьрэф√, Є.х. PC+4 (схч юъЁєуыхэш фю 4)
{
IF
((UINT
)(ivalue
+ (INT
)0x400000) >= 0x800000) {
errstr
("far bl +d"); enderr
();
};
asmbyte
((BYTE
)(ivalue
>>12L));
asmbyte
(((BYTE
)(ivalue
>>20L)&0x07) + 0xf0);
asmbyte
((BYTE
)(ivalue
>>1L));
asmbyte
(((BYTE
)(ivalue
>>9L)&0x07) + 0xf8);
}
PROC asmdispconst
(UINT uvalue
) //фы ёё√ыъш эр ъюэёЄрэЄ√ (0..+400) //uvalue = ёьх∙хэшх рфЁхёр
{
IF
(uvalue
>= 0x0400) {
errstr
("far const +d"); enderr
();
};
asmbyte
((BYTE
)(uvalue
>>2)); //юс чрЄхы№эю чряшёрЄ№, шэрўх яюхфєЄ рфЁхёр!
}
PROC asmdispconstpopvalue
()
{
asmdispconst
((INT
)asmpopvalue
());
}
PROC err_onlylowregs
()
{
IF
((_reg
>=0x08) || (_oldreg
>=0x08)) errwrongreg
();
}
PROC err_onlylowregs_forbidden
()
{
IF
((_reg
<0x08) && (_oldreg
<0x08)) errwrongreg
();
}
PROC initmemmodel
()
{
//_curaddr = _BASEADDR;
}