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