From d80a91a7c970eab71bf1676af75ba2e2a55397a5 Mon Sep 17 00:00:00 2001 From: mooglyguy Date: Fri, 22 Jun 2018 15:53:14 +0200 Subject: altos8600, isbc_208, isbc_215g, m20_8086, psxcd, saturn, sun3x, z100: Removed machine().device, nw --- src/mame/drivers/a7150.cpp | 2 +- src/mame/drivers/altos8600.cpp | 3 +- src/mame/drivers/isbc.cpp | 7 ++-- src/mame/drivers/m20.cpp | 2 +- src/mame/drivers/psx.cpp | 11 +++--- src/mame/drivers/saturn.cpp | 4 --- src/mame/drivers/stv.cpp | 4 +-- src/mame/drivers/sun3x.cpp | 8 +++-- src/mame/drivers/z100.cpp | 72 +++++++++++++++++++++------------------- src/mame/includes/saturn.h | 20 ++++++----- src/mame/machine/acs8600_ics.cpp | 3 +- src/mame/machine/acs8600_ics.h | 17 ++++++---- src/mame/machine/bbc.cpp | 1 - src/mame/machine/isbc_208.cpp | 8 +++-- src/mame/machine/isbc_208.h | 12 ++++--- src/mame/machine/isbc_215g.cpp | 3 +- src/mame/machine/isbc_215g.h | 41 +++++++++++++++-------- src/mame/machine/m20_8086.cpp | 10 +++--- src/mame/machine/m20_8086.h | 11 ++++++ src/mame/machine/psxcd.cpp | 7 ++-- src/mame/machine/psxcd.h | 16 +++++---- 21 files changed, 152 insertions(+), 110 deletions(-) diff --git a/src/mame/drivers/a7150.cpp b/src/mame/drivers/a7150.cpp index d01d4f1f949..a2b9eaada4f 100644 --- a/src/mame/drivers/a7150.cpp +++ b/src/mame/drivers/a7150.cpp @@ -507,7 +507,7 @@ MACHINE_CONFIG_START(a7150_state::a7150) MCFG_RS232_DSR_HANDLER(WRITELINE("uart8251", i8251_device, write_dsr)) MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("keyboard", kbd_rs232_defaults) - MCFG_ISBC_215_ADD("isbc_215g", 0x4a, "maincpu") + MCFG_DEVICE_ADD("isbc_215g", ISBC_215G, 0x4a, "maincpu") MCFG_ISBC_215_IRQ(WRITELINE("pic8259", pic8259_device, ir5_w)) // KGS K7070 graphics terminal controlling ABG K7072 framebuffer diff --git a/src/mame/drivers/altos8600.cpp b/src/mame/drivers/altos8600.cpp index bd714bcc78b..ed90babd6d4 100644 --- a/src/mame/drivers/altos8600.cpp +++ b/src/mame/drivers/altos8600.cpp @@ -798,8 +798,7 @@ MACHINE_CONFIG_START(altos8600_state::altos8600) MCFG_FLOPPY_DRIVE_ADD("fd1797:2", altos8600_floppies, "8dd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fd1797:3", altos8600_floppies, "8dd", floppy_image_device::default_floppy_formats) - MCFG_DEVICE_ADD("ics", ACS8600_ICS, 0) - MCFG_ACS8600_ICS_MAINCPU(":dmac") // TODO: fixme + MCFG_DEVICE_ADD("ics", ACS8600_ICS, "dmac") MCFG_ACS8600_ICS_IRQ1(WRITELINE("pic8259_1", pic8259_device, ir5_w)) MCFG_ACS8600_ICS_IRQ2(WRITELINE("pic8259_1", pic8259_device, ir6_w)) diff --git a/src/mame/drivers/isbc.cpp b/src/mame/drivers/isbc.cpp index 0a0e98f4c53..58925540e74 100644 --- a/src/mame/drivers/isbc.cpp +++ b/src/mame/drivers/isbc.cpp @@ -432,8 +432,7 @@ MACHINE_CONFIG_START(isbc_state::isbc8605) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_IO_MAP(isbc8605_io) - MCFG_DEVICE_ADD("isbc_208", ISBC_208, 0) - MCFG_ISBC_208_MAINCPU("maincpu") + MCFG_DEVICE_ADD("isbc_208", ISBC_208, "maincpu") MCFG_ISBC_208_IRQ(WRITELINE("pic_0", pic8259_device, ir5_w)) MACHINE_CONFIG_END @@ -442,7 +441,7 @@ MACHINE_CONFIG_START(isbc_state::isbc8630) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_IO_MAP(isbc8630_io) - MCFG_ISBC_215_ADD("isbc_215g", 0x100, "maincpu") + MCFG_DEVICE_ADD("isbc_215g", ISBC_215G, 0x100, "maincpu") MCFG_ISBC_215_IRQ(WRITELINE("pic_0", pic8259_device, ir5_w)) MCFG_DEVICE_ADD("statuslatch", LS259, 0) // U14 @@ -547,7 +546,7 @@ MACHINE_CONFIG_START(isbc_state::isbc286) MCFG_ISBX_SLOT_MINTR0_CALLBACK(WRITELINE("pic_1", pic8259_device, ir5_w)) MCFG_ISBX_SLOT_MINTR1_CALLBACK(WRITELINE("pic_1", pic8259_device, ir6_w)) - MCFG_ISBC_215_ADD("isbc_215g", 0x100, "maincpu") + MCFG_DEVICE_ADD("isbc_215g", ISBC_215G, 0x100, "maincpu") MCFG_ISBC_215_IRQ(WRITELINE("pic_0", pic8259_device, ir5_w)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/m20.cpp b/src/mame/drivers/m20.cpp index c7fbcbfbc81..e63629fdecb 100644 --- a/src/mame/drivers/m20.cpp +++ b/src/mame/drivers/m20.cpp @@ -849,7 +849,7 @@ MACHINE_CONFIG_START(m20_state::m20) MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr) MCFG_RS232_RXD_HANDLER(WRITELINE("i8251_2", i8251_device, write_rxd)) - MCFG_DEVICE_ADD("apb", M20_8086, 0) + MCFG_DEVICE_ADD("apb", M20_8086, "maincpu", "i8259", RAM_TAG) MCFG_SOFTWARE_LIST_ADD("flop_list","m20") MACHINE_CONFIG_END diff --git a/src/mame/drivers/psx.cpp b/src/mame/drivers/psx.cpp index 0738e3adc3c..43957f067df 100644 --- a/src/mame/drivers/psx.cpp +++ b/src/mame/drivers/psx.cpp @@ -37,7 +37,8 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_ram(*this, "maincpu:ram"), - m_parallel(*this, "parallel") + m_parallel(*this, "parallel"), + m_psxcd(*this, PSXCD_TAG) { } @@ -73,6 +74,7 @@ public: void subcpu_map(address_map &map); private: required_device m_parallel; + required_device m_psxcd; }; @@ -494,8 +496,7 @@ QUICKLOAD_LOAD_MEMBER(psx1_state, psx_exe_load) void psx1_state::cd_dma_read( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size ) { uint8_t *psxram = (uint8_t *) p_n_psxram; - psxcd_device *psxcd = machine().device(PSXCD_TAG); - psxcd->start_dma(psxram + n_address, n_size*4); + m_psxcd->start_dma(psxram + n_address, n_size*4); } void psx1_state::cd_dma_write( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size ) @@ -552,7 +553,7 @@ MACHINE_CONFIG_START(psx1_state::psj) MCFG_PSX_CD_READ_HANDLER( READ8( PSXCD_TAG, psxcd_device, read ) ) MCFG_PSX_CD_WRITE_HANDLER( WRITE8( PSXCD_TAG, psxcd_device, write ) ) - MCFG_PSXCD_ADD(PSXCD_TAG, "cdrom") + MCFG_DEVICE_ADD(PSXCD_TAG, PSXCD, "maincpu", "spu") MCFG_PSXCD_IRQ_HANDLER(WRITELINE("maincpu:irq", psxirq_device, intin2)) MCFG_PSX_DMA_CHANNEL_READ( "maincpu", 3, psxdma_device::read_delegate(&psx1_state::cd_dma_read, this ) ) MCFG_PSX_DMA_CHANNEL_WRITE( "maincpu", 3, psxdma_device::write_delegate(&psx1_state::cd_dma_write, this ) ) @@ -604,7 +605,7 @@ MACHINE_CONFIG_START(psx1_state::pse) MCFG_PSX_CD_READ_HANDLER( READ8( PSXCD_TAG, psxcd_device, read ) ) MCFG_PSX_CD_WRITE_HANDLER( WRITE8( PSXCD_TAG, psxcd_device, write ) ) - MCFG_PSXCD_ADD(PSXCD_TAG, "cdrom") + MCFG_DEVICE_ADD(PSXCD_TAG, PSXCD, "maincpu", "spu") MCFG_PSXCD_IRQ_HANDLER(WRITELINE("maincpu:irq", psxirq_device, intin2)) MCFG_PSX_DMA_CHANNEL_READ( "maincpu", 3, psxdma_device::read_delegate(&psx1_state::cd_dma_read, this ) ) MCFG_PSX_DMA_CHANNEL_WRITE( "maincpu", 3, psxdma_device::write_delegate(&psx1_state::cd_dma_write, this ) ) diff --git a/src/mame/drivers/saturn.cpp b/src/mame/drivers/saturn.cpp index 3af7c418df9..f34c0d71ecf 100644 --- a/src/mame/drivers/saturn.cpp +++ b/src/mame/drivers/saturn.cpp @@ -432,7 +432,6 @@ test1f diagnostic hacks: #include "machine/smpc.h" #include "machine/stvcd.h" #include "machine/saturn_cdb.h" -#include "sound/scsp.h" #include "video/stvvdp1.h" #include "video/stvvdp2.h" @@ -458,7 +457,6 @@ public: , m_stvcd(*this, "stvcd") , m_ctrl1(*this, "ctrl1") , m_ctrl2(*this, "ctrl2") - , m_scsp(*this, "scsp") { } DECLARE_INPUT_CHANGED_MEMBER(tray_open); @@ -495,8 +493,6 @@ public: required_device m_ctrl1; required_device m_ctrl2; - required_device m_scsp; - void saturn(machine_config &config); void saturnjp(machine_config &config); void saturneu(machine_config &config); diff --git a/src/mame/drivers/stv.cpp b/src/mame/drivers/stv.cpp index 91740c5d8b1..cb044277fd7 100644 --- a/src/mame/drivers/stv.cpp +++ b/src/mame/drivers/stv.cpp @@ -1282,9 +1282,9 @@ image_init_result stv_state::load_cart(device_image_interface &image, generic_sl } -MACHINE_START_MEMBER(stv_state,stv) +MACHINE_START_MEMBER(stv_state, stv) { - machine().device("scsp")->set_ram_base(m_sound_ram); + m_scsp->set_ram_base(m_sound_ram); // save states // save_pointer(NAME(m_scu_regs.get()), 0x100/4); diff --git a/src/mame/drivers/sun3x.cpp b/src/mame/drivers/sun3x.cpp index 3da47d59ec9..2a368da8950 100644 --- a/src/mame/drivers/sun3x.cpp +++ b/src/mame/drivers/sun3x.cpp @@ -152,6 +152,7 @@ #define SCC2_TAG "scc2" #define ESP_TAG "esp" #define FDC_TAG "fdc" +#define FLOPPY_CONN_TAG "fdc:0" #define RS232A_TAG "rs232a" #define RS232B_TAG "rs232b" #define KEYBOARD_TAG "keyboard" @@ -165,6 +166,7 @@ public: m_scc1(*this, SCC1_TAG), m_scc2(*this, SCC2_TAG), m_fdc(*this, FDC_TAG), + m_floppy_connector(*this, FLOPPY_CONN_TAG), m_p_ram(*this, "p_ram"), m_bw2_vram(*this, "bw2_vram") { } @@ -173,6 +175,7 @@ public: required_device m_scc1; required_device m_scc2; optional_device m_fdc; + optional_device m_floppy_connector; virtual void machine_reset() override; required_shared_ptr m_p_ram; @@ -282,8 +285,9 @@ READ32_MEMBER( sun3x_state::fdc_control_r ) // 2 = hd // 3 = dd - if(m_fdc) { - floppy_image_device *fdev = machine().device(":fdc:0")->get_device(); + if (m_fdc) + { + floppy_image_device *fdev = m_floppy_connector->get_device(); if(fdev->exists()) { uint32_t variant = fdev->get_variant(); switch(variant) { diff --git a/src/mame/drivers/z100.cpp b/src/mame/drivers/z100.cpp index 904d8ae01f0..8247b366af9 100644 --- a/src/mame/drivers/z100.cpp +++ b/src/mame/drivers/z100.cpp @@ -174,18 +174,15 @@ public: m_floppy(nullptr) { } - required_device m_maincpu; - required_device m_pia0; - required_device m_pia1; - required_device m_picm; - required_device m_pics; - required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; - required_device m_floppy2; - required_device m_floppy3; - required_device m_crtc; - required_device m_palette; + void z100(machine_config &config); + + virtual void driver_init() override; + + DECLARE_INPUT_CHANGED_MEMBER(key_stroke); + +protected: + virtual void machine_reset() override; + virtual void video_start() override; DECLARE_READ8_MEMBER(z100_vram_r); DECLARE_WRITE8_MEMBER(z100_vram_w); @@ -201,28 +198,38 @@ public: DECLARE_WRITE8_MEMBER(video_pia_B_w); DECLARE_WRITE_LINE_MEMBER(video_pia_CA2_w); DECLARE_WRITE_LINE_MEMBER(video_pia_CB2_w); + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void z100_io(address_map &map); + void z100_mem(address_map &map); + + required_device m_maincpu; + required_device m_pia0; + required_device m_pia1; + required_device m_picm; + required_device m_pics; + required_device m_fdc; + required_device m_floppy0; + required_device m_floppy1; + required_device m_floppy2; + required_device m_floppy3; + required_device m_crtc; + required_device m_palette; + std::unique_ptr m_gvram; - uint8_t m_keyb_press,m_keyb_status; + uint8_t m_keyb_press; + uint8_t m_keyb_status; uint8_t m_vram_enable; uint8_t m_gbank; uint8_t m_display_mask; uint8_t m_flash; uint8_t m_clr_val; - uint8_t m_crtc_vreg[0x100],m_crtc_index; + uint8_t m_crtc_vreg[0x100]; + uint8_t m_crtc_index; uint16_t m_start_addr; floppy_image_device *m_floppy; - - mc6845_device *m_mc6845; - void init_z100(); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - uint32_t screen_update_z100(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_INPUT_CHANGED_MEMBER(key_stroke); - void z100(machine_config &config); - void z100_io(address_map &map); - void z100_mem(address_map &map); }; #define mc6845_h_char_total (m_crtc_vreg[0]) @@ -248,7 +255,7 @@ void z100_state::video_start() m_gvram = make_unique_clear(0x30000); } -uint32_t z100_state::screen_update_z100(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t z100_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int x,y,xi,yi; int dot; @@ -646,11 +653,6 @@ WRITE_LINE_MEMBER( z100_state::video_pia_CB2_w ) m_clr_val = (state & 1) ? 0x00 : 0xff; } -void z100_state::machine_start() -{ - m_mc6845 = machine().device("crtc"); -} - void z100_state::machine_reset() { int i; @@ -685,7 +687,7 @@ MACHINE_CONFIG_START(z100_state::z100) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ MCFG_SCREEN_SIZE(640, 480) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) - MCFG_SCREEN_UPDATE_DRIVER(z100_state, screen_update_z100) + MCFG_SCREEN_UPDATE_DRIVER(z100_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_PALETTE_ADD("palette", 8) @@ -729,7 +731,7 @@ ROM_START( z100 ) ROM_LOAD( "mcu", 0x0000, 0x1000, NO_DUMP ) ROM_END -void z100_state::init_z100() +void z100_state::driver_init() { uint8_t *ROM = memregion("ipl")->base(); @@ -742,5 +744,5 @@ void z100_state::init_z100() /* Driver */ -// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS -COMP( 1982, z100, 0, 0, z100, z100, z100_state, init_z100, "Zenith", "Z-100", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS +COMP( 1982, z100, 0, 0, z100, z100, z100_state, driver_init, "Zenith", "Z-100", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) diff --git a/src/mame/includes/saturn.h b/src/mame/includes/saturn.h index 0da6e1067ea..716da438d50 100644 --- a/src/mame/includes/saturn.h +++ b/src/mame/includes/saturn.h @@ -5,22 +5,24 @@ #pragma once -#include "machine/timer.h" +#include "bus/generic/slot.h" +#include "bus/generic/carts.h" + #include "cpu/m68000/m68000.h" -#include "machine/sega_scu.h" -#include "machine/smpc.h" #include "cpu/sh/sh2.h" -#include "bus/generic/slot.h" -#include "bus/generic/carts.h" +#include "debug/debugcon.h" +#include "debug/debugcmd.h" #include "machine/315-5881_crypt.h" #include "machine/315-5838_317-0229_comp.h" +#include "machine/sega_scu.h" +#include "machine/smpc.h" +#include "machine/timer.h" -#include "debug/debugcon.h" -#include "debug/debugcmd.h" -#include "debugger.h" +#include "sound/scsp.h" +#include "debugger.h" #include "emupal.h" #include "screen.h" @@ -37,6 +39,7 @@ public: m_maincpu(*this, "maincpu"), m_slave(*this, "slave"), m_audiocpu(*this, "audiocpu"), + m_scsp(*this, "scsp"), m_smpc_hle(*this, "smpc"), m_scu(*this, "scu"), m_gfxdecode(*this, "gfxdecode"), @@ -107,6 +110,7 @@ public: required_device m_maincpu; required_device m_slave; required_device m_audiocpu; + required_device m_scsp; required_device m_smpc_hle; required_device m_scu; required_device m_gfxdecode; diff --git a/src/mame/machine/acs8600_ics.cpp b/src/mame/machine/acs8600_ics.cpp index a3439f1da02..3b63cc119aa 100644 --- a/src/mame/machine/acs8600_ics.cpp +++ b/src/mame/machine/acs8600_ics.cpp @@ -15,6 +15,7 @@ DEFINE_DEVICE_TYPE(ACS8600_ICS, acs8600_ics_device, "acs8600_ics", "Altos ACS860 acs8600_ics_device::acs8600_ics_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, ACS8600_ICS, tag, owner, clock), m_icscpu(*this, "icscpu"), + m_maincpu(*this, finder_base::DUMMY_TAG), m_out_irq1_func(*this), m_out_irq2_func(*this) { @@ -195,7 +196,7 @@ MACHINE_CONFIG_END void acs8600_ics_device::device_start() { - m_maincpu_mem = &machine().device(m_maincpu_tag)->space(AS_PROGRAM); + m_maincpu_mem = &m_maincpu->space(AS_PROGRAM); m_out_irq1_func.resolve_safe(); m_out_irq2_func.resolve_safe(); } diff --git a/src/mame/machine/acs8600_ics.h b/src/mame/machine/acs8600_ics.h index 14f47fe9d81..ef8f99c56bd 100644 --- a/src/mame/machine/acs8600_ics.h +++ b/src/mame/machine/acs8600_ics.h @@ -6,11 +6,16 @@ #pragma once - - class acs8600_ics_device : public device_t { public: + template + acs8600_ics_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&maincpu_tag) + : acs8600_ics_device(mconfig, tag, owner, (uint32_t)0) + { + m_maincpu.set_tag(std::forward(maincpu_tag)); + } + acs8600_ics_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); DECLARE_WRITE8_MEMBER(hiaddr_w); @@ -21,7 +26,6 @@ public: template devcb_base &set_irq1_callback(Object &&cb) { return m_out_irq1_func.set_callback(std::forward(cb)); } template devcb_base &set_irq2_callback(Object &&cb) { return m_out_irq2_func.set_callback(std::forward(cb)); } - void set_maincpu_tag(const char *maincpu_tag) { m_maincpu_tag = maincpu_tag; } const tiny_rom_entry *device_rom_region() const override; void ics_io(address_map &map); @@ -32,14 +36,13 @@ protected: private: required_device m_icscpu; + required_device m_maincpu; devcb_write_line m_out_irq1_func; devcb_write_line m_out_irq2_func; - const char *m_maincpu_tag; address_space *m_maincpu_mem; - u8 m_hiaddr, m_ctrl; + u8 m_hiaddr; + u8 m_ctrl; }; -#define MCFG_ACS8600_ICS_MAINCPU(_maincpu_tag) \ - downcast(*device).set_maincpu_tag(_maincpu_tag); #define MCFG_ACS8600_ICS_IRQ1(_irq_line) \ devcb = &downcast(*device).set_irq1_callback(DEVCB_##_irq_line); diff --git a/src/mame/machine/bbc.cpp b/src/mame/machine/bbc.cpp index e7b28620c5a..0497c33e003 100644 --- a/src/mame/machine/bbc.cpp +++ b/src/mame/machine/bbc.cpp @@ -677,7 +677,6 @@ void bbc_state::bbcb_IC32_initialise(bbc_state *state) void bbc_state::MC146818_set(address_space &space) { //logerror ("146181 WR=%d DS=%d AS=%d CE=%d \n",m_MC146818_WR,m_MC146818_DS,m_MC146818_AS,m_MC146818_CE); - //mc146818_device *rtc = machine().device("rtc"); // if chip enabled if (m_MC146818_CE) diff --git a/src/mame/machine/isbc_208.cpp b/src/mame/machine/isbc_208.cpp index 27c02772d78..3771bb03932 100644 --- a/src/mame/machine/isbc_208.cpp +++ b/src/mame/machine/isbc_208.cpp @@ -13,9 +13,11 @@ DEFINE_DEVICE_TYPE(ISBC_208, isbc_208_device, "isbc_208", "ISBC 208 Flexible Dis isbc_208_device::isbc_208_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, ISBC_208, tag, owner, clock), + m_maincpu(*this, finder_base::DUMMY_TAG), m_dmac(*this, "dmac"), m_fdc(*this, "fdc"), - m_out_irq_func(*this) + m_out_irq_func(*this), + m_maincpu_mem(nullptr) { } @@ -65,7 +67,7 @@ WRITE_LINE_MEMBER(isbc_208_device::irq_w) WRITE_LINE_MEMBER(isbc_208_device::hreq_w) { - machine().device(m_maincpu_tag)->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE); + m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE); /* Assert HLDA */ m_dmac->hack_w(state); } @@ -121,7 +123,7 @@ void isbc_208_device::device_reset() void isbc_208_device::device_start() { - m_maincpu_mem = &machine().device(m_maincpu_tag)->space(AS_PROGRAM); + m_maincpu_mem = &m_maincpu->space(AS_PROGRAM); m_out_irq_func.resolve_safe(); } diff --git a/src/mame/machine/isbc_208.h b/src/mame/machine/isbc_208.h index 97116b8a32c..f05cd797907 100644 --- a/src/mame/machine/isbc_208.h +++ b/src/mame/machine/isbc_208.h @@ -12,6 +12,13 @@ class isbc_208_device : public device_t { public: + template + isbc_208_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&cpu_tag) + : isbc_208_device(mconfig, tag, owner, (uint32_t)0) + { + m_maincpu.set_tag(std::forward(cpu_tag)); + } + isbc_208_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); void map(address_map &map); @@ -19,7 +26,6 @@ public: DECLARE_WRITE8_MEMBER(aux_w); template devcb_base &set_irq_callback(Object &&cb) { return m_out_irq_func.set_callback(std::forward(cb)); } - void set_maincpu_tag(const char *maincpu_tag) { m_maincpu_tag = maincpu_tag; } protected: virtual void device_start() override; @@ -27,13 +33,13 @@ protected: virtual void device_add_mconfig(machine_config &config) override; private: + required_device m_maincpu; required_device m_dmac; required_device m_fdc; devcb_write_line m_out_irq_func; u8 m_aux; u16 m_seg; - const char *m_maincpu_tag; address_space *m_maincpu_mem; DECLARE_WRITE_LINE_MEMBER(out_eop_w); @@ -43,8 +49,6 @@ private: DECLARE_WRITE_LINE_MEMBER(irq_w); DECLARE_FLOPPY_FORMATS( floppy_formats ); }; -#define MCFG_ISBC_208_MAINCPU(_maincpu_tag) \ - downcast(*device).set_maincpu_tag(_maincpu_tag); #define MCFG_ISBC_208_IRQ(_irq_line) \ devcb = &downcast(*device).set_irq_callback(DEVCB_##_irq_line); diff --git a/src/mame/machine/isbc_215g.cpp b/src/mame/machine/isbc_215g.cpp index e04cc7e30b0..05f65fea8b6 100644 --- a/src/mame/machine/isbc_215g.cpp +++ b/src/mame/machine/isbc_215g.cpp @@ -13,6 +13,7 @@ DEFINE_DEVICE_TYPE(ISBC_215G, isbc_215g_device, "isbc_215g", "ISBC 215G Winchest isbc_215g_device::isbc_215g_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, ISBC_215G, tag, owner, clock), + m_maincpu(*this, finder_base::DUMMY_TAG), m_dmac(*this, "u84"), m_hdd0(*this, "drive0"), m_hdd1(*this, "drive1"), @@ -399,7 +400,7 @@ void isbc_215g_device::device_reset() void isbc_215g_device::device_start() { - m_maincpu_mem = &machine().device(m_maincpu_tag)->space(AS_PROGRAM); + m_maincpu_mem = &m_maincpu->space(AS_PROGRAM); m_cyl[0] = m_cyl[1] = 0; m_lba[0] = m_lba[1] = 0; m_idcompare[0] = m_idcompare[1] = m_idcompare[2] = m_idcompare[3] = 0; diff --git a/src/mame/machine/isbc_215g.h b/src/mame/machine/isbc_215g.h index 9c761541836..565d742f1de 100644 --- a/src/mame/machine/isbc_215g.h +++ b/src/mame/machine/isbc_215g.h @@ -13,18 +13,24 @@ class isbc_215g_device : public device_t { public: + template + isbc_215g_device(const machine_config &mconfig, const char *tag, device_t *owner, uint16_t wakeup, T &&cpu_tag) + : isbc_215g_device(mconfig, tag, owner, (uint32_t)0) + { + m_wakeup = wakeup; + m_maincpu.set_tag(std::forward(cpu_tag)); + } + isbc_215g_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template devcb_base &set_irq_callback(Object &&cb) { return m_out_irq_func.set_callback(std::forward(cb)); } + DECLARE_WRITE8_MEMBER(write); DECLARE_READ16_MEMBER(io_r); DECLARE_WRITE16_MEMBER(io_w); DECLARE_READ16_MEMBER(mem_r); DECLARE_WRITE16_MEMBER(mem_w); - void set_wakeup_addr(uint32_t wakeup) { m_wakeup = wakeup; } - void set_maincpu_tag(const char *maincpu_tag) { m_maincpu_tag = maincpu_tag; } - template devcb_base &set_irq_callback(Object &&cb) { return m_out_irq_func.set_callback(std::forward(cb)); } - void isbc_215g_io(address_map &map); void isbc_215g_mem(address_map &map); protected: @@ -38,6 +44,7 @@ private: uint16_t read_sector(); bool write_sector(uint16_t data); + required_device m_maincpu; required_device m_dmac; required_device m_hdd0; required_device m_hdd1; @@ -47,16 +54,27 @@ private: devcb_write_line m_out_irq_func; int m_reset; - uint16_t m_wakeup, m_secoffset, m_sector[512]; - const char *m_maincpu_tag; + uint16_t m_wakeup; + uint16_t m_secoffset; + uint16_t m_sector[512]; address_space *m_maincpu_mem; uint32_t m_lba[2]; uint16_t m_cyl[2]; - uint8_t m_idcompare[4], m_drive, m_head, m_index; + uint8_t m_idcompare[4]; + uint8_t m_drive; + uint8_t m_head; + uint8_t m_index; int8_t m_format_bytes; - bool m_idfound, m_stepdir, m_wrgate, m_rdgate, m_amsrch; + bool m_idfound; + bool m_stepdir; + bool m_wrgate; + bool m_rdgate; + bool m_amsrch; - bool m_isbx_irq[4], m_fdctc, m_step, m_format; + bool m_isbx_irq[4]; + bool m_fdctc; + bool m_step; + bool m_format; const struct hard_disk_info* m_geom[2]; @@ -66,11 +84,6 @@ private: DECLARE_WRITE_LINE_MEMBER(isbx_irq_11_w); }; -#define MCFG_ISBC_215_ADD(_tag, _wakeup, _maincpu_tag) \ - MCFG_DEVICE_ADD(_tag, ISBC_215G, 0) \ - downcast(*device).set_wakeup_addr(_wakeup); \ - downcast(*device).set_maincpu_tag(_maincpu_tag); - #define MCFG_ISBC_215_IRQ(_irq_line) \ devcb = &downcast(*device).set_irq_callback(DEVCB_##_irq_line); diff --git a/src/mame/machine/m20_8086.cpp b/src/mame/machine/m20_8086.cpp index 8685fd43e84..d479a1b2590 100644 --- a/src/mame/machine/m20_8086.cpp +++ b/src/mame/machine/m20_8086.cpp @@ -2,23 +2,23 @@ // copyright-holders:Carl #include "emu.h" #include "m20_8086.h" -#include "machine/ram.h" DEFINE_DEVICE_TYPE(M20_8086, m20_8086_device, "m20_8086", "Olivetti M20 8086 Adapter") m20_8086_device::m20_8086_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, M20_8086, tag, owner, clock), m_8086(*this, "8086"), - m_maincpu(*this, ":maincpu"), - m_pic(*this, ":i8259"), + m_maincpu(*this, finder_base::DUMMY_TAG), + m_pic(*this, finder_base::DUMMY_TAG), + m_ram(*this, finder_base::DUMMY_TAG), m_8086_halt(true) { } void m20_8086_device::device_start() { - uint8_t* ram = machine().device("ram")->pointer(); - m_8086->space(AS_PROGRAM).install_readwrite_bank(0x00000, machine().device("ram")->size() - 0x4001, "mainram"); + uint8_t* ram = m_ram->pointer(); + m_8086->space(AS_PROGRAM).install_readwrite_bank(0x00000, m_ram->size() - 0x4001, "mainram"); membank("highram")->set_base(ram); membank("mainram")->set_base(&ram[0x4000]); membank("vram")->set_base(memshare(":videoram")->ptr()); diff --git a/src/mame/machine/m20_8086.h b/src/mame/machine/m20_8086.h index 7f58cc3b6d4..c0ec8c7588a 100644 --- a/src/mame/machine/m20_8086.h +++ b/src/mame/machine/m20_8086.h @@ -5,10 +5,20 @@ #include "cpu/i86/i86.h" #include "machine/pic8259.h" +#include "machine/ram.h" class m20_8086_device : public device_t { public: + template + m20_8086_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&maincpu_tag, U &&pic_tag, V &&ram_tag) + : m20_8086_device(mconfig, tag, owner, (uint32_t)0) + { + m_maincpu.set_tag(std::forward(maincpu_tag)); + m_pic.set_tag(std::forward(pic_tag)); + m_ram.set_tag(std::forward(ram_tag)); + } + m20_8086_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); DECLARE_READ16_MEMBER(z8000_io_r); @@ -32,6 +42,7 @@ private: required_device m_8086; required_device m_maincpu; required_device m_pic; + required_device m_ram; bool m_8086_halt; int m_nvi, m_vi; diff --git a/src/mame/machine/psxcd.cpp b/src/mame/machine/psxcd.cpp index 7632adcac58..a268f7a963f 100644 --- a/src/mame/machine/psxcd.cpp +++ b/src/mame/machine/psxcd.cpp @@ -87,7 +87,9 @@ DEFINE_DEVICE_TYPE(PSXCD, psxcd_device, "psx_cd", "PSX CD-ROM") psxcd_device::psxcd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : cdrom_image_device(mconfig, PSXCD, tag, owner, clock), - m_irq_handler(*this) + m_irq_handler(*this), + m_maincpu(*this, finder_base::DUMMY_TAG), + m_spu(*this, finder_base::DUMMY_TAG) { set_interface("psx_cdrom"); } @@ -98,9 +100,6 @@ void psxcd_device::device_start() cdrom_image_device::device_start(); m_irq_handler.resolve_safe(); - m_maincpu = machine().device("maincpu"); - m_spu = machine().device("spu"); - unsigned int sysclk=m_maincpu->clock()/2; start_read_delay=(sysclk/60); read_sector_cycles=(sysclk/75); diff --git a/src/mame/machine/psxcd.h b/src/mame/machine/psxcd.h index efb36dc51db..dd9b19dfbe4 100644 --- a/src/mame/machine/psxcd.h +++ b/src/mame/machine/psxcd.h @@ -12,15 +12,20 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_PSXCD_ADD(_tag, _devname) \ - MCFG_DEVICE_ADD(_tag, PSXCD, 0) - #define MCFG_PSXCD_IRQ_HANDLER(_devcb) \ devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); class psxcd_device : public cdrom_image_device { public: + template + psxcd_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&cpu_tag, U &&spu_tag) + : psxcd_device(mconfig, tag, owner, (uint32_t)0) + { + m_maincpu.set_tag(std::forward(cpu_tag)); + m_spu.set_tag(std::forward(spu_tag)); + } + psxcd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // configuration helpers @@ -151,10 +156,9 @@ private: emu_timer *m_timers[MAX_PSXCD_TIMERS]; bool m_timerinuse[MAX_PSXCD_TIMERS]; - devcb_write_line m_irq_handler; - cpu_device *m_maincpu; - spu_device *m_spu; + required_device m_maincpu; + required_device m_spu; }; // device type definition -- cgit v1.2.3