From 29eb0038ad78ae25f5c28c3c866e9c193aef7478 Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 17 Aug 2019 16:38:36 -0400 Subject: m65c02: D flag is cleared on reset in CMOS models (nw) --- src/devices/cpu/m6502/dm4510.lst | 2 +- src/devices/cpu/m6502/dm65c02.lst | 2 +- src/devices/cpu/m6502/dm65ce02.lst | 2 +- src/devices/cpu/m6502/dr65c02.lst | 2 +- src/devices/cpu/m6502/m65c02.h | 1 + src/devices/cpu/m6502/om65c02.lst | 8 ++++++++ 6 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/devices/cpu/m6502/dm4510.lst b/src/devices/cpu/m6502/dm4510.lst index eae3c8ef006..65ccd783fac 100644 --- a/src/devices/cpu/m6502/dm4510.lst +++ b/src/devices/cpu/m6502/dm4510.lst @@ -17,4 +17,4 @@ cpy_imm cmp_ce_idx cpz_imm dew_zpg cpy_ce_zpg cmp_ce_zpg dec_ce_z bne_ce_rel cmp_ce_idy cmp_idz bne_rw2 cpz_zpg cmp_ce_zpx dec_ce_zpx smb_ce_bzp cld_ce_imp cmp_ce_aby phx_ce_imp phz_imp cpz_aba cmp_ce_abx dec_ce_abx bbs_ce_zpb cpx_imm sbc_ce_idx lda_isy inw_zpg cpx_ce_zpg sbc_ce_zpg inc_ce_zpg smb_ce_bzp inx_ce_imp sbc_ce_imm eom_imp row_aba cpx_aba sbc_ce_aba inc_ce_aba bbs_ce_zpb beq_ce_rel sbc_ce_idy sbc_idz beq_rw2 phw_iw2 sbc_ce_zpx inc_ce_zpx smb_ce_bzp sed_ce_imp sbc_ce_aby plx_ce_imp plz_imp phw_aba sbc_ce_abx inc_ce_abx bbs_ce_zpb -reset +reset_c diff --git a/src/devices/cpu/m6502/dm65c02.lst b/src/devices/cpu/m6502/dm65c02.lst index 64b6f967589..cb76456593b 100644 --- a/src/devices/cpu/m6502/dm65c02.lst +++ b/src/devices/cpu/m6502/dm65c02.lst @@ -17,4 +17,4 @@ cpy_imm cmp_idx nop_imm nop_c_imp cpy_zpg cmp_zpg dec_c_zp bne_rel cmp_idy cmp_zpi nop_c_imp nop_zpx cmp_zpx dec_c_zpx nop_c_imp cld_imp cmp_aby phx_imp nop_c_imp nop_c_abx cmp_abx dec_c_abx nop_c_imp cpx_imm sbc_c_idx nop_imm nop_c_imp cpx_zpg sbc_c_zpg inc_c_zpg nop_c_imp inx_imp sbc_c_imm nop_imp nop_c_imp cpx_aba sbc_c_aba inc_c_aba nop_c_imp beq_rel sbc_c_idy sbc_c_zpi nop_c_imp nop_zpx sbc_c_zpx inc_c_zpx nop_c_imp sed_imp sbc_c_aby plx_imp nop_c_imp nop_c_abx sbc_c_abx inc_c_abx nop_c_imp -reset +reset_c diff --git a/src/devices/cpu/m6502/dm65ce02.lst b/src/devices/cpu/m6502/dm65ce02.lst index 819ce35c614..79b8c4feeb0 100644 --- a/src/devices/cpu/m6502/dm65ce02.lst +++ b/src/devices/cpu/m6502/dm65ce02.lst @@ -17,4 +17,4 @@ cpy_imm cmp_ce_idx cpz_imm dew_zpg cpy_ce_zpg cmp_ce_zpg dec_ce_z bne_ce_rel cmp_ce_idy cmp_idz bne_rw2 cpz_zpg cmp_ce_zpx dec_ce_zpx smb_ce_bzp cld_ce_imp cmp_ce_aby phx_ce_imp phz_imp cpz_aba cmp_ce_abx dec_ce_abx bbs_ce_zpb cpx_imm sbc_ce_idx lda_isy inw_zpg cpx_ce_zpg sbc_ce_zpg inc_ce_zpg smb_ce_bzp inx_ce_imp sbc_ce_imm nop_c_imp row_aba cpx_aba sbc_ce_aba inc_ce_aba bbs_ce_zpb beq_ce_rel sbc_ce_idy sbc_idz beq_rw2 phw_iw2 sbc_ce_zpx inc_ce_zpx smb_ce_bzp sed_ce_imp sbc_ce_aby plx_ce_imp plz_imp phw_aba sbc_ce_abx inc_ce_abx bbs_ce_zpb -reset +reset_c diff --git a/src/devices/cpu/m6502/dr65c02.lst b/src/devices/cpu/m6502/dr65c02.lst index 23879516e4a..dcb6f7c34a8 100644 --- a/src/devices/cpu/m6502/dr65c02.lst +++ b/src/devices/cpu/m6502/dr65c02.lst @@ -17,4 +17,4 @@ cpy_imm cmp_idx nop_imm nop_c_imp cpy_zpg cmp_zpg dec_c_zp bne_rel cmp_idy cmp_zpi nop_c_imp nop_zpx cmp_zpx dec_c_zpx smb_bzp cld_imp cmp_aby phx_imp stp_imp nop_c_abx cmp_abx dec_c_abx bbs_zpb cpx_imm sbc_c_idx nop_imm nop_c_imp cpx_zpg sbc_c_zpg inc_c_zpg smb_bzp inx_imp sbc_c_imm nop_imp nop_c_imp cpx_aba sbc_c_aba inc_c_aba bbs_zpb beq_rel sbc_c_idy sbc_c_zpi nop_c_imp nop_zpx sbc_c_zpx inc_c_zpx smb_bzp sed_imp sbc_c_aby plx_imp nop_c_imp nop_c_abx sbc_c_abx inc_c_abx bbs_zpb -reset +reset_c diff --git a/src/devices/cpu/m6502/m65c02.h b/src/devices/cpu/m6502/m65c02.h index f5e0ca7767e..e61161cc9dd 100644 --- a/src/devices/cpu/m6502/m65c02.h +++ b/src/devices/cpu/m6502/m65c02.h @@ -61,6 +61,7 @@ protected: O(trb_aba); O(trb_zpg); O(tsb_aba); O(tsb_zpg); O(wai_imp); + O(reset_c); #undef O }; diff --git a/src/devices/cpu/m6502/om65c02.lst b/src/devices/cpu/m6502/om65c02.lst index 25d8fc7ef07..dafeaec648e 100644 --- a/src/devices/cpu/m6502/om65c02.lst +++ b/src/devices/cpu/m6502/om65c02.lst @@ -762,3 +762,11 @@ wai_imp eat-all-cycles; } prefetch(); + +# exceptions +reset_c + P = (P | F_I) & ~F_D; + PC = read_arg(0xfffc); + PC = set_h(PC, read_arg(0xfffd)); + prefetch(); + inst_state = -1; -- cgit v1.2.3