Login

Subversion Repositories NedoOS

Rev

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;
}