diff options
Diffstat (limited to 'src/devices/bus/isa/lrk330.cpp')
-rw-r--r-- | src/devices/bus/isa/lrk330.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/devices/bus/isa/lrk330.cpp b/src/devices/bus/isa/lrk330.cpp new file mode 100644 index 00000000000..18cd1bfe29e --- /dev/null +++ b/src/devices/bus/isa/lrk330.cpp @@ -0,0 +1,130 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + Skeleton driver for ESDI controllers by Lark Associates Inc. + + Major ICs excluding EPROMs, in order of decreasing pin count: + * Silicon Logic LD1111 HDC (QFP128, U1) + * Xilinx XC2018-70PC68C Logic Cell Array (PLCC84, U11) + * National DP8473V Floppy Disk Controller PLUS-2 (PLCC52, U4) + * Signetics SCN8032HCCA44 8-Bit Microcontroller (PLCC44, U20) + * Sharp LH52258D-45 32Kx8 CMOS Static RAM (SDIP28, U2 & U3) + * Vitelic V61C16F70L 2Kx8 CMOS Static RAM (SSOP24, U19) + + The purpose of the small SRAM is not clear. Perhaps it can be banked + into the lower part of the 8032 program space after loading patches + for the EPROM microcode, since that uses the upper mirror addresses + almost exclusively. + + A transfer rate of up to 24 megabits per second was advertised. + + LRK-330 is presumably identical to LRK-331, only without the FDC or + 34-pin floppy drive cable connector installed. + +***************************************************************************/ + +#include "emu.h" +#include "lrk330.h" + +#include "imagedev/floppy.h" +#include "machine/upd765.h" + +// device type definition +DEFINE_DEVICE_TYPE(LRK331, lrk331_device, "lrk331", "Lark Associates LRK-331 ESDI Controller") + + +lrk331_device::lrk331_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, LRK331, tag, owner, clock) + , device_isa16_card_interface(mconfig, *this) + , m_mcu(*this, "mcu") + , m_bios(*this, "bios") + , m_config(*this, "CONFIG") +{ +} + +void lrk331_device::device_start() +{ +} + +void lrk331_device::device_reset() +{ +} + +void lrk331_device::ucode_map(address_map &map) +{ + map(0x0000, 0x3fff).mirror(0x4000).rom().region("ucode", 0); +} + +void lrk331_device::ext_map(address_map &map) +{ + map.global_mask(0xff); + map(0x0b, 0x0b).nopw(); +} + +static INPUT_PORTS_START(lrk331) + PORT_START("CONFIG") + PORT_DIPNAME(0x001, 0x001, "Drive Addresses") PORT_DIPLOCATION("W1:1") + PORT_DIPSETTING(0x001, "Primary (1F0h-1F7h, 3F0h-3F7h)") + PORT_DIPSETTING(0x000, "Secondary (170h-177h, 370h-377h)") + PORT_DIPNAME(0x002, 0x002, "Floppy Drive Speed") PORT_DIPLOCATION("W2:2") + PORT_DIPSETTING(0x002, "Single") + PORT_DIPSETTING(0x000, "Dual") + PORT_DIPNAME(0x004, 0x004, "Interrupt Delay") PORT_DIPLOCATION("W3:1") + PORT_DIPSETTING(0x004, "Disabled") + PORT_DIPSETTING(0x000, "Enabled") + PORT_DIPNAME(0x008, 0x008, "Factory Configured - Do Not Alter") PORT_DIPLOCATION("W4:1") + PORT_DIPSETTING(0x008, DEF_STR(Off)) + PORT_DIPSETTING(0x000, DEF_STR(On)) + PORT_DIPNAME(0x0f0, 0x0e0, "BIOS Address") PORT_DIPLOCATION("W5-W8:1,2,3,4") + PORT_DIPSETTING(0x0f0, "Disabled") + PORT_DIPSETTING(0x0e0, "C800h") + PORT_DIPSETTING(0x0d0, "CC00h") + PORT_DIPSETTING(0x0b0, "D000h") + PORT_DIPSETTING(0x070, "D400h") + PORT_DIPNAME(0x300, 0x200, "IRQ Select") PORT_DIPLOCATION("W9-W10:1,2") + PORT_DIPSETTING(0x200, "IRQ 14") + PORT_DIPSETTING(0x100, "IRQ 15") + PORT_DIPNAME(0x400, 0x000, "Floppy Drive Interface") PORT_DIPLOCATION("W11:1") + PORT_DIPSETTING(0x400, "Disabled") + PORT_DIPSETTING(0x000, "Enabled") +INPUT_PORTS_END + +ioport_constructor lrk331_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(lrk331); +} + +static void pc_hd_floppies(device_slot_interface &device) +{ + device.option_add("525hd", FLOPPY_525_HD); + device.option_add("35hd", FLOPPY_35_HD); + device.option_add("525dd", FLOPPY_525_DD); + device.option_add("35dd", FLOPPY_35_DD); +} + +void lrk331_device::device_add_mconfig(machine_config &config) +{ + I8032(config, m_mcu, 24_MHz_XTAL / 2); + m_mcu->set_addrmap(AS_PROGRAM, &lrk331_device::ucode_map); + m_mcu->set_addrmap(AS_IO, &lrk331_device::ext_map); + + //LD1111(config, m_hdc, 24_MHz_XTAL); + + DP8473(config, "fdc", 24_MHz_XTAL); + FLOPPY_CONNECTOR(config, "fdc:0", pc_hd_floppies, "525hd", floppy_image_device::default_pc_floppy_formats); + FLOPPY_CONNECTOR(config, "fdc:1", pc_hd_floppies, nullptr, floppy_image_device::default_pc_floppy_formats); +} + +ROM_START(lrk331) + ROM_REGION(0x2000, "bios", 0) + ROM_LOAD("63308-10.bin", 0x0000, 0x2000, CRC(f16d4f25) SHA1(437664ff9723c8036a40f1e504899b7cacd21ad0)) + + ROM_REGION(0x4000, "ucode", 0) + ROM_LOAD("63307-08.bin", 0x0000, 0x4000, CRC(6d2e8b26) SHA1(1a33462a29b306b01960cf2ac0b209b2adf58dbe)) +ROM_END + +const tiny_rom_entry *lrk331_device::device_rom_region() const +{ + return ROM_NAME(lrk331); +} |