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