From c2c3d685f0229e31be4348d18c8b4fd22d890417 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Tue, 5 Oct 2021 07:26:46 +1100 Subject: More low-effort cleanup. * Got more slot card classes out of headers. * Changed most of the Apple II cards still looking up ROM regions manually to use required_region_ptr. * Removed an unreferenced function leftover from copy-pasting another device from the Videx Uniprint device. --- src/devices/bus/a1bus/a1bus.cpp | 4 + src/devices/bus/a1bus/a1cassette.cpp | 57 ++++++++++++-- src/devices/bus/a1bus/a1cassette.h | 39 +--------- src/devices/bus/a1bus/a1cffa.cpp | 52 +++++++++++-- src/devices/bus/a1bus/a1cffa.h | 39 +--------- src/devices/bus/a2bus/4play.cpp | 35 +++++++-- src/devices/bus/a2bus/4play.h | 27 +------ src/devices/bus/a2bus/a2alfam2.cpp | 129 +++++++++++++++++++------------ src/devices/bus/a2bus/a2alfam2.h | 55 +------------ src/devices/bus/a2bus/a2applicard.cpp | 86 ++++++++++++++++----- src/devices/bus/a2bus/a2applicard.h | 47 +---------- src/devices/bus/a2bus/a2cffa.cpp | 89 ++++++++++++++++++--- src/devices/bus/a2bus/a2cffa.h | 67 +--------------- src/devices/bus/a2bus/a2dx1.cpp | 45 ++++++++--- src/devices/bus/a2bus/a2dx1.h | 32 +------- src/devices/bus/a2bus/a2memexp.cpp | 75 +++++++++++++++--- src/devices/bus/a2bus/a2memexp.h | 53 +------------ src/devices/bus/a2bus/a2midi.cpp | 51 ++++++++++-- src/devices/bus/a2bus/a2midi.h | 37 +-------- src/devices/bus/a2bus/a2sam.cpp | 73 +++++++++-------- src/devices/bus/a2bus/a2sam.h | 31 +------- src/devices/bus/a2bus/a2ssc.cpp | 76 ++++++++++++++++-- src/devices/bus/a2bus/a2ssc.h | 62 +-------------- src/devices/bus/a2bus/a2swyft.cpp | 55 ++++++++++--- src/devices/bus/a2bus/a2swyft.h | 35 +-------- src/devices/bus/a2bus/a2thunderclock.cpp | 61 ++++++++++++--- src/devices/bus/a2bus/a2thunderclock.h | 38 +-------- src/devices/bus/a2bus/a2ultraterm.cpp | 90 +++++++++++++++++---- src/devices/bus/a2bus/a2ultraterm.h | 61 +-------------- src/devices/bus/a2bus/a2videoterm.cpp | 122 +++++++++++++++++++++++++---- src/devices/bus/a2bus/a2videoterm.h | 99 ++---------------------- src/devices/bus/a2bus/a2vulcan.cpp | 89 ++++++++++++++++++--- src/devices/bus/a2bus/a2vulcan.h | 78 ++----------------- src/devices/bus/a2bus/a2zipdrive.cpp | 71 +++++++++++++++-- src/devices/bus/a2bus/a2zipdrive.h | 60 ++------------ src/devices/bus/a2bus/booti.cpp | 56 ++++++++++++-- src/devices/bus/a2bus/booti.h | 39 +--------- src/devices/bus/a2bus/byte8251.cpp | 39 +++++++++- src/devices/bus/a2bus/byte8251.h | 36 +-------- src/devices/bus/a2bus/suprterminal.cpp | 57 +++++++++++++- src/devices/bus/a2bus/suprterminal.h | 47 +---------- src/devices/bus/a2bus/timemasterho.cpp | 70 ++++++++++++++--- src/devices/bus/a2bus/timemasterho.h | 49 +----------- src/devices/bus/a2bus/uniprint.cpp | 65 ++++++++++++---- src/devices/bus/a2bus/uniprint.h | 45 +---------- src/devices/bus/rs232/keyboard.h | 2 - src/devices/bus/rs232/terminal.cpp | 38 ++++++++- src/devices/bus/rs232/terminal.h | 33 +------- src/lib/util/delegate.cpp | 16 +--- src/mame/machine/octo_kbd.h | 3 +- src/mame/machine/x68k_kbd.h | 6 +- 51 files changed, 1386 insertions(+), 1335 deletions(-) diff --git a/src/devices/bus/a1bus/a1bus.cpp b/src/devices/bus/a1bus/a1bus.cpp index 43a05b892ab..21549f5a171 100644 --- a/src/devices/bus/a1bus/a1bus.cpp +++ b/src/devices/bus/a1bus/a1bus.cpp @@ -16,6 +16,10 @@ DEFINE_DEVICE_TYPE(A1BUS_SLOT, a1bus_slot_device, "a1bus_slot", "Apple I Slot") +template class device_finder; +template class device_finder; + + //************************************************************************** // LIVE DEVICE //************************************************************************** diff --git a/src/devices/bus/a1bus/a1cassette.cpp b/src/devices/bus/a1bus/a1cassette.cpp index f486105c6e5..56cd198bac8 100644 --- a/src/devices/bus/a1bus/a1cassette.cpp +++ b/src/devices/bus/a1bus/a1cassette.cpp @@ -10,27 +10,61 @@ #include "emu.h" #include "a1cassette.h" + +#include "imagedev/cassette.h" + #include "speaker.h" + +namespace { + /*************************************************************************** PARAMETERS ***************************************************************************/ -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - #define CASSETTE_ROM_REGION "casrom" -DEFINE_DEVICE_TYPE(A1BUS_CASSETTE, a1bus_cassette_device, "a1cass", "Apple I cassette board") - ROM_START( cassette ) - /* 256-byte cassette interface ROM, in two 82s129 or mmi6301 256x4 proms at locations 3 and 4 on the cassette interface daughtercard (they are labeled "MMI 6301-IJ // 7623L // APPLE-A3" and "MMI 6301-IJ // 7623L // APPLE-A4") */ + // 256-byte cassette interface ROM, in two 82s129 or mmi6301 256x4 proms at locations 3 and 4 on the cassette interface daughtercard (they are labeled "MMI 6301-IJ // 7623L // APPLE-A3" and "MMI 6301-IJ // 7623L // APPLE-A4") ROM_REGION(0x100, CASSETTE_ROM_REGION, 0) ROM_LOAD_NIB_HIGH( "apple-a3.3", 0x0000, 0x0100, CRC(6eae8f52) SHA1(71906932727ef70952ef6afe6b08708df15cd67d) ) ROM_LOAD_NIB_LOW( "apple-a4.4", 0x0000, 0x0100, CRC(94efa977) SHA1(851f3bd6863859a1a6909179a5e5bf744b3d807e) ) ROM_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a1bus_cassette_device: + public device_t, + public device_a1bus_card_interface +{ +public: + // construction/destruction + a1bus_cassette_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + uint8_t cassette_r(offs_t offset); + void cassette_w(offs_t offset, uint8_t data); + +protected: + a1bus_cassette_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + // optional information overrides + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + + + void cassette_toggle_output(); + + optional_device m_cassette; + +private: + required_region_ptr m_rom; + int m_cassette_output_flipflop; +}; + //------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- @@ -195,3 +229,12 @@ void a1bus_cassette_device::cassette_w(offs_t offset, uint8_t data) cassette_toggle_output(); } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A1BUS_CASSETTE, device_a1bus_card_interface, a1bus_cassette_device, "a1cass", "Apple I cassette board") diff --git a/src/devices/bus/a1bus/a1cassette.h b/src/devices/bus/a1bus/a1cassette.h index e188e9ef4cd..fb0ca1b679b 100644 --- a/src/devices/bus/a1bus/a1cassette.h +++ b/src/devices/bus/a1bus/a1cassette.h @@ -14,43 +14,8 @@ #pragma once #include "a1bus.h" -#include "imagedev/cassette.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a1bus_cassette_device: - public device_t, - public device_a1bus_card_interface -{ -public: - // construction/destruction - a1bus_cassette_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - uint8_t cassette_r(offs_t offset); - void cassette_w(offs_t offset, uint8_t data); - -protected: - a1bus_cassette_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; - - - void cassette_toggle_output(); - - optional_device m_cassette; - -private: - required_region_ptr m_rom; - int m_cassette_output_flipflop; -}; - -// device type definition -DECLARE_DEVICE_TYPE(A1BUS_CASSETTE, a1bus_cassette_device) +// device type declaration +DECLARE_DEVICE_TYPE(A1BUS_CASSETTE, device_a1bus_card_interface) #endif // MAME_BUS_A1BUS_A1CASSETTE_H diff --git a/src/devices/bus/a1bus/a1cffa.cpp b/src/devices/bus/a1bus/a1cffa.cpp index 5656509a62d..9818caf9fc6 100644 --- a/src/devices/bus/a1bus/a1cffa.cpp +++ b/src/devices/bus/a1bus/a1cffa.cpp @@ -11,24 +11,55 @@ #include "emu.h" #include "a1cffa.h" +#include "bus/ata/ataintf.h" + + +namespace { + /*************************************************************************** PARAMETERS ***************************************************************************/ -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - #define CFFA_ROM_REGION "cffa_rom" #define CFFA_ATA_TAG "cffa_ata" -DEFINE_DEVICE_TYPE(A1BUS_CFFA, a1bus_cffa_device, "cffa1", "CFFA Compact Flash for Apple I") - ROM_START( cffa ) ROM_REGION(0x2000, CFFA_ROM_REGION, 0) ROM_LOAD ("cffaromv1.1.bin", 0x0000, 0x1fe0, CRC(bf6b55ad) SHA1(6a290be18485a06f243a3561c4e01be5aafa4bfe) ) ROM_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a1bus_cffa_device: + public device_t, + public device_a1bus_card_interface +{ +public: + // construction/destruction + a1bus_cffa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + uint8_t cffa_r(offs_t offset); + void cffa_w(offs_t offset, uint8_t data); + +protected: + a1bus_cffa_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + // optional information overrides + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + + required_device m_ata; + +private: + required_region_ptr m_rom; + uint16_t m_lastdata; + bool m_writeprotect; +}; + //------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- @@ -147,3 +178,12 @@ void a1bus_cffa_device::cffa_w(offs_t offset, uint8_t data) } } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A1BUS_CFFA, device_a1bus_card_interface, a1bus_cffa_device, "cffa1", "CFFA Compact Flash for Apple I") diff --git a/src/devices/bus/a1bus/a1cffa.h b/src/devices/bus/a1bus/a1cffa.h index 5d9deb7c160..f82a300e349 100644 --- a/src/devices/bus/a1bus/a1cffa.h +++ b/src/devices/bus/a1bus/a1cffa.h @@ -14,41 +14,8 @@ #pragma once #include "a1bus.h" -#include "bus/ata/ataintf.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a1bus_cffa_device: - public device_t, - public device_a1bus_card_interface -{ -public: - // construction/destruction - a1bus_cffa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - uint8_t cffa_r(offs_t offset); - void cffa_w(offs_t offset, uint8_t data); - -protected: - a1bus_cffa_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; - - required_device m_ata; - -private: - required_region_ptr m_rom; - uint16_t m_lastdata; - bool m_writeprotect; -}; - -// device type definition -DECLARE_DEVICE_TYPE(A1BUS_CFFA, a1bus_cffa_device) + +// device type declaration +DECLARE_DEVICE_TYPE(A1BUS_CFFA, device_a1bus_card_interface) #endif // MAME_BUS_A1BUS_A1CFFA_H diff --git a/src/devices/bus/a2bus/4play.cpp b/src/devices/bus/a2bus/4play.cpp index eab126e5a6d..c51ef306cff 100644 --- a/src/devices/bus/a2bus/4play.cpp +++ b/src/devices/bus/a2bus/4play.cpp @@ -12,15 +12,31 @@ #include "emu.h" #include "4play.h" -/*************************************************************************** - PARAMETERS -***************************************************************************/ + +namespace { //************************************************************************** -// GLOBAL VARIABLES +// TYPE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(A2BUS_4PLAY, a2bus_4play_device, "a24play", "4play Joystick Card (rev. B)") +class a2bus_4play_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_4play_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + a2bus_4play_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual ioport_constructor device_input_ports() const override; + + virtual uint8_t read_c0nx(uint8_t offset) override; + + required_ioport m_p1, m_p2, m_p3, m_p4; +}; static INPUT_PORTS_START( a24play ) PORT_START("p1") @@ -123,3 +139,12 @@ uint8_t a2bus_4play_device::read_c0nx(uint8_t offset) return 0; } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_4PLAY, device_a2bus_card_interface, a2bus_4play_device, "a24play", "4play Joystick Card (rev. B)") diff --git a/src/devices/bus/a2bus/4play.h b/src/devices/bus/a2bus/4play.h index 96c407d315e..69a5a2b86a1 100644 --- a/src/devices/bus/a2bus/4play.h +++ b/src/devices/bus/a2bus/4play.h @@ -14,32 +14,7 @@ #include "a2bus.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_4play_device: - public device_t, - public device_a2bus_card_interface -{ -public: - // construction/destruction - a2bus_4play_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - a2bus_4play_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual ioport_constructor device_input_ports() const override; - - virtual uint8_t read_c0nx(uint8_t offset) override; - - required_ioport m_p1, m_p2, m_p3, m_p4; - -private: -}; - // device type definition -DECLARE_DEVICE_TYPE(A2BUS_4PLAY, a2bus_4play_device) +DECLARE_DEVICE_TYPE(A2BUS_4PLAY, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_4PLAY_H diff --git a/src/devices/bus/a2bus/a2alfam2.cpp b/src/devices/bus/a2bus/a2alfam2.cpp index e97722708da..72815dcce53 100644 --- a/src/devices/bus/a2bus/a2alfam2.cpp +++ b/src/devices/bus/a2bus/a2alfam2.cpp @@ -11,19 +11,67 @@ #include "emu.h" #include "a2alfam2.h" + #include "sound/sn76496.h" + #include "speaker.h" -/*************************************************************************** - PARAMETERS -***************************************************************************/ +#include + + +namespace { //************************************************************************** -// GLOBAL VARIABLES +// TYPE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(A2BUS_ALFAM2, a2bus_alfam2_device, "a2alfam2", "ALF MC1 / Apple Music II") -DEFINE_DEVICE_TYPE(A2BUS_AESMS, a2bus_aesms_device, "a2aesms", "Applied Engineering Super Music Synthesizer") +class a2bus_alfam2_device: + public device_t, + public device_a2bus_card_interface +{ +public: + a2bus_alfam2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + a2bus_alfam2_device(mconfig, A2BUS_ALFAM2, tag, owner, clock) + { + } + +protected: + // construction/destruction + a2bus_alfam2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual bool take_c800() override { return false; } + + required_device m_sn1; + required_device m_sn2; + required_device m_sn3; + optional_device m_sn4; + +private: + uint8_t m_latch[4]; +}; + +class a2bus_aesms_device : public a2bus_alfam2_device +{ +public: + a2bus_aesms_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + a2bus_alfam2_device(mconfig, A2BUS_AESMS, tag, owner, clock) + { + } + +protected: + virtual void device_add_mconfig(machine_config &config) override; +}; + +/*************************************************************************** + PARAMETERS +***************************************************************************/ #define SN1_TAG "sn76489_1" // left #define SN2_TAG "sn76489_2" // center @@ -39,16 +87,18 @@ DEFINE_DEVICE_TYPE(A2BUS_AESMS, a2bus_aesms_device, "a2aesms", "Applied Engin // device_add_mconfig - add device configuration //------------------------------------------------- -void a2bus_sn76489_device::device_add_mconfig(machine_config &config) +void a2bus_alfam2_device::device_add_mconfig(machine_config &config) { SPEAKER(config, "alf_l").front_left(); SPEAKER(config, "alf_r").front_right(); SN76489(config, m_sn1, 1020484); m_sn1->add_route(ALL_OUTPUTS, "alf_l", 0.50); + SN76489(config, m_sn2, 1020484); m_sn2->add_route(ALL_OUTPUTS, "alf_l", 0.50); m_sn2->add_route(ALL_OUTPUTS, "alf_r", 0.50); + SN76489(config, m_sn3, 1020484); m_sn3->add_route(ALL_OUTPUTS, "alf_r", 0.50); } @@ -77,98 +127,81 @@ void a2bus_aesms_device::device_add_mconfig(machine_config &config) // LIVE DEVICE //************************************************************************** -a2bus_sn76489_device::a2bus_sn76489_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : +a2bus_alfam2_device::a2bus_alfam2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), device_a2bus_card_interface(mconfig, *this), m_sn1(*this, SN1_TAG), m_sn2(*this, SN2_TAG), m_sn3(*this, SN3_TAG), - m_sn4(*this, SN4_TAG), m_latch0(0), m_latch1(0), m_latch2(0), m_latch3(0), m_has4thsn(false) + m_sn4(*this, SN4_TAG), + m_latch{ 0, 0, 0, 0 } { } -a2bus_alfam2_device::a2bus_alfam2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - a2bus_sn76489_device(mconfig, A2BUS_ALFAM2, tag, owner, clock) -{ - m_has4thsn = false; -} - -a2bus_aesms_device::a2bus_aesms_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - a2bus_sn76489_device(mconfig, A2BUS_AESMS, tag, owner, clock) -{ - m_has4thsn = true; -} - //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- -void a2bus_sn76489_device::device_start() +void a2bus_alfam2_device::device_start() { - m_latch0 = m_latch1 = m_latch2 = m_latch3 = 0; - - save_item(NAME(m_latch0)); - save_item(NAME(m_latch1)); - save_item(NAME(m_latch2)); - save_item(NAME(m_latch3)); + save_item(NAME(m_latch)); } -void a2bus_sn76489_device::device_reset() +void a2bus_alfam2_device::device_reset() { - m_latch0 = m_latch1 = m_latch2 = m_latch3 = 0; + std::fill(std::begin(m_latch), std::end(m_latch), 0); } -uint8_t a2bus_sn76489_device::read_c0nx(uint8_t offset) +uint8_t a2bus_alfam2_device::read_c0nx(uint8_t offset) { // SN76489 can't be read, it appears from the schematics this is what happens switch (offset) { case 0: - return m_latch0; - case 1: - return m_latch1; - case 2: - return m_latch2; - case 3: - return m_latch3; + return m_latch[offset]; } return 0xff; } -void a2bus_sn76489_device::write_c0nx(uint8_t offset, uint8_t data) +void a2bus_alfam2_device::write_c0nx(uint8_t offset, uint8_t data) { switch (offset) { case 0: m_sn1->write(data); - m_latch0 = data; + m_latch[0] = data; break; case 1: m_sn2->write(data); - m_latch1 = data; + m_latch[1] = data; break; case 2: m_sn3->write(data); - m_latch2 = data; + m_latch[2] = data; break; case 3: - if (m_has4thsn) + if (m_sn4) { m_sn4->write(data); - m_latch3 = data; + m_latch[3] = data; } break; } } -bool a2bus_sn76489_device::take_c800() -{ - return false; -} +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_ALFAM2, device_a2bus_card_interface, a2bus_alfam2_device, "a2alfam2", "ALF MC1 / Apple Music II") +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_AESMS, device_a2bus_card_interface, a2bus_aesms_device, "a2aesms", "Applied Engineering Super Music Synthesizer") diff --git a/src/devices/bus/a2bus/a2alfam2.h b/src/devices/bus/a2bus/a2alfam2.h index 48088cdffd6..ee29faf6622 100644 --- a/src/devices/bus/a2bus/a2alfam2.h +++ b/src/devices/bus/a2bus/a2alfam2.h @@ -14,58 +14,9 @@ #pragma once #include "a2bus.h" -#include "sound/sn76496.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_sn76489_device: - public device_t, - public device_a2bus_card_interface -{ -protected: - // construction/destruction - a2bus_sn76489_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - - // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual bool take_c800() override; - - required_device m_sn1; - required_device m_sn2; - required_device m_sn3; - optional_device m_sn4; - -private: - uint8_t m_latch0, m_latch1, m_latch2, m_latch3; - -protected: - bool m_has4thsn; -}; - -class a2bus_alfam2_device : public a2bus_sn76489_device -{ -public: - a2bus_alfam2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); -}; - -class a2bus_aesms_device : public a2bus_sn76489_device -{ -public: - a2bus_aesms_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - virtual void device_add_mconfig(machine_config &config) override; -}; - -// device type definition -DECLARE_DEVICE_TYPE(A2BUS_ALFAM2, a2bus_alfam2_device) -DECLARE_DEVICE_TYPE(A2BUS_AESMS, a2bus_aesms_device) +// device type declaration +DECLARE_DEVICE_TYPE(A2BUS_ALFAM2, device_a2bus_card_interface) +DECLARE_DEVICE_TYPE(A2BUS_AESMS, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_A2ALFAM2_H diff --git a/src/devices/bus/a2bus/a2applicard.cpp b/src/devices/bus/a2bus/a2applicard.cpp index d9cbb00e42d..5395295a207 100644 --- a/src/devices/bus/a2bus/a2applicard.cpp +++ b/src/devices/bus/a2bus/a2applicard.cpp @@ -16,18 +16,68 @@ #include "cpu/z80/z80.h" #include "machine/z80ctc.h" + +namespace { + /*************************************************************************** PARAMETERS ***************************************************************************/ +#define Z80_TAG "z80" +#define Z80_ROM_REGION "z80_rom" + +ROM_START( a2applicard ) + ROM_REGION(0x800, Z80_ROM_REGION, 0) + ROM_LOAD( "applicard-v9.bin", 0x000000, 0x000800, CRC(1d461000) SHA1(71d633be864b6084362e85108a4e600cbe6e44fe) ) +ROM_END + //************************************************************************** -// GLOBAL VARIABLES +// TYPE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(A2BUS_APPLICARD, a2bus_applicard_device, "a2aplcrd", "PCPI Applicard") +class a2bus_applicard_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_applicard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); -#define Z80_TAG "z80" -#define Z80_ROM_REGION "z80_rom" + uint8_t z80_io_r(offs_t offset); + void z80_io_w(offs_t offset, uint8_t data); + +protected: + a2bus_applicard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual bool take_c800() override { return false; } + +private: + required_device m_z80; + required_region_ptr m_z80rom; + + bool m_bROMAtZ80Zero; + bool m_z80stat, m_6502stat; + uint8_t m_toz80, m_to6502; + uint8_t m_z80ram[64*1024]; + + uint8_t dma_r(offs_t offset); + void dma_w(offs_t offset, uint8_t data); + + void z80_io(address_map &map); + void z80_mem(address_map &map); +}; + +/*************************************************************************** + FUNCTION PROTOTYPES +***************************************************************************/ void a2bus_applicard_device::z80_mem(address_map &map) { @@ -39,15 +89,6 @@ void a2bus_applicard_device::z80_io(address_map &map) map(0x00, 0x60).mirror(0xff00).rw(FUNC(a2bus_applicard_device::z80_io_r), FUNC(a2bus_applicard_device::z80_io_w)); } -ROM_START( a2applicard ) - ROM_REGION(0x800, Z80_ROM_REGION, 0) - ROM_LOAD( "applicard-v9.bin", 0x000000, 0x000800, CRC(1d461000) SHA1(71d633be864b6084362e85108a4e600cbe6e44fe) ) -ROM_END - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - //------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- @@ -75,7 +116,9 @@ const tiny_rom_entry *a2bus_applicard_device::device_rom_region() const a2bus_applicard_device::a2bus_applicard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), device_a2bus_card_interface(mconfig, *this), - m_z80(*this, Z80_TAG), m_bROMAtZ80Zero(false), m_z80stat(false), m_6502stat(false), m_toz80(0), m_to6502(0), m_z80rom(nullptr) + m_z80(*this, Z80_TAG), + m_z80rom(*this, Z80_ROM_REGION), + m_bROMAtZ80Zero(false), m_z80stat(false), m_6502stat(false), m_toz80(0), m_to6502(0) { } @@ -90,9 +133,6 @@ a2bus_applicard_device::a2bus_applicard_device(const machine_config &mconfig, co void a2bus_applicard_device::device_start() { - // locate Z80 ROM - m_z80rom = device().machine().root_device().memregion(this->subtag(Z80_ROM_REGION).c_str())->base(); - save_item(NAME(m_bROMAtZ80Zero)); save_item(NAME(m_z80stat)); save_item(NAME(m_6502stat)); @@ -272,7 +312,11 @@ void a2bus_applicard_device::dma_w(offs_t offset, uint8_t data) } } -bool a2bus_applicard_device::take_c800() -{ - return false; -} +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_APPLICARD, device_a2bus_card_interface, a2bus_applicard_device, "a2aplcrd", "PCPI Applicard") diff --git a/src/devices/bus/a2bus/a2applicard.h b/src/devices/bus/a2bus/a2applicard.h index bfa43375efe..51f39bb3a11 100644 --- a/src/devices/bus/a2bus/a2applicard.h +++ b/src/devices/bus/a2bus/a2applicard.h @@ -15,50 +15,7 @@ #include "a2bus.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_applicard_device: - public device_t, - public device_a2bus_card_interface -{ -public: - // construction/destruction - a2bus_applicard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - uint8_t z80_io_r(offs_t offset); - void z80_io_w(offs_t offset, uint8_t data); - -protected: - a2bus_applicard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; - - // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual bool take_c800() override; - -private: - required_device m_z80; - bool m_bROMAtZ80Zero; - bool m_z80stat, m_6502stat; - uint8_t m_toz80, m_to6502; - uint8_t m_z80ram[64*1024]; - uint8_t *m_z80rom; - - uint8_t dma_r(offs_t offset); - void dma_w(offs_t offset, uint8_t data); - - void z80_io(address_map &map); - void z80_mem(address_map &map); -}; - -// device type definition -DECLARE_DEVICE_TYPE(A2BUS_APPLICARD, a2bus_applicard_device) +// device type declaration +DECLARE_DEVICE_TYPE(A2BUS_APPLICARD, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_A2APPLICARD_H diff --git a/src/devices/bus/a2bus/a2cffa.cpp b/src/devices/bus/a2bus/a2cffa.cpp index d08ac21f017..8942e05558d 100644 --- a/src/devices/bus/a2bus/a2cffa.cpp +++ b/src/devices/bus/a2bus/a2cffa.cpp @@ -13,15 +13,14 @@ #include "emu.h" #include "a2cffa.h" + #include "imagedev/harddriv.h" +#include "bus/ata/ataintf.h" + #include "softlist.h" -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** -DEFINE_DEVICE_TYPE(A2BUS_CFFA2, a2bus_cffa2_device, "a2cffa2", "CFFA 2.0 Compact Flash (65C02 firmware, www.dreher.net)") -DEFINE_DEVICE_TYPE(A2BUS_CFFA2_6502, a2bus_cffa2_6502_device, "a2cffa02", "CFFA 2.0 Compact Flash (6502 firmware, www.dreher.net)") +namespace { #define CFFA2_ROM_REGION "cffa2_rom" #define CFFA2_ATA_TAG "cffa2_ata" @@ -36,6 +35,66 @@ ROM_START( cffa2_6502 ) ROM_LOAD( "cffa20ee02.bin", 0x000000, 0x001000, CRC(3ecafce5) SHA1(d600692ed9626668233a22a48236af639410cb7b) ) ROM_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_cffa2000_device: + public device_t, + public device_a2bus_card_interface +{ +protected: + // construction/destruction + a2bus_cffa2000_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual uint8_t read_c800(uint16_t offset) override; + virtual void write_c800(uint16_t offset, uint8_t data) override; + + required_device m_ata; + required_region_ptr m_rom; + + uint8_t m_eeprom[0x1000]; + +private: + uint16_t m_lastdata, m_lastreaddata; + bool m_writeprotect; + bool m_inwritecycle; +}; + +class a2bus_cffa2_device : public a2bus_cffa2000_device, public device_nvram_interface +{ +public: + a2bus_cffa2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // device_config_nvram_interface overrides + virtual void nvram_default() override; + virtual void nvram_read(emu_file &file) override; + virtual void nvram_write(emu_file &file) override; +}; + +class a2bus_cffa2_6502_device : public a2bus_cffa2000_device, public device_nvram_interface +{ +public: + a2bus_cffa2_6502_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + virtual const tiny_rom_entry *device_rom_region() const override; + +protected: + // device_config_nvram_interface overrides + virtual void nvram_default() override; + virtual void nvram_read(emu_file &file) override; + virtual void nvram_write(emu_file &file) override; +}; + /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -74,7 +133,9 @@ const tiny_rom_entry *a2bus_cffa2_6502_device::device_rom_region() const a2bus_cffa2000_device::a2bus_cffa2000_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), device_a2bus_card_interface(mconfig, *this), - m_ata(*this, CFFA2_ATA_TAG), m_rom(nullptr), m_lastdata(0), m_lastreaddata(0), m_writeprotect(false), m_inwritecycle(false) + m_ata(*this, CFFA2_ATA_TAG), + m_rom(*this, CFFA2_ROM_REGION), + m_lastdata(0), m_lastreaddata(0), m_writeprotect(false), m_inwritecycle(false) { } @@ -96,8 +157,6 @@ a2bus_cffa2_6502_device::a2bus_cffa2_6502_device(const machine_config &mconfig, void a2bus_cffa2000_device::device_start() { - m_rom = device().machine().root_device().memregion(this->subtag(CFFA2_ROM_REGION).c_str())->base(); - // patch default setting so slave device is enabled and up to 13 devices on both connectors m_rom[0x800] = 13; m_rom[0x801] = 13; @@ -125,7 +184,7 @@ uint8_t a2bus_cffa2000_device::read_c0nx(uint8_t offset) switch (offset) { case 0: - return m_lastreaddata>>8; + return m_lastreaddata >> 8; case 3: m_writeprotect = false; @@ -150,7 +209,7 @@ uint8_t a2bus_cffa2000_device::read_c0nx(uint8_t offset) case 0xd: case 0xe: case 0xf: - return m_ata->cs0_r(offset-8, 0xff); + return m_ata->cs0_r(offset - 8, 0xff); } return 0xff; @@ -260,3 +319,13 @@ void a2bus_cffa2_6502_device::nvram_write(emu_file &file) { file.write(m_eeprom, 0x1000); } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_CFFA2, device_a2bus_card_interface, a2bus_cffa2_device, "a2cffa2", "CFFA 2.0 Compact Flash (65C02 firmware, www.dreher.net)") +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_CFFA2_6502, device_a2bus_card_interface, a2bus_cffa2_6502_device, "a2cffa02", "CFFA 2.0 Compact Flash (6502 firmware, www.dreher.net)") diff --git a/src/devices/bus/a2bus/a2cffa.h b/src/devices/bus/a2bus/a2cffa.h index d36d8470e8a..f1b7111197f 100644 --- a/src/devices/bus/a2bus/a2cffa.h +++ b/src/devices/bus/a2bus/a2cffa.h @@ -15,70 +15,9 @@ #pragma once #include "a2bus.h" -#include "bus/ata/ataintf.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_cffa2000_device: - public device_t, - public device_a2bus_card_interface -{ -protected: - // construction/destruction - a2bus_cffa2000_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; - - // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual uint8_t read_c800(uint16_t offset) override; - virtual void write_c800(uint16_t offset, uint8_t data) override; - - required_device m_ata; - - uint8_t *m_rom; - uint8_t m_eeprom[0x1000]; - -private: - uint16_t m_lastdata, m_lastreaddata; - bool m_writeprotect; - bool m_inwritecycle; -}; - -class a2bus_cffa2_device : public a2bus_cffa2000_device, public device_nvram_interface -{ -public: - a2bus_cffa2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - // device_config_nvram_interface overrides - virtual void nvram_default() override; - virtual void nvram_read(emu_file &file) override; - virtual void nvram_write(emu_file &file) override; -}; - -class a2bus_cffa2_6502_device : public a2bus_cffa2000_device, public device_nvram_interface -{ -public: - a2bus_cffa2_6502_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual const tiny_rom_entry *device_rom_region() const override; - -protected: - // device_config_nvram_interface overrides - virtual void nvram_default() override; - virtual void nvram_read(emu_file &file) override; - virtual void nvram_write(emu_file &file) override; -}; - -// device type definition -DECLARE_DEVICE_TYPE(A2BUS_CFFA2, a2bus_cffa2_device) -DECLARE_DEVICE_TYPE(A2BUS_CFFA2_6502, a2bus_cffa2_6502_device) +// device type declaration +DECLARE_DEVICE_TYPE(A2BUS_CFFA2, device_a2bus_card_interface) +DECLARE_DEVICE_TYPE(A2BUS_CFFA2_6502, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_A2CFFA_H diff --git a/src/devices/bus/a2bus/a2dx1.cpp b/src/devices/bus/a2bus/a2dx1.cpp index 994be433e35..ae8f80091b1 100644 --- a/src/devices/bus/a2bus/a2dx1.cpp +++ b/src/devices/bus/a2bus/a2dx1.cpp @@ -10,17 +10,40 @@ #include "emu.h" #include "a2dx1.h" + +#include "sound/dac.h" + #include "speaker.h" -/*************************************************************************** - PARAMETERS -***************************************************************************/ + +namespace { //************************************************************************** -// GLOBAL VARIABLES +// TYPE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(A2BUS_DX1, a2bus_dx1_device, "a2dx1", "Decillonix DX-1") +class a2bus_dx1_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_dx1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + a2bus_dx1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_add_mconfig(machine_config &config) override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual bool take_c800() override { return false; } + + required_device m_dac; + required_device m_dacvol; +}; /*************************************************************************** FUNCTION PROTOTYPES @@ -96,7 +119,11 @@ void a2bus_dx1_device::write_c0nx(uint8_t offset, uint8_t data) } } -bool a2bus_dx1_device::take_c800() -{ - return false; -} +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_DX1, device_a2bus_card_interface, a2bus_dx1_device, "a2dx1", "Decillonix DX-1") diff --git a/src/devices/bus/a2bus/a2dx1.h b/src/devices/bus/a2bus/a2dx1.h index c4ea9f561e0..74557cf78d3 100644 --- a/src/devices/bus/a2bus/a2dx1.h +++ b/src/devices/bus/a2bus/a2dx1.h @@ -14,36 +14,8 @@ #pragma once #include "a2bus.h" -#include "sound/dac.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_dx1_device: - public device_t, - public device_a2bus_card_interface -{ -public: - // construction/destruction - a2bus_dx1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - a2bus_dx1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_add_mconfig(machine_config &config) override; - - // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual bool take_c800() override; - - required_device m_dac; - required_device m_dacvol; -}; - -// device type definition -DECLARE_DEVICE_TYPE(A2BUS_DX1, a2bus_dx1_device) +// device type declaration +DECLARE_DEVICE_TYPE(A2BUS_DX1, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_A2DX1_H diff --git a/src/devices/bus/a2bus/a2memexp.cpp b/src/devices/bus/a2bus/a2memexp.cpp index 6b088a1ea12..4c10de81848 100644 --- a/src/devices/bus/a2bus/a2memexp.cpp +++ b/src/devices/bus/a2bus/a2memexp.cpp @@ -12,17 +12,12 @@ #include "a2memexp.h" +namespace { + /*************************************************************************** PARAMETERS ***************************************************************************/ -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -DEFINE_DEVICE_TYPE(A2BUS_MEMEXP, a2bus_memexpapple_device, "a2memexp", "Apple II Memory Expansion Card") -DEFINE_DEVICE_TYPE(A2BUS_RAMFACTOR, a2bus_ramfactor_device, "a2ramfac", "Applied Engineering RamFactor") - #define MEMEXP_ROM_REGION "memexp_rom" ROM_START( memexp ) @@ -38,6 +33,56 @@ ROM_START( ramfactor ) ROM_LOAD( "ae ramfactor rom v1.0.bin", 0x6000, 0x2000, CRC(39c2162a) SHA1(9286d35907939aadb1fffd3e1d75603fe3e846ad) ) ROM_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_memexp_device: + public device_t, + public device_a2bus_card_interface +{ +public: + bool m_isramfactor; + uint8_t m_bankhior; + int m_addrmask; + +protected: + // construction/destruction + a2bus_memexp_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual uint8_t read_c800(uint16_t offset) override; + +private: + required_region_ptr m_rom; + uint8_t m_regs[0x10]; + uint8_t m_ram[8*1024*1024]; + int m_wptr, m_liveptr; +}; + +class a2bus_memexpapple_device : public a2bus_memexp_device +{ +public: + a2bus_memexpapple_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class a2bus_ramfactor_device : public a2bus_memexp_device +{ +public: + a2bus_ramfactor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual const tiny_rom_entry *device_rom_region() const override; +}; + /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -70,7 +115,9 @@ const tiny_rom_entry *a2bus_ramfactor_device::device_rom_region() const a2bus_memexp_device::a2bus_memexp_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), - device_a2bus_card_interface(mconfig, *this), m_isramfactor(false), m_bankhior(0), m_addrmask(0), m_rom(nullptr), m_wptr(0), m_liveptr(0) + device_a2bus_card_interface(mconfig, *this), m_isramfactor(false), m_bankhior(0), m_addrmask(0), + m_rom(*this, MEMEXP_ROM_REGION), + m_wptr(0), m_liveptr(0) { } @@ -96,8 +143,6 @@ a2bus_ramfactor_device::a2bus_ramfactor_device(const machine_config &mconfig, co void a2bus_memexp_device::device_start() { - m_rom = device().machine().root_device().memregion(this->subtag(MEMEXP_ROM_REGION).c_str())->base(); - memset(m_ram, 0xff, 1024*1024*sizeof(uint8_t)); save_item(NAME(m_regs)); @@ -212,3 +257,13 @@ uint8_t a2bus_memexp_device::read_c800(uint16_t offset) else return m_rom[offset+0x800]; } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_MEMEXP, device_a2bus_card_interface, a2bus_memexpapple_device, "a2memexp", "Apple II Memory Expansion Card") +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_RAMFACTOR, device_a2bus_card_interface, a2bus_ramfactor_device, "a2ramfac", "Applied Engineering RamFactor") diff --git a/src/devices/bus/a2bus/a2memexp.h b/src/devices/bus/a2bus/a2memexp.h index 2eeb3e157ae..0823ce27b9a 100644 --- a/src/devices/bus/a2bus/a2memexp.h +++ b/src/devices/bus/a2bus/a2memexp.h @@ -15,57 +15,8 @@ #include "a2bus.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_memexp_device: - public device_t, - public device_a2bus_card_interface -{ -public: - bool m_isramfactor; - uint8_t m_bankhior; - int m_addrmask; - -protected: - // construction/destruction - a2bus_memexp_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; - - // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual uint8_t read_c800(uint16_t offset) override; - -private: - uint8_t *m_rom; - uint8_t m_regs[0x10]; - uint8_t m_ram[8*1024*1024]; - int m_wptr, m_liveptr; -}; - -class a2bus_memexpapple_device : public a2bus_memexp_device -{ -public: - a2bus_memexpapple_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); -}; - -class a2bus_ramfactor_device : public a2bus_memexp_device -{ -public: - a2bus_ramfactor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual const tiny_rom_entry *device_rom_region() const override; -}; - // device type definition -DECLARE_DEVICE_TYPE(A2BUS_MEMEXP, a2bus_memexpapple_device) -DECLARE_DEVICE_TYPE(A2BUS_RAMFACTOR, a2bus_ramfactor_device) +DECLARE_DEVICE_TYPE(A2BUS_MEMEXP, device_a2bus_card_interface) +DECLARE_DEVICE_TYPE(A2BUS_RAMFACTOR, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_A2MEMEXP_H diff --git a/src/devices/bus/a2bus/a2midi.cpp b/src/devices/bus/a2bus/a2midi.cpp index dfd6ce71694..f1cc7ecb2a6 100644 --- a/src/devices/bus/a2bus/a2midi.cpp +++ b/src/devices/bus/a2bus/a2midi.cpp @@ -10,23 +10,55 @@ #include "emu.h" #include "a2midi.h" -#include "machine/clock.h" + #include "bus/midi/midi.h" +#include "machine/6840ptm.h" +#include "machine/6850acia.h" +#include "machine/clock.h" +namespace { + /*************************************************************************** PARAMETERS ***************************************************************************/ +#define MIDI_PTM_TAG "midi_ptm" +#define MIDI_ACIA_TAG "midi_acia" + + //************************************************************************** -// GLOBAL VARIABLES +// TYPE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(A2BUS_MIDI, a2bus_midi_device, "a2midi", "6850 MIDI card") +class a2bus_midi_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_midi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); -#define MIDI_PTM_TAG "midi_ptm" -#define MIDI_ACIA_TAG "midi_acia" +protected: + a2bus_midi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + + required_device m_ptm; + required_device m_acia; + +private: + DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); + DECLARE_WRITE_LINE_MEMBER( ptm_irq_w ); + DECLARE_WRITE_LINE_MEMBER( write_acia_clock ); + + bool m_acia_irq, m_ptm_irq; +}; //------------------------------------------------- // device_add_mconfig - add device configuration @@ -150,3 +182,12 @@ WRITE_LINE_MEMBER( a2bus_midi_device::write_acia_clock ) m_acia->write_txc(state); m_acia->write_rxc(state); } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_MIDI, device_a2bus_card_interface, a2bus_midi_device, "a2midi", "6850 MIDI card") diff --git a/src/devices/bus/a2bus/a2midi.h b/src/devices/bus/a2bus/a2midi.h index 67da46ee89f..c4f6b1462ee 100644 --- a/src/devices/bus/a2bus/a2midi.h +++ b/src/devices/bus/a2bus/a2midi.h @@ -14,43 +14,8 @@ #pragma once #include "a2bus.h" -#include "machine/6840ptm.h" -#include "machine/6850acia.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_midi_device: - public device_t, - public device_a2bus_card_interface -{ -public: - // construction/destruction - a2bus_midi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - a2bus_midi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - - required_device m_ptm; - required_device m_acia; - -private: - DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); - DECLARE_WRITE_LINE_MEMBER( ptm_irq_w ); - DECLARE_WRITE_LINE_MEMBER( write_acia_clock ); - - bool m_acia_irq, m_ptm_irq; -}; // device type definition -DECLARE_DEVICE_TYPE(A2BUS_MIDI, a2bus_midi_device) +DECLARE_DEVICE_TYPE(A2BUS_MIDI, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_A2MIDI_H diff --git a/src/devices/bus/a2bus/a2sam.cpp b/src/devices/bus/a2bus/a2sam.cpp index b796b3008d3..ecedc1eaa61 100644 --- a/src/devices/bus/a2bus/a2sam.cpp +++ b/src/devices/bus/a2bus/a2sam.cpp @@ -10,21 +10,42 @@ #include "emu.h" #include "a2sam.h" + +#include "sound/dac.h" + #include "speaker.h" -/*************************************************************************** - PARAMETERS -***************************************************************************/ + +namespace { //************************************************************************** -// GLOBAL VARIABLES +// TYPE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(A2BUS_SAM, a2bus_sam_device, "a2sam", "Don't Ask Software S.A.M.") - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ +class a2bus_sam_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_sam_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, A2BUS_SAM, tag, owner, clock), + device_a2bus_card_interface(mconfig, *this), + m_dac(*this, "dac") + { + } + +protected: + virtual void device_start() override { } + virtual void device_reset() override { } + virtual void device_add_mconfig(machine_config &config) override; + + // overrides of standard a2bus slot functions + virtual void write_c0nx(uint8_t offset, uint8_t data) override { m_dac->write(data); } + virtual bool take_c800() override { return false; } + + required_device m_dac; +}; //------------------------------------------------- // device_add_mconfig - add device configuration @@ -36,35 +57,11 @@ void a2bus_sam_device::device_add_mconfig(machine_config &config) DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC } -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -a2bus_sam_device::a2bus_sam_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - device_t(mconfig, A2BUS_SAM, tag, owner, clock), - device_a2bus_card_interface(mconfig, *this), - m_dac(*this, "dac") -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void a2bus_sam_device::device_start() -{ -} +} // anonymous namespace -void a2bus_sam_device::device_reset() -{ -} -void a2bus_sam_device::write_c0nx(uint8_t offset, uint8_t data) -{ - m_dac->write(data); -} +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** -bool a2bus_sam_device::take_c800() -{ - return false; -} +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_SAM, device_a2bus_card_interface, a2bus_sam_device, "a2sam", "Don't Ask Software S.A.M.") diff --git a/src/devices/bus/a2bus/a2sam.h b/src/devices/bus/a2bus/a2sam.h index 20957e47e19..87066e6cd6e 100644 --- a/src/devices/bus/a2bus/a2sam.h +++ b/src/devices/bus/a2bus/a2sam.h @@ -14,33 +14,8 @@ #pragma once #include "a2bus.h" -#include "sound/dac.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_sam_device: - public device_t, - public device_a2bus_card_interface -{ -public: - // construction/destruction - a2bus_sam_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - - // overrides of standard a2bus slot functions - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual bool take_c800() override; - - required_device m_dac; -}; - -// device type definition -DECLARE_DEVICE_TYPE(A2BUS_SAM, a2bus_sam_device) + +// device type declaration +DECLARE_DEVICE_TYPE(A2BUS_SAM, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_A2SAM_H diff --git a/src/devices/bus/a2bus/a2ssc.cpp b/src/devices/bus/a2bus/a2ssc.cpp index b9e531696b6..61ab1efc30b 100644 --- a/src/devices/bus/a2bus/a2ssc.cpp +++ b/src/devices/bus/a2bus/a2ssc.cpp @@ -15,19 +15,73 @@ #include "emu.h" #include "a2ssc.h" + #include "bus/rs232/rs232.h" +#include "machine/mos6551.h" -/*************************************************************************** - PARAMETERS -***************************************************************************/ +namespace { //************************************************************************** -// GLOBAL VARIABLES +// TYPE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(A2BUS_SSC, a2bus_ssc_device, "a2ssc", "Apple Super Serial Card") -DEFINE_DEVICE_TYPE(APRICORN_SSI, apricorn_ssi_device, "aprissi", "Apricorn Super Serial Imager") +class a2bus_ssc_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_ssc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + a2bus_ssc_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual ioport_constructor device_input_ports() const override; + + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual uint8_t read_c800(uint16_t offset) override; + + required_ioport m_dsw1, m_dsw2; + required_ioport m_dswx; + + required_device m_acia; + + required_region_ptr m_rom; + +private: + DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); +}; + +class apricorn_ssi_device : public a2bus_ssc_device +{ +public: + // construction/destruction + apricorn_ssi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual void device_start() override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual ioport_constructor device_input_ports() const override; + + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual void write_cnxx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_c800(uint16_t offset) override; + +private: + bool m_alt_bank; +}; + +/*************************************************************************** + PARAMETERS +***************************************************************************/ ROM_START( ssc ) ROM_REGION(0x800, "program", 0) @@ -382,3 +436,13 @@ WRITE_LINE_MEMBER( a2bus_ssc_device::acia_irq_w ) } } } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_SSC, device_a2bus_card_interface, a2bus_ssc_device, "a2ssc", "Apple Super Serial Card") +DEFINE_DEVICE_TYPE_PRIVATE(APRICORN_SSI, device_a2bus_card_interface, apricorn_ssi_device, "aprissi", "Apricorn Super Serial Imager") diff --git a/src/devices/bus/a2bus/a2ssc.h b/src/devices/bus/a2bus/a2ssc.h index 2e2bc8edc16..9cc41e53970 100644 --- a/src/devices/bus/a2bus/a2ssc.h +++ b/src/devices/bus/a2bus/a2ssc.h @@ -12,67 +12,9 @@ #define MAME_BUS_A2BUS_A2SSC_H #include "a2bus.h" -#include "machine/mos6551.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_ssc_device: - public device_t, - public device_a2bus_card_interface -{ -public: - // construction/destruction - a2bus_ssc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - a2bus_ssc_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; - virtual ioport_constructor device_input_ports() const override; - - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual uint8_t read_c800(uint16_t offset) override; - - required_ioport m_dsw1, m_dsw2; - required_ioport m_dswx; - - required_device m_acia; - - required_region_ptr m_rom; - -private: - DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); -}; - -class apricorn_ssi_device : public a2bus_ssc_device -{ -public: - // construction/destruction - apricorn_ssi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - virtual void device_start() override; - virtual const tiny_rom_entry *device_rom_region() const override; - virtual ioport_constructor device_input_ports() const override; - - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual void write_cnxx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_c800(uint16_t offset) override; - -private: - bool m_alt_bank; -}; // device type declarations -DECLARE_DEVICE_TYPE(A2BUS_SSC, a2bus_ssc_device) -DECLARE_DEVICE_TYPE(APRICORN_SSI, apricorn_ssi_device) +DECLARE_DEVICE_TYPE(A2BUS_SSC, device_a2bus_card_interface) +DECLARE_DEVICE_TYPE(APRICORN_SSI, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_A2SSC_H diff --git a/src/devices/bus/a2bus/a2swyft.cpp b/src/devices/bus/a2bus/a2swyft.cpp index ba4cb8ec46e..6d9701d3a04 100644 --- a/src/devices/bus/a2bus/a2swyft.cpp +++ b/src/devices/bus/a2bus/a2swyft.cpp @@ -12,16 +12,12 @@ #include "a2swyft.h" +namespace { + /*************************************************************************** PARAMETERS ***************************************************************************/ -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -DEFINE_DEVICE_TYPE(A2BUS_SWYFT, a2bus_swyft_device, "a2swyft", "IAI SwyftCard") - #define SWYFT_ROM_REGION "swyft_rom" ROM_START( swyft ) @@ -31,6 +27,39 @@ ROM_START( swyft ) ROM_LOAD( "swyft_pal16r4.jed", 0x0000, 0x08EF, CRC(462a6938) SHA1(38be885539cf91423a246378c411ac8b2f150ec6) ) // swyft3.pal derived by D. Elvey, works as a replacement pal (original is protected?) ROM_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_swyft_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_swyft_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual const tiny_rom_entry *device_rom_region() const override; + +protected: + a2bus_swyft_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_inh_rom(uint16_t offset) override; + virtual uint16_t inh_start() override { return 0xd000; } + virtual uint16_t inh_end() override { return 0xffff; } + virtual int inh_type() override; + +private: + required_region_ptr m_rom; + int m_rombank = 0; + int m_inh_state = 0; +}; + //------------------------------------------------- // rom_region - device-specific ROM region //------------------------------------------------- @@ -51,7 +80,8 @@ a2bus_swyft_device::a2bus_swyft_device(const machine_config &mconfig, const char a2bus_swyft_device::a2bus_swyft_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), - device_a2bus_card_interface(mconfig, *this), m_rom(nullptr), m_rombank(0), m_inh_state(0) + device_a2bus_card_interface(mconfig, *this), + m_rom(*this, SWYFT_ROM_REGION) { } @@ -61,8 +91,6 @@ a2bus_swyft_device::a2bus_swyft_device(const machine_config &mconfig, device_typ void a2bus_swyft_device::device_start() { - m_rom = device().machine().root_device().memregion(this->subtag(SWYFT_ROM_REGION).c_str())->base(); - save_item(NAME(m_rombank)); } @@ -142,3 +170,12 @@ int a2bus_swyft_device::inh_type() { return m_inh_state; } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_SWYFT, device_a2bus_card_interface, a2bus_swyft_device, "a2swyft", "IAI SwyftCard") diff --git a/src/devices/bus/a2bus/a2swyft.h b/src/devices/bus/a2bus/a2swyft.h index d160fb77a4c..dbf3c02827a 100644 --- a/src/devices/bus/a2bus/a2swyft.h +++ b/src/devices/bus/a2bus/a2swyft.h @@ -15,40 +15,7 @@ #include "a2bus.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_swyft_device: - public device_t, - public device_a2bus_card_interface -{ -public: - // construction/destruction - a2bus_swyft_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual const tiny_rom_entry *device_rom_region() const override; - -protected: - a2bus_swyft_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_inh_rom(uint16_t offset) override; - virtual uint16_t inh_start() override { return 0xd000; } - virtual uint16_t inh_end() override { return 0xffff; } - virtual int inh_type() override; - -private: - uint8_t *m_rom; - int m_rombank; - int m_inh_state; -}; - // device type definition -DECLARE_DEVICE_TYPE(A2BUS_SWYFT, a2bus_swyft_device) +DECLARE_DEVICE_TYPE(A2BUS_SWYFT, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_A2SWYFT_H diff --git a/src/devices/bus/a2bus/a2thunderclock.cpp b/src/devices/bus/a2bus/a2thunderclock.cpp index a948a465f5d..c109be5c276 100644 --- a/src/devices/bus/a2bus/a2thunderclock.cpp +++ b/src/devices/bus/a2bus/a2thunderclock.cpp @@ -28,16 +28,15 @@ #include "emu.h" #include "a2thunderclock.h" +#include "machine/upd1990a.h" + + +namespace { + /*************************************************************************** PARAMETERS ***************************************************************************/ -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -DEFINE_DEVICE_TYPE(A2BUS_THUNDERCLOCK, a2bus_thunderclock_device, "a2thunpl", "ThunderWare ThunderClock Plus") - #define THUNDERCLOCK_ROM_REGION "thunclk_rom" #define THUNDERCLOCK_UPD1990_TAG "thunclk_upd" @@ -46,6 +45,41 @@ ROM_START( thunderclock ) ROM_LOAD( "thunderclock plus rom.bin", 0x0000, 0x0800, CRC(1b99c4e3) SHA1(60f434f5325899d7ea257a6e56e6f53eae65146a) ) ROM_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_thunderclock_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_thunderclock_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + a2bus_thunderclock_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual uint8_t read_c800(uint16_t offset) override; + + required_device m_upd1990ac; + required_region_ptr m_rom; + +private: + DECLARE_WRITE_LINE_MEMBER( upd_dataout_w ); + + int m_dataout; +}; + /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -76,7 +110,9 @@ const tiny_rom_entry *a2bus_thunderclock_device::device_rom_region() const a2bus_thunderclock_device::a2bus_thunderclock_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), device_a2bus_card_interface(mconfig, *this), - m_upd1990ac(*this, THUNDERCLOCK_UPD1990_TAG), m_rom(nullptr), m_dataout(0) + m_upd1990ac(*this, THUNDERCLOCK_UPD1990_TAG), + m_rom(*this, THUNDERCLOCK_ROM_REGION), + m_dataout(0) { } @@ -91,8 +127,6 @@ a2bus_thunderclock_device::a2bus_thunderclock_device(const machine_config &mconf void a2bus_thunderclock_device::device_start() { - m_rom = device().machine().root_device().memregion(this->subtag(THUNDERCLOCK_ROM_REGION).c_str())->base(); - save_item(NAME(m_dataout)); } @@ -169,3 +203,12 @@ WRITE_LINE_MEMBER( a2bus_thunderclock_device::upd_dataout_w ) m_dataout = 0; } } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_THUNDERCLOCK, device_a2bus_card_interface, a2bus_thunderclock_device, "a2thunpl", "ThunderWare ThunderClock Plus") diff --git a/src/devices/bus/a2bus/a2thunderclock.h b/src/devices/bus/a2bus/a2thunderclock.h index 2f1e908a1cd..6c5025f0789 100644 --- a/src/devices/bus/a2bus/a2thunderclock.h +++ b/src/devices/bus/a2bus/a2thunderclock.h @@ -14,44 +14,8 @@ #pragma once #include "a2bus.h" -#include "machine/upd1990a.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_thunderclock_device: - public device_t, - public device_a2bus_card_interface -{ -public: - // construction/destruction - a2bus_thunderclock_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - a2bus_thunderclock_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; - - // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual uint8_t read_c800(uint16_t offset) override; - - required_device m_upd1990ac; - -private: - DECLARE_WRITE_LINE_MEMBER( upd_dataout_w ); - - uint8_t *m_rom; - int m_dataout; -}; // device type definition -DECLARE_DEVICE_TYPE(A2BUS_THUNDERCLOCK, a2bus_thunderclock_device) +DECLARE_DEVICE_TYPE(A2BUS_THUNDERCLOCK, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_A2THUNDERCLOCK_H diff --git a/src/devices/bus/a2bus/a2ultraterm.cpp b/src/devices/bus/a2bus/a2ultraterm.cpp index e8d5972e4ec..468c7402c46 100644 --- a/src/devices/bus/a2bus/a2ultraterm.cpp +++ b/src/devices/bus/a2bus/a2ultraterm.cpp @@ -29,20 +29,18 @@ #include "emu.h" #include "a2ultraterm.h" + +#include "video/mc6845.h" + #include "screen.h" +namespace { + /*************************************************************************** PARAMETERS ***************************************************************************/ -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -DEFINE_DEVICE_TYPE(A2BUS_ULTRATERM, a2bus_ultraterm_device, "a2ulttrm", "Videx UltraTerm (original)") -DEFINE_DEVICE_TYPE(A2BUS_ULTRATERMENH, a2bus_ultratermenh_device, "a2ultrme", "Videx UltraTerm (enhanced //e)") - #define ULTRATERM_ROM_REGION "uterm_rom" #define ULTRATERM_GFX_REGION "uterm_gfx" #define ULTRATERM_SCREEN_NAME "uterm_screen" @@ -65,7 +63,7 @@ DEFINE_DEVICE_TYPE(A2BUS_ULTRATERMENH, a2bus_ultratermenh_device, "a2ultrme", "V #define CT2_HLBIT7L (0x01) -static const rgb_t ultraterm_palette[4] = +const rgb_t ultraterm_palette[4] = { rgb_t(0x00,0x00,0x00), rgb_t(0x55,0x55,0x55), @@ -96,6 +94,60 @@ ROM_START( a2ultratermenh ) ROM_LOAD( "ult_251c.jed", 0x000000, 0x000305, CRC(12fabb0d) SHA1(d4a36837cb98bb65f7ddef7455eb5a7f8e648a82) ) ROM_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_videx160_device: + public device_t, + public device_a2bus_card_interface +{ +protected: + // construction/destruction + a2bus_videx160_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual void write_cnxx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_c800(uint16_t offset) override; + virtual void write_c800(uint16_t offset, uint8_t data) override; + + uint8_t m_ram[256*16]; + int m_framecnt; + uint8_t m_ctrl1, m_ctrl2; + + required_device m_crtc; + required_region_ptr m_rom, m_chrrom; + +private: + DECLARE_WRITE_LINE_MEMBER(vsync_changed); + MC6845_UPDATE_ROW(crtc_update_row); + + int m_rambank; +}; + +class a2bus_ultraterm_device : public a2bus_videx160_device +{ +public: + a2bus_ultraterm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual const tiny_rom_entry *device_rom_region() const override; +}; + +class a2bus_ultratermenh_device : public a2bus_videx160_device +{ +public: + a2bus_ultratermenh_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual const tiny_rom_entry *device_rom_region() const override; +}; + /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -138,8 +190,12 @@ const tiny_rom_entry *a2bus_ultratermenh_device::device_rom_region() const a2bus_videx160_device::a2bus_videx160_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), - device_a2bus_card_interface(mconfig, *this), m_rom(nullptr), m_chrrom(nullptr), m_framecnt(0), m_ctrl1(0), m_ctrl2(0), - m_crtc(*this, ULTRATERM_MC6845_NAME), m_rambank(0) + device_a2bus_card_interface(mconfig, *this), + m_framecnt(0), m_ctrl1(0), m_ctrl2(0), + m_crtc(*this, ULTRATERM_MC6845_NAME), + m_rom(*this, ULTRATERM_ROM_REGION), + m_chrrom(*this, ULTRATERM_GFX_REGION), + m_rambank(0) { } @@ -159,10 +215,6 @@ a2bus_ultratermenh_device::a2bus_ultratermenh_device(const machine_config &mconf void a2bus_videx160_device::device_start() { - m_rom = machine().root_device().memregion(this->subtag(ULTRATERM_ROM_REGION).c_str())->base(); - - m_chrrom = machine().root_device().memregion(this->subtag(ULTRATERM_GFX_REGION).c_str())->base(); - memset(m_ram, 0, 256*16); save_item(NAME(m_ram)); @@ -391,3 +443,13 @@ WRITE_LINE_MEMBER( a2bus_videx160_device::vsync_changed ) m_framecnt++; } } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_ULTRATERM, device_a2bus_card_interface, a2bus_ultraterm_device, "a2ulttrm", "Videx UltraTerm (original)") +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_ULTRATERMENH, device_a2bus_card_interface, a2bus_ultratermenh_device, "a2ultrme", "Videx UltraTerm (enhanced //e)") diff --git a/src/devices/bus/a2bus/a2ultraterm.h b/src/devices/bus/a2bus/a2ultraterm.h index b7dd4c9d3f5..2197ea9f446 100644 --- a/src/devices/bus/a2bus/a2ultraterm.h +++ b/src/devices/bus/a2bus/a2ultraterm.h @@ -14,64 +14,9 @@ #pragma once #include "a2bus.h" -#include "video/mc6845.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_videx160_device: - public device_t, - public device_a2bus_card_interface -{ -protected: - // construction/destruction - a2bus_videx160_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - - // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual void write_cnxx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_c800(uint16_t offset) override; - virtual void write_c800(uint16_t offset, uint8_t data) override; - - uint8_t *m_rom, *m_chrrom; - uint8_t m_ram[256*16]; - int m_framecnt; - uint8_t m_ctrl1, m_ctrl2; - - required_device m_crtc; - -private: - DECLARE_WRITE_LINE_MEMBER(vsync_changed); - MC6845_UPDATE_ROW(crtc_update_row); - - int m_rambank; -}; - -class a2bus_ultraterm_device : public a2bus_videx160_device -{ -public: - a2bus_ultraterm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual const tiny_rom_entry *device_rom_region() const override; -}; - -class a2bus_ultratermenh_device : public a2bus_videx160_device -{ -public: - a2bus_ultratermenh_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual const tiny_rom_entry *device_rom_region() const override; -}; - -// device type definition -DECLARE_DEVICE_TYPE(A2BUS_ULTRATERM, a2bus_ultraterm_device) -DECLARE_DEVICE_TYPE(A2BUS_ULTRATERMENH, a2bus_ultratermenh_device) +// device type declaration +DECLARE_DEVICE_TYPE(A2BUS_ULTRATERM, device_a2bus_card_interface) +DECLARE_DEVICE_TYPE(A2BUS_ULTRATERMENH, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_A2ULTRATERM_H diff --git a/src/devices/bus/a2bus/a2videoterm.cpp b/src/devices/bus/a2bus/a2videoterm.cpp index 839fa19e74a..c5c75fc3323 100644 --- a/src/devices/bus/a2bus/a2videoterm.cpp +++ b/src/devices/bus/a2bus/a2videoterm.cpp @@ -24,23 +24,18 @@ #include "emu.h" #include "a2videoterm.h" + +#include "video/mc6845.h" + #include "screen.h" +namespace { + /*************************************************************************** PARAMETERS ***************************************************************************/ -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -DEFINE_DEVICE_TYPE(A2BUS_VIDEOTERM, a2bus_videoterm_device, "a2vidtrm", "Videx Videoterm 80 Column Display") -DEFINE_DEVICE_TYPE(A2BUS_IBSAP16, a2bus_ap16_device, "a2ap16", "IBS AP-16 80 column card") -DEFINE_DEVICE_TYPE(A2BUS_IBSAP16ALT, a2bus_ap16alt_device, "a2ap16a", "IBS AP-16 80 column card (alt. version)") -DEFINE_DEVICE_TYPE(A2BUS_VTC1, a2bus_vtc1_device, "a2vtc1", "unknown Videoterm clone") -DEFINE_DEVICE_TYPE(A2BUS_AEVIEWMASTER80, a2bus_aevm80_device, "a2aevm80", "Applied Engineering Viewmaster 80") - #define VIDEOTERM_ROM_REGION "vterm_rom" #define VIDEOTERM_GFX_REGION "vterm_gfx" #define VIDEOTERM_SCREEN_NAME "vterm_screen" @@ -101,6 +96,92 @@ ROM_START( a2aevm80 ) ROM_LOAD( "ae viewmaster 80 video rom.bin", 0x000000, 0x000800, CRC(4801ab90) SHA1(f90658ffee7740f3cb30ecef2e151f7dc6098833) ) ROM_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_videx80_device: + public device_t, + public device_a2bus_card_interface +{ +protected: + // construction/destruction + a2bus_videx80_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual void write_cnxx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_c800(uint16_t offset) override; + virtual void write_c800(uint16_t offset, uint8_t data) override; + + uint8_t m_ram[512*4]; + + required_device m_crtc; + required_region_ptr m_rom, m_chrrom; + + MC6845_UPDATE_ROW(crtc_update_row); + + int m_rambank; + uint8_t m_char_width; +}; + +class a2bus_videoterm_device : public a2bus_videx80_device +{ +public: + a2bus_videoterm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual const tiny_rom_entry *device_rom_region() const override; +}; + +class a2bus_ap16_device : public a2bus_videx80_device +{ +public: + a2bus_ap16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + +protected: + virtual uint8_t read_cnxx(uint8_t offset) override; +}; + + +class a2bus_ap16alt_device : public a2bus_videx80_device +{ +public: + a2bus_ap16alt_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + +protected: + virtual uint8_t read_cnxx(uint8_t offset) override; +}; + +class a2bus_vtc1_device : public a2bus_videx80_device +{ +public: + a2bus_vtc1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; +}; + +class a2bus_aevm80_device : public a2bus_videx80_device +{ +public: + a2bus_aevm80_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; +}; + /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -196,8 +277,10 @@ const tiny_rom_entry *a2bus_aevm80_device::device_rom_region() const a2bus_videx80_device::a2bus_videx80_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), - device_a2bus_card_interface(mconfig, *this), m_rom(nullptr), m_chrrom(nullptr), + device_a2bus_card_interface(mconfig, *this), m_crtc(*this, VIDEOTERM_MC6845_NAME), + m_rom(*this, VIDEOTERM_ROM_REGION), + m_chrrom(*this, VIDEOTERM_GFX_REGION), m_rambank(0), m_char_width(9) { @@ -236,10 +319,6 @@ a2bus_aevm80_device::a2bus_aevm80_device(const machine_config &mconfig, const ch void a2bus_videx80_device::device_start() { - m_rom = device().machine().root_device().memregion(this->subtag(VIDEOTERM_ROM_REGION).c_str())->base(); - - m_chrrom = device().machine().root_device().memregion(this->subtag(VIDEOTERM_GFX_REGION).c_str())->base(); - memset(m_ram, 0, 4*512); save_item(NAME(m_ram)); @@ -368,3 +447,16 @@ MC6845_UPDATE_ROW( a2bus_videx80_device::crtc_update_row ) } } } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_VIDEOTERM, device_a2bus_card_interface, a2bus_videoterm_device, "a2vidtrm", "Videx Videoterm 80 Column Display") +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_IBSAP16, device_a2bus_card_interface, a2bus_ap16_device, "a2ap16", "IBS AP-16 80 column card") +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_IBSAP16ALT, device_a2bus_card_interface, a2bus_ap16alt_device, "a2ap16a", "IBS AP-16 80 column card (alt. version)") +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_VTC1, device_a2bus_card_interface, a2bus_vtc1_device, "a2vtc1", "unknown Videoterm clone") +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_AEVIEWMASTER80, device_a2bus_card_interface, a2bus_aevm80_device, "a2aevm80", "Applied Engineering Viewmaster 80") diff --git a/src/devices/bus/a2bus/a2videoterm.h b/src/devices/bus/a2bus/a2videoterm.h index 589a1331a40..17d6c550df0 100644 --- a/src/devices/bus/a2bus/a2videoterm.h +++ b/src/devices/bus/a2bus/a2videoterm.h @@ -14,99 +14,12 @@ #pragma once #include "a2bus.h" -#include "video/mc6845.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_videx80_device: - public device_t, - public device_a2bus_card_interface -{ -protected: - // construction/destruction - a2bus_videx80_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - - // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual void write_cnxx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_c800(uint16_t offset) override; - virtual void write_c800(uint16_t offset, uint8_t data) override; - - uint8_t *m_rom, *m_chrrom; - uint8_t m_ram[512*4]; - - required_device m_crtc; - - MC6845_UPDATE_ROW(crtc_update_row); - - int m_rambank; - uint8_t m_char_width; -}; - -class a2bus_videoterm_device : public a2bus_videx80_device -{ -public: - a2bus_videoterm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual const tiny_rom_entry *device_rom_region() const override; -}; - -class a2bus_ap16_device : public a2bus_videx80_device -{ -public: - a2bus_ap16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; - -protected: - virtual uint8_t read_cnxx(uint8_t offset) override; -}; - - -class a2bus_ap16alt_device : public a2bus_videx80_device -{ -public: - a2bus_ap16alt_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; - -protected: - virtual uint8_t read_cnxx(uint8_t offset) override; -}; - -class a2bus_vtc1_device : public a2bus_videx80_device -{ -public: - a2bus_vtc1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; -}; - -class a2bus_aevm80_device : public a2bus_videx80_device -{ -public: - a2bus_aevm80_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; -}; - -// device type definition -DECLARE_DEVICE_TYPE(A2BUS_VIDEOTERM, a2bus_videoterm_device) -DECLARE_DEVICE_TYPE(A2BUS_IBSAP16, a2bus_ap16_device) -DECLARE_DEVICE_TYPE(A2BUS_IBSAP16ALT, a2bus_ap16alt_device) -DECLARE_DEVICE_TYPE(A2BUS_VTC1, a2bus_vtc1_device) -DECLARE_DEVICE_TYPE(A2BUS_AEVIEWMASTER80, a2bus_aevm80_device) +// device type declaration +DECLARE_DEVICE_TYPE(A2BUS_VIDEOTERM, device_a2bus_card_interface) +DECLARE_DEVICE_TYPE(A2BUS_IBSAP16, device_a2bus_card_interface) +DECLARE_DEVICE_TYPE(A2BUS_IBSAP16ALT, device_a2bus_card_interface) +DECLARE_DEVICE_TYPE(A2BUS_VTC1, device_a2bus_card_interface) +DECLARE_DEVICE_TYPE(A2BUS_AEVIEWMASTER80, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_A2VIDEOTERM_H diff --git a/src/devices/bus/a2bus/a2vulcan.cpp b/src/devices/bus/a2bus/a2vulcan.cpp index dcc8e454a73..889e7df5de3 100644 --- a/src/devices/bus/a2bus/a2vulcan.cpp +++ b/src/devices/bus/a2bus/a2vulcan.cpp @@ -55,15 +55,12 @@ #include "emu.h" #include "a2vulcan.h" + +#include "bus/ata/ataintf.h" #include "imagedev/harddriv.h" -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** -DEFINE_DEVICE_TYPE(A2BUS_VULCAN, a2bus_vulcan_device, "a2vulcan", "Applied Engineering Vulcan IDE controller (IIgs version)") -DEFINE_DEVICE_TYPE(A2BUS_VULCANIIE, a2bus_vulcaniie_device, "a2vuliie", "Applied Engineering Vulcan IDE controller (//e version)") -DEFINE_DEVICE_TYPE(A2BUS_VULCANGOLD, a2bus_vulcangold_device, "a2vulgld", "Applied Engineering Vulcan Gold IDE controller (IIgs version)") +namespace { #define VULCAN_ROM_REGION "vulcan_rom" #define VULCAN_ATA_TAG "vulcan_ata" @@ -83,6 +80,69 @@ ROM_START( vulcangold ) ROM_LOAD( "ae vulcan gold rom v2.0.bin", 0x000000, 0x004000, CRC(19bc3958) SHA1(96a22c2540fa603648a4e638e176eee76523b4e1) ) ROM_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_vulcanbase_device: + public device_t, + public device_a2bus_card_interface +{ +protected: + // construction/destruction + a2bus_vulcanbase_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual uint8_t read_c800(uint16_t offset) override; + virtual void write_c800(uint16_t offset, uint8_t data) override; + + required_device m_ata; + required_region_ptr m_rom; + + uint8_t m_ram[8*1024]; + +private: + uint16_t m_lastdata; + int m_rombank, m_rambank; + bool m_last_read_was_0; +}; + +class a2bus_vulcan_device : public a2bus_vulcanbase_device +{ +public: + a2bus_vulcan_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_start() override; +}; + +class a2bus_vulcaniie_device : public a2bus_vulcanbase_device +{ +public: + a2bus_vulcaniie_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_start() override; +}; + +class a2bus_vulcangold_device : public a2bus_vulcanbase_device +{ +public: + a2bus_vulcangold_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual const tiny_rom_entry *device_rom_region() const override; +}; + /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -122,7 +182,9 @@ const tiny_rom_entry *a2bus_vulcangold_device::device_rom_region() const a2bus_vulcanbase_device::a2bus_vulcanbase_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), device_a2bus_card_interface(mconfig, *this), - m_ata(*this, VULCAN_ATA_TAG), m_rom(nullptr), m_lastdata(0), m_rombank(0), m_rambank(0), m_last_read_was_0(false) + m_ata(*this, VULCAN_ATA_TAG), + m_rom(*this, VULCAN_ROM_REGION), + m_lastdata(0), m_rombank(0), m_rambank(0), m_last_read_was_0(false) { } @@ -147,8 +209,6 @@ a2bus_vulcangold_device::a2bus_vulcangold_device(const machine_config &mconfig, void a2bus_vulcanbase_device::device_start() { - m_rom = device().machine().root_device().memregion(this->subtag(VULCAN_ROM_REGION).c_str())->base(); - save_item(NAME(m_lastdata)); save_item(NAME(m_ram)); save_item(NAME(m_rombank)); @@ -317,3 +377,14 @@ void a2bus_vulcanbase_device::write_c800(uint16_t offset, uint8_t data) m_ram[offset + m_rambank] = data; } } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_VULCAN, device_a2bus_card_interface, a2bus_vulcan_device, "a2vulcan", "Applied Engineering Vulcan IDE controller (IIgs version)") +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_VULCANIIE, device_a2bus_card_interface, a2bus_vulcaniie_device, "a2vuliie", "Applied Engineering Vulcan IDE controller (//e version)") +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_VULCANGOLD, device_a2bus_card_interface, a2bus_vulcangold_device, "a2vulgld", "Applied Engineering Vulcan Gold IDE controller (IIgs version)") diff --git a/src/devices/bus/a2bus/a2vulcan.h b/src/devices/bus/a2bus/a2vulcan.h index 0eddf59ecd9..50931b4166c 100644 --- a/src/devices/bus/a2bus/a2vulcan.h +++ b/src/devices/bus/a2bus/a2vulcan.h @@ -8,80 +8,16 @@ *********************************************************************/ -#ifndef MAME_BUS_A2BUS_VULCAN_H -#define MAME_BUS_A2BUS_VULCAN_H +#ifndef MAME_BUS_A2BUS_A2VULCAN_H +#define MAME_BUS_A2BUS_A2VULCAN_H #pragma once #include "a2bus.h" -#include "bus/ata/ataintf.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** +// device type declaration +DECLARE_DEVICE_TYPE(A2BUS_VULCAN, device_a2bus_card_interface) +DECLARE_DEVICE_TYPE(A2BUS_VULCANIIE, device_a2bus_card_interface) +DECLARE_DEVICE_TYPE(A2BUS_VULCANGOLD, device_a2bus_card_interface) -class a2bus_vulcanbase_device: - public device_t, - public device_a2bus_card_interface -{ -protected: - // construction/destruction - a2bus_vulcanbase_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - - // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual uint8_t read_c800(uint16_t offset) override; - virtual void write_c800(uint16_t offset, uint8_t data) override; - - required_device m_ata; - - uint8_t *m_rom; - uint8_t m_ram[8*1024]; - -private: - uint16_t m_lastdata; - int m_rombank, m_rambank; - bool m_last_read_was_0; -}; - -class a2bus_vulcan_device : public a2bus_vulcanbase_device -{ -public: - a2bus_vulcan_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual const tiny_rom_entry *device_rom_region() const override; - -protected: - virtual void device_start() override; - -protected: -}; - -class a2bus_vulcaniie_device : public a2bus_vulcanbase_device -{ -public: - a2bus_vulcaniie_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual const tiny_rom_entry *device_rom_region() const override; - -protected: - virtual void device_start() override; -}; - -class a2bus_vulcangold_device : public a2bus_vulcanbase_device -{ -public: - a2bus_vulcangold_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual const tiny_rom_entry *device_rom_region() const override; -}; - -// device type definition -DECLARE_DEVICE_TYPE(A2BUS_VULCAN, a2bus_vulcan_device) -DECLARE_DEVICE_TYPE(A2BUS_VULCANIIE, a2bus_vulcaniie_device) -DECLARE_DEVICE_TYPE(A2BUS_VULCANGOLD, a2bus_vulcangold_device) - -#endif // MAME_BUS_A2BUS_VULCAN_H +#endif // MAME_BUS_A2BUS_A2VULCAN_H diff --git a/src/devices/bus/a2bus/a2zipdrive.cpp b/src/devices/bus/a2bus/a2zipdrive.cpp index fc06cb2a737..9a59af1a431 100644 --- a/src/devices/bus/a2bus/a2zipdrive.cpp +++ b/src/devices/bus/a2bus/a2zipdrive.cpp @@ -68,14 +68,12 @@ #include "emu.h" #include "a2zipdrive.h" + +#include "bus/ata/ataintf.h" #include "imagedev/harddriv.h" -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** -DEFINE_DEVICE_TYPE(A2BUS_ZIPDRIVE, a2bus_zipdrive_device, "a2zipdrv", "Zip Technologies ZipDrive") -DEFINE_DEVICE_TYPE(A2BUS_FOCUSDRIVE, a2bus_focusdrive_device, "a2focdrv", "Parsons Engineering Focus Drive") +namespace { #define ZIPDRIVE_ROM_REGION "zipdrive_rom" #define ZIPDRIVE_ATA_TAG "zipdrive_ata" @@ -90,6 +88,53 @@ ROM_START( focusdrive ) ROM_LOAD( "focusrom.bin", 0x001000, 0x001000, CRC(0fd0ba25) SHA1(acf414aa145fcfa1c12aca0269f1f7ada82f1c04) ) ROM_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_zipdrivebase_device: + public device_t, + public device_a2bus_card_interface +{ +protected: + // construction/destruction + a2bus_zipdrivebase_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual uint8_t read_c800(uint16_t offset) override; + + required_device m_ata; + required_region_ptr m_rom; + + uint16_t m_lastdata; +}; + +class a2bus_zipdrive_device : public a2bus_zipdrivebase_device +{ +public: + a2bus_zipdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class a2bus_focusdrive_device : public a2bus_zipdrivebase_device +{ +public: + a2bus_focusdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual void device_reset() override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; +}; + /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -124,7 +169,9 @@ const tiny_rom_entry *a2bus_focusdrive_device::device_rom_region() const a2bus_zipdrivebase_device::a2bus_zipdrivebase_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), device_a2bus_card_interface(mconfig, *this), - m_ata(*this, ZIPDRIVE_ATA_TAG), m_rom(nullptr), m_lastdata(0) + m_ata(*this, ZIPDRIVE_ATA_TAG), + m_rom(*this, ZIPDRIVE_ROM_REGION), + m_lastdata(0) { } @@ -144,8 +191,6 @@ a2bus_focusdrive_device::a2bus_focusdrive_device(const machine_config &mconfig, void a2bus_zipdrivebase_device::device_start() { - m_rom = device().machine().root_device().memregion(this->subtag(ZIPDRIVE_ROM_REGION).c_str())->base(); - save_item(NAME(m_lastdata)); } @@ -325,3 +370,13 @@ uint8_t a2bus_zipdrivebase_device::read_c800(uint16_t offset) return m_rom[offset+0x1800]; } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_ZIPDRIVE, device_a2bus_card_interface, a2bus_zipdrive_device, "a2zipdrv", "Zip Technologies ZipDrive") +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_FOCUSDRIVE, device_a2bus_card_interface, a2bus_focusdrive_device, "a2focdrv", "Parsons Engineering Focus Drive") diff --git a/src/devices/bus/a2bus/a2zipdrive.h b/src/devices/bus/a2bus/a2zipdrive.h index e9b90f06ed7..691c18457d0 100644 --- a/src/devices/bus/a2bus/a2zipdrive.h +++ b/src/devices/bus/a2bus/a2zipdrive.h @@ -11,63 +11,15 @@ *********************************************************************/ -#ifndef MAME_BUS_A2BUS_ZIPDRIVE_H -#define MAME_BUS_A2BUS_ZIPDRIVE_H +#ifndef MAME_BUS_A2BUS_A2ZIPDRIVE_H +#define MAME_BUS_A2BUS_A2ZIPDRIVE_H #pragma once #include "a2bus.h" -#include "bus/ata/ataintf.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** +// device type declaration +DECLARE_DEVICE_TYPE(A2BUS_ZIPDRIVE, device_a2bus_card_interface) +DECLARE_DEVICE_TYPE(A2BUS_FOCUSDRIVE, device_a2bus_card_interface) -class a2bus_zipdrivebase_device: - public device_t, - public device_a2bus_card_interface -{ -protected: - // construction/destruction - a2bus_zipdrivebase_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; - - // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual uint8_t read_c800(uint16_t offset) override; - - required_device m_ata; - - uint8_t *m_rom; - uint16_t m_lastdata; -}; - -class a2bus_zipdrive_device : public a2bus_zipdrivebase_device -{ -public: - a2bus_zipdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); -}; - -class a2bus_focusdrive_device : public a2bus_zipdrivebase_device -{ -public: - a2bus_focusdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - virtual void device_reset() override; - virtual const tiny_rom_entry *device_rom_region() const override; - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; -}; - -// device type definition -DECLARE_DEVICE_TYPE(A2BUS_ZIPDRIVE, a2bus_zipdrive_device) -DECLARE_DEVICE_TYPE(A2BUS_FOCUSDRIVE, a2bus_focusdrive_device) - -#endif // MAME_BUS_A2BUS_ZIPDRIVE_H +#endif // MAME_BUS_A2BUS_A2ZIPDRIVE_H diff --git a/src/devices/bus/a2bus/booti.cpp b/src/devices/bus/a2bus/booti.cpp index 54e7720642f..39c6b1055ba 100644 --- a/src/devices/bus/a2bus/booti.cpp +++ b/src/devices/bus/a2bus/booti.cpp @@ -20,21 +20,56 @@ #include "emu.h" #include "booti.h" +#include "machine/at28c64b.h" +#include "machine/ch376.h" + + +namespace { + /*************************************************************************** PARAMETERS ***************************************************************************/ -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -DEFINE_DEVICE_TYPE(A2BUS_BOOTI, a2bus_booti_device, "a2booti", "Booti Card") - ROM_START( booti ) ROM_REGION(0x2000, "flash", 0) ROM_LOAD( "bootifw09l.bin", 0x000000, 0x002000, CRC(be3f21ff) SHA1(f505ad4685cd44e4cce5b8d6d27b9c4fea159f11) ) ROM_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_booti_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_booti_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + a2bus_booti_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual void write_cnxx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_c800(uint16_t offset) override; + virtual void write_c800(uint16_t offset, uint8_t data) override; + +private: + required_device m_flash; + required_device m_ch376; + + int m_rombank; +}; + /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -169,3 +204,12 @@ void a2bus_booti_device::write_c800(uint16_t offset, uint8_t data) m_flash->write(offset + m_rombank, data); } } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_BOOTI, device_a2bus_card_interface, a2bus_booti_device, "a2booti", "Booti Card") diff --git a/src/devices/bus/a2bus/booti.h b/src/devices/bus/a2bus/booti.h index 571aa799e90..324a08c7c14 100644 --- a/src/devices/bus/a2bus/booti.h +++ b/src/devices/bus/a2bus/booti.h @@ -14,45 +14,8 @@ #pragma once #include "a2bus.h" -#include "machine/at28c64b.h" -#include "machine/ch376.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_booti_device: - public device_t, - public device_a2bus_card_interface -{ -public: - // construction/destruction - a2bus_booti_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - a2bus_booti_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; - - // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual void write_cnxx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_c800(uint16_t offset) override; - virtual void write_c800(uint16_t offset, uint8_t data) override; - -private: - required_device m_flash; - required_device m_ch376; - - int m_rombank; -}; // device type definition -DECLARE_DEVICE_TYPE(A2BUS_BOOTI, a2bus_booti_device) +DECLARE_DEVICE_TYPE(A2BUS_BOOTI, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_BOOTI_H diff --git a/src/devices/bus/a2bus/byte8251.cpp b/src/devices/bus/a2bus/byte8251.cpp index cd948de4ea8..ffe6c6325c0 100644 --- a/src/devices/bus/a2bus/byte8251.cpp +++ b/src/devices/bus/a2bus/byte8251.cpp @@ -35,9 +35,38 @@ #include "byte8251.h" #include "bus/rs232/rs232.h" +#include "machine/i8251.h" +#include "machine/mm5307.h" -// device type definition -DEFINE_DEVICE_TYPE(A2BUS_BYTE8251, a2bus_byte8251_device, "a2bus_byte8251", "BYTE Serial Interface (8251 based)") + +namespace { + +class a2bus_byte8251_device : public device_t, public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_byte8251_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + DECLARE_INPUT_CHANGED_MEMBER(rate_changed); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual ioport_constructor device_input_ports() const override; + virtual void device_add_mconfig(machine_config &config) override; + + // device_a2bus_card_interface overrides + virtual u8 read_c0nx(u8 offset) override; + virtual void write_c0nx(u8 offset, u8 data) override; + virtual bool take_c800() override { return false; } + +private: + // object finders + required_device m_usart; + required_device m_brg; + required_ioport m_switches; +}; a2bus_byte8251_device::a2bus_byte8251_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, A2BUS_BYTE8251, tag, owner, clock) @@ -112,3 +141,9 @@ void a2bus_byte8251_device::device_add_mconfig(machine_config &config) rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr)); rs232.rxd_handler().set(m_usart, FUNC(i8251_device::write_rxd)); } + +} // aonymous namespace + + +// device type definition +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_BYTE8251, device_a2bus_card_interface, a2bus_byte8251_device, "a2bus_byte8251", "BYTE Serial Interface (8251 based)") diff --git a/src/devices/bus/a2bus/byte8251.h b/src/devices/bus/a2bus/byte8251.h index 557e714cda1..829bd968649 100644 --- a/src/devices/bus/a2bus/byte8251.h +++ b/src/devices/bus/a2bus/byte8251.h @@ -1,41 +1,13 @@ // license:BSD-3-Clause // copyright-holders:AJR - #ifndef MAME_BUS_A2BUS_BYTE8251_H #define MAME_BUS_A2BUS_BYTE8251_H -#include "a2bus.h" -#include "machine/i8251.h" -#include "machine/mm5307.h" - -class a2bus_byte8251_device : public device_t, public device_a2bus_card_interface -{ -public: - // construction/destruction - a2bus_byte8251_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - - DECLARE_INPUT_CHANGED_MEMBER(rate_changed); +#pragma once -protected: - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - virtual ioport_constructor device_input_ports() const override; - virtual void device_add_mconfig(machine_config &config) override; - - // device_a2bus_card_interface overrides - virtual u8 read_c0nx(u8 offset) override; - virtual void write_c0nx(u8 offset, u8 data) override; - virtual bool take_c800() override { return false; } - -private: - // object finders - required_device m_usart; - required_device m_brg; - required_ioport m_switches; -}; +#include "a2bus.h" -// device type definition -DECLARE_DEVICE_TYPE(A2BUS_BYTE8251, a2bus_byte8251_device) +// device type declaration +DECLARE_DEVICE_TYPE(A2BUS_BYTE8251, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_BYTE8251_H diff --git a/src/devices/bus/a2bus/suprterminal.cpp b/src/devices/bus/a2bus/suprterminal.cpp index aa3d31d96d8..796937bebcb 100644 --- a/src/devices/bus/a2bus/suprterminal.cpp +++ b/src/devices/bus/a2bus/suprterminal.cpp @@ -24,19 +24,59 @@ #include "emu.h" #include "suprterminal.h" + +#include "video/mc6845.h" + #include "screen.h" -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** -DEFINE_DEVICE_TYPE(A2BUS_SUPRTERMINAL, a2bus_suprterminal_device, "a2suprterm", "M&R Enterprises SUP'R'TERMINAL") +namespace { ROM_START(a2suprterm) ROM_REGION(0x800, "s3firmware", ROMREGION_ERASEFF) ROM_LOAD("suprterminal.bin", 0x000000, 0x000800, CRC(4c49b0f5) SHA1(66a7411c46c04a8089a7ddfb5ffd9809dd08a21f)) ROM_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_suprterminal_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_suprterminal_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + a2bus_suprterminal_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + + // overrides of standard a2bus slot functions + virtual u8 read_cnxx(u8 offset) override; + virtual u8 read_c0nx(u8 offset) override; + virtual void write_c0nx(u8 offset, u8 data) override; + virtual u8 read_c800(u16 offset) override; + virtual void write_c800(u16 offset, u8 data) override; + virtual bool take_c800() override { return true; } + +private: + required_device m_crtc; + required_region_ptr m_rom; + + MC6845_UPDATE_ROW(crtc_update_row); + + std::unique_ptr m_vram; + std::unique_ptr m_fontram; +// u8 m_fontram[0x400]; + bool m_bRasterRAM, m_bCharBank1, m_bC800IsRAM; +}; + //------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- @@ -213,3 +253,12 @@ MC6845_UPDATE_ROW(a2bus_suprterminal_device::crtc_update_row) } } } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_SUPRTERMINAL, device_a2bus_card_interface, a2bus_suprterminal_device, "a2suprterm", "M&R Enterprises SUP'R'TERMINAL") diff --git a/src/devices/bus/a2bus/suprterminal.h b/src/devices/bus/a2bus/suprterminal.h index f1aa9c2b4f0..3bc754c5d24 100644 --- a/src/devices/bus/a2bus/suprterminal.h +++ b/src/devices/bus/a2bus/suprterminal.h @@ -14,49 +14,8 @@ #pragma once #include "a2bus.h" -#include "video/mc6845.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_suprterminal_device: - public device_t, - public device_a2bus_card_interface -{ -public: - // construction/destruction - a2bus_suprterminal_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - -protected: - a2bus_suprterminal_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; - - // overrides of standard a2bus slot functions - virtual u8 read_cnxx(u8 offset) override; - virtual u8 read_c0nx(u8 offset) override; - virtual void write_c0nx(u8 offset, u8 data) override; - virtual u8 read_c800(u16 offset) override; - virtual void write_c800(u16 offset, u8 data) override; - virtual bool take_c800() override { return true; } - -private: - required_device m_crtc; - required_region_ptr m_rom; - - MC6845_UPDATE_ROW(crtc_update_row); - - std::unique_ptr m_vram; - std::unique_ptr m_fontram; -// u8 m_fontram[0x400]; - bool m_bRasterRAM, m_bCharBank1, m_bC800IsRAM; -}; - -// device type definition -DECLARE_DEVICE_TYPE(A2BUS_SUPRTERMINAL, a2bus_suprterminal_device) + +// device type declaration +DECLARE_DEVICE_TYPE(A2BUS_SUPRTERMINAL, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_SUPRTERMINAL_H diff --git a/src/devices/bus/a2bus/timemasterho.cpp b/src/devices/bus/a2bus/timemasterho.cpp index abf1b2e8695..8dbef3a5a37 100644 --- a/src/devices/bus/a2bus/timemasterho.cpp +++ b/src/devices/bus/a2bus/timemasterho.cpp @@ -38,16 +38,16 @@ #include "emu.h" #include "timemasterho.h" +#include "machine/6821pia.h" +#include "machine/msm5832.h" + + +namespace { + /*************************************************************************** PARAMETERS ***************************************************************************/ -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -DEFINE_DEVICE_TYPE(A2BUS_TIMEMASTERHO, a2bus_timemasterho_device, "a2tmstho", "Applied Engineering TimeMaster H.O.") - #define TIMEMASTER_ROM_REGION "timemst_rom" #define TIMEMASTER_PIA_TAG "timemst_pia" #define TIMEMASTER_M5832_TAG "timemst_msm" @@ -76,6 +76,49 @@ static INPUT_PORTS_START( tmho ) PORT_DIPSETTING( 0x08, DEF_STR(On)) INPUT_PORTS_END +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_timemasterho_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_timemasterho_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + a2bus_timemasterho_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual ioport_constructor device_input_ports() const override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual uint8_t read_c800(uint16_t offset) override; + + required_device m_pia; + required_device m_msm5832; + required_region_ptr m_rom; + required_ioport m_dsw1; + +private: + void update_irqs(); + void pia_out_a(uint8_t data); + void pia_out_b(uint8_t data); + DECLARE_WRITE_LINE_MEMBER(pia_irqa_w); + DECLARE_WRITE_LINE_MEMBER(pia_irqb_w); + + bool m_irqa = false, m_irqb = false; + bool m_started = false; +}; + /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -122,15 +165,14 @@ a2bus_timemasterho_device::a2bus_timemasterho_device(const machine_config &mconf device_a2bus_card_interface(mconfig, *this), m_pia(*this, TIMEMASTER_PIA_TAG), m_msm5832(*this, TIMEMASTER_M5832_TAG), - m_dsw1(*this, "DSW1"), m_rom(nullptr), m_irqa(false), m_irqb(false) + m_rom(*this, TIMEMASTER_ROM_REGION), + m_dsw1(*this, "DSW1") { - m_started = false; } a2bus_timemasterho_device::a2bus_timemasterho_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : a2bus_timemasterho_device(mconfig, A2BUS_TIMEMASTERHO, tag, owner, clock) { - m_started = false; } //------------------------------------------------- @@ -139,7 +181,6 @@ a2bus_timemasterho_device::a2bus_timemasterho_device(const machine_config &mconf void a2bus_timemasterho_device::device_start() { - m_rom = device().machine().root_device().memregion(this->subtag(TIMEMASTER_ROM_REGION).c_str())->base(); } void a2bus_timemasterho_device::device_reset() @@ -267,3 +308,12 @@ WRITE_LINE_MEMBER(a2bus_timemasterho_device::pia_irqb_w) m_irqb = state; update_irqs(); } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_TIMEMASTERHO, device_a2bus_card_interface, a2bus_timemasterho_device, "a2tmstho", "Applied Engineering TimeMaster H.O.") diff --git a/src/devices/bus/a2bus/timemasterho.h b/src/devices/bus/a2bus/timemasterho.h index 47f5ba84ae7..f7bda98ce43 100644 --- a/src/devices/bus/a2bus/timemasterho.h +++ b/src/devices/bus/a2bus/timemasterho.h @@ -14,53 +14,8 @@ #pragma once #include "a2bus.h" -#include "machine/6821pia.h" -#include "machine/msm5832.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class a2bus_timemasterho_device: - public device_t, - public device_a2bus_card_interface -{ -public: - // construction/destruction - a2bus_timemasterho_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - a2bus_timemasterho_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - virtual const tiny_rom_entry *device_rom_region() const override; - virtual ioport_constructor device_input_ports() const override; - - // overrides of standard a2bus slot functions - virtual uint8_t read_c0nx(uint8_t offset) override; - virtual void write_c0nx(uint8_t offset, uint8_t data) override; - virtual uint8_t read_cnxx(uint8_t offset) override; - virtual uint8_t read_c800(uint16_t offset) override; - - required_device m_pia; - required_device m_msm5832; - required_ioport m_dsw1; - -private: - void update_irqs(); - void pia_out_a(uint8_t data); - void pia_out_b(uint8_t data); - DECLARE_WRITE_LINE_MEMBER(pia_irqa_w); - DECLARE_WRITE_LINE_MEMBER(pia_irqb_w); - - uint8_t *m_rom; - bool m_irqa, m_irqb; - bool m_started; -}; - -// device type definition -DECLARE_DEVICE_TYPE(A2BUS_TIMEMASTERHO, a2bus_timemasterho_device) +// device type declaration +DECLARE_DEVICE_TYPE(A2BUS_TIMEMASTERHO, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_TIMEMASTERHO_H diff --git a/src/devices/bus/a2bus/uniprint.cpp b/src/devices/bus/a2bus/uniprint.cpp index f98e2a44a45..99b90223a42 100644 --- a/src/devices/bus/a2bus/uniprint.cpp +++ b/src/devices/bus/a2bus/uniprint.cpp @@ -3,12 +3,54 @@ #include "emu.h" #include "uniprint.h" +#include "bus/centronics/ctronics.h" + //#define VERBOSE 1 //#define LOG_OUTPUT_FUNC osd_printf_info #include "logmacro.h" + namespace { +class a2bus_uniprint_device : public device_t, public device_a2bus_card_interface +{ +public: + a2bus_uniprint_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock); + + // device_a2bus_card_interface implementation + virtual u8 read_c0nx(u8 offset) override; + virtual void write_c0nx(u8 offset, u8 data) override; + virtual u8 read_cnxx(u8 offset) override; + virtual u8 read_c800(u16 offset) override; + +protected: + // device_t implementation + virtual tiny_rom_entry const *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override; + virtual ioport_constructor device_input_ports() const override; + virtual void device_start() override; + virtual void device_reset() override; + + // timer handlers + TIMER_CALLBACK_MEMBER(update_strobe); + +private: + // printer status inputs + DECLARE_WRITE_LINE_MEMBER(ack_w); + + required_device m_printer_conn; + required_device m_printer_out; + required_ioport m_s1, m_s2; + required_region_ptr m_rom; + emu_timer * m_strobe_timer; + + u8 m_data_latch; // U6 + u8 m_ack_latch; // U2 (pin 9) + u8 m_next_strobe; // U4 (pin 5) + u8 m_ack_in; // printer connector pin 10 +}; + + ROM_START(uniprint) ROM_REGION(0x1000, "rom", 0) ROM_LOAD("videx_uniprint_2732a.bin", 0x000000, 0x001000, CRC(e8423ef6) SHA1(0a2789ec2cb28f10a2836a91feabc24ceca8f142)) @@ -45,11 +87,6 @@ INPUT_PORTS_START(uniprint) PORT_DIPSETTING( 0x02, "Negative") INPUT_PORTS_END -} // anonymous namespace - - - -DEFINE_DEVICE_TYPE(A2BUS_UNIPRINT, a2bus_uniprint_device, "a2uniprint", "Videx Uniprint Printer Interface") a2bus_uniprint_device::a2bus_uniprint_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) : device_t(mconfig, A2BUS_UNIPRINT, tag, owner, clock), @@ -69,18 +106,6 @@ a2bus_uniprint_device::a2bus_uniprint_device(machine_config const &mconfig, char -//---------------------------------------------- -// DIP switch handlers -//---------------------------------------------- - -INPUT_CHANGED_MEMBER(a2bus_uniprint_device::sw_msb) -{ - if (BIT(m_data_latch, 7)) - m_printer_out->write(m_data_latch & (BIT(m_s1->read(), 3) ? 0xffU : 0x7fU)); -} - - - //---------------------------------------------- // device_a2bus_card_interface implementation //---------------------------------------------- @@ -217,3 +242,9 @@ TIMER_CALLBACK_MEMBER(a2bus_uniprint_device::update_strobe) m_strobe_timer->adjust(attotime::from_ticks(1, clock())); } } + +} // anonymous namespace + + + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_UNIPRINT, device_a2bus_card_interface, a2bus_uniprint_device, "a2uniprint", "Videx Uniprint Printer Interface") diff --git a/src/devices/bus/a2bus/uniprint.h b/src/devices/bus/a2bus/uniprint.h index 416ad6e8f54..57d6999b01e 100644 --- a/src/devices/bus/a2bus/uniprint.h +++ b/src/devices/bus/a2bus/uniprint.h @@ -26,50 +26,7 @@ #pragma once #include "a2bus.h" -#include "bus/centronics/ctronics.h" -class a2bus_uniprint_device : public device_t, public device_a2bus_card_interface -{ -public: - a2bus_uniprint_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock); - - // DIP switch handlers - DECLARE_INPUT_CHANGED_MEMBER(sw_msb); - - // device_a2bus_card_interface implementation - virtual u8 read_c0nx(u8 offset) override; - virtual void write_c0nx(u8 offset, u8 data) override; - virtual u8 read_cnxx(u8 offset) override; - virtual u8 read_c800(u16 offset) override; - -protected: - // device_t implementation - virtual tiny_rom_entry const *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; - virtual void device_start() override; - virtual void device_reset() override; - - // timer handlers - TIMER_CALLBACK_MEMBER(update_strobe); - -private: - // printer status inputs - DECLARE_WRITE_LINE_MEMBER(ack_w); - - required_device m_printer_conn; - required_device m_printer_out; - required_ioport m_s1, m_s2; - required_region_ptr m_rom; - emu_timer * m_strobe_timer; - - u8 m_data_latch; // U6 - u8 m_ack_latch; // U2 (pin 9) - u8 m_next_strobe; // U4 (pin 5) - u8 m_ack_in; // printer connector pin 10 -}; - - -DECLARE_DEVICE_TYPE(A2BUS_UNIPRINT, a2bus_uniprint_device) +DECLARE_DEVICE_TYPE(A2BUS_UNIPRINT, device_a2bus_card_interface) #endif // MAME_BUS_A2BUS_UNIPRINT_H diff --git a/src/devices/bus/rs232/keyboard.h b/src/devices/bus/rs232/keyboard.h index 55e7e9d10fc..190a33a49e4 100644 --- a/src/devices/bus/rs232/keyboard.h +++ b/src/devices/bus/rs232/keyboard.h @@ -5,8 +5,6 @@ #pragma once -#pragma once - #include "rs232.h" #include "machine/keyboard.h" diff --git a/src/devices/bus/rs232/terminal.cpp b/src/devices/bus/rs232/terminal.cpp index 1c753996ec1..24c37f5a0e2 100644 --- a/src/devices/bus/rs232/terminal.cpp +++ b/src/devices/bus/rs232/terminal.cpp @@ -3,6 +3,39 @@ #include "emu.h" #include "terminal.h" +#include "machine/terminal.h" + + +namespace { + +class serial_terminal_device : public generic_terminal_device, + public device_buffered_serial_interface<16U>, + public device_rs232_port_interface +{ +public: + serial_terminal_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) override { device_buffered_serial_interface::rx_w(state); } + + DECLARE_WRITE_LINE_MEMBER(update_serial); + +protected: + virtual ioport_constructor device_input_ports() const override; + virtual void device_reset() override; + + virtual void tra_callback() override; + virtual void send_key(uint8_t code) override; + +private: + virtual void received_byte(uint8_t byte) override; + + required_ioport m_rs232_txbaud; + required_ioport m_rs232_rxbaud; + required_ioport m_rs232_databits; + required_ioport m_rs232_parity; + required_ioport m_rs232_stopbits; +}; + serial_terminal_device::serial_terminal_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : generic_terminal_device(mconfig, SERIAL_TERMINAL, tag, owner, clock, TERMINAL_WIDTH, TERMINAL_HEIGHT) , device_buffered_serial_interface(mconfig, *this) @@ -79,4 +112,7 @@ void serial_terminal_device::received_byte(uint8_t byte) term_write(byte); } -DEFINE_DEVICE_TYPE(SERIAL_TERMINAL, serial_terminal_device, "serial_terminal", "Serial Terminal") +} // anonymous namespace + + +DEFINE_DEVICE_TYPE_PRIVATE(SERIAL_TERMINAL, device_rs232_port_interface, serial_terminal_device, "serial_terminal", "Serial Terminal") diff --git a/src/devices/bus/rs232/terminal.h b/src/devices/bus/rs232/terminal.h index 32073efec4d..d1dd528bcf1 100644 --- a/src/devices/bus/rs232/terminal.h +++ b/src/devices/bus/rs232/terminal.h @@ -3,38 +3,11 @@ #ifndef MAME_BUS_RS232_TERMINAL_H #define MAME_BUS_RS232_TERMINAL_H -#include "rs232.h" -#include "machine/terminal.h" - - -class serial_terminal_device : public generic_terminal_device, - public device_buffered_serial_interface<16U>, - public device_rs232_port_interface -{ -public: - serial_terminal_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) override { device_buffered_serial_interface::rx_w(state); } +#pragma once - DECLARE_WRITE_LINE_MEMBER(update_serial); - -protected: - virtual ioport_constructor device_input_ports() const override; - virtual void device_reset() override; - - virtual void tra_callback() override; - virtual void send_key(uint8_t code) override; - -private: - virtual void received_byte(uint8_t byte) override; +#include "rs232.h" - required_ioport m_rs232_txbaud; - required_ioport m_rs232_rxbaud; - required_ioport m_rs232_databits; - required_ioport m_rs232_parity; - required_ioport m_rs232_stopbits; -}; -DECLARE_DEVICE_TYPE(SERIAL_TERMINAL, serial_terminal_device) +DECLARE_DEVICE_TYPE(SERIAL_TERMINAL, device_rs232_port_interface) #endif // MAME_BUS_RS232_TERMINAL_H diff --git a/src/lib/util/delegate.cpp b/src/lib/util/delegate.cpp index 880df3bc505..8949f90f146 100644 --- a/src/lib/util/delegate.cpp +++ b/src/lib/util/delegate.cpp @@ -24,20 +24,6 @@ #define LOG(...) do { if (false) printf(__VA_ARGS__); } while (false) #endif -// on some architectures, function pointers point to descriptors -// usually this is a global pointer value along with the branch target -// other platforms using this convention include: -// * AIX, Classic MacOS and WinNT on 32-bit POWER/PowerPC -// * pretty much anything on Itanium -// separately, on some architectures, function descriptors are stored in -// vtables directly -#if defined(__ia64__) - #define MAME_DELEGATE_VT_DESCRIPTOR 1 -#endif -#ifndef MAME_DELEGATE_VT_DESCRIPTOR - #define MAME_DELEGATE_VT_DESCRIPTOR 0 -#endif - //************************************************************************** @@ -102,7 +88,7 @@ delegate_generic_function delegate_mfp_itanium::convert_to_generic(delegate_gene // byte index into the vtable to the function std::uint8_t const *const vtable_ptr = *reinterpret_cast(object) + m_function - ((MAME_ABI_CXX_ITANIUM_MFP_TYPE == MAME_ABI_CXX_ITANIUM_MFP_ARM) ? 0 : 1); delegate_generic_function result; - if (MAME_DELEGATE_VT_DESCRIPTOR) + if (MAME_ABI_CXX_VTABLE_FNDESC) result = reinterpret_cast(uintptr_t(vtable_ptr)); else result = *reinterpret_cast(vtable_ptr); diff --git a/src/mame/machine/octo_kbd.h b/src/mame/machine/octo_kbd.h index f6d4dd49f23..430167cc597 100644 --- a/src/mame/machine/octo_kbd.h +++ b/src/mame/machine/octo_kbd.h @@ -5,7 +5,8 @@ #pragma once -#include "bus/rs232/keyboard.h" +#include "bus/rs232/rs232.h" +#include "machine/keyboard.h" class octopus_keyboard_device : public buffered_rs232_device<16U>, protected device_matrix_keyboard_interface<16U> { diff --git a/src/mame/machine/x68k_kbd.h b/src/mame/machine/x68k_kbd.h index e0c610462c0..58f6c57afa3 100644 --- a/src/mame/machine/x68k_kbd.h +++ b/src/mame/machine/x68k_kbd.h @@ -3,7 +3,11 @@ #ifndef MAME_MACHINE_X68K_KBD_H #define MAME_MACHINE_X68K_KBD_H -#include "bus/rs232/keyboard.h" +#pragma once + +#include "bus/rs232/rs232.h" +#include "machine/keyboard.h" + class x68k_keyboard_device : public buffered_rs232_device<16U>, protected device_matrix_keyboard_interface<15U> { -- cgit v1.2.3