From e01935498f6a857e7d206c292b671e1bfab46838 Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 14 Apr 2019 18:18:12 -0400 Subject: Add skeleton device for UltraStor Ultra-14F SCSI controller [Metropoli BBS Archive] --- scripts/src/bus.lua | 2 + src/devices/bus/isa/isa_cards.cpp | 2 + src/devices/bus/isa/ultra14f.cpp | 81 +++++++++++++++++++++++++++++++++++++++ src/devices/bus/isa/ultra14f.h | 40 +++++++++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 src/devices/bus/isa/ultra14f.cpp create mode 100644 src/devices/bus/isa/ultra14f.h diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 2ecf90c0ace..b2717ba20c9 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -1322,6 +1322,8 @@ if (BUSES["ISA"]~=null) then MAME_DIR .. "src/devices/bus/isa/dcb.h", MAME_DIR .. "src/devices/bus/isa/ultra12f.cpp", MAME_DIR .. "src/devices/bus/isa/ultra12f.h", + MAME_DIR .. "src/devices/bus/isa/ultra14f.cpp", + MAME_DIR .. "src/devices/bus/isa/ultra14f.h", } end diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp index 5b0c2315f38..cd49ea82c19 100644 --- a/src/devices/bus/isa/isa_cards.cpp +++ b/src/devices/bus/isa/isa_cards.cpp @@ -42,6 +42,7 @@ #include "bt54x.h" #include "dcb.h" #include "ultra12f.h" +#include "ultra14f.h" // sound #include "adlib.h" @@ -189,4 +190,5 @@ void pc_isa16_cards(device_slot_interface &device) device.option_add("bt545s", BT545S); device.option_add("dcb", NOVELL_DCB); device.option_add("ultra12f", ULTRA12F); + device.option_add("ultra14f", ULTRA14F); } diff --git a/src/devices/bus/isa/ultra14f.cpp b/src/devices/bus/isa/ultra14f.cpp new file mode 100644 index 00000000000..52c3aa8ad83 --- /dev/null +++ b/src/devices/bus/isa/ultra14f.cpp @@ -0,0 +1,81 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + UltraStor Ultra 14F AT Bus Fast SCSI-2 Bus Master Controller + +***************************************************************************/ + +#include "emu.h" +#include "ultra14f.h" + +#include "cpu/m68000/m68000.h" +#include "machine/ncr5390.h" +#include "machine/nscsi_bus.h" +#include "machine/nscsi_hd.h" + +DEFINE_DEVICE_TYPE(ULTRA14F, ultra14f_device, "ultra14f", "Ultra-14F SCSI Host Adapter") + +ultra14f_device::ultra14f_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, ULTRA14F, tag, owner, clock) + , device_isa16_card_interface(mconfig, *this) + , m_uscpu(*this, "uscpu") + , m_fdc(*this, "fdc") + , m_bios(*this, "bios") +{ +} + +void ultra14f_device::device_start() +{ +} + +void ultra14f_device::uscpu_map(address_map &map) +{ + map(0x000000, 0x007fff).rom().region("firmware", 0); + map(0x00e000, 0x00e00f).m("scsi:7:scsic", FUNC(ncr53cf94_device::map)); + map(0x3f8000, 0x3fffff).ram(); +} + +static void u14f_scsi_devices(device_slot_interface &device) +{ + device.option_add("harddisk", NSCSI_HARDDISK); + device.option_add_internal("scsic", NCR53CF94); // Emulex FAS216 or similar custom-marked as USC060-6-40B +} + +void ultra14f_device::scsic_config(device_t *device) +{ + device->set_clock(40_MHz_XTAL); + downcast(*device).irq_handler_cb().set_inputline(m_uscpu, M68K_IRQ_1); +} + +void ultra14f_device::device_add_mconfig(machine_config &config) +{ + M68008FN(config, m_uscpu, 40_MHz_XTAL / 10); // custom-marked as USC080-5-10A + m_uscpu->set_addrmap(AS_PROGRAM, &ultra14f_device::uscpu_map); + + NSCSI_BUS(config, "scsi"); + NSCSI_CONNECTOR(config, "scsi:0", u14f_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:1", u14f_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:2", u14f_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:3", u14f_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:4", u14f_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:5", u14f_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:6", u14f_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:7", u14f_scsi_devices, "scsic", true) + .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); }); + + DP8473(config, m_fdc, 24_MHz_XTAL); // custom-marked as USC020-1-24 +} + +ROM_START(ultra14f) + ROM_REGION(0x8000, "firmware", 0) + ROM_LOAD("28004.006", 0x0000, 0x8000, CRC(489a872e) SHA1(692faaf945856b3888be5d8778f5643e51711ee2)) + + ROM_REGION(0x4000, "bios", 0) // "Date : 01/07/93 Version 2.01" + ROM_LOAD("38004.005", 0x0000, 0x4000, CRC(0d9d831d) SHA1(9c1539f8473f8330be323e728e7aabccc77542d0)) +ROM_END + +const tiny_rom_entry *ultra14f_device::device_rom_region() const +{ + return ROM_NAME(ultra14f); +} diff --git a/src/devices/bus/isa/ultra14f.h b/src/devices/bus/isa/ultra14f.h new file mode 100644 index 00000000000..9661e24a4b3 --- /dev/null +++ b/src/devices/bus/isa/ultra14f.h @@ -0,0 +1,40 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + UltraStor Ultra 14F AT Bus Fast SCSI-2 Bus Master Controller + +***************************************************************************/ + +#ifndef MAME_BUS_ISA_ULTRA14F_H +#define MAME_BUS_ISA_ULTRA14F_H + +#pragma once + +#include "isa.h" +#include "machine/upd765.h" + +class ultra14f_device : public device_t, public device_isa16_card_interface +{ +public: + ultra14f_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + static constexpr feature_type unemulated_features() { return feature::DISK; } + +protected: + virtual void device_start() override; + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; + +private: + void uscpu_map(address_map &map); + void scsic_config(device_t *device); + + required_device m_uscpu; + required_device m_fdc; + required_region_ptr m_bios; +}; + +DECLARE_DEVICE_TYPE(ULTRA14F, ultra14f_device) + +#endif // MAME_BUS_ISA_ULTRA14F_H -- cgit v1.2.3