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