X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=include%2Fassemble.h;h=eb0ab28b48f1e547e2580e83a1088cab4de46fba;hp=7c6b347a0739cf496a6756f11f5187b91fd19727;hb=7d5e10034319b163596c9f5930e333fc87043271;hpb=e0de529cf2de73a298288fd294b24b964abdba34 diff --git a/include/assemble.h b/include/assemble.h index 7c6b347..eb0ab28 100644 --- a/include/assemble.h +++ b/include/assemble.h @@ -21,36 +21,49 @@ typedef struct { bool asdetail; /* アセンブラ詳細結果を表示する場合はtrue */ bool onlyassemble; /* アセンブルだけを行う場合はtrue */ } ASMODE; -extern ASMODE asmode; -/* 値を格納するポインタ */ -extern WORD ptr; +extern ASMODE asmode; -/* リテラル(=付きの値)を格納するポインタ */ -extern WORD lptr; +/* アセンブル時のプロパティ */ +typedef struct { + WORD ptr; /* 現在のポインタ */ + WORD lptr; /* リテラル(=付きの値)を格納するポインタ */ + char *prog; /* 他のプログラムで参照する入口名 */ +} ASPROP; -/* 他のプログラムで参照する入口名 */ -extern char *prog; +extern ASPROP *asprop; -/* アセンブラ命令とマクロ命令を表す番号 */ +/* アセンブラ命令を表す番号 */ typedef enum { START = 01, END = 02, DS = 03, DC = 04, +} ASCMDID; + +/* アセンブラ命令を表す配列 */ +typedef struct { + ASCMDID cmdid; + int opdc_min; + int opdc_max; + char *cmd; +} ASCMD; + +/* マクロ命令を表す番号 */ +typedef enum { IN = 011, OUT = 012, RPUSH = 013, RPOP = 014, -} CASLCMD; +} MACROCMDID; -/* アセンブラ命令とマクロ命令を表す配列 */ +/* マクロ命令を表す配列 */ typedef struct { - CASLCMD cmdid; + MACROCMDID cmdid; int opdc_min; int opdc_max; char *cmd; -} CMDARRAY; +} MACROCMD; /* ラベル配列 */ typedef struct { @@ -77,6 +90,9 @@ typedef enum { SECOND = 1, } PASS; +/* アセンブルのエラー定義 */ +bool addcerrlist_assemble(); + /* プログラム名とラベルに対応するハッシュ値を返す */ unsigned labelhash(const char *prog, const char *label); @@ -144,16 +160,16 @@ void writestr(const char *str, bool literal, PASS pass); /* アセンブラ命令DCをメモリに書込 */ void writeDC(const char *str, PASS pass); -/* 命令がアセンブラ命令の場合は処理を実行する。 - 実行に成功した場合TRUE、それ以外の場合はFALSEを返す */ +/* 命令がアセンブラ命令の場合は処理を実行する。 */ +/* 実行に成功した場合TRUE、それ以外の場合はFALSEを返す */ bool assemblecmd(const CMDLINE *cmdl, PASS pass); /* 命令のコードを返す 命令が無効な場合は0xFFFF */ WORD getcmd(CMDTYPE type, const char *cmd); -/* 命令が機械語命令の場合は処理を実行 - 実行に成功した場合TRUE、それ以外の場合はFALSEを返す */ +/* 命令が機械語命令の場合は処理を実行 */ +/* 実行に成功した場合TRUE、それ以外の場合はFALSEを返す */ bool cometcmd(const CMDLINE *cmdl, PASS pass); /* 1行のアセンブル */