exec.cの実行ルーチンを関数ポインタでの記述に変更し、整理
[YACASL2.git] / include / exec.h
1 #ifndef YACASL2_EXEC_INCLUDED
2 #define YACASL2_EXEC_INCLUDED
3
4 #include <stdbool.h>
5 #include "struct.h"
6 #include "word.h"
7
8 enum {
9     INSIZE = 256    /**<IN命令の、入力領域 */
10 };
11
12 /**
13  * 実行モード型
14  */
15 typedef struct {
16     bool trace;           /**<レジストリの内容を表示する場合はtrue */
17     bool logical;         /**<レジストリの内容を論理値(0から65535)で表示する場合はtrue */
18     bool dump;            /**<メモリの内容を表示する場合はtrue */
19 } EXECMODE;
20
21 /**
22  * 実行モード: trace, logical, dump
23  */
24 extern EXECMODE execmode;
25
26 /**
27  * 実行エラーをエラーリストに追加
28  */
29 void addcerrlist_exec();
30
31 /**
32  * アセンブル結果読み込みエラーをエラーリストに追加
33  */
34 void addcerrlist_load();
35
36 /**
37  * 指定されたファイルからアセンブル結果を読み込む
38  */
39 bool loadassemble(char *file);
40
41 /**
42  * COMET II仮想マシンのリセット
43  */
44 void reset();
45
46 /**
47  * NOP命令。語長1(OPのみ)
48  */
49 void nop();
50
51 /**
52  * LD命令 - オペランドr,adr,x。語長2
53  */
54 void ld_r_adr_x();
55
56 /**
57  * LD命令 - オペランドr1,r2。語長1
58  */
59 void ld_r1_r2();
60
61 /**
62  * ST命令。語長2
63  */
64 void st();
65
66 /**
67  * LAD命令。語長2
68  */
69 void lad();
70
71 /**
72  * ADDA命令 - オペランドr,adr,x。語長2
73  */
74 void adda_r_adr_x();
75
76 /**
77  * ADDA命令 - オペランドr1,r2。語長1
78  */
79 void adda_r1_r2();
80
81 /**
82  * SUBA命令 - オペランドr,adr,x。語長2
83  */
84 void suba_r_adr_x();
85
86 /**
87  * SUBA命令 - オペランドr1,r2。語長1
88  */
89 void suba_r1_r2();
90
91 /**
92  * ADDL命令のテンプレート
93  */
94 void addl(const WORD r, const WORD val);
95
96 /**
97  * ADDL命令 - オペランドr,adr,x。語長2
98  */
99 void addl_r_adr_x();
100
101 /**
102  * ADDL命令 - オペランドr1,r2。語長1
103  */
104 void addl_r1_r2();
105
106 /**
107  * SUBL命令 - オペランドr,adr,x。語長2
108  */
109 void subl_r_adr_x();
110
111 /**
112  * SUBL命令 - オペランドr1,r2。語長1
113  */
114 void subl_r1_r2();
115
116 /**
117  * AND命令 - オペランドr,adr,x。語長2
118  */
119 void and_r_adr_x();
120
121 /**
122  * AND命令 - オペランドr1,r2。語長1
123  */
124 void and_r1_r2();
125
126 /**
127  * OR命令 - オペランドr,adr,x。語長2
128  */
129 void or_r_adr_x();
130
131 /**
132  * OR命令 - オペランドr1,r2。語長1
133  */
134 void or_r1_r2();
135
136 /**
137  * XOR命令 - オペランドr,adr,x。語長2
138  */
139 void xor_r_adr_x();
140
141 /**
142  * XOR命令 - オペランドr1,r2。語長1
143  */
144 void xor_r1_r2();
145
146 /**
147  * CPA命令 - オペランドr,adr,x。語長2
148  */
149 void cpa_r_adr_x();
150
151 /**
152  * CPA命令 - オペランドr1,r2。語長1
153  */
154 void cpa_r1_r2();
155
156 /**
157  * CPL命令のテンプレート
158  */
159 void cpl(const WORD r, const WORD val);
160
161 /**
162  * CPL命令 - オペランドr,adr,x。語長2
163  */
164 void cpl_r_adr_x();
165
166 /**
167  * CPL命令 - オペランドr1,r2。語長1
168  */
169 void cpl_r1_r2();
170
171 /**
172  * SLA命令 - オペランドr,adr,x。語長2
173  * 算術演算なので、第15ビットは送り出されない
174  */
175 void sla();
176
177 /**
178  * SRA命令 - オペランドr,adr,x。語長2
179  * 算術演算なので、第15ビットは送り出されない
180  * 空いたビット位置には符号と同じものが入る
181  */
182 void sra();
183
184 /**
185  * SLL命令 - オペランドr,adr,x。語長2
186  */
187 void sll();
188
189 /**
190  * SRL命令 - オペランドr,adr,x。語長2
191  */
192 void srl();
193
194 /**
195  * JPL命令。語長2
196  */
197 void jpl();
198
199 /**
200  * JMI命令。語長2
201  */
202 void jmi();
203
204 /**
205  * JNZ命令。語長2
206  */
207 void jnz();
208
209 /**
210  * JZE命令。語長2
211  */
212 void jze();
213
214 /**
215  * JOV命令。語長2
216  */
217 void jov();
218
219 /**
220  * JUMP命令。語長2
221  */
222 void jump();
223
224 /**
225  * PUSH命令。語長2
226  */
227 void push();
228
229 /**
230  * POP命令。語長1
231  */
232 void pop();
233
234 /**
235  * CALL命令。語長2
236  */
237 void call();
238
239 /**
240  * RET命令。語長1(OPのみ)
241  */
242 void ret();
243
244 /**
245  * SVC命令。語長2
246  */
247 void svc();
248
249 /**
250  * COMET II仮想マシンの実行
251  */
252 bool exec();
253
254 /**
255  * COMET IIのメモリを表示
256  */
257 void dumpmemory();
258
259 /**
260  * COMET IIのレジスタを表示
261  */
262 void dspregister();
263
264 #endif            /* YACASL2_EXEC_INCLUDEDの終端 */