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