1 #ifndef YACASL2_ASSEMBLE_INCLUDED
2 #define YACASL2_ASSEMBLE_INCLUDED
6 LABELSIZE = 8, /* ラベルの最大文字数 */
7 OPDSIZE = 40, /* オペラントの最大数。CASL IIシミュレータの制限 */
12 LINESIZE = 1024, /* 行の最大文字数 */
13 TOKENSIZE = 256, /* トークンの最大文字数 */
18 bool src; /* ソースを表示する場合はtrue */
19 bool label; /* ラベル表を表示する場合はtrue */
20 bool onlylabel; /* ラベル表を表示して終了する場合はtrue */
21 bool asdetail; /* アセンブラ詳細結果を表示する場合はtrue */
22 bool onlyassemble; /* アセンブルだけを行う場合はtrue */
29 WORD ptr; /* 現在のポインタ */
30 WORD lptr; /* リテラル(=付きの値)を格納するポインタ */
31 char *prog; /* 他のプログラムで参照する入口名 */
34 extern ASPROP *asprop;
36 /* アセンブラ命令とマクロ命令を表す番号 */
48 /* アセンブラ命令とマクロ命令を表す配列 */
64 typedef struct _LABELTAB {
65 struct _LABELTAB *next;
72 LABELTABSIZE = 251, /* ラベル表のサイズ */
75 /* アセンブラが、1回目か、2回目か、を表す */
82 bool addcerrlist_assemble();
84 /* プログラム名とラベルに対応するハッシュ値を返す */
85 unsigned labelhash(const char *prog, const char *label);
87 /* プログラム名とラベルに対応するアドレスをラベル表から検索する */
88 WORD getlabel(const char *prog, const char *label);
91 bool addlabel(const char *prog, const char *label, WORD word);
112 /* 命令がマクロ命令の場合はメモリに書込
113 書込に成功した場合TRUE、それ以外の場合はFALSEを返す */
114 bool macrocmd(const CMDLINE *cmdl, PASS pass);
116 /* 「,」区切りの文字列から、オペランドを取得する */
117 OPD *opdtok(const char *str);
120 CMDLINE *linetok(const char *line);
122 /* 汎用レジスタを表す文字列「GR[0-7]」から、レジスタ番号[0-7]をWORD値で返す */
123 /* 文字列が汎用レジスタを表さない場合は、0xFFFFを返す */
124 /* is_xがtrueの場合は指標レジスタ。GR0は、COMET IIの仕様により、エラー発生 */
125 WORD getgr(const char *str, bool is_x);
128 WORD getint(const char *str);
131 WORD gethex(const char *str);
134 /* アドレスには、リテラル/10進定数/16進定数/アドレス定数が含まれる */
135 WORD getadr(const char *prog, const char *str, PASS pass);
137 /* 定数の前に等号(=)をつけて記述される、リテラルを返す */
138 /* リテラルには、10進定数/16進定数/文字定数が含まれる */
139 WORD getliteral(const char *str, PASS pass);
141 /* COMET IIのメモリにアドレス値を書き込む */
142 bool writememory(WORD word, WORD adr, PASS pass);
144 /* ' 'で囲まれた、文字定数をメモリに書込 */
145 /* DC命令とリテラルで使い、リテラルの場合はリテラル領域に書込 */
146 void writestr(const char *str, bool literal, PASS pass);
148 /* アセンブラ命令DCをメモリに書込 */
149 void writeDC(const char *str, PASS pass);
151 /* 命令がアセンブラ命令の場合は処理を実行する。
152 実行に成功した場合TRUE、それ以外の場合はFALSEを返す */
153 bool assemblecmd(const CMDLINE *cmdl, PASS pass);
157 WORD getcmd(CMDTYPE type, const char *cmd);
160 実行に成功した場合TRUE、それ以外の場合はFALSEを返す */
161 bool cometcmd(const CMDLINE *cmdl, PASS pass);
164 /* アセンブル完了時はTRUE、未完了時はFALSEを返す */
165 bool assembleline(const CMDLINE *cmdl, PASS pass);
167 /* 指定された名前のファイルをアセンブル */
169 bool assemble(const char *file, PASS pass);
171 /* マクロ命令「IN IBUF,LEN」をメモリに書込 */
172 bool writeIN(const char *ibuf, const char *len, PASS pass);
174 /* マクロ命令「OUT OBUF,LEN」をメモリに書込 */
175 bool writeOUT(const char *obuf, const char *len, PASS pass);
177 /* マクロ命令「RPUSH」をメモリに書込 */
178 bool writeRPUSH(PASS pass);
180 /* マクロ命令「RPOP」をメモリに書込 */
181 bool writeRPOP(PASS pass);
183 #endif /* YACASL2_ASSEMBLE_INCLUDEDの終端 */