summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2013-03-28 08:40:12 +0000
committer Miodrag Milanovic <mmicko@gmail.com>2013-03-28 08:40:12 +0000
commit8b162046285ba50edfd2a0752b7ae59fef01644f (patch)
treeed310348a6388facccd0b560863925d31bff36e0 /src
parentd5ca5b117af1d09bc423d45448ef2e286bdfab34 (diff)
Made ppu use delegates instead of callbacks (nw)
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/multigam.c20
-rw-r--r--src/mame/includes/playch10.h1
-rw-r--r--src/mame/includes/vsnes.h1
-rw-r--r--src/mame/machine/playch10.c18
-rw-r--r--src/mame/machine/vsnes.c19
-rw-r--r--src/mame/video/ppu2c0x.c18
-rw-r--r--src/mame/video/ppu2c0x.h20
-rw-r--r--src/mess/includes/nes.h26
-rw-r--r--src/mess/machine/nes.c31
-rw-r--r--src/mess/machine/nes_ines.c21
-rw-r--r--src/mess/machine/nes_mmc.c2
-rw-r--r--src/mess/machine/nes_pcb.c857
-rw-r--r--src/mess/video/nes.c2
13 files changed, 512 insertions, 524 deletions
diff --git a/src/mame/drivers/multigam.c b/src/mame/drivers/multigam.c
index abd8926fa99..38706333be8 100644
--- a/src/mame/drivers/multigam.c
+++ b/src/mame/drivers/multigam.c
@@ -153,6 +153,7 @@ public:
void multigam_init_mmc1(UINT8 *prg_base, int prg_size, int chr_bank_base);
void supergm3_set_bank();
void multigm3_decrypt(UINT8* mem, int memsize, const UINT8* decode_nibble);
+ void multigam3_mmc3_scanline_cb(int scanline, int vblank, int blanked);
};
@@ -404,15 +405,14 @@ ADDRESS_MAP_END
*******************************************************/
-static void multigam3_mmc3_scanline_cb( device_t *device, int scanline, int vblank, int blanked )
+void multigam_state::multigam3_mmc3_scanline_cb( int scanline, int vblank, int blanked )
{
- multigam_state *state = device->machine().driver_data<multigam_state>();
if (!vblank && !blanked)
{
- if (--state->m_multigam3_mmc3_scanline_counter == -1)
+ if (--m_multigam3_mmc3_scanline_counter == -1)
{
- state->m_multigam3_mmc3_scanline_counter = state->m_multigam3_mmc3_scanline_latch;
- generic_pulse_irq_line(device->machine().device("maincpu"), 0, 1);
+ m_multigam3_mmc3_scanline_counter = m_multigam3_mmc3_scanline_latch;
+ generic_pulse_irq_line(machine().device("maincpu")->execute(), 0, 1);
}
}
}
@@ -556,11 +556,11 @@ WRITE8_MEMBER(multigam_state::multigam3_mmc3_rom_switch_w)
break;
case 0x6000: /* disable irqs */
- ppu->set_scanline_callback(0);
+ ppu->set_scanline_callback(ppu2c0x_scanline_delegate());
break;
case 0x6001: /* enable irqs */
- ppu->set_scanline_callback(multigam3_mmc3_scanline_cb);
+ ppu->set_scanline_callback(ppu2c0x_scanline_delegate(FUNC(multigam_state::multigam3_mmc3_scanline_cb),this));
break;
}
}
@@ -688,7 +688,7 @@ void multigam_state::multigam_init_mapper02(UINT8* prg_base, int prg_size)
m_mapper02_prg_base = prg_base;
m_mapper02_prg_size = prg_size;
- ppu->set_scanline_callback(0);
+ ppu->set_scanline_callback(ppu2c0x_scanline_delegate());
}
/******************************************************
@@ -846,7 +846,7 @@ void multigam_state::multigam_init_mmc1(UINT8 *prg_base, int prg_size, int chr_b
m_mmc1_prg_size = prg_size;
m_mmc1_chr_bank_base = chr_bank_base;
- ppu->set_scanline_callback(0);
+ ppu->set_scanline_callback(ppu2c0x_scanline_delegate());
};
@@ -910,7 +910,7 @@ void multigam_state::supergm3_set_bank()
// title screen
memcpy(mem + 0x8000, mem + 0x18000, 0x8000);
membank("bank10")->set_base(mem + 0x6000);
- ppu->set_scanline_callback(0);
+ ppu->set_scanline_callback(ppu2c0x_scanline_delegate());
}
else if ((m_supergm3_prg_bank & 0x40) == 0)
{
diff --git a/src/mame/includes/playch10.h b/src/mame/includes/playch10.h
index 3559df7d458..42ef1b95205 100644
--- a/src/mame/includes/playch10.h
+++ b/src/mame/includes/playch10.h
@@ -121,6 +121,7 @@ public:
INTERRUPT_GEN_MEMBER(playch10_interrupt);
void pc10_set_videorom_bank( int first, int count, int bank, int size );
void set_videoram_bank( int first, int count, int bank, int size );
+ void gboard_scanline_cb( int scanline, int vblank, int blanked );
};
/*----------- defined in video/playch10.c -----------*/
diff --git a/src/mame/includes/vsnes.h b/src/mame/includes/vsnes.h
index 5e04b225698..8f904305c9e 100644
--- a/src/mame/includes/vsnes.h
+++ b/src/mame/includes/vsnes.h
@@ -104,6 +104,7 @@ public:
void v_set_videorom_bank( int start, int count, int vrom_start_bank );
void mapper4_set_prg( );
void mapper4_set_chr( );
+ void mapper4_irq( int scanline, int vblank, int blanked );
};
/*----------- defined in video/vsnes.c -----------*/
diff --git a/src/mame/machine/playch10.c b/src/mame/machine/playch10.c
index fe794e9bb7a..0c77b71576b 100644
--- a/src/mame/machine/playch10.c
+++ b/src/mame/machine/playch10.c
@@ -821,21 +821,19 @@ DRIVER_INIT_MEMBER(playch10_state,pcfboard_2)
/* G Board games (Super Mario Bros. 3) */
-static void gboard_scanline_cb( device_t *device, int scanline, int vblank, int blanked )
+void playch10_state::gboard_scanline_cb( int scanline, int vblank, int blanked )
{
- playch10_state *state = device->machine().driver_data<playch10_state>();
-
if (scanline < PPU_BOTTOM_VISIBLE_SCANLINE)
{
- int priorCount = state->m_IRQ_count;
- if (state->m_IRQ_count == 0)
- state->m_IRQ_count = state->m_IRQ_count_latch;
+ int priorCount = m_IRQ_count;
+ if (m_IRQ_count == 0)
+ m_IRQ_count = m_IRQ_count_latch;
else
- state->m_IRQ_count--;
+ m_IRQ_count--;
- if (state->m_IRQ_enable && !blanked && (state->m_IRQ_count == 0) && priorCount) // according to blargg the latter should be present as well, but it breaks Rampart and Joe & Mac US: they probably use the alt irq!
+ if (m_IRQ_enable && !blanked && (m_IRQ_count == 0) && priorCount) // according to blargg the latter should be present as well, but it breaks Rampart and Joe & Mac US: they probably use the alt irq!
{
- device->machine().device("cart")->execute().set_input_line(0, HOLD_LINE);
+ machine().device("cart")->execute().set_input_line(0, HOLD_LINE);
}
}
}
@@ -1001,7 +999,7 @@ DRIVER_INIT_MEMBER(playch10_state,pcgboard)
/* common init */
DRIVER_INIT_CALL(playch10);
- ppu->set_scanline_callback(gboard_scanline_cb);
+ ppu->set_scanline_callback(ppu2c0x_scanline_delegate(FUNC(playch10_state::gboard_scanline_cb),this));
}
DRIVER_INIT_MEMBER(playch10_state,pcgboard_type2)
diff --git a/src/mame/machine/vsnes.c b/src/mame/machine/vsnes.c
index c0bac3a22d9..10f1197ef41 100644
--- a/src/mame/machine/vsnes.c
+++ b/src/mame/machine/vsnes.c
@@ -648,22 +648,21 @@ void vsnes_state::mapper4_set_chr( )
#define BOTTOM_VISIBLE_SCANLINE 239 /* The bottommost visible scanline */
#define NUM_SCANLINE 262
-static void mapper4_irq( device_t *device, int scanline, int vblank, int blanked )
+void vsnes_state::mapper4_irq( int scanline, int vblank, int blanked )
{
- vsnes_state *state = device->machine().driver_data<vsnes_state>();
if (scanline < PPU_BOTTOM_VISIBLE_SCANLINE)
{
- int priorCount = state->m_IRQ_count;
- if (state->m_IRQ_count == 0)
+ int priorCount = m_IRQ_count;
+ if (m_IRQ_count == 0)
{
- state->m_IRQ_count = state->m_IRQ_count_latch;
+ m_IRQ_count = m_IRQ_count_latch;
}
else
- state->m_IRQ_count--;
+ m_IRQ_count--;
- if (state->m_IRQ_enable && !blanked && (state->m_IRQ_count == 0) && priorCount)
+ if (m_IRQ_enable && !blanked && (m_IRQ_count == 0) && priorCount)
{
- device->machine().device("maincpu")->execute().set_input_line(0, HOLD_LINE);
+ machine().device("maincpu")->execute().set_input_line(0, HOLD_LINE);
}
}
}
@@ -735,13 +734,13 @@ WRITE8_MEMBER(vsnes_state::mapper4_w)
m_IRQ_enable = 0;
m_IRQ_count = m_IRQ_count_latch;
- ppu1->set_scanline_callback(0);
+ ppu1->set_scanline_callback(ppu2c0x_scanline_delegate());
break;
case 0x6001: /* $e001 - Enable IRQs */
m_IRQ_enable = 1;
- ppu1->set_scanline_callback(mapper4_irq);
+ ppu1->set_scanline_callback(ppu2c0x_scanline_delegate(FUNC(vsnes_state::mapper4_irq),this));
break;
diff --git a/src/mame/video/ppu2c0x.c b/src/mame/video/ppu2c0x.c
index fe8571066b0..96aec8eb5c6 100644
--- a/src/mame/video/ppu2c0x.c
+++ b/src/mame/video/ppu2c0x.c
@@ -110,9 +110,9 @@ void ppu2c0x_device::device_config_complete()
/* reset the callbacks */
m_latch = NULL;
- m_scanline_callback_proc = NULL;
- m_hblank_callback_proc = NULL;
- m_vidaccess_callback_proc = NULL;
+ m_scanline_callback_proc = ppu2c0x_scanline_delegate();
+ m_hblank_callback_proc = ppu2c0x_hblank_delegate();
+ m_vidaccess_callback_proc = ppu2c0x_vidaccess_delegate();
m_nmi_callback_proc = config->nmi_handler;
m_color_base = config->color_base;
@@ -468,8 +468,8 @@ void ppu2c0x_device::device_timer(emu_timer &timer, device_timer_id id, int para
//update_scanline();
- if (m_hblank_callback_proc)
- (*m_hblank_callback_proc) (this, m_scanline, vblank, blanked);
+ if (!m_hblank_callback_proc.isnull())
+ m_hblank_callback_proc(m_scanline, vblank, blanked);
m_hblank_timer->adjust(attotime::never);
break;
@@ -488,8 +488,8 @@ void ppu2c0x_device::device_timer(emu_timer &timer, device_timer_id id, int para
int next_scanline;
/* if a callback is available, call it */
- if (m_scanline_callback_proc)
- (*m_scanline_callback_proc)(this, m_scanline, vblank, blanked);
+ if (!m_scanline_callback_proc.isnull())
+ m_scanline_callback_proc(m_scanline, vblank, blanked);
/* update the scanline that just went by */
update_scanline();
@@ -1235,8 +1235,8 @@ WRITE8_MEMBER( ppu2c0x_device::write )
(*m_latch)(this, tempAddr);
/* if there's a callback, call it now */
- if (m_vidaccess_callback_proc)
- data = (*m_vidaccess_callback_proc)(this, tempAddr, data);
+ if (!m_vidaccess_callback_proc.isnull())
+ data = m_vidaccess_callback_proc(tempAddr, data);
/* see if it's on the chargen portion */
if (tempAddr < 0x2000)
diff --git a/src/mame/video/ppu2c0x.h b/src/mame/video/ppu2c0x.h
index 35d0b471244..afcccdf4e30 100644
--- a/src/mame/video/ppu2c0x.h
+++ b/src/mame/video/ppu2c0x.h
@@ -108,10 +108,12 @@ enum
///*************************************************************************
// callback datatypes
-typedef void (*ppu2c0x_scanline_cb)( device_t *device, int scanline, int vblank, int blanked );
-typedef void (*ppu2c0x_hblank_cb)( device_t *device, int scanline, int vblank, int blanked );
typedef void (*ppu2c0x_nmi_cb)( device_t *device, int *ppu_regs );
-typedef int (*ppu2c0x_vidaccess_cb)( device_t *device, int address, int data );
+
+typedef device_delegate<void (int scanline, int vblank, int blanked)> ppu2c0x_scanline_delegate;
+typedef device_delegate<void (int scanline, int vblank, int blanked)> ppu2c0x_hblank_delegate;
+//typedef device_delegate<void (int *ppu_regs)> ppu2c0x_nmi_delegate;
+typedef device_delegate<int (int address, int data)> ppu2c0x_vidaccess_delegate;
// ======================> ppu2c0x_interface
@@ -167,9 +169,9 @@ public:
int get_colorbase() { return m_color_base; };
int get_current_scanline() { return m_scanline; };
int is_sprite_8x16() { return BIT(m_regs[0], 5); }; // MMC5 has to be able to check this
- void set_scanline_callback( ppu2c0x_scanline_cb cb ) { if (cb != NULL) m_scanline_callback_proc = cb; };
- void set_hblank_callback( ppu2c0x_scanline_cb cb ) { if (cb != NULL) m_hblank_callback_proc = cb; };
- void set_vidaccess_callback( ppu2c0x_vidaccess_cb cb ) { if (cb != NULL) m_vidaccess_callback_proc = cb; };
+ void set_scanline_callback( ppu2c0x_scanline_delegate cb ) { m_scanline_callback_proc = cb; m_scanline_callback_proc.bind_relative_to(*owner()); };
+ void set_hblank_callback( ppu2c0x_hblank_delegate cb ) { m_hblank_callback_proc = cb; m_hblank_callback_proc.bind_relative_to(*owner()); };
+ void set_vidaccess_callback( ppu2c0x_vidaccess_delegate cb ) { m_vidaccess_callback_proc = cb; m_vidaccess_callback_proc.bind_relative_to(*owner()); };
void set_scanlines_per_frame( int scanlines ) { m_scanlines_per_frame = scanlines; };
//27/12/2002 (HACK!)
@@ -184,9 +186,9 @@ public:
pen_t *m_colortable; /* color table modified at run time */
pen_t *m_colortable_mono; /* monochromatic color table modified at run time */
int m_scanline; /* scanline count */
- ppu2c0x_scanline_cb m_scanline_callback_proc; /* optional scanline callback */
- ppu2c0x_hblank_cb m_hblank_callback_proc; /* optional hblank callback */
- ppu2c0x_vidaccess_cb m_vidaccess_callback_proc; /* optional video access callback */
+ ppu2c0x_scanline_delegate m_scanline_callback_proc; /* optional scanline callback */
+ ppu2c0x_hblank_delegate m_hblank_callback_proc; /* optional hblank callback */
+ ppu2c0x_vidaccess_delegate m_vidaccess_callback_proc; /* optional video access callback */
ppu2c0x_nmi_cb m_nmi_callback_proc; /* nmi access callback from interface */
int m_regs[PPU_MAX_REG]; /* registers */
int m_refresh_data; /* refresh-related */
diff --git a/src/mess/includes/nes.h b/src/mess/includes/nes.h
index 518f5f2197e..3d551d89288 100644
--- a/src/mess/includes/nes.h
+++ b/src/mess/includes/nes.h
@@ -146,6 +146,30 @@ public:
optional_device<nes_cart_slot_device> m_cartslot; //mandatory
+ void ffe_irq(int scanline, int vblank, int blanked);
+ void mmc3_irq(int scanline, int vblank, int blanked);
+ void mmc5_irq(int scanline, int vblank, int blanked);
+ void jxrom_irq(int scanline, int vblank, int blanked);
+ void h3001_irq(int scanline, int vblank, int blanked);
+ void ss88006_irq(int scanline, int vblank, int blanked);
+ void konami_irq(int scanline, int vblank, int blanked);
+ void sunsoft3_irq(int scanline, int vblank, int blanked);
+ void ks7032_irq(int scanline, int vblank, int blanked);
+ void mmc_fds_irq(int scanline, int vblank, int blanked);
+ void sc127_irq(int scanline, int vblank, int blanked);
+ void smb2jb_irq(int scanline, int vblank, int blanked);
+ void btl_smb2a_irq(int scanline, int vblank, int blanked);
+ void btl_smb3_irq(int scanline, int vblank, int blanked);
+ void btl_dn_irq(int scanline, int vblank, int blanked);
+ void shjy3_irq(int scanline, int vblank, int blanked);
+ void bandai_lz_irq(int scanline, int vblank, int blanked);
+ void namcot_irq(int scanline, int vblank, int blanked);
+ void futuremedia_irq(int scanline, int vblank, int blanked);
+ void nanjing_irq(int scanline, int vblank, int blanked);
+ void tengen_800032_irq(int scanline, int vblank, int blanked);
+
+ int nes_ppu_vidaccess(int address, int data);
+ void fds_irq(int scanline, int vblank, int blanked);
private:
/* devices */
// cpu_device *m_maincpu;
@@ -161,8 +185,6 @@ private:
/* protos */
-int nes_ppu_vidaccess( device_t *device, int address, int data );
-
void nes_partialhash(hash_collection &dest, const unsigned char *data, unsigned long length, const char *functions);
diff --git a/src/mess/machine/nes.c b/src/mess/machine/nes.c
index ec44cbf2a8c..bfc3ca5f5ba 100644
--- a/src/mess/machine/nes.c
+++ b/src/mess/machine/nes.c
@@ -28,13 +28,6 @@
#define SPLIT_CHR 0
/***************************************************************************
- FUNCTION PROTOTYPES
-***************************************************************************/
-
-
-static void fds_irq(device_t *device, int scanline, int vblank, int blanked);
-
-/***************************************************************************
FUNCTIONS
***************************************************************************/
@@ -256,7 +249,7 @@ void nes_state::init_nes_core()
}
// to be probably removed (it does nothing since a long time)
-int nes_ppu_vidaccess( device_t *device, int address, int data )
+int nes_state::nes_ppu_vidaccess( int address, int data )
{
return data;
}
@@ -265,7 +258,7 @@ void nes_state::machine_reset()
{
/* Reset the mapper variables. Will also mark the char-gen ram as dirty */
if (m_disk_expansion && m_pcb_id == NO_BOARD)
- m_ppu->set_hblank_callback(fds_irq);
+ m_ppu->set_hblank_callback(ppu2c0x_hblank_delegate(FUNC(nes_state::fds_irq),this));
else
nes_pcb_reset();
@@ -737,23 +730,21 @@ void nes_partialhash(hash_collection &dest, const unsigned char *data,
**************************/
-static void fds_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::fds_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
- if (state->m_IRQ_enable_latch)
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ if (m_IRQ_enable_latch)
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- if (state->m_IRQ_enable)
+ if (m_IRQ_enable)
{
- if (state->m_IRQ_count <= 114)
+ if (m_IRQ_count <= 114)
{
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- state->m_IRQ_enable = 0;
- state->m_fds_status0 |= 0x01;
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_enable = 0;
+ m_fds_status0 |= 0x01;
}
else
- state->m_IRQ_count -= 114;
+ m_IRQ_count -= 114;
}
}
diff --git a/src/mess/machine/nes_ines.c b/src/mess/machine/nes_ines.c
index 6f578e43338..0a65acdb2bc 100644
--- a/src/mess/machine/nes_ines.c
+++ b/src/mess/machine/nes_ines.c
@@ -27,21 +27,20 @@ struct nes_mmc
/* Here, IRQ counter decrements every CPU cycle. Since we update it every scanline,
we need to decrement it by 114 (Each scanline consists of 341 dots and, on NTSC,
there are 3 dots to every 1 CPU cycle, hence 114 is the number of cycles per scanline ) */
-static void ffe_irq( device_t *device, int scanline, int vblank, int blanked )
-{
- nes_state *state = device->machine().driver_data<nes_state>();
- /* 114 is the number of cycles per scanline */
- /* TODO: change to reflect the actual number of cycles spent */
- if (state->m_IRQ_enable)
+void nes_state::ffe_irq( int scanline, int vblank, int blanked )
+{
+ // 114 is the number of cycles per scanline
+ // TODO: change to reflect the actual number of cycles spent
+ if (m_IRQ_enable)
{
- if ((0xffff - state->m_IRQ_count) < 114)
+ if ((0xffff - m_IRQ_count) < 114)
{
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- state->m_IRQ_count = 0xffff;
- state->m_IRQ_enable = 0;
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_count = 0xffff;
+ m_IRQ_enable = 0;
}
- state->m_IRQ_count -= 114;
+ m_IRQ_count -= 114;
}
}
diff --git a/src/mess/machine/nes_mmc.c b/src/mess/machine/nes_mmc.c
index 7c932bda80d..4051c776af3 100644
--- a/src/mess/machine/nes_mmc.c
+++ b/src/mess/machine/nes_mmc.c
@@ -136,8 +136,6 @@
#define LOG_MMC(x) do { if (VERBOSE) logerror x; } while (0)
#define LOG_FDS(x) do { if (VERBOSE) logerror x; } while (0)
-static void ffe_irq( device_t *device, int scanline, int vblank, int blanked );
-
/*************************************************************
Base emulation (see drivers/nes.c):
diff --git a/src/mess/machine/nes_pcb.c b/src/mess/machine/nes_pcb.c
index eb1b976386e..da4c620d67c 100644
--- a/src/mess/machine/nes_pcb.c
+++ b/src/mess/machine/nes_pcb.c
@@ -1295,26 +1295,24 @@ static void mmc3_set_chr( running_machine &machine, UINT8 chr, int chr_base, int
}
/* Here, IRQ counter decrements every scanline. */
-static void mmc3_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::mmc3_irq(int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
if (scanline < PPU_BOTTOM_VISIBLE_SCANLINE)
{
- int priorCount = state->m_IRQ_count;
- if ((state->m_IRQ_count == 0) || state->m_IRQ_clear)
- state->m_IRQ_count = state->m_IRQ_count_latch;
+ int priorCount = m_IRQ_count;
+ if ((m_IRQ_count == 0) || m_IRQ_clear)
+ m_IRQ_count = m_IRQ_count_latch;
else
- state->m_IRQ_count--;
+ m_IRQ_count--;
- if (state->m_IRQ_enable && !blanked && (state->m_IRQ_count == 0) && (priorCount || state->m_IRQ_clear /*|| !state->m_mmc3_alt_irq*/)) // according to blargg the latter should be present as well, but it breaks Rampart and Joe & Mac US: they probably use the alt irq!
+ if (m_IRQ_enable && !blanked && (m_IRQ_count == 0) && (priorCount || m_IRQ_clear /*|| !m_mmc3_alt_irq*/)) // according to blargg the latter should be present as well, but it breaks Rampart and Joe & Mac US: they probably use the alt irq!
{
LOG_MMC(("irq fired, scanline: %d (MAME %d, beam pos: %d)\n", scanline,
- device->machine().primary_screen->vpos(), device->machine().primary_screen->hpos()));
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ machine().primary_screen->vpos(), machine().primary_screen->hpos()));
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
}
- state->m_IRQ_clear = 0;
+ m_IRQ_clear = 0;
}
WRITE8_MEMBER(nes_carts_state::txrom_w)
@@ -1821,28 +1819,26 @@ static void mmc5_update_render_mode( running_machine &machine )
{
}
-static void mmc5_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::mmc5_irq(int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
#if 1
if (scanline == 0)
- state->m_IRQ_status |= 0x40;
+ m_IRQ_status |= 0x40;
else if (scanline > PPU_BOTTOM_VISIBLE_SCANLINE)
- state->m_IRQ_status &= ~0x40;
+ m_IRQ_status &= ~0x40;
#endif
- if (scanline == state->m_IRQ_count)
+ if (scanline == m_IRQ_count)
{
- if (state->m_IRQ_enable)
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ if (m_IRQ_enable)
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- state->m_IRQ_status = 0xff;
+ m_IRQ_status = 0xff;
}
/* FIXME: this is ok, but then we would need to update them again when we have the BG Hblank
I leave it commented out until the PPU is updated for this */
- // if (ppu2c0x_is_sprite_8x16(state->m_ppu) || state->m_mmc5_last_chr_a)
+ // if (ppu2c0x_is_sprite_8x16(m_ppu) || m_mmc5_last_chr_a)
// mmc5_update_chr_a(device->machine());
// else
// mmc5_update_chr_b(device->machine());
@@ -2461,27 +2457,25 @@ WRITE8_MEMBER(nes_carts_state::ntbrom_w)
/* Here, IRQ counter decrements every CPU cycle. Since we update it every scanline,
we need to decrement it by 114 (Each scanline consists of 341 dots and, on NTSC,
there are 3 dots to every 1 CPU cycle, hence 114 is the number of cycles per scanline ) */
-static void jxrom_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::jxrom_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
/* TODO: change to reflect the actual number of cycles spent */
- if ((state->m_IRQ_enable & 0x80) && (state->m_IRQ_enable & 0x01))
+ if ((m_IRQ_enable & 0x80) && (m_IRQ_enable & 0x01))
{
- if (state->m_IRQ_count <= 114)
+ if (m_IRQ_count <= 114)
{
- state->m_IRQ_count = 0xffff;
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_count = 0xffff;
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
else
- state->m_IRQ_count -= 114;
+ m_IRQ_count -= 114;
}
- else if (state->m_IRQ_enable & 0x01) // if enable bit 7 is not set, only decrement the counter!
+ else if (m_IRQ_enable & 0x01) // if enable bit 7 is not set, only decrement the counter!
{
- if (state->m_IRQ_count <= 114)
- state->m_IRQ_count = 0xffff;
+ if (m_IRQ_count <= 114)
+ m_IRQ_count = 0xffff;
else
- state->m_IRQ_count -= 114;
+ m_IRQ_count -= 114;
}
}
@@ -2828,20 +2822,18 @@ WRITE8_MEMBER(nes_carts_state::dis_74x161x161x32_w)
/* Here, IRQ counter decrements every CPU cycle. Since we update it every scanline,
we need to decrement it by 114 (Each scanline consists of 341 dots and, on NTSC,
there are 3 dots to every 1 CPU cycle, hence 114 is the number of cycles per scanline ) */
-static void bandai_lz_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::bandai_lz_irq(int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
/* 114 is the number of cycles per scanline */
/* TODO: change to reflect the actual number of cycles spent */
- if (state->m_IRQ_enable)
+ if (m_IRQ_enable)
{
- if (state->m_IRQ_count <= 114)
+ if (m_IRQ_count <= 114)
{
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- state->m_IRQ_count = (0xffff - 114 + state->m_IRQ_count); // wrap around the 16 bits counter
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_count = (0xffff - 114 + m_IRQ_count); // wrap around the 16 bits counter
}
- state->m_IRQ_count -= 114;
+ m_IRQ_count -= 114;
}
}
@@ -3081,17 +3073,16 @@ WRITE8_MEMBER(nes_carts_state::g101_w)
/* Here, IRQ counter decrements every CPU cycle. Since we update it every scanline,
we need to decrement it by 114 (Each scanline consists of 341 dots and, on NTSC,
there are 3 dots to every 1 CPU cycle, hence 114 is the number of cycles per scanline ) */
-static void h3001_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::h3001_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
- if (state->m_IRQ_enable)
+ if (m_IRQ_enable)
{
- state->m_IRQ_count -= 114;
+ m_IRQ_count -= 114;
- if (state->m_IRQ_count <= 114)
+ if (m_IRQ_count <= 114)
{
- state->m_IRQ_enable = 0;
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_enable = 0;
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
}
}
@@ -3161,50 +3152,48 @@ WRITE8_MEMBER(nes_carts_state::h3001_w)
/* Here, IRQ counter decrements every CPU cycle. Since we update it every scanline,
we need to decrement it by 114 (Each scanline consists of 341 dots and, on NTSC,
there are 3 dots to every 1 CPU cycle, hence 114 is the number of cycles per scanline ) */
-static void ss88006_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::ss88006_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
/* Increment & check the IRQ scanline counter */
- if (state->m_IRQ_enable)
+ if (m_IRQ_enable)
{
- LOG_MMC(("scanline: %d, irq count: %04x\n", scanline, state->m_IRQ_count));
- if (state->m_IRQ_mode & 0x08)
+ LOG_MMC(("scanline: %d, irq count: %04x\n", scanline, m_IRQ_count));
+ if (m_IRQ_mode & 0x08)
{
- if ((state->m_IRQ_count & 0x000f) < 114) // always true, but we only update the IRQ once per scanlines so we cannot be more precise :(
+ if ((m_IRQ_count & 0x000f) < 114) // always true, but we only update the IRQ once per scanlines so we cannot be more precise :(
{
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- state->m_IRQ_count = (state->m_IRQ_count & ~0x000f) | (0x0f - (114 & 0x0f) + (state->m_IRQ_count & 0x000f)); // sort of wrap around the counter
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_count = (m_IRQ_count & ~0x000f) | (0x0f - (114 & 0x0f) + (m_IRQ_count & 0x000f)); // sort of wrap around the counter
}
// decrements should not affect upper bits, so we don't do anything here (114 > 0x0f)
}
- else if (state->m_IRQ_mode & 0x04)
+ else if (m_IRQ_mode & 0x04)
{
- if ((state->m_IRQ_count & 0x00ff) < 114)
+ if ((m_IRQ_count & 0x00ff) < 114)
{
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- state->m_IRQ_count = (state->m_IRQ_count & ~0x00ff) | (0xff - 114 + (state->m_IRQ_count & 0x00ff)); // wrap around the 8 bits counter
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_count = (m_IRQ_count & ~0x00ff) | (0xff - 114 + (m_IRQ_count & 0x00ff)); // wrap around the 8 bits counter
}
else
- state->m_IRQ_count -= 114;
+ m_IRQ_count -= 114;
}
- else if (state->m_IRQ_mode & 0x02)
+ else if (m_IRQ_mode & 0x02)
{
- if ((state->m_IRQ_count & 0x0fff) < 114)
+ if ((m_IRQ_count & 0x0fff) < 114)
{
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- state->m_IRQ_count = (state->m_IRQ_count & ~0x0fff) | (0xfff - 114 + (state->m_IRQ_count & 0x0fff)); // wrap around the 12 bits counter
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_count = (m_IRQ_count & ~0x0fff) | (0xfff - 114 + (m_IRQ_count & 0x0fff)); // wrap around the 12 bits counter
}
else
- state->m_IRQ_count -= 114;
+ m_IRQ_count -= 114;
}
- else if (state->m_IRQ_count < 114)
+ else if (m_IRQ_count < 114)
{
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- state->m_IRQ_count = (0xffff - 114 + state->m_IRQ_count); // wrap around the 16 bits counter
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_count = (0xffff - 114 + m_IRQ_count); // wrap around the 16 bits counter
}
else
- state->m_IRQ_count -= 114;
+ m_IRQ_count -= 114;
}
}
@@ -3572,15 +3561,14 @@ static void vrc4_set_prg( running_machine &machine )
}
}
-static void konami_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::konami_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
/* Increment & check the IRQ scanline counter */
- if (state->m_IRQ_enable && (++state->m_IRQ_count == 0x100))
+ if (m_IRQ_enable && (++m_IRQ_count == 0x100))
{
- state->m_IRQ_count = state->m_IRQ_count_latch;
- state->m_IRQ_enable = state->m_IRQ_enable_latch;
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_count = m_IRQ_count_latch;
+ m_IRQ_enable = m_IRQ_enable_latch;
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
}
@@ -3838,19 +3826,17 @@ WRITE8_MEMBER(nes_carts_state::konami_vrc7_w)
/* Here, IRQ counter decrements every CPU cycle. Since we update it every scanline,
we need to decrement it by 114 (Each scanline consists of 341 dots and, on NTSC,
there are 3 dots to every 1 CPU cycle, hence 114 is the number of cycles per scanline ) */
-static void namcot_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::namcot_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
- if (state->m_IRQ_enable)
+ if (m_IRQ_enable)
{
- if (state->m_IRQ_count >= (0x7fff - 114))
+ if (m_IRQ_count >= (0x7fff - 114))
{
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- state->m_IRQ_count = 0;
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_count = 0;
}
else
- state->m_IRQ_count += 114;
+ m_IRQ_count += 114;
}
}
@@ -4003,22 +3989,20 @@ WRITE8_MEMBER(nes_carts_state::sunsoft2_w)
/* Here, IRQ counter decrements every CPU cycle. Since we update it every scanline,
we need to decrement it by 114 (Each scanline consists of 341 dots and, on NTSC,
there are 3 dots to every 1 CPU cycle, hence 114 is the number of cycles per scanline ) */
-static void sunsoft3_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::sunsoft3_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
/* TODO: change to reflect the actual number of cycles spent: both using 114 or cycling 114,114,113
produces a 1-line glitch in Fantasy Zone 2: it really requires the counter to be updated each CPU cycle! */
- if (state->m_IRQ_enable)
+ if (m_IRQ_enable)
{
- if (state->m_IRQ_count <= 114)
+ if (m_IRQ_count <= 114)
{
- state->m_IRQ_enable = 0;
- state->m_IRQ_count = 0xffff;
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_enable = 0;
+ m_IRQ_count = 0xffff;
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
else
- state->m_IRQ_count -= 114;
+ m_IRQ_count -= 114;
}
}
@@ -5058,16 +5042,15 @@ READ8_MEMBER(nes_carts_state::fukutake_l_r)
*************************************************************/
-static void futuremedia_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::futuremedia_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
// if (scanline < PPU_BOTTOM_VISIBLE_SCANLINE)
{
- if (state->m_IRQ_enable && state->m_IRQ_count)
+ if (m_IRQ_enable && m_IRQ_count)
{
- state->m_IRQ_count--;
- if (!state->m_IRQ_count)
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_count--;
+ if (!m_IRQ_count)
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
}
}
@@ -5432,20 +5415,18 @@ static void ks7032_prg_update( running_machine &machine )
state->prg8_cd(state->m_mmc_reg[3]);
}
-static void ks7032_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::ks7032_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
- if (state->m_IRQ_enable)
+ if (m_IRQ_enable)
{
- if (state->m_IRQ_count >= (0xffff - 114))
+ if (m_IRQ_count >= (0xffff - 114))
{
- state->m_IRQ_enable = 0;
- state->m_IRQ_count = state->m_IRQ_count_latch;
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_enable = 0;
+ m_IRQ_count = m_IRQ_count_latch;
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
else
- state->m_IRQ_count += 114;
+ m_IRQ_count += 114;
}
}
@@ -5545,20 +5526,18 @@ WRITE8_MEMBER(nes_carts_state::ks202_w)
*************************************************************/
-static void mmc_fds_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::mmc_fds_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
- if (state->m_IRQ_enable)
+ if (m_IRQ_enable)
{
- if (state->m_IRQ_count <= 114)
+ if (m_IRQ_count <= 114)
{
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- state->m_IRQ_enable = 0;
- state->m_IRQ_status |= 0x01;
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_enable = 0;
+ m_IRQ_status |= 0x01;
}
else
- state->m_IRQ_count -= 114;
+ m_IRQ_count -= 114;
}
}
@@ -5825,22 +5804,20 @@ WRITE8_MEMBER(nes_carts_state::magics_md_w)
*************************************************************/
-static void nanjing_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::nanjing_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
- if (BIT(state->m_mmc_reg[0], 7))
+ if (BIT(m_mmc_reg[0], 7))
{
if (scanline == 127)
{
- state->chr4_0(1, CHRRAM);
- state->chr4_4(1, CHRRAM);
+ chr4_0(1, CHRRAM);
+ chr4_4(1, CHRRAM);
}
if (scanline == 239)
{
- state->chr4_0(0, CHRRAM);
- state->chr4_4(0, CHRRAM);
+ chr4_0(0, CHRRAM);
+ chr4_4(0, CHRRAM);
}
}
@@ -7138,32 +7115,31 @@ WRITE8_MEMBER(nes_carts_state::tengen_800008_w)
*************************************************************/
-static void tengen_800032_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::tengen_800032_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
- if (!state->m_IRQ_mode) // we are in scanline mode!
+ if (!m_IRQ_mode) // we are in scanline mode!
{
if (scanline < PPU_BOTTOM_VISIBLE_SCANLINE)
{
- if (!state->m_IRQ_reset)
+ if (!m_IRQ_reset)
{
- if (!state->m_IRQ_count)
- state->m_IRQ_count = state->m_IRQ_count_latch;
+ if (!m_IRQ_count)
+ m_IRQ_count = m_IRQ_count_latch;
else
{
- state->m_IRQ_count--;
- if (state->m_IRQ_enable && !blanked && !state->m_IRQ_count)
+ m_IRQ_count--;
+ if (m_IRQ_enable && !blanked && !m_IRQ_count)
{
LOG_MMC(("irq fired, scanline: %d (MAME %d, beam pos: %d)\n", scanline,
- device->machine().primary_screen->vpos(), device->machine().primary_screen->hpos()));
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ machine().primary_screen->vpos(), machine().primary_screen->hpos()));
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
}
}
else
{
- state->m_IRQ_reset = 0;
- state->m_IRQ_count = state->m_IRQ_count_latch + 1;
+ m_IRQ_reset = 0;
+ m_IRQ_count = m_IRQ_count_latch + 1;
}
}
}
@@ -7172,18 +7148,18 @@ static void tengen_800032_irq( device_t *device, int scanline, int vblank, int b
--> Skulls and Crossbones does not show anything!! */
else
{
- // if (!state->m_IRQ_reset)
+ // if (!m_IRQ_reset)
{
- if (state->m_IRQ_count <= 114)
- state->m_IRQ_count = state->m_IRQ_count_latch;
+ if (m_IRQ_count <= 114)
+ m_IRQ_count = m_IRQ_count_latch;
else
{
- state->m_IRQ_count -= 114;
- if (state->m_IRQ_enable && !blanked && (state->m_IRQ_count <= 114))
+ m_IRQ_count -= 114;
+ if (m_IRQ_enable && !blanked && (m_IRQ_count <= 114))
{
LOG_MMC(("irq fired, scanline: %d (MAME %d, beam pos: %d)\n", scanline,
- device->machine().primary_screen->vpos(), device->machine().primary_screen->hpos()));
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ machine().primary_screen->vpos(), machine().primary_screen->hpos()));
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
}
}
@@ -8840,20 +8816,18 @@ WRITE8_MEMBER(nes_carts_state::n625092_w)
*************************************************************/
-static void sc127_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::sc127_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
- if (scanline < PPU_BOTTOM_VISIBLE_SCANLINE && state->m_IRQ_enable)
+ if (scanline < PPU_BOTTOM_VISIBLE_SCANLINE && m_IRQ_enable)
{
- state->m_IRQ_count--;
+ m_IRQ_count--;
- if (!blanked && (state->m_IRQ_count == 0))
+ if (!blanked && (m_IRQ_count == 0))
{
LOG_MMC(("irq fired, scanline: %d (MAME %d, beam pos: %d)\n", scanline,
- device->machine().primary_screen->vpos(), device->machine().primary_screen->hpos()));
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- state->m_IRQ_enable = 0;
+ machine().primary_screen->vpos(), machine().primary_screen->hpos()));
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_enable = 0;
}
}
}
@@ -8981,22 +8955,21 @@ WRITE8_MEMBER(nes_carts_state::smb2j_w)
*************************************************************/
-static void smb2jb_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::smb2jb_irq(int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
- if (state->m_IRQ_enable)
+ if (m_IRQ_enable)
{
- if (state->m_IRQ_count < 0x1000)
+ if (m_IRQ_count < 0x1000)
{
- if ((0x1000 - state->m_IRQ_count) <= 114)
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ if ((0x1000 - m_IRQ_count) <= 114)
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
else
- state->m_IRQ_count += 114;
+ m_IRQ_count += 114;
}
else
- state->m_IRQ_count += 114;
+ m_IRQ_count += 114;
- state->m_IRQ_count &= 0xffff; // according to docs is 16bit counter -> it wraps only after 0xffff
+ m_IRQ_count &= 0xffff; // according to docs is 16bit counter -> it wraps only after 0xffff
}
}
@@ -9260,20 +9233,18 @@ WRITE8_MEMBER(nes_carts_state::btl_mariobaby_w)
*************************************************************/
-static void btl_smb2a_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::btl_smb2a_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
- if (state->m_IRQ_enable)
+ if (m_IRQ_enable)
{
- if ((0xfff - state->m_IRQ_count) <= 114)
+ if ((0xfff - m_IRQ_count) <= 114)
{
- state->m_IRQ_count = (state->m_IRQ_count + 1) & 0xfff;
- state->m_IRQ_enable = 0;
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_count = (m_IRQ_count + 1) & 0xfff;
+ m_IRQ_enable = 0;
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
else
- state->m_IRQ_count += 114;
+ m_IRQ_count += 114;
}
}
@@ -9347,19 +9318,17 @@ WRITE8_MEMBER(nes_carts_state::btl_tobi_l_w)
*************************************************************/
-static void btl_smb3_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::btl_smb3_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
-
- if (state->m_IRQ_enable)
+ if (m_IRQ_enable)
{
- if ((0xffff - state->m_IRQ_count) < 114)
+ if ((0xffff - m_IRQ_count) < 114)
{
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
- state->m_IRQ_enable = 0;
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_enable = 0;
}
- state->m_IRQ_count = (state->m_IRQ_count + 114) & 0xffff;
+ m_IRQ_count = (m_IRQ_count + 114) & 0xffff;
}
}
@@ -9422,18 +9391,17 @@ WRITE8_MEMBER(nes_carts_state::btl_smb3_w)
*************************************************************/
/* Scanline based IRQ ? */
-static void btl_dn_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::btl_dn_irq(int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
if (scanline < PPU_BOTTOM_VISIBLE_SCANLINE)
{
- if (!state->m_IRQ_count || ++state->m_IRQ_count < 240)
+ if (!m_IRQ_count || ++m_IRQ_count < 240)
return;
- state->m_IRQ_count = 0;
+ m_IRQ_count = 0;
LOG_MMC(("irq fired, scanline: %d (MAME %d, beam pos: %d)\n", scanline,
- device->machine().primary_screen->vpos(), device->machine().primary_screen->hpos()));
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ machine().primary_screen->vpos(), machine().primary_screen->hpos()));
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
}
@@ -11273,19 +11241,18 @@ WRITE8_MEMBER(nes_carts_state::h2288_w)
*************************************************************/
/* I think the IRQ should only get fired if enough CPU cycles have passed, but we don't implement (yet) this part */
-static void shjy3_irq( device_t *device, int scanline, int vblank, int blanked )
+void nes_state::shjy3_irq( int scanline, int vblank, int blanked )
{
- nes_state *state = device->machine().driver_data<nes_state>();
- if (state->m_IRQ_enable & 0x02)
+ if (m_IRQ_enable & 0x02)
{
- if (state->m_IRQ_count == 0xff)
+ if (m_IRQ_count == 0xff)
{
- state->m_IRQ_count = state->m_IRQ_count_latch;
- state->m_IRQ_enable = state->m_IRQ_enable | ((state->m_IRQ_enable & 0x01) << 1);
- state->m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
+ m_IRQ_count = m_IRQ_count_latch;
+ m_IRQ_enable = m_IRQ_enable | ((m_IRQ_enable & 0x01) << 1);
+ m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
}
else
- state->m_IRQ_count++;
+ m_IRQ_count++;
}
}
@@ -11761,8 +11728,8 @@ struct nes_pcb_intf
nes_memory_accessor mmc_m; /* $6000-$7fff read/write routines */
nes_memory_accessor mmc_h; /* $8000-$ffff read/write routines */
nes_ppu_latch mmc_ppu_latch;
- ppu2c0x_scanline_cb mmc_scanline;
- ppu2c0x_hblank_cb mmc_hblank;
+ ppu2c0x_scanline_delegate mmc_scanline;
+ ppu2c0x_hblank_delegate mmc_hblank;
};
@@ -11778,7 +11745,17 @@ struct nes_pcb_intf
#define NES_READWRITE(a, b) \
{write8_delegate(FUNC(a),(nes_state *)0), read8_delegate(FUNC(b),(nes_state *)0)}
+#define NES_SCANLINE_NULL \
+ ppu2c0x_scanline_delegate()
+
+#define NES_HBLANK_NULL \
+ ppu2c0x_hblank_delegate()
+
+#define NES_HBLANK(a) \
+ ppu2c0x_hblank_delegate(FUNC(a),(nes_state *)0)
+
+
WRITE8_MEMBER(nes_carts_state::dummy_l_w)
{
logerror("write access, offset: %04x, data: %02x\n", offset + 0x4100, data);
@@ -11814,255 +11791,255 @@ READ8_MEMBER(nes_carts_state::dummy_r)
static const nes_pcb_intf nes_intf_list[] =
{
- { STD_NROM, NES_NOACCESS, NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { HVC_FAMBASIC, NES_NOACCESS, NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { GG_NROM, NES_NOACCESS, NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { STD_UXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::uxrom_w), NULL, NULL, NULL },
- { STD_UN1ROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::un1rom_w), NULL, NULL, NULL },
- { STD_CPROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cprom_w), NULL, NULL, NULL },
- { STD_CNROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cnrom_w), NULL, NULL, NULL },
- { BANDAI_PT554, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bandai_pt554_m_w), NES_WRITEONLY(nes_carts_state::cnrom_w), NULL, NULL, NULL },
- { STD_AXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::axrom_w), NULL, NULL, NULL },
- { STD_PXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::pxrom_w), mmc2_latch, NULL, NULL },
- { STD_FXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::fxrom_w), mmc2_latch, NULL, NULL },
- { STD_BXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bxrom_w), NULL, NULL, NULL },
- { STD_GXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::gxrom_w), NULL, NULL, NULL },
- { STD_MXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::gxrom_w), NULL, NULL, NULL },
- { STD_NXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ntbrom_w), NULL, NULL, NULL },
- { SUNSOFT_DCS, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ntbrom_w), NULL, NULL, NULL },
- { STD_JXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jxrom_w), NULL, NULL, jxrom_irq },
- { STD_SXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sxrom_w), NULL, NULL, NULL },
- { STD_SOROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sxrom_w), NULL, NULL, NULL },
- { STD_SXROM_A, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sxrom_w), NULL, NULL, NULL },
- { STD_SOROM_A, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sxrom_w), NULL, NULL, NULL },
- { STD_TXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { STD_TVROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { STD_TKROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { STD_HKROM, NES_NOACCESS, NES_READWRITE(nes_carts_state::hkrom_m_w, nes_carts_state::hkrom_m_r), NES_WRITEONLY(nes_carts_state::hkrom_w), NULL, NULL, mmc3_irq },
- { STD_TQROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tqrom_w), NULL, NULL, mmc3_irq },
- { STD_TXSROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txsrom_w), NULL, NULL, mmc3_irq },
- { STD_DXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dxrom_w), NULL, NULL, NULL },
- { STD_DRROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dxrom_w), NULL, NULL, NULL },
- { NAMCOT_34X3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dxrom_w), NULL, NULL, NULL },
- { NAMCOT_3425, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::namcot3425_w), NULL, NULL, NULL },
- { NAMCOT_3446, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::namcot3446_w), NULL, NULL, NULL },
- { NAMCOT_3453, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::namcot3453_w), NULL, NULL, NULL },
- { STD_EXROM, NES_READWRITE(nes_carts_state::exrom_l_w, nes_carts_state::exrom_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NULL, mmc5_irq },
- { NES_QJ, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::qj_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { PAL_ZZ, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::zz_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { UXROM_CC, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::uxrom_cc_w), NULL, NULL, NULL },
+ { STD_NROM, NES_NOACCESS, NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { HVC_FAMBASIC, NES_NOACCESS, NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { GG_NROM, NES_NOACCESS, NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_UXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::uxrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_UN1ROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::un1rom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_CPROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cprom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_CNROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cnrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BANDAI_PT554, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bandai_pt554_m_w), NES_WRITEONLY(nes_carts_state::cnrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_AXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::axrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_PXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::pxrom_w), mmc2_latch, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_FXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::fxrom_w), mmc2_latch, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_BXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bxrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_GXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::gxrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_MXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::gxrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_NXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ntbrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SUNSOFT_DCS, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ntbrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_JXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jxrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::jxrom_irq) },
+ { STD_SXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sxrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_SOROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sxrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_SXROM_A, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sxrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_SOROM_A, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sxrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_TXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { STD_TVROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { STD_TKROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { STD_HKROM, NES_NOACCESS, NES_READWRITE(nes_carts_state::hkrom_m_w, nes_carts_state::hkrom_m_r), NES_WRITEONLY(nes_carts_state::hkrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { STD_TQROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tqrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { STD_TXSROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txsrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { STD_DXROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dxrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_DRROM, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dxrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { NAMCOT_34X3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dxrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { NAMCOT_3425, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::namcot3425_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { NAMCOT_3446, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::namcot3446_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { NAMCOT_3453, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::namcot3453_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { STD_EXROM, NES_READWRITE(nes_carts_state::exrom_l_w, nes_carts_state::exrom_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc5_irq) },
+ { NES_QJ, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::qj_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { PAL_ZZ, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::zz_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { UXROM_CC, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::uxrom_cc_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
//
- { DIS_74X139X74, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dis_74x139x74_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { DIS_74X377, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dis_74x377_w), NULL, NULL, NULL },
- { DIS_74X161X161X32, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dis_74x161x161x32_w), NULL, NULL, NULL },
- { DIS_74X161X138, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dis_74x161x138_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { BANDAI_LZ93, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lz93d50_m_w), NES_WRITEONLY(nes_carts_state::lz93d50_w), NULL, NULL, bandai_lz_irq },
- { BANDAI_LZ93EX, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lz93d50_m_w), NES_WRITEONLY(nes_carts_state::lz93d50_w), NULL, NULL, bandai_lz_irq },
- { BANDAI_FCG, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lz93d50_m_w), NES_WRITEONLY(nes_carts_state::lz93d50_w), NULL, NULL, bandai_lz_irq },
- { BANDAI_DATACH, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lz93d50_m_w), NES_WRITEONLY(nes_carts_state::lz93d50_w), NULL, NULL, bandai_lz_irq },
- { BANDAI_JUMP2, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::fjump2_w), NULL, NULL, bandai_lz_irq },
- { BANDAI_KARAOKE, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bandai_ks_w), NULL, NULL, NULL },
- { BANDAI_OEKAKIDS, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bandai_ok_w), NULL, NULL, NULL },
- { IREM_G101, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::g101_w), NULL, NULL, NULL },
- { IREM_LROG017, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lrog017_w), NULL, NULL, NULL },
- { IREM_H3001, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::h3001_w), NULL, NULL, h3001_irq },
- { IREM_TAM_S1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tam_s1_w), NULL, NULL, NULL },
- { IREM_HOLYDIV, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::irem_hd_w), NULL, NULL, NULL },
- { JALECO_SS88006, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ss88006_w), NULL, NULL, ss88006_irq },
- { JALECO_JF11, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf11_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { JALECO_JF13, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf13_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { JALECO_JF16, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf16_w), NULL, NULL, NULL },
- { JALECO_JF17, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf17_w), NULL, NULL, NULL },
- { JALECO_JF19, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf19_w), NULL, NULL, NULL },
- { KONAMI_VRC1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc1_w), NULL, NULL, NULL },
- { KONAMI_VRC2, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc2_w), NULL, NULL, NULL },
- { KONAMI_VRC3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc3_w), NULL, NULL, konami_irq },
- { KONAMI_VRC4, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc4_w), NULL, NULL, konami_irq },
- { KONAMI_VRC6, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc6_w), NULL, NULL, konami_irq },
- { KONAMI_VRC7, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc7_w), NULL, NULL, konami_irq },
- { NAMCOT_163, NES_READWRITE(nes_carts_state::namcot163_l_w, nes_carts_state::namcot163_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::namcot163_w), NULL, NULL, namcot_irq },
- { SUNSOFT_1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sunsoft1_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { SUNSOFT_2, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sunsoft2_w), NULL, NULL, NULL },
- { SUNSOFT_3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sunsoft3_w), NULL, NULL, sunsoft3_irq },
- { TAITO_TC0190FMC, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tc0190fmc_w), NULL, NULL, NULL },
- { TAITO_TC0190FMCP, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tc0190fmc_p16_w), NULL, NULL, mmc3_irq },
- { TAITO_X1_005, NES_NOACCESS, NES_READWRITE(nes_carts_state::x1005_m_w, nes_carts_state::x1005_m_r), NES_NOACCESS, NULL, NULL, NULL },
- { TAITO_X1_005_A, NES_NOACCESS, NES_READWRITE(nes_carts_state::x1005a_m_w, nes_carts_state::x1005_m_r), NES_NOACCESS, NULL, NULL, NULL },
- { TAITO_X1_017, NES_NOACCESS, NES_READWRITE(nes_carts_state::x1017_m_w, nes_carts_state::x1017_m_r), NES_NOACCESS, NULL, NULL, NULL },
+ { DIS_74X139X74, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dis_74x139x74_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { DIS_74X377, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dis_74x377_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { DIS_74X161X161X32, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dis_74x161x161x32_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { DIS_74X161X138, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::dis_74x161x138_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BANDAI_LZ93, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lz93d50_m_w), NES_WRITEONLY(nes_carts_state::lz93d50_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::bandai_lz_irq) },
+ { BANDAI_LZ93EX, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lz93d50_m_w), NES_WRITEONLY(nes_carts_state::lz93d50_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::bandai_lz_irq) },
+ { BANDAI_FCG, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lz93d50_m_w), NES_WRITEONLY(nes_carts_state::lz93d50_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::bandai_lz_irq) },
+ { BANDAI_DATACH, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lz93d50_m_w), NES_WRITEONLY(nes_carts_state::lz93d50_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::bandai_lz_irq) },
+ { BANDAI_JUMP2, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::fjump2_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::bandai_lz_irq) },
+ { BANDAI_KARAOKE, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bandai_ks_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BANDAI_OEKAKIDS, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bandai_ok_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { IREM_G101, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::g101_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { IREM_LROG017, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::lrog017_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { IREM_H3001, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::h3001_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::h3001_irq) },
+ { IREM_TAM_S1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tam_s1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { IREM_HOLYDIV, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::irem_hd_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { JALECO_SS88006, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ss88006_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::ss88006_irq) },
+ { JALECO_JF11, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf11_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { JALECO_JF13, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf13_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { JALECO_JF16, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf16_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { JALECO_JF17, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf17_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { JALECO_JF19, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::jf19_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { KONAMI_VRC1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { KONAMI_VRC2, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc2_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { KONAMI_VRC3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc3_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::konami_irq) },
+ { KONAMI_VRC4, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc4_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::konami_irq) },
+ { KONAMI_VRC6, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc6_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::konami_irq) },
+ { KONAMI_VRC7, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::konami_vrc7_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::konami_irq) },
+ { NAMCOT_163, NES_READWRITE(nes_carts_state::namcot163_l_w, nes_carts_state::namcot163_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::namcot163_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::namcot_irq) },
+ { SUNSOFT_1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sunsoft1_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SUNSOFT_2, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sunsoft2_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SUNSOFT_3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sunsoft3_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::sunsoft3_irq) },
+ { TAITO_TC0190FMC, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tc0190fmc_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { TAITO_TC0190FMCP, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tc0190fmc_p16_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { TAITO_X1_005, NES_NOACCESS, NES_READWRITE(nes_carts_state::x1005_m_w, nes_carts_state::x1005_m_r), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { TAITO_X1_005_A, NES_NOACCESS, NES_READWRITE(nes_carts_state::x1005a_m_w, nes_carts_state::x1005_m_r), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { TAITO_X1_017, NES_NOACCESS, NES_READWRITE(nes_carts_state::x1017_m_w, nes_carts_state::x1017_m_r), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
//
- { AGCI_50282, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::agci_50282_w), NULL, NULL, NULL },
- { ACTENT_ACT52, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ae_act52_w), NULL, NULL, NULL },
- { AVE_NINA01, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::nina01_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { AVE_NINA06, NES_WRITEONLY(nes_carts_state::nina06_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { CNE_DECATHLON, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cne_decathl_w), NULL, NULL, NULL },
- { CNE_FSB, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cne_fsb_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { CNE_SHLZ, NES_WRITEONLY(nes_carts_state::cne_shlz_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { CALTRON_6IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::caltron6in1_m_w), NES_WRITEONLY(nes_carts_state::caltron6in1_w), NULL, NULL, NULL },
- { CAMERICA_BF9093, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bf9093_w), NULL, NULL, NULL },
- { CAMERICA_BF9097, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bf9093_w), NULL, NULL, NULL },
- { CAMERICA_BF9096, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bf9096_w), NES_WRITEONLY(nes_carts_state::bf9096_w), NULL, NULL, NULL },
- { CAMERICA_GOLDENFIVE, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::golden5_w), NULL, NULL, NULL },
- { CONY_BOARD, NES_READWRITE(nes_carts_state::cony_l_w, nes_carts_state::cony_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cony_w), NULL, NULL, sunsoft3_irq },
- { YOKO_BOARD, NES_READWRITE(nes_carts_state::yoko_l_w, nes_carts_state::yoko_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::yoko_w), NULL, NULL, sunsoft3_irq },
- { DREAMTECH_BOARD, NES_WRITEONLY(nes_carts_state::dreamtech_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { FUTUREMEDIA_BOARD, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::futuremedia_w), NULL, NULL, futuremedia_irq },
- { FUKUTAKE_BOARD, NES_READWRITE(nes_carts_state::fukutake_l_w, nes_carts_state::fukutake_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { GOUDER_37017, NES_READWRITE(nes_carts_state::gouder_sf4_l_w, nes_carts_state::gouder_sf4_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { HENGEDIANZI_BOARD, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::henggedianzi_w), NULL, NULL, NULL },
- { HENGEDIANZI_XJZB, NES_WRITEONLY(nes_carts_state::heng_xjzb_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::heng_xjzb_w), NULL, NULL, NULL },
- { HES6IN1_BOARD, NES_WRITEONLY(nes_carts_state::hes6in1_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { HES_BOARD, NES_WRITEONLY(nes_carts_state::hes_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { HOSENKAN_BOARD, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::hosenkan_w), NULL, NULL, mmc3_irq },
- { KAISER_KS7058, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ks7058_w), NULL, NULL, NULL },
- { KAISER_KS7022, NES_NOACCESS, NES_NOACCESS, NES_READWRITE(nes_carts_state::ks7022_w, nes_carts_state::ks7022_r), NULL, NULL, NULL },
- { KAISER_KS7032, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ks7032_w), NULL, NULL, ks7032_irq },
- { KAISER_KS202, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ks202_w), NULL, NULL, ks7032_irq },
- { KAISER_KS7017, NES_WRITEONLY(nes_carts_state::ks7017_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, mmc_fds_irq },
- { KAY_PANDAPRINCE, NES_READWRITE(nes_carts_state::kay_pp_l_w, nes_carts_state::kay_pp_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::kay_pp_w), NULL, NULL, mmc3_irq },
- { KASING_BOARD, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::kasing_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { SACHEN_74LS374, NES_READWRITE(nes_carts_state::sachen_74x374_l_w, nes_carts_state::sachen_74x374_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { SACHEN_74LS374_A, NES_WRITEONLY(nes_carts_state::sachen_74x374a_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { SACHEN_8259A, NES_WRITEONLY(nes_carts_state::s8259_l_w), NES_WRITEONLY(nes_carts_state::s8259_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { SACHEN_8259B, NES_WRITEONLY(nes_carts_state::s8259_l_w), NES_WRITEONLY(nes_carts_state::s8259_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { SACHEN_8259C, NES_WRITEONLY(nes_carts_state::s8259_l_w), NES_WRITEONLY(nes_carts_state::s8259_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { SACHEN_8259D, NES_WRITEONLY(nes_carts_state::s8259_l_w), NES_WRITEONLY(nes_carts_state::s8259_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { SACHEN_SA009, NES_WRITEONLY(nes_carts_state::sa009_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { SACHEN_SA0036, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sa0036_w), NULL, NULL, NULL },
- { SACHEN_SA0037, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sa0037_w), NULL, NULL, NULL },
- { SACHEN_SA72007, NES_WRITEONLY(nes_carts_state::sa72007_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { SACHEN_SA72008, NES_WRITEONLY(nes_carts_state::sa72008_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { SACHEN_TCA01, NES_READONLY(nes_carts_state::tca01_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { SACHEN_TCU01, NES_WRITEONLY(nes_carts_state::tcu01_l_w), NES_WRITEONLY(nes_carts_state::tcu01_m_w), NES_WRITEONLY(nes_carts_state::tcu01_w), NULL, NULL, NULL },
- { SACHEN_TCU02, NES_READWRITE(nes_carts_state::tcu02_l_w, nes_carts_state::tcu02_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { SUBOR_TYPE0, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::subor0_w), NULL, NULL, NULL },
- { SUBOR_TYPE1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::subor1_w), NULL, NULL, NULL },
- { MAGICSERIES_MD, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::magics_md_w), NULL, NULL, NULL },
- { NANJING_BOARD, NES_READWRITE(nes_carts_state::nanjing_l_w, nes_carts_state::nanjing_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NULL, nanjing_irq },
- { NITRA_TDA, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::nitra_w), NULL, NULL, mmc3_irq },
- { NTDEC_ASDER, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ntdec_asder_w), NULL, NULL, NULL },
- { NTDEC_FIGHTINGHERO, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ntdec_fh_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { OPENCORP_DAOU306, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::daou306_w), NULL, NULL, NULL },
- { RCM_GS2015, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::gs2015_w), NULL, NULL, NULL },
- { RCM_TETRISFAMILY, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::rcm_tf_w), NULL, NULL, NULL },
- { REXSOFT_DBZ5, NES_READWRITE(nes_carts_state::rex_dbz_l_w, nes_carts_state::rex_dbz_l_r), NES_READONLY(nes_carts_state::rex_dbz_l_r), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { REXSOFT_SL1632, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::rex_sl1632_w), NULL, NULL, mmc3_irq },
- { RUMBLESTATION_BOARD, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::rumblestation_m_w), NES_WRITEONLY(nes_carts_state::rumblestation_w), NULL, NULL, NULL },
- { SOMERI_SL12, NES_WRITEONLY(nes_carts_state::someri_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::someri_w), NULL, NULL, mmc3_irq },
- { SUPERGAME_BOOGERMAN, NES_WRITEONLY(nes_carts_state::sgame_boog_l_w), NES_WRITEONLY(nes_carts_state::sgame_boog_m_w), NES_WRITEONLY(nes_carts_state::sgame_boog_w), NULL, NULL, mmc3_irq },
- { SUPERGAME_LIONKING, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sgame_lion_m_w), NES_WRITEONLY(nes_carts_state::sgame_lion_w), NULL, NULL, mmc3_irq },
- { TENGEN_800008, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tengen_800008_w), NULL, NULL, NULL },
- { TENGEN_800032, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tengen_800032_w), NULL, NULL, tengen_800032_irq },
- { TENGEN_800037, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tengen_800037_w), NULL, NULL, tengen_800032_irq },
- { TXC_22211A, NES_READWRITE(nes_carts_state::txc_22211_l_w, nes_carts_state::txc_22211_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_22211_w), NULL, NULL, NULL },
- { TXC_22211B, NES_READWRITE(nes_carts_state::txc_22211_l_w, nes_carts_state::txc_22211_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_22211b_w), NULL, NULL, NULL },
- { TXC_22211C, NES_READWRITE(nes_carts_state::txc_22211_l_w, nes_carts_state::txc_22211c_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_22211_w), NULL, NULL, NULL },
- { TXC_TW, NES_WRITEONLY(nes_carts_state::txc_tw_l_w), NES_WRITEONLY(nes_carts_state::txc_tw_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { TXC_STRIKEWOLF, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_strikewolf_w), NULL, NULL, NULL },
- { TXC_MXMDHTWO, NES_READONLY(nes_carts_state::txc_mxmdhtwo_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_mxmdhtwo_w), NULL, NULL, NULL },
- { WAIXING_TYPE_A, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w), NULL, NULL, mmc3_irq },
- { WAIXING_TYPE_A_1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w), NULL, NULL, mmc3_irq },
- { WAIXING_TYPE_B, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w), NULL, NULL, mmc3_irq },
- { WAIXING_TYPE_C, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w), NULL, NULL, mmc3_irq },
- { WAIXING_TYPE_D, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w), NULL, NULL, mmc3_irq },
- { WAIXING_TYPE_E, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w), NULL, NULL, mmc3_irq },
- { WAIXING_TYPE_F, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_f_w), NULL, NULL, mmc3_irq },
- { WAIXING_TYPE_G, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_g_w), NULL, NULL, mmc3_irq },
- { WAIXING_TYPE_H, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_h_w), NULL, NULL, mmc3_irq },
- { WAIXING_TYPE_I, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq }, // this is MMC3 + possibly additional WRAM added in 0x5000-0x5fff
- { WAIXING_TYPE_J, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq }, // this is MMC3 + possibly additional WRAM added in 0x5000-0x5fff
- { WAIXING_SGZ, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_sgz_w), NULL, NULL, konami_irq },
- { WAIXING_SGZLZ, NES_WRITEONLY(nes_carts_state::waixing_sgzlz_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { WAIXING_FFV, NES_WRITEONLY(nes_carts_state::waixing_ffv_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { WAIXING_ZS, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_zs_w), NULL, NULL, NULL },
- { WAIXING_DQ8, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_dq8_w), NULL, NULL, NULL },
- { WAIXING_SECURITY, NES_WRITEONLY(nes_carts_state::waixing_sec_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { WAIXING_SH2, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq }, // this is MMC3 + possibly additional WRAM added in 0x5000-0x5fff
- { WAIXING_PS2, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_ps2_w), NULL, NULL, NULL },
- { UNL_8237, NES_WRITEONLY(nes_carts_state::unl_8237_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_8237_w), NULL, NULL, mmc3_irq },
- { UNL_AX5705, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_ax5705_w), NULL, NULL, NULL },
- { UNL_CC21, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_cc21_w), NULL, NULL, NULL },
- { UNL_KOF97, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_kof97_w), NULL, NULL, mmc3_irq },
- { UNL_KS7057, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ks7057_w), NULL, NULL, mmc3_irq },
- { UNL_T230, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_t230_w), NULL, NULL, konami_irq },
- { UNL_KOF96, NES_READWRITE(nes_carts_state::kof96_l_w, nes_carts_state::kof96_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::kof96_w), NULL, NULL, mmc3_irq },
- { UNL_MK2, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::mk2_m_w), NES_NOACCESS, NULL, NULL, mmc3_irq },
- { UNL_N625092, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::n625092_w), NULL, NULL, NULL },
- { UNL_SC127, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sc127_w), NULL, NULL, sc127_irq },
- { UNL_SMB2J, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::smb2j_w), NULL, NULL, NULL },
- { UNL_SUPERFIGHTER3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_sf3_w), NULL, NULL, mmc3_irq },
- { UNL_XZY, NES_WRITEONLY(nes_carts_state::unl_xzy_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { UNL_RACERMATE, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_racmate_w), NULL, NULL, NULL },
- { UNL_STUDYNGAME, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sng32_w), NULL, NULL, NULL },
- { UNL_603_5052, NES_READWRITE(nes_carts_state::unl_6035052_extra_w, nes_carts_state::unl_6035052_extra_r), NES_READWRITE(nes_carts_state::unl_6035052_extra_w, nes_carts_state::unl_6035052_extra_r), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { UNL_EDU2K, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::edu2k_w), NULL, NULL, NULL },
- { UNL_SHJY3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::shjy3_w), NULL, NULL, shjy3_irq },
- { UNL_H2288, NES_READWRITE(nes_carts_state::h2288_l_w, nes_carts_state::h2288_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::h2288_w), NULL, NULL, mmc3_irq },
- { UNL_FS304, NES_WRITEONLY(nes_carts_state::unl_fs304_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
+ { AGCI_50282, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::agci_50282_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { ACTENT_ACT52, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ae_act52_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { AVE_NINA01, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::nina01_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { AVE_NINA06, NES_WRITEONLY(nes_carts_state::nina06_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { CNE_DECATHLON, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cne_decathl_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { CNE_FSB, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cne_fsb_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { CNE_SHLZ, NES_WRITEONLY(nes_carts_state::cne_shlz_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { CALTRON_6IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::caltron6in1_m_w), NES_WRITEONLY(nes_carts_state::caltron6in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { CAMERICA_BF9093, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bf9093_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { CAMERICA_BF9097, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bf9093_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { CAMERICA_BF9096, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bf9096_w), NES_WRITEONLY(nes_carts_state::bf9096_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { CAMERICA_GOLDENFIVE, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::golden5_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { CONY_BOARD, NES_READWRITE(nes_carts_state::cony_l_w, nes_carts_state::cony_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::cony_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::sunsoft3_irq) },
+ { YOKO_BOARD, NES_READWRITE(nes_carts_state::yoko_l_w, nes_carts_state::yoko_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::yoko_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::sunsoft3_irq) },
+ { DREAMTECH_BOARD, NES_WRITEONLY(nes_carts_state::dreamtech_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { FUTUREMEDIA_BOARD, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::futuremedia_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::futuremedia_irq) },
+ { FUKUTAKE_BOARD, NES_READWRITE(nes_carts_state::fukutake_l_w, nes_carts_state::fukutake_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { GOUDER_37017, NES_READWRITE(nes_carts_state::gouder_sf4_l_w, nes_carts_state::gouder_sf4_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { HENGEDIANZI_BOARD, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::henggedianzi_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { HENGEDIANZI_XJZB, NES_WRITEONLY(nes_carts_state::heng_xjzb_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::heng_xjzb_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { HES6IN1_BOARD, NES_WRITEONLY(nes_carts_state::hes6in1_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { HES_BOARD, NES_WRITEONLY(nes_carts_state::hes_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { HOSENKAN_BOARD, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::hosenkan_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { KAISER_KS7058, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ks7058_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { KAISER_KS7022, NES_NOACCESS, NES_NOACCESS, NES_READWRITE(nes_carts_state::ks7022_w, nes_carts_state::ks7022_r), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { KAISER_KS7032, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ks7032_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::ks7032_irq) },
+ { KAISER_KS202, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ks202_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::ks7032_irq) },
+ { KAISER_KS7017, NES_WRITEONLY(nes_carts_state::ks7017_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc_fds_irq) },
+ { KAY_PANDAPRINCE, NES_READWRITE(nes_carts_state::kay_pp_l_w, nes_carts_state::kay_pp_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::kay_pp_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { KASING_BOARD, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::kasing_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { SACHEN_74LS374, NES_READWRITE(nes_carts_state::sachen_74x374_l_w, nes_carts_state::sachen_74x374_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_74LS374_A, NES_WRITEONLY(nes_carts_state::sachen_74x374a_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_8259A, NES_WRITEONLY(nes_carts_state::s8259_l_w), NES_WRITEONLY(nes_carts_state::s8259_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_8259B, NES_WRITEONLY(nes_carts_state::s8259_l_w), NES_WRITEONLY(nes_carts_state::s8259_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_8259C, NES_WRITEONLY(nes_carts_state::s8259_l_w), NES_WRITEONLY(nes_carts_state::s8259_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_8259D, NES_WRITEONLY(nes_carts_state::s8259_l_w), NES_WRITEONLY(nes_carts_state::s8259_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_SA009, NES_WRITEONLY(nes_carts_state::sa009_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_SA0036, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sa0036_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_SA0037, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sa0037_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_SA72007, NES_WRITEONLY(nes_carts_state::sa72007_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_SA72008, NES_WRITEONLY(nes_carts_state::sa72008_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_TCA01, NES_READONLY(nes_carts_state::tca01_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_TCU01, NES_WRITEONLY(nes_carts_state::tcu01_l_w), NES_WRITEONLY(nes_carts_state::tcu01_m_w), NES_WRITEONLY(nes_carts_state::tcu01_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SACHEN_TCU02, NES_READWRITE(nes_carts_state::tcu02_l_w, nes_carts_state::tcu02_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SUBOR_TYPE0, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::subor0_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SUBOR_TYPE1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::subor1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { MAGICSERIES_MD, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::magics_md_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { NANJING_BOARD, NES_READWRITE(nes_carts_state::nanjing_l_w, nes_carts_state::nanjing_l_r), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::nanjing_irq) },
+ { NITRA_TDA, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::nitra_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { NTDEC_ASDER, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ntdec_asder_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { NTDEC_FIGHTINGHERO, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ntdec_fh_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { OPENCORP_DAOU306, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::daou306_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { RCM_GS2015, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::gs2015_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { RCM_TETRISFAMILY, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::rcm_tf_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { REXSOFT_DBZ5, NES_READWRITE(nes_carts_state::rex_dbz_l_w, nes_carts_state::rex_dbz_l_r), NES_READONLY(nes_carts_state::rex_dbz_l_r), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { REXSOFT_SL1632, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::rex_sl1632_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { RUMBLESTATION_BOARD, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::rumblestation_m_w), NES_WRITEONLY(nes_carts_state::rumblestation_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { SOMERI_SL12, NES_WRITEONLY(nes_carts_state::someri_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::someri_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { SUPERGAME_BOOGERMAN, NES_WRITEONLY(nes_carts_state::sgame_boog_l_w), NES_WRITEONLY(nes_carts_state::sgame_boog_m_w), NES_WRITEONLY(nes_carts_state::sgame_boog_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { SUPERGAME_LIONKING, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sgame_lion_m_w), NES_WRITEONLY(nes_carts_state::sgame_lion_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { TENGEN_800008, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tengen_800008_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { TENGEN_800032, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tengen_800032_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::tengen_800032_irq) },
+ { TENGEN_800037, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::tengen_800037_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::tengen_800032_irq) },
+ { TXC_22211A, NES_READWRITE(nes_carts_state::txc_22211_l_w, nes_carts_state::txc_22211_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_22211_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { TXC_22211B, NES_READWRITE(nes_carts_state::txc_22211_l_w, nes_carts_state::txc_22211_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_22211b_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { TXC_22211C, NES_READWRITE(nes_carts_state::txc_22211_l_w, nes_carts_state::txc_22211c_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_22211_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { TXC_TW, NES_WRITEONLY(nes_carts_state::txc_tw_l_w), NES_WRITEONLY(nes_carts_state::txc_tw_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { TXC_STRIKEWOLF, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_strikewolf_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { TXC_MXMDHTWO, NES_READONLY(nes_carts_state::txc_mxmdhtwo_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txc_mxmdhtwo_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { WAIXING_TYPE_A, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { WAIXING_TYPE_A_1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { WAIXING_TYPE_B, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { WAIXING_TYPE_C, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { WAIXING_TYPE_D, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { WAIXING_TYPE_E, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_a_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { WAIXING_TYPE_F, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_f_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { WAIXING_TYPE_G, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_g_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { WAIXING_TYPE_H, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_h_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { WAIXING_TYPE_I, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) }, // this is MMC3 + possibly additional WRAM added in 0x5000-0x5fff
+ { WAIXING_TYPE_J, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) }, // this is MMC3 + possibly additional WRAM added in 0x5000-0x5fff
+ { WAIXING_SGZ, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_sgz_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::konami_irq) },
+ { WAIXING_SGZLZ, NES_WRITEONLY(nes_carts_state::waixing_sgzlz_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { WAIXING_FFV, NES_WRITEONLY(nes_carts_state::waixing_ffv_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { WAIXING_ZS, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_zs_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { WAIXING_DQ8, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_dq8_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { WAIXING_SECURITY, NES_WRITEONLY(nes_carts_state::waixing_sec_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { WAIXING_SH2, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) }, // this is MMC3 + possibly additional WRAM added in 0x5000-0x5fff
+ { WAIXING_PS2, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::waixing_ps2_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { UNL_8237, NES_WRITEONLY(nes_carts_state::unl_8237_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_8237_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { UNL_AX5705, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_ax5705_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { UNL_CC21, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_cc21_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { UNL_KOF97, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_kof97_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { UNL_KS7057, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::ks7057_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { UNL_T230, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_t230_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::konami_irq) },
+ { UNL_KOF96, NES_READWRITE(nes_carts_state::kof96_l_w, nes_carts_state::kof96_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::kof96_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { UNL_MK2, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::mk2_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { UNL_N625092, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::n625092_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { UNL_SC127, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sc127_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::sc127_irq) },
+ { UNL_SMB2J, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::smb2j_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { UNL_SUPERFIGHTER3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_sf3_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { UNL_XZY, NES_WRITEONLY(nes_carts_state::unl_xzy_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { UNL_RACERMATE, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::unl_racmate_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { UNL_STUDYNGAME, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::sng32_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { UNL_603_5052, NES_READWRITE(nes_carts_state::unl_6035052_extra_w, nes_carts_state::unl_6035052_extra_r), NES_READWRITE(nes_carts_state::unl_6035052_extra_w, nes_carts_state::unl_6035052_extra_r), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { UNL_EDU2K, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::edu2k_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { UNL_SHJY3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::shjy3_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::shjy3_irq) },
+ { UNL_H2288, NES_READWRITE(nes_carts_state::h2288_l_w, nes_carts_state::h2288_l_r), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::h2288_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { UNL_FS304, NES_WRITEONLY(nes_carts_state::unl_fs304_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
//
- { BTL_AISENSHINICOL, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_mariobaby_w), NULL, NULL, NULL },
- { BTL_DRAGONNINJA, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_dn_w), NULL, NULL, btl_dn_irq },
- { BTL_MARIOBABY, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_mariobaby_w), NULL, NULL, NULL },
- { BTL_SMB2A, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_smb2a_w), NULL, NULL, btl_smb2a_irq },
- { BTL_SMB2B, NES_WRITEONLY(nes_carts_state::smb2jb_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, smb2jb_irq },
- { BTL_SMB3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_smb3_w), NULL, NULL, btl_smb3_irq },
- { BTL_SUPERBROS11, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_smb11_w), NULL, NULL, mmc3_irq },
- { BTL_TOBIDASE, NES_WRITEONLY(nes_carts_state::btl_tobi_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
- { BTL_PIKACHUY2K, NES_NOACCESS, NES_READWRITE(nes_carts_state::btl_pika_y2k_m_w, nes_carts_state::btl_pika_y2k_m_r), NES_WRITEONLY(nes_carts_state::btl_pika_y2k_w), NULL, NULL, mmc3_irq },
- { WHIRLWIND_2706, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::whirl2706_w), NULL, NULL, NULL },
+ { BTL_AISENSHINICOL, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_mariobaby_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BTL_DRAGONNINJA, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_dn_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::btl_dn_irq) },
+ { BTL_MARIOBABY, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_mariobaby_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BTL_SMB2A, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_smb2a_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::btl_smb2a_irq) },
+ { BTL_SMB2B, NES_WRITEONLY(nes_carts_state::smb2jb_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::smb2jb_irq) },
+ { BTL_SMB3, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_smb3_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::btl_smb3_irq) },
+ { BTL_SUPERBROS11, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::btl_smb11_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { BTL_TOBIDASE, NES_WRITEONLY(nes_carts_state::btl_tobi_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BTL_PIKACHUY2K, NES_NOACCESS, NES_READWRITE(nes_carts_state::btl_pika_y2k_m_w, nes_carts_state::btl_pika_y2k_m_r), NES_WRITEONLY(nes_carts_state::btl_pika_y2k_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { WHIRLWIND_2706, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::whirl2706_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
//
- { BMC_190IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_190in1_w), NULL, NULL, NULL },
- { BMC_A65AS, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_a65as_w), NULL, NULL, NULL },
- { BMC_GS2004, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gs2004_w), NULL, NULL, NULL },
- { BMC_GS2013, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gs2013_w), NULL, NULL, NULL },
- { BMC_NOVELDIAMOND, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::novel1_w), NULL, NULL, NULL },
- { BMC_9999999IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::novel2_w), NULL, NULL, NULL },
- { BMC_T262, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_t262_w), NULL, NULL, NULL },
- { BMC_WS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_ws_m_w), NES_NOACCESS, NULL, NULL, NULL },
- { BMC_GKA, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gka_w), NULL, NULL, NULL },
- { BMC_GKB, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gkb_w), NULL, NULL, NULL },
- { BMC_SUPER_700IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_super700in1_w), NULL, NULL, NULL },
- { BMC_36IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_36in1_w), NULL, NULL, NULL },
- { BMC_21IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_21in1_w), NULL, NULL, NULL },
- { BMC_150IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_150in1_w), NULL, NULL, NULL },
- { BMC_35IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_35in1_w), NULL, NULL, NULL },
- { BMC_64IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_64in1_w), NULL, NULL, NULL },
- { BMC_SUPERHIK_300IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_hik300_w), NULL, NULL, NULL },
- { BMC_SUPERGUN_20IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::supergun20in1_w), NULL, NULL, NULL },
- { BMC_72IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_72in1_w), NULL, NULL, NULL },
- { BMC_76IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_76in1_w), NULL, NULL, NULL },
- { BMC_SUPER_42IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_76in1_w), NULL, NULL, NULL },
- { BMC_1200IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_1200in1_w), NULL, NULL, NULL },
- { BMC_31IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_31in1_w), NULL, NULL, NULL },
- { BMC_22GAMES, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_22g_w), NULL, NULL, NULL },
- { BMC_20IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_20in1_w), NULL, NULL, NULL },
- { BMC_110IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_110in1_w), NULL, NULL, NULL },
- { BMC_64IN1NR, NES_WRITEONLY(nes_carts_state::bmc_64in1nr_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_64in1nr_w), NULL, NULL, NULL },
- { BMC_S24IN1SC03, NES_WRITEONLY(nes_carts_state::bmc_s24in1sc03_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { BMC_HIK8IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_hik8_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { BMC_SUPERHIK_4IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_hik4in1_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { BMC_SUPERBIG_7IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_sbig7_w), NULL, NULL, mmc3_irq },
- { BMC_MARIOPARTY_7IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_mario7in1_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { BMC_GOLD_7IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gold7in1_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { BMC_FAMILY_4646B, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_family4646_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { BMC_15IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_15in1_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
- { BMC_BALLGAMES_11IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_ball11_m_w), NES_WRITEONLY(nes_carts_state::bmc_ball11_w), NULL, NULL, NULL },
- { BMC_GOLDENCARD_6IN1, NES_WRITEONLY(nes_carts_state::bmc_gc6in1_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gc6in1_w), NULL, NULL, mmc3_irq },
- { BMC_VT5201, NES_NOACCESS, NES_NOACCESS, NES_READWRITE(nes_carts_state::bmc_vt5201_w, nes_carts_state::bmc_vt5201_r), NULL, NULL, NULL },
- { BMC_BENSHENG_BS5, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_bs5_w), NULL, NULL, NULL },
- { BMC_810544, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_810544_w), NULL, NULL, NULL },
- { BMC_NTD_03, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_ntd03_w), NULL, NULL, NULL },
- { BMC_G63IN1, NES_NOACCESS, NES_NOACCESS, NES_READWRITE(nes_carts_state::bmc_gb63_w, nes_carts_state::bmc_gb63_r), NULL, NULL, NULL },
- { BMC_FK23C, NES_WRITEONLY(nes_carts_state::fk23c_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::fk23c_w), NULL, NULL, mmc3_irq },
- { BMC_FK23CA, NES_WRITEONLY(nes_carts_state::fk23c_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::fk23c_w), NULL, NULL, mmc3_irq },
- { BMC_PJOY84, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::pjoy84_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NULL, mmc3_irq },
+ { BMC_190IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_190in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_A65AS, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_a65as_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_GS2004, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gs2004_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_GS2013, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gs2013_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_NOVELDIAMOND, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::novel1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_9999999IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::novel2_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_T262, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_t262_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_WS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_ws_m_w), NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_GKA, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gka_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_GKB, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gkb_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_SUPER_700IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_super700in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_36IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_36in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_21IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_21in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_150IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_150in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_35IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_35in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_64IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_64in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_SUPERHIK_300IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_hik300_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_SUPERGUN_20IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::supergun20in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_72IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_72in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_76IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_76in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_SUPER_42IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_76in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_1200IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_1200in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_31IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_31in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_22GAMES, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_22g_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_20IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_20in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_110IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_110in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_64IN1NR, NES_WRITEONLY(nes_carts_state::bmc_64in1nr_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_64in1nr_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_S24IN1SC03, NES_WRITEONLY(nes_carts_state::bmc_s24in1sc03_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { BMC_HIK8IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_hik8_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { BMC_SUPERHIK_4IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_hik4in1_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { BMC_SUPERBIG_7IN1, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_sbig7_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { BMC_MARIOPARTY_7IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_mario7in1_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { BMC_GOLD_7IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gold7in1_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { BMC_FAMILY_4646B, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_family4646_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { BMC_15IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_15in1_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { BMC_BALLGAMES_11IN1, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_ball11_m_w), NES_WRITEONLY(nes_carts_state::bmc_ball11_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_GOLDENCARD_6IN1, NES_WRITEONLY(nes_carts_state::bmc_gc6in1_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_gc6in1_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { BMC_VT5201, NES_NOACCESS, NES_NOACCESS, NES_READWRITE(nes_carts_state::bmc_vt5201_w, nes_carts_state::bmc_vt5201_r), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_BENSHENG_BS5, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_bs5_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_810544, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_810544_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_NTD_03, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::bmc_ntd03_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_G63IN1, NES_NOACCESS, NES_NOACCESS, NES_READWRITE(nes_carts_state::bmc_gb63_w, nes_carts_state::bmc_gb63_r), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { BMC_FK23C, NES_WRITEONLY(nes_carts_state::fk23c_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::fk23c_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { BMC_FK23CA, NES_WRITEONLY(nes_carts_state::fk23c_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::fk23c_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
+ { BMC_PJOY84, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::pjoy84_m_w), NES_WRITEONLY(nes_carts_state::txrom_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::mmc3_irq) },
//
- { FFE_MAPPER6, NES_WRITEONLY(nes_carts_state::mapper6_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::mapper6_w), NULL, NULL, ffe_irq },
- { FFE_MAPPER8, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::mapper8_w), NULL, NULL, NULL },
- { FFE_MAPPER17, NES_WRITEONLY(nes_carts_state::mapper17_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NULL, ffe_irq },
+ { FFE_MAPPER6, NES_WRITEONLY(nes_carts_state::mapper6_l_w), NES_NOACCESS, NES_WRITEONLY(nes_carts_state::mapper6_w), NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::ffe_irq) },
+ { FFE_MAPPER8, NES_NOACCESS, NES_NOACCESS, NES_WRITEONLY(nes_carts_state::mapper8_w), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
+ { FFE_MAPPER17, NES_WRITEONLY(nes_carts_state::mapper17_l_w), NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK(nes_state::ffe_irq) },
// for debug and development
- { UNKNOWN_BOARD, NES_READWRITE(nes_carts_state::dummy_l_w, nes_carts_state::dummy_l_r), NES_READWRITE(nes_carts_state::dummy_m_w, nes_carts_state::dummy_m_r), NES_READWRITE(nes_carts_state::dummy_w, nes_carts_state::dummy_r), NULL, NULL, NULL },
+ { UNKNOWN_BOARD, NES_READWRITE(nes_carts_state::dummy_l_w, nes_carts_state::dummy_l_r), NES_READWRITE(nes_carts_state::dummy_m_w, nes_carts_state::dummy_m_r), NES_READWRITE(nes_carts_state::dummy_w, nes_carts_state::dummy_r), NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
//
- { UNSUPPORTED_BOARD, NES_NOACCESS, NES_NOACCESS, NES_NOACCESS, NULL, NULL, NULL },
+ { UNSUPPORTED_BOARD, NES_NOACCESS, NES_NOACCESS, NES_NOACCESS, NULL, NES_SCANLINE_NULL, NES_HBLANK_NULL },
//
};
@@ -13122,8 +13099,8 @@ int nes_state::nes_pcb_reset()
fatalerror("Missing PCB interface\n");
/* Set the mapper irq callback */
- m_ppu->set_scanline_callback(intf ? intf->mmc_scanline : NULL);
- m_ppu->set_hblank_callback(intf ? intf->mmc_hblank : NULL);
+ m_ppu->set_scanline_callback(intf ? intf->mmc_scanline : ppu2c0x_scanline_delegate());
+ m_ppu->set_hblank_callback(intf ? intf->mmc_hblank : ppu2c0x_hblank_delegate());
err = pcb_initialize(m_pcb_id);
diff --git a/src/mess/video/nes.c b/src/mess/video/nes.c
index 26f69ffced6..c8f7de30d96 100644
--- a/src/mess/video/nes.c
+++ b/src/mess/video/nes.c
@@ -13,7 +13,7 @@
void nes_state::video_reset()
{
- m_ppu->set_vidaccess_callback(nes_ppu_vidaccess);
+ m_ppu->set_vidaccess_callback(ppu2c0x_vidaccess_delegate(FUNC(nes_state::nes_ppu_vidaccess),this));
}
void nes_state::video_start()