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