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