From 62144403e7a7227d2ef4f9372908190e19461908 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Wed, 17 May 2023 20:01:26 +0200 Subject: m6502: Make fully wait-states compatible --- src/devices/cpu/m6502/m6502.cpp | 17 +- src/devices/cpu/m6502/m6502.h | 6 +- src/devices/cpu/m6502/m6502make.py | 135 +++-- src/devices/cpu/m6502/odeco16.lst | 35 +- src/devices/cpu/m6502/om6502.lst | 982 +++++++++++++++++++++++------------ src/devices/cpu/m6502/om6509.lst | 6 +- src/devices/cpu/m6502/om6510.lst | 21 +- src/devices/cpu/m6502/om65c02.lst | 399 ++++++++------ src/devices/cpu/m6502/om65ce02.lst | 805 ++++++++++++++++++---------- src/devices/cpu/m6502/om740.lst | 729 ++++++++++++++++---------- src/devices/cpu/m6502/or65c19.lst | 210 +++++--- src/devices/cpu/m6502/orp2a03.lst | 142 +++-- src/devices/cpu/m6502/ow65c02s.lst | 524 +++++++++++-------- src/devices/cpu/m6502/oxavix.lst | 354 ++++++++----- src/devices/cpu/m6502/oxavix2000.lst | 179 ++++--- 15 files changed, 2857 insertions(+), 1687 deletions(-) diff --git a/src/devices/cpu/m6502/m6502.cpp b/src/devices/cpu/m6502/m6502.cpp index 0511bc2039a..c5f10de21aa 100644 --- a/src/devices/cpu/m6502/m6502.cpp +++ b/src/devices/cpu/m6502/m6502.cpp @@ -452,7 +452,9 @@ void m6502_device::state_import(const device_state_entry &entry) case M6502_PC: PC = NPC; irq_taken = false; - prefetch(); + prefetch_start(); + IR = mintf->read_sync(PC); + prefetch_end(); PPC = NPC; inst_state = IR | inst_state_base; break; @@ -483,12 +485,15 @@ void m6502_device::state_string_export(const device_state_entry &entry, std::str } } -void m6502_device::prefetch() +void m6502_device::prefetch_start() { sync = true; sync_w(ASSERT_LINE); NPC = PC; - IR = mintf->read_sync(PC); +} + +void m6502_device::prefetch_end() +{ sync = false; sync_w(CLEAR_LINE); @@ -499,12 +504,8 @@ void m6502_device::prefetch() PC++; } -void m6502_device::prefetch_noirq() +void m6502_device::prefetch_end_noirq() { - sync = true; - sync_w(ASSERT_LINE); - NPC = PC; - IR = mintf->read_sync(PC); sync = false; sync_w(CLEAR_LINE); PC++; diff --git a/src/devices/cpu/m6502/m6502.h b/src/devices/cpu/m6502/m6502.h index ad5bead3b40..3f4d92a03da 100644 --- a/src/devices/cpu/m6502/m6502.h +++ b/src/devices/cpu/m6502/m6502.h @@ -98,6 +98,7 @@ protected: virtual void device_reset() override; // device_execute_interface overrides + virtual bool cpu_is_interruptible() const override { return true; } virtual uint32_t execute_min_cycles() const noexcept override; virtual uint32_t execute_max_cycles() const noexcept override; virtual uint32_t execute_input_lines() const noexcept override; @@ -145,8 +146,9 @@ protected: uint8_t read_arg(uint16_t adr) { return mintf->read_arg(adr); } uint8_t read_pc() { return mintf->read_arg(PC++); } uint8_t read_pc_noinc() { return mintf->read_arg(PC); } - void prefetch(); - void prefetch_noirq(); + void prefetch_start(); + void prefetch_end(); + void prefetch_end_noirq(); void set_nz(uint8_t v); u32 XPC; diff --git a/src/devices/cpu/m6502/m6502make.py b/src/devices/cpu/m6502/m6502make.py index ed9bcc20169..6494c633b23 100755 --- a/src/devices/cpu/m6502/m6502make.py +++ b/src/devices/cpu/m6502/m6502make.py @@ -31,7 +31,16 @@ def load_opcodes(fname): if not line: continue if line.startswith(" ") or line.startswith("\t"): # append instruction to last opcode - opcodes[-1][1].append(line) + if line == '\tprefetch();': + opcodes[-1][1].append("\tprefetch_start();") + opcodes[-1][1].append("\tIR = mintf->read_sync(PC);") + opcodes[-1][1].append("\tprefetch_end();") + elif line == '\tprefetch_noirq();': + opcodes[-1][1].append("\tprefetch_start();") + opcodes[-1][1].append("\tIR = mintf->read_sync(PC);") + opcodes[-1][1].append("\tprefetch_end_noirq();") + else: + opcodes[-1][1].append(line) else: # add new opcode opcodes.append((line, [])) @@ -59,62 +68,10 @@ def emit(f, text): """write string to file""" print(text, file=f) -FULL_PROLOG="""\ -void %(device)s_device::%(opcode)s_full() -{ -""" - -FULL_EPILOG="""\ -} -""" - -FULL_EAT_ALL="""\ -\ticount=0; inst_substate = %(substate)s; return; -""" - -FULL_MEMORY="""\ -\tif(icount == 0) { inst_substate = %(substate)s; return; } -%(ins)s -\ticount--; -""" - -FULL_NONE="""\ -%(ins)s -""" - -PARTIAL_PROLOG="""\ -void %(device)s_device::%(opcode)s_partial() -{ -switch(inst_substate) { -case 0: -""" -PARTIAL_EPILOG="""\ -} -\tinst_substate = 0; -} - -""" - -PARTIAL_EAT_ALL="""\ -\ticount=0; inst_substate = %(substate)s; return; -case %(substate)s:; -""" - -PARTIAL_MEMORY="""\ -\tif(icount == 0) { inst_substate = %(substate)s; return; } -\t[[fallthrough]]; -case %(substate)s: -%(ins)s -\ticount--; -""" - -PARTIAL_NONE="""\ -%(ins)s -""" def identify_line_type(ins): if "eat-all-cycles" in ins: return "EAT" - for s in ["read", "write", "prefetch(", "prefetch_noirq("]: + for s in ["read", "write"]: if s in ins: return "MEMORY" return "NONE" @@ -122,41 +79,69 @@ def identify_line_type(ins): def save_opcodes(f, device, opcodes): for name, instructions in opcodes: - d = { "device": device, - "opcode": name, - } - - emit(f, FULL_PROLOG % d) + emit(f, "void %s_device::%s_full()" % (device, name)) + emit(f, "{") substate = 1 for ins in instructions: - d["substate"] = str(substate) - d["ins"] = ins line_type = identify_line_type(ins) if line_type == "EAT": - emit(f, FULL_EAT_ALL % d) + emit(f, "\ticount = 0;") + emit(f, "\tinst_substate = %d;" % substate) + emit(f, "\treturn;") substate += 1 elif line_type == "MEMORY": - emit(f, FULL_MEMORY % d) - substate += 1 + emit(f, ins) + emit(f, "\ticount--;") + emit(f, "\tif(icount <= 0) {") + emit(f, "\t\tif(access_to_be_redone()) {") + emit(f, "\t\t\ticount++;") + emit(f, "\t\t\tinst_substate = %d;" % substate) + emit(f, "\t\t} else") + emit(f, "\t\t\tinst_substate = %d;" % (substate+1)) + emit(f, "\t\treturn;") + emit(f, "\t}") + substate += 2 else: - emit(f, FULL_NONE %d) - emit(f, FULL_EPILOG % d) - - emit(f, PARTIAL_PROLOG % d) + emit(f, ins) + emit(f, "}") + emit(f, "") + + emit(f, "void %s_device::%s_partial()" % (device, name)) + emit(f, "{") + emit(f, "\tswitch(inst_substate) {") + emit(f, "case 0:") substate = 1 for ins in instructions: - d["substate"] = str(substate) - d["ins"] = ins line_type = identify_line_type(ins) if line_type == "EAT": - emit(f, PARTIAL_EAT_ALL % d) + emit(f, "\ticount = 0;") + emit(f, "\tinst_substate = %d;" % substate) + emit(f, "\treturn;") + emit(f, "\tcase %d:;" % substate) substate += 1 elif line_type == "MEMORY": - emit(f, PARTIAL_MEMORY % d) - substate += 1 + emit(f, "\t[[fallthrough]];") + emit(f, "case %d:" % substate) + emit(f, ins) + emit(f, "\ticount--;") + emit(f, "\tif(icount <= 0) {") + emit(f, "\t\tif(access_to_be_redone()) {") + emit(f, "\t\t\ticount++;") + emit(f, "\t\t\tinst_substate = %d;" % substate) + emit(f, "\t\t} else") + emit(f, "\t\t\tinst_substate = %d;" % (substate+1)) + emit(f, "\t\treturn;") + emit(f, "\t}") + emit(f, "\t[[fallthrough]];") + emit(f, "case %d:;" % (substate+1)) + substate += 2 else: - emit(f, PARTIAL_NONE %d) - emit(f, PARTIAL_EPILOG % d) + emit(f, ins) + emit(f, "\tbreak;") + emit(f, "}") + emit(f, "\tinst_substate = 0;") + emit(f, "}") + emit(f, "") DO_EXEC_FULL_PROLOG="""\ diff --git a/src/devices/cpu/m6502/odeco16.lst b/src/devices/cpu/m6502/odeco16.lst index 61b74c247e4..442e7962885 100644 --- a/src/devices/cpu/m6502/odeco16.lst +++ b/src/devices/cpu/m6502/odeco16.lst @@ -4,9 +4,10 @@ brk_16_imp // The 6502 bug when a nmi occurs in a brk is reproduced (case !irq_taken && nmi_pending) if(irq_taken) { - read_pc_noinc(); + read(PC); } else { - read_pc(); + read(PC); + PC++; } write(SP, PC >> 8); dec_SP(); @@ -35,61 +36,71 @@ ill_non prefetch(); u0B_zpg - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; if(DECO16_VERBOSE) logerror("%s: OP0B %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); u13_zpg - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; if(DECO16_VERBOSE) logerror("%s: OP13 %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); u23_zpg - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; if(DECO16_VERBOSE) logerror("%s: OP23 %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); u3F_zpg - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; if(DECO16_VERBOSE) logerror("%s: OPBB %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); u4B_zpg - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; A = io->read_byte(1); prefetch(); u87_zpg - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; if(DECO16_VERBOSE) logerror("%s: OP87 %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); u8F_zpg - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; if(DECO16_VERBOSE) logerror("%s: OP8F (BANK) %02x (%04x)\n", tag(), NPC, TMP2); io->write_byte(0, TMP2); prefetch(); uA3_zpg - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; if(DECO16_VERBOSE) logerror("%s: OPA3 %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); uBB_zpg - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; if(DECO16_VERBOSE) logerror("%s: OPBB %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); vbl_zpg - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; A = io->read_byte(0); //if(DECO16_VERBOSE) // logerror("%s: VBL %02x (%04x)\n", tag(), NPC, TMP2); diff --git a/src/devices/cpu/m6502/om6502.lst b/src/devices/cpu/m6502/om6502.lst index 5252fdf424f..4e801650a30 100644 --- a/src/devices/cpu/m6502/om6502.lst +++ b/src/devices/cpu/m6502/om6502.lst @@ -5,15 +5,19 @@ # documented opcodes adc_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); do_adc(TMP2); prefetch(); adc_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } @@ -23,8 +27,10 @@ adc_abx prefetch(); adc_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } @@ -34,113 +40,141 @@ adc_aby prefetch(); adc_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_adc(read(TMP)); + TMP2 = read(TMP); + do_adc(TMP2); prefetch(); adc_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } - do_adc(read(TMP+Y)); + TMP2 = read(TMP+Y); + do_adc(TMP2); prefetch(); adc_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_adc(TMP); prefetch(); adc_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); do_adc(TMP2); prefetch(); adc_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP2 = read(uint8_t(TMP+X)); do_adc(TMP2); prefetch(); and_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); - A &= read(TMP); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); and_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } TMP += X; - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); and_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } TMP += Y; - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); and_imm - A &= read_pc(); + TMP = read(PC); + PC++; + A &= TMP; set_nz(A); prefetch(); and_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); and_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } - A &= read(TMP+Y); + TMP2 = read(TMP+Y); + A &= TMP2; set_nz(A); prefetch(); and_zpg - TMP = read_pc(); - A &= read(TMP); + TMP = read(PC); + PC++; + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); and_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); - A &= read(uint8_t(TMP+X)); + TMP2 = read(uint8_t(TMP+X)); + A &= TMP2; set_nz(A); prefetch(); asl_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_asl(TMP2); @@ -148,8 +182,10 @@ asl_aba prefetch(); asl_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -159,12 +195,13 @@ asl_abx prefetch(); asl_acc - read_pc_noinc(); + read(PC); A = do_asl(A); prefetch(); asl_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_asl(TMP2); @@ -172,7 +209,8 @@ asl_zpg prefetch(); asl_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -182,9 +220,10 @@ asl_zpx prefetch(); bcc_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(!(P & F_C)) { - read_pc_noinc(); + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -193,9 +232,10 @@ bcc_rel prefetch(); bcs_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(P & F_C) { - read_pc_noinc(); + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -204,9 +244,10 @@ bcs_rel prefetch(); beq_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(P & F_Z) { - read_pc_noinc(); + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -215,20 +256,26 @@ beq_rel prefetch(); bit_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); - do_bit(read(TMP)); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; + TMP2 = read(TMP); + do_bit(TMP2); prefetch(); bit_zpg - TMP = read_pc(); - do_bit(read(TMP)); + TMP = read(PC); + PC++; + TMP2 = read(TMP); + do_bit(TMP2); prefetch(); bmi_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(P & F_N) { - read_pc_noinc(); + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -237,9 +284,10 @@ bmi_rel prefetch(); bne_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(!(P & F_Z)) { - read_pc_noinc(); + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -248,9 +296,10 @@ bne_rel prefetch(); bpl_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(!(P & F_N)) { - read_pc_noinc(); + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -261,9 +310,10 @@ bpl_rel brk_imp // The 6502 bug when a nmi occurs in a brk is reproduced (case !irq_taken && nmi_pending) if(irq_taken) { - read_pc_noinc(); + read(PC); } else { - read_pc(); + read(PC); + PC++; } write(SP, PC >> 8); dec_SP(); @@ -288,9 +338,10 @@ brk_imp inst_state = -1; bvc_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(!(P & F_V)) { - read_pc_noinc(); + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -299,9 +350,10 @@ bvc_rel prefetch(); bvs_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(P & F_V) { - read_pc_noinc(); + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -310,35 +362,39 @@ bvs_rel prefetch(); clc_imp - read_pc_noinc(); + read(PC); P &= ~F_C; prefetch(); cld_imp - read_pc_noinc(); + read(PC); P &= ~F_D; prefetch(); cli_imp - read_pc_noinc(); + read(PC); prefetch(); P &= ~F_I; // Do *not* move it before the prefetch clv_imp - read_pc_noinc(); + read(PC); P &= ~F_V; prefetch(); cmp_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); do_cmp(A, TMP2); prefetch(); cmp_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } @@ -348,8 +404,10 @@ cmp_abx prefetch(); cmp_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } @@ -359,81 +417,98 @@ cmp_aby prefetch(); cmp_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_cmp(A, read(TMP)); + TMP2 = read(TMP); + do_cmp(A, TMP2); prefetch(); cmp_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } - do_cmp(A, read(TMP+Y)); + TMP2 = read(TMP+Y); + do_cmp(A, TMP2); prefetch(); cmp_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_cmp(A, TMP); prefetch(); cmp_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); do_cmp(A, TMP2); prefetch(); cmp_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP2 = read(uint8_t(TMP+X)); do_cmp(A, TMP2); prefetch(); cpx_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); do_cmp(X, TMP2); prefetch(); cpx_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_cmp(X, TMP); prefetch(); cpx_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); do_cmp(X, TMP2); prefetch(); cpy_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); do_cmp(Y, TMP2); prefetch(); cpy_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_cmp(Y, TMP); prefetch(); cpy_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); do_cmp(Y, TMP2); prefetch(); dec_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2--; @@ -442,8 +517,10 @@ dec_aba prefetch(); dec_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -454,7 +531,8 @@ dec_abx prefetch(); dec_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2--; @@ -463,7 +541,8 @@ dec_zpg prefetch(); dec_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -474,88 +553,109 @@ dec_zpx prefetch(); dex_imp - read_pc_noinc(); + read(PC); X--; set_nz(X); prefetch(); dey_imp - read_pc_noinc(); + read(PC); Y--; set_nz(Y); prefetch(); eor_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); - A ^= read(TMP); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } TMP += X; - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } TMP += Y; - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } - A ^= read(TMP+Y); + TMP2 = read(TMP+Y); + A ^= TMP2; set_nz(A); prefetch(); eor_imm - A ^= read_pc(); + TMP = read(PC); + PC++; + A ^= TMP; set_nz(A); prefetch(); eor_zpg - TMP = read_pc(); - A ^= read(TMP); + TMP = read(PC); + PC++; + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); - A ^= read(uint8_t(TMP+X)); + TMP2 = read(uint8_t(TMP+X)); + A ^= TMP2; set_nz(A); prefetch(); inc_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2++; @@ -564,8 +664,10 @@ inc_aba prefetch(); inc_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -576,7 +678,8 @@ inc_abx prefetch(); inc_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2++; @@ -585,7 +688,8 @@ inc_zpg prefetch(); inc_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -596,51 +700,59 @@ inc_zpx prefetch(); inx_imp - read_pc_noinc(); + read(PC); X++; set_nz(X); prefetch(); iny_imp - read_pc_noinc(); + read(PC); Y++; set_nz(Y); prefetch(); jmp_adr - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); PC = TMP; prefetch(); jmp_ind - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; PC = read(TMP); PC = set_h(PC, read(set_l(TMP, TMP+1))); prefetch(); jsr_adr - TMP = read_pc(); + TMP = read(PC); + PC++; read(SP); write(SP, PC>>8); dec_SP(); write(SP, PC); dec_SP(); - TMP = set_h(TMP, read_pc()); + TMP = set_h(TMP, read(PC)); PC = TMP; prefetch(); lda_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; A = read(TMP); set_nz(A); prefetch(); lda_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } @@ -649,8 +761,10 @@ lda_abx prefetch(); lda_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } @@ -659,7 +773,8 @@ lda_aby prefetch(); lda_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); @@ -669,7 +784,8 @@ lda_idx prefetch(); lda_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { @@ -680,33 +796,40 @@ lda_idy prefetch(); lda_imm - A = read_pc(); + A = read(PC); + PC++; set_nz(A); prefetch(); lda_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; A = read(TMP); set_nz(A); prefetch(); lda_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); A = read(uint8_t(TMP+X)); set_nz(A); prefetch(); ldx_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; X = read(TMP); set_nz(X); prefetch(); ldx_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } @@ -715,33 +838,40 @@ ldx_aby prefetch(); ldx_imm - X = read_pc(); + X = read(PC); + PC++; set_nz(X); prefetch(); ldx_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; X = read(TMP); set_nz(X); prefetch(); ldx_zpy - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); X = read(uint8_t(TMP+Y)); set_nz(X); prefetch(); ldy_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; Y = read(TMP); set_nz(Y); prefetch(); ldy_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } @@ -751,26 +881,31 @@ ldy_abx prefetch(); ldy_imm - Y = read_pc(); + Y = read(PC); + PC++; set_nz(Y); prefetch(); ldy_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; Y = read(TMP); set_nz(Y); prefetch(); ldy_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); Y = read(uint8_t(TMP+X)); set_nz(Y); prefetch(); lsr_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_lsr(TMP2); @@ -778,8 +913,10 @@ lsr_aba prefetch(); lsr_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -789,12 +926,13 @@ lsr_abx prefetch(); lsr_acc - read_pc_noinc(); + read(PC); A = do_lsr(A); prefetch(); lsr_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_lsr(TMP2); @@ -802,7 +940,8 @@ lsr_zpg prefetch(); lsr_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -812,91 +951,110 @@ lsr_zpx prefetch(); nop_imp - read_pc_noinc(); + read(PC); prefetch(); ora_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); - A |= read(TMP); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); ora_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } TMP += X; - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); ora_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } TMP += Y; - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); ora_imm - A |= read_pc(); + TMP = read(PC); + PC++; + A |= TMP; set_nz(A); prefetch(); ora_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); ora_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } - A |= read(TMP+Y); + TMP2 = read(TMP+Y); + A |= TMP2; set_nz(A); prefetch(); ora_zpg - TMP = read_pc(); - A |= read(TMP); + TMP = read(PC); + PC++; + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); ora_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); - A |= read(uint8_t(TMP+X)); + TMP2 = read(uint8_t(TMP+X)); + A |= TMP2; set_nz(A); prefetch(); pha_imp - read_pc_noinc(); + read(PC); write(SP, A); dec_SP(); prefetch(); php_imp - read_pc_noinc(); + read(PC); write(SP, P); dec_SP(); prefetch(); pla_imp - read_pc_noinc(); + read(PC); read(SP); inc_SP(); A = read(SP); @@ -904,7 +1062,7 @@ pla_imp prefetch(); plp_imp - read_pc_noinc(); + read(PC); read(SP); inc_SP(); TMP = read(SP) | (F_B|F_E); @@ -912,8 +1070,10 @@ plp_imp P = TMP; // Do *not* move it before the prefetch rol_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_rol(TMP2); @@ -921,8 +1081,10 @@ rol_aba prefetch(); rol_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -932,12 +1094,13 @@ rol_abx prefetch(); rol_acc - read_pc_noinc(); + read(PC); A = do_rol(A); prefetch(); rol_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_rol(TMP2); @@ -945,7 +1108,8 @@ rol_zpg prefetch(); rol_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -955,8 +1119,10 @@ rol_zpx prefetch(); ror_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_ror(TMP2); @@ -964,8 +1130,10 @@ ror_aba prefetch(); ror_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -975,12 +1143,13 @@ ror_abx prefetch(); ror_acc - read_pc_noinc(); + read(PC); A = do_ror(A); prefetch(); ror_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_ror(TMP2); @@ -988,7 +1157,8 @@ ror_zpg prefetch(); ror_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -998,7 +1168,7 @@ ror_zpx prefetch(); rti_imp - read_pc_noinc(); + read(PC); read(SP); inc_SP(); P = read(SP) | (F_B|F_E); @@ -1009,25 +1179,30 @@ rti_imp prefetch(); rts_imp - read_pc_noinc(); + read(PC); read(SP); inc_SP(); PC = read(SP); inc_SP(); PC = set_h(PC, read(SP)); - read_pc(); + read(PC); + PC++; prefetch(); sbc_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); do_sbc(TMP2); prefetch(); sbc_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } @@ -1037,8 +1212,10 @@ sbc_abx prefetch(); sbc_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } @@ -1048,79 +1225,93 @@ sbc_aby prefetch(); sbc_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_sbc(read(TMP)); + TMP2 = read(TMP); + do_sbc(TMP2); prefetch(); sbc_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } - do_sbc(read(TMP+Y)); + TMP2 = read(TMP+Y); + do_sbc(TMP2); prefetch(); sbc_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_sbc(TMP); prefetch(); sbc_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); do_sbc(TMP2); prefetch(); sbc_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP2 = read(uint8_t(TMP+X)); do_sbc(TMP2); prefetch(); sec_imp - read_pc_noinc(); + read(PC); P |= F_C; prefetch(); sed_imp - read_pc_noinc(); + read(PC); P |= F_D; prefetch(); sei_imp - read_pc_noinc(); + read(PC); prefetch(); P |= F_I; // Do *not* move it before the prefetch sta_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP, A); prefetch(); sta_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); write(TMP+X, A); prefetch(); sta_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+Y)); write(TMP+Y, A); prefetch(); sta_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); @@ -1129,7 +1320,8 @@ sta_idx prefetch(); sta_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); @@ -1137,89 +1329,99 @@ sta_idy prefetch(); sta_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; write(TMP, A); prefetch(); sta_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); write(uint8_t(TMP+X), A); prefetch(); stx_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP, X); prefetch(); stx_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; write(TMP, X); prefetch(); stx_zpy - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); write(uint8_t(TMP+Y), X); prefetch(); sty_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP, Y); prefetch(); sty_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; write(TMP, Y); prefetch(); sty_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); write(uint8_t(TMP+X), Y); prefetch(); tax_imp - read_pc_noinc(); + read(PC); X = A; set_nz(X); prefetch(); tay_imp - read_pc_noinc(); + read(PC); Y = A; set_nz(Y); prefetch(); tsx_imp - read_pc_noinc(); + read(PC); X = SP; set_nz(X); prefetch(); txa_imp - read_pc_noinc(); + read(PC); A = X; set_nz(A); prefetch(); txs_imp - read_pc_noinc(); + read(PC); SP = set_l(SP, X); prefetch(); tya_imp - read_pc_noinc(); + read(PC); A = Y; set_nz(A); prefetch(); # exceptions reset - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); read(SP); dec_SP(); read(SP); @@ -1235,8 +1437,10 @@ reset # undocumented reliable instructions dcp_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2--; @@ -1245,8 +1449,10 @@ dcp_aba prefetch(); dcp_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1257,8 +1463,10 @@ dcp_abx prefetch(); dcp_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1269,7 +1477,8 @@ dcp_aby prefetch(); dcp_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); @@ -1282,7 +1491,8 @@ dcp_idx prefetch(); dcp_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); @@ -1295,7 +1505,8 @@ dcp_idy prefetch(); dcp_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2--; @@ -1304,7 +1515,8 @@ dcp_zpg prefetch(); dcp_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -1315,8 +1527,10 @@ dcp_zpx prefetch(); isb_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2++; @@ -1325,8 +1539,10 @@ isb_aba prefetch(); isb_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1337,8 +1553,10 @@ isb_abx prefetch(); isb_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1349,7 +1567,8 @@ isb_aby prefetch(); isb_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); @@ -1362,7 +1581,8 @@ isb_idx prefetch(); isb_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); @@ -1375,7 +1595,8 @@ isb_idy prefetch(); isb_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2++; @@ -1384,7 +1605,8 @@ isb_zpg prefetch(); isb_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -1395,15 +1617,19 @@ isb_zpx prefetch(); lax_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; A = X = read(TMP); set_nz(A); prefetch(); lax_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } @@ -1412,7 +1638,8 @@ lax_aby prefetch(); lax_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); @@ -1422,7 +1649,8 @@ lax_idx prefetch(); lax_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { @@ -1433,13 +1661,15 @@ lax_idy prefetch(); lax_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; A = X = read(TMP); set_nz(A); prefetch(); lax_zpy - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+Y); A = X = read(TMP); @@ -1447,8 +1677,10 @@ lax_zpy prefetch(); rla_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_rol(TMP2); @@ -1458,8 +1690,10 @@ rla_aba prefetch(); rla_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1471,8 +1705,10 @@ rla_abx prefetch(); rla_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1484,7 +1720,8 @@ rla_aby prefetch(); rla_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); @@ -1498,7 +1735,8 @@ rla_idx prefetch(); rla_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); @@ -1512,7 +1750,8 @@ rla_idy prefetch(); rla_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_rol(TMP2); @@ -1522,7 +1761,8 @@ rla_zpg prefetch(); rla_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -1534,8 +1774,10 @@ rla_zpx prefetch(); rra_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_ror(TMP2); @@ -1544,8 +1786,10 @@ rra_aba prefetch(); rra_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1556,8 +1800,10 @@ rra_abx prefetch(); rra_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1568,7 +1814,8 @@ rra_aby prefetch(); rra_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); @@ -1581,7 +1828,8 @@ rra_idx prefetch(); rra_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); @@ -1594,7 +1842,8 @@ rra_idy prefetch(); rra_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_ror(TMP2); @@ -1603,7 +1852,8 @@ rra_zpg prefetch(); rra_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -1614,14 +1864,17 @@ rra_zpx prefetch(); sax_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = A & X; write(TMP, TMP2); prefetch(); sax_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); @@ -1631,13 +1884,15 @@ sax_idx prefetch(); sax_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = A & X; write(TMP, TMP2); prefetch(); sax_zpy - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+Y); TMP2 = A & X; @@ -1645,7 +1900,8 @@ sax_zpy prefetch(); sbx_imm - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; X &= A; if(X < TMP2) P &= ~F_C; @@ -1656,8 +1912,10 @@ sbx_imm prefetch(); sha_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+Y)); TMP2 = A & X & ((TMP >> 8)+1); if(page_changing(TMP, Y)) @@ -1668,7 +1926,8 @@ sha_aby prefetch(); sha_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); @@ -1681,8 +1940,10 @@ sha_idy prefetch(); shs_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+Y)); SP = set_l(SP, A & X); TMP2 = A & X & ((TMP >> 8)+1); @@ -1694,8 +1955,10 @@ shs_aby prefetch(); shx_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+Y)); TMP2 = X & ((TMP >> 8)+1); if(page_changing(TMP, Y)) @@ -1706,8 +1969,10 @@ shx_aby prefetch(); shy_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP2 = Y & ((TMP >> 8)+1); if(page_changing(TMP, X)) @@ -1718,8 +1983,10 @@ shy_abx prefetch(); slo_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_asl(TMP2); @@ -1729,8 +1996,10 @@ slo_aba prefetch(); slo_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1742,8 +2011,10 @@ slo_abx prefetch(); slo_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1755,7 +2026,8 @@ slo_aby prefetch(); slo_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); @@ -1769,7 +2041,8 @@ slo_idx prefetch(); slo_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); @@ -1783,7 +2056,8 @@ slo_idy prefetch(); slo_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_asl(TMP2); @@ -1793,7 +2067,8 @@ slo_zpg prefetch(); slo_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -1805,8 +2080,10 @@ slo_zpx prefetch(); sre_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_lsr(TMP2); @@ -1816,8 +2093,10 @@ sre_aba prefetch(); sre_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1829,8 +2108,10 @@ sre_abx prefetch(); sre_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1842,7 +2123,8 @@ sre_aby prefetch(); sre_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); @@ -1856,7 +2138,8 @@ sre_idx prefetch(); sre_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); @@ -1870,7 +2153,8 @@ sre_idy prefetch(); sre_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_lsr(TMP2); @@ -1880,7 +2164,8 @@ sre_zpg prefetch(); sre_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -1893,7 +2178,9 @@ sre_zpx # undocumented unreliable instructions anc_imm - A &= read_pc(); + TMP = read(PC); + PC++; + A &= TMP; set_nz(A); if(A & 0x80) P |= F_C; @@ -1902,24 +2189,30 @@ anc_imm prefetch(); ane_imm - TMP2 = read_pc(); - A &= TMP2 & X; + TMP = read(PC); + PC++; + A &= TMP & X; set_nz(A); prefetch(); asr_imm - A &= read_pc(); - A = do_lsr(A); + TMP = read(PC); + PC++; + A = do_lsr(A & TMP); prefetch(); arr_imm - A &= read_pc(); + TMP = read(PC); + PC++; + A &= TMP; do_arr(); prefetch(); las_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } @@ -1930,20 +2223,25 @@ las_aby prefetch(); lxa_imm - A = X = read_pc(); + A = X = read(PC); + PC++; set_nz(A); prefetch(); # nop variants nop_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(TMP); prefetch(); nop_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } @@ -1951,23 +2249,27 @@ nop_abx prefetch(); nop_imm - read_pc(); + read(PC); + PC++; prefetch(); nop_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); prefetch(); nop_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); read(uint8_t(TMP+X)); prefetch(); # system killers kil_non - read_pc(); + read(PC); + PC++; read(0xffff); read(0xfffe); read(0xfffe); diff --git a/src/devices/cpu/m6502/om6509.lst b/src/devices/cpu/m6502/om6509.lst index 8c9a6f9baa1..30ce622c502 100644 --- a/src/devices/cpu/m6502/om6509.lst +++ b/src/devices/cpu/m6502/om6509.lst @@ -3,7 +3,8 @@ # 6509 opcodes lda_9_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { @@ -14,7 +15,8 @@ lda_9_idy prefetch(); sta_9_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_9(set_l(TMP, TMP+Y)); diff --git a/src/devices/cpu/m6502/om6510.lst b/src/devices/cpu/m6502/om6510.lst index 1ad0dfc0182..d31fdf50ee5 100644 --- a/src/devices/cpu/m6502/om6510.lst +++ b/src/devices/cpu/m6502/om6510.lst @@ -2,7 +2,8 @@ # copyright-holders:Olivier Galibert # 6510 undocumented instructions in a C64 context anc_10_imm - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; A &= TMP2; set_nz(A); if(A & 0x80) @@ -12,26 +13,31 @@ anc_10_imm prefetch(); ane_10_imm - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; A = (A | 0xee) & TMP2 & X; set_nz(A); prefetch(); asr_10_imm - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; A = do_lsr(A & TMP2); set_nz(A); prefetch(); arr_10_imm - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; A &= TMP2; do_arr(); prefetch(); las_10_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } @@ -42,7 +48,8 @@ las_10_aby prefetch(); lxa_10_imm - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; A = X = (A | 0xee) & TMP2; set_nz(A); prefetch(); diff --git a/src/devices/cpu/m6502/om65c02.lst b/src/devices/cpu/m6502/om65c02.lst index 516631c699c..84302351650 100644 --- a/src/devices/cpu/m6502/om65c02.lst +++ b/src/devices/cpu/m6502/om65c02.lst @@ -3,19 +3,23 @@ # m65c02 opcodes adc_c_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); adc_c_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } @@ -23,14 +27,16 @@ adc_c_abx TMP2 = read(TMP); do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); adc_c_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } @@ -38,90 +44,103 @@ adc_c_aby TMP2 = read(TMP); do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); adc_c_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_adc(read(TMP)); + TMP2 = read(TMP); + do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); adc_c_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } - do_adc(read(TMP+Y)); + TMP2 = read(TMP+Y); + do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); adc_c_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_adc(TMP); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); adc_c_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); adc_c_zpi - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_adc(read(TMP)); + TMP2 = read(TMP); + do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); adc_c_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP2 = read(uint8_t(TMP+X)); do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); and_zpi - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); asl_c_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read(TMP); TMP2 = do_asl(TMP2); @@ -129,8 +148,10 @@ asl_c_aba prefetch(); asl_c_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -140,7 +161,8 @@ asl_c_abx prefetch(); asl_c_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read(TMP); TMP2 = do_asl(TMP2); @@ -148,7 +170,8 @@ asl_c_zpg prefetch(); asl_c_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -158,12 +181,14 @@ asl_c_zpx prefetch(); bbr_zpb - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read(TMP); - TMP = read_pc(); + TMP = read(PC); + PC++; if(!(TMP2 & (1 << ((inst_state >> 4) & 7)))) { - read_pc_noinc(); + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -172,12 +197,14 @@ bbr_zpb prefetch(); bbs_zpb - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read(TMP); - TMP = read_pc(); + TMP = read(PC); + PC++; if(TMP2 & (1 << ((inst_state >> 4) & 7))) { - read_pc_noinc(); + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -186,17 +213,21 @@ bbs_zpb prefetch(); bit_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } TMP += X; - do_bit(read(TMP)); + TMP2 = read(TMP); + do_bit(TMP2); prefetch(); bit_imm - TMP = read_pc(); + TMP = read(PC); + PC++; if(A & TMP) P &= ~F_Z; else @@ -204,15 +235,17 @@ bit_imm prefetch(); bit_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP2 = read(uint8_t(TMP+X)); do_bit(TMP2); prefetch(); bra_rel - TMP = read_pc(); - read_pc_noinc(); + TMP = read(PC); + PC++; + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -221,9 +254,10 @@ bra_rel brk_c_imp if(irq_taken || nmi_pending) { - read_pc_noinc(); + read(PC); } else { - read_pc(); + read(PC); + PC++; } write(SP, PC >> 8); dec_SP(); @@ -248,21 +282,25 @@ brk_c_imp inst_state = -1; cmp_zpi - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_cmp(A, read(TMP)); + TMP2 = read(TMP); + do_cmp(A, TMP2); prefetch(); dec_acc - read_pc_noinc(); + read(PC); A--; set_nz(A); prefetch(); dec_c_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read(TMP); TMP2--; @@ -271,8 +309,10 @@ dec_c_aba prefetch(); dec_c_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -283,7 +323,8 @@ dec_c_abx prefetch(); dec_c_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read(TMP); TMP2--; @@ -292,7 +333,8 @@ dec_c_zpg prefetch(); dec_c_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -303,22 +345,26 @@ dec_c_zpx prefetch(); eor_zpi - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); inc_acc - read_pc_noinc(); + read(PC); A++; set_nz(A); prefetch(); inc_c_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read(TMP); TMP2++; @@ -327,8 +373,10 @@ inc_c_aba prefetch(); inc_c_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -339,7 +387,8 @@ inc_c_abx prefetch(); inc_c_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read(TMP); TMP2++; @@ -348,7 +397,8 @@ inc_c_zpg prefetch(); inc_c_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -359,8 +409,10 @@ inc_c_zpx prefetch(); jmp_iax - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; PC = read(TMP); @@ -368,15 +420,18 @@ jmp_iax prefetch(); jmp_c_ind - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; PC = read(TMP); read(set_l(TMP, TMP+1)); PC = set_h(PC, read(TMP+1)); prefetch(); lda_zpi - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); A = read(TMP); @@ -384,8 +439,10 @@ lda_zpi prefetch(); lsr_c_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read(TMP); TMP2 = do_lsr(TMP2); @@ -393,8 +450,10 @@ lsr_c_aba prefetch(); lsr_c_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -404,7 +463,8 @@ lsr_c_abx prefetch(); lsr_c_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read(TMP); TMP2 = do_lsr(TMP2); @@ -412,7 +472,8 @@ lsr_c_zpg prefetch(); lsr_c_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -425,43 +486,49 @@ nop_c_imp prefetch(); nop_c_aba - read_pc(); - read_pc(); - read_pc_noinc(); - read_pc_noinc(); - read_pc_noinc(); - read_pc_noinc(); - read_pc_noinc(); + read(PC); + PC++; + read(PC); + PC++; + read(PC); + read(PC); + read(PC); + read(PC); + read(PC); prefetch(); nop_c_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); prefetch(); ora_zpi - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); phx_imp - read_pc_noinc(); + read(PC); write(SP, X); dec_SP(); prefetch(); phy_imp - read_pc_noinc(); + read(PC); write(SP, Y); dec_SP(); prefetch(); plx_imp - read_pc_noinc(); + read(PC); read(SP); inc_SP(); X = read(SP); @@ -469,7 +536,7 @@ plx_imp prefetch(); ply_imp - read_pc_noinc(); + read(PC); read(SP); inc_SP(); Y = read(SP); @@ -477,7 +544,8 @@ ply_imp prefetch(); rmb_bzp - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read(TMP); TMP2 &= ~(1 << ((inst_state >> 4) & 7)); @@ -485,8 +553,10 @@ rmb_bzp prefetch(); rol_c_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read(TMP); TMP2 = do_rol(TMP2); @@ -494,8 +564,10 @@ rol_c_aba prefetch(); rol_c_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -505,7 +577,8 @@ rol_c_abx prefetch(); rol_c_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read(TMP); TMP2 = do_rol(TMP2); @@ -513,7 +586,8 @@ rol_c_zpg prefetch(); rol_c_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -523,8 +597,10 @@ rol_c_zpx prefetch(); ror_c_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read(TMP); TMP2 = do_ror(TMP2); @@ -532,8 +608,10 @@ ror_c_aba prefetch(); ror_c_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -543,7 +621,8 @@ ror_c_abx prefetch(); ror_c_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read(TMP); TMP2 = do_ror(TMP2); @@ -551,7 +630,8 @@ ror_c_zpg prefetch(); ror_c_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -561,19 +641,23 @@ ror_c_zpx prefetch(); sbc_c_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); sbc_c_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } @@ -581,14 +665,16 @@ sbc_c_abx TMP2 = read(TMP); do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); sbc_c_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } @@ -596,81 +682,91 @@ sbc_c_aby TMP2 = read(TMP); do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); sbc_c_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_sbc(read(TMP)); + TMP2 = read(TMP); + do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); sbc_c_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } - do_sbc(read(TMP+Y)); + TMP2 = read(TMP+Y); + do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); sbc_c_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_sbc(TMP); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); sbc_c_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); sbc_c_zpi - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_sbc(read(TMP)); + TMP2 = read(TMP); + do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); sbc_c_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP2 = read(uint8_t(TMP+X)); do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); smb_bzp - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read(TMP); TMP2 |= 1 << ((inst_state >> 4) & 7); @@ -678,7 +774,8 @@ smb_bzp prefetch(); sta_zpi - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); write(TMP, A); @@ -690,32 +787,40 @@ stp_imp } stz_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP, 0x00); prefetch(); stz_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); write(TMP+X, 0x00); prefetch(); stz_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; write(TMP, 0x00); prefetch(); stz_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); write(uint8_t(TMP+X), 0x00); prefetch(); trb_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read(TMP); if(A & TMP2) @@ -727,7 +832,8 @@ trb_aba prefetch(); trb_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read(TMP); if(A & TMP2) @@ -739,8 +845,10 @@ trb_zpg prefetch(); tsb_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read(TMP); if(A & TMP2) @@ -752,7 +860,8 @@ tsb_aba prefetch(); tsb_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read(TMP); if(A & TMP2) @@ -764,8 +873,8 @@ tsb_zpg prefetch(); wai_imp - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); while(!nmi_pending && !irq_state) { eat-all-cycles; } @@ -774,7 +883,7 @@ wai_imp # exceptions reset_c read_arg(0xffff); - read_pc_noinc(); + read(PC); read(SP); dec_SP(); read(SP); diff --git a/src/devices/cpu/m6502/om65ce02.lst b/src/devices/cpu/m6502/om65ce02.lst index 60425c840dc..528b3264b65 100644 --- a/src/devices/cpu/m6502/om65ce02.lst +++ b/src/devices/cpu/m6502/om65ce02.lst @@ -3,8 +3,10 @@ # 65ce02 opcodes, a lot only remove dummy read/write cycles, some are new, some use the B register adc_ce_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); do_adc(TMP2); if(P & F_D) @@ -12,8 +14,10 @@ adc_ce_aba prefetch(); adc_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; TMP2 = read(TMP); do_adc(TMP2); @@ -22,8 +26,10 @@ adc_ce_abx prefetch(); adc_ce_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += Y; TMP2 = read(TMP); do_adc(TMP2); @@ -32,45 +38,53 @@ adc_ce_aby prefetch(); adc_ce_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP2 += X; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - do_adc(read(TMP)); + TMP2 = read(TMP); + do_adc(TMP2); if(P & F_D) set_nz(A); prefetch(); adc_ce_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - do_adc(read(TMP+Y)); + TMP2 = read(TMP+Y); + do_adc(TMP2); if(P & F_D) set_nz(A); prefetch(); adc_idz - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - do_adc(read(TMP+Z)); + TMP2 = read(TMP+Z); + do_adc(TMP2); if(P & F_D) set_nz(A); prefetch(); adc_ce_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_adc(TMP); if(P & F_D) set_nz(A); prefetch(); adc_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(B|TMP); do_adc(TMP2); if(P & F_D) @@ -78,7 +92,8 @@ adc_ce_zpg prefetch(); adc_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(B|uint8_t(TMP+X)); do_adc(TMP2); if(P & F_D) @@ -86,72 +101,92 @@ adc_ce_zpx prefetch(); and_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); and_ce_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += Y; - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); and_ce_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP2 += X; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); and_ce_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - A &= read(TMP+Y); + TMP2 = read(TMP+Y); + A &= TMP2; set_nz(A); prefetch(); and_idz - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - A &= read(TMP+Z); + TMP2 = read(TMP+Z); + A &= TMP2; set_nz(A); prefetch(); and_ce_zpg - TMP = read_pc(); - A &= read(B|TMP); + TMP = read(PC); + PC++; + TMP2 = read(B|TMP); + A &= TMP2; set_nz(A); prefetch(); and_ce_zpx - TMP = read_pc(); - A &= read(B|uint8_t(TMP+X)); + TMP = read(PC); + PC++; + TMP2 = read(B|uint8_t(TMP+X)); + A &= TMP2; set_nz(A); prefetch(); asl_ce_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); TMP2 = do_asl(TMP2); write(TMP, TMP2); prefetch(); asl_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; TMP2 = read(TMP); TMP2 = do_asl(TMP2); @@ -163,14 +198,16 @@ asl_ce_acc prefetch(); asl_ce_zpg - TMP = B|read_pc(); + TMP = B|read(PC); + PC++; TMP2 = read(TMP); TMP2 = do_asl(TMP2); write(TMP, TMP2); prefetch(); asl_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; TMP = B|uint8_t(TMP+X); TMP2 = read(TMP); TMP2 = do_asl(TMP2); @@ -182,14 +219,16 @@ asr_acc prefetch(); asr_zpg - TMP = B|read_pc(); + TMP = B|read(PC); + PC++; TMP2 = read(TMP); TMP2 = do_asr(TMP2); write(TMP, TMP2); prefetch(); asr_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; TMP = B|uint8_t(TMP+X); TMP2 = read(TMP); TMP2 = do_asr(TMP2); @@ -197,8 +236,10 @@ asr_zpx prefetch(); asw_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP3 = read(TMP); TMP3 = set_h(TMP3, read(TMP+1)); P &= ~(F_C|F_N|F_Z); @@ -214,146 +255,181 @@ asw_aba prefetch(); aug_iw3 - read_pc(); - read_pc(); - read_pc(); + read(PC); + PC++; + read(PC); + PC++; + read(PC); + PC++; prefetch(); bbr_ce_zpb // Access pattern uncertain - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); - TMP = read_pc(); + TMP = read(PC); + PC++; if(!(TMP2 & (1 << ((inst_state >> 4) & 7)))) PC += int8_t(TMP); prefetch(); bbs_ce_zpb // Access pattern uncertain - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); - TMP = read_pc(); + TMP = read(PC); + PC++; if(TMP2 & (1 << ((inst_state >> 4) & 7))) PC += int8_t(TMP); prefetch(); bcc_ce_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(!(P & F_C)) PC += int8_t(TMP); prefetch(); bcc_rw2 - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(!(P & F_C)) PC += TMP-1; prefetch(); bcs_ce_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(P & F_C) PC += int8_t(TMP); prefetch(); bcs_rw2 - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(P & F_C) PC += TMP-1; prefetch(); beq_ce_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(P & F_Z) PC += int8_t(TMP); prefetch(); beq_rw2 - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(P & F_Z) PC += TMP-1; prefetch(); bit_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; - do_bit(read(TMP)); + TMP2 = read(TMP); + do_bit(TMP2); prefetch(); bit_ce_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_bit(TMP); prefetch(); bit_ce_zpg - TMP = B|read_pc(); - do_bit(read(TMP)); + TMP = B|read(PC); + PC++; + TMP2 = read(TMP); + do_bit(TMP2); prefetch(); bit_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(B|uint8_t(TMP+X)); do_bit(TMP2); prefetch(); bmi_ce_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(P & F_N) PC += int8_t(TMP); prefetch(); bmi_rw2 - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(P & F_N) PC += TMP-1; prefetch(); bne_ce_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(!(P & F_Z)) PC += int8_t(TMP); prefetch(); bne_rw2 - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(!(P & F_Z)) PC += TMP-1; prefetch(); bpl_ce_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(!(P & F_N)) PC += int8_t(TMP); prefetch(); bpl_rw2 - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(!(P & F_N)) PC += TMP-1; prefetch(); bra_ce_rel - TMP = read_pc(); + TMP = read(PC); + PC++; PC += int8_t(TMP); prefetch(); bra_rw2 - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); - PC += TMP - 1; + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC += TMP; prefetch(); brk_ce_imp if(irq_taken) { - read_pc_noinc(); + read(PC); } else { - read_pc(); + read(PC); + PC++; } write(SP, PC >> 8); dec_SP_ce(); @@ -375,37 +451,45 @@ brk_ce_imp inst_state = -1; bsr_rw2 - TMP = read_pc(); + TMP = read(PC); + PC++; write(SP, PC>>8); dec_SP_ce(); write(SP, PC); dec_SP_ce(); - TMP = set_h(TMP, read_pc()); + TMP = set_h(TMP, read(PC)); + PC++; PC += TMP-1; prefetch(); bvc_ce_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(!(P & F_V)) PC += int8_t(TMP); prefetch(); bvc_rw2 - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(!(P & F_V)) PC += TMP-1; prefetch(); bvs_ce_rel - TMP = read_pc(); + TMP = read(PC); + PC++; if(P & F_V) PC += int8_t(TMP); prefetch(); bvs_rw2 - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(P & F_V) PC += TMP-1; prefetch(); @@ -419,7 +503,7 @@ cld_ce_imp prefetch(); cle_imp - read_pc_noinc(); + read(PC); P &= ~F_E; logerror("CLE\n"); prefetch(); @@ -433,92 +517,112 @@ clv_ce_imp prefetch(); cmp_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; TMP2 = read(TMP); do_cmp(A, TMP2); prefetch(); cmp_ce_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += Y; TMP2 = read(TMP); do_cmp(A, TMP2); prefetch(); cmp_ce_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP2 += X; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - do_cmp(A, read(TMP)); + TMP2 = read(TMP); + do_cmp(A, TMP2); prefetch(); cmp_ce_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - do_cmp(A, read(TMP+Y)); + TMP2 = read(TMP+Y); + do_cmp(A, TMP2); prefetch(); cmp_idz - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - do_cmp(A, read(TMP+Z)); + TMP2 = read(TMP+Z); + do_cmp(A, TMP2); prefetch(); cmp_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(B|TMP); do_cmp(A, TMP2); prefetch(); cmp_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP2 = read(B|uint8_t(TMP+X)); do_cmp(A, TMP2); prefetch(); cpx_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(B|TMP); do_cmp(X, TMP2); prefetch(); cpy_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(B|TMP); do_cmp(Y, TMP2); prefetch(); cpz_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); do_cmp(Z, TMP2); prefetch(); cpz_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_cmp(Z, TMP); prefetch(); cpz_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(B|TMP); do_cmp(Z, TMP2); prefetch(); dec_ce_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); TMP2--; set_nz(TMP2); @@ -526,8 +630,10 @@ dec_ce_aba prefetch(); dec_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; TMP2 = read(TMP); TMP2--; @@ -541,7 +647,8 @@ dec_ce_acc prefetch(); dec_ce_zpg - TMP = B|read_pc(); + TMP = B|read(PC); + PC++; TMP2 = read(TMP); TMP2--; set_nz(TMP2); @@ -549,7 +656,8 @@ dec_ce_zpg prefetch(); dec_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; TMP = B|uint8_t(TMP+X); TMP2 = read(TMP); TMP2--; @@ -558,7 +666,8 @@ dec_ce_zpx prefetch(); dew_zpg - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); @@ -590,64 +699,82 @@ dez_imp prefetch(); eor_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_ce_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += Y; - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_ce_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP2 += X; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_ce_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - A ^= read(TMP+Y); + TMP2 = read(TMP+Y); + A ^= TMP2; set_nz(A); prefetch(); eor_idz - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - A ^= read(TMP+Z); + TMP2 = read(TMP+Z); + A ^= TMP2; set_nz(A); prefetch(); eor_ce_zpg - TMP = read_pc(); - A ^= read(B|TMP); + TMP = read(PC); + PC++; + TMP2 = read(B|TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_ce_zpx - TMP = read_pc(); - A ^= read(B|uint8_t(TMP+X)); + TMP = read(PC); + PC++; + TMP2 = read(B|uint8_t(TMP+X)); + A ^= TMP2; set_nz(A); prefetch(); inc_ce_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); TMP2++; set_nz(TMP2); @@ -655,8 +782,10 @@ inc_ce_aba prefetch(); inc_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; TMP2 = read(TMP); TMP2++; @@ -670,7 +799,8 @@ inc_ce_acc prefetch(); inc_ce_zpg - TMP = B|read_pc(); + TMP = B|read(PC); + PC++; TMP2 = read(TMP); TMP2++; set_nz(TMP2); @@ -678,7 +808,8 @@ inc_ce_zpg prefetch(); inc_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; TMP = B|uint8_t(TMP+X); TMP2 = read(TMP); TMP2++; @@ -687,7 +818,8 @@ inc_ce_zpx prefetch(); inw_zpg - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); @@ -719,69 +851,84 @@ inz_imp prefetch(); jmp_ce_iax - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; PC = read(TMP); PC = set_h(PC, read(TMP+1)); prefetch(); jmp_ce_ind - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; PC = read(TMP); PC = set_h(PC, read(TMP+1)); prefetch(); jsr_ce_adr - TMP = read_pc(); + TMP = read(PC); + PC++; write(SP, PC>>8); dec_SP_ce(); write(SP, PC); dec_SP_ce(); - TMP = set_h(TMP, read_pc()); + TMP = set_h(TMP, read(PC)); + PC++; PC = TMP; prefetch(); jsr_iax - TMP = read_pc(); + TMP = read(PC); + PC++; write(SP, PC>>8); dec_SP_ce(); write(SP, PC); dec_SP_ce(); - TMP = set_h(TMP, read_pc()); + TMP = set_h(TMP, read(PC)); + PC++; PC = read(TMP); PC = set_h(PC, read(TMP+1)); PC += X; prefetch(); jsr_ind - TMP = read_pc(); + TMP = read(PC); + PC++; write(SP, PC>>8); dec_SP_ce(); write(SP, PC); dec_SP_ce(); - TMP = set_h(TMP, read_pc()); + TMP = set_h(TMP, read(PC)); + PC++; PC = read(TMP); PC = set_h(PC, read(TMP+1)); prefetch(); lda_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; A = read(TMP + X); set_nz(A); prefetch(); lda_ce_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; A = read(TMP + Y); set_nz(A); prefetch(); lda_ce_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP2 += X; TMP = read(B|TMP2); TMP2++; @@ -791,7 +938,8 @@ lda_ce_idx prefetch(); lda_ce_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); @@ -800,7 +948,8 @@ lda_ce_idy prefetch(); lda_idz - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); @@ -809,8 +958,9 @@ lda_idz prefetch(); lda_isy - read_pc_noinc(); - TMP = read_pc(); + read(PC); + TMP = read(PC); + PC++; if(P & F_E) TMP = set_l(SP, SP+TMP); else @@ -823,86 +973,105 @@ lda_isy prefetch(); lda_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; A = read(B|TMP); set_nz(A); prefetch(); lda_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; A = read(B|uint8_t(TMP+X)); set_nz(A); prefetch(); ldx_ce_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; X = read(TMP + Y); set_nz(X); prefetch(); ldx_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; X = read(B|TMP); set_nz(X); prefetch(); ldx_ce_zpy - TMP = read_pc(); + TMP = read(PC); + PC++; X = read(B|uint8_t(TMP+Y)); set_nz(X); prefetch(); ldy_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; Y = read(TMP); set_nz(Y); prefetch(); ldy_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; Y = read(B|TMP); set_nz(Y); prefetch(); ldy_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; Y = read(B|uint8_t(TMP+X)); set_nz(Y); prefetch(); ldz_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; Z = read(TMP); set_nz(Z); prefetch(); ldz_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; Z = read(TMP + X); set_nz(Z); prefetch(); ldz_imm - Z = read_pc(); + Z = read(PC); + PC++; set_nz(Z); prefetch(); lsr_ce_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); TMP2 = do_lsr(TMP2); write(TMP, TMP2); prefetch(); lsr_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -915,14 +1084,16 @@ lsr_ce_acc prefetch(); lsr_ce_zpg - TMP = B|read_pc(); + TMP = B|read(PC); + PC++; TMP2 = read(TMP); TMP2 = do_lsr(TMP2); write(TMP, TMP2); prefetch(); lsr_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; TMP = B|uint8_t(TMP+X); TMP2 = read(TMP); TMP2 = do_lsr(TMP2); @@ -930,83 +1101,101 @@ lsr_ce_zpx prefetch(); neg_acc - read_pc_noinc(); + read(PC); A = -A; set_nz(A); prefetch(); ora_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); ora_ce_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += Y; - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); ora_ce_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP2 += X; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); ora_ce_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - A |= read(TMP+Y); + TMP2 = read(TMP+Y); + A |= TMP2; set_nz(A); prefetch(); ora_idz - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - A |= read(TMP+Z); + TMP2 = read(TMP+Z); + A |= TMP2; set_nz(A); prefetch(); ora_ce_zpg - TMP = read_pc(); - A |= read(B|TMP); + TMP = read(PC); + PC++; + TMP2 = read(B|TMP); + A |= TMP2; set_nz(A); prefetch(); ora_ce_zpx - TMP = read_pc(); - A |= read(B|uint8_t(TMP+X)); + TMP = read(PC); + PC++; + TMP2 = read(B|uint8_t(TMP+X)); + A |= TMP2; set_nz(A); prefetch(); # push/pop instructions and rti/rtn/rts are not fully streamlined pha_ce_imp - read_pc_noinc(); + read(PC); write(SP, A); dec_SP_ce(); prefetch(); php_ce_imp - read_pc_noinc(); + read(PC); write(SP, P); dec_SP_ce(); prefetch(); phw_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP3 = read(TMP); TMP3 = set_h(TMP3, read(TMP+1)); dec_SP_ce(); @@ -1016,8 +1205,10 @@ phw_aba prefetch(); phw_iw2 - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; dec_SP_ce(); write(SP, TMP); dec_SP_ce(); @@ -1025,76 +1216,81 @@ phw_iw2 prefetch(); phx_ce_imp - read_pc_noinc(); + read(PC); write(SP, X); dec_SP_ce(); prefetch(); phy_ce_imp - read_pc_noinc(); + read(PC); write(SP, Y); dec_SP_ce(); prefetch(); phz_imp - read_pc_noinc(); + read(PC); write(SP, Z); dec_SP_ce(); prefetch(); pla_ce_imp - read_pc_noinc(); + read(PC); inc_SP_ce(); A = read(SP); set_nz(A); prefetch(); plp_ce_imp - read_pc_noinc(); + read(PC); inc_SP_ce(); TMP = read(SP) | F_B; prefetch(); P = TMP; // Do *not* move it before the prefetch plx_ce_imp - read_pc_noinc(); + read(PC); inc_SP_ce(); X = read(SP); set_nz(X); prefetch(); ply_ce_imp - read_pc_noinc(); + read(PC); inc_SP_ce(); Y = read(SP); set_nz(Y); prefetch(); plz_imp - read_pc_noinc(); + read(PC); inc_SP_ce(); Z = read(SP); set_nz(Z); prefetch(); rmb_ce_bzp - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); TMP2 &= ~(1 << ((inst_state >> 4) & 7)); write(TMP, TMP2); prefetch(); rol_ce_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); TMP2 = do_rol(TMP2); write(TMP, TMP2); prefetch(); rol_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; TMP2 = read(TMP); TMP2 = do_rol(TMP2); @@ -1106,14 +1302,16 @@ rol_ce_acc prefetch(); rol_ce_zpg - TMP = B|read_pc(); + TMP = B|read(PC); + PC++; TMP2 = read(TMP); TMP2 = do_rol(TMP2); write(TMP, TMP2); prefetch(); rol_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; TMP = B|uint8_t(TMP+X); TMP2 = read(TMP); TMP2 = do_rol(TMP2); @@ -1121,16 +1319,20 @@ rol_ce_zpx prefetch(); ror_ce_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); TMP2 = do_ror(TMP2); write(TMP, TMP2); prefetch(); ror_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; TMP2 = read(TMP); TMP2 = do_ror(TMP2); @@ -1142,14 +1344,16 @@ ror_ce_acc prefetch(); ror_ce_zpg - TMP = B|read_pc(); + TMP = B|read(PC); + PC++; TMP2 = read(TMP); TMP2 = do_ror(TMP2); write(TMP, TMP2); prefetch(); ror_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; TMP = B|uint8_t(TMP+X); TMP2 = read(TMP); TMP2 = do_ror(TMP2); @@ -1157,8 +1361,10 @@ ror_ce_zpx prefetch(); row_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP3 = read(TMP); TMP3 = set_h(TMP3, read(TMP+1)); TMP2 = P; @@ -1177,7 +1383,7 @@ row_aba prefetch(); rti_ce_imp - read_pc_noinc(); + read(PC); inc_SP_ce(); P = read(SP) | F_B; inc_SP_ce(); @@ -1187,18 +1393,20 @@ rti_ce_imp prefetch(); rtn_imm - TMP = read_pc(); + TMP = read(PC); + PC++; if(P & F_E) SP = set_l(SP, SP+TMP); else SP += TMP; - read_pc_noinc(); + read(PC); read(SP); inc_SP(); PC = read(SP); inc_SP(); PC = set_h(PC, read(SP)); - read_pc(); + read(PC); + PC++; prefetch(); rts_ce_imp @@ -1206,12 +1414,15 @@ rts_ce_imp PC = read(SP); inc_SP_ce(); PC = set_h(PC, read(SP)); - read_pc(); + read(PC); + PC++; prefetch(); sbc_ce_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); do_sbc(TMP2); if(P & F_D) @@ -1219,8 +1430,10 @@ sbc_ce_aba prefetch(); sbc_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += X; TMP2 = read(TMP); do_sbc(TMP2); @@ -1229,8 +1442,10 @@ sbc_ce_abx prefetch(); sbc_ce_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP += Y; TMP2 = read(TMP); do_sbc(TMP2); @@ -1239,45 +1454,53 @@ sbc_ce_aby prefetch(); sbc_ce_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP2 += X; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - do_sbc(read(TMP)); + TMP2 = read(TMP); + do_sbc(TMP2); if(P & F_D) set_nz(A); prefetch(); sbc_ce_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - do_sbc(read(TMP+Y)); + TMP2 = read(TMP+Y); + do_sbc(TMP2); if(P & F_D) set_nz(A); prefetch(); sbc_idz - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); - do_sbc(read(TMP+Z)); + TMP2 = read(TMP+Z); + do_sbc(TMP2); if(P & F_D) set_nz(A); prefetch(); sbc_ce_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_sbc(TMP); if(P & F_D) set_nz(A); prefetch(); sbc_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(B|TMP); do_sbc(TMP2); if(P & F_D) @@ -1285,7 +1508,8 @@ sbc_ce_zpg prefetch(); sbc_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP2 = read(B|uint8_t(TMP+X)); do_sbc(TMP2); @@ -1302,7 +1526,7 @@ sed_ce_imp prefetch(); see_imp - read_pc_noinc(); + read(PC); P |= F_E; prefetch(); @@ -1311,26 +1535,32 @@ sei_ce_imp P |= F_I; // Do *not* move it before the prefetch smb_ce_bzp - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); TMP2 |= 1 << ((inst_state >> 4) & 7); write(TMP, TMP2); prefetch(); sta_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP+X, A); prefetch(); sta_ce_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP+Y, A); prefetch(); sta_ce_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP2 += X; TMP = read(B|TMP2); TMP2++; @@ -1339,7 +1569,8 @@ sta_ce_idx prefetch(); sta_ce_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); @@ -1347,7 +1578,8 @@ sta_ce_idy prefetch(); sta_idz - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(B|TMP2); TMP2++; TMP = set_h(TMP, read(B|TMP2)); @@ -1355,8 +1587,9 @@ sta_idz prefetch(); sta_isy - read_pc_noinc(); - TMP = read_pc(); + read(PC); + TMP = read(PC); + PC++; if(P & F_E) TMP = set_l(SP, SP+TMP); else @@ -1368,66 +1601,82 @@ sta_isy prefetch(); sta_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; write(B|TMP, A); prefetch(); sta_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; write(B|uint8_t(TMP+X), A); prefetch(); stx_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP+Y, X); prefetch(); stx_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; write(B|TMP, X); prefetch(); stx_ce_zpy - TMP = read_pc(); + TMP = read(PC); + PC++; write(B|uint8_t(TMP+Y), X); prefetch(); sty_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP+X, Y); prefetch(); sty_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; write(B|TMP, Y); prefetch(); sty_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; write(B|uint8_t(TMP+X), Y); prefetch(); stz_ce_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP, A); prefetch(); stz_ce_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP+X, A); prefetch(); stz_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; write(B|TMP, Z); prefetch(); stz_ce_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; write(B|uint8_t(TMP+X), Z); prefetch(); @@ -1456,8 +1705,10 @@ tba_imp prefetch(); trb_ce_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); if(A & TMP2) P &= ~F_Z; @@ -1468,7 +1719,8 @@ trb_ce_aba prefetch(); trb_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); if(A & TMP2) P &= ~F_Z; @@ -1479,8 +1731,10 @@ trb_ce_zpg prefetch(); tsb_ce_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); if(A & TMP2) P &= ~F_Z; @@ -1491,7 +1745,8 @@ tsb_ce_aba prefetch(); tsb_ce_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); if(A & TMP2) P &= ~F_Z; diff --git a/src/devices/cpu/m6502/om740.lst b/src/devices/cpu/m6502/om740.lst index c3b1184db73..e784fc8021c 100644 --- a/src/devices/cpu/m6502/om740.lst +++ b/src/devices/cpu/m6502/om740.lst @@ -2,37 +2,39 @@ # copyright-holders:Olivier Galibert # m740 opcodes set_imp - read_pc_noinc(); + read(PC); P |= F_T; inst_state_base = 0x100; prefetch(); clt_imp - read_pc_noinc(); + read(PC); P &= ~F_T; inst_state_base = 0; prefetch(); ldm_imz - TMP = read_pc(); - TMP2 = read_pc(); + TMP = read(PC); + PC++; + TMP2 = read(PC); + PC++; write(TMP2, TMP); prefetch(); dec_acc - read_pc_noinc(); + read(PC); A--; set_nz(A); prefetch(); inc_acc - read_pc_noinc(); + read(PC); A++; set_nz(A); prefetch(); jsr_spg - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(SP); write(SP, PC>>8); dec_SP(); @@ -43,17 +45,18 @@ jsr_spg prefetch(); clb_bac - read_pc_noinc(); + read(PC); A = do_clb(A, (IR>>5) & 7); prefetch(); seb_bac - read_pc_noinc(); + read(PC); A = do_seb(A, (IR>>5) & 7); prefetch(); clb_biz - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_clb(TMP2, (IR>>5) & 7); @@ -61,7 +64,8 @@ clb_biz prefetch(); seb_biz - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_seb(TMP2, (IR>>5) & 7); @@ -69,65 +73,72 @@ seb_biz prefetch(); bbc_bzr - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); - read_pc_noinc(); + read(PC); if(!(TMP2 & (1 << ((IR>>5) & 7)))) { - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { - read_pc(); + read(PC); + PC++; } prefetch(); bbs_bzr - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); - read_pc_noinc(); + read(PC); if(TMP2 & (1 << ((IR>>5) & 7))) { - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { - read_pc(); + read(PC); + PC++; } prefetch(); bbc_bar - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); if(!(A & (1 << ((IR>>5) & 7)))) { - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { - read_pc(); + read(PC); + PC++; } prefetch(); bbs_bar - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); if(A & (1 << ((IR>>5) & 7))) { - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { - read_pc(); + read(PC); + PC++; } prefetch(); com_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2 ^= 0xff; @@ -136,7 +147,8 @@ com_zpg prefetch(); rrf_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read_dummy(TMP); read_dummy(TMP); @@ -147,13 +159,14 @@ rrf_zpg prefetch(); tst_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); set_nz(TMP2); prefetch(); bra_rel - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); @@ -161,14 +174,14 @@ bra_rel prefetch(); jmp_zpi - TMP2 = read_pc_noinc(); + TMP2 = read(PC); TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); PC = TMP; prefetch(); jsr_zpi - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(SP); write(SP, PC>>8); dec_SP(); @@ -180,7 +193,7 @@ jsr_zpi prefetch(); stp_imp - read_pc_noinc(); + read(PC); logerror("STP at $%04x\n", PC); while(!irq_state) { eat-all-cycles; @@ -188,7 +201,7 @@ stp_imp prefetch(); wit_imp - read_pc_noinc(); + read(PC); logerror("WIT at $%04x\n", PC); while(!irq_state) { eat-all-cycles; @@ -210,9 +223,10 @@ reset_m brk_m_imp if(irq_taken) { - read_pc_noinc(); + read(PC); } else { - read_pc(); + read(PC); + PC++; } write(SP, PC >> 8); dec_SP(); @@ -233,8 +247,10 @@ brk_m_imp # 6502 opcodes with modified access patterns adc_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -242,8 +258,10 @@ adc_m_abx prefetch(); adc_m_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -251,25 +269,28 @@ adc_m_aby prefetch(); adc_m_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_adc(read_data(TMP)); + TMP2 = read_data(TMP); + do_adc(TMP2); prefetch(); adc_m_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); - do_adc(read_data(TMP+Y)); + TMP2 = read_data(TMP+Y); + do_adc(TMP2); prefetch(); adc_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); @@ -277,54 +298,66 @@ adc_m_zpx prefetch(); and_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); and_m_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); and_m_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A &= read_data(TMP); + TMP2 = read_data(TMP); + A &= TMP2; set_nz(A); prefetch(); and_m_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); - A &= read_data(TMP+Y); + TMP2 = read_data(TMP+Y); + A &= TMP2; set_nz(A); prefetch(); and_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; - A &= read(uint8_t(TMP+X)); + TMP2 = read(uint8_t(TMP+X)); + A &= TMP2; set_nz(A); prefetch(); asl_m_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_asl(TMP2); @@ -332,8 +365,10 @@ asl_m_aba prefetch(); asl_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -343,7 +378,8 @@ asl_m_abx prefetch(); asl_m_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_asl(TMP2); @@ -351,7 +387,7 @@ asl_m_zpg prefetch(); asl_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP = uint8_t(TMP+X); @@ -363,103 +399,113 @@ asl_m_zpx bcc_m_rel if(!(P & F_C)) { - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { - read_pc(); + read(PC); + PC++; } prefetch(); bcs_m_rel if(P & F_C) { - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { - read_pc(); + read(PC); + PC++; } prefetch(); beq_m_rel if(P & F_Z) { - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { - read_pc(); + read(PC); + PC++; } prefetch(); bmi_m_rel if(P & F_N) { - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { - read_pc(); + read(PC); + PC++; } prefetch(); bne_m_rel if(!(P & F_Z)) { - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { - read_pc(); + read(PC); + PC++; } prefetch(); bpl_m_rel if(!(P & F_N)) { - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { - read_pc(); + read(PC); + PC++; } prefetch(); bvc_m_rel if(!(P & F_V)) { - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { - read_pc(); + read(PC); + PC++; } prefetch(); bvs_m_rel if(P & F_V) { - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { - read_pc(); + read(PC); + PC++; } prefetch(); cmp_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -467,8 +513,10 @@ cmp_m_abx prefetch(); cmp_m_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -476,25 +524,28 @@ cmp_m_aby prefetch(); cmp_m_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_cmp(A, read_data(TMP)); + TMP2 = read_data(TMP); + do_cmp(A, TMP2); prefetch(); cmp_m_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); - do_cmp(A, read_data(TMP+Y)); + TMP2 = read_data(TMP+Y); + do_cmp(A, TMP2); prefetch(); cmp_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); @@ -502,8 +553,10 @@ cmp_m_zpx prefetch(); dec_m_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2--; @@ -512,8 +565,10 @@ dec_m_aba prefetch(); dec_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -524,7 +579,8 @@ dec_m_abx prefetch(); dec_m_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2--; @@ -533,7 +589,7 @@ dec_m_zpg prefetch(); dec_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP = uint8_t(TMP+X); @@ -545,54 +601,66 @@ dec_m_zpx prefetch(); eor_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_m_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_m_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A ^= read_data(TMP); + TMP2 = read_data(TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_m_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); - A ^= read_data(TMP+Y); + TMP2 = read_data(TMP+Y); + A ^= TMP2; set_nz(A); prefetch(); eor_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; - A ^= read(uint8_t(TMP+X)); + TMP2 = read(uint8_t(TMP+X)); + A ^= TMP2; set_nz(A); prefetch(); inc_m_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2++; @@ -601,8 +669,10 @@ inc_m_aba prefetch(); inc_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -613,7 +683,8 @@ inc_m_abx prefetch(); inc_m_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2++; @@ -622,7 +693,7 @@ inc_m_zpg prefetch(); inc_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP = uint8_t(TMP+X); @@ -635,41 +706,49 @@ inc_m_zpx jmp_m_ind // JMP ($XXFF) has the same bug as on the NMOS 6502 - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; PC = read_data(TMP); PC = set_h(PC, read_data(set_l(TMP, TMP+1))); prefetch(); jsr_m_adr - TMP = read_pc(); + TMP = read(PC); + PC++; read_dummy(SP); write(SP, PC>>8); dec_SP(); write(SP, PC); dec_SP(); - TMP = set_h(TMP, read_pc()); + TMP = set_h(TMP, read(PC)); + PC++; PC = TMP; prefetch(); lda_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); A = read(TMP + X); set_nz(A); prefetch(); lda_m_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); A = read(TMP + Y); set_nz(A); prefetch(); lda_m_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; @@ -680,7 +759,8 @@ lda_m_idx prefetch(); lda_m_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); @@ -689,7 +769,7 @@ lda_m_idy prefetch(); lda_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; A = read(uint8_t(TMP+X)); @@ -697,15 +777,17 @@ lda_m_zpx prefetch(); ldx_m_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); X = read(TMP + Y); set_nz(X); prefetch(); ldx_m_zpy - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; X = read(uint8_t(TMP+Y)); @@ -713,8 +795,10 @@ ldx_m_zpy prefetch(); ldy_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; Y = read(TMP); @@ -722,7 +806,7 @@ ldy_m_abx prefetch(); ldy_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; Y = read(uint8_t(TMP+X)); @@ -730,8 +814,10 @@ ldy_m_zpx prefetch(); lsr_m_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_lsr(TMP2); @@ -739,8 +825,10 @@ lsr_m_aba prefetch(); lsr_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -750,7 +838,8 @@ lsr_m_abx prefetch(); lsr_m_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_lsr(TMP2); @@ -758,7 +847,7 @@ lsr_m_zpg prefetch(); lsr_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP = uint8_t(TMP+X); @@ -769,53 +858,63 @@ lsr_m_zpx prefetch(); ora_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); ora_m_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); ora_m_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A |= read_data(TMP); + TMP2 = read_data(TMP); + A |= TMP2; set_nz(A); prefetch(); ora_m_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); - A |= read_data(TMP+Y); + TMP2 = read_data(TMP+Y); + A |= TMP2; set_nz(A); prefetch(); ora_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; - A |= read(uint8_t(TMP+X)); + TMP2 = read(uint8_t(TMP+X)); + A |= TMP2; set_nz(A); prefetch(); pla_m_imp - read_pc_noinc(); + read(PC); read_dummy(SP); inc_SP(); A = read(SP); @@ -823,7 +922,7 @@ pla_m_imp prefetch(); plp_m_imp - read_pc_noinc(); + read(PC); read_dummy(SP); inc_SP(); TMP = read(SP) | (F_B); @@ -832,8 +931,10 @@ plp_m_imp P = TMP; // Do *not* move it before the prefetch rol_m_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_rol(TMP2); @@ -841,8 +942,10 @@ rol_m_aba prefetch(); rol_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -852,7 +955,8 @@ rol_m_abx prefetch(); rol_m_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_rol(TMP2); @@ -860,7 +964,7 @@ rol_m_zpg prefetch(); rol_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP = uint8_t(TMP+X); @@ -871,8 +975,10 @@ rol_m_zpx prefetch(); ror_m_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_ror(TMP2); @@ -880,8 +986,10 @@ ror_m_aba prefetch(); ror_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -891,7 +999,8 @@ ror_m_abx prefetch(); ror_m_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_ror(TMP2); @@ -899,7 +1008,7 @@ ror_m_zpg prefetch(); ror_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP = uint8_t(TMP+X); @@ -910,7 +1019,7 @@ ror_m_zpx prefetch(); rti_m_imp - read_pc_noinc(); + read(PC); read_dummy(SP); inc_SP(); P = read(SP) | (F_B); @@ -922,7 +1031,7 @@ rti_m_imp prefetch(); rts_m_imp - read_pc_noinc(); + read(PC); read_dummy(SP); inc_SP(); PC = read(SP); @@ -933,8 +1042,10 @@ rts_m_imp prefetch(); sbc_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -942,8 +1053,10 @@ sbc_m_abx prefetch(); sbc_m_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -951,25 +1064,28 @@ sbc_m_aby prefetch(); sbc_m_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_sbc(read_data(TMP)); + TMP2 = read_data(TMP); + do_sbc(TMP2); prefetch(); sbc_m_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); - do_sbc(read_data(TMP+Y)); + TMP2 = read_data(TMP+Y); + do_sbc(TMP2); prefetch(); sbc_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); @@ -977,30 +1093,36 @@ sbc_m_zpx prefetch(); sta_m_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(TMP); write(TMP, A); prefetch(); sta_m_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); read_dummy(TMP+X); write(TMP+X, A); prefetch(); sta_m_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); read_dummy(TMP+Y); write(TMP+Y, A); prefetch(); sta_m_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; @@ -1011,7 +1133,8 @@ sta_m_idx prefetch(); sta_m_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); @@ -1020,13 +1143,14 @@ sta_m_idy prefetch(); sta_m_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; read_dummy(TMP); write(TMP, A); prefetch(); sta_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; read_dummy(uint8_t(TMP+X)); @@ -1034,20 +1158,23 @@ sta_m_zpx prefetch(); stx_m_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(TMP); write(TMP, X); prefetch(); stx_m_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; read_dummy(TMP); write(TMP, X); prefetch(); stx_m_zpy - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; read_dummy(uint8_t(TMP+Y)); @@ -1055,20 +1182,23 @@ stx_m_zpy prefetch(); sty_m_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(TMP); write(TMP, Y); prefetch(); sty_m_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; read_dummy(TMP); write(TMP, Y); prefetch(); sty_m_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; read_dummy(uint8_t(TMP+X)); @@ -1078,8 +1208,10 @@ sty_m_zpx # T=1 opcodes adct_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); TMP = read(X); read_dummy(X); @@ -1088,8 +1220,10 @@ adct_aba prefetch(); adct_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1100,8 +1234,10 @@ adct_abx prefetch(); adct_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1112,7 +1248,7 @@ adct_aby prefetch(); adct_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; @@ -1126,7 +1262,8 @@ adct_idx prefetch(); adct_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); @@ -1138,7 +1275,8 @@ adct_idy prefetch(); adct_imm - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(X); read_dummy(X); do_adct(TMP2); @@ -1146,7 +1284,8 @@ adct_imm prefetch(); adct_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); TMP = read(X); read_dummy(X); @@ -1155,7 +1294,7 @@ adct_zpg prefetch(); adct_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); @@ -1166,8 +1305,10 @@ adct_zpx prefetch(); andt_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); TMP = read(X); read_dummy(X); @@ -1177,8 +1318,10 @@ andt_aba prefetch(); andt_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1190,8 +1333,10 @@ andt_abx prefetch(); andt_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1203,7 +1348,8 @@ andt_aby prefetch(); andt_imm - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(X); read_dummy(X); TMP2 &= TMP; @@ -1212,7 +1358,7 @@ andt_imm prefetch(); andt_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; @@ -1227,7 +1373,8 @@ andt_idx prefetch(); andt_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); @@ -1240,7 +1387,8 @@ andt_idy prefetch(); andt_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); TMP = read(X); read_dummy(X); @@ -1250,7 +1398,7 @@ andt_zpg prefetch(); andt_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); @@ -1262,16 +1410,20 @@ andt_zpx prefetch(); cmpt_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); TMP = read(X); do_cmp(TMP, TMP2); prefetch(); cmpt_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1280,8 +1432,10 @@ cmpt_abx prefetch(); cmpt_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1290,7 +1444,7 @@ cmpt_aby prefetch(); cmpt_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; @@ -1302,7 +1456,8 @@ cmpt_idx prefetch(); cmpt_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); @@ -1312,20 +1467,22 @@ cmpt_idy prefetch(); cmpt_imm - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(X); do_cmp(TMP2, TMP); prefetch(); cmpt_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); TMP = read(X); do_cmp(TMP, TMP2); prefetch(); cmpt_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); @@ -1334,8 +1491,10 @@ cmpt_zpx prefetch(); eort_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); TMP = read(X); read_dummy(X); @@ -1345,8 +1504,10 @@ eort_aba prefetch(); eort_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1358,8 +1519,10 @@ eort_abx prefetch(); eort_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1371,7 +1534,7 @@ eort_aby prefetch(); eort_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; @@ -1386,7 +1549,8 @@ eort_idx prefetch(); eort_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); @@ -1399,7 +1563,8 @@ eort_idy prefetch(); eort_imm - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(X); read_dummy(X); TMP2 ^= TMP; @@ -1408,7 +1573,8 @@ eort_imm prefetch(); eort_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); TMP = read(X); read_dummy(X); @@ -1418,7 +1584,7 @@ eort_zpg prefetch(); eort_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); @@ -1430,8 +1596,10 @@ eort_zpx prefetch(); ldt_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read_dummy(X); set_nz(TMP2); @@ -1439,8 +1607,10 @@ ldt_aba prefetch(); ldt_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1450,8 +1620,10 @@ ldt_abx prefetch(); ldt_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1461,7 +1633,7 @@ ldt_aby prefetch(); ldt_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; @@ -1474,7 +1646,8 @@ ldt_idx prefetch(); ldt_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); @@ -1485,14 +1658,16 @@ ldt_idy prefetch(); ldt_imm - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_dummy(X); set_nz(TMP2); write(X, TMP2); prefetch(); ldt_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read_dummy(X); set_nz(TMP2); @@ -1500,7 +1675,7 @@ ldt_zpg prefetch(); ldt_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); @@ -1510,8 +1685,10 @@ ldt_zpx prefetch(); ort_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); TMP = read(X); read_dummy(X); @@ -1521,8 +1698,10 @@ ort_aba prefetch(); ort_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1534,8 +1713,10 @@ ort_abx prefetch(); ort_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1547,7 +1728,8 @@ ort_aby prefetch(); ort_imm - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(X); read_dummy(X); TMP2 |= TMP; @@ -1556,7 +1738,7 @@ ort_imm prefetch(); ort_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; @@ -1571,7 +1753,8 @@ ort_idx prefetch(); ort_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); @@ -1584,7 +1767,8 @@ ort_idy prefetch(); ort_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); TMP = read(X); read_dummy(X); @@ -1594,7 +1778,7 @@ ort_zpg prefetch(); ort_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); @@ -1606,8 +1790,10 @@ ort_zpx prefetch(); sbct_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); TMP = read(X); read_dummy(X); @@ -1616,8 +1802,10 @@ sbct_aba prefetch(); sbct_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -1628,8 +1816,10 @@ sbct_abx prefetch(); sbct_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -1640,7 +1830,7 @@ sbct_aby prefetch(); sbct_idx - TMP2 = read_pc_noinc(); + TMP2 = read(PC); read_dummy(PC & 0xff); PC++; TMP2 += X; @@ -1654,7 +1844,8 @@ sbct_idx prefetch(); sbct_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); @@ -1666,7 +1857,8 @@ sbct_idy prefetch(); sbct_imm - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(X); read_dummy(X); do_sbct(TMP2); @@ -1674,7 +1866,8 @@ sbct_imm prefetch(); sbct_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); TMP = read(X); read_dummy(X); @@ -1683,7 +1876,7 @@ sbct_zpg prefetch(); sbct_zpx - TMP = read_pc_noinc(); + TMP = read(PC); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); diff --git a/src/devices/cpu/m6502/or65c19.lst b/src/devices/cpu/m6502/or65c19.lst index df67446d8d4..0fc712aff36 100644 --- a/src/devices/cpu/m6502/or65c19.lst +++ b/src/devices/cpu/m6502/or65c19.lst @@ -1,75 +1,86 @@ # license:BSD-3-Clause # copyright-holders:Olivier Galibert, AJR adc_ipx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } - do_adc(read(TMP+X)); + TMP2 = read(TMP+X); + do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); add_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_add(TMP); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); add_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); do_add(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); add_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP2 = read(uint8_t(TMP+X)); do_add(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); and_ipx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } - A &= read(TMP+X); + TMP2 = read(TMP+X); + A &= TMP2; set_nz(A); prefetch(); asr_acc - read_pc_noinc(); + read(PC); A = do_asr(A); prefetch(); bar_amr - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; TMP2 = ~TMP2 & TMP; - TMP = read_pc(); + TMP = read(PC); + PC++; if(TMP2 != 0) { - read_pc_noinc(); + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -78,15 +89,19 @@ bar_amr prefetch(); bas_amr - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; TMP2 &= TMP; - TMP = read_pc(); + TMP = read(PC); + PC++; if(TMP2 != 0) { - read_pc_noinc(); + read(PC); if(page_changing(PC, int8_t(TMP))) { read_arg(set_l(PC, PC+int8_t(TMP))); } @@ -96,9 +111,10 @@ bas_amr brk_r_imp if(irq_taken || nmi_pending) { - read_pc_noinc(); + read(PC); } else { - read_pc(); + read(PC); + PC++; } write(SP, PC >> 8); dec_SP(); @@ -124,34 +140,39 @@ brk_r_imp inst_state = -1; clw_imp - read_pc_noinc(); + read(PC); P &= ~F_V; m_w = 0; prefetch(); cmp_ipx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } - do_cmp(A, read(TMP+X)); + TMP2 = read(TMP+X); + do_cmp(A, TMP2); prefetch(); eor_ipx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } - A ^= read(TMP+X); + TMP2 = read(TMP+X); + A ^= TMP2; set_nz(A); prefetch(); exc_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -160,7 +181,7 @@ exc_zpx prefetch(); ini_imp - read_pc_noinc(); + read(PC); read(m_i); m_i++; prefetch(); @@ -175,7 +196,7 @@ jpi_ind prefetch(); jsb_vec - read_pc_noinc(); + read(PC); write(SP, PC>>8); dec_SP(); write(SP, PC); @@ -186,15 +207,19 @@ jsb_vec prefetch(); jmp_r_ind - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; PC = read(TMP); PC = set_h(PC, read(TMP+1)); prefetch(); jsr_r_adr - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(SP, PC>>8); dec_SP(); write(SP, PC); @@ -203,26 +228,27 @@ jsr_r_adr prefetch(); lab_acc - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); if(int8_t(A) < 0) A = -A; set_nz(A); prefetch(); lai_imp - read_pc_noinc(); + read(PC); A = read(m_i); prefetch(); lan_imp - read_pc_noinc(); + read(PC); A = read(m_i); m_i++; prefetch(); lda_ipx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, X)) { @@ -233,7 +259,7 @@ lda_ipx prefetch(); lii_imp - read_pc_noinc(); + read(PC); TMP = read(m_i); TMP = set_h(TMP, read(m_i+1)); read(TMP); @@ -241,51 +267,53 @@ lii_imp prefetch(); mpa_imp - read_pc_noinc(); - read_pc_noinc(); - read_pc_noinc(); - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); + read(PC); + read(PC); + read(PC); TMP = int8_t(A) * int8_t(Y); m_w = do_accumulate(TMP, m_w); prefetch(); mpy_imp - read_pc_noinc(); - read_pc_noinc(); - read_pc_noinc(); - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); + read(PC); + read(PC); + read(PC); TMP = int8_t(A) * int8_t(Y); A = do_accumulate(TMP, 0)>>8; prefetch(); neg_acc - read_pc_noinc(); + read(PC); A = -A; set_nz(A); prefetch(); nxt_imp - read_pc_noinc(); + read(PC); PC = read(m_i); PC = set_h(PC, read(m_i+1)); m_i += 2; prefetch(); ora_ipx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } - A |= read(TMP+X); + TMP2 = read(TMP+X); + A |= TMP2; set_nz(A); prefetch(); phi_imp - read_pc_noinc(); + read(PC); write(SP, m_i>>8); dec_SP(); write(SP, m_i); @@ -293,7 +321,7 @@ phi_imp prefetch(); phw_imp - read_pc_noinc(); + read(PC); write(SP, m_w>>8); dec_SP(); write(SP, m_w); @@ -301,7 +329,7 @@ phw_imp prefetch(); pia_imp - read_pc_noinc(); + read(PC); read(SP); inc_SP(); m_i = read(SP); @@ -312,7 +340,7 @@ pia_imp prefetch(); pli_imp - read_pc_noinc(); + read(PC); read(SP); inc_SP(); m_i = read(SP); @@ -322,7 +350,7 @@ pli_imp prefetch(); plw_imp - read_pc_noinc(); + read(PC); read(SP); inc_SP(); m_w = read(SP); @@ -331,7 +359,7 @@ plw_imp prefetch(); psh_imp - read_pc_noinc(); + read(PC); write(SP, A); dec_SP(); write(SP, X); @@ -341,7 +369,7 @@ psh_imp prefetch(); pul_imp - read_pc_noinc(); + read(PC); read(SP); inc_SP(); Y = read(SP); @@ -352,9 +380,12 @@ pul_imp prefetch(); rba_ima - A = read_pc(); // "Note that Accumulator contents are altered by RBA and SBA" (C29/C39 Technical Reference Manual, p. C-29) - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + A = read(PC); // "Note that Accumulator contents are altered by RBA and SBA" (C29/C39 Technical Reference Manual, p. C-29) + PC++; + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read(TMP); TMP2 &= ~A; @@ -362,14 +393,14 @@ rba_ima prefetch(); rnd_imp - read_pc_noinc(); + read(PC); TMP = set_l(m_w, Y); A = do_accumulate(TMP, (m_w<<1) & 0x100)>>8; prefetch(); rts_r_imp - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); inc_SP(); PC = read(SP); inc_SP(); @@ -377,9 +408,12 @@ rts_r_imp prefetch(); sba_ima - A = read_pc(); - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + A = read(PC); + PC++; + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); read(TMP); TMP2 |= A; @@ -387,21 +421,24 @@ sba_ima prefetch(); sbc_ipx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } - do_sbc(read(TMP+X)); + TMP2 = read(TMP+X); + do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } prefetch(); sta_ipx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read(set_l(TMP, TMP+X)); @@ -409,32 +446,35 @@ sta_ipx prefetch(); sti_imz - TMP = read_pc(); - TMP2 = read_pc(); + TMP = read(PC); + PC++; + TMP2 = read(PC); + PC++; write(TMP2, TMP); prefetch(); taw_imp - read_pc_noinc(); + read(PC); m_w = A<<8; set_nz(m_w>>8); prefetch(); tip_imp - read_pc_noinc(); + read(PC); PC = m_i; prefetch(); twa_imp - read_pc_noinc(); + read(PC); A = m_w>>8; set_nz(A); prefetch(); # exceptions reset_r - read_pc(); - read_pc_noinc(); + read(PC); + PC++; + read(PC); read(SP); dec_SP(); read(SP); diff --git a/src/devices/cpu/m6502/orp2a03.lst b/src/devices/cpu/m6502/orp2a03.lst index 6b5a491fd32..bd03f515b76 100644 --- a/src/devices/cpu/m6502/orp2a03.lst +++ b/src/devices/cpu/m6502/orp2a03.lst @@ -2,15 +2,19 @@ # copyright-holders:Olivier Galibert # rp2a03 opcodes - same as 6502 but with d disabled adc_nd_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); do_adc_nd(TMP2); prefetch(); adc_nd_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } @@ -20,8 +24,10 @@ adc_nd_abx prefetch(); adc_nd_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } @@ -31,50 +37,61 @@ adc_nd_aby prefetch(); adc_nd_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_adc_nd(read(TMP)); + TMP2 = read(TMP); + do_adc_nd(TMP2); prefetch(); adc_nd_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } - do_adc_nd(read(TMP+Y)); + TMP2 = read(TMP+Y); + do_adc_nd(TMP2); prefetch(); adc_nd_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_adc_nd(TMP); prefetch(); adc_nd_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); do_adc_nd(TMP2); prefetch(); adc_nd_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP2 = read(uint8_t(TMP+X)); do_adc_nd(TMP2); prefetch(); arr_nd_imm - A &= read_pc(); + TMP = read(PC); + A &= TMP; + PC++; do_arr_nd(); prefetch(); rra_nd_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_ror(TMP2); @@ -83,8 +100,10 @@ rra_nd_aba prefetch(); rra_nd_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -95,8 +114,10 @@ rra_nd_abx prefetch(); rra_nd_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -107,7 +128,8 @@ rra_nd_aby prefetch(); rra_nd_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); @@ -120,7 +142,8 @@ rra_nd_idx prefetch(); rra_nd_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); @@ -133,7 +156,8 @@ rra_nd_idy prefetch(); rra_nd_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_ror(TMP2); @@ -142,7 +166,8 @@ rra_nd_zpg prefetch(); rra_nd_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); @@ -153,15 +178,19 @@ rra_nd_zpx prefetch(); sbc_nd_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); do_sbc_nd(TMP2); prefetch(); sbc_nd_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } @@ -171,8 +200,10 @@ sbc_nd_abx prefetch(); sbc_nd_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } @@ -182,45 +213,54 @@ sbc_nd_aby prefetch(); sbc_nd_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_sbc_nd(read(TMP)); + TMP2 = read(TMP); + do_sbc_nd(TMP2); prefetch(); sbc_nd_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } - do_sbc_nd(read(TMP+Y)); + TMP2 = read(TMP+Y); + do_sbc_nd(TMP2); prefetch(); sbc_nd_imm - TMP = read_pc(); + TMP = read(PC); + PC++; do_sbc_nd(TMP); prefetch(); sbc_nd_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); do_sbc_nd(TMP2); prefetch(); sbc_nd_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP2 = read(uint8_t(TMP+X)); do_sbc_nd(TMP2); prefetch(); isb_nd_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2++; @@ -229,8 +269,10 @@ isb_nd_aba prefetch(); isb_nd_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); @@ -241,8 +283,10 @@ isb_nd_abx prefetch(); isb_nd_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; read(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); @@ -253,7 +297,8 @@ isb_nd_aby prefetch(); isb_nd_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); @@ -266,7 +311,8 @@ isb_nd_idx prefetch(); isb_nd_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); @@ -279,7 +325,8 @@ isb_nd_idy prefetch(); isb_nd_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2++; @@ -288,7 +335,8 @@ isb_nd_zpg prefetch(); isb_nd_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read(TMP); TMP = uint8_t(TMP+X); TMP2 = read(TMP); diff --git a/src/devices/cpu/m6502/ow65c02s.lst b/src/devices/cpu/m6502/ow65c02s.lst index bc8c50f2bb1..f9843c59844 100644 --- a/src/devices/cpu/m6502/ow65c02s.lst +++ b/src/devices/cpu/m6502/ow65c02s.lst @@ -3,136 +3,150 @@ # w65c02s opcodes adc_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; TMP2 = read(TMP); do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } PC++; prefetch(); adc_s_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } TMP += Y; TMP2 = read(TMP); do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } PC++; prefetch(); adc_s_idx - TMP2 = read_pc_noinc(); - read_pc_noinc(); + TMP2 = read(PC); + read(PC); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_adc(read(TMP)); + TMP2 = read(TMP); + do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } PC++; prefetch(); adc_s_idy - TMP2 = read_pc_noinc(); + TMP2 = read(PC); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } - do_adc(read(TMP+Y)); + TMP2 = read(TMP+Y); + do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } PC++; prefetch(); adc_s_zpx - TMP = read_pc_noinc(); - read_pc_noinc(); + TMP = read(PC); + read(PC); TMP2 = read(uint8_t(TMP+X)); do_adc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } PC++; prefetch(); and_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); PC++; prefetch(); and_s_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } TMP += Y; - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); PC++; prefetch(); and_s_idx - TMP2 = read_pc_noinc(); - read_pc(); + TMP2 = read(PC); + read(PC); + PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); and_s_idy - TMP2 = read_pc_noinc(); + TMP2 = read(PC); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } - A &= read(TMP+Y); + TMP2 = read(TMP+Y); + A &= TMP2; set_nz(A); PC++; prefetch(); and_s_zpx - TMP = read_pc_noinc(); - read_pc(); - A &= read(uint8_t(TMP+X)); + TMP = read(PC); + read(PC); + PC++; + TMP2 = read(uint8_t(TMP+X)); + A &= TMP2; set_nz(A); prefetch(); asl_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; TMP2 = read(TMP); @@ -143,7 +157,8 @@ asl_s_abx prefetch(); asl_s_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read((TMP+1) & 0xff); TMP2 = do_asl(TMP2); @@ -151,8 +166,9 @@ asl_s_zpg prefetch(); asl_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; TMP = uint8_t(TMP+X); TMP2 = read(TMP); read((TMP+1) & 0xff); @@ -161,28 +177,32 @@ asl_s_zpx prefetch(); bit_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; - do_bit(read(TMP)); + TMP2 = read(TMP); + do_bit(TMP2); PC++; prefetch(); bit_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; TMP2 = read(uint8_t(TMP+X)); do_bit(TMP2); prefetch(); brk_s_imp if(irq_taken || nmi_pending) { - read_pc_noinc(); + read(PC); } else { - read_pc(); + read(PC); + PC++; } write(SP, PC >> 8); dec_SP(); @@ -207,10 +227,11 @@ brk_s_imp inst_state = -1; cmp_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; TMP2 = read(TMP); @@ -219,10 +240,11 @@ cmp_s_abx prefetch(); cmp_s_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } TMP += Y; TMP2 = read(TMP); @@ -231,37 +253,42 @@ cmp_s_aby prefetch(); cmp_s_idx - TMP2 = read_pc_noinc(); - read_pc(); + TMP2 = read(PC); + read(PC); + PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_cmp(A, read(TMP)); + TMP2 = read(TMP); + do_cmp(A, TMP2); prefetch(); cmp_s_idy - TMP2 = read_pc_noinc(); + TMP2 = read(PC); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } - do_cmp(A, read(TMP+Y)); + TMP2 = read(TMP+Y); + do_cmp(A, TMP2); PC++; prefetch(); cmp_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; TMP = read(uint8_t(TMP+X)); do_cmp(A, TMP); prefetch(); dec_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; TMP2 = read(TMP); @@ -273,7 +300,8 @@ dec_s_abx prefetch(); dec_s_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read((TMP+1) & 0xff); TMP2--; @@ -282,8 +310,9 @@ dec_s_zpg prefetch(); dec_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; TMP = uint8_t(TMP+X); TMP2 = read(TMP); read((TMP+1) & 0xff); @@ -293,63 +322,73 @@ dec_s_zpx prefetch(); eor_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); PC++; prefetch(); eor_s_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } TMP += Y; - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); PC++; prefetch(); eor_s_idx - TMP2 = read_pc_noinc(); - read_pc(); + TMP2 = read(PC); + read(PC); + PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); eor_s_idy - TMP2 = read_pc_noinc(); + TMP2 = read(PC); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } - A ^= read(TMP+Y); + TMP2 = read(TMP+Y); + A ^= TMP2; set_nz(A); PC++; prefetch(); eor_s_zpx - TMP = read_pc_noinc(); - read_pc(); - A ^= read(uint8_t(TMP+X)); + TMP = read(PC); + read(PC); + PC++; + TMP2 = read(uint8_t(TMP+X)); + A ^= TMP2; set_nz(A); prefetch(); inc_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; TMP2 = read(TMP); @@ -361,7 +400,8 @@ inc_s_abx prefetch(); inc_s_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read((TMP+1) & 0xff); TMP2++; @@ -370,8 +410,9 @@ inc_s_zpg prefetch(); inc_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; TMP = uint8_t(TMP+X); TMP2 = read(TMP); read((TMP+1) & 0xff); @@ -381,27 +422,30 @@ inc_s_zpx prefetch(); jmp_s_iax - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); - read_pc_noinc(); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + read(PC); TMP += X; PC = read(TMP); PC = set_h(PC, read(TMP+1)); prefetch(); jmp_s_ind - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); - read_pc_noinc(); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + read(PC); PC = read(TMP); PC = set_h(PC, read(TMP+1)); prefetch(); lda_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } A = read(TMP + X); set_nz(A); @@ -409,10 +453,11 @@ lda_s_abx prefetch(); lda_s_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } A = read(TMP + Y); set_nz(A); @@ -420,8 +465,9 @@ lda_s_aby prefetch(); lda_s_idx - TMP2 = read_pc_noinc(); - read_pc(); + TMP2 = read(PC); + read(PC); + PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); @@ -430,11 +476,11 @@ lda_s_idx prefetch(); lda_s_idy - TMP2 = read_pc_noinc(); + TMP2 = read(PC); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } A = read(TMP+Y); set_nz(A); @@ -442,17 +488,19 @@ lda_s_idy prefetch(); lda_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; A = read(uint8_t(TMP+X)); set_nz(A); prefetch(); ldx_s_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } X = read(TMP + Y); set_nz(X); @@ -460,17 +508,19 @@ ldx_s_aby prefetch(); ldx_s_zpy - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; X = read(uint8_t(TMP+Y)); set_nz(X); prefetch(); ldy_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; Y = read(TMP); @@ -479,17 +529,19 @@ ldy_s_abx prefetch(); ldy_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; Y = read(uint8_t(TMP+X)); set_nz(Y); prefetch(); lsr_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; TMP2 = read(TMP); @@ -500,7 +552,8 @@ lsr_s_abx prefetch(); lsr_s_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read((TMP+1) & 0xff); TMP2 = do_lsr(TMP2); @@ -508,8 +561,9 @@ lsr_s_zpg prefetch(); lsr_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; TMP = uint8_t(TMP+X); TMP2 = read(TMP); read((TMP+1) & 0xff); @@ -518,107 +572,120 @@ lsr_s_zpx prefetch(); nop_s_abx - read_pc(); - read_pc_noinc(); - read_pc(); + read(PC); + PC++; + read(PC); + read(PC); + PC++; prefetch(); nop_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; read(uint8_t(TMP+X)); prefetch(); ora_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); PC++; prefetch(); ora_s_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } TMP += Y; - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); PC++; prefetch(); ora_s_idx - TMP2 = read_pc_noinc(); - read_pc(); + TMP2 = read(PC); + read(PC); + PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); ora_s_idy - TMP2 = read_pc_noinc(); + TMP2 = read(PC); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } - A |= read(TMP+Y); + TMP2 = read(TMP+Y); + A |= TMP2; set_nz(A); PC++; prefetch(); ora_s_zpx - TMP = read_pc_noinc(); - read_pc(); - A |= read(uint8_t(TMP+X)); + TMP = read(PC); + read(PC); + PC++; + TMP2 = read(uint8_t(TMP+X)); + A |= TMP2; set_nz(A); prefetch(); pla_s_imp - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); inc_SP(); A = read(SP); set_nz(A); prefetch(); plp_s_imp - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); inc_SP(); TMP = read(SP) | (F_B|F_E); prefetch(); P = TMP; // Do *not* move it before the prefetch plx_s_imp - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); inc_SP(); X = read(SP); set_nz(X); prefetch(); ply_s_imp - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); inc_SP(); Y = read(SP); set_nz(Y); prefetch(); rol_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; TMP2 = read(TMP); @@ -629,7 +696,8 @@ rol_s_abx prefetch(); rol_s_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read((TMP+1) & 0xff); TMP2 = do_rol(TMP2); @@ -637,8 +705,9 @@ rol_s_zpg prefetch(); rol_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; TMP = uint8_t(TMP+X); TMP2 = read(TMP); read((TMP+1) & 0xff); @@ -647,10 +716,11 @@ rol_s_zpx prefetch(); ror_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; TMP2 = read(TMP); @@ -661,7 +731,8 @@ ror_s_abx prefetch(); ror_s_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read((TMP+1) & 0xff); TMP2 = do_ror(TMP2); @@ -669,8 +740,9 @@ ror_s_zpg prefetch(); ror_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; TMP = uint8_t(TMP+X); TMP2 = read(TMP); read((TMP+1) & 0xff); @@ -679,119 +751,128 @@ ror_s_zpx prefetch(); rti_s_imp - read_pc_noinc(); + read(PC); inc_SP(); P = read(SP) | (F_B|F_E); inc_SP(); TMP = read(SP); inc_SP(); TMP = set_h(TMP, read(SP)); - read_pc_noinc(); + read(PC); end_interrupt(); PC = TMP; prefetch(); rts_s_imp - read_pc_noinc(); - read_pc_noinc(); + read(PC); + read(PC); inc_SP(); TMP = read(SP); inc_SP(); TMP = set_h(TMP, read(SP)); - read_pc_noinc(); + read(PC); PC = TMP + 1; prefetch(); sbc_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, X)) { - read_pc_noinc(); + read(PC); } TMP += X; TMP2 = read(TMP); do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } PC++; prefetch(); sbc_s_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } TMP += Y; TMP2 = read(TMP); do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } PC++; prefetch(); sbc_s_idx - TMP2 = read_pc_noinc(); - read_pc_noinc(); + TMP2 = read(PC); + read(PC); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_sbc(read(TMP)); + TMP2 = read(TMP); + do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } PC++; prefetch(); sbc_s_idy - TMP2 = read_pc_noinc(); + TMP2 = read(PC); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read_pc_noinc(); + read(PC); } - do_sbc(read(TMP+Y)); + TMP2 = read(TMP+Y); + do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } PC++; prefetch(); sbc_s_zpx - TMP = read_pc_noinc(); - read_pc_noinc(); + TMP = read(PC); + read(PC); TMP2 = read(uint8_t(TMP+X)); do_sbc(TMP2); if(P & F_D) { - read_pc_noinc(); + read(PC); set_nz(A); } PC++; prefetch(); sta_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); - read_pc(); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + read(PC); + PC++; write(TMP+X, A); prefetch(); sta_s_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); - read_pc(); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + read(PC); + PC++; write(TMP+Y, A); prefetch(); sta_s_idx - TMP2 = read_pc_noinc(); - read_pc(); + TMP2 = read(PC); + read(PC); + PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); @@ -799,46 +880,54 @@ sta_s_idx prefetch(); sta_s_idy - TMP2 = read_pc_noinc(); + TMP2 = read(PC); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); - read_pc(); + read(PC); + PC++; write(TMP+Y, A); prefetch(); sta_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; write(uint8_t(TMP+X), A); prefetch(); stx_s_zpy - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; write(uint8_t(TMP+Y), X); prefetch(); sty_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; write(uint8_t(TMP+X), Y); prefetch(); stz_s_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc_noinc()); - read_pc(); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + read(PC); + PC++; write(TMP+X, 0x00); prefetch(); stz_s_zpx - TMP = read_pc_noinc(); - read_pc(); + TMP = read(PC); + read(PC); + PC++; write(uint8_t(TMP+X), 0x00); prefetch(); trb_s_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read((TMP+1) & 0xff); if(A & TMP2) @@ -850,7 +939,8 @@ trb_s_zpg prefetch(); tsb_s_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read(TMP); read((TMP+1) & 0xff); if(A & TMP2) @@ -864,7 +954,7 @@ tsb_s_zpg # exceptions reset_s read_arg(0xffff); - read_pc_noinc(); + read(PC); read(SP); dec_SP(); read(SP); diff --git a/src/devices/cpu/m6502/oxavix.lst b/src/devices/cpu/m6502/oxavix.lst index 08b122e5a65..a633395ee70 100644 --- a/src/devices/cpu/m6502/oxavix.lst +++ b/src/devices/cpu/m6502/oxavix.lst @@ -6,28 +6,34 @@ callf_xa3 read_stack(SP); write_special_stack(get_codebank()); dec_special_stack(); - TMP2 = read_pc(); - TMP = read_pc(); + TMP2 = read(PC); + PC++; + TMP = read(PC); + PC++; //read_stack(SP); write_stack(SP, PC>>8); dec_SP(); write_stack(SP, PC); dec_SP(); - TMP = set_h(TMP, read_pc()); + TMP = set_h(TMP, read(PC)); + PC++; PC = TMP; set_codebank(TMP2); prefetch(); jmp_xa3 - TMP2 = read_pc(); - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP2 = read(PC); + PC++; + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; PC = TMP; set_codebank(TMP2); prefetch(); retf_imp - read_pc_noinc(); + read(PC); read_stack(SP); inc_SP(); PC = read_stack(SP); @@ -36,16 +42,18 @@ retf_imp inc_special_stack(); TMP2 = read_special_stack(); set_codebank(TMP2); - read_pc(); + read(PC); + PC++; prefetch(); brk_xav_imp // there is code in some games to indicate this doesn't always push the far bank to the stack.. // The 6502 bug when a nmi occurs in a brk is reproduced (case !irq_taken && nmi_pending) if(irq_taken) { - read_pc_noinc(); + read(PC); } else { - read_pc(); + read(PC); + PC++; } write_special_stack(get_codebank()); set_codebank(0x00); // epo_efdx, rad_ping and rad_mtrk strongly suggest that interrupts must force bank 0 as code jumps to a ROM pointer stored earlier / a fixed pointer to a rom address in bank 0 @@ -106,7 +114,7 @@ brk_xav_imp inst_state = -1; rti_xav_imp - read_pc_noinc(); + read(PC); read_stack(SP); inc_SP(); P = read_stack(SP) | (F_B|F_E); @@ -123,30 +131,32 @@ rti_xav_imp # opcodes below are modified to access stack through different handlers pha_xav_imp - read_pc_noinc(); + read(PC); write_stack(SP, A); dec_SP(); prefetch(); php_xav_imp - read_pc_noinc(); + read(PC); write_stack(SP, P); dec_SP(); prefetch(); jsr_xav_adr - TMP = read_pc(); + TMP = read(PC); + PC++; read_stack(SP); write_stack(SP, PC>>8); dec_SP(); write_stack(SP, PC); dec_SP(); - TMP = set_h(TMP, read_pc()); + TMP = set_h(TMP, read(PC)); + PC++; PC = TMP; prefetch(); pla_xav_imp - read_pc_noinc(); + read(PC); read_stack(SP); inc_SP(); A = read_stack(SP); @@ -154,7 +164,7 @@ pla_xav_imp prefetch(); plp_xav_imp - read_pc_noinc(); + read(PC); read_stack(SP); inc_SP(); TMP = read_stack(SP) | (F_B|F_E); @@ -162,20 +172,22 @@ plp_xav_imp P = TMP; // Do *not* move it before the prefetch rts_xav_imp - read_pc_noinc(); + read(PC); read_stack(SP); inc_SP(); PC = read_stack(SP); inc_SP(); PC = set_h(PC, read_stack(SP)); - read_pc(); + read(PC); + PC++; prefetch(); # opcodes below are modified to access zero page through different handlers lda_xav_idy - TMP2 = read_pc(); // we need to fetch the zero page part from zero page, but the rest as if zero page wasn't there, similar to the 6509 + TMP2 = read(PC); // we need to fetch the zero page part from zero page, but the rest as if zero page wasn't there, similar to the 6509 + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { @@ -186,109 +198,130 @@ lda_xav_idy prefetch(); adc_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); // dummy read } - do_adc(read(TMP+Y)); + TMP2 = read(TMP+Y); + do_adc(TMP2); prefetch(); cmp_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); // dummy read } - do_cmp(A, read(TMP+Y)); + TMP2 = read(TMP+Y); + do_cmp(A, TMP2); prefetch(); sbc_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); // dummy read } - do_sbc(read(TMP+Y)); + TMP2 = read(TMP+Y); + do_sbc(TMP2); prefetch(); eor_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); // dummy read } - A ^= read(TMP+Y); + TMP2 = read(TMP+Y); + A ^= TMP2; set_nz(A); prefetch(); and_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); // dummy read } - A &= read(TMP+Y); + TMP2 = read(TMP+Y); + A &= TMP2; set_nz(A); prefetch(); ora_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); // dummy read } - A |= read(TMP+Y); + TMP2 = read(TMP+Y); + A |= TMP2; set_nz(A); prefetch(); ora_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); - A |= read(TMP); + TMP2 = read(TMP); + A |= TMP2; set_nz(A); prefetch(); and_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); - A &= read(TMP); + TMP2 = read(TMP); + A &= TMP2; set_nz(A); prefetch(); eor_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); - A ^= read(TMP); + TMP2 = read(TMP); + A ^= TMP2; set_nz(A); prefetch(); adc_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); - do_adc(read(TMP)); + TMP2 = read(TMP); + do_adc(TMP2); prefetch(); lda_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); @@ -298,25 +331,30 @@ lda_xav_idx prefetch(); cmp_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); - do_cmp(A, read(TMP)); + TMP2 = read(TMP); + do_cmp(A, TMP2); prefetch(); sbc_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); - do_sbc(read(TMP)); + TMP2 = read(TMP); + do_sbc(TMP2); prefetch(); sta_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); read_zeropage(set_l(TMP, TMP+Y)); // dummy read @@ -324,7 +362,8 @@ sta_xav_idy prefetch(); sta_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); @@ -333,19 +372,22 @@ sta_xav_idx prefetch(); adc_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); do_adc(TMP2); prefetch(); and_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; A &= read_zeropage(TMP); set_nz(A); prefetch(); asl_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); write_zeropage(TMP, TMP2); // dummy write TMP2 = do_asl(TMP2); @@ -353,30 +395,35 @@ asl_xav_zpg prefetch(); bit_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; do_bit(read_zeropage(TMP)); prefetch(); cmp_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); do_cmp(A, TMP2); prefetch(); cpx_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); do_cmp(X, TMP2); prefetch(); cpy_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); do_cmp(Y, TMP2); prefetch(); dec_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); write_zeropage(TMP, TMP2); // dummy write TMP2--; @@ -385,13 +432,15 @@ dec_xav_zpg prefetch(); eor_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; A ^= read_zeropage(TMP); set_nz(A); prefetch(); inc_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); write_zeropage(TMP, TMP2); // dummy write TMP2++; @@ -400,25 +449,29 @@ inc_xav_zpg prefetch(); lda_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; A = read_zeropage(TMP); set_nz(A); prefetch(); ldx_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; X = read_zeropage(TMP); set_nz(X); prefetch(); ldy_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; Y = read_zeropage(TMP); set_nz(Y); prefetch(); lsr_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); write_zeropage(TMP, TMP2); // dummy write TMP2 = do_lsr(TMP2); @@ -426,13 +479,15 @@ lsr_xav_zpg prefetch(); ora_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; A |= read_zeropage(TMP); set_nz(A); prefetch(); rol_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); write_zeropage(TMP, TMP2); // dummy write TMP2 = do_rol(TMP2); @@ -440,7 +495,8 @@ rol_xav_zpg prefetch(); ror_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); write_zeropage(TMP, TMP2); // dummy write TMP2 = do_ror(TMP2); @@ -448,28 +504,33 @@ ror_xav_zpg prefetch(); sbc_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); do_sbc(TMP2); prefetch(); sta_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; write_zeropage(TMP, A); prefetch(); stx_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; write_zeropage(TMP, X); prefetch(); sty_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; write_zeropage(TMP, Y); prefetch(); dcp_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); write_zeropage(TMP, TMP2); // dummy write TMP2--; @@ -478,7 +539,8 @@ dcp_xav_zpg prefetch(); isb_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); write_zeropage(TMP, TMP2); // dummy write TMP2++; @@ -487,13 +549,15 @@ isb_xav_zpg prefetch(); lax_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; A = X = read_zeropage(TMP); set_nz(A); prefetch(); rla_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); write_zeropage(TMP, TMP2); // dummy write TMP2 = do_rol(TMP2); @@ -503,7 +567,8 @@ rla_xav_zpg prefetch(); rra_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); write_zeropage(TMP, TMP2); // dummy write TMP2 = do_ror(TMP2); @@ -512,13 +577,15 @@ rra_xav_zpg prefetch(); sax_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = A & X; write_zeropage(TMP, TMP2); prefetch(); slo_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); write_zeropage(TMP, TMP2); // dummy write TMP2 = do_asl(TMP2); @@ -528,7 +595,8 @@ slo_xav_zpg prefetch(); sre_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; TMP2 = read_zeropage(TMP); write_zeropage(TMP, TMP2); // dummy write TMP2 = do_lsr(TMP2); @@ -538,27 +606,31 @@ sre_xav_zpg prefetch(); nop_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read prefetch(); # more zero page changes ldx_xav_zpy - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read X = read_zeropage(uint8_t(TMP+Y)); set_nz(X); prefetch(); stx_xav_zpy - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read write_zeropage(uint8_t(TMP+Y), X); prefetch(); lax_xav_zpy - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+Y); A = X = read_zeropage(TMP); @@ -566,8 +638,9 @@ lax_xav_zpy prefetch(); sax_xav_zpy - TMP = read_pc(); - read_zeropage(TMP); // dummy reaad + TMP = read(PC); + PC++; + read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+Y); TMP2 = A & X; write_zeropage(TMP, TMP2); @@ -576,21 +649,24 @@ sax_xav_zpy # more zero page changes adc_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP2 = read_zeropage(uint8_t(TMP+X)); do_adc(TMP2); prefetch(); and_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read A &= read_zeropage(uint8_t(TMP+X)); set_nz(A); prefetch(); asl_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+X); TMP2 = read_zeropage(TMP); @@ -600,14 +676,16 @@ asl_xav_zpx prefetch(); cmp_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP2 = read_zeropage(uint8_t(TMP+X)); do_cmp(A, TMP2); prefetch(); dec_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+X); TMP2 = read_zeropage(TMP); @@ -618,14 +696,16 @@ dec_xav_zpx prefetch(); eor_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read A ^= read_zeropage(uint8_t(TMP+X)); set_nz(A); prefetch(); inc_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+X); TMP2 = read_zeropage(TMP); @@ -636,21 +716,24 @@ inc_xav_zpx prefetch(); lda_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read A = read_zeropage(uint8_t(TMP+X)); set_nz(A); prefetch(); ldy_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read Y = read_zeropage(uint8_t(TMP+X)); set_nz(Y); prefetch(); lsr_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+X); TMP2 = read_zeropage(TMP); @@ -660,14 +743,16 @@ lsr_xav_zpx prefetch(); ora_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read A |= read_zeropage(uint8_t(TMP+X)); set_nz(A); prefetch(); rol_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+X); TMP2 = read_zeropage(TMP); @@ -677,7 +762,8 @@ rol_xav_zpx prefetch(); ror_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+X); TMP2 = read_zeropage(TMP); @@ -687,26 +773,30 @@ ror_xav_zpx prefetch(); sbc_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP2 = read_zeropage(uint8_t(TMP+X)); do_sbc(TMP2); prefetch(); sta_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read write_zeropage(uint8_t(TMP+X), A); prefetch(); sty_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read write_zeropage(uint8_t(TMP+X), Y); prefetch(); dcp_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+X); TMP2 = read_zeropage(TMP); @@ -717,7 +807,8 @@ dcp_xav_zpx prefetch(); isb_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+X); TMP2 = read_zeropage(TMP); @@ -728,7 +819,8 @@ isb_xav_zpx prefetch(); rla_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+X); TMP2 = read_zeropage(TMP); @@ -740,7 +832,8 @@ rla_xav_zpx prefetch(); rra_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+X); TMP2 = read_zeropage(TMP); @@ -751,7 +844,8 @@ rra_xav_zpx prefetch(); slo_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+X); TMP2 = read_zeropage(TMP); @@ -763,7 +857,8 @@ slo_xav_zpx prefetch(); sre_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); // dummy read TMP = uint8_t(TMP+X); TMP2 = read_zeropage(TMP); @@ -775,7 +870,8 @@ sre_xav_zpx prefetch(); nop_xav_zpx - TMP = read_pc(); + TMP = read(PC); + PC++; read_zeropage(TMP); read_zeropage(uint8_t(TMP+X)); prefetch(); @@ -783,7 +879,8 @@ nop_xav_zpx #### slo_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); @@ -799,7 +896,8 @@ slo_xav_idx # idx with zero page changes rla_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); @@ -813,7 +911,8 @@ rla_xav_idx prefetch(); sre_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); @@ -827,7 +926,8 @@ sre_xav_idx prefetch(); rra_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); @@ -840,7 +940,8 @@ rra_xav_idx prefetch(); sax_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); @@ -850,7 +951,8 @@ sax_xav_idx prefetch(); lax_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dumm read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); @@ -860,7 +962,8 @@ lax_xav_idx prefetch(); dcp_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); @@ -873,7 +976,8 @@ dcp_xav_idx prefetch(); isb_xav_idx - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; read_zeropage(TMP2); // dummy read TMP2 += X; TMP = read_zeropage(TMP2 & 0xff); @@ -888,7 +992,8 @@ isb_xav_idx # idy with zero page changes slo_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); // dummy read @@ -902,7 +1007,8 @@ slo_xav_idy prefetch(); rla_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); // dummy read @@ -916,7 +1022,8 @@ rla_xav_idy prefetch(); sre_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); // dummy read @@ -930,7 +1037,8 @@ sre_xav_idy prefetch(); rra_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); // dummy read @@ -943,7 +1051,8 @@ rra_xav_idy prefetch(); sha_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); // dummy read @@ -956,7 +1065,8 @@ sha_xav_idy prefetch(); lax_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { @@ -967,7 +1077,8 @@ lax_xav_idy prefetch(); dcp_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); // dummy read @@ -980,7 +1091,8 @@ dcp_xav_idy prefetch(); isb_xav_idy - TMP2 = read_pc(); + TMP2 = read(PC); + PC++; TMP = read_zeropage(TMP2); TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); read(set_l(TMP, TMP+Y)); // dummy read diff --git a/src/devices/cpu/m6502/oxavix2000.lst b/src/devices/cpu/m6502/oxavix2000.lst index bd34d72f348..7795a1a75cc 100644 --- a/src/devices/cpu/m6502/oxavix2000.lst +++ b/src/devices/cpu/m6502/oxavix2000.lst @@ -3,19 +3,19 @@ # xavix2000 opcodes (Super XaviX) phy_imp - read_pc_noinc(); + read(PC); write_stack(SP, Y); dec_SP(); prefetch(); phx_imp - read_pc_noinc(); + read(PC); write_stack(SP, X); dec_SP(); prefetch(); plx_imp - read_pc_noinc(); + read(PC); read_stack(SP); inc_SP(); X = read_stack(SP); @@ -23,7 +23,7 @@ plx_imp prefetch(); ply_imp - read_pc_noinc(); + read(PC); read_stack(SP); inc_SP(); Y = read_stack(SP); @@ -31,314 +31,314 @@ ply_imp prefetch(); clr_acc - read_pc_noinc(); + read(PC); A = 0; set_nz(A); prefetch(); dec_acc - read_pc_noinc(); + read(PC); A--; set_nz(A); prefetch(); not_acc - read_pc_noinc(); + read(PC); A = A ^ 0xff; set_nz(A); prefetch(); inc_acc - read_pc_noinc(); + read(PC); A++; set_nz(A); prefetch(); neg_acc - read_pc_noinc(); + read(PC); A = (0x00 - A) & 0xff; set_nz(A); prefetch(); oraj_imp - read_pc_noinc(); + read(PC); A |= m_j; set_nz(A); prefetch(); orak_imp - read_pc_noinc(); + read(PC); A |= m_k; set_nz(A); prefetch(); oral_imp - read_pc_noinc(); + read(PC); A |= m_l; set_nz(A); prefetch(); oram_imp - read_pc_noinc(); + read(PC); A |= m_m; set_nz(A); prefetch(); andj_imp - read_pc_noinc(); + read(PC); A &= m_j; set_nz(A); prefetch(); andk_imp - read_pc_noinc(); + read(PC); A &= m_k; set_nz(A); prefetch(); andl_imp - read_pc_noinc(); + read(PC); A &= m_l; set_nz(A); prefetch(); andm_imp - read_pc_noinc(); + read(PC); A &= m_m; set_nz(A); prefetch(); eorj_imp - read_pc_noinc(); + read(PC); A ^= m_j; set_nz(A); prefetch(); eork_imp - read_pc_noinc(); + read(PC); A ^= m_k; set_nz(A); prefetch(); eorl_imp - read_pc_noinc(); + read(PC); A ^= m_l; set_nz(A); prefetch(); eorm_imp - read_pc_noinc(); + read(PC); A ^= m_m; set_nz(A); prefetch(); adcj_imp - read_pc_noinc(); + read(PC); do_adc(m_j); prefetch(); adck_imp - read_pc_noinc(); + read(PC); do_adc(m_k); prefetch(); adcl_imp - read_pc_noinc(); + read(PC); do_adc(m_l); prefetch(); adcm_imp - read_pc_noinc(); + read(PC); do_adc(m_m); prefetch(); staj_imp - read_pc_noinc(); + read(PC); m_j = A; prefetch(); stak_imp - read_pc_noinc(); + read(PC); m_k = A; prefetch(); stal_imp - read_pc_noinc(); + read(PC); m_l = A; prefetch(); stam_imp - read_pc_noinc(); + read(PC); m_m = A; prefetch(); ldaj_imp - read_pc_noinc(); + read(PC); A = m_j; set_nz(A); prefetch(); ldak_imp - read_pc_noinc(); + read(PC); A = m_k; set_nz(A); prefetch(); ldal_imp - read_pc_noinc(); + read(PC); A = m_l; set_nz(A); prefetch(); ldam_imp - read_pc_noinc(); + read(PC); A = m_m; set_nz(A); prefetch(); cmpj_imp - read_pc_noinc(); + read(PC); do_cmp(A, m_j); prefetch(); cmpk_imp - read_pc_noinc(); + read(PC); do_cmp(A, m_k); prefetch(); cmpl_imp - read_pc_noinc(); + read(PC); do_cmp(A, m_l); prefetch(); cmpm_imp - read_pc_noinc(); + read(PC); do_cmp(A, m_m); prefetch(); sbcj_imp - read_pc_noinc(); + read(PC); do_sbc(m_j); prefetch(); sbck_imp - read_pc_noinc(); + read(PC); do_sbc(m_k); prefetch(); sbcl_imp - read_pc_noinc(); + read(PC); do_sbc(m_l); prefetch(); sbcm_imp - read_pc_noinc(); + read(PC); do_sbc(m_m); prefetch(); spa0_imp - read_pc_noinc(); + read(PC); m_pa = (m_pa & 0xffff00) | A; prefetch(); lpa0_imp - read_pc_noinc(); + read(PC); A = (m_pa & 0x0000ff) >> 0; set_nz(A); prefetch(); spa1_imp - read_pc_noinc(); + read(PC); m_pa = (m_pa & 0xff00ff) | (A << 8); prefetch(); lpa1_imp - read_pc_noinc(); + read(PC); A = (m_pa & 0x00ff00) >> 8; set_nz(A); prefetch(); spa2_imp - read_pc_noinc(); + read(PC); m_pa = (m_pa & 0x00ffff) | (A << 16); prefetch(); lpa2_imp - read_pc_noinc(); + read(PC); A = (m_pa & 0xff0000) >> 16; set_nz(A); prefetch(); spb0_imp - read_pc_noinc(); + read(PC); m_pb = (m_pb & 0xffff00) | A; prefetch(); lpb0_imp - read_pc_noinc(); + read(PC); A = (m_pb & 0x0000ff) >> 0; set_nz(A); prefetch(); spb1_imp - read_pc_noinc(); + read(PC); m_pb = (m_pb & 0xff00ff) | (A << 8); prefetch(); lpb1_imp - read_pc_noinc(); + read(PC); A = (m_pb & 0x00ff00) >> 8; set_nz(A); prefetch(); spb2_imp - read_pc_noinc(); + read(PC); m_pb = (m_pb & 0x00ffff) | (A << 16); prefetch(); lpb2_imp - read_pc_noinc(); + read(PC); A = (m_pb & 0xff0000) >> 16; set_nz(A); prefetch(); incpa_imp - read_pc_noinc(); + read(PC); m_pa = (m_pa & ~0xff) | ((m_pa+1) & 0xff); set_nz(m_pa&0xff); // startup code seems to require flag to set if low byte is 0x00? prefetch(); incpb_imp - read_pc_noinc(); + read(PC); m_pb = (m_pb & ~0xff) | ((m_pb+1) & 0xff); set_nz(m_pb&0xff); // startup code seems to require flag to set if low byte is 0x00? prefetch(); decpa_imp - read_pc_noinc(); + read(PC); m_pa = (m_pa & ~0xff) | ((m_pa-1) & 0xff); set_nz(m_pa&0xff); // startup code seems to require flag to set if low byte is 0x00? prefetch(); decpb_imp - read_pc_noinc(); + read(PC); m_pb = (m_pb & ~0xff) | ((m_pb-1) & 0xff); set_nz(m_pb&0xff); // startup code seems to require flag to set if low byte is 0x00? prefetch(); orapa_imp fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); - read_pc_noinc(); + read(PC); prefetch(); andpa_imp fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); - read_pc_noinc(); + read(PC); prefetch(); eorpa_imp fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); - read_pc_noinc(); + read(PC); prefetch(); adcpa_imp @@ -365,17 +365,17 @@ sbcpa_imp orapb_imp fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); - read_pc_noinc(); + read(PC); prefetch(); andpb_imp fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); - read_pc_noinc(); + read(PC); prefetch(); eorpb_imp fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); - read_pc_noinc(); + read(PC); prefetch(); adcpb_imp @@ -393,7 +393,7 @@ ldapb_imp cmppb_imp fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); - read_pc_noinc(); + read(PC); prefetch(); sbcpb_imp @@ -401,40 +401,48 @@ sbcpb_imp prefetch(); stx_aby - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP+Y, X); prefetch(); sty_abx - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP+X, Y); prefetch(); stz_xav_zpg - TMP = read_pc(); + TMP = read(PC); + PC++; write_zeropage(TMP, 0x00); prefetch(); stz_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; write(TMP, 0x00); prefetch(); bit_xav_zpx fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); - read_pc_noinc(); + read(PC); prefetch(); bit_abx fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); - read_pc_noinc(); + read(PC); prefetch(); bit_imm - TMP = read_pc(); + TMP = read(PC); + PC++; if(A & TMP) P &= ~F_Z; else @@ -442,14 +450,17 @@ bit_imm prefetch(); asr_xav_zpg - TMP = read_pc(); // TODO: verify this, should it write back or set A? + TMP = read(PC); // TODO: verify this, should it write back or set A? + PC++; TMP2 = read_zeropage(TMP); do_asr(TMP2); prefetch(); asr_aba - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_asr(TMP2); // used by xavbox, see 14e8 @@ -458,7 +469,7 @@ asr_aba asr_xav_zpx fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); - read_pc_noinc(); + read(PC); prefetch(); asr_acc @@ -467,22 +478,24 @@ asr_acc asr_abx fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); - read_pc_noinc(); + read(PC); prefetch(); cmc_imp fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); - read_pc_noinc(); + read(PC); prefetch(); sev_imp - read_pc_noinc(); + read(PC); P |= F_V; prefetch(); jmpf_ind - TMP = read_pc(); - TMP = set_h(TMP, read_pc()); + TMP = read(PC); + PC++; + TMP = set_h(TMP, read(PC)); + PC++; PC = read(TMP); PC = set_h(PC, read(set_l(TMP, TMP+1))); TMP2 = read(TMP+2); -- cgit v1.2.3