mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
(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:
parent
caf1e84506
commit
0da7bc72da
@ -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",
|
||||
|
@ -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),
|
||||
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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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__),
|
||||
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;
|
@ -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;
|
||||
|
||||
|
||||
|
@ -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")
|
||||
|
@ -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)
|
||||
|
@ -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();
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user