# license:BSD-3-Clause # copyright-holders:Olivier Galibert # 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_arg(0xfff7); PC = set_h(PC, read_arg(0xfff6)); nmi_state = false; standard_irq_callback(NMI_LINE); } else { PC = read_arg(0xfff3); PC = set_h(PC, read_arg(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(); u0B_zpg TMP2 = read_pc(); if(DECO16_VERBOSE) logerror("%s: OP0B %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); u13_zpg TMP2 = read_pc(); if(DECO16_VERBOSE) logerror("%s: OP13 %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); u23_zpg TMP2 = read_pc(); if(DECO16_VERBOSE) logerror("%s: OP23 %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); u3F_zpg TMP2 = read_pc(); if(DECO16_VERBOSE) logerror("%s: OPBB %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); u4B_zpg TMP2 = read_pc(); A = io->read_byte(1); prefetch(); u87_zpg TMP2 = read_pc(); if(DECO16_VERBOSE) logerror("%s: OP87 %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); u8F_zpg TMP2 = read_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(); if(DECO16_VERBOSE) logerror("%s: OPA3 %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); uBB_zpg TMP2 = read_pc(); if(DECO16_VERBOSE) logerror("%s: OPBB %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); vbl_zpg TMP2 = read_pc(); A = io->read_byte(0); //if(DECO16_VERBOSE) // logerror("%s: VBL %02x (%04x)\n", tag(), NPC, TMP2); prefetch(); # exceptions reset_16 PC = read_arg(0xfff1); PC = set_h(PC, read_arg(0xfff0)); prefetch(); inst_state = -1;