//// ьр°шээючртшёшь√х яЁюЎхфєЁ√ ш юс· тыхэш
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;
}