1 #ifdef CPUCORE_CPP 2 op_read_const_b()3template<void (CPUcore::*op)()> void CPUcore::op_read_const_b() { 4 L rd.l = op_readpc(); 5 call(op); 6 } 7 op_read_const_w()8template<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()14void 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()19void 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()25template<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()32template<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()40template<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()48template<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()57template<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()65template<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()74template<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()82template<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()91template<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()99template<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()108template<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()115template<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()123template<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()131template<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()140template<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()149template<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()159template<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()169template<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()180template<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()190template<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()201template<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()211template<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()222template<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()232template<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()243template<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()250template<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()258template<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()268template<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