diff options
| author | 2021-06-21 13:53:49 -0700 | |
|---|---|---|
| committer | 2021-06-21 13:53:49 -0700 | |
| commit | 32dbba7d2d4513774b2d877b4c88f2d0760bcf54 (patch) | |
| tree | f9e6426cf8dc28413c456bdbcd450c85cb302422 /src/devices/bus/isa | |
| parent | 5522729235b3ce81c839f3932c1aadc14de59e2b (diff) | |
| parent | 2709c0143a8c7009715242c135b28403eeffce8b (diff) | |
Merge branch 'master' into deprecateddeprecated
Diffstat (limited to 'src/devices/bus/isa')
| -rw-r--r-- | src/devices/bus/isa/isa_cards.cpp | 2 | ||||
| -rw-r--r-- | src/devices/bus/isa/lrk330.cpp | 130 | ||||
| -rw-r--r-- | src/devices/bus/isa/lrk330.h | 38 |
3 files changed, 170 insertions, 0 deletions
diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp index ce23388ea1d..cc00f2233e0 100644 --- a/src/devices/bus/isa/isa_cards.cpp +++ b/src/devices/bus/isa/isa_cards.cpp @@ -50,6 +50,7 @@ #include "tekram_dc820.h" #include "asc88.h" #include "omti8621.h" +#include "lrk330.h" // sound #include "adlib.h" @@ -230,4 +231,5 @@ void pc_isa16_cards(device_slot_interface &device) device.option_add("dc820", TEKRAM_DC820); // actually an EISA card device.option_add("dc820b", TEKRAM_DC820B); // actually an EISA card device.option_add("omti8621", ISA16_OMTI8621); + device.option_add("lrk331", LRK331); } 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); +} diff --git a/src/devices/bus/isa/lrk330.h b/src/devices/bus/isa/lrk330.h new file mode 100644 index 00000000000..b75a50fa7a3 --- /dev/null +++ b/src/devices/bus/isa/lrk330.h @@ -0,0 +1,38 @@ +// license:BSD-3-Clause +// copyright-holders:AJR + +#ifndef MAME_BUS_ISA_LRK330_H +#define MAME_BUS_ISA_LRK330_H + +#pragma once + +#include "isa.h" +#include "cpu/mcs51/mcs51.h" + +class lrk331_device : public device_t, public device_isa16_card_interface +{ +public: + lrk331_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_reset() override; + + virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override; + +private: + void ucode_map(address_map &map); + void ext_map(address_map &map); + + required_device<mcs51_cpu_device> m_mcu; + required_region_ptr<u8> m_bios; + required_ioport m_config; +}; + +DECLARE_DEVICE_TYPE(LRK331, lrk331_device) + +#endif // MAME_BUS_ISA_LRK330_H |
