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