summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine/nes_pcb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/machine/nes_pcb.c')
-rw-r--r--src/mess/machine/nes_pcb.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/mess/machine/nes_pcb.c b/src/mess/machine/nes_pcb.c
index 1b5b6b2dbc0..c63c1093048 100644
--- a/src/mess/machine/nes_pcb.c
+++ b/src/mess/machine/nes_pcb.c
@@ -11731,13 +11731,13 @@ struct nes_pcb_intf
{write8_delegate(), read8_delegate()}
#define NES_READONLY(a) \
-{write8_delegate(), read8_delegate(FUNC(a),(nes_state *)0)}
+{write8_delegate(), read8_delegate(FUNC(a), DEVICE_SELF, (nes_state *)0)}
#define NES_WRITEONLY(a) \
-{write8_delegate(FUNC(a),(nes_state *)0), read8_delegate()}
+{write8_delegate(FUNC(a), DEVICE_SELF, (nes_state *)0), read8_delegate()}
#define NES_READWRITE(a, b) \
-{write8_delegate(FUNC(a),(nes_state *)0), read8_delegate(FUNC(b),(nes_state *)0)}
+{write8_delegate(FUNC(a), DEVICE_SELF, (nes_state *)0), read8_delegate(FUNC(b), DEVICE_SELF, (nes_state *)0)}
#define NES_SCANLINE_NULL \
ppu2c0x_scanline_delegate()
@@ -11746,13 +11746,13 @@ struct nes_pcb_intf
ppu2c0x_hblank_delegate()
#define NES_HBLANK(a) \
- ppu2c0x_hblank_delegate(FUNC(a),(nes_state *)0)
+ ppu2c0x_hblank_delegate(FUNC(a), DEVICE_SELF, (nes_state *)0)
#define NES_LATCH_NULL \
ppu2c0x_latch_delegate()
#define NES_LATCH(a) \
- ppu2c0x_latch_delegate(FUNC(a),(nes_state *)0)
+ ppu2c0x_latch_delegate(FUNC(a),DEVICE_SELF, (nes_state *)0)
WRITE8_MEMBER(nes_carts_state::dummy_l_w)
@@ -12074,7 +12074,9 @@ void nes_state::pcb_handlers_setup()
if (!m_mmc_read_mid.isnull()) m_mmc_read_mid.late_bind(*this);
m_mmc_read = intf->mmc_h.read; // in progress
if (!m_mmc_read.isnull()) m_mmc_read.late_bind(*this);
- m_ppu->set_latch(intf->mmc_ppu_latch);
+ ppu2c0x_latch_delegate latch = intf->mmc_ppu_latch;
+ if (!latch.isnull()) latch.late_bind(*this);
+ m_ppu->set_latch(latch);
}
else
{
@@ -13098,9 +13100,19 @@ 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 : ppu2c0x_scanline_delegate());
- m_ppu->set_hblank_callback(intf ? intf->mmc_hblank : ppu2c0x_hblank_delegate());
-
+ ppu2c0x_scanline_delegate del_scanline;
+ ppu2c0x_hblank_delegate del_hblank;
+ if (intf) {
+ del_scanline = intf->mmc_scanline;
+ del_hblank = intf->mmc_hblank;
+ if (!del_scanline.isnull()) del_scanline.late_bind(*this);
+ if (!del_hblank.isnull()) del_hblank.late_bind(*this);
+ } else {
+ del_scanline = ppu2c0x_scanline_delegate();
+ del_hblank = ppu2c0x_hblank_delegate();
+ }
+ m_ppu->set_scanline_callback(del_scanline);
+ m_ppu->set_hblank_callback(del_hblank);
err = pcb_initialize(m_pcb_id);
return err;