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