1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 /******************************************************************************************
4
5 Kyocera Kyotronics 85 (and similar laptop computers)
6
7 2009/04 Very Preliminary Driver (video emulation courtesy of very old code by
8 Hamish Coleman)
9
10 Comments about bit usage from Tech References and Virtual T source.
11
12 Supported systems:
13 - Kyosei Kyotronic 85
14 - Olivetti M10 (slightly diff hw, BIOS is shifted by 2 words)
15 - NEC PC-8201A (slightly diff hw)
16 - TRS-80 Model 100
17 - Tandy Model 102 (slightly diff hw)
18 - Tandy Model 200 (diff video & rtc)
19
20 To Do:
21 - Find dumps of systems which could easily be added:
22 * Olivetti M10 Modem (US) (diff BIOS than the European version)
23 * NEC PC-8201 (original Japanese version of PC-8201A)
24 * NEC PC-8300 (similar hardware to PC-8201)
25 * NEC PC-8300 w/BradyWriter II ROMs
26
27 - bar code reader (!RxDB -> RST5.5, Hewlett-Packard HREDS-3050 interface)
28 - un-Y2K-hack tandy200
29 - keyboard is unresponsive for couple of seconds after boot, and rather slow thereafter
30 - soft power on/off
31 - pc8201 48K RAM option
32 - pc8201 NEC PC-8241A video interface (TMS9918, 16K videoRAM, 8K ROM)
33 - pc8201 NEC PC-8233 floppy controller
34 - pc8201 NEC floppy disc drives (PC-8031-1W, PC-8031-2W, PC-80S31)
35 - trsm100 Tandy Portable Disk Drive (TPDD: 100k 3?", TPDD2: 200k 3?") (undumped HD63A01V1 MCU + full custom uPD65002, serial comms via IM6042)
36 - trsm100 Chipmunk disk drive (384k 3?") (full custom logic, not going to happen)
37 - trsm100 RS232/modem select
38 - tandy200 RTC alarm
39 - tandy200 TCM5089 DTMF sound
40 - international keyboard option ROMs
41 - cassette is not working on pc8201, pc8201a, npc8300
42 - natural keyboard is far too slow to be usable; paste is useless
43
44 10 FOR A=0 TO 255
45 20 PRINT CHR$(A);
46 30 NEXT A
47
48
49 * PC-8201/8300 HARDWARE PORT DEFINITIONS *
50
51 -Port-
52 Name Hex Dec Notes
53 -------- --- --- -----------------------------------------
54 A8255 070 112 Video interface port A (8255)
55 B8255 071 113 Video interface port B (8255)
56 C8255 072 114 Video interface port C (8255)
57 CW8255 073 115 Video interface command/mode port (8255)
58
59 ******************************************************************************************/
60
61
62 #include "emu.h"
63 #include "includes/kyocera.h"
64 #include "speaker.h"
65
66 /* Read/Write Handlers */
67
bank_r()68 uint8_t pc8201_state::bank_r()
69 {
70 /*
71
72 bit signal description
73
74 0 LADR1 select address 0 to 7fff
75 1 LADR2 select address 0 to 7fff
76 2 HADR1 select address 8000 to ffff
77 3 HADR2 select address 8000 to ffff
78 4
79 5
80 6 SELB serial interface status bit 1
81 7 SELA serial interface status bit 0
82
83 */
84
85 return (m_iosel << 5) | m_bank;
86 }
87
bankswitch(uint8_t data)88 void pc8201_state::bankswitch(uint8_t data)
89 {
90 address_space &program = m_maincpu->space(AS_PROGRAM);
91
92 int rom_bank = data & 0x03;
93 int ram_bank = (data >> 2) & 0x03;
94
95 m_bank = data & 0x0f;
96
97 if (rom_bank > 1)
98 {
99 /* RAM */
100 program.install_readwrite_bank(0x0000, 0x7fff, "bank1");
101 }
102 else
103 {
104 /* ROM */
105 program.install_read_bank(0x0000, 0x7fff, "bank1");
106 program.unmap_write(0x0000, 0x7fff);
107 }
108
109 membank("bank1")->set_entry(rom_bank);
110
111 switch (ram_bank)
112 {
113 case 0:
114 if (m_ram->size() > 16 * 1024)
115 {
116 program.install_readwrite_bank(0x8000, 0xffff, "bank2");
117 }
118 else
119 {
120 program.unmap_readwrite(0x8000, 0xbfff);
121 program.install_readwrite_bank(0xc000, 0xffff, "bank2");
122 }
123 break;
124
125 case 1:
126 program.unmap_readwrite(0x8000, 0xffff);
127 break;
128
129 case 2:
130 if (m_ram->size() > 32 * 1024)
131 program.install_readwrite_bank(0x8000, 0xffff, "bank2");
132 else
133 program.unmap_readwrite(0x8000, 0xffff);
134 break;
135
136 case 3:
137 if (m_ram->size() > 64 * 1024)
138 program.install_readwrite_bank(0x8000, 0xffff, "bank2");
139 else
140 program.unmap_readwrite(0x8000, 0xffff);
141 break;
142 }
143
144 membank("bank2")->set_entry(ram_bank);
145 }
146
bank_w(uint8_t data)147 void pc8201_state::bank_w(uint8_t data)
148 {
149 /*
150
151 bit signal description
152
153 0 LADR1 select address 0 to 7fff
154 1 LADR2 select address 0 to 7fff
155 2 HADR1 select address 8000 to ffff
156 3 HADR2 select address 8000 to ffff
157 4
158 5
159 6
160 7
161
162 */
163 //printf("bank %02x\n",data);
164 bankswitch(data);
165 }
166
scp_w(uint8_t data)167 void pc8201_state::scp_w(uint8_t data)
168 {
169 /*
170
171 bit signal description
172
173 0
174 1
175 2
176 3 REMOTE cassette motor
177 4 TSTB RTC strobe
178 5 PSTB printer strobe
179 6 SELB serial interface select bit 1
180 7 SELA serial interface select bit 0
181
182 */
183
184 /* cassette motor */
185 m_cassette->change_state(BIT(data,3) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
186
187 /* RTC strobe */
188 m_rtc->stb_w(BIT(data, 4));
189
190 /* printer strobe */
191 m_centronics->write_strobe(BIT(data, 5));
192
193 /* serial interface select */
194 m_iosel = data >> 5;
195 }
196
uart_r()197 uint8_t kc85_state::uart_r()
198 {
199 if (!machine().side_effects_disabled())
200 {
201 m_uart->drr_w(0);
202 m_uart->drr_w(1);
203 }
204
205 return m_uart->read();
206 }
207
uart_ctrl_w(uint8_t data)208 void kc85_state::uart_ctrl_w(uint8_t data)
209 {
210 /*
211
212 bit signal description
213
214 0 SBS stop bit select
215 1 EPE even parity enable
216 2 PI parity inhibit
217 3 CLS1 character length select bit 1
218 4 CLS2 character length select bit 2
219 5
220 6
221 7
222
223 */
224
225 m_uart->sbs_w(BIT(data, 0));
226 m_uart->epe_w(BIT(data, 1));
227 m_uart->pi_w(BIT(data, 2));
228 m_uart->cls1_w(BIT(data, 3));
229 m_uart->cls2_w(BIT(data, 4));
230
231 m_uart->crl_w(1);
232 }
233
uart_status_r()234 uint8_t kc85_state::uart_status_r()
235 {
236 /*
237
238 bit signal description
239
240 0 CD carrier detect
241 1 OE overrun error
242 2 FE framing error
243 3 PE parity error
244 4 TBRE transmit buffer register empty
245 5 RP
246 6 +5V
247 7 _LPS low power sensor
248
249 */
250
251 uint8_t data = 0x40;
252
253 // carrier detect
254 data |= m_rs232->dcd_r();
255
256 // overrun error
257 data |= m_uart->oe_r() << 1;
258
259 // framing error
260 data |= m_uart->fe_r() << 2;
261
262 // parity error
263 data |= m_uart->pe_r() << 3;
264
265 // transmit buffer register empty
266 data |= m_uart->tbre_r() << 4;
267
268 // rp TODO
269 data |= 0x20;
270
271 // low power sensor
272 data |= BIT(m_battery->read(), 0) << 7;
273
274 return data;
275 }
276
uart_status_r()277 uint8_t pc8201_state::uart_status_r()
278 {
279 /*
280
281 bit signal description
282
283 0 _DCD/_RD data carrier detect / ring detect
284 1 OE overrun error
285 2 FE framing error
286 3 PE parity error
287 4 TBRE transmit buffer register empty
288 5 RP
289 6 +5V
290 7 _LPS low power signal
291
292 */
293
294 uint8_t data = 0x40;
295
296 // data carrier detect / ring detect
297 data |= m_rs232->dcd_r();
298
299 // overrun error
300 data |= m_uart->oe_r() << 1;
301
302 // framing error
303 data |= m_uart->fe_r() << 2;
304
305 // parity error
306 data |= m_uart->pe_r() << 3;
307
308 // transmit buffer register empty
309 data |= m_uart->tbre_r() << 4;
310
311 // rp TODO
312 data |= 0x20;
313
314 // low power sensor
315 data |= BIT(m_battery->read(), 0) << 7;
316
317 return data;
318 }
319
romah_w(uint8_t data)320 void pc8201_state::romah_w(uint8_t data)
321 {
322 /*
323
324 bit signal
325
326 0 A16
327 1 ROM SEL
328 2
329 3
330 4
331 5
332 6
333 7
334
335 */
336
337 // ROM address bit 16
338 m_rom_addr = (BIT(data, 0) << 16) | (m_rom_addr & 0xffff);
339
340 // ROM select
341 m_rom_sel = BIT(data, 1);
342 }
343
romal_w(uint8_t data)344 void pc8201_state::romal_w(uint8_t data)
345 {
346 /*
347
348 bit signal
349
350 0 A0
351 1 A1
352 2 A2
353 3 A3
354 4 A4
355 5 A5
356 6 A6
357 7 A7
358
359 */
360
361 m_rom_addr = (m_rom_addr & 0x1ff00) | data;
362 }
363
romam_w(uint8_t data)364 void pc8201_state::romam_w(uint8_t data)
365 {
366 /*
367
368 bit signal
369
370 0 A8
371 1 A9
372 2 A10
373 3 A11
374 4 A12
375 5 A13
376 6 A14
377 7 A15
378
379 */
380
381 m_rom_addr = (m_rom_addr & 0x100ff) | (data << 8);
382 }
383
romrd_r()384 uint8_t pc8201_state::romrd_r()
385 {
386 uint8_t data = 0xff;
387
388 if (m_rom_sel)
389 data = m_cas_cart->read_rom(m_rom_addr & 0x1ffff);
390
391 return data;
392 }
393
modem_w(uint8_t data)394 void kc85_state::modem_w(uint8_t data)
395 {
396 /*
397
398 bit signal description
399
400 0 telephone line signal selection relay output
401 1 EN MC14412 enable output
402 2
403 3
404 4
405 5
406 6
407 7
408
409 */
410
411 //m_modem->en_w(BIT(data, 1));
412 }
413
ctrl_w(uint8_t data)414 void kc85_state::ctrl_w(uint8_t data)
415 {
416 /*
417
418 bit signal description
419
420 0 _STROM ROM selection (0=standard, 1=option)
421 1 _STROBE printer strobe output
422 2 STB RTC strobe output
423 3 _REMOTE cassette motor
424 4
425 5
426 6
427 7
428
429 */
430
431 /* ROM bank selection */
432 membank("bank1")->set_entry(BIT(data, 0));
433
434 /* printer strobe */
435 m_centronics->write_strobe(BIT(data, 1));
436
437 /* RTC strobe */
438 m_rtc->stb_w(BIT(data, 2));
439
440 /* cassette motor */
441 m_cassette->change_state(BIT(data,3) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
442 }
443
keyboard_r()444 uint8_t kc85_state::keyboard_r()
445 {
446 uint8_t data = 0xff;
447
448 for (u8 i = 0; i < 9; i++)
449 if (!BIT(m_keylatch, i)) data &= m_y[i]->read();
450
451 return data;
452 }
453
bankswitch(uint8_t data)454 void tandy200_state::bankswitch(uint8_t data)
455 {
456 address_space &program = m_maincpu->space(AS_PROGRAM);
457
458 int rom_bank = data & 0x03;
459 int ram_bank = (data >> 2) & 0x03;
460
461 m_bank = data & 0x0f;
462
463 if (rom_bank == 3)
464 {
465 /* invalid ROM bank */
466 program.unmap_readwrite(0x0000, 0x7fff);
467 }
468 else
469 {
470 program.install_read_bank(0x0000, 0x7fff, "bank1");
471 program.unmap_write(0x0000, 0x7fff);
472 membank("bank1")->set_entry(rom_bank);
473 }
474
475 if (m_ram->size() < ((ram_bank + 1) * 24 * 1024))
476 {
477 /* invalid RAM bank */
478 program.unmap_readwrite(0xa000, 0xffff);
479 }
480 else
481 {
482 program.install_readwrite_bank(0xa000, 0xffff, "bank2");
483 membank("bank2")->set_entry(ram_bank);
484 }
485 }
486
bank_r()487 uint8_t tandy200_state::bank_r()
488 {
489 return m_bank;
490 }
491
bank_w(uint8_t data)492 void tandy200_state::bank_w(uint8_t data)
493 {
494 bankswitch(data);
495 }
496
stbk_r()497 uint8_t tandy200_state::stbk_r()
498 {
499 uint8_t data = 0xff;
500
501 for (u8 i = 0; i < 9; i++)
502 if (!BIT(m_keylatch, i)) data &= m_y[i]->read();
503
504 return data;
505 }
506
stbk_w(uint8_t data)507 void tandy200_state::stbk_w(uint8_t data)
508 {
509 /*
510
511 bit signal description
512
513 0 _PSTB printer strobe output
514 1 REMOTE cassette motor
515 2
516 3
517 4
518 5
519 6
520 7
521
522 */
523
524 /* printer strobe */
525 m_centronics->write_strobe(BIT(data, 0));
526
527 /* cassette motor */
528 m_cassette->change_state(BIT(data,1) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
529 }
530
lcd_r(offs_t offset)531 uint8_t kc85_state::lcd_r(offs_t offset)
532 {
533 uint8_t data = 0;
534
535 for (uint8_t i = 0; i < 10; i++)
536 data |= m_lcdc[i]->read(offset);
537
538 return data;
539 }
540
lcd_w(offs_t offset,uint8_t data)541 void kc85_state::lcd_w(offs_t offset, uint8_t data)
542 {
543 for (uint8_t i = 0; i < 10; i++)
544 m_lcdc[i]->write(offset, data);
545 }
546
547 /* Memory Maps */
548
kc85_mem(address_map & map)549 void kc85_state::kc85_mem(address_map &map)
550 {
551 map.unmap_value_high();
552 map(0x0000, 0x7fff).bankr("bank1");
553 map(0x8000, 0xffff).bankrw("bank2");
554 }
555
pc8201_mem(address_map & map)556 void pc8201_state::pc8201_mem(address_map &map)
557 {
558 map.unmap_value_high();
559 map(0x0000, 0x7fff).bankrw("bank1");
560 map(0x8000, 0xffff).bankrw("bank2");
561 }
562
tandy200_mem(address_map & map)563 void tandy200_state::tandy200_mem(address_map &map)
564 {
565 map.unmap_value_high();
566 map(0x0000, 0x7fff).bankr("bank1");
567 map(0x8000, 0x9fff).rom();
568 map(0xa000, 0xffff).bankrw("bank2");
569 }
570
kc85_io(address_map & map)571 void kc85_state::kc85_io(address_map &map)
572 {
573 map.unmap_value_high();
574 // map(0x70, 0x70).mirror(0x0f); optional RAM unit
575 // map(0x80, 0x80).mirror(0x0f); optional I/O controller unit
576 // map(0x90, 0x90).mirror(0x0f); optional answering telephone unit
577 // map(0xa0, 0xa0).mirror(0x0f); optional modem
578 map(0xb0, 0xb7).mirror(0x08).rw(I8155_TAG, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
579 map(0xc0, 0xc0).mirror(0x0f).r(FUNC(kc85_state::uart_r)).w(m_uart, FUNC(im6402_device::write));
580 map(0xd0, 0xd0).mirror(0x0f).rw(FUNC(kc85_state::uart_status_r), FUNC(kc85_state::uart_ctrl_w));
581 map(0xe0, 0xe0).mirror(0x0f).rw(FUNC(kc85_state::keyboard_r), FUNC(kc85_state::ctrl_w));
582 map(0xf0, 0xf1).mirror(0x0e).rw(FUNC(kc85_state::lcd_r), FUNC(kc85_state::lcd_w));
583 }
584
trsm100_io(address_map & map)585 void kc85_state::trsm100_io(address_map &map)
586 {
587 kc85_io(map);
588 map(0xa0, 0xa0).mirror(0x0f).w(FUNC(kc85_state::modem_w));
589 }
590
pc8201_io(address_map & map)591 void pc8201_state::pc8201_io(address_map &map)
592 {
593 map.unmap_value_high();
594 // map(0x70, 0x70).mirror(0x0f); optional video interface 8255
595 map(0x80, 0x80).mirror(0x03).w(FUNC(pc8201_state::romah_w));
596 map(0x84, 0x84).mirror(0x03).w(FUNC(pc8201_state::romal_w));
597 map(0x88, 0x88).mirror(0x03).w(FUNC(pc8201_state::romam_w));
598 map(0x8c, 0x8c).mirror(0x03).r(FUNC(pc8201_state::romrd_r));
599 map(0x90, 0x90).mirror(0x0f).w(FUNC(pc8201_state::scp_w));
600 map(0xa0, 0xa0).mirror(0x0f).rw(FUNC(pc8201_state::bank_r), FUNC(pc8201_state::bank_w));
601 map(0xb0, 0xb7).mirror(0x08).rw(I8155_TAG, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
602 map(0xc0, 0xc0).mirror(0x0f).r(FUNC(pc8201_state::uart_r)).w(m_uart, FUNC(im6402_device::write));
603 map(0xd0, 0xd0).mirror(0x0f).r(FUNC(pc8201_state::uart_status_r)).w(FUNC(pc8201_state::uart_ctrl_w));
604 map(0xe0, 0xe0).mirror(0x0f).r(FUNC(pc8201_state::keyboard_r));
605 map(0xf0, 0xf1).mirror(0x0e).rw(FUNC(pc8201_state::lcd_r), FUNC(pc8201_state::lcd_w));
606 }
607
tandy200_io(address_map & map)608 void tandy200_state::tandy200_io(address_map &map)
609 {
610 map.unmap_value_high();
611 map(0x90, 0x9f).rw(m_rtc, FUNC(rp5c01_device::read), FUNC(rp5c01_device::write));
612 // map(0xa0, 0xa0).mirror(0x0f).w(TCM5089_TAG, FUNC(tcm5089_device::write));
613 map(0xb0, 0xb7).mirror(0x08).rw(I8155_TAG, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
614 map(0xc0, 0xc1).mirror(0x0e).rw(I8251_TAG, FUNC(i8251_device::read), FUNC(i8251_device::write));
615 map(0xd0, 0xd0).mirror(0x0f).rw(FUNC(tandy200_state::bank_r), FUNC(tandy200_state::bank_w));
616 map(0xe0, 0xe0).mirror(0x0f).rw(FUNC(tandy200_state::stbk_r), FUNC(tandy200_state::stbk_w));
617 map(0xf0, 0xf0).mirror(0x0e).rw(m_lcdc, FUNC(hd61830_device::data_r), FUNC(hd61830_device::data_w));
618 map(0xf1, 0xf1).mirror(0x0e).rw(m_lcdc, FUNC(hd61830_device::status_r), FUNC(hd61830_device::control_w));
619 }
620
621 /* Input Ports */
622
623 static INPUT_PORTS_START( kc85 )
624 PORT_START("Y0")
PORT_CODE(KEYCODE_L)625 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
626 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
627 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
628 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
629 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
630 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
631 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
632 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
633
634 PORT_START("Y1")
635 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
636 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
637 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
638 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
639 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
640 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
641 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
642 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
643
644 PORT_START("Y2")
645 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
646 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
647 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
648 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
649 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
650 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
651 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
652 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
653
654 PORT_START("Y3")
655 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
656 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
657 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
658 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"')
659 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
660 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR(']')
661 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
662 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
663
664 PORT_START("Y4")
665 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
666 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
667 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
668 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
669 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
670 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
671 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
672 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
673
674 PORT_START("Y5")
675 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
676 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
677 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
678 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
679 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
680 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
681 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
682 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
683
684 PORT_START("Y6")
685 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
686 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PRINT") PORT_CODE(KEYCODE_F11) PORT_CHAR(UCHAR_MAMEKEY(F11))
687 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("LABEL") PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10))
688 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PASTE") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))
689 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
690 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x92|") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
691 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("DEL BKSP") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
692 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
693
694 PORT_START("Y7")
695 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F8") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
696 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F7") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
697 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F6") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
698 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
699 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
700 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
701 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
702 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
703
704 PORT_START("Y8")
705 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PAUSE BREAK") PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12))
706 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
707 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
708 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("NUM") PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL))
709 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CODE") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(RALT))
710 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("GRAPH") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
711 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
712 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
713
714 PORT_START("BATTERY")
715 PORT_CONFNAME( 0x01, 0x01, "Battery Status" )
716 PORT_CONFSETTING( 0x01, DEF_STR( Normal ) )
717 PORT_CONFSETTING( 0x00, "Low Battery" )
718 INPUT_PORTS_END
719
720 static INPUT_PORTS_START( pc8201 )
721 PORT_INCLUDE( kc85 )
722
723 PORT_MODIFY("Y3")
724 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR('^') PORT_CHAR('_')
725 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
726 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
727 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
728 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(165) PORT_CHAR(']')
729 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') PORT_CHAR('[')
730
731 PORT_MODIFY("Y4")
732 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
733 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
734 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
735 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
736
737 PORT_MODIFY("Y5")
738 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("DEL BS") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
739 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PAST INS") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
740 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
741 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
742 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
743 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
744 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
745 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
746
747 PORT_MODIFY("Y6")
748 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
749 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
750 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27)
751 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
752 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
753 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
754 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
755 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
756
757 PORT_MODIFY("Y7")
758 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("STOP") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
759 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
760 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
761 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("f.5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
762 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("f.4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
763 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("f.3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
764 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("f.2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
765 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("f.1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
766
767 PORT_MODIFY("Y8")
768 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
769 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
770 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
771 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
772 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("JIS") PORT_CODE(KEYCODE_0_PAD)
773 INPUT_PORTS_END
774
775 static INPUT_PORTS_START( pc8201a )
776 PORT_INCLUDE( kc85 )
777
778 PORT_MODIFY("Y3")
779 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(']') PORT_CHAR('}')
780 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
781 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
782 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
783 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('\\') PORT_CHAR('|')
784 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') PORT_CHAR('^')
785
786 PORT_MODIFY("Y4")
787 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
788 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
789 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
790 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
791
792 PORT_MODIFY("Y5")
793 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PAST INS") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
794 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
795 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RALT) PORT_CHAR('[') PORT_CHAR('{')
796 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
797 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
798 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
799 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('_')
800 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
801
802 PORT_MODIFY("Y6")
803 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC)
804 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x92|") PORT_CODE(KEYCODE_TAB)
805 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
806 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
807 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
808 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
809 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("DEL BKSP") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
810
811 PORT_MODIFY("Y7")
812 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("STOP") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
813 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
814 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
815 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("f.5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
816 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("f.4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
817 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("f.3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
818 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("f.2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
819 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("f.1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
820
821 PORT_MODIFY("Y8")
822 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
823 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
824 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
825 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
826 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
827 INPUT_PORTS_END
828
829 /* There's more than one keyboard layout for the m10. A quick search showed
830 - QWERTZ with +* (in top left corner) [Germany?]
831 - QWERTY with [{ [UK and US versions]
832 - QZERTY with $& [Italy?]
833 but our machine is different again, unable to find a specific photo of it. Could be French. */
834 static INPUT_PORTS_START( olivm10 )
835 PORT_START("Y0")
836 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('(') PORT_CHAR('5')
837 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('\'') PORT_CHAR('4')
838 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('"') PORT_CHAR('3')
839 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR(233) PORT_CHAR('2')
840 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR(163) PORT_CHAR('1')
841 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('$') PORT_CHAR('*')
842 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('z') PORT_CHAR('Z')
843 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('a') PORT_CHAR('A')
844
845 PORT_START("Y1")
846 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
847 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR(')') PORT_CHAR(176)
848 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR(224) PORT_CHAR('0')
849 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR(199) PORT_CHAR('9')
850 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('_') PORT_CHAR('8')
851 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR(232) PORT_CHAR('7')
852 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('-') PORT_CHAR('6')
853 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
854
855 PORT_START("Y2")
856 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR(',') PORT_CHAR('?')
857 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(';') PORT_CHAR('.')
858 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR(':') PORT_CHAR('/')
859 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('!') PORT_CHAR(167)
860 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(249) PORT_CHAR('%')
861 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR('m') PORT_CHAR('M')
862 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('^') PORT_CHAR(168)
863 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('`') PORT_CHAR('&')
864
865 PORT_START("Y3")
866 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
867 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
868 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
869 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
870 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
871 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('w') PORT_CHAR('W')
872 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('<') PORT_CHAR('>')
873 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('q') PORT_CHAR('Q')
874
875 PORT_START("Y4")
876 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
877 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
878 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
879 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
880 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
881 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
882 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
883 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
884
885 PORT_START("Y5")
886 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
887 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
888 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
889 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
890 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
891 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
892 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
893 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
894
895 PORT_START("Y6")
896 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PASTE") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))
897 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
898 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x92|") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
899 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("DEL BS") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
900 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
901 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
902 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
903 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
904
905 PORT_START("Y7")
906 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F8") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
907 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F7") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
908 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F6") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
909 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
910 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
911 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
912 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
913 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
914
915 PORT_START("Y8")
916 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PAUSE BREAK") PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12))
917 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
918 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("NUM") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(RALT))
919 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("GRAPH") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
920 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
921 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
922 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PRINT") PORT_CODE(KEYCODE_F11) PORT_CHAR(UCHAR_MAMEKEY(F11))
923 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("LABEL") PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10))
924
925 PORT_START("BATTERY")
926 PORT_CONFNAME( 0x01, 0x01, "Battery Status" )
927 PORT_CONFSETTING( 0x01, DEF_STR( Normal ) )
928 PORT_CONFSETTING( 0x00, "Low Battery" )
929 INPUT_PORTS_END
930
931
932 /* 8155 Interface */
933
934 void kc85_state::i8155_pa_w(uint8_t data)
935 {
936 /*
937
938 bit description
939
940 0 LCD chip select 0, key scan 0, RTC C0
941 1 LCD chip select 1, key scan 1, RTC C1
942 2 LCD chip select 2, key scan 2, RTC C2
943 3 LCD chip select 3, key scan 3, RTC CLK
944 4 LCD chip select 4, key scan 4, RTC DATA IN
945 5 LCD chip select 5, key scan 5
946 6 LCD chip select 6, key scan 6
947 7 LCD chip select 7, key scan 7
948
949 */
950
951 /* keyboard */
952 m_keylatch = (m_keylatch & 0x100) | data;
953
954 /* LCD */
955 for (uint8_t i = 0; i < 8; i++)
956 m_lcdc[i]->cs2_w(BIT(data, i));
957
958 /* RTC */
959 m_rtc->c0_w(BIT(data, 0));
960 m_rtc->c1_w(BIT(data, 1));
961 m_rtc->c2_w(BIT(data, 2));
962 m_rtc->clk_w(BIT(data, 3));
963 m_rtc->data_in_w(BIT(data, 4));
964 }
965
i8155_pb_w(uint8_t data)966 void kc85_state::i8155_pb_w(uint8_t data)
967 {
968 /*
969
970 bit signal description
971
972 0 LCD chip select 8, key scan 8
973 1 LCD chip select 9
974 2 _MC melody control output
975 3 DCD/_RD RS232 DCD/_RD select (0=RS232, 1=modem)
976 4 APO auto power off output
977 5 BELL buzzer output (0=ring, 1=not ring)
978 6 _DTR RS232 data terminal ready output
979 7 _RTS RS232 request to send output
980
981 */
982
983 /* keyboard */
984 m_keylatch = (BIT(data, 0) << 8) | (m_keylatch & 0xff);
985
986 /* LCD */
987 m_lcdc[8]->cs2_w(BIT(data, 0));
988 m_lcdc[9]->cs2_w(BIT(data, 1));
989
990 /* beeper */
991 m_buzzer = BIT(data, 2);
992 m_bell = BIT(data, 5);
993
994 if (m_buzzer) m_speaker->level_w(m_bell);
995
996 // RS-232
997 m_rs232->write_dtr(BIT(data, 6));
998 m_rs232->write_rts(BIT(data, 7));
999 }
1000
WRITE_LINE_MEMBER(kc85_state::write_centronics_busy)1001 WRITE_LINE_MEMBER( kc85_state::write_centronics_busy )
1002 {
1003 m_centronics_busy = state;
1004 }
1005
WRITE_LINE_MEMBER(kc85_state::write_centronics_select)1006 WRITE_LINE_MEMBER( kc85_state::write_centronics_select )
1007 {
1008 m_centronics_select = state;
1009 }
1010
i8155_pc_r()1011 uint8_t kc85_state::i8155_pc_r()
1012 {
1013 /*
1014
1015 bit description
1016
1017 0 CDI clock data input
1018 1 SLCT _BUSY signal from printer
1019 2 BUSY BUSY signal from printer
1020 3 BCR bar code reader data input
1021 4 _CTS RS232 clear to send input
1022 5 _DSR RS232 DSR input
1023
1024 */
1025
1026 uint8_t data = 0;
1027
1028 // clock data input
1029 data |= m_rtc->data_out_r();
1030
1031 // centronics busy
1032 data |= m_centronics_select << 1;
1033 data |= m_centronics_busy << 2;
1034
1035 // RS-232
1036 data |= m_rs232->cts_r() << 4;
1037 data |= m_rs232->dsr_r() << 5;
1038
1039 return data;
1040 }
1041
WRITE_LINE_MEMBER(kc85_state::i8155_to_w)1042 WRITE_LINE_MEMBER( kc85_state::i8155_to_w )
1043 {
1044 if (!m_buzzer && m_bell)
1045 {
1046 m_speaker->level_w(state);
1047 }
1048
1049 m_uart->trc_w(state);
1050 m_uart->rrc_w(state);
1051 }
1052
i8155_pa_w(uint8_t data)1053 void tandy200_state::i8155_pa_w(uint8_t data)
1054 {
1055 /*
1056
1057 bit description
1058
1059 0 print data 0, key scan 0
1060 1 print data 1, key scan 1
1061 2 print data 2, key scan 2
1062 3 print data 3, key scan 3
1063 4 print data 4, key scan 4
1064 5 print data 5, key scan 5
1065 6 print data 6, key scan 6
1066 7 print data 7, key scan 7
1067
1068 */
1069
1070 m_cent_data_out->write(data);
1071
1072 m_keylatch = (m_keylatch & 0x100) | data;
1073 }
1074
i8155_pb_w(uint8_t data)1075 void tandy200_state::i8155_pb_w(uint8_t data)
1076 {
1077 /*
1078
1079 bit signal description
1080
1081 0 key scan 8
1082 1 ORIG/ANS (1=ORIG, 0=ANS)
1083 2 _BUZZER (0=data from 8155 TO, 1=data from PB2)
1084 3 _RS232C (1=modem, 0=RS-232)
1085 4 PCS power cut signal
1086 5 BELL buzzer data output
1087 6 MEN modem enable output
1088 7 CALL connects and disconnects the phone line
1089
1090 */
1091
1092 /* keyboard */
1093 m_keylatch = (BIT(data, 0) << 8) | (m_keylatch & 0xff);
1094
1095 /* beeper */
1096 m_buzzer = BIT(data, 2);
1097 m_bell = BIT(data, 5);
1098
1099 if (m_buzzer) m_speaker->level_w(m_bell);
1100 }
1101
WRITE_LINE_MEMBER(tandy200_state::write_centronics_busy)1102 WRITE_LINE_MEMBER( tandy200_state::write_centronics_busy )
1103 {
1104 m_centronics_busy = state;
1105 }
1106
WRITE_LINE_MEMBER(tandy200_state::write_centronics_select)1107 WRITE_LINE_MEMBER( tandy200_state::write_centronics_select )
1108 {
1109 m_centronics_select = state;
1110 }
1111
i8155_pc_r()1112 uint8_t tandy200_state::i8155_pc_r()
1113 {
1114 /*
1115
1116 bit signal description
1117
1118 0 _LPS low power sense input
1119 1 _BUSY not busy input
1120 2 BUSY busy input
1121 3 BCR bar code reader data input
1122 4 CD carrier detect input
1123 5 CDBD carrier detect break down input
1124
1125 */
1126
1127 uint8_t data = 0x01;
1128
1129 // centronics
1130 data |= m_centronics_select << 1;
1131 data |= m_centronics_busy << 2;
1132
1133 // RS-232
1134 data |= m_rs232->dcd_r() << 4;
1135
1136 return data;
1137 }
1138
WRITE_LINE_MEMBER(tandy200_state::i8155_to_w)1139 WRITE_LINE_MEMBER( tandy200_state::i8155_to_w )
1140 {
1141 if (!m_buzzer && m_bell)
1142 {
1143 m_speaker->level_w(state);
1144 }
1145 }
1146
1147 /* Machine Drivers */
1148
machine_start()1149 void kc85_state::machine_start()
1150 {
1151 address_space &program = m_maincpu->space(AS_PROGRAM);
1152
1153 std::string region_tag;
1154 m_opt_region = memregion(region_tag.assign(m_opt_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
1155
1156 /* initialize RTC */
1157 m_rtc->cs_w(1);
1158 m_rtc->oe_w(1);
1159
1160 /* configure ROM banking */
1161 program.install_read_bank(0x0000, 0x7fff, "bank1");
1162 program.unmap_write(0x0000, 0x7fff);
1163 membank("bank1")->configure_entry(0, m_rom->base());
1164 membank("bank1")->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base());
1165 membank("bank1")->set_entry(0);
1166
1167 /* configure RAM banking */
1168 switch (m_ram->size())
1169 {
1170 case 16 * 1024:
1171 program.unmap_readwrite(0x8000, 0xbfff);
1172 program.install_readwrite_bank(0xc000, 0xffff, "bank2");
1173 break;
1174
1175 case 32 * 1024:
1176 program.install_readwrite_bank(0x8000, 0xffff,"bank2");
1177 break;
1178 }
1179
1180 membank("bank2")->configure_entry(0, m_ram->pointer());
1181 membank("bank2")->set_entry(0);
1182
1183 /* register for state saving */
1184 save_item(NAME(m_bank));
1185 save_item(NAME(m_keylatch));
1186 save_item(NAME(m_buzzer));
1187 save_item(NAME(m_bell));
1188 save_item(NAME(m_centronics_busy));
1189 save_item(NAME(m_centronics_select));
1190 }
1191
machine_start()1192 void pc8201_state::machine_start()
1193 {
1194 uint8_t *ram = m_ram->pointer();
1195
1196 std::string region_tag;
1197 m_opt_region = memregion(region_tag.assign(m_opt_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
1198
1199 /* initialize RTC */
1200 m_rtc->cs_w(1);
1201 m_rtc->oe_w(1);
1202
1203 /* configure ROM banking */
1204 membank("bank1")->configure_entry(0, m_rom->base());
1205 membank("bank1")->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base());
1206 membank("bank1")->configure_entries(2, 2, ram + 0x8000, 0x8000);
1207 membank("bank1")->set_entry(0);
1208
1209 /* configure RAM banking */
1210 membank("bank2")->configure_entry(0, ram);
1211 membank("bank2")->configure_entries(2, 2, ram + 0x8000, 0x8000);
1212 membank("bank2")->set_entry(0);
1213
1214 bankswitch(0);
1215
1216 /* register for state saving */
1217 save_item(NAME(m_bank));
1218 save_item(NAME(m_keylatch));
1219 save_item(NAME(m_buzzer));
1220 save_item(NAME(m_bell));
1221 save_item(NAME(m_centronics_busy));
1222 save_item(NAME(m_centronics_select));
1223 save_item(NAME(m_rom_sel));
1224 save_item(NAME(m_rom_addr));
1225 save_item(NAME(m_iosel));
1226 }
1227
machine_start()1228 void trsm100_state::machine_start()
1229 {
1230 address_space &program = m_maincpu->space(AS_PROGRAM);
1231
1232 std::string region_tag;
1233 m_opt_region = memregion(region_tag.assign(m_opt_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
1234
1235 /* initialize RTC */
1236 m_rtc->cs_w(1);
1237 m_rtc->oe_w(1);
1238
1239 /* configure ROM banking */
1240 program.install_read_bank(0x0000, 0x7fff, "bank1");
1241 program.unmap_write(0x0000, 0x7fff);
1242 membank("bank1")->configure_entry(0, m_rom->base());
1243 membank("bank1")->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base());
1244 membank("bank1")->set_entry(0);
1245
1246 /* configure RAM banking */
1247 switch (m_ram->size())
1248 {
1249 case 8 * 1024:
1250 program.unmap_readwrite(0x8000, 0xcfff);
1251 program.install_readwrite_bank(0xe000, 0xffff, "bank2");
1252 break;
1253
1254 case 16 * 1024:
1255 program.unmap_readwrite(0x8000, 0xbfff);
1256 program.install_readwrite_bank(0xc000, 0xffff, "bank2");
1257 break;
1258
1259 case 24 * 1024:
1260 program.unmap_readwrite(0x8000, 0x9fff);
1261 program.install_readwrite_bank(0xa000, 0xffff, "bank2");
1262 break;
1263
1264 case 32 * 1024:
1265 program.install_readwrite_bank(0x8000, 0xffff, "bank2");
1266 break;
1267 }
1268
1269 membank("bank2")->configure_entry(0, m_ram->pointer());
1270 membank("bank2")->set_entry(0);
1271
1272 /* register for state saving */
1273 save_item(NAME(m_bank));
1274 save_item(NAME(m_keylatch));
1275 save_item(NAME(m_buzzer));
1276 save_item(NAME(m_bell));
1277 save_item(NAME(m_centronics_busy));
1278 save_item(NAME(m_centronics_select));
1279 }
1280
machine_start()1281 void tandy200_state::machine_start()
1282 {
1283 std::string region_tag;
1284 m_opt_region = memregion(region_tag.assign(m_opt_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
1285
1286 /* configure ROM banking */
1287 membank("bank1")->configure_entry(0, m_rom->base());
1288 membank("bank1")->configure_entry(1, m_rom->base() + 0x10000);
1289 membank("bank1")->configure_entry(2, m_opt_region ? m_opt_region->base() : m_rom->base());
1290 membank("bank1")->set_entry(0);
1291
1292 /* configure RAM banking */
1293 membank("bank2")->configure_entries(0, 3, m_ram->pointer(), 0x6000);
1294 membank("bank2")->set_entry(0);
1295
1296 /* register for state saving */
1297 save_item(NAME(m_bank));
1298 save_item(NAME(m_keylatch));
1299 save_item(NAME(m_buzzer));
1300 save_item(NAME(m_bell));
1301 save_item(NAME(m_centronics_busy));
1302 save_item(NAME(m_centronics_select));
1303 save_item(NAME(m_tp));
1304 }
1305
WRITE_LINE_MEMBER(kc85_state::kc85_sod_w)1306 WRITE_LINE_MEMBER( kc85_state::kc85_sod_w )
1307 {
1308 m_cassette->output(state ? +1.0 : -1.0);
1309 }
1310
READ_LINE_MEMBER(kc85_state::kc85_sid_r)1311 READ_LINE_MEMBER( kc85_state::kc85_sid_r )
1312 {
1313 return (m_cassette->input() > 0.04) ? 0 : 1;
1314 }
1315
WRITE_LINE_MEMBER(tandy200_state::kc85_sod_w)1316 WRITE_LINE_MEMBER( tandy200_state::kc85_sod_w )
1317 {
1318 m_cassette->output(state ? +1.0 : -1.0);
1319 }
1320
READ_LINE_MEMBER(tandy200_state::kc85_sid_r)1321 READ_LINE_MEMBER( tandy200_state::kc85_sid_r )
1322 {
1323 return (m_cassette->input() > 0.04) ? 0 : 1;
1324 }
1325
TIMER_DEVICE_CALLBACK_MEMBER(tandy200_state::tandy200_tp_tick)1326 TIMER_DEVICE_CALLBACK_MEMBER(tandy200_state::tandy200_tp_tick)
1327 {
1328 m_maincpu->set_input_line(I8085_RST75_LINE, m_tp);
1329
1330 m_tp = !m_tp;
1331 }
1332
kc85(machine_config & config)1333 void kc85_state::kc85(machine_config &config)
1334 {
1335 /* basic machine hardware */
1336 I8085A(config, m_maincpu, XTAL(4'915'200));
1337 m_maincpu->set_addrmap(AS_PROGRAM, &kc85_state::kc85_mem);
1338 m_maincpu->set_addrmap(AS_IO, &kc85_state::kc85_io);
1339 m_maincpu->in_sid_func().set(FUNC(kc85_state::kc85_sid_r));
1340 m_maincpu->out_sod_func().set(FUNC(kc85_state::kc85_sod_w));
1341
1342 /* video hardware */
1343 kc85_video(config);
1344
1345 /* sound hardware */
1346 SPEAKER(config, "mono").front_center();
1347 SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
1348
1349 /* devices */
1350 i8155_device &i8155(I8155(config, I8155_TAG, XTAL(4'915'200)/2));
1351 i8155.out_pa_callback().set(FUNC(kc85_state::i8155_pa_w));
1352 i8155.out_pb_callback().set(FUNC(kc85_state::i8155_pb_w));
1353 i8155.in_pc_callback().set(FUNC(kc85_state::i8155_pc_r));
1354 i8155.out_to_callback().set(FUNC(kc85_state::i8155_to_w));
1355
1356 UPD1990A(config, m_rtc);
1357 m_rtc->tp_callback().set_inputline(m_maincpu, I8085_RST75_LINE);
1358
1359 IM6402(config, m_uart, 0, 0);
1360 m_uart->tro_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
1361 m_uart->dr_callback().set_inputline(m_maincpu, I8085_RST65_LINE);
1362
1363 rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr));
1364 rs232.rxd_handler().set(m_uart, FUNC(im6402_device::write_rri));
1365
1366 CENTRONICS(config, m_centronics, centronics_devices, "printer");
1367 m_centronics->busy_handler().set(FUNC(kc85_state::write_centronics_busy));
1368 m_centronics->select_handler().set(FUNC(kc85_state::write_centronics_select));
1369
1370 CASSETTE(config, m_cassette);
1371 m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
1372 m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
1373
1374 /* option ROM cartridge */
1375 GENERIC_CARTSLOT(config, m_opt_cart, generic_linear_slot, "trsm100_cart", "bin,rom");
1376
1377 /* software lists */
1378 SOFTWARE_LIST(config, "cart_list").set_original("trsm100");
1379
1380 /* internal ram */
1381 RAM(config, m_ram).set_default_size("16K").set_extra_options("32K");
1382 }
1383
pc8201(machine_config & config)1384 void pc8201_state::pc8201(machine_config &config)
1385 {
1386 /* basic machine hardware */
1387 I8085A(config, m_maincpu, XTAL(4'915'200));
1388 m_maincpu->set_addrmap(AS_PROGRAM, &pc8201_state::pc8201_mem);
1389 m_maincpu->set_addrmap(AS_IO, &pc8201_state::pc8201_io);
1390 m_maincpu->in_sid_func().set(FUNC(pc8201_state::kc85_sid_r));
1391 m_maincpu->out_sod_func().set(FUNC(pc8201_state::kc85_sod_w));
1392
1393 /* video hardware */
1394 kc85_video(config);
1395
1396 /* sound hardware */
1397 SPEAKER(config, "mono").front_center();
1398 SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
1399
1400 /* devices */
1401 i8155_device &i8155(I8155(config, I8155_TAG, XTAL(4'915'200)/2));
1402 i8155.out_pa_callback().set(FUNC(pc8201_state::i8155_pa_w));
1403 i8155.out_pb_callback().set(FUNC(pc8201_state::i8155_pb_w));
1404 i8155.in_pc_callback().set(FUNC(pc8201_state::i8155_pc_r));
1405 i8155.out_to_callback().set(FUNC(pc8201_state::i8155_to_w));
1406
1407 UPD1990A(config, m_rtc);
1408 m_rtc->tp_callback().set_inputline(m_maincpu, I8085_RST75_LINE);
1409
1410 IM6402(config, m_uart, 0, 0);
1411 m_uart->tro_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
1412 m_uart->dr_callback().set_inputline(m_maincpu, I8085_RST65_LINE);
1413
1414 rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr));
1415 rs232.rxd_handler().set(m_uart, FUNC(im6402_device::write_rri));
1416
1417 CENTRONICS(config, m_centronics, centronics_devices, "printer");
1418 m_centronics->busy_handler().set(FUNC(pc8201_state::write_centronics_busy));
1419 m_centronics->select_handler().set(FUNC(pc8201_state::write_centronics_select));
1420
1421 CASSETTE(config, m_cassette);
1422 m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
1423 m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
1424
1425 /* option ROM cartridge */
1426 GENERIC_CARTSLOT(config, m_opt_cart, generic_linear_slot, "pc8201_cart", "bin,rom");
1427
1428 /* 128KB ROM cassette */
1429 GENERIC_CARTSLOT(config, "cas_cartslot", generic_linear_slot, "pc8201_cart2", "bin,rom");
1430
1431 /* software lists */
1432 SOFTWARE_LIST(config, "cart_list").set_original("pc8201");
1433
1434 /* internal ram */
1435 RAM(config, m_ram).set_default_size("16K").set_extra_options("32K,64K,96K");
1436 }
1437
pc8300(machine_config & config)1438 void pc8201_state::pc8300(machine_config &config)
1439 {
1440 pc8201(config);
1441 m_ram->set_default_size("32K").set_extra_options("64K,96K");
1442 }
1443
trsm100(machine_config & config)1444 void trsm100_state::trsm100(machine_config &config)
1445 {
1446 /* basic machine hardware */
1447 I8085A(config, m_maincpu, XTAL(4'915'200));
1448 m_maincpu->set_addrmap(AS_PROGRAM, &trsm100_state::kc85_mem);
1449 m_maincpu->set_addrmap(AS_IO, &trsm100_state::trsm100_io);
1450 m_maincpu->in_sid_func().set(FUNC(trsm100_state::kc85_sid_r));
1451 m_maincpu->out_sod_func().set(FUNC(trsm100_state::kc85_sod_w));
1452
1453 /* video hardware */
1454 kc85_video(config);
1455
1456 /* sound hardware */
1457 SPEAKER(config, "mono").front_center();
1458 SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
1459
1460 /* devices */
1461 i8155_device &i8155(I8155(config, I8155_TAG, XTAL(4'915'200)/2));
1462 i8155.out_pa_callback().set(FUNC(trsm100_state::i8155_pa_w));
1463 i8155.out_pb_callback().set(FUNC(trsm100_state::i8155_pb_w));
1464 i8155.in_pc_callback().set(FUNC(trsm100_state::i8155_pc_r));
1465 i8155.out_to_callback().set(FUNC(trsm100_state::i8155_to_w));
1466
1467 UPD1990A(config, m_rtc);
1468 m_rtc->tp_callback().set_inputline(m_maincpu, I8085_RST75_LINE);
1469
1470 IM6402(config, m_uart, 0, 0);
1471 m_uart->tro_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
1472 m_uart->dr_callback().set_inputline(m_maincpu, I8085_RST65_LINE);
1473
1474 rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr));
1475 rs232.rxd_handler().set(m_uart, FUNC(im6402_device::write_rri));
1476
1477 CENTRONICS(config, m_centronics, centronics_devices, "printer");
1478
1479 CASSETTE(config, m_cassette);
1480 m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
1481 m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
1482
1483 // MCFG_MC14412_ADD(MC14412_TAG, XTAL(1'000'000))
1484
1485 /* option ROM cartridge */
1486 GENERIC_CARTSLOT(config, m_opt_cart, generic_linear_slot, "trsm100_cart", "bin,rom");
1487
1488 /* software lists */
1489 SOFTWARE_LIST(config, "cart_list").set_original("trsm100");
1490
1491 /* internal ram */
1492 RAM(config, m_ram).set_default_size("8K").set_extra_options("16K,24K,32K");
1493 }
1494
tandy102(machine_config & config)1495 void trsm100_state::tandy102(machine_config &config)
1496 {
1497 trsm100(config);
1498 m_ram->set_default_size("24K").set_extra_options("32K");
1499 }
1500
tandy200(machine_config & config)1501 void tandy200_state::tandy200(machine_config &config)
1502 {
1503 /* basic machine hardware */
1504 I8085A(config, m_maincpu, XTAL(4'915'200));
1505 m_maincpu->set_addrmap(AS_PROGRAM, &tandy200_state::tandy200_mem);
1506 m_maincpu->set_addrmap(AS_IO, &tandy200_state::tandy200_io);
1507 m_maincpu->in_sid_func().set(FUNC(tandy200_state::kc85_sid_r));
1508 m_maincpu->out_sod_func().set(FUNC(tandy200_state::kc85_sod_w));
1509
1510 /* video hardware */
1511 tandy200_video(config);
1512
1513 /* TP timer */
1514 TIMER(config, "tp").configure_periodic(FUNC(tandy200_state::tandy200_tp_tick), attotime::from_hz(XTAL(4'915'200)/2/8192));
1515
1516 /* sound hardware */
1517 SPEAKER(config, "mono").front_center();
1518 SPEAKER_SOUND(config, m_speaker);
1519 m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
1520
1521 // TCM5089(config, TCM5089_TAG, XTAL(3'579'545));
1522
1523 /* devices */
1524 i8155_device &i8155(I8155(config, I8155_TAG, XTAL(4'915'200)/2));
1525 i8155.out_pa_callback().set(FUNC(tandy200_state::i8155_pa_w));
1526 i8155.out_pb_callback().set(FUNC(tandy200_state::i8155_pb_w));
1527 i8155.in_pc_callback().set(FUNC(tandy200_state::i8155_pc_r));
1528 i8155.out_to_callback().set(FUNC(tandy200_state::i8155_to_w));
1529
1530 RP5C01(config, m_rtc, XTAL(32'768));
1531
1532 i8251_device &i8251(I8251(config, I8251_TAG, XTAL(4'915'200)/2));
1533 i8251.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
1534 i8251.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
1535 i8251.rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
1536 i8251.rxrdy_handler().set_inputline(m_maincpu, I8085_RST65_LINE);
1537
1538 rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr));
1539 rs232.rxd_handler().set(I8251_TAG, FUNC(i8251_device::write_rxd));
1540 rs232.dsr_handler().set(I8251_TAG, FUNC(i8251_device::write_dsr));
1541
1542 // MCFG_MC14412_ADD(MC14412_TAG, XTAL(1'000'000))
1543 CENTRONICS(config, m_centronics, centronics_devices, "printer");
1544 m_centronics->busy_handler().set(FUNC(tandy200_state::write_centronics_busy));
1545 m_centronics->select_handler().set(FUNC(tandy200_state::write_centronics_select));
1546
1547 output_latch_device ¢_data_out(OUTPUT_LATCH(config, "cent_data_out"));
1548 m_centronics->set_output_latch(cent_data_out);
1549
1550 CASSETTE(config, m_cassette);
1551 m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
1552 m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
1553
1554 /* option ROM cartridge */
1555 GENERIC_CARTSLOT(config, m_opt_cart, generic_linear_slot, "tandy200_cart", "bin,rom");
1556
1557 /* software lists */
1558 SOFTWARE_LIST(config, "cart_list").set_original("tandy200");
1559
1560 /* internal ram */
1561 RAM(config, m_ram).set_default_size("24K").set_extra_options("48K,72K");
1562 }
1563
1564 /* ROMs */
1565
1566 ROM_START( kc85 )
1567 ROM_REGION( 0x8000, I8085_TAG, 0 )
1568 ROM_LOAD( "kc85rom.bin", 0x0000, 0x8000, CRC(8a9ddd6b) SHA1(9d18cb525580c9e071e23bc3c472380aa46356c0) )
1569 ROM_END
1570
1571 ROM_START( pc8201 )
1572 ROM_REGION( 0x10000, I8085_TAG, 0 )
1573 ROM_LOAD( "3256a41-3b1 n 82 basic.rom0", 0x0000, 0x8000, CRC(3dbaa484) SHA1(9886a973faa639ca9e0ba478790bab20e5163495) )
1574 ROM_END
1575
1576 ROM_START( pc8201a )
1577 ROM_REGION( 0x10000, I8085_TAG, 0 )
1578 ROM_LOAD( "pc8201rom.rom", 0x0000, 0x8000, CRC(30555035) SHA1(96f33ff235db3028bf5296052acedbc94437c596) )
1579 ROM_END
1580
1581 ROM_START( npc8300 )
1582 ROM_REGION( 0x10000, I8085_TAG, 0 )
1583 ROM_LOAD( "831000-438_n83a_basic_1986_microsoft_8716_z01.bin", 0x0000, 0x8000, CRC(a3c15dcb) SHA1(f0322dfe3f2e951de043bf6d0973e6ffc2c87181))
1584 ROM_END
1585
1586 ROM_START( trsm100 )
1587 /*
1588 Board Code ROM type ROM Code Comment
1589 -------------------------------------------------------------------
1590 PLX110CH1X custom LH535618 early North America
1591 PLX110EH1X 27C256 compatible 3256C07-3J1/11US late North America
1592 PLX120CH1X 27C256 compatible 3256C05-3E1/11EP European/Italian
1593 */
1594 ROM_REGION( 0x8000, I8085_TAG, 0 )
1595 ROM_LOAD( "m100rom.m12", 0x0000, 0x8000, CRC(730a3611) SHA1(094dbc4ac5a4ea5cdf51a1ac581a40a9622bb25d) )
1596 ROM_END
1597
1598 ROM_START( m10 )
1599 // 3256C02-4B3/I Italian
1600 ROM_REGION( 0x8000, I8085_TAG, 0 )
1601 ROM_LOAD( "m10rom.m12", 0x0000, 0x8000, CRC(f0e8447a) SHA1(d58867276213116a79f7074109b7d7ce02e8a3af) )
1602 ROM_END
1603
1604 ROM_START( tandy102 )
1605 ROM_REGION( 0x8000, I8085_TAG, 0 )
1606 ROM_LOAD( "m102rom.m12", 0x0000, 0x8000, CRC(08e9f89c) SHA1(b6ede7735a361c80419f4c9c0e36e7d480c36d11) )
1607 ROM_END
1608
1609 ROM_START( tandy200 )
1610 ROM_REGION( 0x18000, I8085_TAG, 0 )
1611 ROM_LOAD( "rom 1-1.m15", 0x00000, 0x8000, NO_DUMP )
1612 ROM_LOAD( "rom 1-2.m13", 0x08000, 0x2000, NO_DUMP )
1613 ROM_LOAD( "rom 2.m14", 0x10000, 0x8000, NO_DUMP )
1614 ROM_LOAD( "t200rom.bin", 0x0000, 0xa000, BAD_DUMP CRC(e3358b38) SHA1(35d4e6a5fb8fc584419f57ec12b423f6021c0991) ) /* Y2K hacked */
1615 ROM_CONTINUE( 0x10000, 0x8000 )
1616 ROM_END
1617
1618 /* System Drivers */
1619
1620 /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
1621 COMP( 1983, kc85, 0, 0, kc85, kc85, kc85_state, empty_init, "Kyosei", "Kyotronic 85 (Japan)", MACHINE_SUPPORTS_SAVE )
1622 COMP( 1983, m10, kc85, 0, kc85, olivm10, kc85_state, empty_init, "Olivetti", "M-10", MACHINE_SUPPORTS_SAVE )
1623 //COMP( 1983, m10m, kc85, 0, kc85, olivm10, kc85_state, empty_init, "Olivetti", "M-10 Modem (US)", MACHINE_SUPPORTS_SAVE )
1624 COMP( 1983, trsm100, 0, 0, trsm100, kc85, trsm100_state, empty_init, "Tandy Radio Shack", "TRS-80 Model 100", MACHINE_SUPPORTS_SAVE )
1625 COMP( 1986, tandy102, trsm100, 0, tandy102, kc85, trsm100_state, empty_init, "Tandy Radio Shack", "Tandy 102", MACHINE_SUPPORTS_SAVE )
1626 COMP( 1983, pc8201, 0, 0, pc8201, pc8201, pc8201_state, empty_init, "NEC", "PC-8201 (Japan)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
1627 COMP( 1983, pc8201a, pc8201, 0, pc8201, pc8201a, pc8201_state, empty_init, "NEC", "PC-8201A", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
1628 COMP( 1987, npc8300, pc8201, 0, pc8300, pc8201a, pc8201_state, empty_init, "NEC", "PC-8300", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
1629 COMP( 1984, tandy200, 0, 0, tandy200, kc85, tandy200_state, empty_init, "Tandy Radio Shack", "Tandy 200", MACHINE_SUPPORTS_SAVE )
1630