summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/m6502/m4510.c
diff options
context:
space:
mode:
author Roberto Zandona <robertoz@mamedev.org>2008-08-24 11:55:22 +0000
committer Roberto Zandona <robertoz@mamedev.org>2008-08-24 11:55:22 +0000
commit65a96e4f7ad3429df87aa08cc3f076e5c564544a (patch)
treecd9dfda7944782bd7b2acabadfa7b6909c11115d /src/emu/cpu/m6502/m4510.c
parentbfc0c6a5b299cad1b4a9a9611ee3bbca51a4d0fc (diff)
some fix for m4510 core
Diffstat (limited to 'src/emu/cpu/m6502/m4510.c')
-rw-r--r--src/emu/cpu/m6502/m4510.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/emu/cpu/m6502/m4510.c b/src/emu/cpu/m6502/m4510.c
index 92285fe03b3..e3078b6d0ca 100644
--- a/src/emu/cpu/m6502/m4510.c
+++ b/src/emu/cpu/m6502/m4510.c
@@ -133,6 +133,7 @@ typedef struct {
UINT8 y; /* Y index register */
UINT8 z; /* Z index register */
UINT8 p; /* Processor status */
+ UINT8 interrupt_inhibit; /* Some instructions, like MAP, inhibit interrupt */
UINT8 pending_irq; /* nonzero if an IRQ is pending */
UINT8 after_cli; /* pending IRQ and last insn cleared I */
UINT8 nmi_state;
@@ -172,11 +173,12 @@ INLINE int m4510_cpu_readop_arg(void)
#define M4510
#include "t65ce02.c"
-static READ8_HANDLER( default_rdmem_id ) { return program_read_byte_8le(offset); }
-static WRITE8_HANDLER( default_wrmem_id ) { program_write_byte_8le(offset, data); }
+static READ8_HANDLER( default_rdmem_id ) { return program_read_byte_8le(M4510_MEM(offset)); }
+static WRITE8_HANDLER( default_wrmem_id ) { program_write_byte_8le(M4510_MEM(offset), data); }
static void m4510_init(int index, int clock, const void *config, int (*irqcallback)(int))
{
+ m4510.interrupt_inhibit = 0;
m4510.rdmem_id = default_rdmem_id;
m4510.wrmem_id = default_wrmem_id;
m4510.irq_callback = irqcallback;
@@ -197,6 +199,7 @@ static void m4510_reset (void)
m4510.z = 0;
B = 0;
m4510.p = F_E|F_B|F_I|F_Z; /* set E, I and Z flags */
+ m4510.interrupt_inhibit = 0;
m4510.pending_irq = 0; /* nonzero if an IRQ is pending */
m4510.after_cli = 0; /* pending IRQ and last insn cleared I */
m4510.irq_callback = NULL;
@@ -234,7 +237,7 @@ static void m4510_set_context (void *src)
INLINE void m4510_take_irq(void)
{
- if( !(P & F_I) )
+ if(( !(P & F_I) ) && (m4510.interrupt_inhibit == 0))
{
EAD = M4510_IRQ_VEC;
m4510_ICount -= 7;