diff options
Diffstat (limited to 'src/devices/bus/abcbus/abc890.c')
-rw-r--r-- | src/devices/bus/abcbus/abc890.c | 408 |
1 files changed, 408 insertions, 0 deletions
diff --git a/src/devices/bus/abcbus/abc890.c b/src/devices/bus/abcbus/abc890.c new file mode 100644 index 00000000000..ecfc1abf4d2 --- /dev/null +++ b/src/devices/bus/abcbus/abc890.c @@ -0,0 +1,408 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Luxor ABC 890 bus expander emulation + +*********************************************************************/ + +#include "abc890.h" + + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +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>; + + +//------------------------------------------------- +// MACHINE_DRIVER( abc890 ) +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( abc890 ) + MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("mem1", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("mem2", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("mem3", abcbus_cards, NULL) +MACHINE_CONFIG_END + + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +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, "abc830") + 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, "16k") + 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 ) +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( abc894 ) + MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, NULL) +MACHINE_CONFIG_END + + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +machine_config_constructor abc894_t::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( abc894 ); +} + + +//------------------------------------------------- +// MACHINE_DRIVER( abc850 ) +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( abc850 ) + MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, "abc850fdd") + MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, "xebec") + MCFG_DEVICE_CARD_DEFAULT_BIOS("xebec", "ro202") + MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io5", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io6", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io7", abcbus_cards, NULL) +MACHINE_CONFIG_END + + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +machine_config_constructor abc850_t::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( abc850 ); +} + + +//------------------------------------------------- +// MACHINE_DRIVER( abc852 ) +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( abc852 ) + MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, "abc850fdd") + MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, "xebec") + MCFG_DEVICE_CARD_DEFAULT_BIOS("xebec", "basf6185") + MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io5", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io6", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io7", abcbus_cards, NULL) +MACHINE_CONFIG_END + + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +machine_config_constructor abc852_t::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( abc852 ); +} + + +//------------------------------------------------- +// MACHINE_DRIVER( abc856 ) +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( abc856 ) + MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, "abc850fdd") + MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, "xebec") + MCFG_DEVICE_CARD_DEFAULT_BIOS("xebec", "micr1325") + MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io5", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io6", abcbus_cards, NULL) + MCFG_ABCBUS_SLOT_ADD("io7", abcbus_cards, NULL) +MACHINE_CONFIG_END + + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +machine_config_constructor abc856_t::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( abc856 ); +} + + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// abc890_t - constructor +//------------------------------------------------- + +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_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) +{ +} + +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__) +{ +} + +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__) +{ +} + +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__) +{ +} + +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__) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void abc890_t::device_start() +{ +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void abc890_t::device_reset() +{ + for (device_t *device = first_subdevice(); device != NULL; device = device->next()) + { + device->reset(); + } +} + + +//------------------------------------------------- +// abcbus_cs - card select +//------------------------------------------------- + +void abc890_t::abcbus_cs(UINT8 data) +{ + abcbus_slot_device_iterator iter(*this); + + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) + { + slot->cs_w(data); + } +} + + +//------------------------------------------------- +// abcbus_inp - input +//------------------------------------------------- + +UINT8 abc890_t::abcbus_inp() +{ + UINT8 data = 0xff; + + abcbus_slot_device_iterator iter(*this); + + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) + { + data &= slot->inp_r(); + } + + return data; +} + + +//------------------------------------------------- +// abcbus_out - output +//------------------------------------------------- + +void abc890_t::abcbus_out(UINT8 data) +{ + abcbus_slot_device_iterator iter(*this); + + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) + { + slot->out_w(data); + } +} + + +//------------------------------------------------- +// abcbus_stat - status +//------------------------------------------------- + +UINT8 abc890_t::abcbus_stat() +{ + UINT8 data = 0xff; + + abcbus_slot_device_iterator iter(*this); + + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) + { + data &= slot->stat_r(); + } + + return data; +} + + +//------------------------------------------------- +// abcbus_c1 - command 1 +//------------------------------------------------- + +void abc890_t::abcbus_c1(UINT8 data) +{ + abcbus_slot_device_iterator iter(*this); + + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) + { + slot->c1_w(data); + } +} + + +//------------------------------------------------- +// abcbus_c2 - command 2 +//------------------------------------------------- + +void abc890_t::abcbus_c2(UINT8 data) +{ + abcbus_slot_device_iterator iter(*this); + + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) + { + slot->c2_w(data); + } +} + + +//------------------------------------------------- +// abcbus_c3 - command 3 +//------------------------------------------------- + +void abc890_t::abcbus_c3(UINT8 data) +{ + abcbus_slot_device_iterator iter(*this); + + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) + { + slot->c3_w(data); + } +} + + +//------------------------------------------------- +// abcbus_c4 - command 4 +//------------------------------------------------- + +void abc890_t::abcbus_c4(UINT8 data) +{ + abcbus_slot_device_iterator iter(*this); + + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) + { + slot->c4_w(data); + } +} + + +//------------------------------------------------- +// abcbus_xmemfl - extended memory read +//------------------------------------------------- + +UINT8 abc890_t::abcbus_xmemfl(offs_t offset) +{ + UINT8 data = 0xff; + + abcbus_slot_device_iterator iter(*this); + + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) + { + data &= slot->xmemfl_r(offset); + } + + return data; +} + + +//------------------------------------------------- +// abcbus_xmemw - extended memory write +//------------------------------------------------- + +void abc890_t::abcbus_xmemw(offs_t offset, UINT8 data) +{ + abcbus_slot_device_iterator iter(*this); + + for (abcbus_slot_t *slot = iter.first(); slot != NULL; slot = iter.next()) + { + slot->xmemw_w(offset, data); + } +} |