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