summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/a2bus/a2ssc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/a2bus/a2ssc.cpp')
-rw-r--r--src/devices/bus/a2bus/a2ssc.cpp76
1 files changed, 70 insertions, 6 deletions
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<mos6551_device> m_acia;
+
+ required_region_ptr<uint8_t> 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")