//// imported
 
#include "../_sdk/io.h"
 
#include "../_sdk/str.h" //stradd, strjoineol
 
#include "../_sdk/emit.h"
 
 
 
#ifdef TARGET_SCRIPT
 
#include <math.h>
 
#endif
 
 
 
EXTERN BYTE _token; //Єхъє∙шщ ёўшЄрээ√щ Єюъхэ
 
EXTERN BYTE _prefixedtoken; //Ёрё°шЇЁютрээ√щ Єюъхэ ё єў╕Єюь \n ш Є.я.
 
EXTERN BYTE _curdir; //Єюъхэ Єхъє∙хщ юсЁрсрЄ√трхьющ фшЁхъЄшт√ рёёхьсыхЁр (эєцэю фы  яЁртшы№эющ юсЁрсюЄъш ЇюЁьрЄр)
 
EXTERN BOOL _labelchanged; //Їыру "шчьхэшыш ьхЄъє" - эєцэю фы  ю°шсъш яю LABEL (эю эх яю REEQU)
 
EXTERN LONG _value[_MAXVALS];
 
EXTERN PBYTE _inclfile[_MAXINCLUDES];
 
 
 
EXTERN UINT _curlnbeg; //эюьхЁ ёЄЁюъш эр ьюьхэЄ эрўрыр Єюъхэр
 
 
 
EXTERN BYTE _reg; //яюёыхфэшщ ЁхушёЄЁ
 
EXTERN BYTE _oldreg; //яЁхф√фє∙шщ ЁхушёЄЁ
 
EXTERN BYTE _base; //срчр ъюфр ъюьрэф√
 
EXTERN BYTE _base2; //срчр2 ъюфр ъюьрэф√ (фы  єёыютэ√ї яхЁхїюфют)
 
 
 
EXTERN BYTE _nvalues; //ўшёыю чэрўхэшщ т ёЄхъх
 
EXTERN BYTE _ninclfiles; //ўшёыю юЄъЁ√Є√ї Їрщыют
 
 
 
EXTERN UINT _curaddr; //рфЁхё, ъєфр яш°хь
 
EXTERN UINT _curshift; //$=(_curaddr+curshift), curshift=(disp-_curaddr)
 
EXTERN UINT _curbegin; //эрўры№э√щ рфЁхё сыюър, ъєфр яш°хь
 
//EXTERN BYTE _curpage0;
 
//EXTERN BYTE _curpage1;
 
//EXTERN BYTE _curpage2;
 
//EXTERN BYTE _curpage3;
 
 
 
EXTERN PBYTE _pstr; //ьхЄър т ёЄЁюъх чрърэўштрхЄё  TOK_ENDTEXT
 
EXTERN PBYTE _curlabeltext;
 
EXTERN PBYTE _evallabeltext;
 
EXTERN PCHAR _fn;
 
EXTERN UINT _lenfn;
 
 
 
PROC asmpushvalue FORWARD(LONG value);
 
PROC asmpushbool FORWARD(BOOL b);
 
FUNC LONG asmpopvalue FORWARD();
 
//PROC asmwritestate FORWARD();
 
//PROC asmreadstate FORWARD();
 
PROC readlabel FORWARD();
 
FUNC UINT findlabel FORWARD(PBYTE labeltext);
 
FUNC LONG getlabel FORWARD(); //т√ч√трЄ№ эхяюёЁхфёЄтхээю яюёых findlabel!!!
 
PROC errwrongreg FORWARD();
 
PROC errwrongpar FORWARD();
 
PROC asmerrtext FORWARD();
 
PROC asmbyte FORWARD(BYTE _token);
 
PROC asmemitblock FORWARD(); //чряшёрЄ№ рфЁхёр сыюър org
 
PROC asmdir_label FORWARD();
 
PROC asmfmt_reequ FORWARD();
 
 
 
PROC asmreadprefixed FORWARD();
 
 
 
EXTERN PBYTE _fincb;
 
EXTERN BOOL _asms;
 
 
 
PROC decltoken FORWARD(BYTE bb);
 
PROC decldig FORWARD(UINT d);
 
 
 
EXTERN PBYTE _forg;
 
EXTERN PBYTE _fdecl;
 
 
 
EXTERN BYTE _isaddr; //ьрёър "т т√Ёрцхэшш шёяюы№чютрыё  рфЁхё"
 
 
 
EXTERN UINT _plabel_index; //яюёых findlabel ёюфхЁцшЄ єърчрЄхы№ эр эрўрыю фрээ√ї ьхЄъш
 
 
 
#ifdef TARGET_THUMB
 
#include "asmf_arm.c" //// ьр°шээючртшёшь√х яЁюЎхфєЁ√ ш юс· тыхэш 
 
#else
 
#include "asmf_z80.c" //// ьр°шээючртшёшь√х яЁюЎхфєЁ√ ш юс· тыхэш 
 
#endif
 
 
 
PROC asmloop()
 
{
 
VAR UINT scale; //яюърчрЄхы№ ёшёЄхь√ ёўшёыхэш 
 
#ifdef TARGET_SCRIPT
 
VAR double fvalue;
 
VAR LONG ffraction;
 
VAR LONG ffractionscale;
 
VAR LONG fexp;
 
VAR BOOL fexpminus;
 
#endif
 
VAR LONG tempvalue; //чэрўхэшх, ёўшЄрээюх яю popvalue ш ъюЄюЁюх яш°хь яю pushvalue
 
VAR UINT i;
 
  loop:
 
    _token = readfin();
 
    switch (_token) {
 
 
 
#include "asmj.c" //// ёЄрэфрЁЄэ√х тхЄъш
 
 
 
#ifdef TARGET_THUMB
 
#include "asmj_arm.c" //// ьр°шээючртшёшь√х тхЄъш
 
#else
 
#include "asmj_z80.c" //// ьр°шээючртшёшь√х тхЄъш
 
#endif
 
 
 
      default : {err((CHAR)_token); enderr(); goto loop;}
 
    };
 
  endloop:;
 
}