123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573 |
- #ifdef SCPU_CPP
- //inc
- case 0x1a: {
- last_cycle();
- op_io_irq();
- if(regs.p.m) {
- regs.a.l++;
- regs.p.n = !!(regs.a.l & 0x80);
- regs.p.z = (regs.a.l == 0);
- } else {
- regs.a.w++;
- regs.p.n = !!(regs.a.w & 0x8000);
- regs.p.z = (regs.a.w == 0);
- }
- } break;
- //inx
- case 0xe8: {
- last_cycle();
- op_io_irq();
- if(regs.p.x) {
- regs.x.l++;
- regs.p.n = !!(regs.x.l & 0x80);
- regs.p.z = (regs.x.l == 0);
- } else {
- regs.x.w++;
- regs.p.n = !!(regs.x.w & 0x8000);
- regs.p.z = (regs.x.w == 0);
- }
- } break;
- //iny
- case 0xc8: {
- last_cycle();
- op_io_irq();
- if(regs.p.x) {
- regs.y.l++;
- regs.p.n = !!(regs.y.l & 0x80);
- regs.p.z = (regs.y.l == 0);
- } else {
- regs.y.w++;
- regs.p.n = !!(regs.y.w & 0x8000);
- regs.p.z = (regs.y.w == 0);
- }
- } break;
- //dec
- case 0x3a: {
- last_cycle();
- op_io_irq();
- if(regs.p.m) {
- regs.a.l--;
- regs.p.n = !!(regs.a.l & 0x80);
- regs.p.z = (regs.a.l == 0);
- } else {
- regs.a.w--;
- regs.p.n = !!(regs.a.w & 0x8000);
- regs.p.z = (regs.a.w == 0);
- }
- } break;
- //dex
- case 0xca: {
- last_cycle();
- op_io_irq();
- if(regs.p.x) {
- regs.x.l--;
- regs.p.n = !!(regs.x.l & 0x80);
- regs.p.z = (regs.x.l == 0);
- } else {
- regs.x.w--;
- regs.p.n = !!(regs.x.w & 0x8000);
- regs.p.z = (regs.x.w == 0);
- }
- } break;
- //dey
- case 0x88: {
- last_cycle();
- op_io_irq();
- if(regs.p.x) {
- regs.y.l--;
- regs.p.n = !!(regs.y.l & 0x80);
- regs.p.z = (regs.y.l == 0);
- } else {
- regs.y.w--;
- regs.p.n = !!(regs.y.w & 0x8000);
- regs.p.z = (regs.y.w == 0);
- }
- } break;
- //asl
- case 0x0a: {
- last_cycle();
- op_io_irq();
- if(regs.p.m) {
- regs.p.c = !!(regs.a.l & 0x80);
- regs.a.l <<= 1;
- regs.p.n = !!(regs.a.l & 0x80);
- regs.p.z = (regs.a.l == 0);
- } else {
- regs.p.c = !!(regs.a.w & 0x8000);
- regs.a.w <<= 1;
- regs.p.n = !!(regs.a.w & 0x8000);
- regs.p.z = (regs.a.w == 0);
- }
- } break;
- //lsr
- case 0x4a: {
- last_cycle();
- op_io_irq();
- if(regs.p.m) {
- regs.p.c = regs.a.l & 1;
- regs.a.l >>= 1;
- regs.p.n = !!(regs.a.l & 0x80);
- regs.p.z = (regs.a.l == 0);
- } else {
- regs.p.c = regs.a.w & 1;
- regs.a.w >>= 1;
- regs.p.n = !!(regs.a.w & 0x8000);
- regs.p.z = (regs.a.w == 0);
- }
- } break;
- //rol
- case 0x2a: {
- last_cycle();
- op_io_irq();
- uint16 c = regs.p.c;
- if(regs.p.m) {
- regs.p.c = !!(regs.a.l & 0x80);
- regs.a.l <<= 1;
- regs.a.l |= c;
- regs.p.n = !!(regs.a.l & 0x80);
- regs.p.z = (regs.a.l == 0);
- } else {
- regs.p.c = !!(regs.a.w & 0x8000);
- regs.a.w <<= 1;
- regs.a.w |= c;
- regs.p.n = !!(regs.a.w & 0x8000);
- regs.p.z = (regs.a.w == 0);
- }
- } break;
- //ror
- case 0x6a: {
- last_cycle();
- op_io_irq();
- uint16 c;
- if(regs.p.m) {
- c = regs.p.c ? 0x80 : 0;
- regs.p.c = regs.a.l & 1;
- regs.a.l >>= 1;
- regs.a.l |= c;
- regs.p.n = !!(regs.a.l & 0x80);
- regs.p.z = (regs.a.l == 0);
- } else {
- c = regs.p.c ? 0x8000 : 0;
- regs.p.c = regs.a.w & 1;
- regs.a.w >>= 1;
- regs.a.w |= c;
- regs.p.n = !!(regs.a.w & 0x8000);
- regs.p.z = (regs.a.w == 0);
- }
- } break;
- //inc_addr
- case 0xee: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- rd.l = op_readdbr(aa.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + 1);
- op_io();
- if(regs.p.m) { op_inc_b(); }
- else { op_inc_w();
- op_writedbr(aa.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w, rd.l);
- } break;
- //dec_addr
- case 0xce: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- rd.l = op_readdbr(aa.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + 1);
- op_io();
- if(regs.p.m) { op_dec_b(); }
- else { op_dec_w();
- op_writedbr(aa.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w, rd.l);
- } break;
- //asl_addr
- case 0x0e: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- rd.l = op_readdbr(aa.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + 1);
- op_io();
- if(regs.p.m) { op_asl_b(); }
- else { op_asl_w();
- op_writedbr(aa.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w, rd.l);
- } break;
- //lsr_addr
- case 0x4e: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- rd.l = op_readdbr(aa.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + 1);
- op_io();
- if(regs.p.m) { op_lsr_b(); }
- else { op_lsr_w();
- op_writedbr(aa.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w, rd.l);
- } break;
- //rol_addr
- case 0x2e: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- rd.l = op_readdbr(aa.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + 1);
- op_io();
- if(regs.p.m) { op_rol_b(); }
- else { op_rol_w();
- op_writedbr(aa.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w, rd.l);
- } break;
- //ror_addr
- case 0x6e: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- rd.l = op_readdbr(aa.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + 1);
- op_io();
- if(regs.p.m) { op_ror_b(); }
- else { op_ror_w();
- op_writedbr(aa.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w, rd.l);
- } break;
- //trb_addr
- case 0x1c: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- rd.l = op_readdbr(aa.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + 1);
- op_io();
- if(regs.p.m) { op_trb_b(); }
- else { op_trb_w();
- op_writedbr(aa.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w, rd.l);
- } break;
- //tsb_addr
- case 0x0c: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- rd.l = op_readdbr(aa.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + 1);
- op_io();
- if(regs.p.m) { op_tsb_b(); }
- else { op_tsb_w();
- op_writedbr(aa.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w, rd.l);
- } break;
- //inc_addrx
- case 0xfe: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- op_io();
- rd.l = op_readdbr(aa.w + regs.x.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + regs.x.w + 1);
- op_io();
- if(regs.p.m) { op_inc_b(); }
- else { op_inc_w();
- op_writedbr(aa.w + regs.x.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w + regs.x.w, rd.l);
- } break;
- //dec_addrx
- case 0xde: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- op_io();
- rd.l = op_readdbr(aa.w + regs.x.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + regs.x.w + 1);
- op_io();
- if(regs.p.m) { op_dec_b(); }
- else { op_dec_w();
- op_writedbr(aa.w + regs.x.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w + regs.x.w, rd.l);
- } break;
- //asl_addrx
- case 0x1e: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- op_io();
- rd.l = op_readdbr(aa.w + regs.x.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + regs.x.w + 1);
- op_io();
- if(regs.p.m) { op_asl_b(); }
- else { op_asl_w();
- op_writedbr(aa.w + regs.x.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w + regs.x.w, rd.l);
- } break;
- //lsr_addrx
- case 0x5e: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- op_io();
- rd.l = op_readdbr(aa.w + regs.x.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + regs.x.w + 1);
- op_io();
- if(regs.p.m) { op_lsr_b(); }
- else { op_lsr_w();
- op_writedbr(aa.w + regs.x.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w + regs.x.w, rd.l);
- } break;
- //rol_addrx
- case 0x3e: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- op_io();
- rd.l = op_readdbr(aa.w + regs.x.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + regs.x.w + 1);
- op_io();
- if(regs.p.m) { op_rol_b(); }
- else { op_rol_w();
- op_writedbr(aa.w + regs.x.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w + regs.x.w, rd.l);
- } break;
- //ror_addrx
- case 0x7e: {
- aa.l = op_readpc();
- aa.h = op_readpc();
- op_io();
- rd.l = op_readdbr(aa.w + regs.x.w);
- if(!regs.p.m) rd.h = op_readdbr(aa.w + regs.x.w + 1);
- op_io();
- if(regs.p.m) { op_ror_b(); }
- else { op_ror_w();
- op_writedbr(aa.w + regs.x.w + 1, rd.h); }
- last_cycle();
- op_writedbr(aa.w + regs.x.w, rd.l);
- } break;
- //inc_dp
- case 0xe6: {
- dp = op_readpc();
- op_io_cond2();
- rd.l = op_readdp(dp);
- if(!regs.p.m) rd.h = op_readdp(dp + 1);
- op_io();
- if(regs.p.m) { op_inc_b(); }
- else { op_inc_w();
- op_writedp(dp + 1, rd.h); }
- last_cycle();
- op_writedp(dp, rd.l);
- } break;
- //dec_dp
- case 0xc6: {
- dp = op_readpc();
- op_io_cond2();
- rd.l = op_readdp(dp);
- if(!regs.p.m) rd.h = op_readdp(dp + 1);
- op_io();
- if(regs.p.m) { op_dec_b(); }
- else { op_dec_w();
- op_writedp(dp + 1, rd.h); }
- last_cycle();
- op_writedp(dp, rd.l);
- } break;
- //asl_dp
- case 0x06: {
- dp = op_readpc();
- op_io_cond2();
- rd.l = op_readdp(dp);
- if(!regs.p.m) rd.h = op_readdp(dp + 1);
- op_io();
- if(regs.p.m) { op_asl_b(); }
- else { op_asl_w();
- op_writedp(dp + 1, rd.h); }
- last_cycle();
- op_writedp(dp, rd.l);
- } break;
- //lsr_dp
- case 0x46: {
- dp = op_readpc();
- op_io_cond2();
- rd.l = op_readdp(dp);
- if(!regs.p.m) rd.h = op_readdp(dp + 1);
- op_io();
- if(regs.p.m) { op_lsr_b(); }
- else { op_lsr_w();
- op_writedp(dp + 1, rd.h); }
- last_cycle();
- op_writedp(dp, rd.l);
- } break;
- //rol_dp
- case 0x26: {
- dp = op_readpc();
- op_io_cond2();
- rd.l = op_readdp(dp);
- if(!regs.p.m) rd.h = op_readdp(dp + 1);
- op_io();
- if(regs.p.m) { op_rol_b(); }
- else { op_rol_w();
- op_writedp(dp + 1, rd.h); }
- last_cycle();
- op_writedp(dp, rd.l);
- } break;
- //ror_dp
- case 0x66: {
- dp = op_readpc();
- op_io_cond2();
- rd.l = op_readdp(dp);
- if(!regs.p.m) rd.h = op_readdp(dp + 1);
- op_io();
- if(regs.p.m) { op_ror_b(); }
- else { op_ror_w();
- op_writedp(dp + 1, rd.h); }
- last_cycle();
- op_writedp(dp, rd.l);
- } break;
- //trb_dp
- case 0x14: {
- dp = op_readpc();
- op_io_cond2();
- rd.l = op_readdp(dp);
- if(!regs.p.m) rd.h = op_readdp(dp + 1);
- op_io();
- if(regs.p.m) { op_trb_b(); }
- else { op_trb_w();
- op_writedp(dp + 1, rd.h); }
- last_cycle();
- op_writedp(dp, rd.l);
- } break;
- //tsb_dp
- case 0x04: {
- dp = op_readpc();
- op_io_cond2();
- rd.l = op_readdp(dp);
- if(!regs.p.m) rd.h = op_readdp(dp + 1);
- op_io();
- if(regs.p.m) { op_tsb_b(); }
- else { op_tsb_w();
- op_writedp(dp + 1, rd.h); }
- last_cycle();
- op_writedp(dp, rd.l);
- } break;
- //inc_dpx
- case 0xf6: {
- dp = op_readpc();
- op_io_cond2();
- op_io();
- rd.l = op_readdp(dp + regs.x.w);
- if(!regs.p.m) rd.h = op_readdp(dp + regs.x.w + 1);
- op_io();
- if(regs.p.m) { op_inc_b(); }
- else { op_inc_w();
- op_writedp(dp + regs.x.w + 1, rd.h); }
- last_cycle();
- op_writedp(dp + regs.x.w, rd.l);
- } break;
- //dec_dpx
- case 0xd6: {
- dp = op_readpc();
- op_io_cond2();
- op_io();
- rd.l = op_readdp(dp + regs.x.w);
- if(!regs.p.m) rd.h = op_readdp(dp + regs.x.w + 1);
- op_io();
- if(regs.p.m) { op_dec_b(); }
- else { op_dec_w();
- op_writedp(dp + regs.x.w + 1, rd.h); }
- last_cycle();
- op_writedp(dp + regs.x.w, rd.l);
- } break;
- //asl_dpx
- case 0x16: {
- dp = op_readpc();
- op_io_cond2();
- op_io();
- rd.l = op_readdp(dp + regs.x.w);
- if(!regs.p.m) rd.h = op_readdp(dp + regs.x.w + 1);
- op_io();
- if(regs.p.m) { op_asl_b(); }
- else { op_asl_w();
- op_writedp(dp + regs.x.w + 1, rd.h); }
- last_cycle();
- op_writedp(dp + regs.x.w, rd.l);
- } break;
- //lsr_dpx
- case 0x56: {
- dp = op_readpc();
- op_io_cond2();
- op_io();
- rd.l = op_readdp(dp + regs.x.w);
- if(!regs.p.m) rd.h = op_readdp(dp + regs.x.w + 1);
- op_io();
- if(regs.p.m) { op_lsr_b(); }
- else { op_lsr_w();
- op_writedp(dp + regs.x.w + 1, rd.h); }
- last_cycle();
- op_writedp(dp + regs.x.w, rd.l);
- } break;
- //rol_dpx
- case 0x36: {
- dp = op_readpc();
- op_io_cond2();
- op_io();
- rd.l = op_readdp(dp + regs.x.w);
- if(!regs.p.m) rd.h = op_readdp(dp + regs.x.w + 1);
- op_io();
- if(regs.p.m) { op_rol_b(); }
- else { op_rol_w();
- op_writedp(dp + regs.x.w + 1, rd.h); }
- last_cycle();
- op_writedp(dp + regs.x.w, rd.l);
- } break;
- //ror_dpx
- case 0x76: {
- dp = op_readpc();
- op_io_cond2();
- op_io();
- rd.l = op_readdp(dp + regs.x.w);
- if(!regs.p.m) rd.h = op_readdp(dp + regs.x.w + 1);
- op_io();
- if(regs.p.m) { op_ror_b(); }
- else { op_ror_w();
- op_writedp(dp + regs.x.w + 1, rd.h); }
- last_cycle();
- op_writedp(dp + regs.x.w, rd.l);
- } break;
- #endif
|