diff options
author | 2020-02-14 22:39:57 -0500 | |
---|---|---|
committer | 2020-02-14 22:39:57 -0500 | |
commit | 6c6267ca58e45be668557cd23473ffaacf06eb7f (patch) | |
tree | c03dca70a53f14e16c92b09e904845613fbbcabd | |
parent | 93a9015f7f807ba837e2741e68791ebcf59639c2 (diff) |
apple2 updates:
- Allow cards to see CFFF accesses [R. Belmont]
- Preliminary support for Applesurance floppy controller [R. Belmont, DiskBlitz]
-rw-r--r-- | src/devices/bus/a2bus/a2diskiing.cpp | 26 | ||||
-rw-r--r-- | src/devices/bus/a2bus/a2diskiing.h | 29 | ||||
-rw-r--r-- | src/mame/drivers/apple2.cpp | 22 | ||||
-rw-r--r-- | src/mame/drivers/apple2e.cpp | 23 | ||||
-rw-r--r-- | src/mame/drivers/apple2gs.cpp | 24 |
5 files changed, 100 insertions, 24 deletions
diff --git a/src/devices/bus/a2bus/a2diskiing.cpp b/src/devices/bus/a2bus/a2diskiing.cpp index 1846b447a04..72051c191a9 100644 --- a/src/devices/bus/a2bus/a2diskiing.cpp +++ b/src/devices/bus/a2bus/a2diskiing.cpp @@ -23,6 +23,7 @@ DEFINE_DEVICE_TYPE(A2BUS_DISKIING, a2bus_diskiing_device, "a2diskiing", "Apple Disk II NG controller (16-sector)") DEFINE_DEVICE_TYPE(A2BUS_DISKIING13, a2bus_diskiing13_device, "diskii13", "Apple Disk II NG controller (13-sector)") +DEFINE_DEVICE_TYPE(A2BUS_APPLESURANCE, a2bus_applesurance_device, "a2surance", "Applesurance Diagnostic Controller") #define WOZFDC_TAG "wozfdc" #define DISKII_ROM_REGION "diskii_rom" @@ -42,6 +43,11 @@ ROM_START( diskiing13 ) ROM_LOAD( "341-0009.bin", 0x000000, 0x000100, CRC(d34eb2ff) SHA1(afd060e6f35faf3bb0146fa889fc787adf56330a) ) ROM_END +ROM_START( applesurance ) + ROM_REGION(0x1000, DISKII_ROM_REGION, 0) + ROM_LOAD( "applesurance 3.0 - 2732.bin", 0x000000, 0x001000, CRC(64eafec7) SHA1(723dc6cd32de5a0f27af7503764185ac58904c05) ) +ROM_END + FLOPPY_FORMATS_MEMBER( diskiing_device::floppy_formats ) FLOPPY_A216S_FORMAT, FLOPPY_RWTS18_FORMAT, FLOPPY_EDD_FORMAT, FLOPPY_WOZ_FORMAT FLOPPY_FORMATS_END @@ -82,6 +88,11 @@ const tiny_rom_entry *a2bus_diskiing13_device::device_rom_region() const return ROM_NAME( diskiing13 ); } +const tiny_rom_entry *a2bus_applesurance_device::device_rom_region() const +{ + return ROM_NAME( applesurance ); +} + //************************************************************************** // LIVE DEVICE //************************************************************************** @@ -105,6 +116,11 @@ a2bus_diskiing13_device::a2bus_diskiing13_device(const machine_config &mconfig, { } +a2bus_applesurance_device::a2bus_applesurance_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + diskiing_device(mconfig, A2BUS_APPLESURANCE, tag, owner, clock) +{ +} + //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -146,3 +162,13 @@ uint8_t diskiing_device::read_cnxx(uint8_t offset) { return m_rom[offset]; } + +uint8_t a2bus_applesurance_device::read_cnxx(uint8_t offset) +{ + return m_rom[offset+0x800]; +} + +uint8_t a2bus_applesurance_device::read_c800(uint16_t offset) +{ + return m_rom[offset+0x800]; +} diff --git a/src/devices/bus/a2bus/a2diskiing.h b/src/devices/bus/a2bus/a2diskiing.h index c30d49ebf0d..1e6e883258f 100644 --- a/src/devices/bus/a2bus/a2diskiing.h +++ b/src/devices/bus/a2bus/a2diskiing.h @@ -45,9 +45,9 @@ protected: required_device<diskii_fdc_device> m_wozfdc; required_device_array<floppy_connector, 2> m_floppy; -private: const uint8_t *m_rom; +private: DECLARE_FLOPPY_FORMATS( floppy_formats ); }; @@ -70,8 +70,35 @@ private: DECLARE_FLOPPY_FORMATS( floppy_formats ); }; +class a2bus_applesurance_device: public diskiing_device +{ +public: + a2bus_applesurance_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual const tiny_rom_entry *device_rom_region() const override; + + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual uint8_t read_c800(uint16_t offset) override; + + virtual void write_cnxx(uint8_t offset, uint8_t data) override + { + printf("write %x to cn00 + %x\n", data, offset); + } + + virtual void write_c800(uint16_t offset, uint8_t data) override + { + printf("write %x to c800 + %x\n", data, offset); + } + + virtual bool take_c800() override { return true; } + +private: +}; + // device type definition DECLARE_DEVICE_TYPE(A2BUS_DISKIING, a2bus_diskiing_device) DECLARE_DEVICE_TYPE(A2BUS_DISKIING13, a2bus_diskiing13_device) +DECLARE_DEVICE_TYPE(A2BUS_APPLESURANCE, a2bus_applesurance_device) #endif // MAME_BUS_A2BUS_A2DISKIING_H diff --git a/src/mame/drivers/apple2.cpp b/src/mame/drivers/apple2.cpp index 3175fc27ab5..e66981c462e 100644 --- a/src/mame/drivers/apple2.cpp +++ b/src/mame/drivers/apple2.cpp @@ -700,12 +700,19 @@ READ8_MEMBER(apple2_state::c800_r) { if (offset == 0x7ff) { + uint8_t rv = 0xff; + + if ((m_cnxx_slot != -1) && (m_slotdevice[m_cnxx_slot] != nullptr)) + { + rv = m_slotdevice[m_cnxx_slot]->read_c800(offset&0xfff); + } + if (!machine().side_effects_disabled()) { m_cnxx_slot = -1; } - return 0xff; + return rv; } if ((m_cnxx_slot != -1) && (m_slotdevice[m_cnxx_slot] != nullptr)) @@ -718,6 +725,11 @@ READ8_MEMBER(apple2_state::c800_r) WRITE8_MEMBER(apple2_state::c800_w) { + if ((m_cnxx_slot != -1) && (m_slotdevice[m_cnxx_slot] != nullptr)) + { + m_slotdevice[m_cnxx_slot]->write_c800(offset&0xfff, data); + } + if (offset == 0x7ff) { if (!machine().side_effects_disabled()) @@ -727,11 +739,6 @@ WRITE8_MEMBER(apple2_state::c800_w) return; } - - if ((m_cnxx_slot != -1) && (m_slotdevice[m_cnxx_slot] != nullptr)) - { - m_slotdevice[m_cnxx_slot]->write_c800(offset&0xfff, data); - } } READ8_MEMBER(apple2_state::inh_r) @@ -1267,8 +1274,9 @@ static void apple2_cards(device_slot_interface &device) device.option_add("4play", A2BUS_4PLAY); /* 4Play Joystick Card (Rev. B) */ device.option_add("ceyes2", A2BUS_COMPUTEREYES2); /* ComputerEyes/2 Video Digitizer */ device.option_add("twarp", A2BUS_TRANSWARP); /* AE TransWarp accelerator */ + device.option_add("applesurance", A2BUS_APPLESURANCE); /* Applesurance Diagnostic Controller */ // device.option_add("magicmusician", A2BUS_MAGICMUSICIAN); /* Magic Musician Card */ - device.option_add("byte8251", A2BUS_BYTE8251); + device.option_add("byte8251", A2BUS_BYTE8251); /* BYTE Magazine 8251 serial card */ } void apple2_state::apple2_common(machine_config &config) diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp index 151906d2257..013c23a16be 100644 --- a/src/mame/drivers/apple2e.cpp +++ b/src/mame/drivers/apple2e.cpp @@ -2470,10 +2470,16 @@ READ8_MEMBER(apple2e_state::c800_r) { if ((offset == 0x7ff) && !machine().side_effects_disabled()) { + uint8_t rv = 0xff; + + if ((m_cnxx_slot > 0) && (m_slotdevice[m_cnxx_slot] != nullptr)) + { + rv = m_slotdevice[m_cnxx_slot]->read_c800(offset&0xfff); + } m_cnxx_slot = CNXX_UNCLAIMED; m_intc8rom = false; update_slotrom_banks(); - return 0xff; + return rv; } if ((m_cnxx_slot > 0) && (m_slotdevice[m_cnxx_slot] != nullptr)) @@ -2526,6 +2532,11 @@ WRITE8_MEMBER(apple2e_state::c800_w) return; } + if ((m_cnxx_slot > 0) && (m_slotdevice[m_cnxx_slot] != nullptr)) + { + m_slotdevice[m_cnxx_slot]->write_c800(offset&0xfff, data); + } + if (offset == 0x7ff) { if (!machine().side_effects_disabled()) @@ -2534,13 +2545,6 @@ WRITE8_MEMBER(apple2e_state::c800_w) m_intc8rom = false; update_slotrom_banks(); } - - return; - } - - if ((m_cnxx_slot > 0) && (m_slotdevice[m_cnxx_slot] != nullptr)) - { - m_slotdevice[m_cnxx_slot]->write_c800(offset&0xfff, data); } } @@ -4209,7 +4213,8 @@ static void apple2_cards(device_slot_interface &device) device.option_add("vulcan", A2BUS_VULCANIIE); /* Applied Engineering Vulcan IDE drive */ device.option_add("4play", A2BUS_4PLAY); /* 4Play Joystick Card (Rev. B) */ device.option_add("ceyes2", A2BUS_COMPUTEREYES2); /* ComputerEyes/2 Video Digitizer */ - device.option_add("byte8251", A2BUS_BYTE8251); + device.option_add("applesurance", A2BUS_APPLESURANCE); /* Applesurance Diagnostic Controller */ + device.option_add("byte8251", A2BUS_BYTE8251); /* BYTE Magazine 8251 serial card */ } static void apple2eaux_cards(device_slot_interface &device) diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp index b537189edff..f3fb41a48a0 100644 --- a/src/mame/drivers/apple2gs.cpp +++ b/src/mame/drivers/apple2gs.cpp @@ -1295,6 +1295,8 @@ void apple2gs_state::machine_start() save_item(NAME(m_intflag)); save_item(NAME(m_vgcint)); save_item(NAME(m_inten)); + save_item(NAME(m_slot_irq)); + save_item(NAME(m_slow_counter)); save_item(m_clkdata, "CLKDATA"); save_item(m_clock_control, "CLKCTRL"); save_item(m_clock_read, "CLKRD"); @@ -1322,6 +1324,8 @@ void apple2gs_state::machine_start() save_item(NAME(m_lastchar)); save_item(NAME(m_strobe)); save_item(NAME(m_transchar)); + save_item(NAME(m_anykeydown)); + save_item(NAME(m_repeatdelay)); #endif save_item(m_mouse_x, "MX"); save_item(m_mouse_y, "MY"); @@ -2920,9 +2924,15 @@ READ8_MEMBER(apple2gs_state::c800_r) if ((offset == 0x7ff) && !machine().side_effects_disabled()) { + uint8_t rv = 0xff; + if ((m_cnxx_slot > 0) && (m_slotdevice[m_cnxx_slot] != nullptr)) + { + rv = m_slotdevice[m_cnxx_slot]->read_c800(offset&0xfff); + } + m_cnxx_slot = CNXX_UNCLAIMED; update_slotrom_banks(); - return 0xff; + return rv; } if ((m_cnxx_slot > 0) && (m_slotdevice[m_cnxx_slot] != nullptr)) @@ -2956,17 +2966,17 @@ WRITE8_MEMBER(apple2gs_state::c800_w) { slow_cycle(); + if ((m_cnxx_slot > 0) && (m_slotdevice[m_cnxx_slot] != nullptr)) + { + m_slotdevice[m_cnxx_slot]->write_c800(offset&0xfff, data); + } + if (offset == 0x7ff) { m_cnxx_slot = CNXX_UNCLAIMED; update_slotrom_banks(); return; } - - if ((m_cnxx_slot > 0) && (m_slotdevice[m_cnxx_slot] != nullptr)) - { - m_slotdevice[m_cnxx_slot]->write_c800(offset&0xfff, data); - } } READ8_MEMBER(apple2gs_state::inh_r) @@ -4543,7 +4553,7 @@ static void apple2_cards(device_slot_interface &device) device.option_add("4play", A2BUS_4PLAY); /* 4Play Joystick Card (Rev. B) */ // device.option_add("magicmusician", A2BUS_MAGICMUSICIAN); /* Magic Musician Card */ // device.option_add("pcxport", A2BUS_PCXPORTER); /* Applied Engineering PC Transporter */ - device.option_add("byte8251", A2BUS_BYTE8251); + device.option_add("byte8251", A2BUS_BYTE8251); /* BYTE Magazine 8251 serial card */ } void apple2gs_state::apple2gs(machine_config &config) |