1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 /**********************************************************************
4
5 Luxor ABC Memory Card 55 10762-01 emulation
6
7 *********************************************************************/
8
9 /*
10
11 PCB Layout
12 ----------
13
14 55 10762-01
15
16 |-----------------------------------|
17 | |
18 | |
19 | |
20 | |
21 | ROM3 ROM2 |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | ROM1 ROM0 |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | LS02 LS139 |
35 | |
36 | |
37 | |
38 | LS367 LS241 LS241 |
39 | |
40 | |
41 | |
42 | |
43 |--|-----------------------------|--|
44 |------------CON1-------------|
45
46 Notes:
47 All IC's shown.
48
49 ROM0 - Synertek C55022 4Kx8 ROM "DOSDD80"
50 ROM1 - Motorola MCM2708C 1Kx8 EPROM "9704"
51 ROM2 - empty socket
52 ROM3 - empty socket
53 CON1 - ABC bus connector
54
55 */
56
57 #include "emu.h"
58 #include "memcard.h"
59
60
61
62 //**************************************************************************
63 // DEVICE DEFINITIONS
64 //**************************************************************************
65
66 DEFINE_DEVICE_TYPE(ABC_MEMORY_CARD, abc_memory_card_device, "abc_memcard", "ABC Memory Card")
67
68
69 //-------------------------------------------------
70 // ROM( abc_dos )
71 //-------------------------------------------------
72
ROM_START(abc_dos)73 ROM_START( abc_dos )
74 ROM_REGION( 0x1000, "dos", 0 )
75 ROM_DEFAULT_BIOS("ufd20")
76 ROM_SYSTEM_BIOS( 0, "abcdos", "ABC-DOS" ) // Scandia Metric FD2
77 ROMX_LOAD( "abcdos.3d", 0x0000, 0x1000, CRC(2cb2192f) SHA1(a6b3a9587714f8db807c05bee6c71c0684363744), ROM_BIOS(0) )
78 ROM_SYSTEM_BIOS( 1, "dosdd80", "ABC-DOS DD" ) // ABC 830
79 ROMX_LOAD( "dosdd80.3d", 0x0000, 0x1000, CRC(36db4c15) SHA1(ae462633f3a9c142bb029beb14749a84681377fa), ROM_BIOS(1) )
80 ROM_SYSTEM_BIOS( 2, "ufd20", "UFD-DOS v.20" ) // ABC 830
81 ROMX_LOAD( "ufddos20.3d", 0x0000, 0x1000, CRC(69b09c0b) SHA1(403997a06cf6495b8fa13dc74eff6a64ef7aa53e), ROM_BIOS(2) )
82
83 ROM_REGION( 0x400, "iec", 0 )
84 ROM_LOAD( "iec.4b", 0x000, 0x400, NO_DUMP )
85
86 ROM_REGION( 0x400, "opt", 0 )
87 ROM_LOAD( "spare.4a", 0x000, 0x400, NO_DUMP )
88
89 ROM_REGION( 0x400, "prn", 0 )
90 ROM_LOAD( "printer.3b", 0x000, 0x400, NO_DUMP )
91 ROM_END
92
93
94 //-------------------------------------------------
95 // rom_region - device-specific ROM region
96 //-------------------------------------------------
97
98 const tiny_rom_entry *abc_memory_card_device::device_rom_region() const
99 {
100 return ROM_NAME( abc_dos );
101 }
102
103
104
105 //**************************************************************************
106 // LIVE DEVICE
107 //**************************************************************************
108
109 //-------------------------------------------------
110 // abc_memory_card_device - constructor
111 //-------------------------------------------------
112
abc_memory_card_device(const machine_config & mconfig,const char * tag,device_t * owner,uint32_t clock)113 abc_memory_card_device::abc_memory_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
114 device_t(mconfig, ABC_MEMORY_CARD, tag, owner, clock),
115 device_abcbus_card_interface(mconfig, *this),
116 m_dos_rom(*this, "dos"),
117 m_iec_rom(*this, "iec"),
118 m_opt_rom(*this, "opt"),
119 m_prn_rom(*this, "prn")
120 {
121 }
122
123
124 //-------------------------------------------------
125 // device_start - device-specific startup
126 //-------------------------------------------------
127
device_start()128 void abc_memory_card_device::device_start()
129 {
130 }
131
132
133
134 //**************************************************************************
135 // ABC BUS INTERFACE
136 //**************************************************************************
137
138 //-------------------------------------------------
139 // abcbus_xmemfl -
140 //-------------------------------------------------
141
abcbus_xmemfl(offs_t offset)142 uint8_t abc_memory_card_device::abcbus_xmemfl(offs_t offset)
143 {
144 uint8_t data = 0xff;
145
146 if (offset >= 0x6000 && offset < 0x7000)
147 {
148 data = m_dos_rom->base()[offset & 0xfff];
149 }
150 if (offset >= 0x7000 && offset < 0x7400)
151 {
152 data = m_iec_rom->base()[offset & 0x3ff];
153 }
154 if (offset >= 0x7400 && offset < 0x7800)
155 {
156 data = m_opt_rom->base()[offset & 0x3ff];
157 }
158 if (offset >= 0x7800 && offset < 0x7c00)
159 {
160 data = m_prn_rom->base()[offset & 0x3ff];
161 }
162
163 return data;
164 }
165