From 5384d7b24e9128e0d4905dbfd8afefd71bf50570 Mon Sep 17 00:00:00 2001 From: AJR Date: Fri, 14 Dec 2018 14:24:12 -0500 Subject: cpcexp: Modernization (nw) - Replace MCFG_ macros with devcb3 - Remove most instances of machine().device - Add bus clock --- src/devices/bus/cpc/amdrum.cpp | 4 +-- src/devices/bus/cpc/brunword4.cpp | 4 +-- src/devices/bus/cpc/cpc_pds.cpp | 3 +- src/devices/bus/cpc/cpc_rom.cpp | 10 +++--- src/devices/bus/cpc/cpc_rs232.cpp | 18 +++++------ src/devices/bus/cpc/cpc_ssa1.cpp | 36 +++++++++++----------- src/devices/bus/cpc/cpcexp.cpp | 17 +++++++++++ src/devices/bus/cpc/cpcexp.h | 51 +++++++++++++------------------ src/devices/bus/cpc/ddi1.cpp | 22 ++++++-------- src/devices/bus/cpc/doubler.cpp | 4 +-- src/devices/bus/cpc/hd20.cpp | 4 +-- src/devices/bus/cpc/magicsound.cpp | 4 +-- src/devices/bus/cpc/mface2.cpp | 20 ++++++------ src/devices/bus/cpc/playcity.cpp | 18 +++++------ src/devices/bus/cpc/smartwatch.cpp | 3 +- src/devices/bus/cpc/symbfac2.cpp | 5 +-- src/devices/bus/cpc/transtape.cpp | 9 +++--- src/devices/bus/cpc/transtape.h | 1 - src/mame/drivers/amstrad.cpp | 62 +++++++++++++++++++------------------- 19 files changed, 138 insertions(+), 157 deletions(-) diff --git a/src/devices/bus/cpc/amdrum.cpp b/src/devices/bus/cpc/amdrum.cpp index dc2253a79a1..b0c0610b607 100644 --- a/src/devices/bus/cpc/amdrum.cpp +++ b/src/devices/bus/cpc/amdrum.cpp @@ -47,10 +47,8 @@ cpc_amdrum_device::cpc_amdrum_device(const machine_config &mconfig, const char * void cpc_amdrum_device::device_start() { - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - + address_space &space = m_slot->cpu().space(AS_IO); space.install_write_handler(0xff00,0xffff,write8_delegate(FUNC(cpc_amdrum_device::dac_w),this)); } diff --git a/src/devices/bus/cpc/brunword4.cpp b/src/devices/bus/cpc/brunword4.cpp index 6d5a7b885d3..db5e8e1b57d 100644 --- a/src/devices/bus/cpc/brunword4.cpp +++ b/src/devices/bus/cpc/brunword4.cpp @@ -72,10 +72,8 @@ cpc_brunword4_device::cpc_brunword4_device(const machine_config &mconfig, const void cpc_brunword4_device::device_start() { - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - + address_space &space = m_slot->cpu().space(AS_IO); space.install_write_handler(0xdf00,0xdfff,write8_delegate(FUNC(cpc_brunword4_device::rombank_w),this)); } diff --git a/src/devices/bus/cpc/cpc_pds.cpp b/src/devices/bus/cpc/cpc_pds.cpp index c1000939152..e0a234e3c88 100644 --- a/src/devices/bus/cpc/cpc_pds.cpp +++ b/src/devices/bus/cpc/cpc_pds.cpp @@ -43,9 +43,8 @@ cpc_pds_device::cpc_pds_device(const machine_config &mconfig, const char *tag, d void cpc_pds_device::device_start() { - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); + address_space &space = m_slot->cpu().space(AS_IO); space.install_readwrite_handler(0xfbec,0xfbef,read8_delegate(FUNC(cpc_pds_device::pio_r),this),write8_delegate(FUNC(cpc_pds_device::pio_w),this)); } diff --git a/src/devices/bus/cpc/cpc_rom.cpp b/src/devices/bus/cpc/cpc_rom.cpp index 113e2efdef3..a3fedd575bc 100644 --- a/src/devices/bus/cpc/cpc_rom.cpp +++ b/src/devices/bus/cpc/cpc_rom.cpp @@ -29,12 +29,10 @@ MACHINE_CONFIG_START(cpc_rom_device::device_add_mconfig) MCFG_CPC_ROMSLOT_ADD("rom8") // pass-through - MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, nullptr, false) - MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(WRITELINE("^", cpc_expansion_slot_device, irq_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(WRITELINE("^", cpc_expansion_slot_device, nmi_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE("^", cpc_expansion_slot_device, romdis_w)) // ROMDIS - + cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", DERIVED_CLOCK(1, 1), cpc_exp_cards, nullptr)); + exp.irq_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::irq_w)); + exp.nmi_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::nmi_w)); + exp.romdis_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::romdis_w)); // ROMDIS MACHINE_CONFIG_END diff --git a/src/devices/bus/cpc/cpc_rs232.cpp b/src/devices/bus/cpc/cpc_rs232.cpp index cedbc6bfaf3..73514b02114 100644 --- a/src/devices/bus/cpc/cpc_rs232.cpp +++ b/src/devices/bus/cpc/cpc_rs232.cpp @@ -33,7 +33,8 @@ ROM_START( cpc_rs232_ams ) ROM_END // device machine config -MACHINE_CONFIG_START(cpc_rs232_device::device_add_mconfig) +void cpc_rs232_device::device_add_mconfig(machine_config &config) +{ PIT8253(config, m_pit, 0); m_pit->set_clk<0>(2000000); m_pit->set_clk<1>(2000000); @@ -54,13 +55,11 @@ MACHINE_CONFIG_START(cpc_rs232_device::device_add_mconfig) // m_rs232->ri_handler().set(m_dart, FUNC(z80dart_device::ria_w)); // pass-through - MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, nullptr, false) - MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(WRITELINE("^", cpc_expansion_slot_device, irq_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(WRITELINE("^", cpc_expansion_slot_device, nmi_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE("^", cpc_expansion_slot_device, romdis_w)) // ROMDIS - -MACHINE_CONFIG_END + cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", DERIVED_CLOCK(1, 1), cpc_exp_cards, nullptr)); + exp.irq_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::irq_w)); + exp.nmi_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::nmi_w)); + exp.romdis_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::romdis_w)); // ROMDIS +} const tiny_rom_entry *cpc_rs232_device::device_rom_region() const { @@ -104,9 +103,8 @@ cpc_ams_rs232_device::cpc_ams_rs232_device(const machine_config &mconfig, const void cpc_rs232_device::device_start() { - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); + address_space &space = m_slot->cpu().space(AS_IO); space.install_readwrite_handler(0xfadc,0xfadf,read8_delegate(FUNC(cpc_rs232_device::dart_r),this),write8_delegate(FUNC(cpc_rs232_device::dart_w),this)); space.install_readwrite_handler(0xfbdc,0xfbdf,read8_delegate(FUNC(cpc_rs232_device::pit_r),this),write8_delegate(FUNC(cpc_rs232_device::pit_w),this)); diff --git a/src/devices/bus/cpc/cpc_ssa1.cpp b/src/devices/bus/cpc/cpc_ssa1.cpp index c5758069a26..2ad9dd9beaf 100644 --- a/src/devices/bus/cpc/cpc_ssa1.cpp +++ b/src/devices/bus/cpc/cpc_ssa1.cpp @@ -115,7 +115,8 @@ const tiny_rom_entry *cpc_dkspeech_device::device_rom_region() const } // device machine config -MACHINE_CONFIG_START(cpc_ssa1_device::device_add_mconfig) +void cpc_ssa1_device::device_add_mconfig(machine_config &config) +{ SPEAKER(config, "mono").front_center(); SP0256(config, m_sp0256_device, XTAL(3'120'000)); m_sp0256_device->data_request_callback().set(FUNC(cpc_ssa1_device::lrq_cb)); @@ -123,14 +124,14 @@ MACHINE_CONFIG_START(cpc_ssa1_device::device_add_mconfig) m_sp0256_device->add_route(ALL_OUTPUTS, "mono", 1.00); // pass-through - MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, nullptr, false) - MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(WRITELINE("^", cpc_expansion_slot_device, irq_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(WRITELINE("^", cpc_expansion_slot_device, nmi_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE("^", cpc_expansion_slot_device, romdis_w)) // ROMDIS -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(cpc_dkspeech_device::device_add_mconfig) + cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", DERIVED_CLOCK(1, 1), cpc_exp_cards, nullptr)); + exp.irq_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::irq_w)); + exp.nmi_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::nmi_w)); + exp.romdis_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::romdis_w)); // ROMDIS +} + +void cpc_dkspeech_device::device_add_mconfig(machine_config &config) +{ SPEAKER(config, "mono").front_center(); SP0256(config, m_sp0256_device, XTAL(4'000'000)); // uses the CPC's clock from pin 50 of the expansion port m_sp0256_device->data_request_callback().set(FUNC(cpc_dkspeech_device::lrq_cb)); @@ -138,12 +139,11 @@ MACHINE_CONFIG_START(cpc_dkspeech_device::device_add_mconfig) m_sp0256_device->add_route(ALL_OUTPUTS, "mono", 1.00); // pass-through - MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, nullptr, false) - MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(WRITELINE("^", cpc_expansion_slot_device, irq_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(WRITELINE("^", cpc_expansion_slot_device, nmi_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE("^", cpc_expansion_slot_device, romdis_w)) // ROMDIS -MACHINE_CONFIG_END + cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", DERIVED_CLOCK(1, 1), cpc_exp_cards, nullptr)); + exp.irq_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::irq_w)); + exp.nmi_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::nmi_w)); + exp.romdis_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::romdis_w)); // ROMDIS +} //************************************************************************** @@ -172,9 +172,8 @@ cpc_dkspeech_device::cpc_dkspeech_device(const machine_config &mconfig, const ch void cpc_ssa1_device::device_start() { - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); + address_space &space = m_slot->cpu().space(AS_IO); m_rom = memregion("sp0256")->base(); @@ -184,9 +183,8 @@ void cpc_ssa1_device::device_start() void cpc_dkspeech_device::device_start() { - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); + address_space &space = m_slot->cpu().space(AS_IO); m_rom = memregion("sp0256")->base(); diff --git a/src/devices/bus/cpc/cpcexp.cpp b/src/devices/bus/cpc/cpcexp.cpp index d40af53711c..ab92c31a4df 100644 --- a/src/devices/bus/cpc/cpcexp.cpp +++ b/src/devices/bus/cpc/cpcexp.cpp @@ -44,6 +44,7 @@ device_cpc_expansion_card_interface::~device_cpc_expansion_card_interface() cpc_expansion_slot_device::cpc_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, CPC_EXPANSION_SLOT, tag, owner, clock) , device_slot_interface(mconfig, *this) + , m_cpu(*this, finder_base::DUMMY_TAG) , m_out_irq_cb(*this) , m_out_nmi_cb(*this) , m_out_reset_cb(*this) @@ -73,6 +74,22 @@ void cpc_expansion_slot_device::device_start() m_out_rom_select.resolve_safe(); } +//------------------------------------------------- +// device_config_complete - perform any +// operations now that the configuration is +// complete +//------------------------------------------------- + +void cpc_expansion_slot_device::device_config_complete() +{ + // for passthrough connectors, use the parent slot's CPU tag + if (strcmp(m_cpu.finder_tag(), finder_base::DUMMY_TAG) == 0 && dynamic_cast(owner()) != nullptr) + { + auto parent = dynamic_cast(owner()->owner()); + if (parent != nullptr) + m_cpu.set_tag(parent->m_cpu); + } +} //------------------------------------------------- // device_reset - device-specific reset diff --git a/src/devices/bus/cpc/cpcexp.h b/src/devices/bus/cpc/cpcexp.h index e24c0b99d1c..51796dc7edd 100644 --- a/src/devices/bus/cpc/cpcexp.h +++ b/src/devices/bus/cpc/cpcexp.h @@ -49,31 +49,6 @@ #pragma once -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define CPC_EXP_SLOT_TAG "cpcexp" - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(_devcb) \ - downcast(*device).set_out_irq_callback(DEVCB_##_devcb); - -#define MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(_devcb) \ - downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); - -#define MCFG_CPC_EXPANSION_SLOT_OUT_RESET_CB(_devcb) \ - downcast(*device).set_out_reset_callback(DEVCB_##_devcb); - -#define MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(_devcb) \ - downcast(*device).set_out_romdis_callback(DEVCB_##_devcb); - -#define MCFG_CPC_EXPANSION_SLOT_ROM_SELECT(_devcb) \ - downcast(*device).set_out_rom_select_callback(DEVCB_##_devcb); - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -119,13 +94,24 @@ class cpc_expansion_slot_device : public device_t, public: // construction/destruction cpc_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template + cpc_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&opts, const char *dflt) + : cpc_expansion_slot_device(mconfig, tag, owner, clock) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + } virtual ~cpc_expansion_slot_device(); - template devcb_base &set_out_irq_callback(Object &&cb) { return m_out_irq_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_nmi_callback(Object &&cb) { return m_out_nmi_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_reset_callback(Object &&cb) { return m_out_reset_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_romdis_callback(Object &&cb) { return m_out_romdis_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_rom_select_callback(Object &&cb) { return m_out_rom_select.set_callback(std::forward(cb)); } + template void set_cpu_tag(Object &&tag) { m_cpu.set_tag(std::forward(tag)); } + + auto irq_callback() { return m_out_irq_cb.bind(); } + auto nmi_callback() { return m_out_nmi_cb.bind(); } + auto reset_callback() { return m_out_reset_cb.bind(); } + auto romdis_callback() { return m_out_romdis_cb.bind(); } + auto rom_select_callback() { return m_out_rom_select.bind(); } DECLARE_WRITE_LINE_MEMBER( irq_w ); DECLARE_WRITE_LINE_MEMBER( nmi_w ); @@ -138,11 +124,16 @@ public: DECLARE_WRITE_LINE_MEMBER( cursor_w ) { if(m_card) m_card->cursor_w(state); } // pass on CRTC Cursor signal DECLARE_WRITE_LINE_MEMBER( romen_w ) { if(m_card) m_card->romen_w(state); } // pass on /ROMEN signal + cpu_device &cpu() const { return *m_cpu; } + protected: // device-level overrides + virtual void device_config_complete() override; virtual void device_start() override; virtual void device_reset() override; + required_device m_cpu; + devcb_write_line m_out_irq_cb; devcb_write_line m_out_nmi_cb; devcb_write_line m_out_reset_cb; diff --git a/src/devices/bus/cpc/ddi1.cpp b/src/devices/bus/cpc/ddi1.cpp index 80a60bcf6c0..788eab1a211 100644 --- a/src/devices/bus/cpc/ddi1.cpp +++ b/src/devices/bus/cpc/ddi1.cpp @@ -40,19 +40,18 @@ const tiny_rom_entry *cpc_ddi1_device::device_rom_region() const } // device machine config -MACHINE_CONFIG_START(cpc_ddi1_device::device_add_mconfig) +void cpc_ddi1_device::device_add_mconfig(machine_config &config) +{ UPD765A(config, m_fdc, 4'000'000, true, true); - MCFG_FLOPPY_DRIVE_ADD("upd765:0", ddi1_floppies, "3ssdd", floppy_image_device::default_floppy_formats) - MCFG_SOFTWARE_LIST_ADD("flop_list","cpc_flop") + FLOPPY_CONNECTOR(config, m_connector, ddi1_floppies, "3ssdd", floppy_image_device::default_floppy_formats); + SOFTWARE_LIST(config, "flop_list").set_original("cpc_flop"); // pass-through - MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, nullptr, false) - MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(WRITELINE("^", cpc_expansion_slot_device, irq_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(WRITELINE("^", cpc_expansion_slot_device, nmi_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE("^", cpc_expansion_slot_device, romdis_w)) // ROMDIS - -MACHINE_CONFIG_END + cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", DERIVED_CLOCK(1, 1), cpc_exp_cards, nullptr)); + exp.irq_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::irq_w)); + exp.nmi_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::nmi_w)); + exp.romdis_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::romdis_w)); // ROMDIS +} //************************************************************************** @@ -73,9 +72,8 @@ cpc_ddi1_device::cpc_ddi1_device(const machine_config &mconfig, const char *tag, void cpc_ddi1_device::device_start() { - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); + address_space &space = m_slot->cpu().space(AS_IO); space.install_write_handler(0xfa7e,0xfa7f,write8_delegate(FUNC(cpc_ddi1_device::motor_w),this)); space.install_readwrite_handler(0xfb7e,0xfb7f,read8_delegate(FUNC(cpc_ddi1_device::fdc_r),this),write8_delegate(FUNC(cpc_ddi1_device::fdc_w),this)); diff --git a/src/devices/bus/cpc/doubler.cpp b/src/devices/bus/cpc/doubler.cpp index a409cc475a6..ce89c0819dd 100644 --- a/src/devices/bus/cpc/doubler.cpp +++ b/src/devices/bus/cpc/doubler.cpp @@ -43,10 +43,8 @@ cpc_doubler_device::cpc_doubler_device(const machine_config &mconfig, const char void cpc_doubler_device::device_start() { - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - + address_space &space = m_slot->cpu().space(AS_IO); space.install_read_handler(0xf0e0,0xf0e0,read8_delegate(FUNC(cpc_doubler_device::ext_tape_r),this)); } diff --git a/src/devices/bus/cpc/hd20.cpp b/src/devices/bus/cpc/hd20.cpp index dc8aa960451..3ad082ee90d 100644 --- a/src/devices/bus/cpc/hd20.cpp +++ b/src/devices/bus/cpc/hd20.cpp @@ -55,10 +55,8 @@ cpc_hd20_device::cpc_hd20_device(const machine_config &mconfig, const char *tag, void cpc_hd20_device::device_start() { - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - + address_space &space = m_slot->cpu().space(AS_IO); space.install_write_handler(0xfbe0,0xfbe4,write8_delegate(FUNC(cpc_hd20_device::hdc_w),this)); space.install_read_handler(0xfbe0,0xfbe4,read8_delegate(FUNC(cpc_hd20_device::hdc_r),this)); } diff --git a/src/devices/bus/cpc/magicsound.cpp b/src/devices/bus/cpc/magicsound.cpp index 1ea0293ffe3..fdb0257f72c 100644 --- a/src/devices/bus/cpc/magicsound.cpp +++ b/src/devices/bus/cpc/magicsound.cpp @@ -85,10 +85,8 @@ al_magicsound_device::al_magicsound_device(const machine_config &mconfig, const void al_magicsound_device::device_start() { - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - + address_space &space = m_slot->cpu().space(AS_IO); space.install_readwrite_handler(0xf8d0,0xf8df,read8_delegate(FUNC(al_magicsound_device::dmac_r),this),write8_delegate(FUNC(al_magicsound_device::dmac_w),this)); space.install_write_handler(0xf9d0,0xf9df,write8_delegate(FUNC(al_magicsound_device::timer_w),this)); space.install_write_handler(0xfad0,0xfadf,write8_delegate(FUNC(al_magicsound_device::volume_w),this)); diff --git a/src/devices/bus/cpc/mface2.cpp b/src/devices/bus/cpc/mface2.cpp index 15fd375a458..831a895b439 100644 --- a/src/devices/bus/cpc/mface2.cpp +++ b/src/devices/bus/cpc/mface2.cpp @@ -29,7 +29,7 @@ DIRECT_UPDATE_MEMBER( cpc_multiface2_device::amstrad_multiface_directoverride ) { int pc; - pc = machine().device("maincpu")->pc(); + pc = m_slot->cpu().pc(); /* there are two places where CALL &0065 can be found in the multiface rom. At this address there is a RET. @@ -59,7 +59,7 @@ DIRECT_UPDATE_MEMBER( cpc_multiface2_device::amstrad_multiface_directoverride ) m_romdis=0; /* clear op base override */ - machine().device("maincpu")->memory().space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(&cpc_multiface2_device::amstrad_default,this)); + m_slot->cpu().space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(&cpc_multiface2_device::amstrad_default,this)); } return pc; @@ -108,14 +108,14 @@ void cpc_multiface2_device::multiface_rethink_memory() } // device machine config -MACHINE_CONFIG_START(cpc_multiface2_device::device_add_mconfig) +void cpc_multiface2_device::device_add_mconfig(machine_config &config) +{ // pass-through - MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, nullptr, false) - MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(WRITELINE("^", cpc_expansion_slot_device, irq_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(WRITELINE("^", cpc_expansion_slot_device, nmi_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE("^", cpc_expansion_slot_device, romdis_w)) // ROMDIS -MACHINE_CONFIG_END + cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", DERIVED_CLOCK(1, 1), cpc_exp_cards, nullptr)); + exp.irq_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::irq_w)); + exp.nmi_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::nmi_w)); + exp.romdis_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::romdis_w)); // ROMDIS +} void cpc_multiface2_device::check_button_state() { @@ -157,7 +157,7 @@ void cpc_multiface2_device::multiface_stop() m_slot->nmi_w(0); /* initialise 0065 override to monitor calls to 0065 */ - // machine().device("maincpu")->memory().space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(&cpc_multiface2_device::amstrad_multiface_directoverride,this)); + // m_slot->cpu().space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(&cpc_multiface2_device::amstrad_multiface_directoverride,this)); } } diff --git a/src/devices/bus/cpc/playcity.cpp b/src/devices/bus/cpc/playcity.cpp index 95a0a5f6c2b..548e35f4437 100644 --- a/src/devices/bus/cpc/playcity.cpp +++ b/src/devices/bus/cpc/playcity.cpp @@ -24,7 +24,8 @@ void cpc_exp_cards(device_slot_interface &device); DEFINE_DEVICE_TYPE(CPC_PLAYCITY, cpc_playcity_device, "cpc_playcity", "PlayCity") // device machine config -MACHINE_CONFIG_START(cpc_playcity_device::device_add_mconfig) +void cpc_playcity_device::device_add_mconfig(machine_config &config) +{ Z80CTC(config, m_ctc, XTAL(4'000'000)); m_ctc->zc_callback<1>().set(FUNC(cpc_playcity_device::ctc_zc1_cb)); m_ctc->zc_callback<2>().set(m_ctc, FUNC(z80ctc_device::trg3)); @@ -38,13 +39,11 @@ MACHINE_CONFIG_START(cpc_playcity_device::device_add_mconfig) m_ymz2->add_route(ALL_OUTPUTS, "lspeaker", 0.30); // pass-through - MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, nullptr, false) - MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(WRITELINE("^", cpc_expansion_slot_device, irq_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(WRITELINE("^", cpc_expansion_slot_device, nmi_w)) - MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE("^", cpc_expansion_slot_device, romdis_w)) // ROMDIS - -MACHINE_CONFIG_END + cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", DERIVED_CLOCK(1, 1), cpc_exp_cards, nullptr)); + exp.irq_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::irq_w)); + exp.nmi_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::nmi_w)); + exp.romdis_callback().set(DEVICE_SELF_OWNER, FUNC(cpc_expansion_slot_device::romdis_w)); // ROMDIS +} //************************************************************************** @@ -67,9 +66,8 @@ cpc_playcity_device::cpc_playcity_device(const machine_config &mconfig, const ch void cpc_playcity_device::device_start() { - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); + address_space &space = m_slot->cpu().space(AS_IO); space.install_readwrite_handler(0xf880,0xf883,read8_delegate(FUNC(cpc_playcity_device::ctc_r),this),write8_delegate(FUNC(cpc_playcity_device::ctc_w),this)); space.install_readwrite_handler(0xf884,0xf884,read8_delegate(FUNC(cpc_playcity_device::ymz1_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz1_data_w),this)); diff --git a/src/devices/bus/cpc/smartwatch.cpp b/src/devices/bus/cpc/smartwatch.cpp index eef1fb4a14a..bd039c40735 100644 --- a/src/devices/bus/cpc/smartwatch.cpp +++ b/src/devices/bus/cpc/smartwatch.cpp @@ -62,8 +62,7 @@ void cpc_smartwatch_device::device_start() void cpc_smartwatch_device::device_reset() { - device_t* cpu = machine().device(":maincpu"); - address_space& space = cpu->memory().space(AS_PROGRAM); + address_space &space = m_slot->cpu().space(AS_PROGRAM); space.install_read_handler(0xc000,0xc001,read8_delegate(FUNC(cpc_smartwatch_device::rtc_w),this)); space.install_read_handler(0xc004,0xc004,read8_delegate(FUNC(cpc_smartwatch_device::rtc_r),this)); m_bank = membank(":bank7"); diff --git a/src/devices/bus/cpc/symbfac2.cpp b/src/devices/bus/cpc/symbfac2.cpp index f7577de8851..a68ecdbd900 100644 --- a/src/devices/bus/cpc/symbfac2.cpp +++ b/src/devices/bus/cpc/symbfac2.cpp @@ -88,11 +88,8 @@ cpc_symbiface2_device::cpc_symbiface2_device(const machine_config &mconfig, cons void cpc_symbiface2_device::device_start() { - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); - m_slot = dynamic_cast(owner()); - + address_space &space = m_slot->cpu().space(AS_IO); space.install_readwrite_handler(0xfd00,0xfd07,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_w),this)); space.install_readwrite_handler(0xfd08,0xfd0f,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_w),this)); space.install_read_handler(0xfd10,0xfd10,read8_delegate(FUNC(cpc_symbiface2_device::mouse_r),this)); diff --git a/src/devices/bus/cpc/transtape.cpp b/src/devices/bus/cpc/transtape.cpp index 625bd5983e2..f248bc2cea0 100644 --- a/src/devices/bus/cpc/transtape.cpp +++ b/src/devices/bus/cpc/transtape.cpp @@ -45,7 +45,7 @@ ioport_constructor cpc_transtape_device::device_input_ports() const cpc_transtape_device::cpc_transtape_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, CPC_TRANSTAPE, tag, owner, clock), device_cpc_expansion_card_interface(mconfig, *this), - m_slot(nullptr), m_cpu(nullptr), m_space(nullptr), m_ram(nullptr), + m_slot(nullptr), m_space(nullptr), m_ram(nullptr), m_rom_active(false), m_romen(true), m_output(0) @@ -59,8 +59,7 @@ cpc_transtape_device::cpc_transtape_device(const machine_config &mconfig, const void cpc_transtape_device::device_start() { m_slot = dynamic_cast(owner()); - m_cpu = static_cast(machine().device("maincpu")); - m_space = &m_cpu->space(AS_IO); + m_space = &m_slot->cpu().space(AS_IO); m_ram = make_unique_clear(0x2000); @@ -103,7 +102,7 @@ INPUT_CHANGED_MEMBER(cpc_transtape_device::button_red_w) { m_output |= 0x1f; map_enable(); - m_cpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); + m_slot->cpu().pulse_input_line(INPUT_LINE_NMI, attotime::zero); } } @@ -114,7 +113,7 @@ INPUT_CHANGED_MEMBER(cpc_transtape_device::button_black_w) { m_output |= 0x1f; map_enable(); - m_cpu->set_pc(0); + m_slot->cpu().set_pc(0); } } diff --git a/src/devices/bus/cpc/transtape.h b/src/devices/bus/cpc/transtape.h index 14fd81a0dc1..6b7e4539023 100644 --- a/src/devices/bus/cpc/transtape.h +++ b/src/devices/bus/cpc/transtape.h @@ -40,7 +40,6 @@ protected: private: cpc_expansion_slot_device *m_slot; - cpu_device* m_cpu; address_space* m_space; std::unique_ptr m_ram; // 8kB internal RAM bool m_rom_active; diff --git a/src/mame/drivers/amstrad.cpp b/src/mame/drivers/amstrad.cpp index 60de93a33e7..9020c38f273 100644 --- a/src/mame/drivers/amstrad.cpp +++ b/src/mame/drivers/amstrad.cpp @@ -972,12 +972,13 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(amstrad_state::cpc464) amstrad_base(config); - MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(cpc464_exp_cards, nullptr, false) - MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(INPUTLINE("maincpu", 0)) - MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(INPUTLINE("maincpu", INPUT_LINE_NMI)) - MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE(*this, amstrad_state, cpc_romdis)) // ROMDIS - MCFG_CPC_EXPANSION_SLOT_ROM_SELECT(WRITE8(*this, amstrad_state,rom_select)) + + cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", 16_MHz_XTAL / 4, cpc464_exp_cards, nullptr)); + exp.set_cpu_tag(m_maincpu); + exp.irq_callback().set_inputline("maincpu", 0); + exp.nmi_callback().set_inputline("maincpu", INPUT_LINE_NMI); + exp.romdis_callback().set(FUNC(amstrad_state::cpc_romdis)); // ROMDIS + exp.rom_select_callback().set(FUNC(amstrad_state::rom_select)); /* internal ram */ RAM(config, m_ram).set_default_size("64K").set_extra_options("128K,320K,576K"); @@ -990,12 +991,12 @@ MACHINE_CONFIG_START(amstrad_state::cpc664) MCFG_FLOPPY_DRIVE_ADD("upd765:1", amstrad_floppies, "35ssdd", floppy_image_device::default_floppy_formats) MCFG_SOFTWARE_LIST_ADD("flop_list","cpc_flop") - MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, nullptr, false) - MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(INPUTLINE("maincpu", 0)) - MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(INPUTLINE("maincpu", INPUT_LINE_NMI)) - MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE(*this, amstrad_state, cpc_romdis)) // ROMDIS - MCFG_CPC_EXPANSION_SLOT_ROM_SELECT(WRITE8(*this, amstrad_state,rom_select)) + cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", 16_MHz_XTAL / 4, cpc_exp_cards, nullptr)); + exp.set_cpu_tag(m_maincpu); + exp.irq_callback().set_inputline("maincpu", 0); + exp.nmi_callback().set_inputline("maincpu", INPUT_LINE_NMI); + exp.romdis_callback().set(FUNC(amstrad_state::cpc_romdis)); // ROMDIS + exp.rom_select_callback().set(FUNC(amstrad_state::rom_select)); /* internal ram */ RAM(config, m_ram).set_default_size("64K").set_extra_options("128K,320K,576K"); @@ -1008,12 +1009,12 @@ MACHINE_CONFIG_START(amstrad_state::cpc6128) MCFG_FLOPPY_DRIVE_ADD("upd765:1", amstrad_floppies, "35ssdd", floppy_image_device::default_floppy_formats) MCFG_SOFTWARE_LIST_ADD("flop_list","cpc_flop") - MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, nullptr, false) - MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(INPUTLINE("maincpu", 0)) - MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(INPUTLINE("maincpu", INPUT_LINE_NMI)) - MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE(*this, amstrad_state, cpc_romdis)) // ROMDIS - MCFG_CPC_EXPANSION_SLOT_ROM_SELECT(WRITE8(*this, amstrad_state,rom_select)) + cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", 16_MHz_XTAL / 4, cpc_exp_cards, nullptr)); + exp.set_cpu_tag(m_maincpu); + exp.irq_callback().set_inputline("maincpu", 0); + exp.nmi_callback().set_inputline("maincpu", INPUT_LINE_NMI); + exp.romdis_callback().set(FUNC(amstrad_state::cpc_romdis)); // ROMDIS + exp.rom_select_callback().set(FUNC(amstrad_state::rom_select)); /* internal ram */ RAM(config, m_ram).set_default_size("128K").set_extra_options("320K,576K"); @@ -1097,12 +1098,12 @@ MACHINE_CONFIG_START(amstrad_state::cpcplus) MCFG_FLOPPY_DRIVE_ADD("upd765:1", amstrad_floppies, "35ssdd", floppy_image_device::default_floppy_formats) MCFG_SOFTWARE_LIST_ADD("flop_list","cpc_flop") - MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(cpcplus_exp_cards, nullptr, false) - MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(INPUTLINE("maincpu", 0)) - MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(INPUTLINE("maincpu", INPUT_LINE_NMI)) - MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE(*this, amstrad_state, cpc_romdis)) // ROMDIS - MCFG_CPC_EXPANSION_SLOT_ROM_SELECT(WRITE8(*this, amstrad_state,rom_select)) + cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config, "exp", 40_MHz_XTAL / 10, cpcplus_exp_cards, nullptr)); + exp.set_cpu_tag(m_maincpu); + exp.irq_callback().set_inputline("maincpu", 0); + exp.nmi_callback().set_inputline("maincpu", INPUT_LINE_NMI); + exp.romdis_callback().set(FUNC(amstrad_state::cpc_romdis)); // ROMDIS + exp.rom_select_callback().set(FUNC(amstrad_state::rom_select)); /* internal ram */ RAM(config, m_ram).set_default_size("128K").set_extra_options("64K,320K,576K"); @@ -1178,13 +1179,12 @@ MACHINE_CONFIG_START(amstrad_state::aleste) I8272A(config.replace(), m_fdc, 16_MHz_XTAL / 4, true); - MCFG_DEVICE_REMOVE("exp") - MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(aleste_exp_cards, nullptr, false) - MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(INPUTLINE("maincpu", 0)) - MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(INPUTLINE("maincpu", INPUT_LINE_NMI)) - MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE(*this, amstrad_state, cpc_romdis)) // ROMDIS - MCFG_CPC_EXPANSION_SLOT_ROM_SELECT(WRITE8(*this, amstrad_state,rom_select)) + cpc_expansion_slot_device &exp(CPC_EXPANSION_SLOT(config.replace(), "exp", 16_MHz_XTAL / 4, aleste_exp_cards, nullptr)); + exp.set_cpu_tag(m_maincpu); + exp.irq_callback().set_inputline("maincpu", 0); + exp.nmi_callback().set_inputline("maincpu", INPUT_LINE_NMI); + exp.romdis_callback().set(FUNC(amstrad_state::cpc_romdis)); // ROMDIS + exp.rom_select_callback().set(FUNC(amstrad_state::rom_select)); MCFG_FLOPPY_DRIVE_ADD("upd765:0", aleste_floppies, "35dd", amstrad_state::aleste_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("upd765:1", aleste_floppies, "35dd", amstrad_state::aleste_floppy_formats) -- cgit v1.2.3