summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/bbc/userport/usersplit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/bbc/userport/usersplit.cpp')
-rw-r--r--src/devices/bus/bbc/userport/usersplit.cpp74
1 files changed, 45 insertions, 29 deletions
diff --git a/src/devices/bus/bbc/userport/usersplit.cpp b/src/devices/bus/bbc/userport/usersplit.cpp
index 48adaaddd89..a3e81c86da3 100644
--- a/src/devices/bus/bbc/userport/usersplit.cpp
+++ b/src/devices/bus/bbc/userport/usersplit.cpp
@@ -6,19 +6,50 @@
**********************************************************************/
-
#include "emu.h"
#include "usersplit.h"
-//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-DEFINE_DEVICE_TYPE(BBC_USERSPLIT, bbc_usersplit_device, "bbc_usersplit", "BBC Micro User Port Splitter")
+namespace {
+
+class bbc_usersplit_device : public device_t, public device_bbc_userport_interface
+{
+public:
+ bbc_usersplit_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, BBC_USERSPLIT, tag, owner, clock)
+ , device_bbc_userport_interface(mconfig, *this)
+ , m_userport(*this, "userport%u", 1)
+ {
+ }
+
+ DECLARE_INPUT_CHANGED_MEMBER(userport_changed) { m_selected = newval; }
+
+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 ioport_constructor device_input_ports() const override ATTR_COLD;
+
+ virtual uint8_t pb_r() override;
+ virtual void pb_w(uint8_t data) override;
+ virtual void write_cb1(int state) override;
+ virtual void write_cb2(int state) override;
+
+private:
+ void cb1a_w(int state);
+ void cb2a_w(int state);
+ void cb1b_w(int state);
+ void cb2b_w(int state);
+
+ required_device_array<bbc_userport_slot_device, 2> m_userport;
+ uint8_t m_selected;
+};
//-------------------------------------------------
-// INPUT_PORTS( usersplit )
+// input_ports - device-specific input ports
//-------------------------------------------------
static INPUT_PORTS_START( usersplit )
@@ -28,50 +59,30 @@ static INPUT_PORTS_START( usersplit )
PORT_CONFSETTING(0x01, "B")
INPUT_PORTS_END
-
-//-------------------------------------------------
-// input_ports - device-specific input ports
-//-------------------------------------------------
-
ioport_constructor bbc_usersplit_device::device_input_ports() const
{
return INPUT_PORTS_NAME( usersplit );
}
+
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
void bbc_usersplit_device::device_add_mconfig(machine_config &config)
{
- /* user port A */
+ // user port A
BBC_USERPORT_SLOT(config, m_userport[0], bbc_userport_devices, nullptr);
m_userport[0]->cb1_handler().set(FUNC(bbc_usersplit_device::cb1a_w));
m_userport[0]->cb2_handler().set(FUNC(bbc_usersplit_device::cb2a_w));
- /* user port B */
+ // user port B
BBC_USERPORT_SLOT(config, m_userport[1], bbc_userport_devices, nullptr);
m_userport[1]->cb1_handler().set(FUNC(bbc_usersplit_device::cb1b_w));
m_userport[1]->cb2_handler().set(FUNC(bbc_usersplit_device::cb2b_w));
}
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// bbc_usersplit_device - constructor
-//-------------------------------------------------
-
-bbc_usersplit_device::bbc_usersplit_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, BBC_USERSPLIT, tag, owner, clock)
- , device_bbc_userport_interface(mconfig, *this)
- , m_userport(*this, "userport%u", 1)
-{
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -132,3 +143,8 @@ void bbc_usersplit_device::cb2b_w(int state)
if (m_selected == 0x01)
m_slot->cb2_w(state);
}
+
+} // anonymous namespace
+
+
+DEFINE_DEVICE_TYPE_PRIVATE(BBC_USERSPLIT, device_bbc_userport_interface, bbc_usersplit_device, "bbc_usersplit", "BBC Micro User Port Splitter")