summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/mame/drivers/naomi.cpp2
-rw-r--r--src/mame/machine/naomig1.cpp5
-rw-r--r--src/mame/machine/naomig1.h11
3 files changed, 16 insertions, 2 deletions
diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp
index a58e34f9b49..a1534f0771f 100644
--- a/src/mame/drivers/naomi.cpp
+++ b/src/mame/drivers/naomi.cpp
@@ -3011,6 +3011,7 @@ void naomi_state::naomi(machine_config &config)
naomi_base(config);
naomi_rom_board &rom_board(NAOMI_ROM_BOARD(config, "rom_board", 0, "naomibd_eeprom"));
rom_board.irq_callback().set(FUNC(dc_state::g1_irq));
+ rom_board.ext_irq_callback().set(FUNC(dc_state::external_irq));
}
/*
@@ -3022,6 +3023,7 @@ void naomi_state::naomigd(machine_config &config)
naomi_base(config);
naomi_gdrom_board &rom_board(NAOMI_GDROM_BOARD(config, "rom_board", 0, "naomibd_eeprom", ":gdrom", "pic"));
rom_board.irq_callback().set(FUNC(dc_state::g1_irq));
+ rom_board.ext_irq_callback().set(FUNC(dc_state::external_irq));
}
/*
diff --git a/src/mame/machine/naomig1.cpp b/src/mame/machine/naomig1.cpp
index d869554933d..54786ffd025 100644
--- a/src/mame/machine/naomig1.cpp
+++ b/src/mame/machine/naomig1.cpp
@@ -29,6 +29,8 @@ void naomi_g1_device::amap(address_map &map)
naomi_g1_device::naomi_g1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
, irq_cb(*this)
+ , ext_irq_cb(*this)
+ , reset_out_cb(*this)
{
}
@@ -36,6 +38,8 @@ void naomi_g1_device::device_start()
{
timer = timer_alloc(G1_TIMER_ID);
irq_cb.resolve_safe();
+ ext_irq_cb.resolve_safe();
+ reset_out_cb.resolve_safe();
save_item(NAME(gdstar));
save_item(NAME(gdlen));
@@ -51,6 +55,7 @@ void naomi_g1_device::device_reset()
gddir = 0;
gden = 0;
gdst = 0;
+ set_ext_irq(CLEAR_LINE);
}
void naomi_g1_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
diff --git a/src/mame/machine/naomig1.h b/src/mame/machine/naomig1.h
index 8533b72b66e..96807dce286 100644
--- a/src/mame/machine/naomig1.h
+++ b/src/mame/machine/naomig1.h
@@ -17,10 +17,12 @@ public:
typedef delegate<void (uint32_t main_adr, void *dma_ptr, uint32_t length, uint32_t size, bool to_mainram)> dma_cb;
auto irq_callback() { return irq_cb.bind(); }
+ auto ext_irq_callback() { return ext_irq_cb.bind(); }
+ auto reset_out_callback() { return reset_out_cb.bind(); }
void set_dma_cb(dma_cb cb) { _dma_cb = cb; }
- void amap(address_map &map);
- virtual void submap(address_map &map) = 0;
+ void amap(address_map &map); // for range 0x005f7400-0x005f74ff
+ virtual void submap(address_map &map) = 0; // for range 0x005f7000-0x005f70ff
DECLARE_READ32_MEMBER(sb_gdstar_r); // 5f7404
DECLARE_WRITE32_MEMBER(sb_gdstar_w); // 5f7404
@@ -60,11 +62,16 @@ protected:
virtual void dma_get_position(uint8_t *&base, uint32_t &limit, bool to_maincpu) = 0;
virtual void dma_advance(uint32_t size) = 0;
+ void set_ext_irq(int state) { ext_irq_cb(state); }
+ void set_reset_out() { reset_out_cb(ASSERT_LINE); }
+
private:
uint32_t gdstar, gdlen, gddir, gden, gdst;
emu_timer *timer;
devcb_write8 irq_cb;
+ devcb_write_line ext_irq_cb;
+ devcb_write_line reset_out_cb;
dma_cb _dma_cb;
void dma(void *dma_ptr, uint32_t main_adr, uint32_t size, bool to_mainram);