diff options
Diffstat (limited to 'src/devices/bus/coco')
-rw-r--r-- | src/devices/bus/coco/coco_dcmodem.cpp | 9 | ||||
-rw-r--r-- | src/devices/bus/coco/coco_fdc.cpp | 15 | ||||
-rw-r--r-- | src/devices/bus/coco/coco_fdc.h | 1 | ||||
-rw-r--r-- | src/devices/bus/coco/coco_gmc.cpp | 8 | ||||
-rw-r--r-- | src/devices/bus/coco/coco_multi.cpp | 82 | ||||
-rw-r--r-- | src/devices/bus/coco/coco_orch90.cpp | 20 | ||||
-rw-r--r-- | src/devices/bus/coco/coco_rs232.cpp | 9 | ||||
-rw-r--r-- | src/devices/bus/coco/coco_ssc.cpp | 15 | ||||
-rw-r--r-- | src/devices/bus/coco/coco_t4426.cpp | 14 | ||||
-rw-r--r-- | src/devices/bus/coco/cococart.cpp | 40 | ||||
-rw-r--r-- | src/devices/bus/coco/cococart.h | 46 | ||||
-rw-r--r-- | src/devices/bus/coco/dragon_jcbsnd.cpp | 15 | ||||
-rw-r--r-- | src/devices/bus/coco/dragon_jcbsnd.h | 1 |
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; |