summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Nigel Barnes <ngbarnes@gmail.com>2025-02-17 20:33:53 +0000
committer Nigel Barnes <ngbarnes@gmail.com>2025-02-17 21:48:18 +0000
commit447ebb792f04475cb7a1cb670f84210a157f945f (patch)
tree999d3cf2f1c8521a7af6b0ff027e45477a6cc40e
parent4c9820e8ab71ae67019f7beb6b6df2ebcf5748f3 (diff)
bus/electron: Use VCS slot device for First Byte, Power, Wizard, and ElkSD128 joystick interfaces.
-rw-r--r--src/devices/bus/electron/elksd128.cpp113
-rw-r--r--src/devices/bus/electron/fbjoy.cpp66
-rw-r--r--src/devices/bus/electron/fbjoy.h39
-rw-r--r--src/devices/bus/electron/pwrjoy.cpp88
-rw-r--r--src/devices/bus/electron/pwrjoy.h41
-rw-r--r--src/devices/bus/electron/sidewndr.cpp118
-rw-r--r--src/devices/bus/electron/sidewndr.h54
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<spi_sdcard_device> m_sdcard;
- required_ioport m_joy;
+ required_device<vcs_control_port_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<vcs_control_port_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<vcs_control_port_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<std::error_condition, std::string> 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<electron_expansion_slot_device> m_exp;
+ required_memory_region m_exp_rom;
+ required_device_array<generic_slot_device, 3> m_rom;
+ required_device<vcs_control_port_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<std::error_condition, std::string> 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<std::error_condition, std::string> 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<electron_expansion_slot_device> m_exp;
- required_memory_region m_exp_rom;
- required_device_array<generic_slot_device, 3> 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