COMETII命令実行部分を、switch文から関数ポインタへ変更
[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命令
48  */
49 void nop(const WORD r, const WORD v);
50
51 /**
52  * LD命令
53  */
54 void ld(const WORD r, const WORD v);
55
56 /**
57  * ST命令
58  */
59 void st(const WORD r, const WORD v);
60
61 /**
62  * LAD命令
63  */
64 void lad(const WORD r, const WORD v);
65
66 /**
67  * ADDA命令
68  */
69 void adda(const WORD r, const WORD v);
70
71 /**
72  * SUBA命令
73  */
74 void suba(const WORD r, const WORD v);
75
76 /**
77  * ADDL命令
78  */
79 void addl(const WORD r, const WORD v);
80
81 /**
82  * SUBL命令
83  */
84 void subl(const WORD r, const WORD v);
85
86 /**
87  * AND命令
88  */
89 void and(const WORD r, const WORD v);
90
91 /**
92  * OR命令
93  */
94 void or(const WORD r, const WORD v);
95
96 /**
97  * XOR命令
98  */
99 void xor(const WORD r, const WORD v);
100
101 /**
102  * CPA命令
103  */
104 void cpa(const WORD r, const WORD v);
105
106 /**
107  * CPL命令
108  */
109 void cpl(const WORD r, const WORD v);
110
111 /**
112  * SLA命令
113  */
114 void sla(const WORD r, const WORD v);
115
116 /**
117  * SRA命令
118  */
119 void sra(const WORD r, const WORD v);
120
121 /**
122  * SLL命令
123  */
124 void sll(const WORD r, const WORD v);
125
126 /**
127  * SRL命令
128  */
129 void srl(const WORD r, const WORD v);
130
131 /**
132  * JMI命令
133  */
134 void jmi(const WORD r, const WORD v);
135
136 /**
137  * JNZ命令
138  */
139 void jnz(const WORD r, const WORD v);
140
141 /**
142  * JZE命令
143  */
144 void jze(const WORD r, const WORD v);
145
146 /**
147  * JUMP命令
148  */
149 void jump(const WORD r, const WORD v);
150
151 /**
152  * JPL命令
153  */
154 void jpl(const WORD r, const WORD v);
155
156 /**
157  * JOV命令
158  */
159 void jov(const WORD r, const WORD v);
160
161 /**
162  * PUSH命令
163  */
164 void push(const WORD r, const WORD v);
165
166 /**
167  * POP命令
168  */
169 void pop(const WORD r, const WORD v);
170
171 /**
172  * CALL命令
173  */
174 void call(const WORD r, const WORD v);
175
176 /**
177  * RET命令
178  */
179 void ret(const WORD r, const WORD v);
180
181 /**
182  * SVC命令
183  */
184 void svc(const WORD r, const WORD v);
185
186
187 /**
188  * COMET II仮想マシンの実行
189  */
190 bool exec();
191
192 /**
193  * COMET IIのメモリを表示
194  */
195 void dumpmemory();
196
197 /**
198  * COMET IIのレジスタを表示
199  */
200 void dspregister();
201
202 #endif            /* YACASL2_EXEC_INCLUDEDの終端 */