trunk/src/mess/drivers/applix.c
r23144 | r23145 | |
30 | 30 | #include "video/mc6845.h" |
31 | 31 | #include "machine/6522via.h" |
32 | 32 | #include "machine/wd_fdc.h" |
33 | | #include "machine/pc_kbdc.h" |
| 33 | #include "cpu/mcs51/mcs51.h" |
34 | 34 | |
35 | 35 | |
| 36 | |
36 | 37 | class applix_state : public driver_device |
37 | 38 | { |
38 | 39 | public: |
r23144 | r23145 | |
92 | 93 | bool m_data_or_cmd; |
93 | 94 | bool m_buffer_empty; |
94 | 95 | bool m_fdc_cmd; |
| 96 | UINT8 m_clock_count; |
| 97 | bool m_cp; |
| 98 | UINT8 m_p1; |
| 99 | UINT8 m_p1_data; |
| 100 | UINT8 m_p2; |
| 101 | UINT8 m_p3; |
| 102 | UINT16 m_last_write_addr; |
| 103 | DECLARE_READ8_MEMBER( internal_data_read ); |
| 104 | DECLARE_WRITE8_MEMBER( internal_data_write ); |
| 105 | DECLARE_READ8_MEMBER( p1_read ); |
| 106 | DECLARE_WRITE8_MEMBER( p1_write ); |
| 107 | DECLARE_READ8_MEMBER( p2_read ); |
| 108 | DECLARE_WRITE8_MEMBER( p2_write ); |
| 109 | DECLARE_READ8_MEMBER( p3_read ); |
| 110 | DECLARE_WRITE8_MEMBER( p3_write ); |
95 | 111 | virtual void machine_reset(); |
96 | 112 | virtual void video_start(); |
97 | 113 | virtual void palette_init(); |
r23144 | r23145 | |
171 | 187 | return m_pb; |
172 | 188 | } |
173 | 189 | |
| 190 | /* |
| 191 | d0 = /(in) printer busy signal |
| 192 | d1 = /(out) printer strobe |
| 193 | d2 = /(out) enable cassette write IRQ |
| 194 | d3 = (out) H = 640 video mode |
| 195 | d4 = /(out) enable cassette read IRQ |
| 196 | d5 = /(out) clear cass IRQ and output line |
| 197 | d6 = /(out) reset keyboard by pulling kbd clock low |
| 198 | d7 = /(out) reset keyboard flipflop |
| 199 | */ |
174 | 200 | WRITE8_MEMBER( applix_state::applix_pa_w ) |
175 | | { |
| 201 | {//printf("pa=%X ",data); |
176 | 202 | m_pa = data; |
| 203 | |
| 204 | // Reset flipflop counter |
| 205 | if (!BIT(data, 7)) |
| 206 | m_clock_count = 0; |
| 207 | |
| 208 | // Reset keyboard |
| 209 | if (!BIT(data, 6)) |
| 210 | { |
| 211 | m_p3 = 0xff; |
| 212 | m_last_write_addr = 0; |
| 213 | } |
177 | 214 | } |
178 | 215 | |
179 | 216 | WRITE8_MEMBER( applix_state::applix_pb_w ) |
r23144 | r23145 | |
332 | 369 | AM_RANGE(0x60, 0x63) AM_MIRROR(0x1c) AM_READWRITE(port60_r,port60_w) //anotherZ80SCC |
333 | 370 | ADDRESS_MAP_END |
334 | 371 | |
| 372 | static ADDRESS_MAP_START( keytronic_pc3270_program, AS_PROGRAM, 8, applix_state ) |
| 373 | AM_RANGE(0x0000, 0x0fff) AM_ROM AM_REGION("kbdcpu", 0) |
| 374 | ADDRESS_MAP_END |
335 | 375 | |
| 376 | static ADDRESS_MAP_START( keytronic_pc3270_io, AS_IO, 8, applix_state ) |
| 377 | AM_RANGE(0x0000, 0xffff) AM_READWRITE(internal_data_read, internal_data_write) |
| 378 | AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READWRITE(p1_read, p1_write) |
| 379 | AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_READWRITE(p2_read, p2_write) |
| 380 | AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READWRITE(p3_read, p3_write) |
| 381 | ADDRESS_MAP_END |
| 382 | |
336 | 383 | // io priorities: |
337 | 384 | // 4 cassette |
338 | 385 | // 3 scc |
r23144 | r23145 | |
340 | 387 | |
341 | 388 | /* Input ports */ |
342 | 389 | static INPUT_PORTS_START( applix ) |
| 390 | PORT_START( "kb_keytronic_0f" ) |
| 391 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') /* 06 */ |
| 392 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') /* 05 */ |
| 393 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T') /* 14 */ |
| 394 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R') /* 13 */ |
| 395 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G') /* 22 */ |
| 396 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F') /* 21 */ |
| 397 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F7 (IRMA)") /* 41 */ |
| 398 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?6a?") /* 6a */ |
| 399 | |
| 400 | PORT_START( "kb_keytronic_30_0" ) |
| 401 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N') /* 31 */ |
| 402 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M') /* 32 */ |
| 403 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B') /* 30 */ |
| 404 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V') /* 2f */ |
| 405 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C') /* 2e */ |
| 406 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') /* 33 */ |
| 407 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 408 | |
| 409 | PORT_START( "kb_keytronic_30_1" ) |
| 410 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) /* 58 */ |
| 411 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) /* 59 */ |
| 412 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) /* 5a */ |
| 413 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) /* 5b */ |
| 414 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) /* 5c */ |
| 415 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) /* 5d */ |
| 416 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?6b?") /* 6b */ |
| 417 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F8 (IRMA)") /* 42 */ |
| 418 | |
| 419 | PORT_START( "kb_keytronic_31_0" ) |
| 420 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') /* 07 */ |
| 421 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') /* 08 */ |
| 422 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') /* 15 */ |
| 423 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U') /* 16 */ |
| 424 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H') /* 23 */ |
| 425 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J') /* 24 */ |
| 426 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 427 | |
| 428 | PORT_START( "kb_keytronic_31_1" ) |
| 429 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7)) /* 37 */ |
| 430 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8)) /* 5f */ |
| 431 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_NAME("LShift") /* 2a */ |
| 432 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("<") /* 70 */ |
| 433 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') /* 2c */ |
| 434 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X') /* 2d */ |
| 435 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?6c?") /* 6c */ |
| 436 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F9 (IRMA)") /* 43 */ |
| 437 | |
| 438 | PORT_START( "kb_keytronic_32_0" ) |
| 439 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') /* 0a */ |
| 440 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') /* 09 */ |
| 441 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O') /* 18 */ |
| 442 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I') /* 17 */ |
| 443 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L') /* 26 */ |
| 444 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K') /* 25 */ |
| 445 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 446 | |
| 447 | PORT_START( "kb_keytronic_32_1" ) |
| 448 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9)) /* 57 */ |
| 449 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10)) /* 1d */ |
| 450 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) /* 71 */ |
| 451 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_NAME("LAlt") /* 38 */ |
| 452 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') /* 39 */ |
| 453 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RALT) PORT_NAME("RAlt") /* 38 */ |
| 454 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?69?") /* 69 */ |
| 455 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F6 (IRMA)") /* 40 */ |
| 456 | |
| 457 | PORT_START( "kb_keytronic_33_0" ) |
| 458 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("KP 2") /* 50 */ |
| 459 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_END) PORT_NAME("KP 1") /* 4f */ |
| 460 | PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 461 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Down") /* 55 */ |
| 462 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Enter") /* 75 */ |
| 463 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 464 | |
| 465 | PORT_START( "kb_keytronic_33_1" ) |
| 466 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') /* 02 */ |
| 467 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') /* 29 */ |
| 468 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') /* 10 */ |
| 469 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB) PORT_CHAR(9) /* 0f */ |
| 470 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A') /* 1e */ |
| 471 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CAPSLOCK) PORT_NAME("Caps") /* 3a */ |
| 472 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?68?") /* 68 */ |
| 473 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F5 (IRMA)") /* 3f */ |
| 474 | |
| 475 | PORT_START( "kb_keytronic_34_0" ) |
| 476 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 477 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') /* 35 */ |
| 478 | PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_MAMEKEY(RSHIFT)) /* 36 */ |
| 479 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Left") /* 56 */ |
| 480 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') /* 34 */ |
| 481 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 482 | |
| 483 | PORT_START( "kb_keytronic_34_1" ) |
| 484 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') /* 02 */ |
| 485 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') /* 03 */ |
| 486 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W') /* 11 */ |
| 487 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E') /* 12 */ |
| 488 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S') /* 1f */ |
| 489 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D') /* 20 */ |
| 490 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?67?") /* 67 */ |
| 491 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F4 (IRMA)") /* 3e */ |
| 492 | |
| 493 | PORT_START( "kb_keytronic_35_0" ) |
| 494 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') /* 0b */ |
| 495 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') /* 0c */ |
| 496 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P') /* 19 */ |
| 497 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') /* 1a */ |
| 498 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') /* 27 */ |
| 499 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') /* 28 */ |
| 500 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 501 | |
| 502 | PORT_START( "kb_keytronic_35_1" ) |
| 503 | PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 504 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?66?") /* 66 */ |
| 505 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F3 (IRMA)") /* 3d */ |
| 506 | |
| 507 | PORT_START( "kb_keytronic_36_0" ) |
| 508 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) /* 0e */ |
| 509 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') /* 0d */ |
| 510 | PORT_BIT( 0x14, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) /* 1c */ |
| 511 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') /* 2b */ |
| 512 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') /* 1b */ |
| 513 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 514 | |
| 515 | PORT_START( "kb_keytronic_36_1" ) |
| 516 | PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 517 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F2 (IRMA)") /* 3c */ |
| 518 | |
| 519 | PORT_START( "kb_keytronic_37_0" ) |
| 520 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PA1") /* 7b */ |
| 521 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("|<--") /* 7e */ |
| 522 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("/a\\") /* 7a */ |
| 523 | PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("KP +") /* 4e */ |
| 524 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 525 | |
| 526 | PORT_START( "kb_keytronic_37_1" ) |
| 527 | PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 528 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?64?") /* 64 */ |
| 529 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F1 (IRMA)") /* 3b */ |
| 530 | |
| 531 | PORT_START( "kb_keytronic_38_0" ) |
| 532 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SysReq") /* 54 */ |
| 533 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) /*PORT_CODE(KEYCODE_SCRLOCK)*/ PORT_NAME("ScrLock") /* 46 */ |
| 534 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("-->|") /* 7c */ |
| 535 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_PGUP) PORT_NAME("KP 9") /* 49 */ |
| 536 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("KP -") /* 4a */ |
| 537 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("KP 6") /* 4d */ |
| 538 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 539 | |
| 540 | PORT_START( "kb_keytronic_39_0" ) |
| 541 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC) PORT_NAME("Esc") /* 01 */ |
| 542 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_NUMLOCK) PORT_NAME("NumLock") /* 45 */ |
| 543 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_HOME) PORT_NAME("KP 7") /* 47 */ |
| 544 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_UP) PORT_NAME("KP 8") /* 48 */ |
| 545 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("KP 4") /* 4b */ |
| 546 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("KP 5") /* 4c */ |
| 547 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?76?") /* 76 */ |
| 548 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?63?") /* 63 */ |
| 549 | |
| 550 | PORT_START( "kb_keytronic_3a_0" ) |
| 551 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PrtSc *") /* 6f */ |
| 552 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PA2") /* 7f */ |
| 553 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Right") /* 7d */ |
| 554 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("/a") /* 79 */ |
| 555 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Center") /* 77 */ |
| 556 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 557 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?6e?") /* 6e */ |
| 558 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?62?") /* 62 */ |
| 559 | |
| 560 | PORT_START( "kb_keytronic_3b_0" ) |
| 561 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_PGDN) PORT_NAME("KP 3") /* 51 */ |
| 562 | PORT_BIT( 0x06, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_INSERT) PORT_NAME("KP 0") /* 52 */ |
| 563 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("KP .") /* 53 */ |
| 564 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 565 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Up") /* 78 */ |
| 566 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("?6d?") /* 6d */ |
| 567 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F10 (IRMA)") /* 44 */ |
| 568 | |
| 569 | PORT_START( "kb_keytronic_0b" ) |
| 570 | PORT_DIPNAME( 0x01, 0x01, "Protocol selection" ) |
| 571 | PORT_DIPSETTING( 0x00, "Enhanced XT, AT and PS/2 models" ) |
| 572 | PORT_DIPSETTING( 0x01, "Standard PC and XT" ) |
| 573 | PORT_DIPNAME( 0x02, 0x00, "IRMA/Native scan code set" ) |
| 574 | PORT_DIPSETTING( 0x00, "Native scan code set" ) |
| 575 | PORT_DIPSETTING( 0x02, "IRMA Emulation" ) |
| 576 | PORT_DIPNAME( 0x04, 0x04, "Enhanced 101/Native scan code set" ) |
| 577 | PORT_DIPSETTING( 0x00, "Native scan code set" ) |
| 578 | PORT_DIPSETTING( 0x04, "Enhanced 101 scan code set" ) |
| 579 | PORT_DIPNAME( 0x08, 0x08, "Enable E0" ) |
| 580 | PORT_DIPSETTING( 0x00, "Enable E0" ) |
| 581 | PORT_DIPSETTING( 0x08, "Disable E0" ) |
| 582 | PORT_DIPNAME( 0x10, 0x10, "Code tables" ) |
| 583 | PORT_DIPSETTING( 0x00, "U.S. code tables" ) |
| 584 | PORT_DIPSETTING( 0x10, "International code tables" ) |
| 585 | PORT_BIT( 0x60, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 586 | PORT_DIPNAME( 0x80, 0x80, "Key click" ) |
| 587 | PORT_DIPSETTING( 0x00, "No key click" ) |
| 588 | PORT_DIPSETTING( 0x80, "Key click" ) |
| 589 | |
343 | 590 | PORT_START("DSW") |
344 | 591 | PORT_BIT( 0xf, 0, IPT_UNUSED ) |
345 | 592 | PORT_DIPNAME( 0x10, 0x00, "Switch 0") PORT_DIPLOCATION("SW2:1") |
r23144 | r23145 | |
368 | 615 | UINT8* ROM = memregion("maincpu")->base(); |
369 | 616 | memcpy(m_expansion, ROM, 8); |
370 | 617 | membank("bank1")->set_entry(0); |
| 618 | m_p3 = 0xff; |
| 619 | m_last_write_addr = 0; |
371 | 620 | m_maincpu->reset(); |
372 | 621 | } |
373 | 622 | |
374 | | //FLOPPY_FORMATS_MEMBER( mirage_state::floppy_formats ) |
375 | | // FLOPPY_ESQ8IMG_FORMAT |
| 623 | //FLOPPY_FORMATS_MEMBER( applix_state::floppy_formats ) |
| 624 | // FLOPPY_APPLIX_FORMAT |
376 | 625 | //FLOPPY_FORMATS_END |
377 | 626 | |
378 | | //static SLOT_INTERFACE_START( ensoniq_floppies ) |
| 627 | //static SLOT_INTERFACE_START( applix_floppies ) |
379 | 628 | // SLOT_INTERFACE( "35dd", FLOPPY_35_DD ) |
380 | 629 | //SLOT_INTERFACE_END |
381 | 630 | |
r23144 | r23145 | |
490 | 739 | DEVCB_CPU_INPUT_LINE("maincpu", M68K_IRQ_2) //IRQ |
491 | 740 | }; |
492 | 741 | |
493 | | WRITE_LINE_MEMBER( applix_state::kbd_clock_w ) |
494 | | { |
495 | | m_via->write_cb1(state); // need to drop unknown number of pulses |
496 | | } |
497 | 742 | |
498 | | WRITE_LINE_MEMBER( applix_state::kbd_data_w ) |
499 | | { |
500 | | m_via->write_cb2(state); |
501 | | } |
502 | | |
503 | | static const pc_kbdc_interface applix_kbdc = |
504 | | { |
505 | | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, applix_state, kbd_clock_w), |
506 | | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, applix_state, kbd_data_w) |
507 | | }; |
508 | | |
509 | 743 | static MACHINE_CONFIG_START( applix, applix_state ) |
510 | 744 | /* basic machine hardware */ |
511 | 745 | MCFG_CPU_ADD("maincpu", M68000, 7500000) |
r23144 | r23145 | |
513 | 747 | MCFG_CPU_ADD("subcpu", Z80, XTAL_16MHz / 2) // Z80H |
514 | 748 | MCFG_CPU_PROGRAM_MAP(subcpu_mem) |
515 | 749 | MCFG_CPU_IO_MAP(subcpu_io) |
| 750 | MCFG_CPU_ADD("kbdcpu", I8051, 11060250) |
| 751 | MCFG_CPU_PROGRAM_MAP(keytronic_pc3270_program) |
| 752 | MCFG_CPU_IO_MAP(keytronic_pc3270_io) |
516 | 753 | |
517 | 754 | /* video hardware */ |
518 | 755 | MCFG_SCREEN_ADD("screen", RASTER) |
r23144 | r23145 | |
528 | 765 | MCFG_VIA6522_ADD("via6522", 0, applix_via) |
529 | 766 | MCFG_WD1772x_ADD("wd1772", XTAL_16MHz / 2) //connected to Z80H clock pin |
530 | 767 | // MCFG_FLOPPY_DRIVE_ADD("wd1772:0", applix_floppies, "35dd", 0, applix_state::floppy_formats) |
531 | | MCFG_PC_KBDC_ADD("kbdc", applix_kbdc) |
532 | 768 | MACHINE_CONFIG_END |
533 | 769 | |
534 | 770 | /* ROM definition */ |
r23144 | r23145 | |
546 | 782 | |
547 | 783 | ROM_REGION(0x20000, "user1", 0) |
548 | 784 | ROM_LOAD( "1616osv.045", 0x00000, 0x20000, CRC(b9f75432) SHA1(278964e2a02b1fe26ff34f09dc040e03c1d81a6d) ) |
| 785 | |
| 786 | ROM_REGION(0x2000, "kbdcpu", 0) |
| 787 | ROM_LOAD("14166.bin", 0x0000, 0x2000, CRC(1aea1b53) SHA1(b75b6d4509036406052157bc34159f7039cdc72e)) |
549 | 788 | ROM_END |
550 | 789 | |
551 | 790 | |
r23144 | r23145 | |
572 | 811 | |
573 | 812 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ |
574 | 813 | COMP( 1986, applix, 0, 0, applix, applix, applix_state, applix, "Applix Pty Ltd", "Applix 1616", GAME_NOT_WORKING | GAME_NO_SOUND) |
| 814 | |
| 815 | |
| 816 | |
| 817 | /**************************************************** KEYBOARD MODULE *****************************************/ |
| 818 | |
| 819 | READ8_MEMBER( applix_state::internal_data_read ) |
| 820 | { |
| 821 | m_via->write_cb2( BIT(offset, 8) ); // data |
| 822 | bool cp = !BIT(offset, 9); |
| 823 | if (cp != m_cp) |
| 824 | { |
| 825 | m_cp = cp; |
| 826 | if (cp) |
| 827 | m_clock_count++; |
| 828 | } |
| 829 | if (m_clock_count > 2) |
| 830 | m_via->write_cb1( cp ); |
| 831 | |
| 832 | return 0xff; |
| 833 | } |
| 834 | |
| 835 | |
| 836 | WRITE8_MEMBER( applix_state::internal_data_write ) |
| 837 | { |
| 838 | /* Check for low->high transition on AD8 */ |
| 839 | if ( ! ( m_last_write_addr & 0x0100 ) && ( offset & 0x0100 ) ) |
| 840 | { |
| 841 | switch (m_p1) |
| 842 | { |
| 843 | case 0x0e: |
| 844 | break; |
| 845 | case 0x0f: |
| 846 | m_p1_data = ioport("kb_keytronic_0f")->read(); |
| 847 | break; |
| 848 | case 0x30: |
| 849 | m_p1_data = ioport("kb_keytronic_30_0")->read(); |
| 850 | break; |
| 851 | case 0x31: |
| 852 | m_p1_data = ioport("kb_keytronic_31_0")->read(); |
| 853 | break; |
| 854 | case 0x32: |
| 855 | m_p1_data = ioport("kb_keytronic_32_0")->read(); |
| 856 | break; |
| 857 | case 0x33: |
| 858 | m_p1_data = ioport("kb_keytronic_33_0")->read(); |
| 859 | break; |
| 860 | case 0x34: |
| 861 | m_p1_data = ioport("kb_keytronic_34_0")->read(); |
| 862 | break; |
| 863 | case 0x35: |
| 864 | m_p1_data = ioport("kb_keytronic_35_0")->read(); |
| 865 | break; |
| 866 | case 0x36: |
| 867 | m_p1_data = ioport("kb_keytronic_36_0")->read(); |
| 868 | break; |
| 869 | case 0x37: |
| 870 | m_p1_data = ioport("kb_keytronic_37_0")->read() | (ioport("kb_keytronic_36_0")->read() & 0x01); |
| 871 | break; |
| 872 | case 0x38: |
| 873 | m_p1_data = ioport("kb_keytronic_38_0")->read(); |
| 874 | break; |
| 875 | case 0x39: |
| 876 | m_p1_data = ioport("kb_keytronic_39_0")->read(); |
| 877 | break; |
| 878 | case 0x3a: |
| 879 | m_p1_data = ioport("kb_keytronic_3a_0")->read(); |
| 880 | break; |
| 881 | case 0x3b: |
| 882 | m_p1_data = ioport("kb_keytronic_3b_0")->read(); |
| 883 | break; |
| 884 | } |
| 885 | } |
| 886 | |
| 887 | /* Check for low->high transition on AD9 */ |
| 888 | if ( ! ( m_last_write_addr & 0x0200 ) && ( offset & 0x0200 ) ) |
| 889 | { |
| 890 | switch (m_p1) |
| 891 | { |
| 892 | case 0x0b: |
| 893 | m_p1_data = ioport("kb_keytronic_0b")->read(); |
| 894 | break; |
| 895 | case 0x30: |
| 896 | m_p1_data = ioport("kb_keytronic_30_1")->read(); |
| 897 | break; |
| 898 | case 0x31: |
| 899 | m_p1_data = ioport("kb_keytronic_31_1")->read(); |
| 900 | break; |
| 901 | case 0x32: |
| 902 | m_p1_data = ioport("kb_keytronic_32_1")->read(); |
| 903 | break; |
| 904 | case 0x33: |
| 905 | m_p1_data = ioport("kb_keytronic_33_1")->read(); |
| 906 | break; |
| 907 | case 0x34: |
| 908 | m_p1_data = ioport("kb_keytronic_34_1")->read(); |
| 909 | break; |
| 910 | case 0x35: |
| 911 | m_p1_data = ioport("kb_keytronic_35_1")->read(); |
| 912 | break; |
| 913 | case 0x36: |
| 914 | m_p1_data = ioport("kb_keytronic_36_1")->read(); |
| 915 | break; |
| 916 | case 0x37: |
| 917 | m_p1_data = ioport("kb_keytronic_37_1")->read(); |
| 918 | break; |
| 919 | case 0x38: |
| 920 | m_p1_data = 0xff; |
| 921 | break; |
| 922 | case 0x39: |
| 923 | m_p1_data = 0xff; |
| 924 | break; |
| 925 | case 0x3a: |
| 926 | m_p1_data = 0xff; |
| 927 | break; |
| 928 | } |
| 929 | } |
| 930 | |
| 931 | m_last_write_addr = offset; |
| 932 | } |
| 933 | |
| 934 | |
| 935 | READ8_MEMBER( applix_state::p1_read ) |
| 936 | { |
| 937 | return m_p1 & m_p1_data; |
| 938 | } |
| 939 | |
| 940 | |
| 941 | WRITE8_MEMBER( applix_state::p1_write ) |
| 942 | { |
| 943 | m_p1 = data; |
| 944 | } |
| 945 | |
| 946 | |
| 947 | READ8_MEMBER( applix_state::p2_read ) |
| 948 | { |
| 949 | return m_p2; |
| 950 | } |
| 951 | |
| 952 | |
| 953 | WRITE8_MEMBER( applix_state::p2_write ) |
| 954 | { |
| 955 | m_p2 = data; |
| 956 | } |
| 957 | |
| 958 | |
| 959 | READ8_MEMBER( applix_state::p3_read ) |
| 960 | { |
| 961 | UINT8 data = m_p3; |
| 962 | |
| 963 | data &= ~0x14; |
| 964 | |
| 965 | /* -INT0 signal */ |
| 966 | data |= 4;//(clock_signal() ? 0x04 : 0x00); |
| 967 | |
| 968 | /* T0 signal */ |
| 969 | data |= 0;//(data_signal() ? 0x00 : 0x10); |
| 970 | |
| 971 | return data; |
| 972 | } |
| 973 | |
| 974 | |
| 975 | WRITE8_MEMBER( applix_state::p3_write ) |
| 976 | { |
| 977 | m_p3 = data; |
| 978 | } |