diff options
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 |
commit | 84eeb9157dd4c08519a7e6c08abfb87b7b5f2ad8 (patch) | |
tree | a3c1c4828ebb4162974cd7821042e9d21e22c1f0 /src/devices/bus | |
parent | f6cea0ce99b5424835d28c80f1d759a7c2a78e5d (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.cpp | 13 | ||||
-rw-r--r-- | src/devices/bus/a2bus/a2diskii.h | 10 | ||||
-rw-r--r-- | src/devices/bus/a2bus/a2iwm.cpp | 51 | ||||
-rw-r--r-- | src/devices/bus/a2bus/a2iwm.h | 25 |
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 |