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