mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
deco16: Vectors are non-standard, *duh* [O. Galibert]
This commit is contained in:
parent
c277ddfc53
commit
b486a07a02
@ -1,5 +1,5 @@
|
||||
# deco16 - deco variant
|
||||
brk_imp ora_idx ill_non ill_non ill_non ora_zpg asl_zpg ill_non php_imp ora_imm asl_acc u0B_zpg ill_non ora_aba asl_aba ill_non
|
||||
brk_16_imp ora_idx ill_non ill_non ill_non ora_zpg asl_zpg ill_non php_imp ora_imm asl_acc u0B_zpg ill_non ora_aba asl_aba ill_non
|
||||
bpl_rel ora_idy ill_non u13_zpg ill_non ora_zpx asl_zpx ill_non clc_imp ora_aby ill_non ill_non ill_non ora_abx asl_abx ill_non
|
||||
jsr_adr and_idx ill_non u23_zpg bit_zpg and_zpg rol_zpg ill_non plp_imp and_imm rol_acc ill_non bit_aba and_aba rol_aba ill_non
|
||||
bmi_rel and_idy ill_non ill_non ill_non and_zpx rol_zpx ill_non sec_imp and_aby ill_non ill_non ill_non and_abx rol_abx u3F_zpg
|
||||
@ -15,4 +15,4 @@ cpy_imm cmp_idx ill_non ill_non cpy_zpg cmp_zpg dec_zpg ill_non iny_imp
|
||||
bne_rel cmp_idy ill_non ill_non ill_non cmp_zpx dec_zpx ill_non cld_imp cmp_aby ill_non ill_non ill_non cmp_abx dec_abx ill_non
|
||||
cpx_imm sbc_idx ill_non ill_non cpx_zpg sbc_zpg inc_zpg ill_non inx_imp sbc_imm nop_imp ill_non cpx_aba sbc_aba inc_aba ill_non
|
||||
beq_rel sbc_idy ill_non ill_non ill_non sbc_zpx inc_zpx ill_non sed_imp sbc_aby ill_non ill_non ill_non sbc_abx inc_abx ill_non
|
||||
reset
|
||||
reset_16
|
||||
|
@ -61,6 +61,7 @@ protected:
|
||||
|
||||
#define O(o) void o ## _full(); void o ## _partial()
|
||||
|
||||
O(brk_16_imp);
|
||||
O(ill_non);
|
||||
O(u0B_zpg);
|
||||
O(u13_zpg);
|
||||
@ -74,6 +75,8 @@ protected:
|
||||
O(uBB_zpg);
|
||||
O(vbl_zpg);
|
||||
|
||||
O(reset_16);
|
||||
|
||||
#undef O
|
||||
};
|
||||
|
||||
|
@ -1,4 +1,33 @@
|
||||
# deco 16 opcodes
|
||||
brk_16_imp
|
||||
// The 6502 bug when a nmi occurs in a brk is reproduced (case !irq_taken && nmi_state)
|
||||
if(irq_taken) {
|
||||
read_pc_noinc();
|
||||
} else {
|
||||
read_pc();
|
||||
}
|
||||
write(SP, PC >> 8);
|
||||
dec_SP();
|
||||
write(SP, PC);
|
||||
dec_SP();
|
||||
write(SP, irq_taken ? P & ~F_B : P);
|
||||
dec_SP();
|
||||
if(nmi_state) {
|
||||
PC = read_direct(0xfff7);
|
||||
PC = set_h(PC, read_direct(0xfff6));
|
||||
nmi_state = false;
|
||||
standard_irq_callback(NMI_LINE);
|
||||
} else {
|
||||
PC = read_direct(0xfff3);
|
||||
PC = set_h(PC, read_direct(0xfff2));
|
||||
if(irq_taken)
|
||||
standard_irq_callback(IRQ_LINE);
|
||||
}
|
||||
irq_taken = false;
|
||||
P |= F_I; // Do *not* move after the prefetch
|
||||
prefetch();
|
||||
inst_state = -1;
|
||||
|
||||
ill_non
|
||||
logerror("%s: Unimplemented instruction %02x\n", tag(), inst_state);
|
||||
prefetch();
|
||||
@ -63,3 +92,10 @@ vbl_zpg
|
||||
if(DECO16_VERBOSE)
|
||||
logerror("%s: VBL %02x (%04x)\n", tag(), NPC, TMP2);
|
||||
prefetch();
|
||||
|
||||
# exceptions
|
||||
reset_16
|
||||
PC = read_direct(0xfff1);
|
||||
PC = set_h(PC, read_direct(0xfff0));
|
||||
prefetch();
|
||||
inst_state = -1;
|
||||
|
Loading…
Reference in New Issue
Block a user