1 // license:GPL-2.0+
2 // copyright-holders:Raphael Nabet
3 /*********************************************************************
4 
5     drivers/lisa.cpp
6 
7     Experimental LISA driver
8 
9     Raphael Nabet, 2000
10 
11 *********************************************************************/
12 
13 #include "emu.h"
14 #include "includes/lisa.h"
15 #include "cpu/cop400/cop400.h"
16 #include "formats/ap_dsk35.h"
17 #include "screen.h"
18 #include "softlist.h"
19 #include "speaker.h"
20 
21 /***************************************************************************
22     ADDRESS MAP
23 ***************************************************************************/
24 
lisa_map(address_map & map)25 void lisa_state::lisa_map(address_map &map)
26 {
27 	map(0x000000, 0xffffff).rw(FUNC(lisa_state::lisa_r), FUNC(lisa_state::lisa_w));           /* no fixed map, we use an MMU */
28 }
29 
lisa_fdc_map(address_map & map)30 void lisa_state::lisa_fdc_map(address_map &map)
31 {
32 	map.global_mask(0x1fff); // only 8k of address space
33 	map(0x0000, 0x03ff).ram().share("fdc_ram");             /* RAM (shared with 68000) */
34 	map(0x0400, 0x07ff).rw(FUNC(lisa_state::lisa_fdc_io_r), FUNC(lisa_state::lisa_fdc_io_w)); /* disk controller (IWM and TTL logic) */
35 	map(0x0800, 0x0fff).noprw();
36 	map(0x1000, 0x1fff).rom().region("fdccpu", 0x1000).share("fdc_rom");     /* ROM */
37 }
38 
lisa210_fdc_map(address_map & map)39 void lisa_state::lisa210_fdc_map(address_map &map)
40 {
41 	map.global_mask(0x1fff); // only 8k of address space
42 	map(0x0000, 0x03ff).ram().share("fdc_ram");             /* RAM (shared with 68000) */
43 	map(0x0400, 0x07ff).noprw();                                     /* nothing, or RAM wrap-around ??? */
44 	map(0x0800, 0x0bff).rw(FUNC(lisa_state::lisa_fdc_io_r), FUNC(lisa_state::lisa_fdc_io_w)); /* disk controller (IWM and TTL logic) */
45 	map(0x0c00, 0x0fff).noprw();                                     /* nothing, or IO port wrap-around ??? */
46 	map(0x1000, 0x1fff).rom().region("fdccpu", 0x1000).share("fdc_rom");         /* ROM */
47 }
48 
49 
50 
51 /***************************************************************************
52     DEVICE CONFIG
53 ***************************************************************************/
54 
lisa2_set_iwm_enable_lines(device_t * device,int enable_mask)55 static void lisa2_set_iwm_enable_lines(device_t *device,int enable_mask)
56 {
57 	/* E1 & E2 is connected to the Sony SEL line (?) */
58 	/*logerror("new sel line state %d\n", (enable_mask) ? 0 : 1);*/
59 	sony_set_sel_line(device,(enable_mask) ? 0 : 1);
60 }
61 
lisa210_set_iwm_enable_lines(device_t * device,int enable_mask)62 static void lisa210_set_iwm_enable_lines(device_t *device,int enable_mask)
63 {
64 	/* E2 is connected to the Sony enable line (?) */
65 	sony_set_enable_lines(device,enable_mask >> 1);
66 }
67 
68 static const applefdc_interface lisa2_fdc_interface =
69 {
70 	sony_set_lines,
71 	lisa2_set_iwm_enable_lines,
72 
73 	sony_read_data,
74 	sony_write_data,
75 	sony_read_status
76 };
77 
78 static const applefdc_interface lisa210_fdc_interface =
79 {
80 	sony_set_lines,
81 	lisa210_set_iwm_enable_lines,
82 
83 	sony_read_data,
84 	sony_write_data,
85 	sony_read_status
86 };
87 
88 static const floppy_interface lisa_floppy_interface =
89 {
90 	FLOPPY_STANDARD_5_25_DSHD,
91 	LEGACY_FLOPPY_OPTIONS_NAME(apple35_mac),
92 	"floppy_5_25"
93 };
94 
95 /***************************************************************************
96     MACHINE DRIVER
97 ***************************************************************************/
98 
99 /* Lisa1 and Lisa 2 machine */
lisa(machine_config & config)100 void lisa_state::lisa(machine_config &config)
101 {
102 	/* basic machine hardware */
103 	M68000(config, m_maincpu, 20.37504_MHz_XTAL / 4); // CPUCK is nominally 5 MHz
104 	m_maincpu->set_addrmap(AS_PROGRAM, &lisa_state::lisa_map);
105 	m_maincpu->set_vblank_int("screen", FUNC(lisa_state::lisa_interrupt));
106 
107 	cop421_cpu_device &iocop(COP421(config, "iocop", 3.93216_MHz_XTAL)); // U9F (I/O board)
108 	iocop.set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true);
109 	iocop.read_si().set_constant(1); // FIXME: actually tied to VIA CA2 but both pulled up to +5
110 	iocop.read_g().set_constant(15);
111 
112 	cop421_cpu_device &kbcop(COP421(config, "kbcop", 3932160)); // same clock as other COP?
113 	kbcop.set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true);
114 	kbcop.read_si().set_constant(0);
115 	kbcop.read_g().set_constant(15);
116 
117 	M6504(config, m_fdc_cpu, 2000000);        /* 16.000 MHz / 8 in when DIS asserted, 16.000 MHz / 9 otherwise (?) */
118 	m_fdc_cpu->set_addrmap(AS_PROGRAM, &lisa_state::lisa_fdc_map);
119 
120 	config.set_maximum_quantum(attotime::from_hz(60));
121 
122 	LS259(config, m_latch); // U4E (CPU board)
123 	m_latch->q_out_cb<0>().set(FUNC(lisa_state::diag1_w));
124 	m_latch->q_out_cb<1>().set(FUNC(lisa_state::diag2_w));
125 	m_latch->q_out_cb<2>().set(FUNC(lisa_state::seg1_w));
126 	m_latch->q_out_cb<3>().set(FUNC(lisa_state::seg2_w));
127 	m_latch->q_out_cb<4>().set(FUNC(lisa_state::setup_w));
128 	m_latch->q_out_cb<5>().set(FUNC(lisa_state::sfmsk_w));
129 	m_latch->q_out_cb<6>().set(FUNC(lisa_state::vtmsk_w));
130 	m_latch->q_out_cb<7>().set(FUNC(lisa_state::hdmsk_w));
131 
132 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
133 	m_screen->set_raw(20.37504_MHz_XTAL, 896, 0, 720, 379, 0, 364);
134 	//m_screen->set_raw(20_MHz_XTAL, 896, 0, 720, 374, 0, 360); // according to Lisa Hardware Reference Manual
135 	m_screen->set_screen_update(FUNC(lisa_state::screen_update_lisa));
136 	m_screen->set_palette("palette");
137 
138 	PALETTE(config, m_palette, palette_device::MONOCHROME);
139 
140 	/* sound hardware */
141 	SPEAKER(config, "mono").front_center();
142 	SPEAKER_SOUND(config, m_speaker);
143 	m_speaker->add_route(ALL_OUTPUTS, "mono", 1.00);
144 
145 	/* nvram */
146 	NVRAM(config, m_nvram);
147 	m_nvram->set_custom_handler(FUNC(lisa_state::nvram_init));
148 
149 	/* devices */
150 	LEGACY_IWM(config, m_fdc, &lisa2_fdc_interface);
151 	sonydriv_floppy_image_device::legacy_2_drives_add(config, &lisa_floppy_interface);
152 
153 	/* software lists */
154 	SOFTWARE_LIST(config, "disk_list").set_original("lisa");
155 
156 	/* via */
157 	VIA6522(config, m_via0, 20.37504_MHz_XTAL / 40); // CPU E clock (nominally 500 kHz)
158 	m_via0->writepa_handler().set(FUNC(lisa_state::COPS_via_out_a));
159 	m_via0->writepb_handler().set(FUNC(lisa_state::COPS_via_out_b));
160 	m_via0->ca2_handler().set(FUNC(lisa_state::COPS_via_out_ca2));
161 	m_via0->cb2_handler().set(FUNC(lisa_state::COPS_via_out_cb2));
162 	m_via0->irq_handler().set(FUNC(lisa_state::COPS_via_irq_func));
163 
164 	VIA6522(config, m_via1, 20.37504_MHz_XTAL / 40); // CPU E clock (nominally 500 kHz)
165 
166 	SCC8530(config, m_scc, 7833600);
167 }
168 
lisa210(machine_config & config)169 void lisa_state::lisa210(machine_config &config)
170 {
171 	lisa(config);
172 	m_fdc_cpu->set_addrmap(AS_PROGRAM, &lisa_state::lisa210_fdc_map);
173 
174 	/* Lisa 2/10 and MacXL had a slightly different FDC interface */
175 	m_fdc->set_config(&lisa210_fdc_interface);
176 
177 	/* via */
178 	m_via0->set_clock(1250000);
179 	m_via1->set_clock(1250000);
180 }
181 
macxl(machine_config & config)182 void lisa_state::macxl(machine_config &config)
183 {
184 	lisa210(config);
185 	m_screen->set_size(   768/* ???? */, 447/* ???? */);
186 	m_screen->set_visarea(0, 608-1, 0, 431-1);
187 }
188 
189 /* 2008-05 FP:
190 Small note about natural keyboard support: currently,
191 - "Clear" (on the Keypad) is mapped to 'F1'
192 - "Enter" (different from Return) is mapped to 'F2' */
193 
194 static INPUT_PORTS_START( lisa )
195 	PORT_START("MOUSE_X") /* Mouse - X AXIS */
196 	PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(1)
197 
198 	PORT_START("MOUSE_Y") /* Mouse - Y AXIS */
199 	PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(1)
200 
201 	/* pseudo-input ports with keyboard layout (based on pictures) */
202 	PORT_START("LINE0")
203 	PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_UNUSED)
204 	PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Mouse Button")
205 
206 	PORT_START("LINE1")
207 	PORT_BIT(0xFFFF, IP_ACTIVE_HIGH, IPT_UNUSED)
208 
209 	PORT_START("LINE2")
210 	PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad Clear") PORT_CODE(KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(F1))
211 	PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD)         PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
212 	PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad + [\xe2\x97\x80]") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
213 	PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad * [\xe2\x96\xb6]") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK))
214 	PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD)             PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
215 	PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD)             PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
216 	PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD)             PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
217 	PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad / [\xe2\x96\xb2]") PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD))
218 	PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD)             PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
219 	PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD)             PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
220 	PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD)             PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
221 	PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad , [\xe2\x96\xbc]") PORT_CODE(KEYCODE_COMMA_PAD) PORT_CHAR(UCHAR_MAMEKEY(COMMA_PAD))    // this one would be between '+' and 'Enter' on a modern keypad.
222 	PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD)           PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
223 	PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD)             PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
224 	PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD)             PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
225 	PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD)         PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
226 
227 	PORT_START("LINE3")
228 	PORT_BIT(0xFFFF, IP_ACTIVE_HIGH, IPT_UNUSED)
229 
230 	PORT_START("LINE4")
231 	PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS)             PORT_CHAR('-') PORT_CHAR('_')
232 	PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS)            PORT_CHAR('=') PORT_CHAR('+')
233 	PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH)         PORT_CHAR('\\') PORT_CHAR('|') // this one would be 2nd row, 3rd key from 'P'
234 #if 1
235 	/* US layout */
236 	PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNUSED)
237 #else
238 	/* European layout */
239 	PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("~  `") PORT_CODE(KEYCODE_BACKSLASH2)
240 	/* 2008-05 FP: Differences in European Layout (based on a couple of pictures found in the web):
241 	- at KEYCODE_ESC, "`  ~" is replaced by "?  #"
242 	- Shift + 3  gives the pound symbol (\xC2\xA3)
243 	- There is no "\  |" key after "]  }"
244 	- There is an additional key at 3rd row, 3rd key from 'L', and it's  "`  ~"
245 	- Between Left Shift and Z there is another key, but the image is not clear on that key
246 	*/
247 #endif
248 	PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P)             PORT_CHAR('p') PORT_CHAR('P')
249 	PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE)     PORT_CHAR(8)
250 	PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_MENU) PORT_CHAR(UCHAR_MAMEKEY(F2))
251 	PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_UNUSED)
252 	PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
253 	PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD)         PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
254 	PORT_BIT(0x0C00, IP_ACTIVE_HIGH, IPT_UNUSED)
255 	PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH)         PORT_CHAR('/') PORT_CHAR('?')
256 	PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD)         PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
257 	PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right Option") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(RALT))
258 	PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_UNUSED)
259 
260 	PORT_START("LINE5")
261 	PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9)             PORT_CHAR('9') PORT_CHAR('(')
262 	PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0)             PORT_CHAR('0') PORT_CHAR(')')
263 	PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U)             PORT_CHAR('u') PORT_CHAR('U')
264 	PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I)             PORT_CHAR('i') PORT_CHAR('I')
265 	PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J)             PORT_CHAR('j') PORT_CHAR('J')
266 	PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K)             PORT_CHAR('k') PORT_CHAR('K')
267 	PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE)     PORT_CHAR('[') PORT_CHAR('{')
268 	PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE)    PORT_CHAR(']') PORT_CHAR('}')
269 	PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M)             PORT_CHAR('l') PORT_CHAR('M')
270 	PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L)             PORT_CHAR('m') PORT_CHAR('L')
271 	PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON)         PORT_CHAR(';') PORT_CHAR(':')
272 	PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE)         PORT_CHAR('\'') PORT_CHAR('"')
273 	PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE)         PORT_CHAR(' ')
274 	PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA)         PORT_CHAR(',') PORT_CHAR('<')
275 	PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP)          PORT_CHAR('.') PORT_CHAR('>')
276 	PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O)             PORT_CHAR('o') PORT_CHAR('O')
277 
278 	PORT_START("LINE6")
279 	PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)             PORT_CHAR('e') PORT_CHAR('E')
280 	PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6)             PORT_CHAR('6') PORT_CHAR('^')
281 	PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7)             PORT_CHAR('7') PORT_CHAR('&')
282 	PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8)             PORT_CHAR('8') PORT_CHAR('*')
283 	PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5)             PORT_CHAR('5') PORT_CHAR('%')
284 	PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)             PORT_CHAR('r') PORT_CHAR('R')
285 	PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T)             PORT_CHAR('t') PORT_CHAR('T')
286 	PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y)             PORT_CHAR('y') PORT_CHAR('Y')
287 	PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC)           PORT_CHAR('`') PORT_CHAR('~')
288 	PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)             PORT_CHAR('f') PORT_CHAR('F')
289 	PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G)             PORT_CHAR('g') PORT_CHAR('G')
290 	PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H)             PORT_CHAR('h') PORT_CHAR('H')
291 	PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V)             PORT_CHAR('v') PORT_CHAR('V')
292 	PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)             PORT_CHAR('c') PORT_CHAR('C')
293 	PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B)             PORT_CHAR('b') PORT_CHAR('B')
294 	PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N)             PORT_CHAR('n') PORT_CHAR('N')
295 
296 	PORT_START("LINE7")
297 	PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)             PORT_CHAR('a') PORT_CHAR('A')
298 	PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)             PORT_CHAR('2') PORT_CHAR('@')
299 	PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)             PORT_CHAR('3') PORT_CHAR('#')
300 	PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)             PORT_CHAR('4') PORT_CHAR('$')
301 	PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)             PORT_CHAR('1') PORT_CHAR('!')
302 	PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)             PORT_CHAR('q') PORT_CHAR('Q')
303 	PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)             PORT_CHAR('s') PORT_CHAR('S')
304 	PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)             PORT_CHAR('w') PORT_CHAR('W')
305 	PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB)           PORT_CHAR('\t')
306 	PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)             PORT_CHAR('z') PORT_CHAR('Z')
307 	PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)             PORT_CHAR('x') PORT_CHAR('X')
308 	PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)             PORT_CHAR('d') PORT_CHAR('D')
309 	PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left Option") PORT_CODE(KEYCODE_LALT)                 PORT_CHAR(UCHAR_MAMEKEY(LALT))
310 	PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Alpha Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE  PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
311 	PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT)                     PORT_CHAR(UCHAR_SHIFT_1)
312 	PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Command") PORT_CODE(KEYCODE_LCONTROL)                 PORT_CHAR(UCHAR_SHIFT_2)
313 INPUT_PORTS_END
314 
315 	/* Note we're missing a whole bunch of lisa bootrom revisions; based on http://www.cs.dartmouth.edu/~woz/bootrom.pdf :
316 	?A?(10/12/82) ?B?(11/19/82) ?C?(1/28/83) D(5/12/83) 3B(9/8/83) E(10/20/83) F(12/21/83) G(2/8/84) and H(2/24/84) are known to exist. Earlier prototypes existed as well. Only F and H are dumped. */
317 	/* Based on http://www.cs.dartmouth.edu/~woz/bootrom.pdf and other information, at least the following systems existed:
318 	 * Lisa: two 890K twiggy drives, old MB (slow 500khz-clock parallel port via), old i/o board w/io40 disk rom, supports profile hdd, all bootrom revs (practically speaking, it only appeared with bootroms A, B, C, D, E or F)
319 	 * Lisa2 (aka Lisa2/5): one 400K SSDD drive, old MB (slow 500khz-clock parallel port via), old i/o board w/ioa8 disk rom, supports profile hdd, bootrom revs "3B", E, F, G, H
320 	 * Lisa2/10: one 400K SSDD drive, new MB (fast 1.25MHz-clock parallel port via), new i/o board w/ioa8 disk rom, internal widget 10mb drive (no profile hdd ports), bootrom revs F, G, H
321 	 * MacXL: one 400K SSDD drive, new MB (fast 1.25MHz-clock parallel port via), new i/o board w/io88 disk rom, internal widget 10mb drive (no profile hdd ports), bootrom rev 3A, different screen aspect, no serial number in video state rom so lisa office would not run
322 	 * Sun-remanufactured MacXL: one 800K DSDD drive, new MB (fast 1.25MHz-clock parallel port via), sun-made custom disk rom (3 revisions exist), internal custom 10mb,20mb, or 40mb drive (?no profile hdd ports?), bootrom rev 3A, different screen aspect, no serial number in video state rom so lisa apps would not run
323 	 */
324 		/* the old i/o board has a battery pack on it which often leaks and destroys the board, and has a socket for an amd 2915 math co-procesor; the new i/o board lacks the battery pack and the socket for the coprocessor, and integrates some of the function of the old twiggy-to-400k drive convertor board (which all lisa2/5s had) on it, requiring a mod to be done to the old convertor if used with a new i/o board.*/
325 	/* Twiggy disk format notes: twiggy disks seem to have wide '48tpi' heads, but cram 62.5tpi on the media by closely spacing the tracks! Twiggy media is DSHD-grade (needing strong magnetic field to set due to high data rate, see http://www.folklore.org/StoryView.py?project=Macintosh&story=Hide_Under_This_Desk.txt). The twiggy format is *PROBABLY* GCR encoding similar to apple2 and mac800k. The disks are 5.25" disks with TWO holes for the drive heads on both sides of the media, and the write protect notch in an unusual place (the index hole is in its normal position, though). By using variable motor speed similar to the later apple 3.5" disks, double sided disks, and tight track spacing, 871,424 bytes are stored per disk. see http://www.brouhaha.com/~eric/retrocomputing/lisa/twiggy.html
326 	The drives were notoriously unreliable and were replaced by a single SSDD Sony-made varialble speed 400k drive in the lisa2, which was also used on the original macintosh. */
327 	/* which systems used the 341-0193-A parallel interface card rom? */
328 
329 
330 ROM_START( lisa ) /* with twiggy drives, io40 i/o rom; technically any of the bootroms will work on this. */
331 	ROM_REGION16_BE(0x204000,"maincpu",0)   /* 68k rom and ram */
332 	ROM_DEFAULT_BIOS( "revh" )
333 
334 	ROM_SYSTEM_BIOS( 0, "revh", "LISA Bootrom Rev H (2/24/84)")
335 	ROMX_LOAD("341-0175-h", 0x000000, 0x2000, CRC(adfd4516) SHA1(97a89ce1218b8aa38f69f92f6f363f435c887914), ROM_SKIP(1) | ROM_BIOS(0)) // 341-0175-H LISA Bootrom Rev H (2/24/84) (High)
336 	ROMX_LOAD("341-0176-h", 0x000001, 0x2000, CRC(546d6603) SHA1(2a81e4d483f50ae8a2519621daeb7feb440a3e4d), ROM_SKIP(1) | ROM_BIOS(0)) // 341-0176-H LISA Bootrom Rev H (2/24/84) (Low)
337 
338 	ROM_SYSTEM_BIOS( 1, "revg", "LISA Bootrom Rev G (2/08/84)") // limited test release before release of rom rev H
339 	ROMX_LOAD("341-0175-g", 0x000000, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(1)) // 341-0175-G LISA Bootrom Rev G (2/08/84) (High)
340 	ROMX_LOAD("341-0176-g", 0x000001, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(1)) // 341-0176-G LISA Bootrom Rev G (2/08/84) (Low)
341 
342 	ROM_SYSTEM_BIOS( 2, "revf", "LISA Bootrom Rev F (12/21/83)")
343 	ROMX_LOAD("341-0175-f", 0x000000, 0x2000, CRC(701b9dab) SHA1(b116e5fada7b9a51f1b6e25757b2814d1b2737a5), ROM_SKIP(1) | ROM_BIOS(2)) // 341-0175-F LISA Bootrom Rev F (12/21/83) (High)
344 	ROMX_LOAD("341-0176-f", 0x000001, 0x2000, CRC(036010b6) SHA1(ac93e6dbe4ce59396d7d191ee3e3e79a504e518f), ROM_SKIP(1) | ROM_BIOS(2)) // 341-0176-F LISA Bootrom Rev F (12/21/83) (Low)
345 
346 	ROM_SYSTEM_BIOS( 3, "reve", "LISA Bootrom Rev E (10/20/83)")
347 	ROMX_LOAD("341-0175-e", 0x000000, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(3)) // 341-0175-E LISA Bootrom Rev E (10/20/83) (High)
348 	ROMX_LOAD("341-0176-e", 0x000001, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(3)) // 341-0176-E LISA Bootrom Rev E (10/20/83) (Low)
349 
350 	ROM_SYSTEM_BIOS( 4, "revd", "LISA Bootrom Rev D (5/12/83)")
351 	ROMX_LOAD("341-0175-d", 0x000000, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(4)) // 341-0175-D LISA Bootrom Rev D (5/12/83) (High)
352 	ROMX_LOAD("341-0176-d", 0x000001, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(4)) // 341-0176-D LISA Bootrom Rev D (5/12/83) (Low)
353 
354 	ROM_SYSTEM_BIOS( 5, "revc", "LISA Bootrom Rev C (1/28/83?)")
355 	ROMX_LOAD("341-0175-c", 0x000000, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(5)) // 341-0175-C LISA Bootrom Rev C (1/28/83) (High)
356 	ROMX_LOAD("341-0176-c", 0x000001, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(5)) // 341-0176-C LISA Bootrom Rev C (1/28/83) (Low)
357 
358 	ROM_SYSTEM_BIOS( 6, "revb", "LISA Bootrom Rev B (11/19/82?)")
359 	ROMX_LOAD("341-0175-b", 0x000000, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(6)) // 341-0175-B LISA Bootrom Rev B (11/19/82?) (High)
360 	ROMX_LOAD("341-0176-b", 0x000001, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(6)) // 341-0176-B LISA Bootrom Rev B (11/19/82?) (Low)
361 
362 	ROM_SYSTEM_BIOS( 7, "reva", "LISA Bootrom Rev A (10/12/82?)") // possibly only prototypes
363 	ROMX_LOAD("341-0175-a", 0x000000, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(7)) // 341-0175-A LISA Bootrom Rev A (10/12/82?) (High)
364 	ROMX_LOAD("341-0176-a", 0x000001, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(7)) // 341-0176-A LISA Bootrom Rev A (10/12/82?) (Low)
365 
366 	ROM_REGION( 0x400, "iocop", 0 )
367 	ROM_LOAD("341-0064a.u9f", 0x000, 0x400, CRC(e6849910) SHA1(d46e67df75c9e3e773d20542fb9d5b1d2ac0fb9b))
368 
369 	ROM_REGION( 0x400, "kbcop", 0 )
370 	ROM_LOAD("341-0064a.u9f", 0x000, 0x400, CRC(e6849910) SHA1(d46e67df75c9e3e773d20542fb9d5b1d2ac0fb9b))
371 
372 	ROM_REGION(0x2000,"fdccpu",0)       // 6504 RAM and ROM
373 	// note: other ?prototype? revisions of this rom for the lisa probably exist as well
374 	ROM_LOAD( "341-0138f.bin", 0x001000, 0x001000, CRC(edd8d560) SHA1(872211d21386cd9625b3735d7682e2b2ecff05b4) )
375 
376 	ROM_REGION(0x4000,"profile", 0)     // Profile/5 HDD
377 	ROM_LOAD_OPTIONAL("341-0080-b", 0x0000, 0x800, CRC(26df0b8d) SHA1(08f6689afb517e0a2bdaa48433003e62a66ae3c7)) // 341-0080-B z8 MCU piggyback ROM
378 
379 	// TODO: the 341-0193-A parallel interface card rom should be loaded here as well for the lisa 1 and 2/5?
380 
381 	ROM_REGION(0x100,"gfx1",0)      // video ROM (includes S/N)
382 	ROM_LOAD("vidstate.rom", 0x00, 0x100, CRC(75904783) SHA1(3b0023bd90f2ca1be0b099160a566b044856885d))
383 ROM_END
384 
385 ROM_START( lisa2 ) /* internal apple codename was 'pepsi'; has one SSDD 400K drive, ioa8 i/o rom */
386 	ROM_REGION16_BE(0x204000,"maincpu",0)   /* 68k rom and ram */
387 	ROM_DEFAULT_BIOS( "revh" )
388 
389 	ROM_SYSTEM_BIOS( 0, "revh", "LISA Bootrom Rev H (2/24/84)")
390 	ROMX_LOAD("341-0175-h", 0x000000, 0x2000, CRC(adfd4516) SHA1(97a89ce1218b8aa38f69f92f6f363f435c887914), ROM_SKIP(1) | ROM_BIOS(0)) // 341-0175-H LISA Bootrom Rev H (2/24/84) (High)
391 	ROMX_LOAD("341-0176-h", 0x000001, 0x2000, CRC(546d6603) SHA1(2a81e4d483f50ae8a2519621daeb7feb440a3e4d), ROM_SKIP(1) | ROM_BIOS(0)) // 341-0176-H LISA Bootrom Rev H (2/24/84) (Low)
392 
393 	ROM_SYSTEM_BIOS( 1, "revg", "LISA Bootrom Rev G (2/08/84)") // limited test release before release of rom rev H
394 	ROMX_LOAD("341-0175-g", 0x000000, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(1)) // 341-0175-G LISA Bootrom Rev G (2/08/84) (High)
395 	ROMX_LOAD("341-0176-g", 0x000001, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(1)) // 341-0176-G LISA Bootrom Rev G (2/08/84) (Low)
396 
397 	ROM_SYSTEM_BIOS( 2, "revf", "LISA Bootrom Rev F (12/21/83)")
398 	ROMX_LOAD("341-0175-f", 0x000000, 0x2000, CRC(701b9dab) SHA1(b116e5fada7b9a51f1b6e25757b2814d1b2737a5), ROM_SKIP(1) | ROM_BIOS(2)) // 341-0175-F LISA Bootrom Rev F (12/21/83) (High)
399 	ROMX_LOAD("341-0176-f", 0x000001, 0x2000, CRC(036010b6) SHA1(ac93e6dbe4ce59396d7d191ee3e3e79a504e518f), ROM_SKIP(1) | ROM_BIOS(2)) // 341-0176-F LISA Bootrom Rev F (12/21/83) (Low)
400 
401 	ROM_SYSTEM_BIOS( 3, "reve", "LISA Bootrom Rev E (10/20/83)")
402 	ROMX_LOAD("341-0175-e", 0x000000, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(3)) // 341-0175-E LISA Bootrom Rev E (10/20/83) (High)
403 	ROMX_LOAD("341-0176-e", 0x000001, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(3)) // 341-0176-E LISA Bootrom Rev E (10/20/83) (Low)
404 
405 	ROM_SYSTEM_BIOS( 4, "rev3b", "LISA Bootrom Rev 3B (9/8/83)") // Earliest lisa2 rom, prototype.
406 	ROMX_LOAD("341-0175-3b", 0x000000, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(4)) // ?label? 341-0175-3b LISA Bootrom Rev 3B (9/8/83) (High)
407 	ROMX_LOAD("341-0176-3b", 0x000001, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(4)) // ?label? 341-0176-3b LISA Bootrom Rev 3B (9/8/83) (Low)
408 
409 	ROM_REGION( 0x400, "iocop", 0 )
410 	ROM_LOAD("341-0064a.u9f", 0x000, 0x400, CRC(e6849910) SHA1(d46e67df75c9e3e773d20542fb9d5b1d2ac0fb9b))
411 
412 	ROM_REGION( 0x400, "kbcop", 0 )
413 	ROM_LOAD("341-0064a.u9f", 0x000, 0x400, CRC(e6849910) SHA1(d46e67df75c9e3e773d20542fb9d5b1d2ac0fb9b))
414 
415 	ROM_REGION(0x2000,"fdccpu",0)       // 6504 RAM and ROM
416 	ROM_LOAD("341-0290-b", 0x1000, 0x1000, CRC(bc6364f1) SHA1(f3164923330a51366a06d9d8a4a01ec7b0d3a8aa)) // 341-0290-B LISA 2/5 Disk Rom (ioa8), supports profile on external port
417 
418 	ROM_REGION(0x4000,"profile", 0)     // Profile/5 HDD
419 	ROM_LOAD_OPTIONAL("341-0080-b", 0x0000, 0x800, CRC(26df0b8d) SHA1(08f6689afb517e0a2bdaa48433003e62a66ae3c7)) // 341-0080-B z8 MCU piggyback ROM
420 
421 	// TODO: the 341-0193-A parallel interface card rom should be loaded here as well for the lisa 1 and 2/5?
422 
423 	ROM_REGION(0x100,"gfx1",0)      // video ROM (includes S/N)
424 	ROM_LOAD("vidstate.rom", 0x00, 0x100, CRC(75904783) SHA1(3b0023bd90f2ca1be0b099160a566b044856885d))
425 ROM_END
426 
427 ROM_START( lisa210 ) /* newer motherboard and i/o board; has io88 i/o rom, built in widget hdd */
428 	ROM_REGION16_BE(0x204000,"maincpu", 0)  /* 68k rom and ram */
429 	ROM_DEFAULT_BIOS( "revh" )
430 	ROM_SYSTEM_BIOS(0, "revh", "LISA Bootrom Rev H (2/24/84)")
431 	ROMX_LOAD("341-0175-h", 0x000000, 0x2000, CRC(adfd4516) SHA1(97a89ce1218b8aa38f69f92f6f363f435c887914), ROM_SKIP(1) | ROM_BIOS(0)) // 341-0175-H LISA Bootrom Rev H (2/24/84) (High)
432 	ROMX_LOAD("341-0176-h", 0x000001, 0x2000, CRC(546d6603) SHA1(2a81e4d483f50ae8a2519621daeb7feb440a3e4d), ROM_SKIP(1) | ROM_BIOS(0)) // 341-0176-H LISA Bootrom Rev H (2/24/84) (Low)
433 
434 	ROM_SYSTEM_BIOS(1, "revg", "LISA Bootrom Rev G (2/08/84)") // limited test release before release of rom rev H
435 	ROMX_LOAD("341-0175-g", 0x000000, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(1)) // 341-0175-G LISA Bootrom Rev G (2/08/84) (High)
436 	ROMX_LOAD("341-0176-g", 0x000001, 0x2000, NO_DUMP, ROM_SKIP(1) | ROM_BIOS(1)) // 341-0176-G LISA Bootrom Rev G (2/08/84) (Low)
437 
438 	ROM_SYSTEM_BIOS(2, "revf", "LISA Bootrom Rev F (12/21/83)")
439 	ROMX_LOAD("341-0175-f", 0x000000, 0x2000, CRC(701b9dab) SHA1(b116e5fada7b9a51f1b6e25757b2814d1b2737a5), ROM_SKIP(1) | ROM_BIOS(2)) // 341-0175-F LISA Bootrom Rev F (12/21/83) (High)
440 	ROMX_LOAD("341-0176-f", 0x000001, 0x2000, CRC(036010b6) SHA1(ac93e6dbe4ce59396d7d191ee3e3e79a504e518f), ROM_SKIP(1) | ROM_BIOS(2)) // 341-0176-F LISA Bootrom Rev F (12/21/83) (Low)
441 
442 	ROM_REGION( 0x400, "iocop", 0 )
443 	ROM_LOAD("341-0064a.u9f", 0x000, 0x400, CRC(e6849910) SHA1(d46e67df75c9e3e773d20542fb9d5b1d2ac0fb9b))
444 
445 	ROM_REGION( 0x400, "kbcop", 0 )
446 	ROM_LOAD("341-0064a.u9f", 0x000, 0x400, CRC(e6849910) SHA1(d46e67df75c9e3e773d20542fb9d5b1d2ac0fb9b))
447 
448 #if 1
449 	ROM_REGION(0x2000,"fdccpu", 0)      // 6504 RAM and ROM
450 	ROM_LOAD("341-0281-d", 0x1000, 0x1000, CRC(e343fe74) SHA1(a0e484ead2d2315fca261f39fff2f211ff61b0ef)) // 341-0281-D LISA 2/10 Disk Rom (io88), supports widget on internal port
451 #else
452 	ROM_REGION(0x2000,"fdccpu", 0)      // 6504 RAM and ROM
453 	ROM_LOAD("341-8003-c", 0x1000, 0x1000, CRC(8c67959a) SHA1(aa446b0c4acb4cb6c9d0adfbbea900fb8c04c1e9)) // 341-8003-C Sun Mac XL Disk rom for 800k drives (Rev C, from Goodwill XL) (io88800k)
454 	// Note: there are two earlier/alternate versions of this rom as well which are dumped */
455 #endif
456 
457 	ROM_REGION(0x4000,"widget", 0)      // Widget HDD controller
458 	ROM_LOAD("341-0288-a", 0x0000, 0x800, CRC(a26ef1c6) SHA1(5aaeb6ff7f7d4f7ce7c70402f75e82533635dda4)) // 341-0288-A z8 MCU piggyback ROM
459 	ROM_LOAD("341-0289-d", 0x2000, 0x2000, CRC(25e86e95) SHA1(72a346c2074d2256adde491b930023ebdcb5f51a)) // 341-0289-D external rom on widget board
460 
461 	ROM_REGION(0x100,"gfx1", 0)     // video ROM (includes S/N)
462 	ROM_LOAD("vidstate.rom", 0x00, 0x100, CRC(75904783) SHA1(3b0023bd90f2ca1be0b099160a566b044856885d))
463 ROM_END
464 
465 ROM_START( macxl )
466 	ROM_REGION16_BE(0x204000,"maincpu", 0)  /* 68k rom and ram */
467 	ROM_LOAD16_BYTE("341-0347-a", 0x000000, 0x2000, CRC(80add605) SHA1(82215688b778d8c712a8186235f7981e3dc4dd7f)) // 341-0347-A Mac XL '3A' Bootrom Hi (boot3a.hi)
468 	ROM_LOAD16_BYTE("341-0346-a", 0x000001, 0x2000, CRC(edf5222f) SHA1(b0388ee8dbbc51a2d628473dc29b65ce913fcd76)) // 341-0346-A Mac XL '3A' Bootrom Lo (boot3a.lo)
469 
470 	ROM_REGION( 0x400, "iocop", 0 )
471 	ROM_LOAD("341-0064a.u9f", 0x000, 0x400, CRC(e6849910) SHA1(d46e67df75c9e3e773d20542fb9d5b1d2ac0fb9b))
472 
473 	ROM_REGION( 0x400, "kbcop", 0 )
474 	ROM_LOAD("341-0064a.u9f", 0x000, 0x400, CRC(e6849910) SHA1(d46e67df75c9e3e773d20542fb9d5b1d2ac0fb9b))
475 
476 #if 1
477 	ROM_REGION(0x2000,"fdccpu", 0)      // 6504 RAM and ROM
478 	ROM_LOAD("341-0281-d", 0x1000, 0x1000, CRC(e343fe74) SHA1(a0e484ead2d2315fca261f39fff2f211ff61b0ef)) // 341-0281-D LISA 2/10 Disk Rom (io88), supports widget on internal port
479 #else
480 	ROM_REGION(0x2000,"fdccpu", 0)      // 6504 RAM and ROM
481 	ROM_LOAD("341-8003-c", 0x1000, 0x1000, CRC(8c67959a) SHA1(aa446b0c4acb4cb6c9d0adfbbea900fb8c04c1e9)) // 341-8003-C Sun Mac XL Disk rom for 800k drives (Rev C, from Goodwill XL) (io88800k)
482 	// Note: there are two earlier/alternate versions of this ROM as well which are dumped
483 #endif
484 
485 	ROM_REGION(0x100,"gfx1", 0)     // video ROM (includes S/N) ; no dump known, although Lisa ROM works fine at our level of emulation
486 	ROM_LOAD("vidstatem.rom", 0x00, 0x100, BAD_DUMP CRC(75904783) SHA1(3b0023bd90f2ca1be0b099160a566b044856885d))
487 ROM_END
488 
489 /*
490     Lisa drivers boot MacWorks, but do not boot the Lisa OS, which is why we set
491     the MACHINE_NOT_WORKING flag...
492 */
493 /*    YEAR  NAME     PARENT  COMPAT  MACHINE  INPUT  CLASS       INIT          COMPANY           FULLNAME */
494 COMP( 1983, lisa,    0,      0,      lisa,    lisa,  lisa_state, init_lisa2,   "Apple Computer", "Lisa",         MACHINE_NOT_WORKING )
495 COMP( 1984, lisa2,   0,      0,      lisa,    lisa,  lisa_state, init_lisa2,   "Apple Computer", "Lisa2",        MACHINE_NOT_WORKING )
496 COMP( 1984, lisa210, lisa2,  0,      lisa210, lisa,  lisa_state, init_lisa210, "Apple Computer", "Lisa2/10",     MACHINE_NOT_WORKING )
497 COMP( 1985, macxl,   lisa2,  0,      macxl,   lisa,  lisa_state, init_mac_xl,  "Apple Computer", "Macintosh XL", /*MACHINE_NOT_WORKING*/0 )
498 
499