diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 1b5484abf5855..b7539cef797bc 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -3023,6 +3023,8 @@ if (BUSES["A2BUS"]~=null) then MAME_DIR .. "src/devices/bus/a2bus/a2estd80col.h", MAME_DIR .. "src/devices/bus/a2bus/a2hsscsi.cpp", MAME_DIR .. "src/devices/bus/a2bus/a2hsscsi.h", + MAME_DIR .. "src/devices/bus/a2bus/a2ieee488.cpp", + MAME_DIR .. "src/devices/bus/a2bus/a2ieee488.h", MAME_DIR .. "src/devices/bus/a2bus/a2iwm.cpp", MAME_DIR .. "src/devices/bus/a2bus/a2iwm.h", MAME_DIR .. "src/devices/bus/a2bus/a2mcms.cpp", diff --git a/src/devices/bus/a2bus/a2ieee488.cpp b/src/devices/bus/a2bus/a2ieee488.cpp new file mode 100644 index 0000000000000..c93ea4813819e --- /dev/null +++ b/src/devices/bus/a2bus/a2ieee488.cpp @@ -0,0 +1,225 @@ +// license:BSD-3-Clause +// copyright-holders:Golden Child +/********************************************************************* + + a2ieee488.cpp + + Apple II IEEE-488 Interface Card + + Notes: The ROM will write values to CSWL (charout) and KSWL (keyin) for + the input and output vectors. + + C138 lda #$03 A9 03 + C13A sta m_ieee; + required_device m_tms9914; + required_region_ptr m_rom; +}; + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void a2bus_ieee488_device::device_add_mconfig(machine_config &config) +{ + TMS9914(config, m_tms9914, 1021800); +// m_tms9914->int_write_cb().set(DEVICE_SELF_OWNER, FUNC(a2bus_ieee488_device::irq_w)); // int line not hooked up + m_tms9914->dio_read_cb().set(IEEE488_TAG, FUNC(ieee488_device::dio_r)); + m_tms9914->dio_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_dio_w)); + m_tms9914->eoi_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_eoi_w)); + m_tms9914->dav_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_dav_w)); + m_tms9914->nrfd_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_nrfd_w)); + m_tms9914->ndac_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ndac_w)); + m_tms9914->ifc_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ifc_w)); + m_tms9914->srq_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_srq_w)); + m_tms9914->atn_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_atn_w)); + m_tms9914->ren_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ren_w)); + + IEEE488(config, m_ieee); + m_ieee->eoi_callback().set(m_tms9914, FUNC(tms9914_device::eoi_w)); + m_ieee->dav_callback().set(m_tms9914, FUNC(tms9914_device::dav_w)); + m_ieee->nrfd_callback().set(m_tms9914, FUNC(tms9914_device::nrfd_w)); + m_ieee->ndac_callback().set(m_tms9914, FUNC(tms9914_device::ndac_w)); + m_ieee->ifc_callback().set(m_tms9914, FUNC(tms9914_device::ifc_w)); + m_ieee->srq_callback().set(m_tms9914, FUNC(tms9914_device::srq_w)); + m_ieee->atn_callback().set(m_tms9914, FUNC(tms9914_device::atn_w)); + m_ieee->ren_callback().set(m_tms9914, FUNC(tms9914_device::ren_w)); +// IEEE488_SLOT(config, "ieee_dev", 0, cbm_ieee488_devices, nullptr); + IEEE488_SLOT(config, "ieee_dev", 0, hp_ieee488_devices, nullptr); + +} + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +a2bus_ieee488_device::a2bus_ieee488_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + a2bus_ieee488_device(mconfig, A2BUS_IEEE488, tag, owner, clock) +{ +} + +a2bus_ieee488_device::a2bus_ieee488_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, type, tag, owner, clock), + device_a2bus_card_interface(mconfig, *this), + m_ieee(*this, IEEE488_TAG), + m_tms9914(*this, TMS_TAG), + m_rom(*this, "rom") +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void a2bus_ieee488_device::device_start() +{ +} + +void a2bus_ieee488_device::device_reset() +{ +} + +uint8_t a2bus_ieee488_device::read_c0nx(uint8_t offset) +{ + uint8_t data = 0xff; + if (!machine().side_effects_disabled()) + { + data = m_tms9914->read(offset & 0x07); + } + return data; +} + +void a2bus_ieee488_device::write_c0nx(uint8_t offset, uint8_t data) +{ + m_tms9914->write(offset & 0x07, data); +} + +ROM_START(a2ieee488) + ROM_REGION(0x0800, "rom", 0) + ROM_LOAD( "apple_ieee488.bin", 0x0000, 0x0800, CRC(57a3ece1) SHA1(d5cd452bdb7f9ab5c1d77806ffea4b63da77f714) ) + // According to Reactive Micro website, this is part number: 341-0059-A +ROM_END + + +const tiny_rom_entry *a2bus_ieee488_device::device_rom_region() const +{ + return ROM_NAME(a2ieee488); +} + +} // anonymous namespace + + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_IEEE488, device_a2bus_card_interface, a2bus_ieee488_device, "a2ieee488", "Apple II IEEE-488 Interface") diff --git a/src/devices/bus/a2bus/a2ieee488.h b/src/devices/bus/a2bus/a2ieee488.h new file mode 100644 index 0000000000000..c69411cecf2b5 --- /dev/null +++ b/src/devices/bus/a2bus/a2ieee488.h @@ -0,0 +1,20 @@ +// license:BSD-3-Clause +// copyright-holders:Golden Child +/********************************************************************* + + a2ieee488.h + + Apple II IEEE-488 Interface Card + +*********************************************************************/ + +#ifndef MAME_BUS_A2BUS_A2IEEE488_H +#define MAME_BUS_A2BUS_A2IEEE488_H + +#pragma once + +#include "a2bus.h" + +DECLARE_DEVICE_TYPE(A2BUS_IEEE488, device_a2bus_card_interface) + +#endif // MAME_BUS_A2BUS_A2IEEE488_H diff --git a/src/devices/bus/a2bus/cards.cpp b/src/devices/bus/a2bus/cards.cpp index cc2380fd45542..e2d56b8e8b836 100644 --- a/src/devices/bus/a2bus/cards.cpp +++ b/src/devices/bus/a2bus/cards.cpp @@ -22,6 +22,7 @@ #include "a2dx1.h" #include "a2echoii.h" #include "a2hsscsi.h" +#include "a2ieee488.h" #include "a2iwm.h" #include "a2mcms.h" #include "a2memexp.h" @@ -155,6 +156,7 @@ void apple2_cards(device_slot_interface &device) device.option_add("excel9", A2BUS_EXCEL9); // Excel-9 (6809 coprocessor) device.option_add("vistaa800", A2BUS_VISTAA800); // Vista A800 8" Disk Controller Card device.option_add("wicotrackball", A2BUS_WICOTRACKBALL); // Wico Trackball + device.option_add("ieee488", A2BUS_IEEE488); // Apple II IEEE-488 Interface Card } void apple2e_cards(device_slot_interface &device) @@ -237,6 +239,7 @@ void apple2e_cards(device_slot_interface &device) device.option_add("superdrive", A2BUS_SUPERDRIVE); // Apple II 3.5" Disk Controller device.option_add("vistaa800", A2BUS_VISTAA800); // Vista A800 8" Disk Controller Card device.option_add("wicotrackball", A2BUS_WICOTRACKBALL); // Wico Trackball + device.option_add("ieee488", A2BUS_IEEE488); // Apple II IEEE-488 Interface Card } void apple2gs_cards(device_slot_interface &device) @@ -313,6 +316,7 @@ void apple2gs_cards(device_slot_interface &device) device.option_add("pdromdrive", A2BUS_PRODOSROMDRIVE); // ProDOS ROM Drive device.option_add("superdrive", A2BUS_SUPERDRIVE); // Apple II 3.5" Disk Controller device.option_add("wicotrackball", A2BUS_WICOTRACKBALL); // Wico Trackball + device.option_add("ieee488", A2BUS_IEEE488); // Apple II IEEE-488 Interface Card } void apple3_cards(device_slot_interface &device)