ソースコードの推敲
[YACASL2.git] / include / exec.h
1 #ifndef YACASL2_EXEC_INCLUDED
2 #define YACASL2_EXEC_INCLUDED
3
4 #include <stdbool.h>
5 #include <stdio.h>
6 #include <assert.h>
7 #include <time.h>
8 #include "struct.h"
9 #include "word.h"
10 #include "cmem.h"
11 #include "cerr.h"
12 #include "monitor.h"
13 #include "disassemble.h"
14
15 enum {
16     INSIZE = 256    /**<IN命令の、入力領域 */
17 };
18
19 /**
20  * @brief 実行モードを表すデータ型
21  */
22 typedef struct {
23     bool trace;           /**<レジストリの内容をステップごとに表示する場合はtrue */
24     bool logical;         /**<レジストリの内容を論理値(0から65535)で表示する場合はtrue */
25     bool dump;            /**<メモリの内容をステップごとに表示する場合はtrue */
26     int dump_start;       /**<メモリの内容をステップごとに表示する場合の開始アドレス */
27     int dump_end;         /**<メモリの内容をステップごとに表示する場合の終了アドレス */
28     bool monitor;         /**<モニターモードの場合はtrue */
29     bool step;            /**<ステップ実行の場合はtrue */
30 } EXECMODE;
31
32 /**
33  * @brief 実行モード: trace, logical, dump, monitor, step
34  */
35 extern EXECMODE execmode;
36
37 /**
38  * @brief 実行エラーをエラーリストに追加する
39  */
40 void addcerrlist_exec();
41
42 /**
43  * @brief 指定されたファイルからアセンブル結果を読み込む
44  *
45  * @return 読み込み終了アドレス。読み込めなかった場合は、0
46  *
47  * @param file 読み込むファイル名
48  * @param start 読み込み開始アドレス
49  */
50 WORD loadassemble(const char *file, WORD start);
51
52 /**
53  * @class Exec
54  * @brief execから関数ポインタで呼び出される関数
55  * @relatesalso exec
56  **/
57
58 /**
59  * @brief COMET II仮想マシンを実行する
60  *
61  * @relatesalso Exec
62  *
63  * @return なし
64  */
65 void exec();
66
67 /**
68  * @brief NOP命令。語長1(OPのみ)
69  * @relatesalso Exec
70  *
71  * @return なし
72  */
73 void nop();
74
75 /**
76  * @brief LD命令 - オペランドr,adr,x。語長2
77  * @relatesalso Exec
78  *
79  * @return なし
80  */
81 void ld_r_adr_x();
82
83 /**
84  * @brief LD命令 - オペランドr1,r2。語長1
85  * @relatesalso Exec
86  *
87  * @return なし
88  */
89 void ld_r1_r2();
90
91 /**
92  * @brief ST命令。語長2
93  * @relatesalso Exec
94  *
95  * @return なし
96  */
97 void st();
98
99 /**
100  * @brief LAD命令。語長2
101  * @relatesalso Exec
102  *
103  * @return なし
104  */
105 void lad();
106
107 /**
108  * @brief ADDA命令 - オペランドr,adr,x。語長2
109  * @relatesalso Exec
110  *
111  * @return なし
112  */
113 void adda_r_adr_x();
114
115 /**
116  * @brief ADDA命令 - オペランドr1,r2。語長1
117  * @relatesalso Exec
118  *
119  * @return なし
120  */
121 void adda_r1_r2();
122
123 /**
124  * @brief SUBA命令 - オペランドr,adr,x。語長2
125  * @relatesalso Exec
126  *
127  * @return なし
128  */
129 void suba_r_adr_x();
130
131 /**
132  * @brief SUBA命令 - オペランドr1,r2。語長1
133  * @relatesalso Exec
134  *
135  * @return なし
136  */
137 void suba_r1_r2();
138
139 /**
140  * @brief ADDL命令 - オペランドr,adr,x。語長2
141  * @relatesalso Exec
142  *
143  * @return なし
144  */
145 void addl_r_adr_x();
146
147 /**
148  * @brief ADDL命令 - オペランドr1,r2。語長1
149  * @relatesalso Exec
150  *
151  * @return なし
152  */
153 void addl_r1_r2();
154
155 /**
156  * @brief SUBL命令 - オペランドr,adr,x。語長2
157  * @relatesalso Exec
158  *
159  * @return なし
160  */
161 void subl_r_adr_x();
162
163 /**
164  * @brief SUBL命令 - オペランドr1,r2。語長1
165  * @relatesalso Exec
166  *
167  * @return なし
168  */
169 void subl_r1_r2();
170
171 /**
172  * @brief AND命令 - オペランドr,adr,x。語長2
173  * @relatesalso Exec
174  *
175  * @return なし
176  */
177 void and_r_adr_x();
178
179 /**
180  * @brief AND命令 - オペランドr1,r2。語長1
181  * @relatesalso Exec
182  *
183  * @return なし
184  */
185 void and_r1_r2();
186
187 /**
188  * @brief OR命令 - オペランドr,adr,x。語長2
189  * @relatesalso Exec
190  *
191  * @return なし
192  */
193 void or_r_adr_x();
194
195 /**
196  * @brief OR命令 - オペランドr1,r2。語長1
197  * @relatesalso Exec
198  *
199  * @return なし
200  */
201 void or_r1_r2();
202
203 /**
204  * @brief XOR命令 - オペランドr,adr,x。語長2
205  * @relatesalso Exec
206  *
207  * @return なし
208  */
209 void xor_r_adr_x();
210
211 /**
212  * @brief XOR命令 - オペランドr1,r2。語長1
213  * @relatesalso Exec
214  *
215  * @return なし
216  */
217 void xor_r1_r2();
218
219 /**
220  * @brief CPA命令 - オペランドr,adr,x。語長2
221  * @relatesalso Exec
222  *
223  * @return なし
224  */
225 void cpa_r_adr_x();
226
227 /**
228  * @brief CPA命令 - オペランドr1,r2。語長1
229  * @relatesalso Exec
230  *
231  * @return なし
232  */
233 void cpa_r1_r2();
234
235 /**
236  * @brief CPL命令 - オペランドr,adr,x。語長2
237  * @relatesalso Exec
238  *
239  * @return なし
240  */
241 void cpl_r_adr_x();
242
243 /**
244  * @brief CPL命令 - オペランドr1,r2。語長1
245  * @relatesalso Exec
246  *
247  * @return なし
248  */
249 void cpl_r1_r2();
250
251 /**
252  * @brief SLA命令 - オペランドr,adr,x。語長2
253  *
254  * 算術演算なので、第15ビットは送り出されない
255  * @relatesalso Exec
256  *
257  * @return なし
258  */
259 void sla();
260
261 /**
262  * @brief SRA命令 - オペランドr,adr,x。語長2
263  *
264  * 算術演算なので、第15ビットは送り出されない
265  * 空いたビット位置には符号と同じものが入る
266  * @relatesalso Exec
267  *
268  * @return なし
269  */
270 void sra();
271
272 /**
273  * @brief SLL命令 - オペランドr,adr,x。語長2
274  * @relatesalso Exec
275  *
276  * @return なし
277  */
278 void sll();
279
280 /**
281  * @brief SRL命令 - オペランドr,adr,x。語長2
282  * @relatesalso Exec
283  *
284  * @return なし
285  */
286 void srl();
287
288 /**
289  * @brief JPL命令。語長2
290  * @relatesalso Exec
291  *
292  * @return なし
293  */
294 void jpl();
295
296 /**
297  * @brief JMI命令。語長2
298  * @relatesalso Exec
299  *
300  * @return なし
301  */
302 void jmi();
303
304 /**
305  * @brief JNZ命令。語長2
306  * @relatesalso Exec
307  *
308  * @return なし
309  */
310 void jnz();
311
312 /**
313  * @brief JZE命令。語長2
314  * @relatesalso Exec
315  *
316  * @return なし
317  */
318 void jze();
319
320 /**
321  * @brief JOV命令。語長2
322  * @relatesalso Exec
323  *
324  * @return なし
325  */
326 void jov();
327
328 /**
329  * @brief JUMP命令。語長2
330  * @relatesalso Exec
331  *
332  * @return なし
333  */
334 void jump();
335
336 /**
337  * @brief PUSH命令。語長2
338  * @relatesalso Exec
339  *
340  * @return なし
341  */
342 void push();
343
344 /**
345  * @brief POP命令。語長1
346  * @relatesalso Exec
347  *
348  * @return なし
349  */
350 void pop();
351
352 /**
353  * @brief CALL命令。語長2
354  * @relatesalso Exec
355  *
356  * @return なし
357  */
358 void call();
359
360 /**
361  * @brief RET命令。語長1(OPのみ)
362  * @relatesalso Exec
363  *
364  * @return なし
365  */
366 void ret();
367
368 /**
369  * @brief SVC命令。語長2
370  * @relatesalso Exec
371  *
372  * @return なし
373  */
374 void svc();
375
376 /**
377  * @brief COMET IIのメモリを表示する
378  *
379  * @return なし
380  *
381  * @param start 表示の開始アドレス
382  * @param end 表示の終了アドレス
383  */
384 void dumpmemory(WORD start, WORD end);
385
386 /**
387  * @brief COMET IIのレジスタを表示する
388  *
389  * @return なし
390  */
391 void dspregister();
392
393 #endif            /* YACASL2_EXEC_INCLUDEDの終端 */