summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus
diff options
context:
space:
mode:
author MetalliC <0vetal0@gmail.com>2020-07-17 00:50:06 +0300
committer MetalliC <0vetal0@gmail.com>2020-07-17 00:50:06 +0300
commit896a982d1b2830ceb3e62eed64679dae1e76f8d9 (patch)
tree577c0d8df2a1dbe995eddc0051dd526e9c3a2ccd /src/devices/bus
parent34c03bbb029d1e30843839ca66f7ec05d8c1c238 (diff)
spectrum: implemented Swift Disc and Swift Disc II interfaces
Diffstat (limited to 'src/devices/bus')
-rw-r--r--src/devices/bus/spectrum/exp.cpp5
-rw-r--r--src/devices/bus/spectrum/sixword.cpp504
-rw-r--r--src/devices/bus/spectrum/sixword.h96
3 files changed, 605 insertions, 0 deletions
diff --git a/src/devices/bus/spectrum/exp.cpp b/src/devices/bus/spectrum/exp.cpp
index 077af809092..9d01db00b1f 100644
--- a/src/devices/bus/spectrum/exp.cpp
+++ b/src/devices/bus/spectrum/exp.cpp
@@ -172,6 +172,7 @@ void spectrum_expansion_slot_device::mreq_w(offs_t offset, uint8_t data)
#include "logitek.h"
#include "protek.h"
#include "sdi.h"
+#include "sixword.h"
#include "specdrum.h"
#include "speccydos.h"
#include "uslot.h"
@@ -210,6 +211,8 @@ void spectrum_expansion_devices(device_slot_interface &device)
device.option_add("sdi", SPECTRUM_SDI);
device.option_add("speccydos", SPECTRUM_SPECCYDOS);
device.option_add("specdrum", SPECTRUM_SPECDRUM);
+ device.option_add("swiftdisc", SPECTRUM_SWIFTDISC);
+ device.option_add("swiftdisc2", SPECTRUM_SWIFTDISC2);
device.option_add("uslot", SPECTRUM_USLOT);
device.option_add("usource", SPECTRUM_USOURCE);
device.option_add("uspeech", SPECTRUM_USPEECH);
@@ -232,6 +235,8 @@ void spec128_expansion_devices(device_slot_interface &device)
device.option_add("protek", SPECTRUM_PROTEK);
device.option_add("speccydos", SPECTRUM_SPECCYDOS);
device.option_add("specdrum", SPECTRUM_SPECDRUM);
+ device.option_add("swiftdisc", SPECTRUM_SWIFTDISC);
+ device.option_add("swiftdisc2", SPECTRUM_SWIFTDISC2);
device.option_add("wafadrive", SPECTRUM_WAFA);
}
diff --git a/src/devices/bus/spectrum/sixword.cpp b/src/devices/bus/spectrum/sixword.cpp
new file mode 100644
index 00000000000..cbfc21a946a
--- /dev/null
+++ b/src/devices/bus/spectrum/sixword.cpp
@@ -0,0 +1,504 @@
+// license:BSD-3-Clause
+// copyright-holders:MetalliC
+/*********************************************************************
+
+ Swift Disc
+ (c) 1987 SIXWORD ltd (UK)
+
+ WD1770-based floppy drive interface with 8KB RAM and 16KB ROM, serial printer interface, joystick port and "interrupt" button,
+ supports up to 4x 3'5 (normally) or 5"25 drives, 640KB per disk, compatible with ZX Spectrum 128, was positioned as luxury device.
+ For additional charge was available ZX Interface 1 microdrive emulator software (currently missing).
+
+ How to use:
+ Press "Interrupt" button and you'll get into console where you may type commands, like:
+ C[AT] [drive] - list disk contents, drive 0-3
+ F[ORMAT] diskname - format disk
+ S[AVE] filename - save snapshot to disk
+ L[OAD] filename - load snapshot from disk
+ A[LTER] address data - change value in RAM
+ Q[UIT] - return to BASIC/game
+ * - reset
+ Starting form Swift Disc O/S V2 most of commands may be called from BASIC using syntax like "COMMAND %drive;"filename"", for example:
+ CAT %0
+ LOAD %0;"game"
+ and so on, plus additional commands for sequential file access.
+
+ Manual: https://k1.spdns.de/Vintage/Sinclair/82/Peripherals/Disc%20Interfaces/SixWord%20Swift%20Disc%20Interface/Swift%20Disc%20Operating%20Manual.pdf
+
+
+ Swift Disc II
+ (c) 1989 SIXWORD ltd (UK)
+
+ Same as above but extended to 32KB ROM, most of discrete ICs replaced with PALs, smaller form factor.
+ It seems RAM was planned to be extended to 16KB, but 2nd RAM IC is not populated on known devices.
+ Was available in several favours - with or without printer port, various number of supported drives, etc.
+ Dumped v4.2 firmware supports 2 disk drives, but hardware still supports up to 4x.
+
+ Notes / TODOs:
+ - serial printer interface not hooked
+
+*********************************************************************/
+
+#include "emu.h"
+#include "sixword.h"
+
+
+/***************************************************************************
+ DEVICE DEFINITIONS
+***************************************************************************/
+
+DEFINE_DEVICE_TYPE(SPECTRUM_SWIFTDISC, spectrum_swiftdisc_device, "spectrum_swiftdisc", "Swift Disc Interface")
+DEFINE_DEVICE_TYPE(SPECTRUM_SWIFTDISC2, spectrum_swiftdisc2_device, "spectrum_swiftdisc2", "Swift Disc II Interface")
+
+
+//-------------------------------------------------
+// INPUT_PORTS
+//-------------------------------------------------
+
+INPUT_PORTS_START(swiftdisc)
+ PORT_START("BUTTON")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Interrupt Button") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, spectrum_swiftdisc_device, nmi_button, 0)
+
+ PORT_START("JOY")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT) PORT_8WAY
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT) PORT_8WAY
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_8WAY
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_8WAY
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON1)
+ PORT_BIT(0xe0, IP_ACTIVE_HIGH, IPT_UNUSED)
+INPUT_PORTS_END
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor spectrum_swiftdisc_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(swiftdisc);
+}
+
+//-------------------------------------------------
+// SLOT_INTERFACE( floppies )
+//-------------------------------------------------
+
+static void swiftdisc_floppies(device_slot_interface &device)
+{
+ device.option_add("35dd", FLOPPY_35_DD);
+ device.option_add("525qd", FLOPPY_525_QD);
+}
+
+//-------------------------------------------------
+// floppy_format_type floppy_formats
+//-------------------------------------------------
+
+FLOPPY_FORMATS_MEMBER(spectrum_swiftdisc_device::floppy_formats)
+ FLOPPY_SWD_FORMAT
+FLOPPY_FORMATS_END
+
+//-------------------------------------------------
+// ROM( swiftdisc )
+//-------------------------------------------------
+
+ROM_START(swiftdisc)
+ ROM_REGION(0x4000, "rom", 0)
+ ROM_DEFAULT_BIOS("v34")
+
+ // v2.3 known to exists, not dumped
+ ROM_SYSTEM_BIOS(0, "v24", "v2.4")
+ ROMX_LOAD("24.ic8", 0x0000, 0x4000, CRC(547f660a) SHA1(73a1b96271760fb0edfc1302368372501455bbfc), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v34", "v3.4")
+ ROMX_LOAD("34.ic8", 0x0000, 0x4000, CRC(f7092c0c) SHA1(5afe0364afedc83c03995d44914fe7f207fb5c28), ROM_BIOS(1))
+ROM_END
+
+ROM_START(swiftdisc2)
+ ROM_REGION(0x8000, "rom", 0)
+ ROM_DEFAULT_BIOS("v42")
+
+ ROM_SYSTEM_BIOS(0, "v42", "v4.2")
+ ROMX_LOAD("42.bin", 0x0000, 0x8000, CRC(a6fde15b) SHA1(496be6f655974b6162ff430b6ba0c7002164b736), ROM_BIOS(0))
+
+ ROM_REGION(260, "pals", 0)
+ ROM_LOAD("dec1_pal16l8.bin", 0, 260, BAD_DUMP CRC(1433067c) SHA1(a0cf09a86a0d7a71332005bbb04d27d3aa45291c)) // one of logic equations clearly wrong
+ ROM_LOAD("dec2_pal16l8.bin", 0, 260, CRC(4d088879) SHA1(d1d60b38068d457db25f5df304a705999f285fd9))
+ ROM_LOAD("dec3_pal16l8.bin", 0, 260, CRC(8306722c) SHA1(2ad28d44bc33a50ed5f93f2520f25100dd36841d))
+ROM_END
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void spectrum_swiftdisc_device::device_add_mconfig(machine_config &config)
+{
+ WD1770(config, m_fdc, 8_MHz_XTAL);
+ m_fdc->intrq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::nmi_w));
+ m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::nmi_w));
+
+ FLOPPY_CONNECTOR(config, "fdc:0", swiftdisc_floppies, "35dd", spectrum_swiftdisc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, "fdc:1", swiftdisc_floppies, "35dd", spectrum_swiftdisc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, "fdc:2", swiftdisc_floppies, nullptr, spectrum_swiftdisc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, "fdc:3", swiftdisc_floppies, nullptr, spectrum_swiftdisc_device::floppy_formats).enable_sound(true);
+
+ // passthru
+ SPECTRUM_EXPANSION_SLOT(config, m_exp, spectrum_expansion_devices, nullptr);
+ m_exp->irq_handler().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::irq_w));
+ m_exp->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::nmi_w));
+}
+
+const tiny_rom_entry *spectrum_swiftdisc_device::device_rom_region() const
+{
+ return ROM_NAME(swiftdisc);
+}
+
+const tiny_rom_entry *spectrum_swiftdisc2_device::device_rom_region() const
+{
+ return ROM_NAME(swiftdisc2);
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// spectrum_swiftdisc_device - constructor
+//-------------------------------------------------
+
+spectrum_swiftdisc_device::spectrum_swiftdisc_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_spectrum_expansion_interface(mconfig, *this)
+ , m_rom(*this, "rom")
+ , m_fdc(*this, "fdc")
+ , m_floppy(*this, "fdc:%u", 0)
+ , m_exp(*this, "exp")
+ , m_joy(*this, "JOY")
+{
+}
+
+spectrum_swiftdisc_device::spectrum_swiftdisc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : spectrum_swiftdisc_device(mconfig, SPECTRUM_SWIFTDISC, tag, owner, clock)
+{
+}
+
+spectrum_swiftdisc2_device::spectrum_swiftdisc2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : spectrum_swiftdisc_device(mconfig, SPECTRUM_SWIFTDISC2, tag, owner, clock)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void spectrum_swiftdisc_device::device_start()
+{
+ memset(m_ram, 0, sizeof(m_ram));
+
+ save_item(NAME(m_romcs));
+ save_item(NAME(m_ram));
+ save_item(NAME(m_rombank));
+ save_item(NAME(m_control));
+}
+
+void spectrum_swiftdisc2_device::device_start()
+{
+ spectrum_swiftdisc_device::device_start();
+ save_item(NAME(m_rambank));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void spectrum_swiftdisc_device::device_reset()
+{
+ m_romcs = 0;
+ m_rombank = 0;
+ m_control = 0;
+}
+
+void spectrum_swiftdisc2_device::device_reset()
+{
+ spectrum_swiftdisc_device::device_reset();
+ m_rambank = 0;
+}
+
+//**************************************************************************
+// IMPLEMENTATION (swiftdisc)
+//**************************************************************************
+
+READ_LINE_MEMBER(spectrum_swiftdisc_device::romcs)
+{
+ return m_romcs | m_exp->romcs();
+}
+
+void spectrum_swiftdisc_device::post_opcode_fetch(offs_t offset)
+{
+ m_exp->post_opcode_fetch(offset);
+
+ if (!machine().side_effects_disabled())
+ {
+ switch (offset)
+ {
+ case 0x000b:
+ m_romcs = !m_romcs;
+ break;
+ case 0x0066:
+ if (m_rombank & 0x1000)
+ m_romcs = !m_romcs;
+ break;
+ }
+ }
+}
+
+uint8_t spectrum_swiftdisc_device::mreq_r(offs_t offset)
+{
+ u8 data = 0xff;
+
+ if (m_romcs)
+ {
+ switch (offset & 0xf000)
+ {
+ case 0x0000:
+ data = m_rom->base()[m_rombank + offset];
+ break;
+ case 0x1000:
+ case 0x2000:
+ data = m_ram[offset - 0x1000];
+ break;
+ case 0x3000:
+ if (!BIT(offset, 3))
+ data = m_fdc->read(offset & 3);
+ else
+ data = 0; // D0 - DTR input, D1 - RX input
+ break;
+ }
+ }
+
+ if (m_exp->romcs())
+ data &= m_exp->mreq_r(offset);
+
+ return data;
+}
+
+void spectrum_swiftdisc_device::mreq_w(offs_t offset, uint8_t data)
+{
+ if (m_romcs)
+ {
+ switch (offset & 0xf000)
+ {
+ case 0x0000:
+ if (BIT(offset, 3))
+ m_rombank ^= 0x1000;
+ else
+ {
+ floppy_image_device* floppy = nullptr;
+ for (int i = 3; i >= 0; i--)
+ {
+ floppy_image_device* fl = m_floppy[i]->get_device();
+ if (fl)
+ {
+ fl->ss_w(BIT(data, 4));
+ if (BIT(data, i))
+ floppy = fl;
+ }
+ }
+ m_fdc->set_floppy(floppy);
+
+ m_rombank &= ~0x2000;
+ m_rombank |= BIT(data, 5) << 13;
+
+ m_control = data;
+ // D3 - /TX output
+ }
+ break;
+ case 0x1000:
+ case 0x2000:
+ m_ram[offset - 0x1000] = data;
+ break;
+ case 0x3000:
+ if (!BIT(offset, 3))
+ m_fdc->write(offset & 3, data);
+ break;
+ }
+ }
+
+ m_exp->mreq_w(offset, data);
+}
+
+uint8_t spectrum_swiftdisc_device::iorq_r(offs_t offset)
+{
+ uint8_t data = m_exp->iorq_r(offset);
+
+ if (!BIT(offset, 5))
+ data = m_joy->read();
+
+ return data;
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION (swiftdisc2)
+//**************************************************************************
+
+void spectrum_swiftdisc2_device::post_opcode_fetch(offs_t offset)
+{
+ m_exp->post_opcode_fetch(offset);
+
+ if (!machine().side_effects_disabled())
+ {
+ switch (offset)
+ {
+ case 0x000b:
+ m_romcs = !m_romcs;
+ break;
+ case 0x0066:
+ if (m_rombank & 0x1000)
+ m_romcs = !m_romcs;
+ break;
+ case 0x1709:
+ if (BIT(m_control,2))
+ m_romcs = !m_romcs;
+ break;
+ }
+ }
+}
+
+uint8_t spectrum_swiftdisc2_device::mreq_r(offs_t offset)
+{
+ u8 data = 0xff;
+
+ if (m_romcs)
+ {
+ switch (offset & 0xf000)
+ {
+ case 0x0000:
+ data = m_rom->base()[m_rombank + offset];
+ break;
+ case 0x1000:
+ case 0x2000:
+ if (!m_rambank)
+ data = m_ram[offset - 0x1000];
+ else
+ {
+ data = 0xff; // 2nd RAM IC not populated
+ logerror("Swift2 RAM2 read %04x\n", offset);
+ }
+ break;
+ case 0x3000:
+ if (!BIT(offset, 4))
+ data = m_fdc->read(offset & 3);
+ else
+ data &= ~1; // D0 - nc, but seems was planned to do something, leftover from prev version ?
+ break;
+ }
+ }
+
+ if (m_exp->romcs())
+ data &= m_exp->mreq_r(offset);
+
+ return data;
+}
+
+void spectrum_swiftdisc2_device::mreq_w(offs_t offset, uint8_t data)
+{
+ if (m_romcs)
+ {
+ switch (offset & 0xf000)
+ {
+ case 0x0000:
+ if (BIT(offset, 8))
+ m_rambank = !m_rambank;
+ break;
+ case 0x1000:
+ case 0x2000:
+ if (!m_rambank)
+ m_ram[offset - 0x1000] = data;
+ else
+ {
+ // 2nd RAM IC not populated
+ logerror("Swift2 RAM2 write %04x %02x\n", offset, data);
+ }
+ break;
+ case 0x3000:
+ if ((offset & 0x890) == 0)
+ m_fdc->write(offset & 3, data);
+
+ if (BIT(offset, 4))
+ control_w(data);
+ break;
+ }
+ }
+
+ m_exp->mreq_w(offset, data);
+}
+
+uint8_t spectrum_swiftdisc2_device::iorq_r(offs_t offset)
+{
+ uint8_t data = m_exp->iorq_r(offset);
+
+ if (m_romcs && (offset & 0xf890) == 0x3000)
+ data &= ~1; // IO port mirror
+
+ if (!BIT(offset, 5) && !BIT(m_control, 3))
+ data = m_joy->read();
+
+ if (BIT(m_control, 2))
+ {
+ if (!BIT(offset, 3))
+ {
+ data |= 0x80; // D7 - /serial input
+ }
+ if (!BIT(offset, 4))
+ {
+ data &= ~0x0f;
+ data |= 3;
+ data |= 8; // D3 - /serial input
+ }
+ }
+
+ return data;
+}
+
+void spectrum_swiftdisc2_device::iorq_w(offs_t offset, uint8_t data)
+{
+ if (m_romcs && (offset & 0xf890) == 0x3000)
+ control_w(data);
+
+ if (BIT(m_control, 2))
+ {
+ if (!BIT(offset, 3))
+ {
+ // D0 - /serial output
+ }
+ if (!BIT(offset, 4))
+ {
+ // D0 - 0=reset above latch
+ // D4 - /serial output
+ }
+ }
+
+ m_exp->iorq_w(offset, data);
+}
+
+void spectrum_swiftdisc2_device::control_w(uint8_t data)
+{
+ floppy_image_device* floppy = nullptr;
+ for (int i = 3; i >= 0; i--)
+ {
+ floppy_image_device* fl = m_floppy[i]->get_device();
+ if (fl)
+ {
+ fl->ss_w(BIT(data, 4));
+ if (!BIT(data, i))
+ floppy = fl;
+ }
+ }
+ m_fdc->set_floppy(floppy);
+
+ m_rombank &= ~0x6000;
+ m_rombank |= BIT(data, 5) << 13;
+ m_rombank |= BIT(data, 6) << 14;
+
+ if (BIT(data, 7) && !BIT(m_control, 7)) // swap bank at 0->1
+ m_rombank ^= 0x1000;
+ m_control = data;
+}
diff --git a/src/devices/bus/spectrum/sixword.h b/src/devices/bus/spectrum/sixword.h
new file mode 100644
index 00000000000..1ed63bb28bd
--- /dev/null
+++ b/src/devices/bus/spectrum/sixword.h
@@ -0,0 +1,96 @@
+// license:BSD-3-Clause
+// copyright-holders:MetalliC
+/*********************************************************************
+
+ SIXWORD Swift Disc Interface
+
+*********************************************************************/
+#ifndef MAME_BUS_SPECTRUM_SIXWORD_H
+#define MAME_BUS_SPECTRUM_SIXWORD_H
+
+#include "exp.h"
+#include "softlist.h"
+#include "imagedev/floppy.h"
+#include "machine/wd_fdc.h"
+#include "formats/swd_dsk.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class spectrum_swiftdisc_device :
+ public device_t,
+ public device_spectrum_expansion_interface
+
+{
+public:
+ // construction/destruction
+ spectrum_swiftdisc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ DECLARE_FLOPPY_FORMATS(floppy_formats);
+ DECLARE_INPUT_CHANGED_MEMBER(nmi_button) { m_rombank |= newval << 12; m_slot->nmi_w(newval ? ASSERT_LINE : CLEAR_LINE); };
+
+protected:
+ spectrum_swiftdisc_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual ioport_constructor device_input_ports() const override;
+
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ virtual void post_opcode_fetch(offs_t offset) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+
+ required_memory_region m_rom;
+ required_device<wd_fdc_device_base> m_fdc;
+ required_device_array<floppy_connector, 4> m_floppy;
+ required_device<spectrum_expansion_slot_device> m_exp;
+ required_ioport m_joy;
+
+ int m_romcs;
+ u8 m_ram[0x2000];
+ u16 m_rombank;
+ u8 m_control;
+};
+
+class spectrum_swiftdisc2_device :
+ public spectrum_swiftdisc_device
+{
+public:
+ // construction/destruction
+ spectrum_swiftdisc2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ virtual void post_opcode_fetch(offs_t offset) override;
+ virtual uint8_t mreq_r(offs_t offset) override;
+ virtual void mreq_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t iorq_r(offs_t offset) override;
+ virtual void iorq_w(offs_t offset, uint8_t data) override;
+
+ void control_w(uint8_t data);
+
+ int m_rambank;
+};
+
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(SPECTRUM_SWIFTDISC, spectrum_swiftdisc_device)
+DECLARE_DEVICE_TYPE(SPECTRUM_SWIFTDISC2, spectrum_swiftdisc2_device)
+
+
+#endif // MAME_BUS_SPECTRUM_SIXWORD_H