//// 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 fsm()
{
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:;
}