1655 lines
34 KiB
C++
Executable File
1655 lines
34 KiB
C++
Executable File
#ifdef SCPU_CPP
|
|
|
|
//adc_const
|
|
case 0x69: {
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readpc();
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readpc();
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_const
|
|
case 0x29: {
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readpc();
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readpc();
|
|
op_and_w();
|
|
} break;
|
|
|
|
//cmp_const
|
|
case 0xc9: {
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readpc();
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readpc();
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//cpx_const
|
|
case 0xe0: {
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readpc();
|
|
if(regs.p.x) { op_cpx_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readpc();
|
|
op_cpx_w();
|
|
} break;
|
|
|
|
//cpy_const
|
|
case 0xc0: {
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readpc();
|
|
if(regs.p.x) { op_cpy_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readpc();
|
|
op_cpy_w();
|
|
} break;
|
|
|
|
//eor_const
|
|
case 0x49: {
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readpc();
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readpc();
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_const
|
|
case 0xa9: {
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readpc();
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readpc();
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ldx_const
|
|
case 0xa2: {
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readpc();
|
|
if(regs.p.x) { op_ldx_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readpc();
|
|
op_ldx_w();
|
|
} break;
|
|
|
|
//ldy_const
|
|
case 0xa0: {
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readpc();
|
|
if(regs.p.x) { op_ldy_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readpc();
|
|
op_ldy_w();
|
|
} break;
|
|
|
|
//ora_const
|
|
case 0x09: {
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readpc();
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readpc();
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_const
|
|
case 0xe9: {
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readpc();
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readpc();
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_addr
|
|
case 0x6d: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_addr
|
|
case 0x2d: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//bit_addr
|
|
case 0x2c: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_bit_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_bit_w();
|
|
} break;
|
|
|
|
//cmp_addr
|
|
case 0xcd: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//cpx_addr
|
|
case 0xec: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.x) { op_cpx_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_cpx_w();
|
|
} break;
|
|
|
|
//cpy_addr
|
|
case 0xcc: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.x) { op_cpy_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_cpy_w();
|
|
} break;
|
|
|
|
//eor_addr
|
|
case 0x4d: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_addr
|
|
case 0xad: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ldx_addr
|
|
case 0xae: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.x) { op_ldx_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_ldx_w();
|
|
} break;
|
|
|
|
//ldy_addr
|
|
case 0xac: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.x) { op_ldy_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_ldy_w();
|
|
} break;
|
|
|
|
//ora_addr
|
|
case 0x0d: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_addr
|
|
case 0xed: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_addrx
|
|
case 0x7d: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.x.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.x.w);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.x.w + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_addrx
|
|
case 0x3d: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.x.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.x.w);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.x.w + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//bit_addrx
|
|
case 0x3c: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.x.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.x.w);
|
|
if(regs.p.m) { op_bit_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.x.w + 1);
|
|
op_bit_w();
|
|
} break;
|
|
|
|
//cmp_addrx
|
|
case 0xdd: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.x.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.x.w);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.x.w + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//eor_addrx
|
|
case 0x5d: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.x.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.x.w);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.x.w + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_addrx
|
|
case 0xbd: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.x.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.x.w);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.x.w + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ldy_addrx
|
|
case 0xbc: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.x.w);
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.x.w);
|
|
if(regs.p.x) { op_ldy_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.x.w + 1);
|
|
op_ldy_w();
|
|
} break;
|
|
|
|
//ora_addrx
|
|
case 0x1d: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.x.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.x.w);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.x.w + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_addrx
|
|
case 0xfd: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.x.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.x.w);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.x.w + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_addry
|
|
case 0x79: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_addry
|
|
case 0x39: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//cmp_addry
|
|
case 0xd9: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//eor_addry
|
|
case 0x59: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_addry
|
|
case 0xb9: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ldx_addry
|
|
case 0xbe: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.x) { op_ldx_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_ldx_w();
|
|
} break;
|
|
|
|
//ora_addry
|
|
case 0x19: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_addry
|
|
case 0xf9: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_long
|
|
case 0x6f: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_long
|
|
case 0x2f: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//cmp_long
|
|
case 0xcf: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//eor_long
|
|
case 0x4f: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_long
|
|
case 0xaf: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ora_long
|
|
case 0x0f: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_long
|
|
case 0xef: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_longx
|
|
case 0x7f: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.x.w);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.x.w + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_longx
|
|
case 0x3f: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.x.w);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.x.w + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//cmp_longx
|
|
case 0xdf: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.x.w);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.x.w + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//eor_longx
|
|
case 0x5f: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.x.w);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.x.w + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_longx
|
|
case 0xbf: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.x.w);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.x.w + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ora_longx
|
|
case 0x1f: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.x.w);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.x.w + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_longx
|
|
case 0xff: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.x.w);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.x.w + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_dp
|
|
case 0x65: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_dp
|
|
case 0x25: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//bit_dp
|
|
case 0x24: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp);
|
|
if(regs.p.m) { op_bit_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + 1);
|
|
op_bit_w();
|
|
} break;
|
|
|
|
//cmp_dp
|
|
case 0xc5: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//cpx_dp
|
|
case 0xe4: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readdp(dp);
|
|
if(regs.p.x) { op_cpx_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + 1);
|
|
op_cpx_w();
|
|
} break;
|
|
|
|
//cpy_dp
|
|
case 0xc4: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readdp(dp);
|
|
if(regs.p.x) { op_cpy_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + 1);
|
|
op_cpy_w();
|
|
} break;
|
|
|
|
//eor_dp
|
|
case 0x45: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_dp
|
|
case 0xa5: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ldx_dp
|
|
case 0xa6: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readdp(dp);
|
|
if(regs.p.x) { op_ldx_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + 1);
|
|
op_ldx_w();
|
|
} break;
|
|
|
|
//ldy_dp
|
|
case 0xa4: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readdp(dp);
|
|
if(regs.p.x) { op_ldy_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + 1);
|
|
op_ldy_w();
|
|
} break;
|
|
|
|
//ora_dp
|
|
case 0x05: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_dp
|
|
case 0xe5: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_dpx
|
|
case 0x75: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp + regs.x.w);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + regs.x.w + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_dpx
|
|
case 0x35: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp + regs.x.w);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + regs.x.w + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//bit_dpx
|
|
case 0x34: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp + regs.x.w);
|
|
if(regs.p.m) { op_bit_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + regs.x.w + 1);
|
|
op_bit_w();
|
|
} break;
|
|
|
|
//cmp_dpx
|
|
case 0xd5: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp + regs.x.w);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + regs.x.w + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//eor_dpx
|
|
case 0x55: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp + regs.x.w);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + regs.x.w + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_dpx
|
|
case 0xb5: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp + regs.x.w);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + regs.x.w + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ldy_dpx
|
|
case 0xb4: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readdp(dp + regs.x.w);
|
|
if(regs.p.x) { op_ldy_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + regs.x.w + 1);
|
|
op_ldy_w();
|
|
} break;
|
|
|
|
//ora_dpx
|
|
case 0x15: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp + regs.x.w);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + regs.x.w + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_dpx
|
|
case 0xf5: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdp(dp + regs.x.w);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + regs.x.w + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//ldx_dpy
|
|
case 0xb6: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.x) last_cycle();
|
|
rd.l = op_readdp(dp + regs.y.w);
|
|
if(regs.p.x) { op_ldx_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdp(dp + regs.y.w + 1);
|
|
op_ldx_w();
|
|
} break;
|
|
|
|
//adc_idp
|
|
case 0x72: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_idp
|
|
case 0x32: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//cmp_idp
|
|
case 0xd2: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//eor_idp
|
|
case 0x52: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_idp
|
|
case 0xb2: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ora_idp
|
|
case 0x12: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_idp
|
|
case 0xf2: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_idpx
|
|
case 0x61: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
aa.l = op_readdp(dp + regs.x.w);
|
|
aa.h = op_readdp(dp + regs.x.w + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_idpx
|
|
case 0x21: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
aa.l = op_readdp(dp + regs.x.w);
|
|
aa.h = op_readdp(dp + regs.x.w + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//cmp_idpx
|
|
case 0xc1: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
aa.l = op_readdp(dp + regs.x.w);
|
|
aa.h = op_readdp(dp + regs.x.w + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//eor_idpx
|
|
case 0x41: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
aa.l = op_readdp(dp + regs.x.w);
|
|
aa.h = op_readdp(dp + regs.x.w + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_idpx
|
|
case 0xa1: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
aa.l = op_readdp(dp + regs.x.w);
|
|
aa.h = op_readdp(dp + regs.x.w + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ora_idpx
|
|
case 0x01: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
aa.l = op_readdp(dp + regs.x.w);
|
|
aa.h = op_readdp(dp + regs.x.w + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_idpx
|
|
case 0xe1: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
aa.l = op_readdp(dp + regs.x.w);
|
|
aa.h = op_readdp(dp + regs.x.w + 1);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_idpy
|
|
case 0x71: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_idpy
|
|
case 0x31: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//cmp_idpy
|
|
case 0xd1: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//eor_idpy
|
|
case 0x51: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_idpy
|
|
case 0xb1: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ora_idpy
|
|
case 0x11: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_idpy
|
|
case 0xf1: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
op_io_cond4(aa.w, aa.w + regs.y.w);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_ildp
|
|
case 0x67: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_ildp
|
|
case 0x27: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//cmp_ildp
|
|
case 0xc7: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//eor_ildp
|
|
case 0x47: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_ildp
|
|
case 0xa7: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ora_ildp
|
|
case 0x07: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_ildp
|
|
case 0xe7: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_ildpy
|
|
case 0x77: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.y.w);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.y.w + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_ildpy
|
|
case 0x37: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.y.w);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.y.w + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//cmp_ildpy
|
|
case 0xd7: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.y.w);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.y.w + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//eor_ildpy
|
|
case 0x57: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.y.w);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.y.w + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_ildpy
|
|
case 0xb7: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.y.w);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.y.w + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ora_ildpy
|
|
case 0x17: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.y.w);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.y.w + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_ildpy
|
|
case 0xf7: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
aa.b = op_readdp(dp + 2);
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readlong(aa.d + regs.y.w);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readlong(aa.d + regs.y.w + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_sr
|
|
case 0x63: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readsp(sp);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readsp(sp + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_sr
|
|
case 0x23: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readsp(sp);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readsp(sp + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//cmp_sr
|
|
case 0xc3: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readsp(sp);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readsp(sp + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//eor_sr
|
|
case 0x43: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readsp(sp);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readsp(sp + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_sr
|
|
case 0xa3: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readsp(sp);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readsp(sp + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ora_sr
|
|
case 0x03: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readsp(sp);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readsp(sp + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_sr
|
|
case 0xe3: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readsp(sp);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readsp(sp + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//adc_isry
|
|
case 0x73: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
aa.l = op_readsp(sp);
|
|
aa.h = op_readsp(sp + 1);
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_adc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_adc_w();
|
|
} break;
|
|
|
|
//and_isry
|
|
case 0x33: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
aa.l = op_readsp(sp);
|
|
aa.h = op_readsp(sp + 1);
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_and_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_and_w();
|
|
} break;
|
|
|
|
//cmp_isry
|
|
case 0xd3: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
aa.l = op_readsp(sp);
|
|
aa.h = op_readsp(sp + 1);
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_cmp_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_cmp_w();
|
|
} break;
|
|
|
|
//eor_isry
|
|
case 0x53: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
aa.l = op_readsp(sp);
|
|
aa.h = op_readsp(sp + 1);
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_eor_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_eor_w();
|
|
} break;
|
|
|
|
//lda_isry
|
|
case 0xb3: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
aa.l = op_readsp(sp);
|
|
aa.h = op_readsp(sp + 1);
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_lda_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_lda_w();
|
|
} break;
|
|
|
|
//ora_isry
|
|
case 0x13: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
aa.l = op_readsp(sp);
|
|
aa.h = op_readsp(sp + 1);
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_ora_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_ora_w();
|
|
} break;
|
|
|
|
//sbc_isry
|
|
case 0xf3: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
aa.l = op_readsp(sp);
|
|
aa.h = op_readsp(sp + 1);
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readdbr(aa.w + regs.y.w);
|
|
if(regs.p.m) { op_sbc_b(); break; }
|
|
last_cycle();
|
|
rd.h = op_readdbr(aa.w + regs.y.w + 1);
|
|
op_sbc_w();
|
|
} break;
|
|
|
|
//bit_const
|
|
case 0x89: {
|
|
if(regs.p.m) last_cycle();
|
|
rd.l = op_readpc();
|
|
if(regs.p.m) {
|
|
regs.p.z = ((rd.l & regs.a.l) == 0);
|
|
break;
|
|
}
|
|
last_cycle();
|
|
rd.h = op_readpc();
|
|
regs.p.z = ((rd.w & regs.a.w) == 0);
|
|
} break;
|
|
|
|
#endif
|