From 447ebb792f04475cb7a1cb670f84210a157f945f Mon Sep 17 00:00:00 2001 From: Nigel Barnes Date: Mon, 17 Feb 2025 20:33:53 +0000 Subject: bus/electron: Use VCS slot device for First Byte, Power, Wizard, and ElkSD128 joystick interfaces. --- src/devices/bus/electron/elksd128.cpp | 113 +++++++++++--------------------- src/devices/bus/electron/fbjoy.cpp | 66 +++++++++---------- src/devices/bus/electron/fbjoy.h | 39 +---------- src/devices/bus/electron/pwrjoy.cpp | 88 +++++++++++++------------ src/devices/bus/electron/pwrjoy.h | 41 +----------- src/devices/bus/electron/sidewndr.cpp | 118 +++++++++++++++++----------------- src/devices/bus/electron/sidewndr.h | 54 ++-------------- 7 files changed, 177 insertions(+), 342 deletions(-) diff --git a/src/devices/bus/electron/elksd128.cpp b/src/devices/bus/electron/elksd128.cpp index 932e586aed0..d82186318ce 100644 --- a/src/devices/bus/electron/elksd128.cpp +++ b/src/devices/bus/electron/elksd128.cpp @@ -10,43 +10,51 @@ **********************************************************************/ - #include "emu.h" #include "elksd128.h" +#include "bus/vcs_ctrl/ctrl.h" #include "machine/spi_sdcard.h" namespace { -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class electron_elksd128_device: - public device_t, - public device_electron_expansion_interface +class electron_elksd128_device + : public device_t + , public device_electron_expansion_interface { public: - // construction/destruction - electron_elksd128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + electron_elksd128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, ELECTRON_ELKSD128, tag, owner, clock) + , device_electron_expansion_interface(mconfig, *this) + , m_flash(*this, "flash") + , m_sdcard(*this, "sdcard") + , m_joy(*this, "joy") + , m_romsel(0) + , m_adc_channel(0) + , m_swr_lock(0) + , m_spi_clock_state(false) + , m_spi_clock_sysclk(false) + , m_spi_clock_cycles(0) + { + } protected: - // device_t implementation + // device_t overrides virtual void device_start() override ATTR_COLD; virtual void device_reset() override ATTR_COLD; + + // optional information overrides virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; - virtual ioport_constructor device_input_ports() const override ATTR_COLD; virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; - // device_electron_expansion_interface implementation virtual uint8_t expbus_r(offs_t offset) override; virtual void expbus_w(offs_t offset, uint8_t data) override; private: required_memory_region m_flash; required_device m_sdcard; - required_ioport m_joy; + required_device m_joy; uint8_t m_romsel; uint8_t m_adc_channel; @@ -66,28 +74,8 @@ private: }; -static INPUT_PORTS_START( elksd128 ) - PORT_START("JOY") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_8WAY - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_8WAY - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_8WAY - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_8WAY - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Fire") - PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED) -INPUT_PORTS_END - -//------------------------------------------------- -// input_ports - device-specific input ports -//------------------------------------------------- - -ioport_constructor electron_elksd128_device::device_input_ports() const -{ - return INPUT_PORTS_NAME( elksd128 ); -} - - //------------------------------------------------- -// ROM( elksd128 ) +// rom_region - device-specific ROM region //------------------------------------------------- ROM_START( elksd128 ) @@ -95,6 +83,12 @@ ROM_START( elksd128 ) ROM_LOAD("esd12815.rom", 0x0000, 0x80000, CRC(3ecf23ce) SHA1(d552149fec6a1deec2b75c740092bd311d67046f)) ROM_END +const tiny_rom_entry *electron_elksd128_device::device_rom_region() const +{ + return ROM_NAME( elksd128 ); +} + + //------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- @@ -104,39 +98,10 @@ void electron_elksd128_device::device_add_mconfig(machine_config &config) SPI_SDCARD(config, m_sdcard, 0); m_sdcard->set_prefer_sdhc(); m_sdcard->spi_miso_callback().set([this](int state) { m_in_bit = state; }); -} -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const tiny_rom_entry *electron_elksd128_device::device_rom_region() const -{ - return ROM_NAME( elksd128 ); + VCS_CONTROL_PORT(config, m_joy, vcs_control_port_devices, "joy"); } -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// electron_elksd128_device - constructor -//------------------------------------------------- - -electron_elksd128_device::electron_elksd128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, ELECTRON_ELKSD128, tag, owner, clock) - , device_electron_expansion_interface(mconfig, *this) - , m_flash(*this, "flash") - , m_sdcard(*this, "sdcard") - , m_joy(*this, "JOY") - , m_romsel(0) - , m_adc_channel(0) - , m_swr_lock(0) - , m_spi_clock_state(false) - , m_spi_clock_sysclk(false) - , m_spi_clock_cycles(0) -{ -} //------------------------------------------------- // device_start - device-specific startup @@ -209,17 +174,17 @@ uint8_t electron_elksd128_device::expbus_r(offs_t offset) switch (m_adc_channel) { case 0x04: - if (!BIT(m_joy->read(), 3)) + if (!BIT(m_joy->read_joy(), 3)) data = 0x00; - else if (!BIT(m_joy->read(), 2)) + else if (!BIT(m_joy->read_joy(), 2)) data = 0xff; else data = 0x80; break; case 0x05: - if (!BIT(m_joy->read(), 1)) + if (!BIT(m_joy->read_joy(), 1)) data = 0x00; - else if (!BIT(m_joy->read(), 0)) + else if (!BIT(m_joy->read_joy(), 0)) data = 0xff; else data = 0x80; @@ -232,7 +197,7 @@ uint8_t electron_elksd128_device::expbus_r(offs_t offset) break; case 0xfc72: // Plus 1 joystick and ADC status - data = 0xaf | (m_joy->read() & 0x10); + data = 0xaf | (BIT(m_joy->read_joy(), 5) << 4); break; case 0xfc80: // SPI controller data port @@ -248,11 +213,11 @@ uint8_t electron_elksd128_device::expbus_r(offs_t offset) break; case 0xfcc0: // First Byte interface - data = m_joy->read() | 0xe0; + data = bitswap<8>(m_joy->read_joy(), 7, 6, 4, 5, 3, 2, 1, 0); break; case 0xfcd0: // Slogger interface - data = m_joy->read() | 0xe0; + data = bitswap<8>(m_joy->read_joy(), 7, 6, 4, 5, 3, 2, 1, 0); break; } break; @@ -365,8 +330,4 @@ TIMER_CALLBACK_MEMBER(electron_elksd128_device::spi_clock) } // anonymous namespace -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - DEFINE_DEVICE_TYPE_PRIVATE(ELECTRON_ELKSD128, device_electron_expansion_interface, electron_elksd128_device, "electron_elksd128", "ElkSD128 Electron SD Interface") diff --git a/src/devices/bus/electron/fbjoy.cpp b/src/devices/bus/electron/fbjoy.cpp index e5a4042cfeb..07c99d22bf6 100644 --- a/src/devices/bus/electron/fbjoy.cpp +++ b/src/devices/bus/electron/fbjoy.cpp @@ -11,55 +11,44 @@ #include "emu.h" #include "fbjoy.h" -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** +#include "bus/vcs_ctrl/ctrl.h" -DEFINE_DEVICE_TYPE(ELECTRON_FBJOY, electron_fbjoy_device, "electron_fbjoy", "First Byte Joystick Interface") +namespace { -static INPUT_PORTS_START( fbjoy ) - PORT_START("JOY") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_8WAY - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_8WAY - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_8WAY - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_8WAY - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Fire") -INPUT_PORTS_END - - -//------------------------------------------------- -// input_ports - device-specific input ports -//------------------------------------------------- - -ioport_constructor electron_fbjoy_device::device_input_ports() const +class electron_fbjoy_device + : public device_t + , public device_electron_expansion_interface { - return INPUT_PORTS_NAME( fbjoy ); -} +public: + electron_fbjoy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, ELECTRON_FBJOY, tag, owner, clock) + , device_electron_expansion_interface(mconfig, *this) + , m_joy(*this, "joy") + { + } + virtual uint8_t expbus_r(offs_t offset) override; -//************************************************************************** -// LIVE DEVICE -//************************************************************************** +protected: + // device_t overrides + virtual void device_start() override ATTR_COLD { } -//------------------------------------------------- -// electron_fbjoy_device - constructor -//------------------------------------------------- + // optional information overrides + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; -electron_fbjoy_device::electron_fbjoy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, ELECTRON_FBJOY, tag, owner, clock) - , device_electron_expansion_interface(mconfig, *this) - , m_joy(*this, "JOY") -{ -} +private: + required_device m_joy; +}; //------------------------------------------------- -// device_start - device-specific startup +// device_add_mconfig - add device configuration //------------------------------------------------- -void electron_fbjoy_device::device_start() +void electron_fbjoy_device::device_add_mconfig(machine_config &config) { + VCS_CONTROL_PORT(config, m_joy, vcs_control_port_devices, "joy"); } @@ -73,8 +62,13 @@ uint8_t electron_fbjoy_device::expbus_r(offs_t offset) if (offset == 0xfcc0) { - data = m_joy->read() | 0xe0; + data = bitswap<8>(m_joy->read_joy(), 7, 6, 4, 5, 3, 2, 1, 0); } return data; } + +} // anonymous namespace + + +DEFINE_DEVICE_TYPE_PRIVATE(ELECTRON_FBJOY, device_electron_expansion_interface, electron_fbjoy_device, "electron_fbjoy", "First Byte Joystick Interface") diff --git a/src/devices/bus/electron/fbjoy.h b/src/devices/bus/electron/fbjoy.h index c755a63a969..0d46202415b 100644 --- a/src/devices/bus/electron/fbjoy.h +++ b/src/devices/bus/electron/fbjoy.h @@ -1,51 +1,14 @@ // license:BSD-3-Clause // copyright-holders:Nigel Barnes -/********************************************************************** - - First Byte Switched Joystick Interface - - http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/FirstByte_JoystickIF.html - -**********************************************************************/ - #ifndef MAME_BUS_ELECTRON_FBJOY_H #define MAME_BUS_ELECTRON_FBJOY_H #pragma once - #include "exp.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// ======================> electron_fbjoy_device - -class electron_fbjoy_device : - public device_t, - public device_electron_expansion_interface -{ -public: - // construction/destruction - electron_fbjoy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - // optional information overrides - virtual ioport_constructor device_input_ports() const override ATTR_COLD; - - virtual uint8_t expbus_r(offs_t offset) override; - -protected: - // device-level overrides - virtual void device_start() override ATTR_COLD; - -private: - required_ioport m_joy; -}; - // device type definition -DECLARE_DEVICE_TYPE(ELECTRON_FBJOY, electron_fbjoy_device) - +DECLARE_DEVICE_TYPE(ELECTRON_FBJOY, device_electron_expansion_interface) #endif // MAME_BUS_ELECTRON_FBJOY_H diff --git a/src/devices/bus/electron/pwrjoy.cpp b/src/devices/bus/electron/pwrjoy.cpp index 5848edae648..cceac8df500 100644 --- a/src/devices/bus/electron/pwrjoy.cpp +++ b/src/devices/bus/electron/pwrjoy.cpp @@ -9,68 +9,67 @@ #include "emu.h" #include "pwrjoy.h" -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** +#include "bus/vcs_ctrl/ctrl.h" -DEFINE_DEVICE_TYPE(ELECTRON_PWRJOY, electron_pwrjoy_device, "electron_pwrjoy", "Power Software Joystick Interface") +namespace { -ROM_START( pwrjoy ) - // Bank 12 Expansion module operating system - ROM_REGION(0x2000, "exp_rom", 0) - ROM_LOAD("power_joystick.rom", 0x0000, 0x2000, CRC(44fb9360) SHA1(6d3aa85a436db952906e84839496e681ea115168)) -ROM_END - +class electron_pwrjoy_device + : public device_t + , public device_electron_expansion_interface +{ +public: + electron_pwrjoy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, ELECTRON_PWRJOY, tag, owner, clock) + , device_electron_expansion_interface(mconfig, *this) + , m_exp_rom(*this, "exp_rom") + , m_joy(*this, "joy") + , m_romsel(0) + { + } -static INPUT_PORTS_START( pwrjoy ) - PORT_START("JOY") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_8WAY - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_8WAY - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_8WAY - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_8WAY - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Fire") -INPUT_PORTS_END +protected: + // device_t overrides + virtual void device_start() override ATTR_COLD { } + // optional information overrides + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; -//------------------------------------------------- -// input_ports - device-specific input ports -//------------------------------------------------- + virtual uint8_t expbus_r(offs_t offset) override; + virtual void expbus_w(offs_t offset, uint8_t data) override; -ioport_constructor electron_pwrjoy_device::device_input_ports() const -{ - return INPUT_PORTS_NAME( pwrjoy ); -} +private: + required_memory_region m_exp_rom; + required_device m_joy; -const tiny_rom_entry *electron_pwrjoy_device::device_rom_region() const -{ - return ROM_NAME( pwrjoy ); -} + uint8_t m_romsel; +}; -//************************************************************************** -// LIVE DEVICE -//************************************************************************** //------------------------------------------------- -// electron_pwrjoy_device - constructor +// device_add_mconfig - add device configuration //------------------------------------------------- -electron_pwrjoy_device::electron_pwrjoy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, ELECTRON_PWRJOY, tag, owner, clock) - , device_electron_expansion_interface(mconfig, *this) - , m_exp_rom(*this, "exp_rom") - , m_joy(*this, "JOY") - , m_romsel(0) +void electron_pwrjoy_device::device_add_mconfig(machine_config &config) { + VCS_CONTROL_PORT(config, m_joy, vcs_control_port_devices, "joy"); } //------------------------------------------------- -// device_start - device-specific startup +// rom_region - device-specific ROM region //------------------------------------------------- -void electron_pwrjoy_device::device_start() +ROM_START( pwrjoy ) + // Bank 12 Expansion module operating system + ROM_REGION(0x2000, "exp_rom", 0) + ROM_LOAD("power_joystick.rom", 0x0000, 0x2000, CRC(44fb9360) SHA1(6d3aa85a436db952906e84839496e681ea115168)) +ROM_END + +const tiny_rom_entry *electron_pwrjoy_device::device_rom_region() const { + return ROM_NAME( pwrjoy ); } @@ -91,7 +90,7 @@ uint8_t electron_pwrjoy_device::expbus_r(offs_t offset) } else if (offset == 0xfcc0) { - data = m_joy->read() | 0xe0; + data = bitswap<8>(m_joy->read_joy(), 7, 6, 4, 5, 3, 2, 1, 0); } return data; @@ -109,3 +108,8 @@ void electron_pwrjoy_device::expbus_w(offs_t offset, uint8_t data) m_romsel = data & 0x0f; } } + +} // anonymous namespace + + +DEFINE_DEVICE_TYPE_PRIVATE(ELECTRON_PWRJOY, device_electron_expansion_interface, electron_pwrjoy_device, "electron_pwrjoy", "Power Software Joystick Interface") diff --git a/src/devices/bus/electron/pwrjoy.h b/src/devices/bus/electron/pwrjoy.h index 036af6c27a1..0c46c38d18f 100644 --- a/src/devices/bus/electron/pwrjoy.h +++ b/src/devices/bus/electron/pwrjoy.h @@ -1,53 +1,14 @@ // license:BSD-3-Clause // copyright-holders:Nigel Barnes -/********************************************************************** - - Power Software Joystick Interface - -**********************************************************************/ - #ifndef MAME_BUS_ELECTRON_PWRJOY_H #define MAME_BUS_ELECTRON_PWRJOY_H #pragma once - #include "exp.h" -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// ======================> electron_pwrjoy_device - -class electron_pwrjoy_device : - public device_t, - public device_electron_expansion_interface -{ -public: - // construction/destruction - electron_pwrjoy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; - virtual ioport_constructor device_input_ports() const override ATTR_COLD; - - virtual uint8_t expbus_r(offs_t offset) override; - virtual void expbus_w(offs_t offset, uint8_t data) override; - -protected: - // device-level overrides - virtual void device_start() override ATTR_COLD; - -private: - required_memory_region m_exp_rom; - required_ioport m_joy; - - uint8_t m_romsel; -}; - // device type definition -DECLARE_DEVICE_TYPE(ELECTRON_PWRJOY, electron_pwrjoy_device) +DECLARE_DEVICE_TYPE(ELECTRON_PWRJOY, device_electron_expansion_interface) #endif // MAME_BUS_ELECTRON_PWRJOY_H diff --git a/src/devices/bus/electron/sidewndr.cpp b/src/devices/bus/electron/sidewndr.cpp index d3d0d61955e..0298bbce8e5 100644 --- a/src/devices/bus/electron/sidewndr.cpp +++ b/src/devices/bus/electron/sidewndr.cpp @@ -8,19 +8,60 @@ **********************************************************************/ - #include "emu.h" #include "sidewndr.h" +#include "bus/generic/slot.h" +#include "bus/generic/carts.h" +#include "bus/vcs_ctrl/ctrl.h" -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** -DEFINE_DEVICE_TYPE(ELECTRON_SIDEWNDR, electron_sidewndr_device, "electron_sidewndr", "Wizard Sidewinder Rom Expansion Board") +namespace { + +class electron_sidewndr_device + : public device_t + , public device_electron_expansion_interface +{ +public: + electron_sidewndr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, ELECTRON_SIDEWNDR, tag, owner, clock) + , device_electron_expansion_interface(mconfig, *this) + , m_exp(*this, "exp") + , m_exp_rom(*this, "exp_rom") + , m_rom(*this, "rom%u", 1) + , m_joy(*this, "joy") + , m_romsel(0) + { + } + +protected: + // device_t overrides + virtual void device_start() override ATTR_COLD { } + + // optional information overrides + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + + virtual uint8_t expbus_r(offs_t offset) override; + virtual void expbus_w(offs_t offset, uint8_t data) override; + +private: + std::pair load_rom(device_image_interface &image, generic_slot_device *slot); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom1_load) { return load_rom(image, m_rom[0]); } + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom2_load) { return load_rom(image, m_rom[1]); } + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom3_load) { return load_rom(image, m_rom[2]); } + + required_device m_exp; + required_memory_region m_exp_rom; + required_device_array m_rom; + required_device m_joy; + + uint8_t m_romsel; +}; + //------------------------------------------------- -// ROM( sidewndr ) +// rom_region - device-specific ROM region //------------------------------------------------- ROM_START( sidewndr ) @@ -28,36 +69,18 @@ ROM_START( sidewndr ) ROM_LOAD("joyrom.rom", 0x0000, 0x2000, CRC(a7320cda) SHA1(771664dbf23bb14febeb414a0272762cd6091ead)) ROM_END -//------------------------------------------------- -// INPUT_PORTS( sidewndr ) -//------------------------------------------------- - -static INPUT_PORTS_START( sidewndr ) - PORT_START("JOY") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_8WAY - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_8WAY - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_8WAY - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_8WAY - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Fire") - PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED) -INPUT_PORTS_END - -//------------------------------------------------- -// input_ports - device-specific input ports -//------------------------------------------------- - -ioport_constructor electron_sidewndr_device::device_input_ports() const +const tiny_rom_entry *electron_sidewndr_device::device_rom_region() const { - return INPUT_PORTS_NAME( sidewndr ); + return ROM_NAME( sidewndr ); } + //------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- void electron_sidewndr_device::device_add_mconfig(machine_config &config) { - /* rom sockets */ GENERIC_SOCKET(config, m_rom[0], generic_plain_slot, "electron_rom", "bin,rom"); // ROM SLOT 6 m_rom[0]->set_device_load(FUNC(electron_sidewndr_device::rom1_load)); GENERIC_SOCKET(config, m_rom[1], generic_plain_slot, "electron_rom", "bin,rom"); // ROM SLOT 7 @@ -65,43 +88,13 @@ void electron_sidewndr_device::device_add_mconfig(machine_config &config) GENERIC_SOCKET(config, m_rom[2], generic_plain_slot, "electron_rom", "bin,rom"); // ROM SLOT 8 m_rom[2]->set_device_load(FUNC(electron_sidewndr_device::rom3_load)); - /* pass-through */ + VCS_CONTROL_PORT(config, m_joy, vcs_control_port_devices, "joy"); + ELECTRON_EXPANSION_SLOT(config, m_exp, DERIVED_CLOCK(1, 1), electron_expansion_devices, nullptr); m_exp->irq_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::irq_w)); m_exp->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(electron_expansion_slot_device::nmi_w)); } -const tiny_rom_entry *electron_sidewndr_device::device_rom_region() const -{ - return ROM_NAME( sidewndr ); -} - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// electron_sidewndr_device - constructor -//------------------------------------------------- - -electron_sidewndr_device::electron_sidewndr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, ELECTRON_SIDEWNDR, tag, owner, clock) - , device_electron_expansion_interface(mconfig, *this) - , m_exp(*this, "exp") - , m_exp_rom(*this, "exp_rom") - , m_rom(*this, "rom%u", 1) - , m_joy(*this, "JOY") - , m_romsel(0) -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void electron_sidewndr_device::device_start() -{ -} //------------------------------------------------- // expbus_r - expansion data read @@ -133,7 +126,7 @@ uint8_t electron_sidewndr_device::expbus_r(offs_t offset) case 0xfc: if (offset == 0xfc05) { - data = m_joy->read(); + data = bitswap<8>(m_joy->read_joy(), 7, 6, 4, 5, 3, 2, 1, 0); } break; @@ -185,3 +178,8 @@ std::pair electron_sidewndr_device::load_rom( return std::make_pair(std::error_condition(), std::string()); } + +} // anonymous namespace + + +DEFINE_DEVICE_TYPE_PRIVATE(ELECTRON_SIDEWNDR, device_electron_expansion_interface, electron_sidewndr_device, "electron_sidewndr", "Wizard Sidewinder Rom Expansion Board") diff --git a/src/devices/bus/electron/sidewndr.h b/src/devices/bus/electron/sidewndr.h index 3298f247809..e27e5e97584 100644 --- a/src/devices/bus/electron/sidewndr.h +++ b/src/devices/bus/electron/sidewndr.h @@ -1,60 +1,14 @@ // license:BSD-3-Clause // copyright-holders:Nigel Barnes -/********************************************************************** - - Wizard Sidewinder Rom Expansion Board - -**********************************************************************/ - - #ifndef MAME_BUS_ELECTRON_SIDEWNDR_H #define MAME_BUS_ELECTRON_SIDEWNDR_H -#include "exp.h" -#include "bus/generic/slot.h" -#include "bus/generic/carts.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class electron_sidewndr_device: - public device_t, - public device_electron_expansion_interface -{ -public: - // construction/destruction - electron_sidewndr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +#pragma once -protected: - // device_t implementation - virtual void device_start() override ATTR_COLD; - - // optional information overrides - virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; - virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; - virtual ioport_constructor device_input_ports() const override ATTR_COLD; - - virtual uint8_t expbus_r(offs_t offset) override; - virtual void expbus_w(offs_t offset, uint8_t data) override; - -private: - std::pair load_rom(device_image_interface &image, generic_slot_device *slot); - DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom1_load) { return load_rom(image, m_rom[0]); } - DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom2_load) { return load_rom(image, m_rom[1]); } - DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rom3_load) { return load_rom(image, m_rom[2]); } - - required_device m_exp; - required_memory_region m_exp_rom; - required_device_array m_rom; - required_ioport m_joy; - - uint8_t m_romsel; -}; +#include "exp.h" // device type definition -DECLARE_DEVICE_TYPE(ELECTRON_SIDEWNDR, electron_sidewndr_device) - +DECLARE_DEVICE_TYPE(ELECTRON_SIDEWNDR, device_electron_expansion_interface) -#endif /* MAME_BUS_ELECTRON_SIDEWNDR_H */ +#endif // MAME_BUS_ELECTRON_SIDEWNDR_H -- cgit v1.2.3-70-g09d2