(MESS) abc80: Fixed cassette loading and added quickload for BAC files. Emulated the ABC expansion unit and ABC memory card. [Curt Coder]

This commit is contained in:
Curt Coder 2015-04-06 00:42:06 +03:00
parent caf1e84506
commit 0da7bc72da
12 changed files with 295 additions and 176 deletions

View File

@ -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",

View File

@ -17,11 +17,12 @@
// DEVICE DEFINITIONS
//**************************************************************************
const device_type ABC890 = &device_creator<abc890_device>;
const device_type ABC894 = &device_creator<abc894_device>;
const device_type ABC850 = &device_creator<abc850_device>;
const device_type ABC852 = &device_creator<abc852_device>;
const device_type ABC856 = &device_creator<abc856_device>;
const device_type ABC890 = &device_creator<abc890_t>;
const device_type ABC_EXPANSION_UNIT = &device_creator<abc_expansion_unit_t>;
const device_type ABC894 = &device_creator<abc894_t>;
const device_type ABC850 = &device_creator<abc850_t>;
const device_type ABC852 = &device_creator<abc852_t>;
const device_type ABC856 = &device_creator<abc856_t>;
//-------------------------------------------------
@ -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),
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__),
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);
}

View File

@ -19,27 +19,19 @@
//**************************************************************************
// MACROS/CONSTANTS
//**************************************************************************
#define MAX_SLOTS 8
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> abc890_device
// ======================> abc890_t
class abc890_device : public device_t,
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;

View File

@ -17,7 +17,7 @@
// GLOBAL VARIABLES
//**************************************************************************
const device_type ABCBUS_SLOT = &device_creator<abcbus_slot_device>;
const device_type ABCBUS_SLOT = &device_creator<abcbus_slot_t>;
@ -32,15 +32,15 @@ const device_type ABCBUS_SLOT = &device_creator<abcbus_slot_device>;
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<abcbus_slot_device *>(device.owner());
m_slot = dynamic_cast<abcbus_slot_t *>(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<device_abcbus_card_interface *>(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)

View File

@ -124,34 +124,34 @@
#define MCFG_ABCBUS_SLOT_IRQ_CALLBACK(_irq) \
downcast<abcbus_slot_device *>(device)->set_irq_callback(DEVCB_##_irq);
downcast<abcbus_slot_t *>(device)->set_irq_callback(DEVCB_##_irq);
#define MCFG_ABCBUS_SLOT_NMI_CALLBACK(_nmi) \
downcast<abcbus_slot_device *>(device)->set_nmi_callback(DEVCB_##_nmi);
downcast<abcbus_slot_t *>(device)->set_nmi_callback(DEVCB_##_nmi);
#define MCFG_ABCBUS_SLOT_RDY_CALLBACK(_rdy) \
downcast<abcbus_slot_device *>(device)->set_rdy_callback(DEVCB_##_rdy);
downcast<abcbus_slot_t *>(device)->set_rdy_callback(DEVCB_##_rdy);
#define MCFG_ABCBUS_SLOT_RESIN_CALLBACK(_resin) \
downcast<abcbus_slot_device *>(device)->set_resin_callback(DEVCB_##_resin);
downcast<abcbus_slot_t *>(device)->set_resin_callback(DEVCB_##_resin);
#define MCFG_ABCBUS_SLOT_PREN_CALLBACK(_pren) \
downcast<abcbus_slot_device *>(device)->set_pren_callback(DEVCB_##_pren);
downcast<abcbus_slot_t *>(device)->set_pren_callback(DEVCB_##_pren);
#define MCFG_ABCBUS_SLOT_TRRQ_CALLBACK(_trrq) \
downcast<abcbus_slot_device *>(device)->set_trrq_callback(DEVCB_##_trrq);
downcast<abcbus_slot_t *>(device)->set_trrq_callback(DEVCB_##_trrq);
#define MCFG_ABCBUS_SLOT_XINT2_CALLBACK(_xint2) \
downcast<abcbus_slot_device *>(device)->set_xint2_callback(DEVCB_##_xint2);
downcast<abcbus_slot_t *>(device)->set_xint2_callback(DEVCB_##_xint2);
#define MCFG_ABCBUS_SLOT_XINT3_CALLBACK(_xint3) \
downcast<abcbus_slot_device *>(device)->set_xint3_callback(DEVCB_##_xint3);
downcast<abcbus_slot_t *>(device)->set_xint3_callback(DEVCB_##_xint3);
#define MCFG_ABCBUS_SLOT_XINT4_CALLBACK(_xint4) \
downcast<abcbus_slot_device *>(device)->set_xint4_callback(DEVCB_##_xint4);
downcast<abcbus_slot_t *>(device)->set_xint4_callback(DEVCB_##_xint4);
#define MCFG_ABCBUS_SLOT_XINT5_CALLBACK(_xint5) \
downcast<abcbus_slot_device *>(device)->set_xint5_callback(DEVCB_##_xint5);
downcast<abcbus_slot_t *>(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<class _irq> void set_irq_callback(_irq irq) { m_write_irq.set_callback(irq); }
template<class _nmi> 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> abcbus_slot_device_iterator;
typedef device_type_iterator<&device_creator<abcbus_slot_t>, abcbus_slot_t> abcbus_slot_device_iterator;

View File

@ -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);
}

View File

@ -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<abc_dos_device>;
const device_type ABC_MEMORY_CARD = &device_creator<abc_memory_card_t>;
//-------------------------------------------------
@ -73,7 +73,7 @@ const device_type ABC_DOS = &device_creator<abc_dos_device>;
//-------------------------------------------------
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__),
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_rom(*this, "dos")
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;

View File

@ -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,
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;

View File

@ -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")

View File

@ -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)

View File

@ -93,10 +93,10 @@ public:
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_device<floppy_connector> m_floppy2;
required_device<abcbus_slot_device> m_bus0i;
required_device<abcbus_slot_device> m_bus0x;
required_device<abcbus_slot_device> m_bus1;
required_device<abcbus_slot_device> m_bus2;
required_device<abcbus_slot_t> m_bus0i;
required_device<abcbus_slot_t> m_bus0x;
required_device<abcbus_slot_t> m_bus1;
required_device<abcbus_slot_t> m_bus2;
virtual void machine_start();
virtual void machine_reset();

View File

@ -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<z80pio_device> m_pio;
required_device<sn76477_device> m_psg;
required_device<cassette_image_device> m_cassette;
required_device<abcbus_slot_device> m_bus;
required_device<abcbus_slot_t> m_bus;
required_device<abc80_keyboard_device> m_kb;
required_device<ram_device> m_ram;
required_device<rs232_port_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,