summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2020-02-14 22:39:57 -0500
committer arbee <rb6502@users.noreply.github.com>2020-02-14 22:39:57 -0500
commit6c6267ca58e45be668557cd23473ffaacf06eb7f (patch)
treec03dca70a53f14e16c92b09e904845613fbbcabd
parent93a9015f7f807ba837e2741e68791ebcf59639c2 (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.cpp26
-rw-r--r--src/devices/bus/a2bus/a2diskiing.h29
-rw-r--r--src/mame/drivers/apple2.cpp22
-rw-r--r--src/mame/drivers/apple2e.cpp23
-rw-r--r--src/mame/drivers/apple2gs.cpp24
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)