summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2020-05-23 20:08:58 -0400
committer arbee <rb6502@users.noreply.github.com>2020-05-23 20:08:58 -0400
commit84eeb9157dd4c08519a7e6c08abfb87b7b5f2ad8 (patch)
treea3c1c4828ebb4162974cd7821042e9d21e22c1f0 /src/devices/bus
parentf6cea0ce99b5424835d28c80f1d759a7c2a78e5d (diff)
apple2: support Disk II IWM Card using new IWM [O. Galibert, R. Belmont]
Diffstat (limited to 'src/devices/bus')
-rw-r--r--src/devices/bus/a2bus/a2diskii.cpp13
-rw-r--r--src/devices/bus/a2bus/a2diskii.h10
-rw-r--r--src/devices/bus/a2bus/a2iwm.cpp51
-rw-r--r--src/devices/bus/a2bus/a2iwm.h25
4 files changed, 71 insertions, 28 deletions
diff --git a/src/devices/bus/a2bus/a2diskii.cpp b/src/devices/bus/a2bus/a2diskii.cpp
index 95e494974c6..2c06ee5136f 100644
--- a/src/devices/bus/a2bus/a2diskii.cpp
+++ b/src/devices/bus/a2bus/a2diskii.cpp
@@ -24,7 +24,6 @@
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_DISKII, a2bus_diskii_device, "a2diskii", "Apple Disk II controller")
-DEFINE_DEVICE_TYPE(A2BUS_IWM_FDC, a2bus_iwmflop_device, "a2iwm_flop", "Apple IWM floppy card")
DEFINE_DEVICE_TYPE(A2BUS_AGAT7_FDC, a2bus_agat7flop_device, "agat7_flop", "Agat-7 140K floppy card")
DEFINE_DEVICE_TYPE(A2BUS_AGAT9_FDC, a2bus_agat9flop_device, "agat9_flop", "Agat-9 140K floppy card")
@@ -74,13 +73,6 @@ void a2bus_floppy_device::device_add_mconfig(machine_config &config)
FLOPPY_APPLE(config, FLOPPY_1, &floppy_interface, 15, 16);
}
-void a2bus_iwmflop_device::device_add_mconfig(machine_config &config)
-{
- LEGACY_IWM(config, m_fdc, &fdc_interface);
- FLOPPY_APPLE(config, FLOPPY_0, &floppy_interface, 15, 16);
- FLOPPY_APPLE(config, FLOPPY_1, &floppy_interface, 15, 16);
-}
-
//-------------------------------------------------
// rom_region - device-specific ROM region
//-------------------------------------------------
@@ -116,11 +108,6 @@ a2bus_diskii_device::a2bus_diskii_device(const machine_config &mconfig, const ch
{
}
-a2bus_iwmflop_device::a2bus_iwmflop_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- a2bus_floppy_device(mconfig, A2BUS_IWM_FDC, tag, owner, clock)
-{
-}
-
a2bus_agat7flop_device::a2bus_agat7flop_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
a2bus_floppy_device(mconfig, A2BUS_AGAT7_FDC, tag, owner, clock)
{
diff --git a/src/devices/bus/a2bus/a2diskii.h b/src/devices/bus/a2bus/a2diskii.h
index 879744e8950..a196d148f78 100644
--- a/src/devices/bus/a2bus/a2diskii.h
+++ b/src/devices/bus/a2bus/a2diskii.h
@@ -50,15 +50,6 @@ public:
a2bus_diskii_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};
-class a2bus_iwmflop_device: public a2bus_floppy_device
-{
-public:
- a2bus_iwmflop_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
-protected:
- virtual void device_add_mconfig(machine_config &config) override;
-};
-
class a2bus_agat7flop_device: public a2bus_floppy_device
{
public:
@@ -77,7 +68,6 @@ public:
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_DISKII, a2bus_diskii_device)
-DECLARE_DEVICE_TYPE(A2BUS_IWM_FDC, a2bus_iwmflop_device)
DECLARE_DEVICE_TYPE(A2BUS_AGAT7_FDC, a2bus_agat7flop_device)
DECLARE_DEVICE_TYPE(A2BUS_AGAT9_FDC, a2bus_agat9flop_device)
diff --git a/src/devices/bus/a2bus/a2iwm.cpp b/src/devices/bus/a2bus/a2iwm.cpp
index 29c85569bac..bcc975aeefc 100644
--- a/src/devices/bus/a2bus/a2iwm.cpp
+++ b/src/devices/bus/a2bus/a2iwm.cpp
@@ -6,6 +6,9 @@
Implementation of the Apple II IWM controller card
+ WANTED: there are no ROM dumps from this card in any form
+ (the IWM card, the UniDisk )
+
*********************************************************************/
#include "emu.h"
@@ -17,7 +20,15 @@
// GLOBAL VARIABLES
//**************************************************************************
-DEFINE_DEVICE_TYPE(A2BUS_IWM, a2bus_iwm_device, "a2iwm", "Apple IWM controller card")
+DEFINE_DEVICE_TYPE(A2BUS_IWM, a2bus_iwm_int_device, "a2iwmint", "Apple IWM controller")
+DEFINE_DEVICE_TYPE(A2BUS_IWM_CARD, a2bus_iwm_card_device, "a2iwm", "Apple Disk II IWM controller")
+
+#define DISKII_ROM_REGION "diskii_rom"
+
+ROM_START( iwm )
+ ROM_REGION(0x100, DISKII_ROM_REGION, 0)
+ ROM_LOAD( "341-0027-a.p5", 0x000000, 0x000100, CRC(ce7144f6) SHA1(d4181c9f046aafc3fb326b381baac809d9e38d16) )
+ROM_END
//-------------------------------------------------
// device_add_mconfig - add device configuration
@@ -32,18 +43,37 @@ void a2bus_iwm_device::device_add_mconfig(machine_config &config)
applefdintf_device::add_525(config, m_floppy[1]);
}
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *a2bus_iwm_card_device::device_rom_region() const
+{
+ return ROM_NAME( iwm );
+}
+
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
-a2bus_iwm_device::a2bus_iwm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, A2BUS_IWM, tag, owner, clock),
+a2bus_iwm_device::a2bus_iwm_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_a2bus_card_interface(mconfig, *this),
m_iwm(*this, "iwm"),
m_floppy(*this, "%u", 0U)
{
}
+a2bus_iwm_int_device::a2bus_iwm_int_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ a2bus_iwm_device(mconfig, A2BUS_IWM, tag, owner, clock)
+{
+}
+
+a2bus_iwm_card_device::a2bus_iwm_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ a2bus_iwm_device(mconfig, A2BUS_IWM_CARD, tag, owner, clock)
+{
+}
+
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -52,6 +82,12 @@ void a2bus_iwm_device::device_start()
{
}
+void a2bus_iwm_card_device::device_start()
+{
+ a2bus_iwm_device::device_start();
+ m_rom = device().machine().root_device().memregion(this->subtag(DISKII_ROM_REGION).c_str())->base();
+}
+
void a2bus_iwm_device::device_reset()
{
}
@@ -75,6 +111,15 @@ void a2bus_iwm_device::write_c0nx(u8 offset, u8 data)
m_iwm->write(offset, data);
}
+/*-------------------------------------------------
+ read_cnxx - called for reads from this card's c0nx space
+-------------------------------------------------*/
+
+uint8_t a2bus_iwm_card_device::read_cnxx(uint8_t offset)
+{
+ return m_rom[offset];
+}
+
void a2bus_iwm_device::devsel_w(u8 data)
{
if(data & 1)
diff --git a/src/devices/bus/a2bus/a2iwm.h b/src/devices/bus/a2bus/a2iwm.h
index 07f76384c28..89e89926eeb 100644
--- a/src/devices/bus/a2bus/a2iwm.h
+++ b/src/devices/bus/a2bus/a2iwm.h
@@ -29,7 +29,7 @@ class a2bus_iwm_device:
{
public:
// construction/destruction
- a2bus_iwm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+ a2bus_iwm_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
protected:
virtual void device_start() override;
@@ -48,7 +48,28 @@ private:
void phases_w(u8 data);
};
+class a2bus_iwm_int_device: public a2bus_iwm_device
+{
+public:
+ a2bus_iwm_int_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+class a2bus_iwm_card_device: public a2bus_iwm_device
+{
+public:
+ a2bus_iwm_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual void device_start() override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ virtual uint8_t read_cnxx(uint8_t offset) override;
+
+private:
+ uint8_t *m_rom;
+};
+
// device type definition
-DECLARE_DEVICE_TYPE(A2BUS_IWM, a2bus_iwm_device)
+DECLARE_DEVICE_TYPE(A2BUS_IWM, a2bus_iwm_int_device)
+DECLARE_DEVICE_TYPE(A2BUS_IWM_CARD, a2bus_iwm_card_device)
#endif // MAME_BUS_A2BUS_A2IWM_H