ソースを整理
[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(const 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命令 - オペランドr,adr,x。語長2
93  */
94 void addl_r_adr_x();
95
96 /**
97  * ADDL命令 - オペランドr1,r2。語長1
98  */
99 void addl_r1_r2();
100
101 /**
102  * SUBL命令 - オペランドr,adr,x。語長2
103  */
104 void subl_r_adr_x();
105
106 /**
107  * SUBL命令 - オペランドr1,r2。語長1
108  */
109 void subl_r1_r2();
110
111 /**
112  * AND命令 - オペランドr,adr,x。語長2
113  */
114 void and_r_adr_x();
115
116 /**
117  * AND命令 - オペランドr1,r2。語長1
118  */
119 void and_r1_r2();
120
121 /**
122  * OR命令 - オペランドr,adr,x。語長2
123  */
124 void or_r_adr_x();
125
126 /**
127  * OR命令 - オペランドr1,r2。語長1
128  */
129 void or_r1_r2();
130
131 /**
132  * XOR命令 - オペランドr,adr,x。語長2
133  */
134 void xor_r_adr_x();
135
136 /**
137  * XOR命令 - オペランドr1,r2。語長1
138  */
139 void xor_r1_r2();
140
141 /**
142  * CPA命令 - オペランドr,adr,x。語長2
143  */
144 void cpa_r_adr_x();
145
146 /**
147  * CPA命令 - オペランドr1,r2。語長1
148  */
149 void cpa_r1_r2();
150
151 /**
152  * CPL命令 - オペランドr,adr,x。語長2
153  */
154 void cpl_r_adr_x();
155
156 /**
157  * CPL命令 - オペランドr1,r2。語長1
158  */
159 void cpl_r1_r2();
160
161 /**
162  * SLA命令 - オペランドr,adr,x。語長2
163  * 算術演算なので、第15ビットは送り出されない
164  */
165 void sla();
166
167 /**
168  * SRA命令 - オペランドr,adr,x。語長2
169  * 算術演算なので、第15ビットは送り出されない
170  * 空いたビット位置には符号と同じものが入る
171  */
172 void sra();
173
174 /**
175  * SLL命令 - オペランドr,adr,x。語長2
176  */
177 void sll();
178
179 /**
180  * SRL命令 - オペランドr,adr,x。語長2
181  */
182 void srl();
183
184 /**
185  * JPL命令。語長2
186  */
187 void jpl();
188
189 /**
190  * JMI命令。語長2
191  */
192 void jmi();
193
194 /**
195  * JNZ命令。語長2
196  */
197 void jnz();
198
199 /**
200  * JZE命令。語長2
201  */
202 void jze();
203
204 /**
205  * JOV命令。語長2
206  */
207 void jov();
208
209 /**
210  * JUMP命令。語長2
211  */
212 void jump();
213
214 /**
215  * PUSH命令。語長2
216  */
217 void push();
218
219 /**
220  * POP命令。語長1
221  */
222 void pop();
223
224 /**
225  * CALL命令。語長2
226  */
227 void call();
228
229 /**
230  * RET命令。語長1(OPのみ)
231  */
232 void ret();
233
234 /**
235  * SVC命令。語長2
236  */
237 void svc();
238
239 /**
240  * COMET II仮想マシンの実行
241  */
242 bool exec();
243
244 /**
245  * COMET IIのメモリを表示
246  */
247 void dumpmemory();
248
249 /**
250  * COMET IIのレジスタを表示
251  */
252 void dspregister();
253
254 #endif            /* YACASL2_EXEC_INCLUDEDの終端 */