294 lines
6.0 KiB
C++
Executable File
294 lines
6.0 KiB
C++
Executable File
#ifdef SCPU_CPP
|
|
|
|
//sta_addr
|
|
case 0x8d: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
op_writedbr(aa.w, regs.a.w);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedbr(aa.w + 1, regs.a.w >> 8);
|
|
} break;
|
|
|
|
//stx_addr
|
|
case 0x8e: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.x) last_cycle();
|
|
op_writedbr(aa.w, regs.x.w);
|
|
if(regs.p.x) break;
|
|
last_cycle();
|
|
op_writedbr(aa.w + 1, regs.x.w >> 8);
|
|
} break;
|
|
|
|
//sty_addr
|
|
case 0x8c: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.x) last_cycle();
|
|
op_writedbr(aa.w, regs.y.w);
|
|
if(regs.p.x) break;
|
|
last_cycle();
|
|
op_writedbr(aa.w + 1, regs.y.w >> 8);
|
|
} break;
|
|
|
|
//stz_addr
|
|
case 0x9c: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
op_writedbr(aa.w, 0x0000);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedbr(aa.w + 1, 0x0000 >> 8);
|
|
} break;
|
|
|
|
//sta_addrx
|
|
case 0x9d: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
op_writedbr(aa.w + regs.x.w, regs.a.w);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedbr(aa.w + regs.x.w + 1, regs.a.w >> 8);
|
|
} break;
|
|
|
|
//stz_addrx
|
|
case 0x9e: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
op_writedbr(aa.w + regs.x.w, 0x0000);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedbr(aa.w + regs.x.w + 1, 0x0000 >> 8);
|
|
} break;
|
|
|
|
//sta_addry
|
|
case 0x99: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
op_writedbr(aa.w + regs.y.w, regs.a.l);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedbr(aa.w + regs.y.w + 1, regs.a.h);
|
|
} break;
|
|
|
|
//sta_long
|
|
case 0x8f: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
op_writelong(aa.d, regs.a.l);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writelong(aa.d + 1, regs.a.h);
|
|
} break;
|
|
|
|
//sta_longx
|
|
case 0x9f: {
|
|
aa.l = op_readpc();
|
|
aa.h = op_readpc();
|
|
aa.b = op_readpc();
|
|
if(regs.p.m) last_cycle();
|
|
op_writelong(aa.d + regs.x.w, regs.a.l);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writelong(aa.d + regs.x.w + 1, regs.a.h);
|
|
} break;
|
|
|
|
//sta_dp
|
|
case 0x85: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.m) last_cycle();
|
|
op_writedp(dp, regs.a.w);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedp(dp + 1, regs.a.w >> 8);
|
|
} break;
|
|
|
|
//stx_dp
|
|
case 0x86: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.x) last_cycle();
|
|
op_writedp(dp, regs.x.w);
|
|
if(regs.p.x) break;
|
|
last_cycle();
|
|
op_writedp(dp + 1, regs.x.w >> 8);
|
|
} break;
|
|
|
|
//sty_dp
|
|
case 0x84: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.x) last_cycle();
|
|
op_writedp(dp, regs.y.w);
|
|
if(regs.p.x) break;
|
|
last_cycle();
|
|
op_writedp(dp + 1, regs.y.w >> 8);
|
|
} break;
|
|
|
|
//stz_dp
|
|
case 0x64: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
if(regs.p.m) last_cycle();
|
|
op_writedp(dp, 0x0000);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedp(dp + 1, 0x0000 >> 8);
|
|
} break;
|
|
|
|
//sta_dpx
|
|
case 0x95: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
op_writedp(dp + regs.x.w, regs.a.w);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedp(dp + regs.x.w + 1, regs.a.w >> 8);
|
|
} break;
|
|
|
|
//sty_dpx
|
|
case 0x94: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.x) last_cycle();
|
|
op_writedp(dp + regs.x.w, regs.y.w);
|
|
if(regs.p.x) break;
|
|
last_cycle();
|
|
op_writedp(dp + regs.x.w + 1, regs.y.w >> 8);
|
|
} break;
|
|
|
|
//stz_dpx
|
|
case 0x74: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
op_writedp(dp + regs.x.w, 0x0000);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedp(dp + regs.x.w + 1, 0x0000 >> 8);
|
|
} break;
|
|
|
|
//stx_dpy
|
|
case 0x96: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
op_io();
|
|
if(regs.p.x) last_cycle();
|
|
op_writedp(dp + regs.y.w, regs.x.l);
|
|
if(regs.p.x) break;
|
|
last_cycle();
|
|
op_writedp(dp + regs.y.w + 1, regs.x.h);
|
|
} break;
|
|
|
|
//sta_idp
|
|
case 0x92: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
if(regs.p.m) last_cycle();
|
|
op_writedbr(aa.w, regs.a.l);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedbr(aa.w + 1, regs.a.h);
|
|
} break;
|
|
|
|
//sta_ildp
|
|
case 0x87: {
|
|
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();
|
|
op_writelong(aa.d, regs.a.l);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writelong(aa.d + 1, regs.a.h);
|
|
} break;
|
|
|
|
//sta_idpx
|
|
case 0x81: {
|
|
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();
|
|
op_writedbr(aa.w, regs.a.l);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedbr(aa.w + 1, regs.a.h);
|
|
} break;
|
|
|
|
//sta_idpy
|
|
case 0x91: {
|
|
dp = op_readpc();
|
|
op_io_cond2();
|
|
aa.l = op_readdp(dp);
|
|
aa.h = op_readdp(dp + 1);
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
op_writedbr(aa.w + regs.y.w, regs.a.l);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedbr(aa.w + regs.y.w + 1, regs.a.h);
|
|
} break;
|
|
|
|
//sta_ildpy
|
|
case 0x97: {
|
|
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();
|
|
op_writelong(aa.d + regs.y.w, regs.a.l);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writelong(aa.d + regs.y.w + 1, regs.a.h);
|
|
} break;
|
|
|
|
//sta_sr
|
|
case 0x83: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
op_writesp(sp, regs.a.l);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writesp(sp + 1, regs.a.h);
|
|
} break;
|
|
|
|
//sta_isry
|
|
case 0x93: {
|
|
sp = op_readpc();
|
|
op_io();
|
|
aa.l = op_readsp(sp);
|
|
aa.h = op_readsp(sp + 1);
|
|
op_io();
|
|
if(regs.p.m) last_cycle();
|
|
op_writedbr(aa.w + regs.y.w, regs.a.l);
|
|
if(regs.p.m) break;
|
|
last_cycle();
|
|
op_writedbr(aa.w + regs.y.w + 1, regs.a.h);
|
|
} break;
|
|
|
|
#endif
|