diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 6c923a105f8..5105740b63b 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -62,13 +62,13 @@ if (BUSES["ABCBUS"]~=null) then files { MAME_DIR .. "src/emu/bus/abcbus/abcbus.c", MAME_DIR .. "src/emu/bus/abcbus/abc890.c", - MAME_DIR .. "src/emu/bus/abcbus/dos.c", MAME_DIR .. "src/emu/bus/abcbus/fd2.c", MAME_DIR .. "src/emu/bus/abcbus/hdc.c", MAME_DIR .. "src/emu/bus/abcbus/lux10828.c", MAME_DIR .. "src/emu/bus/abcbus/lux21046.c", MAME_DIR .. "src/emu/bus/abcbus/lux21056.c", MAME_DIR .. "src/emu/bus/abcbus/lux4105.c", + MAME_DIR .. "src/emu/bus/abcbus/memcard.c", MAME_DIR .. "src/emu/bus/abcbus/uni800.c", MAME_DIR .. "src/emu/bus/abcbus/sio.c", MAME_DIR .. "src/emu/bus/abcbus/slutprov.c", diff --git a/src/emu/bus/abcbus/abc890.c b/src/emu/bus/abcbus/abc890.c index 03ea5e9586a..6fa1171b894 100644 --- a/src/emu/bus/abcbus/abc890.c +++ b/src/emu/bus/abcbus/abc890.c @@ -17,11 +17,12 @@ // DEVICE DEFINITIONS //************************************************************************** -const device_type ABC890 = &device_creator; -const device_type ABC894 = &device_creator; -const device_type ABC850 = &device_creator; -const device_type ABC852 = &device_creator; -const device_type ABC856 = &device_creator; +const device_type ABC890 = &device_creator; +const device_type ABC_EXPANSION_UNIT = &device_creator; +const device_type ABC894 = &device_creator; +const device_type ABC850 = &device_creator; +const device_type ABC852 = &device_creator; +const device_type ABC856 = &device_creator; //------------------------------------------------- @@ -44,12 +45,38 @@ MACHINE_CONFIG_END // machine configurations //------------------------------------------------- -machine_config_constructor abc890_device::device_mconfig_additions() const +machine_config_constructor abc890_t::device_mconfig_additions() const { return MACHINE_CONFIG_NAME( abc890 ); } +//------------------------------------------------- +// MACHINE_DRIVER( abc_expansion_unit ) +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( abc_expansion_unit ) + MCFG_ABCBUS_SLOT_ADD("io1", abc80_cards, "slow") + MCFG_ABCBUS_SLOT_ADD("io2", abc80_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io3", abc80_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io4", abc80_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("mem1", abc80_cards, "memcard") + MCFG_ABCBUS_SLOT_ADD("mem2", abc80_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("mem3", abc80_cards, NULL) +MACHINE_CONFIG_END + + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +machine_config_constructor abc_expansion_unit_t::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( abc_expansion_unit ); +} + + //------------------------------------------------- // MACHINE_DRIVER( abc894 ) //------------------------------------------------- @@ -66,7 +93,7 @@ MACHINE_CONFIG_END // machine configurations //------------------------------------------------- -machine_config_constructor abc894_device::device_mconfig_additions() const +machine_config_constructor abc894_t::device_mconfig_additions() const { return MACHINE_CONFIG_NAME( abc894 ); } @@ -93,7 +120,7 @@ MACHINE_CONFIG_END // machine configurations //------------------------------------------------- -machine_config_constructor abc850_device::device_mconfig_additions() const +machine_config_constructor abc850_t::device_mconfig_additions() const { return MACHINE_CONFIG_NAME( abc850 ); } @@ -120,7 +147,7 @@ MACHINE_CONFIG_END // machine configurations //------------------------------------------------- -machine_config_constructor abc852_device::device_mconfig_additions() const +machine_config_constructor abc852_t::device_mconfig_additions() const { return MACHINE_CONFIG_NAME( abc852 ); } @@ -147,7 +174,7 @@ MACHINE_CONFIG_END // machine configurations //------------------------------------------------- -machine_config_constructor abc856_device::device_mconfig_additions() const +machine_config_constructor abc856_t::device_mconfig_additions() const { return MACHINE_CONFIG_NAME( abc856 ); } @@ -159,38 +186,43 @@ machine_config_constructor abc856_device::device_mconfig_additions() const //************************************************************************** //------------------------------------------------- -// abc890_device - constructor +// abc890_t - constructor //------------------------------------------------- -abc890_device::abc890_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) - : device_t(mconfig, type, name, tag, owner, clock, shortname, source), - device_abcbus_card_interface(mconfig, *this) +abc890_t::abc890_t(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : + device_t(mconfig, type, name, tag, owner, clock, shortname, source), + device_abcbus_card_interface(mconfig, *this) { } -abc890_device::abc890_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, ABC890, "ABC 890", tag, owner, clock, "abc890", __FILE__), - device_abcbus_card_interface(mconfig, *this) +abc890_t::abc890_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, ABC890, "ABC 890", tag, owner, clock, "abc890", __FILE__), + device_abcbus_card_interface(mconfig, *this) { } -abc894_device::abc894_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : abc890_device(mconfig, ABC894, "ABC 894", tag, owner, clock, "abc894", __FILE__) +abc_expansion_unit_t::abc_expansion_unit_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + abc890_t(mconfig, ABC_EXPANSION_UNIT, "ABC Expansion Unit", tag, owner, clock, "abcexp", __FILE__) { } -abc850_device::abc850_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : abc890_device(mconfig, ABC850, "ABC 850", tag, owner, clock, "abc850", __FILE__) +abc894_t::abc894_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + abc890_t(mconfig, ABC894, "ABC 894", tag, owner, clock, "abc894", __FILE__) { } -abc852_device::abc852_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : abc890_device(mconfig, ABC852, "ABC 852", tag, owner, clock, "abc852", __FILE__) +abc850_t::abc850_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + abc890_t(mconfig, ABC850, "ABC 850", tag, owner, clock, "abc850", __FILE__) { } -abc856_device::abc856_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : abc890_device(mconfig, ABC856, "ABC 856", tag, owner, clock, "abc856", __FILE__) +abc852_t::abc852_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + abc890_t(mconfig, ABC852, "ABC 852", tag, owner, clock, "abc852", __FILE__) +{ +} + +abc856_t::abc856_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + abc890_t(mconfig, ABC856, "ABC 856", tag, owner, clock, "abc856", __FILE__) { } @@ -199,7 +231,7 @@ abc856_device::abc856_device(const machine_config &mconfig, const char *tag, dev // device_start - device-specific startup //------------------------------------------------- -void abc890_device::device_start() +void abc890_t::device_start() { } @@ -208,7 +240,7 @@ void abc890_device::device_start() // device_reset - device-specific reset //------------------------------------------------- -void abc890_device::device_reset() +void abc890_t::device_reset() { for (device_t *device = first_subdevice(); device != NULL; device = device->next()) { @@ -221,11 +253,11 @@ void abc890_device::device_reset() // abcbus_cs - card select //------------------------------------------------- -void abc890_device::abcbus_cs(UINT8 data) +void abc890_t::abcbus_cs(UINT8 data) { abcbus_slot_device_iterator iter(*this); - for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next()) + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) { slot->cs_w(data); } @@ -236,13 +268,13 @@ void abc890_device::abcbus_cs(UINT8 data) // abcbus_inp - input //------------------------------------------------- -UINT8 abc890_device::abcbus_inp() +UINT8 abc890_t::abcbus_inp() { UINT8 data = 0xff; abcbus_slot_device_iterator iter(*this); - for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next()) + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) { data &= slot->inp_r(); } @@ -255,11 +287,11 @@ UINT8 abc890_device::abcbus_inp() // abcbus_out - output //------------------------------------------------- -void abc890_device::abcbus_out(UINT8 data) +void abc890_t::abcbus_out(UINT8 data) { abcbus_slot_device_iterator iter(*this); - for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next()) + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) { slot->out_w(data); } @@ -270,13 +302,13 @@ void abc890_device::abcbus_out(UINT8 data) // abcbus_stat - status //------------------------------------------------- -UINT8 abc890_device::abcbus_stat() +UINT8 abc890_t::abcbus_stat() { UINT8 data = 0xff; abcbus_slot_device_iterator iter(*this); - for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next()) + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) { data &= slot->stat_r(); } @@ -289,11 +321,11 @@ UINT8 abc890_device::abcbus_stat() // abcbus_c1 - command 1 //------------------------------------------------- -void abc890_device::abcbus_c1(UINT8 data) +void abc890_t::abcbus_c1(UINT8 data) { abcbus_slot_device_iterator iter(*this); - for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next()) + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) { slot->c1_w(data); } @@ -304,11 +336,11 @@ void abc890_device::abcbus_c1(UINT8 data) // abcbus_c2 - command 2 //------------------------------------------------- -void abc890_device::abcbus_c2(UINT8 data) +void abc890_t::abcbus_c2(UINT8 data) { abcbus_slot_device_iterator iter(*this); - for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next()) + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) { slot->c2_w(data); } @@ -319,11 +351,11 @@ void abc890_device::abcbus_c2(UINT8 data) // abcbus_c3 - command 3 //------------------------------------------------- -void abc890_device::abcbus_c3(UINT8 data) +void abc890_t::abcbus_c3(UINT8 data) { abcbus_slot_device_iterator iter(*this); - for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next()) + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) { slot->c3_w(data); } @@ -334,11 +366,11 @@ void abc890_device::abcbus_c3(UINT8 data) // abcbus_c4 - command 4 //------------------------------------------------- -void abc890_device::abcbus_c4(UINT8 data) +void abc890_t::abcbus_c4(UINT8 data) { abcbus_slot_device_iterator iter(*this); - for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next()) + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) { slot->c4_w(data); } @@ -349,13 +381,13 @@ void abc890_device::abcbus_c4(UINT8 data) // abcbus_xmemfl - extended memory read //------------------------------------------------- -UINT8 abc890_device::abcbus_xmemfl(offs_t offset) +UINT8 abc890_t::abcbus_xmemfl(offs_t offset) { UINT8 data = 0xff; abcbus_slot_device_iterator iter(*this); - for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next()) + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) { data &= slot->xmemfl_r(offset); } @@ -368,11 +400,11 @@ UINT8 abc890_device::abcbus_xmemfl(offs_t offset) // abcbus_xmemw - extended memory write //------------------------------------------------- -void abc890_device::abcbus_xmemw(offs_t offset, UINT8 data) +void abc890_t::abcbus_xmemw(offs_t offset, UINT8 data) { abcbus_slot_device_iterator iter(*this); - for (abcbus_slot_device *slot = iter.first(); slot != NULL; slot = iter.next()) + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) { slot->xmemw_w(offset, data); } diff --git a/src/emu/bus/abcbus/abc890.h b/src/emu/bus/abcbus/abc890.h index 5876e63d44b..0bc29b02ad7 100644 --- a/src/emu/bus/abcbus/abc890.h +++ b/src/emu/bus/abcbus/abc890.h @@ -19,27 +19,19 @@ -//************************************************************************** -// MACROS/CONSTANTS -//************************************************************************** - -#define MAX_SLOTS 8 - - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** -// ======================> abc890_device +// ======================> abc890_t -class abc890_device : public device_t, - public device_abcbus_card_interface +class abc890_t : public device_t, + public device_abcbus_card_interface { public: // construction/destruction - abc890_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); - abc890_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + abc890_t(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + abc890_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); // optional information overrides virtual machine_config_constructor device_mconfig_additions() const; @@ -63,52 +55,65 @@ protected: }; -// ======================> abc894_device +// ======================> abc_expansion_unit_t -class abc894_device : public abc890_device +class abc_expansion_unit_t : public abc890_t { public: // construction/destruction - abc894_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + abc_expansion_unit_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); // optional information overrides virtual machine_config_constructor device_mconfig_additions() const; }; -// ======================> abc850_device +// ======================> abc894_t -class abc850_device : public abc890_device +class abc894_t : public abc890_t { public: // construction/destruction - abc850_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + abc894_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); // optional information overrides virtual machine_config_constructor device_mconfig_additions() const; }; -// ======================> abc852_device +// ======================> abc850_t -class abc852_device : public abc890_device +class abc850_t : public abc890_t { public: // construction/destruction - abc852_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + abc850_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); // optional information overrides virtual machine_config_constructor device_mconfig_additions() const; }; -// ======================> abc856_device +// ======================> abc852_t -class abc856_device : public abc890_device +class abc852_t : public abc890_t { public: // construction/destruction - abc856_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + abc852_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // optional information overrides + virtual machine_config_constructor device_mconfig_additions() const; +}; + + +// ======================> abc856_t + +class abc856_t : public abc890_t +{ +public: + // construction/destruction + abc856_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); // optional information overrides virtual machine_config_constructor device_mconfig_additions() const; @@ -116,6 +121,7 @@ public: // device type definition +extern const device_type ABC_EXPANSION_UNIT; extern const device_type ABC890; extern const device_type ABC894; extern const device_type ABC850; diff --git a/src/emu/bus/abcbus/abcbus.c b/src/emu/bus/abcbus/abcbus.c index a115b56c77a..20afdc386e9 100644 --- a/src/emu/bus/abcbus/abcbus.c +++ b/src/emu/bus/abcbus/abcbus.c @@ -17,7 +17,7 @@ // GLOBAL VARIABLES //************************************************************************** -const device_type ABCBUS_SLOT = &device_creator; +const device_type ABCBUS_SLOT = &device_creator; @@ -32,15 +32,15 @@ const device_type ABCBUS_SLOT = &device_creator; device_abcbus_card_interface::device_abcbus_card_interface(const machine_config &mconfig, device_t &device) : device_slot_card_interface(mconfig, device) { - m_slot = dynamic_cast(device.owner()); + m_slot = dynamic_cast(device.owner()); } //------------------------------------------------- -// abcbus_slot_device - constructor +// abcbus_slot_t - constructor //------------------------------------------------- -abcbus_slot_device::abcbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : +abcbus_slot_t::abcbus_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, ABCBUS_SLOT, "ABCBUS slot", tag, owner, clock, "abcbus_slot", __FILE__), device_slot_interface(mconfig, *this), m_write_irq(*this), @@ -62,7 +62,7 @@ abcbus_slot_device::abcbus_slot_device(const machine_config &mconfig, const char // device_start - device-specific startup //------------------------------------------------- -void abcbus_slot_device::device_start() +void abcbus_slot_t::device_start() { m_card = dynamic_cast(get_card_device()); @@ -80,25 +80,38 @@ void abcbus_slot_device::device_start() } -//------------------------------------------------- -// SLOT_INTERFACE( abcbus_cards ) -//------------------------------------------------- - // slot devices #include "abc890.h" -#include "dos.h" #include "fd2.h" #include "hdc.h" #include "lux10828.h" #include "lux21046.h" #include "lux21056.h" #include "lux4105.h" +#include "memcard.h" #include "uni800.h" #include "sio.h" #include "slutprov.h" #include "turbo.h" + +//------------------------------------------------- +// SLOT_INTERFACE( abc80_cards ) +//------------------------------------------------- + +SLOT_INTERFACE_START( abc80_cards ) + SLOT_INTERFACE("fd2", ABC_FD2) + SLOT_INTERFACE("memcard", ABC_MEMORY_CARD) + SLOT_INTERFACE("abcexp", ABC_EXPANSION_UNIT) + SLOT_INTERFACE("slow", LUXOR_55_10828) +SLOT_INTERFACE_END + + +//------------------------------------------------- +// SLOT_INTERFACE( abcbus_cards ) +//------------------------------------------------- + SLOT_INTERFACE_START( abcbus_cards ) SLOT_INTERFACE("abc830", ABC830) SLOT_INTERFACE("abc832", ABC832) @@ -111,8 +124,6 @@ SLOT_INTERFACE_START( abcbus_cards ) SLOT_INTERFACE("abc890", ABC890) SLOT_INTERFACE("abc894", ABC894) SLOT_INTERFACE("hdc", ABC_HDC) - SLOT_INTERFACE("dos", ABC_DOS) - SLOT_INTERFACE("fd2", ABC_FD2) SLOT_INTERFACE("sio", ABC_SIO) SLOT_INTERFACE("slow", LUXOR_55_10828) SLOT_INTERFACE("uni800", ABC_UNI800) diff --git a/src/emu/bus/abcbus/abcbus.h b/src/emu/bus/abcbus/abcbus.h index 994b3a80bec..a009bd17b81 100644 --- a/src/emu/bus/abcbus/abcbus.h +++ b/src/emu/bus/abcbus/abcbus.h @@ -124,34 +124,34 @@ #define MCFG_ABCBUS_SLOT_IRQ_CALLBACK(_irq) \ - downcast(device)->set_irq_callback(DEVCB_##_irq); + downcast(device)->set_irq_callback(DEVCB_##_irq); #define MCFG_ABCBUS_SLOT_NMI_CALLBACK(_nmi) \ - downcast(device)->set_nmi_callback(DEVCB_##_nmi); + downcast(device)->set_nmi_callback(DEVCB_##_nmi); #define MCFG_ABCBUS_SLOT_RDY_CALLBACK(_rdy) \ - downcast(device)->set_rdy_callback(DEVCB_##_rdy); + downcast(device)->set_rdy_callback(DEVCB_##_rdy); #define MCFG_ABCBUS_SLOT_RESIN_CALLBACK(_resin) \ - downcast(device)->set_resin_callback(DEVCB_##_resin); + downcast(device)->set_resin_callback(DEVCB_##_resin); #define MCFG_ABCBUS_SLOT_PREN_CALLBACK(_pren) \ - downcast(device)->set_pren_callback(DEVCB_##_pren); + downcast(device)->set_pren_callback(DEVCB_##_pren); #define MCFG_ABCBUS_SLOT_TRRQ_CALLBACK(_trrq) \ - downcast(device)->set_trrq_callback(DEVCB_##_trrq); + downcast(device)->set_trrq_callback(DEVCB_##_trrq); #define MCFG_ABCBUS_SLOT_XINT2_CALLBACK(_xint2) \ - downcast(device)->set_xint2_callback(DEVCB_##_xint2); + downcast(device)->set_xint2_callback(DEVCB_##_xint2); #define MCFG_ABCBUS_SLOT_XINT3_CALLBACK(_xint3) \ - downcast(device)->set_xint3_callback(DEVCB_##_xint3); + downcast(device)->set_xint3_callback(DEVCB_##_xint3); #define MCFG_ABCBUS_SLOT_XINT4_CALLBACK(_xint4) \ - downcast(device)->set_xint4_callback(DEVCB_##_xint4); + downcast(device)->set_xint4_callback(DEVCB_##_xint4); #define MCFG_ABCBUS_SLOT_XINT5_CALLBACK(_xint5) \ - downcast(device)->set_xint5_callback(DEVCB_##_xint5); + downcast(device)->set_xint5_callback(DEVCB_##_xint5); @@ -161,7 +161,7 @@ // ======================> device_abcbus_card_interface -class abcbus_slot_device; +class abcbus_slot_t; class device_abcbus_card_interface : public device_slot_card_interface { @@ -197,18 +197,18 @@ public: virtual int abcbus_xcsb5() { return 1; }; public: - abcbus_slot_device *m_slot; + abcbus_slot_t *m_slot; }; -// ======================> abcbus_slot_device +// ======================> abcbus_slot_t -class abcbus_slot_device : public device_t, +class abcbus_slot_t : public device_t, public device_slot_interface { public: // construction/destruction - abcbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + abcbus_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); template void set_irq_callback(_irq irq) { m_write_irq.set_callback(irq); } template void set_nmi_callback(_nmi nmi) { m_write_nmi.set_callback(nmi); } @@ -309,11 +309,12 @@ protected: extern const device_type ABCBUS_SLOT; +SLOT_INTERFACE_EXTERN( abc80_cards ); SLOT_INTERFACE_EXTERN( abcbus_cards ); SLOT_INTERFACE_EXTERN( abc1600bus_cards ); -typedef device_type_iterator<&device_creator, abcbus_slot_device> abcbus_slot_device_iterator; +typedef device_type_iterator<&device_creator, abcbus_slot_t> abcbus_slot_device_iterator; diff --git a/src/emu/bus/abcbus/lux10828.c b/src/emu/bus/abcbus/lux10828.c index aa9a9033fb8..2616f3aaea8 100644 --- a/src/emu/bus/abcbus/lux10828.c +++ b/src/emu/bus/abcbus/lux10828.c @@ -651,7 +651,7 @@ READ8_MEMBER( luxor_55_10828_device::fdc_r ) { if (!m_wait_enable && !m_fdc_irq && !m_fdc_drq) { - fatalerror("Z80 WAIT not supported by MAME core\n"); + logerror("Z80 WAIT not supported by MAME core\n"); m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, ASSERT_LINE); } @@ -668,7 +668,7 @@ WRITE8_MEMBER( luxor_55_10828_device::fdc_w ) { if (!m_wait_enable && !m_fdc_irq && !m_fdc_drq) { - fatalerror("Z80 WAIT not supported by MAME core\n"); + logerror("Z80 WAIT not supported by MAME core\n"); m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, ASSERT_LINE); } diff --git a/src/emu/bus/abcbus/dos.c b/src/emu/bus/abcbus/memcard.c similarity index 72% rename from src/emu/bus/abcbus/dos.c rename to src/emu/bus/abcbus/memcard.c index d35f588358b..cec6a7f93c4 100644 --- a/src/emu/bus/abcbus/dos.c +++ b/src/emu/bus/abcbus/memcard.c @@ -2,7 +2,7 @@ // copyright-holders:Curt Coder /********************************************************************** - Luxor ABC DOS card emulation + Luxor ABC Memory Card 55 10762-01 emulation Copyright MESS Team. Visit http://mamedev.org for licensing and usage restrictions. @@ -57,7 +57,7 @@ Notes: */ -#include "dos.h" +#include "memcard.h" @@ -65,7 +65,7 @@ Notes: // DEVICE DEFINITIONS //************************************************************************** -const device_type ABC_DOS = &device_creator; +const device_type ABC_MEMORY_CARD = &device_creator; //------------------------------------------------- @@ -73,7 +73,7 @@ const device_type ABC_DOS = &device_creator; //------------------------------------------------- ROM_START( abc_dos ) - ROM_REGION( 0x2000, "dos", ROMREGION_ERASEFF ) + ROM_REGION( 0x1000, "dos", 0 ) ROM_DEFAULT_BIOS("ufd20") ROM_SYSTEM_BIOS( 0, "abcdos", "ABC-DOS" ) // Scandia Metric FD2 ROMX_LOAD( "abcdos.3d", 0x0000, 0x1000, CRC(2cb2192f) SHA1(a6b3a9587714f8db807c05bee6c71c0684363744), ROM_BIOS(1) ) @@ -81,10 +81,15 @@ ROM_START( abc_dos ) ROMX_LOAD( "dosdd80.3d", 0x0000, 0x1000, CRC(36db4c15) SHA1(ae462633f3a9c142bb029beb14749a84681377fa), ROM_BIOS(2) ) ROM_SYSTEM_BIOS( 2, "ufd20", "UFD-DOS v.20" ) // ABC 830 ROMX_LOAD( "ufddos20.3d", 0x0000, 0x1000, CRC(69b09c0b) SHA1(403997a06cf6495b8fa13dc74eff6a64ef7aa53e), ROM_BIOS(3) ) - ROM_LOAD( "printer.4c", 0x1000, 0x400, NO_DUMP ) - //ROM_LOAD( "spare.4a", 0x1400, 0x400, NO_DUMP ) - ROM_LOAD( "9704.3c", 0x1800, 0x400, NO_DUMP ) - //ROM_LOAD( "spare.3a", 0x1c00, 0x400, NO_DUMP ) + + ROM_REGION( 0x400, "iec", 0 ) + ROM_LOAD( "iec.4b", 0x000, 0x400, NO_DUMP ) + + ROM_REGION( 0x400, "opt", 0 ) + ROM_LOAD( "spare.4a", 0x000, 0x400, NO_DUMP ) + + ROM_REGION( 0x400, "prn", 0 ) + ROM_LOAD( "printer.3b", 0x000, 0x400, NO_DUMP ) ROM_END @@ -92,7 +97,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const rom_entry *abc_dos_device::device_rom_region() const +const rom_entry *abc_memory_card_t::device_rom_region() const { return ROM_NAME( abc_dos ); } @@ -104,13 +109,16 @@ const rom_entry *abc_dos_device::device_rom_region() const //************************************************************************** //------------------------------------------------- -// abc_dos_device - constructor +// abc_memory_card_t - constructor //------------------------------------------------- -abc_dos_device::abc_dos_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, ABC_DOS, "ABC DOS", tag, owner, clock, "abc_dos", __FILE__), - device_abcbus_card_interface(mconfig, *this), - m_rom(*this, "dos") +abc_memory_card_t::abc_memory_card_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, ABC_MEMORY_CARD, "ABC Memory Card", tag, owner, clock, "abc_mem", __FILE__), + device_abcbus_card_interface(mconfig, *this), + m_dos_rom(*this, "dos"), + m_iec_rom(*this, "iec"), + m_opt_rom(*this, "opt"), + m_prn_rom(*this, "prn") { } @@ -119,7 +127,7 @@ abc_dos_device::abc_dos_device(const machine_config &mconfig, const char *tag, d // device_start - device-specific startup //------------------------------------------------- -void abc_dos_device::device_start() +void abc_memory_card_t::device_start() { } @@ -133,13 +141,25 @@ void abc_dos_device::device_start() // abcbus_xmemfl - //------------------------------------------------- -UINT8 abc_dos_device::abcbus_xmemfl(offs_t offset) +UINT8 abc_memory_card_t::abcbus_xmemfl(offs_t offset) { UINT8 data = 0xff; - if (offset >= 0x6000 && offset < 0x8000) + if (offset >= 0x6000 && offset < 0x7000) { - data = m_rom->base()[offset & 0x1fff]; + data = m_dos_rom->base()[offset & 0xfff]; + } + if (offset >= 0x7000 && offset < 0x7400) + { + data = m_iec_rom->base()[offset & 0x3ff]; + } + if (offset >= 0x7400 && offset < 0x7800) + { + data = m_opt_rom->base()[offset & 0x3ff]; + } + if (offset >= 0x7800 && offset < 0x7c00) + { + data = m_prn_rom->base()[offset & 0x3ff]; } return data; diff --git a/src/emu/bus/abcbus/dos.h b/src/emu/bus/abcbus/memcard.h similarity index 63% rename from src/emu/bus/abcbus/dos.h rename to src/emu/bus/abcbus/memcard.h index 56d78622ad4..d7b9aac41b4 100644 --- a/src/emu/bus/abcbus/dos.h +++ b/src/emu/bus/abcbus/memcard.h @@ -2,7 +2,7 @@ // copyright-holders:Curt Coder /********************************************************************** - Scandia Metric DOS floppy controller emulation + Luxor ABC Memory Card 55 10762-01 emulation Copyright MESS Team. Visit http://mamedev.org for licensing and usage restrictions. @@ -11,8 +11,8 @@ #pragma once -#ifndef __ABC_DOS__ -#define __ABC_DOS__ +#ifndef __ABC_MEMORY_CARD__ +#define __ABC_MEMORY_CARD__ #include "emu.h" #include "abcbus.h" @@ -23,14 +23,14 @@ // TYPE DEFINITIONS //************************************************************************** -// ======================> abc_dos_device +// ======================> abc_memory_card_t -class abc_dos_device : public device_t, - public device_abcbus_card_interface +class abc_memory_card_t : public device_t, + public device_abcbus_card_interface { public: // construction/destruction - abc_dos_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + abc_memory_card_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); // optional information overrides virtual const rom_entry *device_rom_region() const; @@ -44,12 +44,15 @@ protected: virtual UINT8 abcbus_xmemfl(offs_t offset); private: - required_memory_region m_rom; + required_memory_region m_dos_rom; + required_memory_region m_iec_rom; + required_memory_region m_opt_rom; + required_memory_region m_prn_rom; }; // device type definition -extern const device_type ABC_DOS; +extern const device_type ABC_MEMORY_CARD; diff --git a/src/mess/drivers/abc80.c b/src/mess/drivers/abc80.c index fd20868e73e..b45415ff151 100644 --- a/src/mess/drivers/abc80.c +++ b/src/mess/drivers/abc80.c @@ -65,14 +65,12 @@ Notes: TODO: - - cassette interrupt routine samples the latch too soon + - 8KB RAM card - proper keyboard controller emulation - - MyAB 80-column card + - MyAB TKN80 80-column card - GeJo 80-column card - Mikrodatorn 64K expansion - floppy - - printer - - IEC - Metric ABC CAD 1000 */ @@ -81,6 +79,14 @@ Notes: +//************************************************************************** +// CONSTANTS +//************************************************************************** + +#define LOG 0 + + + //************************************************************************** // MEMORY MANAGEMENT //************************************************************************** @@ -175,14 +181,14 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( abc80_io, AS_IO, 8, abc80_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0x17) - AM_RANGE(0x00, 0x00) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_device, inp_r, out_w) - AM_RANGE(0x01, 0x01) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_device, stat_r, cs_w) - AM_RANGE(0x02, 0x02) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c1_w) - AM_RANGE(0x03, 0x03) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c2_w) - AM_RANGE(0x04, 0x04) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c3_w) - AM_RANGE(0x05, 0x05) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c4_w) + AM_RANGE(0x00, 0x00) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_t, inp_r, out_w) + AM_RANGE(0x01, 0x01) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_t, stat_r, cs_w) + AM_RANGE(0x02, 0x02) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c1_w) + AM_RANGE(0x03, 0x03) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c2_w) + AM_RANGE(0x04, 0x04) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c3_w) + AM_RANGE(0x05, 0x05) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c4_w) AM_RANGE(0x06, 0x06) AM_WRITE_PORT("SN76477") - AM_RANGE(0x07, 0x07) AM_DEVREAD(ABCBUS_TAG, abcbus_slot_device, rst_r) + AM_RANGE(0x07, 0x07) AM_DEVREAD(ABCBUS_TAG, abcbus_slot_t, rst_r) AM_RANGE(0x10, 0x13) AM_MIRROR(0x04) AM_DEVREADWRITE(Z80PIO_TAG, z80pio_device, read_alt, write_alt) ADDRESS_MAP_END @@ -297,7 +303,7 @@ READ8_MEMBER( abc80_state::pio_pb_r ) // cassette data data |= m_tape_in_latch << 7; - //logerror("read tape latch %u\n", m_tape_in_latch); + if (LOG) logerror("%s %s read tape latch %u\n", machine().time().as_string(), machine().describe_context(), m_tape_in_latch); return data; }; @@ -328,11 +334,13 @@ WRITE8_MEMBER( abc80_state::pio_pb_w ) // cassette motor if (BIT(data, 5)) { + if (!m_cassette_timer->enabled()) if (LOG) logerror("%s %s started cassette motor\n", machine().time().as_string(), machine().describe_context()); m_cassette->change_state(CASSETTE_MOTOR_ENABLED, CASSETTE_MASK_MOTOR); m_cassette_timer->enable(true); } else { + if (m_cassette_timer->enabled()) if (LOG) logerror("%s %s stopped cassette motor\n", machine().time().as_string(), machine().describe_context()); m_cassette->change_state(CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR); m_cassette_timer->enable(false); } @@ -343,7 +351,7 @@ WRITE8_MEMBER( abc80_state::pio_pb_w ) // cassette input latch if (BIT(data, 6)) { - //logerror("clear tape in latch\n"); + if (LOG) logerror("%s %s clear tape in latch\n", machine().time().as_string(), machine().describe_context()); m_tape_in_latch = 1; @@ -384,12 +392,12 @@ WRITE8_MEMBER( abc80_state::kbd_w ) timer_set(attotime::from_msec(50), TIMER_ID_FAKE_KEYBOARD_CLEAR); } - +/* DEVICE_INPUT_DEFAULTS_START( abc830_slow ) DEVICE_INPUT_DEFAULTS("SW1", 0x0f, 0x03) DEVICE_INPUT_DEFAULTS("S1", 0x01, 0x01) DEVICE_INPUT_DEFAULTS_END - +*/ //************************************************************************** @@ -413,11 +421,13 @@ void abc80_state::device_timer(emu_timer &timer, device_timer_id id, int param, case TIMER_ID_CASSETTE: { int tape_in = m_cassette->input() > 0; - //logerror("tape bit %u\n", tape_in); - if (m_tape_in_latch && !m_tape_in && tape_in) + if (m_tape_in != tape_in) + if (LOG) logerror("%s tape flank %u\n", machine().time().as_string(), tape_in); + + if (m_tape_in_latch && (m_tape_in != tape_in)) { - //logerror("-------- set tape in latch\n"); + if (LOG) logerror("%s set tape in latch\n", machine().time().as_string()); m_tape_in_latch = 0; m_pio->port_b_write(m_tape_in_latch << 7); @@ -467,6 +477,29 @@ void abc80_state::machine_start() save_item(NAME(m_tape_in_latch)); } +QUICKLOAD_LOAD_MEMBER( abc80_state, bac ) +{ + address_space &space = m_maincpu->space(AS_PROGRAM); + + offs_t address = 0xc000; + + dynamic_buffer data; + data.resize(quickload_size); + image.fread(data, quickload_size); + for (int i = 1; i < quickload_size; i++) + space.write_byte(address++, data[i]); + + offs_t eofa = address; + space.write_byte(EOFA, eofa & 0xff); + space.write_byte(EOFA + 1, eofa >> 8); + + offs_t head = address + 1; + space.write_byte(HEAD, head & 0xff); + space.write_byte(HEAD + 1, head >> 8); + + return IMAGE_INIT_PASS; +} + //************************************************************************** @@ -517,12 +550,15 @@ static MACHINE_CONFIG_START( abc80, abc80_state ) MCFG_DEVICE_ADD(ABC80_KEYBOARD_TAG, ABC80_KEYBOARD, 0) MCFG_ABC80_KEYBOARD_KEYDOWN_CALLBACK(WRITELINE(abc80_state, keydown_w)) - MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "slow") - MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("slow", abc830_slow) + + MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abc80_cards, "abcexp") + MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL) MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0) MCFG_GENERIC_KEYBOARD_CB(WRITE8(abc80_state, kbd_w)) + MCFG_QUICKLOAD_ADD("quickload", abc80_state, bac, "bac", 1) + // internal ram MCFG_RAM_ADD(RAM_TAG) MCFG_RAM_DEFAULT_SIZE("16K") diff --git a/src/mess/drivers/abc80x.c b/src/mess/drivers/abc80x.c index 6dd3448dd36..6b517180b30 100644 --- a/src/mess/drivers/abc80x.c +++ b/src/mess/drivers/abc80x.c @@ -432,15 +432,15 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( abc800c_io, AS_IO, 8, abc800_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_MIRROR(0x18) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_device, inp_r, out_w) - AM_RANGE(0x01, 0x01) AM_MIRROR(0x18) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_device, stat_r, cs_w) - AM_RANGE(0x02, 0x02) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c1_w) - AM_RANGE(0x03, 0x03) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c2_w) - AM_RANGE(0x04, 0x04) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c3_w) - AM_RANGE(0x05, 0x05) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c4_w) + AM_RANGE(0x00, 0x00) AM_MIRROR(0x18) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_t, inp_r, out_w) + AM_RANGE(0x01, 0x01) AM_MIRROR(0x18) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_t, stat_r, cs_w) + AM_RANGE(0x02, 0x02) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c1_w) + AM_RANGE(0x03, 0x03) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c2_w) + AM_RANGE(0x04, 0x04) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c3_w) + AM_RANGE(0x05, 0x05) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c4_w) AM_RANGE(0x05, 0x05) AM_MIRROR(0x18) AM_READ(pling_r) AM_RANGE(0x06, 0x06) AM_MIRROR(0x18) AM_WRITE(hrs_w) - AM_RANGE(0x07, 0x07) AM_MIRROR(0x18) AM_DEVREAD(ABCBUS_TAG, abcbus_slot_device, rst_r) AM_WRITE(hrc_w) + AM_RANGE(0x07, 0x07) AM_MIRROR(0x18) AM_DEVREAD(ABCBUS_TAG, abcbus_slot_t, rst_r) AM_WRITE(hrc_w) AM_RANGE(0x20, 0x23) AM_MIRROR(0x0c) AM_DEVREADWRITE(Z80DART_TAG, z80dart_device, ba_cd_r, ba_cd_w) AM_RANGE(0x40, 0x43) AM_MIRROR(0x1c) AM_DEVREADWRITE(Z80SIO_TAG, z80sio2_device, ba_cd_r, ba_cd_w) AM_RANGE(0x60, 0x63) AM_MIRROR(0x1c) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write) @@ -491,14 +491,14 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( abc802_io, AS_IO, 8, abc802_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_MIRROR(0x18) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_device, inp_r, out_w) - AM_RANGE(0x01, 0x01) AM_MIRROR(0x18) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_device, stat_r, cs_w) - AM_RANGE(0x02, 0x02) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c1_w) - AM_RANGE(0x03, 0x03) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c2_w) - AM_RANGE(0x04, 0x04) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c3_w) - AM_RANGE(0x05, 0x05) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c4_w) + AM_RANGE(0x00, 0x00) AM_MIRROR(0x18) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_t, inp_r, out_w) + AM_RANGE(0x01, 0x01) AM_MIRROR(0x18) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_t, stat_r, cs_w) + AM_RANGE(0x02, 0x02) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c1_w) + AM_RANGE(0x03, 0x03) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c2_w) + AM_RANGE(0x04, 0x04) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c3_w) + AM_RANGE(0x05, 0x05) AM_MIRROR(0x18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c4_w) AM_RANGE(0x05, 0x05) AM_MIRROR(0x08) AM_READ(pling_r) - AM_RANGE(0x07, 0x07) AM_MIRROR(0x18) AM_DEVREAD(ABCBUS_TAG, abcbus_slot_device, rst_r) + AM_RANGE(0x07, 0x07) AM_MIRROR(0x18) AM_DEVREAD(ABCBUS_TAG, abcbus_slot_t, rst_r) AM_RANGE(0x20, 0x23) AM_MIRROR(0x0c) AM_DEVREADWRITE(Z80DART_TAG, z80dart_device, ba_cd_r, ba_cd_w) AM_RANGE(0x31, 0x31) AM_MIRROR(0x06) AM_DEVREAD(MC6845_TAG, mc6845_device, register_r) AM_RANGE(0x38, 0x38) AM_MIRROR(0x06) AM_DEVWRITE(MC6845_TAG, mc6845_device, address_w) @@ -539,14 +539,14 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( abc806_io, AS_IO, 8, abc806_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x00, 0x00) AM_MIRROR(0xff18) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_device, inp_r, out_w) - AM_RANGE(0x01, 0x01) AM_MIRROR(0xff18) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_device, stat_r, cs_w) - AM_RANGE(0x02, 0x02) AM_MIRROR(0xff18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c1_w) - AM_RANGE(0x03, 0x03) AM_MIRROR(0xff18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c2_w) - AM_RANGE(0x04, 0x04) AM_MIRROR(0xff18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c3_w) - AM_RANGE(0x05, 0x05) AM_MIRROR(0xff18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_device, c4_w) + AM_RANGE(0x00, 0x00) AM_MIRROR(0xff18) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_t, inp_r, out_w) + AM_RANGE(0x01, 0x01) AM_MIRROR(0xff18) AM_DEVREADWRITE(ABCBUS_TAG, abcbus_slot_t, stat_r, cs_w) + AM_RANGE(0x02, 0x02) AM_MIRROR(0xff18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c1_w) + AM_RANGE(0x03, 0x03) AM_MIRROR(0xff18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c2_w) + AM_RANGE(0x04, 0x04) AM_MIRROR(0xff18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c3_w) + AM_RANGE(0x05, 0x05) AM_MIRROR(0xff18) AM_DEVWRITE(ABCBUS_TAG, abcbus_slot_t, c4_w) AM_RANGE(0x06, 0x06) AM_MIRROR(0xff18) AM_WRITE(hrs_w) - AM_RANGE(0x07, 0x07) AM_MIRROR(0xff18) AM_DEVREAD(ABCBUS_TAG, abcbus_slot_device, rst_r) AM_WRITE(hrc_w) + AM_RANGE(0x07, 0x07) AM_MIRROR(0xff18) AM_DEVREAD(ABCBUS_TAG, abcbus_slot_t, rst_r) AM_WRITE(hrc_w) AM_RANGE(0x20, 0x23) AM_MIRROR(0xff0c) AM_DEVREADWRITE(Z80DART_TAG, z80dart_device, ba_cd_r, ba_cd_w) AM_RANGE(0x31, 0x31) AM_MIRROR(0xff00) AM_DEVREAD(MC6845_TAG, mc6845_device, register_r) AM_RANGE(0x34, 0x34) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_READWRITE(mai_r, mao_w) diff --git a/src/mess/includes/abc1600.h b/src/mess/includes/abc1600.h index 7fa124bdeba..9e32684766f 100644 --- a/src/mess/includes/abc1600.h +++ b/src/mess/includes/abc1600.h @@ -93,10 +93,10 @@ public: required_device m_floppy0; required_device m_floppy1; required_device m_floppy2; - required_device m_bus0i; - required_device m_bus0x; - required_device m_bus1; - required_device m_bus2; + required_device m_bus0i; + required_device m_bus0x; + required_device m_bus1; + required_device m_bus2; virtual void machine_start(); virtual void machine_reset(); diff --git a/src/mess/includes/abc80.h b/src/mess/includes/abc80.h index aeb248bbf6d..bdbb0743438 100644 --- a/src/mess/includes/abc80.h +++ b/src/mess/includes/abc80.h @@ -16,6 +16,7 @@ #include "imagedev/flopdrv.h" #include "imagedev/printer.h" #include "imagedev/cassette.h" +#include "imagedev/snapquik.h" #include "machine/abc80kb.h" #include "machine/keyboard.h" #include "machine/ram.h" @@ -91,7 +92,7 @@ public: required_device m_pio; required_device m_psg; required_device m_cassette; - required_device m_bus; + required_device m_bus; required_device m_kb; required_device m_ram; required_device m_rs232; @@ -115,6 +116,13 @@ public: TIMER_ID_FAKE_KEYBOARD_CLEAR }; + enum + { + BOFA = 0xfe1c, + EOFA = 0xfe1e, + HEAD = 0xfe20 + }; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); virtual void machine_start(); @@ -136,6 +144,8 @@ public: DECLARE_WRITE_LINE_MEMBER( keydown_w ); DECLARE_WRITE8_MEMBER( kbd_w ); + DECLARE_QUICKLOAD_LOAD_MEMBER( bac ); + enum { MMU_XM = 0x01,