1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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);
}
|