1 #ifdef CPUCORE_CPP
2 
op_read_const_b()3 template<void (CPUcore::*op)()> void CPUcore::op_read_const_b() {
4 L rd.l = op_readpc();
5   call(op);
6 }
7 
op_read_const_w()8 template<void (CPUcore::*op)()> void CPUcore::op_read_const_w() {
9   rd.l = op_readpc();
10 L rd.h = op_readpc();
11   call(op);
12 }
13 
op_read_bit_const_b()14 void CPUcore::op_read_bit_const_b() {
15 L rd.l = op_readpc();
16   regs.p.z = ((rd.l & regs.a.l) == 0);
17 }
18 
op_read_bit_const_w()19 void CPUcore::op_read_bit_const_w() {
20   rd.l = op_readpc();
21 L rd.h = op_readpc();
22   regs.p.z = ((rd.w & regs.a.w) == 0);
23 }
24 
op_read_addr_b()25 template<void (CPUcore::*op)()> void CPUcore::op_read_addr_b() {
26   aa.l = op_readpc();
27   aa.h = op_readpc();
28 L rd.l = op_readdbr(aa.w);
29   call(op);
30 }
31 
op_read_addr_w()32 template<void (CPUcore::*op)()> void CPUcore::op_read_addr_w() {
33   aa.l = op_readpc();
34   aa.h = op_readpc();
35   rd.l = op_readdbr(aa.w + 0);
36 L rd.h = op_readdbr(aa.w + 1);
37   call(op);
38 }
39 
op_read_addrx_b()40 template<void (CPUcore::*op)()> void CPUcore::op_read_addrx_b() {
41   aa.l = op_readpc();
42   aa.h = op_readpc();
43   op_io_cond4(aa.w, aa.w + regs.x.w);
44 L rd.l = op_readdbr(aa.w + regs.x.w);
45   call(op);
46 }
47 
op_read_addrx_w()48 template<void (CPUcore::*op)()> void CPUcore::op_read_addrx_w() {
49   aa.l = op_readpc();
50   aa.h = op_readpc();
51   op_io_cond4(aa.w, aa.w + regs.x.w);
52   rd.l = op_readdbr(aa.w + regs.x.w + 0);
53 L rd.h = op_readdbr(aa.w + regs.x.w + 1);
54   call(op);
55 }
56 
op_read_addry_b()57 template<void (CPUcore::*op)()> void CPUcore::op_read_addry_b() {
58   aa.l = op_readpc();
59   aa.h = op_readpc();
60   op_io_cond4(aa.w, aa.w + regs.y.w);
61 L rd.l = op_readdbr(aa.w + regs.y.w);
62   call(op);
63 }
64 
op_read_addry_w()65 template<void (CPUcore::*op)()> void CPUcore::op_read_addry_w() {
66   aa.l = op_readpc();
67   aa.h = op_readpc();
68   op_io_cond4(aa.w, aa.w + regs.y.w);
69   rd.l = op_readdbr(aa.w + regs.y.w + 0);
70 L rd.h = op_readdbr(aa.w + regs.y.w + 1);
71   call(op);
72 }
73 
op_read_long_b()74 template<void (CPUcore::*op)()> void CPUcore::op_read_long_b() {
75   aa.l = op_readpc();
76   aa.h = op_readpc();
77   aa.b = op_readpc();
78 L rd.l = op_readlong(aa.d);
79   call(op);
80 }
81 
op_read_long_w()82 template<void (CPUcore::*op)()> void CPUcore::op_read_long_w() {
83   aa.l = op_readpc();
84   aa.h = op_readpc();
85   aa.b = op_readpc();
86   rd.l = op_readlong(aa.d + 0);
87 L rd.h = op_readlong(aa.d + 1);
88   call(op);
89 }
90 
op_read_longx_b()91 template<void (CPUcore::*op)()> void CPUcore::op_read_longx_b() {
92   aa.l = op_readpc();
93   aa.h = op_readpc();
94   aa.b = op_readpc();
95 L rd.l = op_readlong(aa.d + regs.x.w);
96   call(op);
97 }
98 
op_read_longx_w()99 template<void (CPUcore::*op)()> void CPUcore::op_read_longx_w() {
100   aa.l = op_readpc();
101   aa.h = op_readpc();
102   aa.b = op_readpc();
103   rd.l = op_readlong(aa.d + regs.x.w + 0);
104 L rd.h = op_readlong(aa.d + regs.x.w + 1);
105   call(op);
106 }
107 
op_read_dp_b()108 template<void (CPUcore::*op)()> void CPUcore::op_read_dp_b() {
109   dp = op_readpc();
110   op_io_cond2();
111 L rd.l = op_readdp(dp);
112   call(op);
113 }
114 
op_read_dp_w()115 template<void (CPUcore::*op)()> void CPUcore::op_read_dp_w() {
116   dp = op_readpc();
117   op_io_cond2();
118   rd.l = op_readdp(dp + 0);
119 L rd.h = op_readdp(dp + 1);
120   call(op);
121 }
122 
op_read_dpr_b()123 template<void (CPUcore::*op)(), int n> void CPUcore::op_read_dpr_b() {
124   dp = op_readpc();
125   op_io_cond2();
126   op_io();
127 L rd.l = op_readdp(dp + regs.r[n].w);
128   call(op);
129 }
130 
op_read_dpr_w()131 template<void (CPUcore::*op)(), int n> void CPUcore::op_read_dpr_w() {
132   dp = op_readpc();
133   op_io_cond2();
134   op_io();
135 L rd.l = op_readdp(dp + regs.r[n].w + 0);
136   rd.h = op_readdp(dp + regs.r[n].w + 1);
137   call(op);
138 }
139 
op_read_idp_b()140 template<void (CPUcore::*op)()> void CPUcore::op_read_idp_b() {
141   dp = op_readpc();
142   op_io_cond2();
143   aa.l = op_readdp(dp + 0);
144   aa.h = op_readdp(dp + 1);
145 L rd.l = op_readdbr(aa.w);
146   call(op);
147 }
148 
op_read_idp_w()149 template<void (CPUcore::*op)()> void CPUcore::op_read_idp_w() {
150   dp = op_readpc();
151   op_io_cond2();
152   aa.l = op_readdp(dp + 0);
153   aa.h = op_readdp(dp + 1);
154   rd.l = op_readdbr(aa.w + 0);
155 L rd.h = op_readdbr(aa.w + 1);
156   call(op);
157 }
158 
op_read_idpx_b()159 template<void (CPUcore::*op)()> void CPUcore::op_read_idpx_b() {
160   dp = op_readpc();
161   op_io_cond2();
162   op_io();
163   aa.l = op_readdp(dp + regs.x.w + 0);
164   aa.h = op_readdp(dp + regs.x.w + 1);
165 L rd.l = op_readdbr(aa.w);
166   call(op);
167 }
168 
op_read_idpx_w()169 template<void (CPUcore::*op)()> void CPUcore::op_read_idpx_w() {
170   dp = op_readpc();
171   op_io_cond2();
172   op_io();
173   aa.l = op_readdp(dp + regs.x.w + 0);
174   aa.h = op_readdp(dp + regs.x.w + 1);
175   rd.l = op_readdbr(aa.w + 0);
176 L rd.h = op_readdbr(aa.w + 1);
177   call(op);
178 }
179 
op_read_idpy_b()180 template<void (CPUcore::*op)()> void CPUcore::op_read_idpy_b() {
181   dp = op_readpc();
182   op_io_cond2();
183   aa.l = op_readdp(dp + 0);
184   aa.h = op_readdp(dp + 1);
185   op_io_cond4(aa.w, aa.w + regs.y.w);
186 L rd.l = op_readdbr(aa.w + regs.y.w);
187   call(op);
188 }
189 
op_read_idpy_w()190 template<void (CPUcore::*op)()> void CPUcore::op_read_idpy_w() {
191   dp = op_readpc();
192   op_io_cond2();
193   aa.l = op_readdp(dp + 0);
194   aa.h = op_readdp(dp + 1);
195   op_io_cond4(aa.w, aa.w + regs.y.w);
196   rd.l = op_readdbr(aa.w + regs.y.w + 0);
197 L rd.h = op_readdbr(aa.w + regs.y.w + 1);
198   call(op);
199 }
200 
op_read_ildp_b()201 template<void (CPUcore::*op)()> void CPUcore::op_read_ildp_b() {
202   dp = op_readpc();
203   op_io_cond2();
204   aa.l = op_readdp(dp + 0);
205   aa.h = op_readdp(dp + 1);
206   aa.b = op_readdp(dp + 2);
207 L rd.l = op_readlong(aa.d);
208   call(op);
209 }
210 
op_read_ildp_w()211 template<void (CPUcore::*op)()> void CPUcore::op_read_ildp_w() {
212   dp = op_readpc();
213   op_io_cond2();
214   aa.l = op_readdp(dp + 0);
215   aa.h = op_readdp(dp + 1);
216   aa.b = op_readdp(dp + 2);
217   rd.l = op_readlong(aa.d + 0);
218 L rd.h = op_readlong(aa.d + 1);
219   call(op);
220 }
221 
op_read_ildpy_b()222 template<void (CPUcore::*op)()> void CPUcore::op_read_ildpy_b() {
223   dp = op_readpc();
224   op_io_cond2();
225   aa.l = op_readdp(dp + 0);
226   aa.h = op_readdp(dp + 1);
227   aa.b = op_readdp(dp + 2);
228 L rd.l = op_readlong(aa.d + regs.y.w);
229   call(op);
230 }
231 
op_read_ildpy_w()232 template<void (CPUcore::*op)()> void CPUcore::op_read_ildpy_w() {
233   dp = op_readpc();
234   op_io_cond2();
235   aa.l = op_readdp(dp + 0);
236   aa.h = op_readdp(dp + 1);
237   aa.b = op_readdp(dp + 2);
238   rd.l = op_readlong(aa.d + regs.y.w + 0);
239 L rd.h = op_readlong(aa.d + regs.y.w + 1);
240   call(op);
241 }
242 
op_read_sr_b()243 template<void (CPUcore::*op)()> void CPUcore::op_read_sr_b() {
244   sp = op_readpc();
245   op_io();
246 L rd.l = op_readsp(sp);
247   call(op);
248 }
249 
op_read_sr_w()250 template<void (CPUcore::*op)()> void CPUcore::op_read_sr_w() {
251   sp = op_readpc();
252   op_io();
253   rd.l = op_readsp(sp + 0);
254 L rd.h = op_readsp(sp + 1);
255   call(op);
256 }
257 
op_read_isry_b()258 template<void (CPUcore::*op)()> void CPUcore::op_read_isry_b() {
259   sp = op_readpc();
260   op_io();
261   aa.l = op_readsp(sp + 0);
262   aa.h = op_readsp(sp + 1);
263   op_io();
264 L rd.l = op_readdbr(aa.w + regs.y.w);
265   call(op);
266 }
267 
op_read_isry_w()268 template<void (CPUcore::*op)()> void CPUcore::op_read_isry_w() {
269   sp = op_readpc();
270   op_io();
271   aa.l = op_readsp(sp + 0);
272   aa.h = op_readsp(sp + 1);
273   op_io();
274   rd.l = op_readdbr(aa.w + regs.y.w + 0);
275 L rd.h = op_readdbr(aa.w + regs.y.w + 1);
276   call(op);
277 }
278 
279 #endif
280