From 2c7e42261a60de2fa4acf276d837034fd03bd7c9 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sat, 14 Jul 2018 04:21:03 +1000 Subject: witness the power of devcb3 to tear through boilerplate (in Taito C-Chip), also misc cleanup/MCFG_ reduction (nw) --- src/devices/cpu/upd7810/upd7810.h | 27 ++++- src/mame/drivers/arkanoid.cpp | 20 ++-- src/mame/drivers/asuka.cpp | 12 +-- src/mame/drivers/macs.cpp | 47 ++++----- src/mame/drivers/mlanding.cpp | 6 +- src/mame/drivers/neogeo.cpp | 18 ++-- src/mame/drivers/opwolf.cpp | 2 +- src/mame/drivers/patapata.cpp | 3 +- src/mame/drivers/piratesh.cpp | 63 +++++------ src/mame/drivers/pturn.cpp | 7 +- src/mame/drivers/rbisland.cpp | 12 +-- src/mame/drivers/segas32.cpp | 4 +- src/mame/drivers/slapfght.cpp | 6 +- src/mame/drivers/taito_f2.cpp | 2 +- src/mame/drivers/taito_x.cpp | 10 +- src/mame/drivers/taitoair.cpp | 2 +- src/mame/drivers/volfied.cpp | 12 +-- src/mame/includes/arkanoid.h | 2 - src/mame/includes/rbisland.h | 4 +- src/mame/includes/taitoair.h | 40 ++++--- src/mame/includes/volfied.h | 4 +- src/mame/machine/ng_memcard.h | 27 ++--- src/mame/machine/s32comm.h | 2 - src/mame/machine/st0016.h | 12 +-- src/mame/machine/taito68705interface.h | 18 +--- src/mame/machine/taitocchip.cpp | 187 ++++++++++----------------------- src/mame/machine/taitocchip.h | 67 ++---------- src/mame/machine/taitoio_yoke.h | 22 +--- 28 files changed, 252 insertions(+), 386 deletions(-) diff --git a/src/devices/cpu/upd7810/upd7810.h b/src/devices/cpu/upd7810/upd7810.h index 497ffc0acb7..810a1578c48 100644 --- a/src/devices/cpu/upd7810/upd7810.h +++ b/src/devices/cpu/upd7810/upd7810.h @@ -144,6 +144,19 @@ public: template devcb_base &set_an5_func(Object &&cb) { return m_an5_func.set_callback(std::forward(cb)); } template devcb_base &set_an6_func(Object &&cb) { return m_an6_func.set_callback(std::forward(cb)); } template devcb_base &set_an7_func(Object &&cb) { return m_an7_func.set_callback(std::forward(cb)); } + auto to_func() { return m_to_func.bind(); } + auto co0_func() { return m_co0_func.bind(); } + auto co1_func() { return m_co1_func.bind(); } + auto txd_func() { return m_txd_func.bind(); } + auto rxd_func() { return m_rxd_func.bind(); } + auto an0_func() { return m_an0_func.bind(); } + auto an1_func() { return m_an1_func.bind(); } + auto an2_func() { return m_an2_func.bind(); } + auto an3_func() { return m_an3_func.bind(); } + auto an4_func() { return m_an4_func.bind(); } + auto an5_func() { return m_an5_func.bind(); } + auto an6_func() { return m_an6_func.bind(); } + auto an7_func() { return m_an7_func.bind(); } template devcb_base &set_pa_in_cb(Object &&cb) { return m_pa_in_cb.set_callback(std::forward(cb)); } template devcb_base &set_pb_in_cb(Object &&cb) { return m_pb_in_cb.set_callback(std::forward(cb)); } @@ -155,8 +168,19 @@ public: template devcb_base &set_pc_out_cb(Object &&cb) { return m_pc_out_cb.set_callback(std::forward(cb)); } template devcb_base &set_pd_out_cb(Object &&cb) { return m_pd_out_cb.set_callback(std::forward(cb)); } template devcb_base &set_pf_out_cb(Object &&cb) { return m_pf_out_cb.set_callback(std::forward(cb)); } + auto pa_in_cb() { return m_pa_in_cb.bind(); } + auto pb_in_cb() { return m_pb_in_cb.bind(); } + auto pc_in_cb() { return m_pc_in_cb.bind(); } + auto pd_in_cb() { return m_pd_in_cb.bind(); } + auto pf_in_cb() { return m_pf_in_cb.bind(); } + auto pa_out_cb() { return m_pa_out_cb.bind(); } + auto pb_out_cb() { return m_pb_out_cb.bind(); } + auto pc_out_cb() { return m_pc_out_cb.bind(); } + auto pd_out_cb() { return m_pd_out_cb.bind(); } + auto pf_out_cb() { return m_pf_out_cb.bind(); } template devcb_base &set_pt_in_cb(Object &&cb) { return m_pt_in_cb.set_callback(std::forward(cb)); } + auto pt_in_cb() { return m_pt_in_cb.bind(); } DECLARE_WRITE8_MEMBER(pa_w); DECLARE_WRITE8_MEMBER(pb_w); @@ -164,10 +188,11 @@ public: DECLARE_WRITE8_MEMBER(pd_w); DECLARE_WRITE8_MEMBER(pf_w); +protected: void upd_internal_128_ram_map(address_map &map); void upd_internal_256_ram_map(address_map &map); void upd_internal_4096_rom_map(address_map &map); -protected: + // flags enum { diff --git a/src/mame/drivers/arkanoid.cpp b/src/mame/drivers/arkanoid.cpp index 7a077bb8a7b..382aad2af90 100644 --- a/src/mame/drivers/arkanoid.cpp +++ b/src/mame/drivers/arkanoid.cpp @@ -1350,8 +1350,8 @@ MACHINE_CONFIG_START(arkanoid_state::arkanoid) MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 128); // 74LS393 at ic21, counts 128 vblanks before firing watchdog; z80 /RESET ls08 ic19 pin 9 input comes from ls04 ic20 pin 8, ls04 ic20 pin 9 input comes from ic21 ls393 pin 8, and ls393 is set to chain both 4 bit counters together - MCFG_DEVICE_ADD("mcu", ARKANOID_68705P5, XTAL(12'000'000)/4) /* verified on pcb */ - MCFG_ARKANOID_MCU_PORTB_R_CB(IOPORT("MUX")) + ARKANOID_68705P5(config, m_mcuintf, 12_MHz_XTAL / 4); // verified on PCB + m_mcuintf->portb_r_cb().set_ioport("MUX"); MCFG_QUANTUM_TIME(attotime::from_hz(6000)) // 100 CPU slices per second to synchronize between the MCU and the main CPU @@ -1378,20 +1378,17 @@ MACHINE_CONFIG_START(arkanoid_state::arkanoid) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.66) MACHINE_CONFIG_END -MACHINE_CONFIG_START(arkanoid_state::p3mcu) +void arkanoid_state::p3mcu(machine_config &config) +{ arkanoid(config); /* unprotected MCU */ - MCFG_DEVICE_REPLACE("mcu", ARKANOID_68705P3, XTAL(12'000'000)/4) - MCFG_ARKANOID_MCU_PORTB_R_CB(IOPORT("MUX")) -MACHINE_CONFIG_END + ARKANOID_68705P3(config.replace(), m_mcuintf, 12_MHz_XTAL / 4); + m_mcuintf->portb_r_cb().set_ioport("MUX"); +} MACHINE_CONFIG_START(arkanoid_state::p3mcuay) - arkanoid(config); - - /* unprotected MCU */ - MCFG_DEVICE_REPLACE("mcu", ARKANOID_68705P3, XTAL(12'000'000)/4) - MCFG_ARKANOID_MCU_PORTB_R_CB(IOPORT("MUX")) + p3mcu(config); MCFG_DEVICE_REPLACE("aysnd", AY8910, XTAL(12'000'000)/4) // AY-3-8910A MCFG_AY8910_OUTPUT_TYPE(AY8910_SINGLE_OUTPUT) @@ -1412,6 +1409,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(arkanoid_state::aysnd) bootleg(config); + MCFG_DEVICE_REPLACE("aysnd", AY8910, XTAL(12'000'000)/4) MCFG_AY8910_OUTPUT_TYPE(AY8910_SINGLE_OUTPUT) MCFG_AY8910_PORT_A_READ_CB(IOPORT("UNUSED")) diff --git a/src/mame/drivers/asuka.cpp b/src/mame/drivers/asuka.cpp index 5cc1f8158c2..b8e9ecf50ef 100644 --- a/src/mame/drivers/asuka.cpp +++ b/src/mame/drivers/asuka.cpp @@ -847,12 +847,12 @@ MACHINE_CONFIG_START(asuka_state::bonzeadv) MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(16'000'000)/4) /* sound CPU, also required for test mode */ MCFG_DEVICE_PROGRAM_MAP(bonzeadv_z80_map) - MCFG_TAITO_CCHIP_ADD("cchip", XTAL(12'000'000)) /* 12MHz OSC near C-Chip */ - MCFG_CCHIP_IN_PORTA_CB(IOPORT("800007")) - MCFG_CCHIP_IN_PORTB_CB(IOPORT("800009")) - MCFG_CCHIP_IN_PORTC_CB(IOPORT("80000B")) - MCFG_CCHIP_IN_PORTAD_CB(IOPORT("80000D")) - MCFG_CCHIP_OUT_PORTB_CB(WRITE8(*this, asuka_state, counters_w)) + TAITO_CCHIP(config, m_cchip, 12_MHz_XTAL); // 12MHz OSC near C-Chip + m_cchip->in_pa_callback().set_ioport("800007"); + m_cchip->in_pb_callback().set_ioport("800009"); + m_cchip->in_pc_callback().set_ioport("80000B"); + m_cchip->in_ad_callback().set_ioport("80000D"); + m_cchip->out_pb_callback().set(FUNC(asuka_state::counters_w)); MCFG_TIMER_DRIVER_ADD("cchip_irq_clear", asuka_state, cchip_irq_clear_cb) diff --git a/src/mame/drivers/macs.cpp b/src/mame/drivers/macs.cpp index cffce4b66a1..f125fbb37a1 100644 --- a/src/mame/drivers/macs.cpp +++ b/src/mame/drivers/macs.cpp @@ -67,15 +67,15 @@ class macs_state : public driver_device { public: macs_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_cart_bank(0), - m_ram2(*this, "ram2"), - m_maincpu(*this,"maincpu"), - m_cart1(*this, "slot_a"), - m_cart2(*this, "slot_b"), - m_rombank(*this, "rombank%u", 1), - m_rambank(*this, "rambank%u", 1) - { } + : driver_device(mconfig, type, tag) + , m_cart_bank(0) + , m_ram2(*this, "ram2") + , m_maincpu(*this,"maincpu") + , m_cart1(*this, "slot_a") + , m_cart2(*this, "slot_b") + , m_rombank(*this, "rombank%u", 1) + , m_rambank(*this, "rambank%u", 1) + { } void macs(machine_config &config); @@ -96,7 +96,7 @@ private: DECLARE_WRITE8_MEMBER(macs_output_w); DECLARE_MACHINE_RESET(macs); DECLARE_MACHINE_START(macs); - ST0016_DMA_OFFS_CB(dma_offset); + uint8_t dma_offset(); uint32_t screen_update_macs(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -494,31 +494,30 @@ uint32_t macs_state::screen_update_macs(screen_device &screen, bitmap_ind16 &bit } -ST0016_DMA_OFFS_CB(macs_state::dma_offset) +uint8_t macs_state::dma_offset() { return m_cart_bank; } MACHINE_CONFIG_START(macs_state::macs) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",ST0016_CPU,8000000) /* 8 MHz ? */ - MCFG_DEVICE_PROGRAM_MAP(macs_mem) - MCFG_DEVICE_IO_MAP(macs_io) - MCFG_ST0016_DMA_OFFS_CB(macs_state, dma_offset) - - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", macs_state, irq0_line_hold) + ST0016_CPU(config, m_maincpu, 8000000); // 8 MHz ? + m_maincpu->set_memory_map(&macs_state::macs_mem); + m_maincpu->set_io_map(&macs_state::macs_io); + m_maincpu->set_dma_offs_callback(FUNC(macs_state::dma_offset), this); MCFG_MACHINE_START_OVERRIDE(macs_state, macs) MCFG_MACHINE_RESET_OVERRIDE(macs_state, macs) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(128*8, 128*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 128*8-1, 0*8, 128*8-1) - MCFG_SCREEN_UPDATE_DRIVER(macs_state, screen_update_macs) - MCFG_SCREEN_PALETTE("maincpu:palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(128*8, 128*8); + screen.set_visarea(0*8, 128*8-1, 0*8, 128*8-1); + screen.set_screen_update(FUNC(macs_state::screen_update_macs)); + screen.set_palette("maincpu:palette"); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_IRQ0, HOLD_LINE); // FIXME: HOLD_LINE is bad juju MCFG_GENERIC_CARTSLOT_ADD_WITH_DEFAULT("slot_a", generic_plain_slot, "macs_cart", "rom") MCFG_SET_IMAGE_LOADABLE(false) diff --git a/src/mame/drivers/mlanding.cpp b/src/mame/drivers/mlanding.cpp index a3a25fd5c4d..f29aa84e7c9 100644 --- a/src/mame/drivers/mlanding.cpp +++ b/src/mame/drivers/mlanding.cpp @@ -70,8 +70,8 @@ class mlanding_state : public driver_device { public: - mlanding_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + mlanding_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_subcpu(*this, "subcpu"), m_dsp(*this, "dsp"), @@ -959,7 +959,7 @@ MACHINE_CONFIG_START(mlanding_state::mlanding) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_TAITOIO_YOKE_ADD("yokectrl") + TAITOIO_YOKE(config, m_yoke, 0); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/neogeo.cpp b/src/mame/drivers/neogeo.cpp index fcbad852f34..5784a4421ef 100644 --- a/src/mame/drivers/neogeo.cpp +++ b/src/mame/drivers/neogeo.cpp @@ -1017,7 +1017,7 @@ CUSTOM_INPUT_MEMBER(neogeo_base_state::get_memcard_status) { // D0 and D1 are memcard 1 and 2 presence indicators, D2 indicates memcard // write protect status (we are always write enabled) - return (!m_memcard || (m_memcard->present() == -1)) ? 0x07 : 0x00; + return (!m_memcard || !m_memcard->present()) ? 0x07 : 0x00; } @@ -1027,7 +1027,7 @@ READ16_MEMBER(neogeo_base_state::memcard_r) uint16_t ret; - if (m_memcard->present() != -1) + if (m_memcard->present()) ret = m_memcard->read(space, offset) | 0xff00; else ret = 0xffff; @@ -1042,7 +1042,7 @@ WRITE16_MEMBER(neogeo_base_state::memcard_w) if (ACCESSING_BITS_0_7) { - if (m_memcard->present() != -1) + if (m_memcard->present()) m_memcard->write(space, offset, data); } } @@ -1990,7 +1990,7 @@ MACHINE_CONFIG_START(mvs_led_state::mv1) neogeo_arcade(config); neogeo_stereo(config); - MCFG_NEOGEO_MEMCARD_ADD("memcard") + NG_MEMCARD(config, m_memcard, 0); MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge, "joy", false) @@ -2031,7 +2031,7 @@ MACHINE_CONFIG_START(mvs_led_el_state::mv2f) neogeo_arcade(config); neogeo_stereo(config); - MCFG_NEOGEO_MEMCARD_ADD("memcard") + NG_MEMCARD(config, m_memcard, 0); MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge, "joy", false) @@ -2048,7 +2048,7 @@ MACHINE_CONFIG_START(mvs_led_el_state::mv4f) neogeo_arcade(config); neogeo_stereo(config); - MCFG_NEOGEO_MEMCARD_ADD("memcard") + NG_MEMCARD(config, m_memcard, 0); MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge, "joy", false) @@ -2067,7 +2067,7 @@ MACHINE_CONFIG_START(mvs_led_el_state::mv6f) neogeo_arcade(config); neogeo_stereo(config); - MCFG_NEOGEO_MEMCARD_ADD("memcard") + NG_MEMCARD(config, m_memcard, 0); MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge, "joy", false) @@ -2088,7 +2088,7 @@ MACHINE_CONFIG_START(mvs_led_state::mv1_fixed) neogeo_arcade(config); neogeo_stereo(config); - MCFG_NEOGEO_MEMCARD_ADD("memcard") + NG_MEMCARD(config, m_memcard, 0); MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge, "joy", true) @@ -2133,7 +2133,7 @@ MACHINE_CONFIG_START(aes_state::aes) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(aes_main_map) - MCFG_NEOGEO_MEMCARD_ADD("memcard") + NG_MEMCARD(config, m_memcard, 0); MCFG_NEOGEO_CARTRIDGE_ADD("cslot1", neogeo_cart, nullptr) diff --git a/src/mame/drivers/opwolf.cpp b/src/mame/drivers/opwolf.cpp index f6f4b621627..8a69d1b7917 100644 --- a/src/mame/drivers/opwolf.cpp +++ b/src/mame/drivers/opwolf.cpp @@ -792,7 +792,7 @@ MACHINE_CONFIG_START(opwolf_state::opwolf) MCFG_DEVICE_ADD("audiocpu", Z80, SOUND_CPU_CLOCK ) /* 4 MHz */ MCFG_DEVICE_PROGRAM_MAP(opwolf_sound_z80_map) - MCFG_TAITO_CCHIP_ADD("cchip", XTAL(12'000'000)) /* 12MHz measured on pin 20 */ + TAITO_CCHIP(config, m_cchip, 12_MHz_XTAL); /* 12MHz measured on pin 20 */ MCFG_QUANTUM_TIME(attotime::from_hz(600)) /* 10 CPU slices per frame - enough for the sound CPU to read all commands */ diff --git a/src/mame/drivers/patapata.cpp b/src/mame/drivers/patapata.cpp index abd03e00832..8618f8d3a83 100644 --- a/src/mame/drivers/patapata.cpp +++ b/src/mame/drivers/patapata.cpp @@ -43,7 +43,7 @@ public: void patapata(machine_config &config); -private: +protected: DECLARE_WRITE16_MEMBER(bg_videoram_w); DECLARE_WRITE16_MEMBER(fg_videoram_w); DECLARE_WRITE8_MEMBER(flipscreen_w); @@ -55,6 +55,7 @@ private: void main_map(address_map &map); virtual void video_start() override; +private: /* memory pointers */ required_shared_ptr m_bg_videoram; required_shared_ptr m_fg_videoram; diff --git a/src/mame/drivers/piratesh.cpp b/src/mame/drivers/piratesh.cpp index df7940e6279..5c989ecbe32 100644 --- a/src/mame/drivers/piratesh.cpp +++ b/src/mame/drivers/piratesh.cpp @@ -28,9 +28,10 @@ **************************************************************************/ #include "emu.h" -#include "speaker.h" -#include "cpu/m68000/m68000.h" + #include "includes/konamigx.h" // TODO: WHY? + +#include "cpu/m68000/m68000.h" #include "machine/gen_latch.h" #include "machine/k053252.h" #include "machine/nvram.h" @@ -43,22 +44,25 @@ #include "video/k055555.h" #include "video/konami_helper.h" +#include "speaker.h" + + class piratesh_state : public driver_device { public: - piratesh_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this,"maincpu"), - m_k053250(*this, "k053250"), - m_k053252(*this, "k053252"), - m_k056832(*this, "k056832"), - m_k055673(*this, "k055673"), - m_k055555(*this, "k055555"), -// m_k053246(*this, "k053246"), - m_k054539(*this, "k054539"), - m_tickets(*this, "ticket"), - m_hopper(*this, "hopper"), - m_spriteram(*this,"spriteram") + piratesh_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this,"maincpu"), + m_k053250(*this, "k053250"), + m_k053252(*this, "k053252"), + m_k056832(*this, "k056832"), + m_k055673(*this, "k055673"), + m_k055555(*this, "k055555"), + //m_k053246(*this, "k053246"), + m_k054539(*this, "k054539"), + m_tickets(*this, "ticket"), + m_hopper(*this, "hopper"), + m_spriteram(*this,"spriteram") { } void piratesh(machine_config &config); @@ -66,6 +70,11 @@ public: DECLARE_CUSTOM_INPUT_MEMBER(helm_r); DECLARE_CUSTOM_INPUT_MEMBER(battery_r); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + private: required_device m_maincpu; @@ -104,9 +113,6 @@ private: DECLARE_READ16_MEMBER(k053247_martchmp_word_r); DECLARE_WRITE16_MEMBER(k053247_martchmp_word_w); - DECLARE_MACHINE_START(piratesh); - DECLARE_MACHINE_RESET(piratesh); - DECLARE_VIDEO_START(piratesh); uint32_t screen_update_piratesh(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(k054539_nmi_gen); TIMER_DEVICE_CALLBACK_MEMBER(piratesh_interrupt); @@ -139,7 +145,7 @@ K056832_CB_MEMBER(piratesh_state::piratesh_tile_callback) // Color // Flags // if (*color != 0) -// printf("%x %x %x\n", layer, *code, *color >> 2); +// logerror("%x %x %x\n", layer, *code, *color >> 2); *color = (m_layer_colorbase[layer] << 4) + ((*color >> 2));// & 0x0f); } @@ -189,7 +195,7 @@ K055673_CB_MEMBER(piratesh_state::piratesh_sprite_callback) -VIDEO_START_MEMBER(piratesh_state, piratesh) +void piratesh_state::video_start() { // TODO: These come from the 055555 m_layer_colorbase[0] = 0; @@ -347,7 +353,7 @@ WRITE16_MEMBER(piratesh_state::control1_w) // .... x... .... .... - Lamp? (active when waiting to start game) if (data & ~0x0f00) - printf("CTRL3: %x %x %x\n", offset, data, mem_mask); + logerror("CTRL3: %x %x %x\n", offset, data, mem_mask); } WRITE16_MEMBER(piratesh_state::control2_w) @@ -369,7 +375,7 @@ WRITE16_MEMBER(piratesh_state::control2_w) update_interrupts(); if (data & ~0xfbf0) - printf("CTRL2: %x %x %x\n", offset, data, mem_mask); + logerror("CTRL2: %x %x %x\n", offset, data, mem_mask); } WRITE16_MEMBER(piratesh_state::control3_w) @@ -381,9 +387,9 @@ WRITE16_MEMBER(piratesh_state::control3_w) // .... ...x .... .... - Unknown (always 1?) if ((data & ~0x0133) || (~data & 0x100)) - printf("CTRL1 W: %x %x %x\n", offset, data, mem_mask); + logerror("CTRL1 W: %x %x %x\n", offset, data, mem_mask); -// printf("CTRL 1: %x\n", data & 0x0010); +// logerror("CTRL 1: %x\n", data & 0x0010); m_tickets->motor_w(data & 0x0010 ? 1 : 0); m_hopper->motor_w(data & 0x0020 ? 1 : 0); @@ -559,7 +565,7 @@ INPUT_PORTS_END /**********************************************************************************/ -MACHINE_START_MEMBER(piratesh_state, piratesh) +void piratesh_state::machine_start() { #if 0 m_sound_ctrl = 2; @@ -574,7 +580,7 @@ MACHINE_START_MEMBER(piratesh_state, piratesh) #endif } -MACHINE_RESET_MEMBER(piratesh_state,piratesh) +void piratesh_state::machine_reset() { m_int_status = 0; @@ -603,9 +609,6 @@ MACHINE_CONFIG_START(piratesh_state::piratesh) MCFG_DEVICE_ADD("k053252", K053252, XTAL(32'000'000)/4) MCFG_K053252_OFFSETS(40, 16) // TODO - MCFG_MACHINE_START_OVERRIDE(piratesh_state, piratesh) - MCFG_MACHINE_RESET_OVERRIDE(piratesh_state, piratesh) - MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH) MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH) @@ -647,8 +650,6 @@ MACHINE_CONFIG_START(piratesh_state::piratesh) MCFG_DEVICE_ADD("k054338", K054338, 0, "k055555") MCFG_K054338_ALPHAINV(1) - MCFG_VIDEO_START_OVERRIDE(piratesh_state, piratesh) - /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); diff --git a/src/mame/drivers/pturn.cpp b/src/mame/drivers/pturn.cpp index 53eeab6545e..87d4ad4d968 100644 --- a/src/mame/drivers/pturn.cpp +++ b/src/mame/drivers/pturn.cpp @@ -89,15 +89,16 @@ ROMS: All ROM labels say only "PROM" and a number. class pturn_state : public driver_device { public: - pturn_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + pturn_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_soundlatch(*this, "soundlatch"), m_videoram(*this, "videoram"), - m_spriteram(*this, "spriteram") { } + m_spriteram(*this, "spriteram") + { } void pturn(machine_config &config); diff --git a/src/mame/drivers/rbisland.cpp b/src/mame/drivers/rbisland.cpp index c2356a6bba7..958ced3cea3 100644 --- a/src/mame/drivers/rbisland.cpp +++ b/src/mame/drivers/rbisland.cpp @@ -663,12 +663,12 @@ MACHINE_CONFIG_START(rbisland_state::rbisland) MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(16'000'000)/4) /* verified on pcb */ MCFG_DEVICE_PROGRAM_MAP(rbisland_sound_map) - MCFG_TAITO_CCHIP_ADD("cchip", XTAL(12'000'000)) /* 12MHz OSC next to C-Chip */ - MCFG_CCHIP_IN_PORTA_CB(IOPORT("800007")) - MCFG_CCHIP_IN_PORTB_CB(IOPORT("800009")) - MCFG_CCHIP_IN_PORTC_CB(IOPORT("80000B")) - MCFG_CCHIP_IN_PORTAD_CB(IOPORT("80000D")) - MCFG_CCHIP_OUT_PORTB_CB(WRITE8(*this, rbisland_state, counters_w)) + TAITO_CCHIP(config, m_cchip, 12_MHz_XTAL); // 12MHz OSC next to C-Chip + m_cchip->in_pa_callback().set_ioport("800007"); + m_cchip->in_pb_callback().set_ioport("800009"); + m_cchip->in_pc_callback().set_ioport("80000B"); + m_cchip->in_ad_callback().set_ioport("80000D"); + m_cchip->out_pb_callback().set(FUNC(rbisland_state::counters_w)); MCFG_TIMER_DRIVER_ADD("cchip_irq_clear", rbisland_state, cchip_irq_clear_cb) diff --git a/src/mame/drivers/segas32.cpp b/src/mame/drivers/segas32.cpp index 971387ba06b..93c95fdfd40 100644 --- a/src/mame/drivers/segas32.cpp +++ b/src/mame/drivers/segas32.cpp @@ -2259,7 +2259,7 @@ MACHINE_CONFIG_START(segas32_state::device_add_mconfig) MCFG_SOUND_ROUTE(1, "rspeaker", 0.55) MCFG_DEVICE_ADDRESS_MAP(0, rf5c68_map) - MCFG_S32COMM_ADD("s32comm") + S32COMM(config, m_s32comm, 0); MACHINE_CONFIG_END DEFINE_DEVICE_TYPE(SEGA_S32_REGULAR_DEVICE, segas32_regular_state, "segas32_pcb_regular", "Sega System 32 regular PCB") @@ -2585,7 +2585,7 @@ MACHINE_CONFIG_START(sega_multi32_state::device_add_mconfig) MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) MCFG_SOUND_ROUTE(0, "rspeaker", 1.0) - MCFG_S32COMM_ADD("s32comm") + S32COMM(config, m_s32comm, 0); MACHINE_CONFIG_END diff --git a/src/mame/drivers/slapfght.cpp b/src/mame/drivers/slapfght.cpp index 36381227645..933ccd00020 100644 --- a/src/mame/drivers/slapfght.cpp +++ b/src/mame/drivers/slapfght.cpp @@ -956,7 +956,7 @@ MACHINE_CONFIG_START(slapfght_state::tigerh) MCFG_DEVICE_PROGRAM_MAP(tigerh_sound_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(slapfght_state, sound_nmi, 360) // music speed, verified with pcb recording - MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU_TIGER, XTAL(36'000'000)/12) // 3MHz + TAITO68705_MCU_TIGER(config, m_bmcu, 36_MHz_XTAL/12); // 3MHz MCFG_QUANTUM_PERFECT_CPU("maincpu") @@ -1028,8 +1028,8 @@ MACHINE_CONFIG_START(slapfght_state::slapfigh) MCFG_DEVICE_PROGRAM_MAP(tigerh_sound_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(slapfght_state, sound_nmi, 180) - MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, XTAL(36'000'000)/12) // 3MHz - MCFG_TAITO_M68705_AUX_STROBE_CB(WRITE8(*this, slapfght_state, scroll_from_mcu_w)) + TAITO68705_MCU(config, m_bmcu, 36_MHz_XTAL/12); // 3MHz + m_bmcu->aux_strobe_cb().set(FUNC(slapfght_state::scroll_from_mcu_w)); MCFG_QUANTUM_PERFECT_CPU("maincpu") diff --git a/src/mame/drivers/taito_f2.cpp b/src/mame/drivers/taito_f2.cpp index 12e1953e681..f9a18c99929 100644 --- a/src/mame/drivers/taito_f2.cpp +++ b/src/mame/drivers/taito_f2.cpp @@ -2999,7 +2999,7 @@ MACHINE_CONFIG_START(taitof2_state::megab) MCFG_DEVICE_PROGRAM_MAP(megab_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", taitof2_state, megab_interrupt) - MCFG_TAITO_CCHIP_ADD("cchip", XTAL(24'000'000)/2) /* 12MHz */ + TAITO_CCHIP(config, m_cchip, 24_MHz_XTAL/2); // 12MHz // the ports don't appear to hook up to anything MCFG_TIMER_DRIVER_ADD("cchip_irq_clear", taitof2_state, cchip_irq_clear_cb) diff --git a/src/mame/drivers/taito_x.cpp b/src/mame/drivers/taito_x.cpp index 2627ebdcc9b..d828680a2f4 100644 --- a/src/mame/drivers/taito_x.cpp +++ b/src/mame/drivers/taito_x.cpp @@ -837,11 +837,11 @@ MACHINE_CONFIG_START(taitox_state::superman) MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(16'000'000)/4) /* verified on pcb */ MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_TAITO_CCHIP_ADD("cchip", XTAL(16'000'000)/2) /* 8MHz measured on pin 20 */ - MCFG_CCHIP_IN_PORTA_CB(IOPORT("IN0")) - MCFG_CCHIP_IN_PORTB_CB(IOPORT("IN1")) - MCFG_CCHIP_IN_PORTAD_CB(IOPORT("IN2")) - MCFG_CCHIP_OUT_PORTC_CB(WRITE8(*this, taitox_state, superman_counters_w)) + TAITO_CCHIP(config, m_cchip, 16_MHz_XTAL/2); // 8MHz measured on pin 20 + m_cchip->in_pa_callback().set_ioport("IN0"); + m_cchip->in_pb_callback().set_ioport("IN1"); + m_cchip->in_ad_callback().set_ioport("IN2"); + m_cchip->out_pc_callback().set(FUNC(taitox_state::superman_counters_w)); MCFG_TIMER_DRIVER_ADD("cchip_irq_clear", taitox_state, cchip_irq_clear_cb) diff --git a/src/mame/drivers/taitoair.cpp b/src/mame/drivers/taitoair.cpp index 59c6cdc69f3..bdddcf3e54f 100644 --- a/src/mame/drivers/taitoair.cpp +++ b/src/mame/drivers/taitoair.cpp @@ -728,7 +728,7 @@ MACHINE_CONFIG_START(taitoair_state::airsys) m_tc0220ioc->write_4_callback().set(FUNC(taitoair_state::coin_control_w)); m_tc0220ioc->read_7_callback().set_ioport("IN2"); - MCFG_TAITOIO_YOKE_ADD("yokectrl") + TAITOIO_YOKE(config, m_yoke, 0); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/volfied.cpp b/src/mame/drivers/volfied.cpp index 7d7f443dfd0..9e238904da6 100644 --- a/src/mame/drivers/volfied.cpp +++ b/src/mame/drivers/volfied.cpp @@ -249,12 +249,12 @@ MACHINE_CONFIG_START(volfied_state::volfied) MCFG_DEVICE_ADD("audiocpu", Z80, SOUND_CPU_CLOCK) /* 4MHz sound CPU, required to run the game */ MCFG_DEVICE_PROGRAM_MAP(z80_map) - MCFG_TAITO_CCHIP_ADD("cchip", XTAL(20'000'000)/2) /* 20MHz OSC next to C-Chip */ - MCFG_CCHIP_IN_PORTA_CB(IOPORT("F00007")) - MCFG_CCHIP_IN_PORTB_CB(IOPORT("F00009")) - MCFG_CCHIP_IN_PORTC_CB(IOPORT("F0000B")) - MCFG_CCHIP_IN_PORTAD_CB(IOPORT("F0000D")) - MCFG_CCHIP_OUT_PORTB_CB(WRITE8(*this, volfied_state, counters_w)) + TAITO_CCHIP(config, m_cchip, 20_MHz_XTAL/2); // 20MHz OSC next to C-Chip + m_cchip->in_pa_callback().set_ioport("F00007"); + m_cchip->in_pb_callback().set_ioport("F00009"); + m_cchip->in_pc_callback().set_ioport("F0000B"); + m_cchip->in_ad_callback().set_ioport("F0000D"); + m_cchip->out_pb_callback().set(FUNC(volfied_state::counters_w)); MCFG_QUANTUM_TIME(attotime::from_hz(1200)) diff --git a/src/mame/includes/arkanoid.h b/src/mame/includes/arkanoid.h index 68456e64ad6..1f84505feb4 100644 --- a/src/mame/includes/arkanoid.h +++ b/src/mame/includes/arkanoid.h @@ -23,8 +23,6 @@ enum { class arkanoid_state : public driver_device { public: - - arkanoid_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_videoram(*this, "videoram") diff --git a/src/mame/includes/rbisland.h b/src/mame/includes/rbisland.h index 2fddfc4da52..ef025d677a4 100644 --- a/src/mame/includes/rbisland.h +++ b/src/mame/includes/rbisland.h @@ -21,8 +21,8 @@ class rbisland_state : public driver_device { public: - rbisland_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + rbisland_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_spriteram(*this, "spriteram"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), diff --git a/src/mame/includes/taitoair.h b/src/mame/includes/taitoair.h index cf3960d7e37..5888e8df93d 100644 --- a/src/mame/includes/taitoair.h +++ b/src/mame/includes/taitoair.h @@ -5,6 +5,10 @@ Taito Air System *************************************************************************/ +#ifndef MAME_INCLUDES_TAITOAIR_H +#define MAME_INCLUDES_TAITOAIR_H + +#pragma once #include "machine/taitoio.h" #include "machine/taitoio_yoke.h" @@ -29,23 +33,23 @@ class taitoair_state : public driver_device { public: taitoair_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_m68000_mainram(*this, "m68000_mainram"), - m_line_ram(*this, "line_ram"), - m_dsp_ram(*this, "dsp_ram"), - m_paletteram(*this, "paletteram"), - m_gradram(*this, "gradram"), - m_tc0430grw(*this, "tc0430grw"), - m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), - m_dsp(*this, "dsp"), - m_tc0080vco(*this, "tc0080vco"), - m_tc0220ioc(*this, "tc0220ioc"), - m_yoke(*this, "yokectrl"), - m_gfxdecode(*this, "gfxdecode"), - m_screen(*this, "screen"), - m_palette(*this, "palette") - { } + : driver_device(mconfig, type, tag) + , m_m68000_mainram(*this, "m68000_mainram") + , m_line_ram(*this, "line_ram") + , m_dsp_ram(*this, "dsp_ram") + , m_paletteram(*this, "paletteram") + , m_gradram(*this, "gradram") + , m_tc0430grw(*this, "tc0430grw") + , m_maincpu(*this, "maincpu") + , m_audiocpu(*this, "audiocpu") + , m_dsp(*this, "dsp") + , m_tc0080vco(*this, "tc0080vco") + , m_tc0220ioc(*this, "tc0220ioc") + , m_yoke(*this, "yokectrl") + , m_gfxdecode(*this, "gfxdecode") + , m_screen(*this, "screen") + , m_palette(*this, "palette") + { } void airsys(machine_config &config); @@ -145,3 +149,5 @@ private: void airsys_map(address_map &map); void sound_map(address_map &map); }; + +#endif // MAME_INCLUDES_TAITOAIR_H diff --git a/src/mame/includes/volfied.h b/src/mame/includes/volfied.h index e1a057391c9..95cc0393a77 100644 --- a/src/mame/includes/volfied.h +++ b/src/mame/includes/volfied.h @@ -18,8 +18,8 @@ class volfied_state : public driver_device { public: - volfied_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + volfied_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_cchip(*this, "cchip"), diff --git a/src/mame/machine/ng_memcard.h b/src/mame/machine/ng_memcard.h index 9fcb73ea0b4..7c507bf5b40 100644 --- a/src/mame/machine/ng_memcard.h +++ b/src/mame/machine/ng_memcard.h @@ -13,21 +13,9 @@ #pragma once -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_NEOGEO_MEMCARD_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, NG_MEMCARD, 0) - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - // ======================> ng_memcard_device -class ng_memcard_device : public device_t, - public device_image_interface +class ng_memcard_device : public device_t, public device_image_interface { public: // construction/destruction @@ -35,6 +23,7 @@ public: virtual iodevice_t image_type() const override { return IO_MEMCARD; } + // device_image_interface implementation virtual bool is_readable() const override { return true; } virtual bool is_writeable() const override { return true; } virtual bool is_creatable() const override { return true; } @@ -46,14 +35,16 @@ public: virtual void call_unload() override; virtual image_init_result call_create(int format_type, util::option_resolution *format_options) override; - // device-level overrides - virtual void device_start() override; - + // bus interface DECLARE_READ8_MEMBER(read); DECLARE_WRITE8_MEMBER(write); - /* returns the index of the current memory card, or -1 if none */ - int present() { return is_loaded() ? 0 : -1; } + bool present() { return is_loaded(); } + +protected: + // device-level overrides + virtual void device_start() override; + private: uint8_t m_memcard_data[0x800]; }; diff --git a/src/mame/machine/s32comm.h b/src/mame/machine/s32comm.h index 8f0f9536a60..e12ce10f5de 100644 --- a/src/mame/machine/s32comm.h +++ b/src/mame/machine/s32comm.h @@ -9,8 +9,6 @@ #include "osdcore.h" -#define MCFG_S32COMM_ADD(_tag ) \ - MCFG_DEVICE_ADD(_tag, S32COMM, 0) //************************************************************************** // TYPE DEFINITIONS diff --git a/src/mame/machine/st0016.h b/src/mame/machine/st0016.h index 8ad7971ec3a..6b2ca54eaef 100644 --- a/src/mame/machine/st0016.h +++ b/src/mame/machine/st0016.h @@ -11,19 +11,15 @@ #include "sound/st0016.h" #include "screen.h" -typedef device_delegate st0016_dma_offs_delegate; -#define ST0016_DMA_OFFS_CB(name) uint8_t name(void) - -#define MCFG_ST0016_DMA_OFFS_CB(_class, _method) \ - downcast(*device).set_dma_offs_callback(st0016_dma_offs_delegate(&_class::_method, #_class "::" #_method, this)); - class st0016_cpu_device : public z80_device, public device_gfx_interface { public: + typedef device_delegate dma_offs_delegate; + st0016_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t); - template void set_dma_offs_callback(Object &&callback) { m_dma_offs_cb = std::forward(callback); } + template void set_dma_offs_callback(T &&... args) { m_dma_offs_cb = dma_offs_delegate(std::forward(args)...); } DECLARE_WRITE8_MEMBER(st0016_sprite_bank_w); DECLARE_WRITE8_MEMBER(st0016_palette_bank_w); @@ -100,7 +96,7 @@ protected: private: uint8_t m_dma_offset; - st0016_dma_offs_delegate m_dma_offs_cb; + dma_offs_delegate m_dma_offs_cb; uint32_t m_game_flag; DECLARE_READ8_MEMBER(soundram_read); diff --git a/src/mame/machine/taito68705interface.h b/src/mame/machine/taito68705interface.h index 80871f77799..30c3b30dbc0 100644 --- a/src/mame/machine/taito68705interface.h +++ b/src/mame/machine/taito68705interface.h @@ -17,8 +17,6 @@ DECLARE_DEVICE_TYPE(ARKANOID_68705P5, arkanoid_68705p5_device) class taito68705_mcu_device_base : public device_t { public: - template devcb_base &set_semaphore_cb(Obj &&cb) { return m_semaphore_cb.set_callback(std::forward(cb)); } - // host interface DECLARE_READ8_MEMBER(data_r); DECLARE_WRITE8_MEMBER(data_w); @@ -36,6 +34,8 @@ protected: device_t *owner, u32 clock); + auto semaphore_cb() { return m_semaphore_cb.bind(); } + // MCU callbacks DECLARE_WRITE8_MEMBER(mcu_pa_w); @@ -62,13 +62,10 @@ private: }; -#define MCFG_TAITO_M68705_AUX_STROBE_CB(cb) \ - downcast(*device).set_aux_strobe_cb(DEVCB_##cb); - class taito68705_mcu_device : public taito68705_mcu_device_base { public: - template devcb_base &set_aux_strobe_cb(Obj &&cb) { return m_aux_strobe_cb.set_callback(std::forward(cb)); } + auto aux_strobe_cb() { return m_aux_strobe_cb.bind(); } taito68705_mcu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -97,16 +94,11 @@ protected: }; -#define MCFG_ARKANOID_MCU_SEMAPHORE_CB(cb) \ - downcast(*device).set_semaphore_cb(DEVCB_##cb); - -#define MCFG_ARKANOID_MCU_PORTB_R_CB(cb) \ - downcast(*device).set_portb_r_cb(DEVCB_##cb); - class arkanoid_mcu_device_base : public taito68705_mcu_device_base { public: - template devcb_base &set_portb_r_cb(Obj &&cb) { return m_portb_r_cb.set_callback(std::forward(cb)); } + using taito68705_mcu_device_base::semaphore_cb; + auto portb_r_cb() { return m_portb_r_cb.bind(); } protected: arkanoid_mcu_device_base( diff --git a/src/mame/machine/taitocchip.cpp b/src/mame/machine/taitocchip.cpp index 406200eac16..a532c034d9a 100644 --- a/src/mame/machine/taitocchip.cpp +++ b/src/mame/machine/taitocchip.cpp @@ -99,10 +99,13 @@ This chip *ALWAYS* has a bypass capacitor (ceramic, 104, 0.10 uF) soldered on to #include "emu.h" #include "machine/taitocchip.h" +#include "cpu/upd7810/upd7811.h" + + DEFINE_DEVICE_TYPE(TAITO_CCHIP, taito_cchip_device, "cchip", "Taito TC0030CMD (C-Chip)") -taito_cchip_device::taito_cchip_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, TAITO_CCHIP, tag, owner, clock), +taito_cchip_device::taito_cchip_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, TAITO_CCHIP, tag, owner, clock), m_upd7811(*this, "upd7811"), m_upd4464_bank(*this, "upd4464_bank"), m_upd4464_bank68(*this, "upd4464_bank68"), @@ -157,7 +160,9 @@ WRITE8_MEMBER(taito_cchip_device::asic_w) m_upd4464_bank->set_bank(data & 0x7); } else - m_asic_ram[offset&3] = data; + { + m_asic_ram[offset & 3] = data; + } } WRITE8_MEMBER(taito_cchip_device::asic68_w) @@ -169,160 +174,88 @@ WRITE8_MEMBER(taito_cchip_device::asic68_w) m_upd4464_bank68->set_bank(data & 0x7); } else - m_asic_ram[offset&3] = data; + { + m_asic_ram[offset & 3] = data; + } } READ8_MEMBER(taito_cchip_device::mem_r) { - offset &= 0x3ff; - return m_upd4464_bank->read8(space,offset); + return m_upd4464_bank->read8(space, offset & 0x03ff); } WRITE8_MEMBER(taito_cchip_device::mem_w) { - offset &= 0x3ff; - return m_upd4464_bank->write8(space,offset,data); + return m_upd4464_bank->write8(space, offset & 0x03ff, data); } READ8_MEMBER(taito_cchip_device::mem68_r) { - offset &= 0x3ff; - return m_upd4464_bank68->read8(space,offset); + return m_upd4464_bank68->read8(space, offset & 0x03ff); } WRITE8_MEMBER(taito_cchip_device::mem68_w) { - offset &= 0x3ff; - return m_upd4464_bank68->write8(space,offset,data); + return m_upd4464_bank68->write8(space, offset & 0x03ff, data); } void taito_cchip_device::cchip_map(address_map &map) { //AM_RANGE(0x0000, 0x0fff) AM_ROM // internal ROM of uPD7811 - map(0x1000, 0x13ff).m("upd4464_bank", FUNC(address_map_bank_device::amap8)); + map(0x1000, 0x13ff).m(m_upd4464_bank, FUNC(address_map_bank_device::amap8)); map(0x1400, 0x17ff).rw(FUNC(taito_cchip_device::asic_r), FUNC(taito_cchip_device::asic_w)); map(0x2000, 0x3fff).rom().region("cchip_eprom", 0); } - -WRITE8_MEMBER(taito_cchip_device::porta_w) -{ - m_out_pa_cb(data); -} - -WRITE8_MEMBER(taito_cchip_device::portb_w) -{ - m_out_pb_cb(data); -} - -WRITE8_MEMBER(taito_cchip_device::portc_w) -{ - m_out_pc_cb(data); -} - -WRITE8_MEMBER(taito_cchip_device::portf_w) +void taito_cchip_device::device_add_mconfig(machine_config &config) { - // internal? related to locking out the 68k? - logerror("%s port F written %.2x\n", machine().describe_context(), data); -} + upd7811_device &upd(UPD7811(config, m_upd7811, DERIVED_CLOCK(1, 1))); + upd.set_addrmap(AS_PROGRAM, &taito_cchip_device::cchip_map); + upd.pa_in_cb().set([this] { return m_in_pa_cb(); }); + upd.pb_in_cb().set([this] { return m_in_pb_cb(); }); + upd.pc_in_cb().set([this] { return m_in_pc_cb(); }); + upd.pa_out_cb().set([this] (u8 data) { m_out_pa_cb(data); }); + upd.pb_out_cb().set([this] (u8 data) { m_out_pb_cb(data); }); + upd.pc_out_cb().set([this] (u8 data) { m_out_pc_cb(data); }); + upd.pf_out_cb().set([this] (u8 data) { logerror("%s port F written %.2x\n", machine().describe_context(), data); }); // internal? related to locking out the 68k? + upd.an0_func().set([this] { return BIT(m_in_ad_cb(), 0); }); + upd.an1_func().set([this] { return BIT(m_in_ad_cb(), 1); }); + upd.an2_func().set([this] { return BIT(m_in_ad_cb(), 2); }); + upd.an3_func().set([this] { return BIT(m_in_ad_cb(), 3); }); + upd.an4_func().set([this] { return BIT(m_in_ad_cb(), 4); }); + upd.an5_func().set([this] { return BIT(m_in_ad_cb(), 5); }); + upd.an6_func().set([this] { return BIT(m_in_ad_cb(), 6); }); + upd.an7_func().set([this] { return BIT(m_in_ad_cb(), 7); }); + + ADDRESS_MAP_BANK(config, m_upd4464_bank, 0); + m_upd4464_bank->set_map(&taito_cchip_device::cchip_ram_bank); + m_upd4464_bank->set_endianness(ENDIANNESS_LITTLE); + m_upd4464_bank->set_data_width(8); + m_upd4464_bank->set_addr_width(13); + m_upd4464_bank->set_stride(0x400); -READ8_MEMBER(taito_cchip_device::porta_r) -{ - return m_in_pa_cb(); -} - -READ8_MEMBER(taito_cchip_device::portb_r) -{ - return m_in_pb_cb(); -} - -READ8_MEMBER(taito_cchip_device::portc_r) -{ - return m_in_pc_cb(); -} - - -READ_LINE_MEMBER( taito_cchip_device::an0_r ) -{ - return BIT(m_in_ad_cb(), 0); -} - -READ_LINE_MEMBER( taito_cchip_device::an1_r ) -{ - return BIT(m_in_ad_cb(), 1); -} - -READ_LINE_MEMBER( taito_cchip_device::an2_r ) -{ - return BIT(m_in_ad_cb(), 2); -} - - -READ_LINE_MEMBER( taito_cchip_device::an3_r ) -{ - return BIT(m_in_ad_cb(), 3); -} - -READ_LINE_MEMBER( taito_cchip_device::an4_r ) -{ - return BIT(m_in_ad_cb(), 4); -} - -READ_LINE_MEMBER( taito_cchip_device::an5_r ) -{ - return BIT(m_in_ad_cb(), 5); -} - -READ_LINE_MEMBER( taito_cchip_device::an6_r ) -{ - return BIT(m_in_ad_cb(), 6); + // the 68k has a different view into the banked memory? + ADDRESS_MAP_BANK(config, m_upd4464_bank68, 0); + m_upd4464_bank68->set_map(&taito_cchip_device::cchip_ram_bank68); + m_upd4464_bank68->set_endianness(ENDIANNESS_LITTLE); + m_upd4464_bank68->set_data_width(8); + m_upd4464_bank68->set_addr_width(13); + m_upd4464_bank68->set_stride(0x400); } -READ_LINE_MEMBER( taito_cchip_device::an7_r ) +void taito_cchip_device::device_resolve_objects() { - return BIT(m_in_ad_cb(), 7); + m_in_pa_cb.resolve_safe(0); + m_in_pb_cb.resolve_safe(0); + m_in_pc_cb.resolve_safe(0); + m_in_ad_cb.resolve_safe(0); + m_out_pa_cb.resolve_safe(); + m_out_pb_cb.resolve_safe(); + m_out_pc_cb.resolve_safe(); } - - -MACHINE_CONFIG_START(taito_cchip_device::device_add_mconfig) - MCFG_DEVICE_ADD("upd7811", UPD7811, DERIVED_CLOCK(1,1)) - MCFG_DEVICE_PROGRAM_MAP(cchip_map) - MCFG_UPD7810_PORTA_READ_CB(READ8(*this, taito_cchip_device, porta_r)) - MCFG_UPD7810_PORTB_READ_CB(READ8(*this, taito_cchip_device, portb_r)) - MCFG_UPD7810_PORTC_READ_CB(READ8(*this, taito_cchip_device, portc_r)) - MCFG_UPD7810_PORTA_WRITE_CB(WRITE8(*this, taito_cchip_device, porta_w)) - MCFG_UPD7810_PORTB_WRITE_CB(WRITE8(*this, taito_cchip_device, portb_w)) - MCFG_UPD7810_PORTC_WRITE_CB(WRITE8(*this, taito_cchip_device, portc_w)) - MCFG_UPD7810_PORTF_WRITE_CB(WRITE8(*this, taito_cchip_device, portf_w)) - MCFG_UPD7810_AN0(READLINE(*this, taito_cchip_device, an0_r)) - MCFG_UPD7810_AN1(READLINE(*this, taito_cchip_device, an1_r)) - MCFG_UPD7810_AN2(READLINE(*this, taito_cchip_device, an2_r)) - MCFG_UPD7810_AN3(READLINE(*this, taito_cchip_device, an3_r)) - MCFG_UPD7810_AN4(READLINE(*this, taito_cchip_device, an4_r)) - MCFG_UPD7810_AN5(READLINE(*this, taito_cchip_device, an5_r)) - MCFG_UPD7810_AN6(READLINE(*this, taito_cchip_device, an6_r)) - MCFG_UPD7810_AN7(READLINE(*this, taito_cchip_device, an7_r)) - - MCFG_DEVICE_ADD("upd4464_bank", ADDRESS_MAP_BANK, 0) - MCFG_DEVICE_PROGRAM_MAP(cchip_ram_bank) - MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) - MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) - MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(13) - MCFG_ADDRESS_MAP_BANK_STRIDE(0x400) - - // the 68k has a different view into the banked memory? - MCFG_DEVICE_ADD("upd4464_bank68", ADDRESS_MAP_BANK, 0) - MCFG_DEVICE_PROGRAM_MAP(cchip_ram_bank68) - MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) - MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) - MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(13) - MCFG_ADDRESS_MAP_BANK_STRIDE(0x400) -MACHINE_CONFIG_END - - void taito_cchip_device::device_start() { m_upd4464_bank->set_bank(0); @@ -330,14 +263,6 @@ void taito_cchip_device::device_start() save_item(NAME(m_asic_ram)); m_asic_ram[0] = m_asic_ram[1] = m_asic_ram[2] = m_asic_ram[3] = 0; - - m_in_pa_cb.resolve_safe(0); - m_in_pb_cb.resolve_safe(0); - m_in_pc_cb.resolve_safe(0); - m_in_ad_cb.resolve_safe(0); - m_out_pa_cb.resolve_safe(); - m_out_pb_cb.resolve_safe(); - m_out_pc_cb.resolve_safe(); } void taito_cchip_device::device_reset() diff --git a/src/mame/machine/taitocchip.h b/src/mame/machine/taitocchip.h index f551a7192b0..7f3c75506a6 100644 --- a/src/mame/machine/taitocchip.h +++ b/src/mame/machine/taitocchip.h @@ -1,40 +1,14 @@ // license:BSD-3-Clause // copyright-holders:David Haywood, Jonathan Gevaryahu - #ifndef MAME_MACHINE_TAITOCCHIP_H #define MAME_MACHINE_TAITOCCHIP_H #pragma once -#include "cpu/upd7810/upd7811.h" #include "machine/bankdev.h" DECLARE_DEVICE_TYPE(TAITO_CCHIP, taito_cchip_device) -#define MCFG_TAITO_CCHIP_ADD(_tag, _clock) \ - MCFG_DEVICE_ADD(_tag, TAITO_CCHIP, _clock) - -#define MCFG_CCHIP_IN_PORTA_CB(_devcb) \ - downcast(*device).set_in_pa_callback(DEVCB_##_devcb); - -#define MCFG_CCHIP_IN_PORTB_CB(_devcb) \ - downcast(*device).set_in_pb_callback(DEVCB_##_devcb); - -#define MCFG_CCHIP_IN_PORTC_CB(_devcb) \ - downcast(*device).set_in_pc_callback(DEVCB_##_devcb); - -#define MCFG_CCHIP_IN_PORTAD_CB(_devcb) \ - downcast(*device).set_in_ad_callback(DEVCB_##_devcb); - -#define MCFG_CCHIP_OUT_PORTA_CB(_devcb) \ - downcast(*device).set_out_pa_callback(DEVCB_##_devcb); - -#define MCFG_CCHIP_OUT_PORTB_CB(_devcb) \ - downcast(*device).set_out_pb_callback(DEVCB_##_devcb); - -#define MCFG_CCHIP_OUT_PORTC_CB(_devcb) \ - downcast(*device).set_out_pc_callback(DEVCB_##_devcb); - class taito_cchip_device : public device_t { @@ -42,14 +16,13 @@ public: // construction/destruction taito_cchip_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_in_pa_callback(Object &&cb) { return m_in_pa_cb.set_callback(std::forward(cb)); } - template devcb_base &set_in_pb_callback(Object &&cb) { return m_in_pb_cb.set_callback(std::forward(cb)); } - template devcb_base &set_in_pc_callback(Object &&cb) { return m_in_pc_cb.set_callback(std::forward(cb)); } - template devcb_base &set_in_ad_callback(Object &&cb) { return m_in_ad_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_pa_callback(Object &&cb) { return m_out_pa_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_pb_callback(Object &&cb) { return m_out_pb_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_pc_callback(Object &&cb) { return m_out_pc_cb.set_callback(std::forward(cb)); } - + auto in_pa_callback() { return m_in_pa_cb.bind(); } + auto in_pb_callback() { return m_in_pb_cb.bind(); } + auto in_pc_callback() { return m_in_pc_cb.bind(); } + auto in_ad_callback() { return m_in_ad_cb.bind(); } + auto out_pa_callback() { return m_out_pa_cb.bind(); } + auto out_pb_callback() { return m_out_pb_cb.bind(); } + auto out_pc_callback() { return m_out_pc_cb.bind(); } // can be accessed externally DECLARE_READ8_MEMBER(asic_r); @@ -62,33 +35,15 @@ public: DECLARE_READ8_MEMBER(mem68_r); DECLARE_WRITE8_MEMBER(mem68_w); + void ext_interrupt(int state); +protected: void cchip_map(address_map &map); void cchip_ram_bank(address_map &map); void cchip_ram_bank68(address_map &map); - DECLARE_READ8_MEMBER(porta_r); - DECLARE_READ8_MEMBER(portb_r); - DECLARE_READ8_MEMBER(portc_r); - - DECLARE_WRITE8_MEMBER(porta_w); - DECLARE_WRITE8_MEMBER(portb_w); - DECLARE_WRITE8_MEMBER(portc_w); - DECLARE_WRITE8_MEMBER(portf_w); - - DECLARE_READ_LINE_MEMBER(an0_r); - DECLARE_READ_LINE_MEMBER(an1_r); - DECLARE_READ_LINE_MEMBER(an2_r); - DECLARE_READ_LINE_MEMBER(an3_r); - DECLARE_READ_LINE_MEMBER(an4_r); - DECLARE_READ_LINE_MEMBER(an5_r); - DECLARE_READ_LINE_MEMBER(an6_r); - DECLARE_READ_LINE_MEMBER(an7_r); - - void ext_interrupt(int state); - -protected: virtual void device_add_mconfig(machine_config &config) override; + virtual void device_resolve_objects() override; virtual void device_start() override; virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_reset() override; @@ -110,4 +65,4 @@ private: devcb_write8 m_out_pc_cb; }; -#endif // MAME_MACHINE_CCHIP_DEV_H +#endif // MAME_MACHINE_TAITOCCHIP_H diff --git a/src/mame/machine/taitoio_yoke.h b/src/mame/machine/taitoio_yoke.h index f244fc1eea3..b80a0af910e 100644 --- a/src/mame/machine/taitoio_yoke.h +++ b/src/mame/machine/taitoio_yoke.h @@ -11,21 +11,10 @@ #pragma once - - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_TAITOIO_YOKE_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, TAITOIO_YOKE, 0) - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** -// ======================> namcoio_gearbox_device - class taitoio_yoke_device : public device_t { public: @@ -44,10 +33,9 @@ public: DECLARE_READ_LINE_MEMBER( handle_up_r ); DECLARE_READ_LINE_MEMBER( handle_down_r ); - +protected: virtual ioport_constructor device_input_ports() const override; -protected: // device-level overrides // virtual void device_validity_check(validity_checker &valid) const; virtual void device_start() override; @@ -58,12 +46,4 @@ protected: // device type definition DECLARE_DEVICE_TYPE(TAITOIO_YOKE, taitoio_yoke_device) - - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - - - #endif // MAME_MACHINE_TAITO_YOKE_H -- cgit v1.2.3