diff options
Diffstat (limited to 'src/devices/bus/a2bus/a2ssc.cpp')
-rw-r--r-- | src/devices/bus/a2bus/a2ssc.cpp | 76 |
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") |