From 7245878a94d3a9d69c8afc7bd1b3ff8320ef3083 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Thu, 9 Feb 2023 01:47:40 +1100 Subject: [PATCH] Miscellaneous cleanup: * Got rid of a few more unnecessary uses of simple_list. * bus/amiga/zorro: Got rid of a pointer member that would make adding save state support unnecessarily difficult. * nichibutsu/cop01.cpp: Remove need to remove devices from machine config. --- scripts/src/bus.lua | 20 +++--- src/devices/bus/amiga/zorro/zorro.cpp | 38 ++++++------ src/devices/bus/amiga/zorro/zorro.h | 14 +++-- src/devices/bus/isa/isa.cpp | 2 +- src/devices/bus/isa/isa.h | 6 -- src/devices/bus/tanbus/tanbus.cpp | 35 ++++------- src/devices/bus/tanbus/tanbus.h | 12 ++-- src/devices/bus/vme/vme.cpp | 4 +- src/devices/bus/vme/vme.h | 12 ++-- src/mame/motorola/sys1121.cpp | 88 ++++++++++++++------------- src/mame/nichibutsu/cop01.cpp | 31 +++++----- 11 files changed, 126 insertions(+), 136 deletions(-) diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 138e7677bda..2cc722b0ab7 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -2541,16 +2541,12 @@ end if (BUSES["VME"]~=null) then files { + MAME_DIR .. "src/devices/bus/vme/tp881v.cpp", + MAME_DIR .. "src/devices/bus/vme/tp881v.h", MAME_DIR .. "src/devices/bus/vme/vme.cpp", MAME_DIR .. "src/devices/bus/vme/vme.h", MAME_DIR .. "src/devices/bus/vme/vme_cp31.cpp", MAME_DIR .. "src/devices/bus/vme/vme_cp31.h", - MAME_DIR .. "src/devices/bus/vme/vme_mzr8300.cpp", - MAME_DIR .. "src/devices/bus/vme/vme_mzr8300.h", - MAME_DIR .. "src/devices/bus/vme/vme_mvme120.cpp", - MAME_DIR .. "src/devices/bus/vme/vme_mvme120.h", - MAME_DIR .. "src/devices/bus/vme/vme_mvme350.cpp", - MAME_DIR .. "src/devices/bus/vme/vme_mvme350.h", MAME_DIR .. "src/devices/bus/vme/vme_fccpu20.cpp", MAME_DIR .. "src/devices/bus/vme/vme_fccpu20.h", MAME_DIR .. "src/devices/bus/vme/vme_fcisio.cpp", @@ -2559,16 +2555,20 @@ if (BUSES["VME"]~=null) then MAME_DIR .. "src/devices/bus/vme/vme_fcscsi.h", MAME_DIR .. "src/devices/bus/vme/vme_hcpu30.cpp", MAME_DIR .. "src/devices/bus/vme/vme_hcpu30.h", - MAME_DIR .. "src/devices/bus/vme/vme_smvme2000.cpp", - MAME_DIR .. "src/devices/bus/vme/vme_smvme2000.h", + MAME_DIR .. "src/devices/bus/vme/vme_mvme120.cpp", + MAME_DIR .. "src/devices/bus/vme/vme_mvme120.h", MAME_DIR .. "src/devices/bus/vme/vme_mvme180.cpp", MAME_DIR .. "src/devices/bus/vme/vme_mvme180.h", MAME_DIR .. "src/devices/bus/vme/vme_mvme181.cpp", MAME_DIR .. "src/devices/bus/vme/vme_mvme181.h", MAME_DIR .. "src/devices/bus/vme/vme_mvme327a.cpp", MAME_DIR .. "src/devices/bus/vme/vme_mvme327a.h", - MAME_DIR .. "src/devices/bus/vme/tp881v.cpp", - MAME_DIR .. "src/devices/bus/vme/tp881v.h", + MAME_DIR .. "src/devices/bus/vme/vme_mvme350.cpp", + MAME_DIR .. "src/devices/bus/vme/vme_mvme350.h", + MAME_DIR .. "src/devices/bus/vme/vme_mzr8300.cpp", + MAME_DIR .. "src/devices/bus/vme/vme_mzr8300.h", + MAME_DIR .. "src/devices/bus/vme/vme_smvme2000.cpp", + MAME_DIR .. "src/devices/bus/vme/vme_smvme2000.h", } end diff --git a/src/devices/bus/amiga/zorro/zorro.cpp b/src/devices/bus/amiga/zorro/zorro.cpp index 6bd8b280c86..9f137bbff89 100644 --- a/src/devices/bus/amiga/zorro/zorro.cpp +++ b/src/devices/bus/amiga/zorro/zorro.cpp @@ -196,7 +196,7 @@ zorro2_bus_device::zorro2_bus_device(const machine_config &mconfig, device_type m_eint4_handler(*this), m_eint5_handler(*this), m_eint7_handler(*this), - m_autoconfig_device(nullptr) + m_autoconfig_device(0) { } @@ -206,7 +206,6 @@ zorro2_bus_device::zorro2_bus_device(const machine_config &mconfig, device_type zorro2_bus_device::~zorro2_bus_device() { - m_dev.detach_all(); } //------------------------------------------------- @@ -227,6 +226,17 @@ void zorro2_bus_device::device_resolve_objects() m_eint7_handler.resolve_safe(); } +//------------------------------------------------- +// device_start - device-specific start +//------------------------------------------------- + +void zorro2_bus_device::device_start() +{ + zorro_bus_device_base::device_start(); + + save_item(NAME(m_autoconfig_device)); +} + //------------------------------------------------- // device_reset - device-specific reset //------------------------------------------------- @@ -237,11 +247,11 @@ void zorro2_bus_device::device_reset() zorro_bus_device_base::device_reset(); // initiate autoconfig - m_autoconfig_device = m_dev.first(); + m_autoconfig_device = 0; // if we have a device, start the autoconfig chain - if (m_autoconfig_device) - m_autoconfig_device->cfgin_w(0); + if (m_dev.size() > m_autoconfig_device) + m_dev[m_autoconfig_device].get().cfgin_w(0); } //------------------------------------------------- @@ -258,7 +268,7 @@ void zorro2_bus_device::add_card(device_zorro_card_interface &card) tag(), card.device().tag(), card.device().name()); } card.set_zorro_bus(*this); - m_dev.append(*zorro2_card); + m_dev.emplace_back(*zorro2_card); } // from slot device @@ -269,23 +279,16 @@ WRITE_LINE_MEMBER( zorro2_bus_device::eint7_w ) { m_eint7_handler(state); } WRITE_LINE_MEMBER( zorro2_bus_device::cfgout_w ) { - m_autoconfig_device = m_autoconfig_device->next(); - // if there is still a device in the chain, tell it to configure itself - if (m_autoconfig_device) - m_autoconfig_device->cfgin_w(0); + if (m_dev.size() > ++m_autoconfig_device) + m_dev[m_autoconfig_device].get().cfgin_w(0); } // from host void zorro2_bus_device::fc_w(int code) { - device_zorro2_card_interface *entry = m_dev.first(); - - while (entry) - { - entry->fc_w(code); - entry = entry->next(); - } + for (device_zorro2_card_interface &entry : m_dev) + entry.fc_w(code); } @@ -375,7 +378,6 @@ void device_exp_card_interface::interface_pre_start() device_zorro2_card_interface::device_zorro2_card_interface(const machine_config &mconfig, device_t &device) : device_zorro_card_interface(mconfig, device), - m_next(nullptr), m_slot(nullptr) { } diff --git a/src/devices/bus/amiga/zorro/zorro.h b/src/devices/bus/amiga/zorro/zorro.h index 632a5de9f6a..a75582ce519 100644 --- a/src/devices/bus/amiga/zorro/zorro.h +++ b/src/devices/bus/amiga/zorro/zorro.h @@ -143,6 +143,10 @@ #pragma once +#include +#include +#include + //************************************************************************** // TYPE DEFINITIONS @@ -299,18 +303,21 @@ protected: // device-level overrides virtual void device_resolve_objects() override ATTR_COLD; + virtual void device_start() override; virtual void device_reset() override; private: + using card_vector = std::vector >; + devcb_write_line m_eint1_handler; devcb_write_line m_eint4_handler; devcb_write_line m_eint5_handler; devcb_write_line m_eint7_handler; - simple_list m_dev; + card_vector m_dev; // the device which is currently configuring - device_zorro2_card_interface *m_autoconfig_device; + uint8_t m_autoconfig_device; }; // device type definition @@ -364,9 +371,6 @@ public: // construction/destruction virtual ~device_zorro2_card_interface(); - device_zorro2_card_interface *next() const { return m_next; } - device_zorro2_card_interface *m_next; - protected: device_zorro2_card_interface(const machine_config &mconfig, device_t &device); diff --git a/src/devices/bus/isa/isa.cpp b/src/devices/bus/isa/isa.cpp index 11aca68d0e7..5eae8ab0244 100644 --- a/src/devices/bus/isa/isa.cpp +++ b/src/devices/bus/isa/isa.cpp @@ -465,7 +465,7 @@ void isa8_device::nmi() device_isa8_card_interface::device_isa8_card_interface(const machine_config &mconfig, device_t &device) : device_interface(device, "isa"), - m_isa(nullptr), m_isa_dev(nullptr), m_next(nullptr) + m_isa(nullptr), m_isa_dev(nullptr) { } diff --git a/src/devices/bus/isa/isa.h b/src/devices/bus/isa/isa.h index 939f8d88a26..2cf5f26d5d2 100644 --- a/src/devices/bus/isa/isa.h +++ b/src/devices/bus/isa/isa.h @@ -250,13 +250,10 @@ DECLARE_DEVICE_TYPE(ISA8, isa8_device) class device_isa8_card_interface : public device_interface { friend class isa8_device; - template friend class simple_list; public: // construction/destruction virtual ~device_isa8_card_interface(); - device_isa8_card_interface *next() const { return m_next; } - void set_isa_device(); // configuration access virtual uint8_t dack_r(int line); @@ -274,9 +271,6 @@ public: isa8_device *m_isa; device_t *m_isa_dev; - -private: - device_isa8_card_interface *m_next; }; class isa16_device; diff --git a/src/devices/bus/tanbus/tanbus.cpp b/src/devices/bus/tanbus/tanbus.cpp index b17199e73c5..dc3f96df568 100644 --- a/src/devices/bus/tanbus/tanbus.cpp +++ b/src/devices/bus/tanbus/tanbus.cpp @@ -67,11 +67,15 @@ tanbus_device::tanbus_device(const machine_config &mconfig, const char *tag, dev { } +tanbus_device::~tanbus_device() +{ +} + void tanbus_device::add_card(device_tanbus_interface *card, int num) { card->m_tanbus = this; card->m_page = num; - m_device_list.append(*card); + m_device_list.emplace_back(*card); } //------------------------------------------------- @@ -107,13 +111,8 @@ void tanbus_device::set_inhibit_lines(offs_t offset) // reset inhibit lines m_inhram = m_inhrom = 0; - device_tanbus_interface *card = m_device_list.first(); - - while (card) - { - card->set_inhibit_lines(offset, m_inhram, m_inhrom); - card = card->next(); - } + for (device_tanbus_interface &card : m_device_list) + card.set_inhibit_lines(offset, m_inhram, m_inhrom); } //------------------------------------------------- @@ -126,19 +125,15 @@ uint8_t tanbus_device::read(offs_t offset) set_inhibit_lines(offset); - device_tanbus_interface *card = m_device_list.first(); - - while (card) + for (device_tanbus_interface &card : m_device_list) { // set block enable line for current card - if (BIT(m_block_register, 4, 3) == card->m_page) + if (BIT(m_block_register, 4, 3) == card.m_page) m_block_enable = 1; else m_block_enable = 0; - data &= card->read(offset, m_inhrom, m_inhram, m_block_enable); - card = card->next(); - + data &= card.read(offset, m_inhrom, m_inhram, m_block_enable); } return data; @@ -162,18 +157,15 @@ void tanbus_device::write(offs_t offset, uint8_t data) set_inhibit_lines(offset); - device_tanbus_interface *card = m_device_list.first(); - - while (card) + for (device_tanbus_interface &card : m_device_list) { // set block enable line for current card - if (BIT(m_block_register, 0,3) == card->m_page) + if (BIT(m_block_register, 0,3) == card.m_page) m_block_enable = 1; else m_block_enable = 0; - card->write(offset, data, m_inhrom, m_inhram, m_block_enable); - card = card->next(); + card.write(offset, data, m_inhrom, m_inhram, m_block_enable); } } @@ -189,7 +181,6 @@ device_tanbus_interface::device_tanbus_interface(const machine_config &mconfig, : device_interface(device, "tanbus") , m_tanbus(nullptr) , m_page(0) - , m_next(nullptr) { } diff --git a/src/devices/bus/tanbus/tanbus.h b/src/devices/bus/tanbus/tanbus.h index 7f5e87eb0aa..d433513c69d 100644 --- a/src/devices/bus/tanbus/tanbus.h +++ b/src/devices/bus/tanbus/tanbus.h @@ -11,6 +11,8 @@ #pragma once +#include +#include //************************************************************************** @@ -66,7 +68,7 @@ class tanbus_device : public device_t public: // construction/destruction tanbus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - ~tanbus_device() { m_device_list.detach_all(); } + ~tanbus_device(); // inline configuration auto out_irq_callback() { return m_out_irq_cb.bind(); } @@ -106,7 +108,7 @@ private: int m_inhram; int m_block_enable; - simple_list m_device_list; + std::vector > m_device_list; }; @@ -118,11 +120,8 @@ DECLARE_DEVICE_TYPE(TANBUS, tanbus_device) class device_tanbus_interface : public device_interface { friend class tanbus_device; - template friend class simple_list; public: - device_tanbus_interface *next() const { return m_next; } - // bus access virtual uint8_t read(offs_t offset, int inhrom, int inhram, int be) { return 0xff; } virtual void write(offs_t offset, uint8_t data, int inhrom, int inhram, int be) { } @@ -133,9 +132,6 @@ protected: tanbus_device *m_tanbus; int m_page; - -private: - device_tanbus_interface *m_next; }; diff --git a/src/devices/bus/vme/vme.cpp b/src/devices/bus/vme/vme.cpp index 1353f36ae22..b377403d09c 100644 --- a/src/devices/bus/vme/vme.cpp +++ b/src/devices/bus/vme/vme.cpp @@ -221,7 +221,6 @@ vme_device::vme_device(const machine_config &mconfig, device_type type, const ch vme_device::~vme_device() { LOG("%s %s\n", tag(), FUNCNAME); - m_device_list.detach_all(); } void vme_device::device_start() @@ -252,7 +251,7 @@ void vme_device::device_reset() void vme_device::add_vme_card(device_vme_card_interface *card) { LOG("%s %s\n", tag(), FUNCNAME); - m_device_list.append(*card); + m_device_list.emplace_back(*card); } #if 0 @@ -438,7 +437,6 @@ device_vme_card_interface::device_vme_card_interface(const machine_config &mconf : device_interface(device, "vme") , m_vme(nullptr) , m_slot(0) - , m_next(nullptr) { m_device = &device; LOG("%s %s\n", m_device->tag(), FUNCNAME); diff --git a/src/devices/bus/vme/vme.h b/src/devices/bus/vme/vme.h index e49b23cbbbe..a0e08e1091a 100644 --- a/src/devices/bus/vme/vme.h +++ b/src/devices/bus/vme/vme.h @@ -50,6 +50,10 @@ #pragma once +#include +#include +#include + //************************************************************************** // CONSTANTS @@ -190,7 +194,7 @@ protected: // device-level overrides virtual void device_start() override; virtual void device_reset() override; - simple_list m_device_list; + std::vector > m_device_list; virtual space_config_vector memory_space_config() const override; @@ -202,7 +206,7 @@ protected: int m_prgwidth; bool m_allocspaces; - const char *m_cputag; + const char *m_cputag; }; @@ -213,7 +217,6 @@ DECLARE_DEVICE_TYPE(VME_SLOT, vme_slot_device) class device_vme_card_interface : public device_interface { - template friend class simple_list; public: // inline configuration void set_vme_bus(vme_device &vme, int slot) { m_vme = &vme; m_slot = slot; } @@ -233,9 +236,6 @@ protected: vme_device *m_vme; int m_slot; - -private: - device_vme_card_interface *m_next; }; #endif // MAME_BUS_VME_VME_H diff --git a/src/mame/motorola/sys1121.cpp b/src/mame/motorola/sys1121.cpp index 7636d41a23e..d4225ac83e9 100644 --- a/src/mame/motorola/sys1121.cpp +++ b/src/mame/motorola/sys1121.cpp @@ -9,61 +9,63 @@ */ #include "emu.h" + +#include "bus/vme/tp881v.h" #include "bus/vme/vme_mvme120.h" #include "bus/vme/vme_mvme180.h" #include "bus/vme/vme_mvme181.h" #include "bus/vme/vme_mvme327a.h" #include "bus/vme/vme_smvme2000.h" -#include "bus/vme/tp881v.h" -#include "logmacro.h" -namespace + +namespace { + +class sys1121_state : public driver_device { - class sys1121_state : public driver_device +public: + sys1121_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) { - public: - sys1121_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - { - } - - void sys1121(machine_config &config); - }; - - // Input ports - static INPUT_PORTS_START(sys1121) - INPUT_PORTS_END - - static void sys1121_vme_cards(device_slot_interface &device) - { - device.option_add("mvme120", VME_MVME120); - device.option_add("mvme121", VME_MVME121); - device.option_add("mvme122", VME_MVME122); - device.option_add("mvme123", VME_MVME123); - device.option_add("smvme2000", VME_SMVME2000); - device.option_add("mvme180", VME_MVME180); - device.option_add("mvme181", VME_MVME181); - device.option_add("mvme327a", VME_MVME327A); - device.option_add("tp881v", TP881V); } - void sys1121_state::sys1121(machine_config &config) - { - VME(config, "vme", 0); - VME_SLOT(config, "slot1", sys1121_vme_cards, "mvme120", 1, "vme"); - VME_SLOT(config, "slot2", sys1121_vme_cards, nullptr, 2, "vme"); - VME_SLOT(config, "slot3", sys1121_vme_cards, nullptr, 3, "vme"); - VME_SLOT(config, "slot4", sys1121_vme_cards, nullptr, 4, "vme"); - VME_SLOT(config, "slot5", sys1121_vme_cards, nullptr, 5, "vme"); - VME_SLOT(config, "slot6", sys1121_vme_cards, nullptr, 6, "vme"); - VME_SLOT(config, "slot7", sys1121_vme_cards, nullptr, 7, "vme"); - VME_SLOT(config, "slot8", sys1121_vme_cards, nullptr, 8, "vme"); - } + void sys1121(machine_config &config); +}; - // This is a VME chassis so any ROMs are contained in the cards. - ROM_START(sys1121) - ROM_END +// Input ports +INPUT_PORTS_START(sys1121) +INPUT_PORTS_END + +void sys1121_vme_cards(device_slot_interface &device) +{ + device.option_add("mvme120", VME_MVME120); + device.option_add("mvme121", VME_MVME121); + device.option_add("mvme122", VME_MVME122); + device.option_add("mvme123", VME_MVME123); + device.option_add("smvme2000", VME_SMVME2000); + device.option_add("mvme180", VME_MVME180); + device.option_add("mvme181", VME_MVME181); + device.option_add("mvme327a", VME_MVME327A); + device.option_add("tp881v", TP881V); } +void sys1121_state::sys1121(machine_config &config) +{ + VME(config, "vme", 0); + VME_SLOT(config, "slot1", sys1121_vme_cards, "mvme120", 1, "vme"); + VME_SLOT(config, "slot2", sys1121_vme_cards, nullptr, 2, "vme"); + VME_SLOT(config, "slot3", sys1121_vme_cards, nullptr, 3, "vme"); + VME_SLOT(config, "slot4", sys1121_vme_cards, nullptr, 4, "vme"); + VME_SLOT(config, "slot5", sys1121_vme_cards, nullptr, 5, "vme"); + VME_SLOT(config, "slot6", sys1121_vme_cards, nullptr, 6, "vme"); + VME_SLOT(config, "slot7", sys1121_vme_cards, nullptr, 7, "vme"); + VME_SLOT(config, "slot8", sys1121_vme_cards, nullptr, 8, "vme"); +} + +// This is a VME chassis so any ROMs are contained in the cards. +ROM_START(sys1121) +ROM_END + +} // anonymous namespace + // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS COMP( 1984, sys1121, 0, 0, sys1121, sys1121, sys1121_state, empty_init, "Motorola", "SYS1121", MACHINE_IS_SKELETON ) diff --git a/src/mame/nichibutsu/cop01.cpp b/src/mame/nichibutsu/cop01.cpp index 62819f9b6d3..b7c94e4973b 100644 --- a/src/mame/nichibutsu/cop01.cpp +++ b/src/mame/nichibutsu/cop01.cpp @@ -89,7 +89,6 @@ public: m_soundlatch(*this, "soundlatch") { } - void init_mightguy(); void cop01(machine_config &config); protected: @@ -97,10 +96,12 @@ protected: virtual void machine_reset() override; virtual void video_start() override; - required_device m_audiocpu; - uint8_t sound_command_r(); + void cop01_base(machine_config &config); + + required_device m_audiocpu; + private: // memory pointers required_shared_ptr m_bgvideoram; @@ -151,6 +152,8 @@ public: template DECLARE_READ_LINE_MEMBER(area_r); + void init_mightguy(); + private: void audio_io_map(address_map &map); @@ -696,9 +699,9 @@ void cop01_state::machine_reset() } -void cop01_state::cop01(machine_config &config) +void cop01_state::cop01_base(machine_config &config) { - static constexpr XTAL MAINCPU_CLOCK = XTAL(12'000'000); + constexpr XTAL MAINCPU_CLOCK = XTAL(12'000'000); // basic machine hardware Z80(config, m_maincpu, MAINCPU_CLOCK / 2); // unknown clock / divider @@ -726,6 +729,11 @@ void cop01_state::cop01(machine_config &config) SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch).data_pending_callback().set_inputline(m_audiocpu, 0); +} + +void cop01_state::cop01(machine_config &config) +{ + cop01_base(config); AY8910(config, "ay1", 1250000).add_route(ALL_OUTPUTS, "mono", 0.50); // unknown clock / divider, hand-tuned to match audio reference AY8910(config, "ay2", 1250000).add_route(ALL_OUTPUTS, "mono", 0.25); // " @@ -734,9 +742,9 @@ void cop01_state::cop01(machine_config &config) void mightguy_state::mightguy(machine_config &config) { - cop01(config); + cop01_base(config); - static constexpr XTAL AUDIOCPU_CLOCK = XTAL(8'000'000); + constexpr XTAL AUDIOCPU_CLOCK = XTAL(8'000'000); m_audiocpu->set_clock(AUDIOCPU_CLOCK / 2); // unknown divider m_audiocpu->set_addrmap(AS_IO, &mightguy_state::audio_io_map); @@ -747,10 +755,6 @@ void mightguy_state::mightguy(machine_config &config) YM3526(config, "ymsnd", AUDIOCPU_CLOCK / 2).add_route(ALL_OUTPUTS, "mono", 1.0); // unknown divider DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "mono", 0.5); // unknown DAC - - config.device_remove("ay1"); - config.device_remove("ay2"); - config.device_remove("ay3"); } @@ -874,11 +878,10 @@ ROM_END * *************************************/ -void cop01_state::init_mightguy() +void mightguy_state::init_mightguy() { #if MIGHTGUY_HACK - /* This is a hack to fix the game code to get a fully working - "Starting Area" fake Dip Switch */ + // This is a hack to fix the game code to get a fully working "Starting Area" fake DIP switch uint8_t *rom = (uint8_t *)memregion("maincpu")->base(); rom[0x00e4] = 0x07; // rlca rom[0x00e5] = 0x07; // rlca