summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/coco
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/coco')
-rw-r--r--src/devices/bus/coco/coco_dcmodem.cpp9
-rw-r--r--src/devices/bus/coco/coco_fdc.cpp15
-rw-r--r--src/devices/bus/coco/coco_fdc.h1
-rw-r--r--src/devices/bus/coco/coco_gmc.cpp8
-rw-r--r--src/devices/bus/coco/coco_multi.cpp82
-rw-r--r--src/devices/bus/coco/coco_orch90.cpp20
-rw-r--r--src/devices/bus/coco/coco_rs232.cpp9
-rw-r--r--src/devices/bus/coco/coco_ssc.cpp15
-rw-r--r--src/devices/bus/coco/coco_t4426.cpp14
-rw-r--r--src/devices/bus/coco/cococart.cpp40
-rw-r--r--src/devices/bus/coco/cococart.h46
-rw-r--r--src/devices/bus/coco/dragon_jcbsnd.cpp15
-rw-r--r--src/devices/bus/coco/dragon_jcbsnd.h1
13 files changed, 143 insertions, 132 deletions
diff --git a/src/devices/bus/coco/coco_dcmodem.cpp b/src/devices/bus/coco/coco_dcmodem.cpp
index bebd6c275d5..cad760775b7 100644
--- a/src/devices/bus/coco/coco_dcmodem.cpp
+++ b/src/devices/bus/coco/coco_dcmodem.cpp
@@ -58,8 +58,8 @@ namespace
virtual void device_start() override
{
install_readwrite_handler(0xFF6C, 0xFF6F,
- read8sm_delegate(FUNC(mos6551_device::read), (mos6551_device *)m_uart),
- write8sm_delegate(FUNC(mos6551_device::write), (mos6551_device *)m_uart));
+ read8_delegate(FUNC(mos6551_device::read), (mos6551_device *)m_uart),
+ write8_delegate(FUNC(mos6551_device::write), (mos6551_device *)m_uart));
}
virtual const tiny_rom_entry *device_rom_region() const override;
@@ -70,11 +70,6 @@ namespace
return memregion("eprom")->base();
}
- virtual memory_region* get_cart_memregion() override
- {
- return memregion("eprom");
- }
-
private:
// internal state
required_device<mos6551_device> m_uart;
diff --git a/src/devices/bus/coco/coco_fdc.cpp b/src/devices/bus/coco/coco_fdc.cpp
index 79658d27d60..db8df415ee3 100644
--- a/src/devices/bus/coco/coco_fdc.cpp
+++ b/src/devices/bus/coco/coco_fdc.cpp
@@ -180,15 +180,6 @@ uint8_t* coco_family_fdc_device_base::get_cart_base()
return memregion("eprom")->base();
}
-//-------------------------------------------------
-// coco_family_fdc_device_base::get_cart_memregion
-//-------------------------------------------------
-
-memory_region* coco_family_fdc_device_base::get_cart_memregion()
-{
- return memregion("eprom");
-}
-
//***************************************************************************
// COCO FDCs
@@ -343,17 +334,17 @@ READ8_MEMBER(coco_fdc_device_base::scs_read)
case 0x38: /* FF78 */
if (real_time_clock() == rtc_type::CLOUD9)
- m_ds1315->read_0();
+ m_ds1315->read_0(space, offset);
break;
case 0x39: /* FF79 */
if (real_time_clock() == rtc_type::CLOUD9)
- m_ds1315->read_1();
+ m_ds1315->read_1(space, offset);
break;
case 0x3C: /* FF7C */
if (real_time_clock() == rtc_type::CLOUD9)
- result = m_ds1315->read_data();
+ result = m_ds1315->read_data(space, offset);
break;
}
return result;
diff --git a/src/devices/bus/coco/coco_fdc.h b/src/devices/bus/coco/coco_fdc.h
index 2568ed51bd0..a8df8313a7c 100644
--- a/src/devices/bus/coco/coco_fdc.h
+++ b/src/devices/bus/coco/coco_fdc.h
@@ -46,7 +46,6 @@ protected:
// FDC overrides
virtual void update_lines() = 0;
virtual uint8_t* get_cart_base() override;
- virtual memory_region* get_cart_memregion() override;
// accessors
uint8_t dskreg() const { return m_dskreg; }
diff --git a/src/devices/bus/coco/coco_gmc.cpp b/src/devices/bus/coco/coco_gmc.cpp
index 72c9edfdc80..706bdf3cb1b 100644
--- a/src/devices/bus/coco/coco_gmc.cpp
+++ b/src/devices/bus/coco/coco_gmc.cpp
@@ -51,11 +51,11 @@ namespace
};
-void coco_pak_gmc_device::device_add_mconfig(machine_config &config)
-{
+MACHINE_CONFIG_START(coco_pak_gmc_device::device_add_mconfig)
SPEAKER(config, "gmc_speaker").front_center();
- SN76489A(config, m_psg, 4_MHz_XTAL).add_route(ALL_OUTPUTS, "gmc_speaker", 1.0);
-}
+ MCFG_DEVICE_ADD(SN76489AN_TAG, SN76489A, 4_MHz_XTAL)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "gmc_speaker", 1.0)
+MACHINE_CONFIG_END
//**************************************************************************
diff --git a/src/devices/bus/coco/coco_multi.cpp b/src/devices/bus/coco/coco_multi.cpp
index 628a550fe07..60a2b99286c 100644
--- a/src/devices/bus/coco/coco_multi.cpp
+++ b/src/devices/bus/coco/coco_multi.cpp
@@ -96,6 +96,29 @@ namespace
// construction/destruction
coco_multipak_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ virtual uint8_t* get_cart_base() override;
+ virtual uint32_t get_cart_size() override;
+
+ // these are only public so they can be in a MACHINE_CONFIG_START
+ // declaration; don't think about them as publically accessable
+ DECLARE_WRITE_LINE_MEMBER(multi_slot1_cart_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot1_nmi_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot1_halt_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot2_cart_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot2_nmi_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot2_halt_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot3_cart_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot3_nmi_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot3_halt_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot4_cart_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot4_nmi_w);
+ DECLARE_WRITE_LINE_MEMBER(multi_slot4_halt_w);
+
+ virtual address_space &cartridge_space() override;
+ virtual ioport_constructor device_input_ports() const override;
INPUT_CHANGED_MEMBER( switch_changed );
protected:
@@ -106,15 +129,6 @@ namespace
virtual WRITE8_MEMBER(scs_write) override;
virtual void set_sound_enable(bool sound_enable) override;
- // optional information overrides
- virtual void device_add_mconfig(machine_config &config) override;
-
- virtual uint8_t* get_cart_base() override;
- virtual uint32_t get_cart_size() override;
-
- virtual address_space &cartridge_space() override;
- virtual ioport_constructor device_input_ports() const override;
-
private:
// device references
required_device_array<cococart_slot_device, 4> m_slots;
@@ -135,19 +149,6 @@ namespace
DECLARE_READ8_MEMBER(ff7f_read);
DECLARE_WRITE8_MEMBER(ff7f_write);
void update_line(int slot_number, line ln);
-
- DECLARE_WRITE_LINE_MEMBER(multi_slot1_cart_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot1_nmi_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot1_halt_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot2_cart_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot2_nmi_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot2_halt_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot3_cart_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot3_nmi_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot3_halt_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot4_cart_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot4_nmi_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot4_halt_w);
};
};
@@ -181,25 +182,24 @@ static void coco_cart_slot4(device_slot_interface &device)
}
-void coco_multipak_device::device_add_mconfig(machine_config &config)
-{
- COCOCART_SLOT(config, m_slots[0], DERIVED_CLOCK(1, 1), coco_cart_slot1_3, nullptr);
- m_slots[0]->cart_callback().set(FUNC(coco_multipak_device::multi_slot1_cart_w));
- m_slots[0]->nmi_callback().set(FUNC(coco_multipak_device::multi_slot1_nmi_w));
- m_slots[0]->halt_callback().set(FUNC(coco_multipak_device::multi_slot1_halt_w));
- COCOCART_SLOT(config, m_slots[1], DERIVED_CLOCK(1, 1), coco_cart_slot1_3, nullptr);
- m_slots[1]->cart_callback().set(FUNC(coco_multipak_device::multi_slot2_cart_w));
- m_slots[1]->nmi_callback().set(FUNC(coco_multipak_device::multi_slot2_nmi_w));
- m_slots[1]->halt_callback().set(FUNC(coco_multipak_device::multi_slot2_halt_w));
- COCOCART_SLOT(config, m_slots[2], DERIVED_CLOCK(1, 1), coco_cart_slot1_3, nullptr);
- m_slots[2]->cart_callback().set(FUNC(coco_multipak_device::multi_slot3_cart_w));
- m_slots[2]->nmi_callback().set(FUNC(coco_multipak_device::multi_slot3_nmi_w));
- m_slots[2]->halt_callback().set(FUNC(coco_multipak_device::multi_slot3_halt_w));
- COCOCART_SLOT(config, m_slots[3], DERIVED_CLOCK(1, 1), coco_cart_slot4, "fdcv11");
- m_slots[3]->cart_callback().set(FUNC(coco_multipak_device::multi_slot4_cart_w));
- m_slots[3]->nmi_callback().set(FUNC(coco_multipak_device::multi_slot4_nmi_w));
- m_slots[3]->halt_callback().set(FUNC(coco_multipak_device::multi_slot4_halt_w));
-}
+MACHINE_CONFIG_START(coco_multipak_device::device_add_mconfig)
+ MCFG_COCO_CARTRIDGE_ADD(SLOT1_TAG, coco_cart_slot1_3, nullptr)
+ MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot1_cart_w))
+ MCFG_COCO_CARTRIDGE_NMI_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot1_nmi_w))
+ MCFG_COCO_CARTRIDGE_HALT_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot1_halt_w))
+ MCFG_COCO_CARTRIDGE_ADD(SLOT2_TAG, coco_cart_slot1_3, nullptr)
+ MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot2_cart_w))
+ MCFG_COCO_CARTRIDGE_NMI_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot2_nmi_w))
+ MCFG_COCO_CARTRIDGE_HALT_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot2_halt_w))
+ MCFG_COCO_CARTRIDGE_ADD(SLOT3_TAG, coco_cart_slot1_3, nullptr)
+ MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot3_cart_w))
+ MCFG_COCO_CARTRIDGE_NMI_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot3_nmi_w))
+ MCFG_COCO_CARTRIDGE_HALT_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot3_halt_w))
+ MCFG_COCO_CARTRIDGE_ADD(SLOT4_TAG, coco_cart_slot4, "fdcv11")
+ MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot4_cart_w))
+ MCFG_COCO_CARTRIDGE_NMI_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot4_nmi_w))
+ MCFG_COCO_CARTRIDGE_HALT_CB(WRITELINE(DEVICE_SELF, coco_multipak_device, multi_slot4_halt_w))
+MACHINE_CONFIG_END
INPUT_PORTS_START( coco_multipack )
PORT_START( SWITCH_CONFIG_TAG )
diff --git a/src/devices/bus/coco/coco_orch90.cpp b/src/devices/bus/coco/coco_orch90.cpp
index 2ad8afdaae1..979acd423a1 100644
--- a/src/devices/bus/coco/coco_orch90.cpp
+++ b/src/devices/bus/coco/coco_orch90.cpp
@@ -92,11 +92,6 @@ namespace
return memregion("eprom")->base();
}
- virtual memory_region* get_cart_memregion() override
- {
- return memregion("eprom");
- }
-
private:
WRITE8_MEMBER(write_left) { m_ldac->write(data); }
WRITE8_MEMBER(write_right) { m_rdac->write(data); }
@@ -112,16 +107,15 @@ namespace
// MACHINE AND ROM DECLARATIONS
//**************************************************************************
-void coco_orch90_device::device_add_mconfig(machine_config &config)
-{
+MACHINE_CONFIG_START(coco_orch90_device::device_add_mconfig)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- DAC_8BIT_R2R(config, m_ldac, 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5); // ls374.ic5 + r7 (8x20k) + r9 (8x10k)
- DAC_8BIT_R2R(config, m_rdac, 0).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // ls374.ic4 + r6 (8x20k) + r8 (8x10k)
- voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
- vref.add_route(0, "ldac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "ldac", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "rdac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "rdac", -1.0, DAC_VREF_NEG_INPUT);
-}
+ MCFG_DEVICE_ADD("ldac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5) // ls374.ic5 + r7 (8x20k) + r9 (8x10k)
+ MCFG_DEVICE_ADD("rdac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5) // ls374.ic4 + r6 (8x20k) + r8 (8x10k)
+ MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
+ MCFG_SOUND_ROUTE(0, "ldac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "ldac", -1.0, DAC_VREF_NEG_INPUT)
+ MCFG_SOUND_ROUTE(0, "rdac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "rdac", -1.0, DAC_VREF_NEG_INPUT)
+MACHINE_CONFIG_END
//**************************************************************************
diff --git a/src/devices/bus/coco/coco_rs232.cpp b/src/devices/bus/coco/coco_rs232.cpp
index 5a124986792..802d46251ad 100644
--- a/src/devices/bus/coco/coco_rs232.cpp
+++ b/src/devices/bus/coco/coco_rs232.cpp
@@ -56,8 +56,8 @@ namespace
virtual void device_start() override
{
install_readwrite_handler(0xFF68, 0xFF6B,
- read8sm_delegate(FUNC(mos6551_device::read), (mos6551_device *)m_uart),
- write8sm_delegate(FUNC(mos6551_device::write), (mos6551_device *)m_uart));
+ read8_delegate(FUNC(mos6551_device::read), (mos6551_device *)m_uart),
+ write8_delegate(FUNC(mos6551_device::write), (mos6551_device *)m_uart));
}
virtual const tiny_rom_entry *device_rom_region() const override;
@@ -68,11 +68,6 @@ namespace
return memregion("eprom")->base();
}
- virtual memory_region* get_cart_memregion() override
- {
- return memregion("eprom");
- }
-
private:
// internal state
required_device<mos6551_device> m_uart;
diff --git a/src/devices/bus/coco/coco_ssc.cpp b/src/devices/bus/coco/coco_ssc.cpp
index 6dcd34a8f03..8840df18835 100644
--- a/src/devices/bus/coco/coco_ssc.cpp
+++ b/src/devices/bus/coco/coco_ssc.cpp
@@ -152,8 +152,7 @@ DEFINE_DEVICE_TYPE(COCOSSC_SAC, cocossc_sac_device, "cocossc_sac", "CoCo SSC Sou
// MACHINE FRAGMENTS AND ADDRESS MAPS
//**************************************************************************
-void coco_ssc_device::device_add_mconfig(machine_config &config)
-{
+MACHINE_CONFIG_START(coco_ssc_device::device_add_mconfig)
TMS7040(config, m_tms7040, DERIVED_CLOCK(2, 1));
m_tms7040->in_porta().set(FUNC(coco_ssc_device::ssc_port_a_r));
m_tms7040->out_portb().set(FUNC(coco_ssc_device::ssc_port_b_w));
@@ -174,9 +173,9 @@ void coco_ssc_device::device_add_mconfig(machine_config &config)
m_ay->set_flags(AY8910_SINGLE_OUTPUT);
m_ay->add_route(ALL_OUTPUTS, "coco_sac_tag", AY8913_GAIN);
- COCOSSC_SAC(config, m_sac, DERIVED_CLOCK(2, 1));
- m_sac->add_route(ALL_OUTPUTS, "ssc_audio", 1.0);
-}
+ MCFG_DEVICE_ADD("coco_sac_tag", COCOSSC_SAC, DERIVED_CLOCK(2, 1))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "ssc_audio", 1.0)
+MACHINE_CONFIG_END
ROM_START(coco_ssc)
ROM_REGION(0x1000, PIC_TAG, 0)
@@ -438,12 +437,12 @@ WRITE8_MEMBER(coco_ssc_device::ssc_port_c_w)
{
if( (data & (C_BDR|C_BC1)) == (C_BDR|C_BC1) ) /* BDIR = 1, BC1 = 1: latch address */
{
- m_ay->address_w(m_tms7000_portd);
+ m_ay->address_w(space, 0, m_tms7000_portd);
}
if( ((data & C_BDR) == C_BDR) && ((data & C_BC1) == 0) ) /* BDIR = 1, BC1 = 0: write data */
{
- m_ay->data_w(m_tms7000_portd);
+ m_ay->data_w(space, 0, m_tms7000_portd);
}
}
@@ -493,7 +492,7 @@ READ8_MEMBER(coco_ssc_device::ssc_port_d_r)
{
if( ((m_tms7000_portc & C_BDR) == 0) && ((m_tms7000_portc & C_BC1) == C_BC1) ) /* psg read data */
{
- m_tms7000_portd = m_ay->data_r();
+ m_tms7000_portd = m_ay->data_r(space, 0);
}
}
diff --git a/src/devices/bus/coco/coco_t4426.cpp b/src/devices/bus/coco/coco_t4426.cpp
index 11c4499990a..eaa6f651ef2 100644
--- a/src/devices/bus/coco/coco_t4426.cpp
+++ b/src/devices/bus/coco/coco_t4426.cpp
@@ -332,13 +332,16 @@ READ8_MEMBER(coco_t4426_device::scs_read)
if ((offset >= 0x00) && (offset <= 0x07))
{
LOGPIA("- PIA\n");
- result = m_pia->read(offset & 3);
+ result = m_pia->read(space, offset & 3);
LOGPIA("- Offs:%04x Data:%02x\n", offset - 0x04, result);
}
else if ((offset >= 0x08) && (offset <= 0x0f) && (offset & 2))
{
LOGACIA("- ACIA\n");
- result = m_uart->read(offset & 1);
+ if (offset & 1)
+ result = m_uart->status_r(space, offset & 1);
+ else
+ result = m_uart->data_r(space, offset & 1);
LOGACIA("- Offs:%04x Data:%02x\n", offset - 0x04, result);
}
else
@@ -363,12 +366,15 @@ WRITE8_MEMBER(coco_t4426_device::scs_write)
if ((offset >= 0x00) && (offset <= 0x07))
{
LOG("- PIA\n");
- m_pia->write(offset & 3, data);
+ m_pia->write(space, offset & 3, data);
}
else if ((offset >= 0x08) && (offset <= 0x0f) && (offset & 2))
{
LOGACIA("- ACIA");
- m_uart->write(offset & 1, data);
+ if (offset & 1)
+ m_uart->control_w(space, offset & 1, data);
+ else
+ m_uart->data_w(space, offset & 1, data);
LOGACIA(" - Offs:%04x Data:%02x\n", offset & 1, data);
}
else
diff --git a/src/devices/bus/coco/cococart.cpp b/src/devices/bus/coco/cococart.cpp
index 6bf6360d24b..2c009aa8724 100644
--- a/src/devices/bus/coco/cococart.cpp
+++ b/src/devices/bus/coco/cococart.cpp
@@ -412,11 +412,11 @@ image_init_result cococart_slot_device::call_load()
{
memory_region *cart_mem = m_cart->get_cart_memregion();
uint8_t *base = cart_mem->base();
- offs_t read_length, cart_length = cart_mem->bytes();;
+ offs_t read_length, cart_legnth = cart_mem->bytes();;
if (!loaded_through_softlist())
{
- read_length = fread(base, cart_length);
+ read_length = fread(base, cart_legnth);
}
else
{
@@ -424,7 +424,7 @@ image_init_result cococart_slot_device::call_load()
memcpy(base, get_software_region("rom"), read_length);
}
- while (read_length < cart_length)
+ while (read_length < cart_legnth)
{
offs_t len = std::min(read_length, m_cart->get_cart_size() - read_length);
memcpy(base + read_length, base, len);
@@ -597,6 +597,40 @@ address_space &device_cococart_interface::cartridge_space()
//-------------------------------------------------
+// install_read_handler
+//-------------------------------------------------
+
+void device_cococart_interface::install_read_handler(uint16_t addrstart, uint16_t addrend, read8_delegate rhandler)
+{
+ address_space &space(cartridge_space());
+ space.install_read_handler(addrstart, addrend, rhandler);
+}
+
+
+//-------------------------------------------------
+// install_write_handler
+//-------------------------------------------------
+
+void device_cococart_interface::install_write_handler(uint16_t addrstart, uint16_t addrend, write8_delegate whandler)
+{
+ address_space &space(cartridge_space());
+ space.install_write_handler(addrstart, addrend, whandler);
+}
+
+
+//-------------------------------------------------
+// install_readwrite_handler
+//-------------------------------------------------
+
+void device_cococart_interface::install_readwrite_handler(uint16_t addrstart, uint16_t addrend, read8_delegate rhandler, write8_delegate whandler)
+{
+ address_space &space(cartridge_space());
+ space.install_read_handler(addrstart, addrend, rhandler);
+ space.install_write_handler(addrstart, addrend, whandler);
+}
+
+
+//-------------------------------------------------
// set_line_value
//-------------------------------------------------
diff --git a/src/devices/bus/coco/cococart.h b/src/devices/bus/coco/cococart.h
index c559a2eea53..2d5d37fd443 100644
--- a/src/devices/bus/coco/cococart.h
+++ b/src/devices/bus/coco/cococart.h
@@ -25,6 +25,15 @@
// direct region update handler
typedef delegate<void (uint8_t *)> cococart_base_update_delegate;
+#define MCFG_COCO_CARTRIDGE_CART_CB(_devcb) \
+ downcast<cococart_slot_device &>(*device).set_cart_callback(DEVCB_##_devcb);
+
+#define MCFG_COCO_CARTRIDGE_NMI_CB(_devcb) \
+ downcast<cococart_slot_device &>(*device).set_nmi_callback(DEVCB_##_devcb);
+
+#define MCFG_COCO_CARTRIDGE_HALT_CB(_devcb) \
+ downcast<cococart_slot_device &>(*device).set_halt_callback(DEVCB_##_devcb);
+
// ======================> cococart_slot_device
class device_cococart_interface;
@@ -63,6 +72,9 @@ public:
}
cococart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ template <class Object> devcb_base &set_cart_callback(Object &&cb) { return m_cart_callback.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_nmi_callback(Object &&cb) { return m_nmi_callback.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_halt_callback(Object &&cb) { return m_halt_callback.set_callback(std::forward<Object>(cb)); }
auto cart_callback() { return m_cart_callback.bind(); }
auto nmi_callback() { return m_nmi_callback.bind(); }
auto halt_callback() { return m_halt_callback.bind(); }
@@ -187,25 +199,9 @@ protected:
// cartridges (e.g. - Orch-90, Multi-Pak interface) for their control registers, independently
// of the SCS or CTS lines
address_space &cartridge_space();
- template <typename R>
- void install_read_handler(u16 addrstart, u16 addrend, R &&rhandler)
- {
- address_space &space(cartridge_space());
- space.install_read_handler(addrstart, addrend, std::forward<R>(rhandler));
- }
- template <typename W>
- void install_write_handler(u16 addrstart, u16 addrend, W &&whandler)
- {
- address_space &space(cartridge_space());
- space.install_write_handler(addrstart, addrend, std::forward<W>(whandler));
- }
- template <typename R, typename W>
- void install_readwrite_handler(u16 addrstart, u16 addrend, R &&rhandler, W &&whandler)
- {
- address_space &space(cartridge_space());
- space.install_read_handler(addrstart, addrend, std::forward<R>(rhandler));
- space.install_write_handler(addrstart, addrend, std::forward<W>(whandler));
- }
+ void install_read_handler(uint16_t addrstart, uint16_t addrend, read8_delegate rhandler);
+ void install_write_handler(uint16_t addrstart, uint16_t addrend, write8_delegate whandler);
+ void install_readwrite_handler(uint16_t addrstart, uint16_t addrend, read8_delegate rhandler, write8_delegate whandler);
// setting line values
void set_line_value(cococart_slot_device::line line, cococart_slot_device::line_value value);
@@ -220,4 +216,16 @@ private:
device_cococart_host_interface * m_host;
};
+
+/***************************************************************************
+ DEVICE CONFIGURATION MACROS
+***************************************************************************/
+
+#define MCFG_COCO_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
+ MCFG_DEVICE_ADD(_tag, COCOCART_SLOT, DERIVED_CLOCK(1, 1)) \
+ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
+
+#define MCFG_COCO_CARTRIDGE_REMOVE(_tag) \
+ MCFG_DEVICE_REMOVE(_tag)
+
#endif // MAME_BUS_COCO_COCOCART_H
diff --git a/src/devices/bus/coco/dragon_jcbsnd.cpp b/src/devices/bus/coco/dragon_jcbsnd.cpp
index efb2bc42a62..8fae5eaf8df 100644
--- a/src/devices/bus/coco/dragon_jcbsnd.cpp
+++ b/src/devices/bus/coco/dragon_jcbsnd.cpp
@@ -22,7 +22,7 @@
ROM_START( dragon_jcbsnd )
- ROM_REGION(0x1000, "eprom", ROMREGION_ERASE00)
+ ROM_REGION(0x8000, "eprom", ROMREGION_ERASE00)
ROM_LOAD("d32sem.rom", 0x0000, 0x1000, CRC(4cd0f30b) SHA1(d07bb9272e3d3928059853730ff656905a80b68e))
ROM_END
@@ -53,8 +53,8 @@ dragon_jcbsnd_device::dragon_jcbsnd_device(const machine_config &mconfig, const
void dragon_jcbsnd_device::device_start()
{
- install_write_handler(0xfefe, 0xfefe, write8smo_delegate(FUNC(ay8910_device::address_w), (ay8910_device *)m_ay8910));
- install_readwrite_handler(0xfeff, 0xfeff, read8smo_delegate(FUNC(ay8910_device::data_r), (ay8910_device *)m_ay8910), write8smo_delegate(FUNC(ay8910_device::data_w), (ay8910_device *)m_ay8910));
+ install_write_handler(0xfefe, 0xfefe, write8_delegate(FUNC(ay8910_device::address_w), (ay8910_device *)m_ay8910));
+ install_readwrite_handler(0xfeff, 0xfeff, read8_delegate(FUNC(ay8910_device::data_r), (ay8910_device *)m_ay8910), write8_delegate(FUNC(ay8910_device::data_w), (ay8910_device *)m_ay8910));
set_line_value(line::CART, line_value::Q);
}
@@ -69,15 +69,6 @@ uint8_t* dragon_jcbsnd_device::get_cart_base()
}
//-------------------------------------------------
-// dragon_jcbsnd_device::get_cart_memregion
-//-------------------------------------------------
-
-memory_region* dragon_jcbsnd_device::get_cart_memregion()
-{
- return memregion("eprom");
-}
-
-//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
diff --git a/src/devices/bus/coco/dragon_jcbsnd.h b/src/devices/bus/coco/dragon_jcbsnd.h
index 2ed76628075..35167dd53f8 100644
--- a/src/devices/bus/coco/dragon_jcbsnd.h
+++ b/src/devices/bus/coco/dragon_jcbsnd.h
@@ -29,7 +29,6 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual uint8_t* get_cart_base() override;
- virtual memory_region* get_cart_memregion() override;
// internal state
device_image_interface *m_cart;