trunk/src/mess/drivers/plus4.c
| r20583 | r20584 | |
| 4 | 4 | |
| 5 | 5 | - cassette motor is turned on only for a moment while LOADing |
| 6 | 6 | - c16 function ROM test fails |
| 7 | | - clean up keyboard handling |
| 8 | 7 | - clean up TED |
| 9 | 8 | - dump PLA |
| 10 | 9 | - T6721 speech chip |
| r20583 | r20584 | |
| 372 | 371 | //------------------------------------------------- |
| 373 | 372 | |
| 374 | 373 | static INPUT_PORTS_START( plus4 ) |
| 375 | | PORT_INCLUDE( common_cbm_keyboard ) /* ROW0 -> ROW7 */ |
| 374 | PORT_START( "ROW0" ) |
| 375 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("@") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') |
| 376 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHAR(UCHAR_MAMEKEY(F6)) |
| 377 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CHAR(UCHAR_MAMEKEY(F5)) |
| 378 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHAR(UCHAR_MAMEKEY(F4)) |
| 379 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("HELP f7") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F8)) PORT_CHAR(UCHAR_MAMEKEY(F7)) |
| 380 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(0xA3) |
| 381 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) |
| 382 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("INST DEL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) |
| 376 | 383 | |
| 377 | | PORT_MODIFY("ROW0") |
| 378 | | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') |
| 379 | | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHAR(UCHAR_MAMEKEY(F6)) |
| 380 | | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CHAR(UCHAR_MAMEKEY(F5)) |
| 381 | | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHAR(UCHAR_MAMEKEY(F4)) |
| 382 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("HELP f7") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F8)) PORT_CHAR(UCHAR_MAMEKEY(F7)) |
| 383 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(0xA3) |
| 384 | PORT_START( "ROW1" ) |
| 385 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Shift (Left & Right)") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) |
| 386 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E') |
| 387 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S') |
| 388 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') |
| 389 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') |
| 390 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A') |
| 391 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W') |
| 392 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') |
| 384 | 393 | |
| 385 | | PORT_MODIFY("ROW1") |
| 386 | | /* Both Shift keys were mapped to the same bit */ |
| 387 | | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Shift (Left & Right)") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) |
| 394 | PORT_START( "ROW2" ) |
| 395 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X') |
| 396 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T') |
| 397 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F') |
| 398 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C') |
| 399 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') |
| 400 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D') |
| 401 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R') |
| 402 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') |
| 388 | 403 | |
| 389 | | PORT_MODIFY("ROW4") |
| 390 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0 \xE2\x86\x91") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(0x2191) |
| 404 | PORT_START( "ROW3" ) |
| 405 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V') |
| 406 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U') |
| 407 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H') |
| 408 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B') |
| 409 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') |
| 410 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G') |
| 411 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') |
| 412 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') |
| 391 | 413 | |
| 392 | | PORT_MODIFY("ROW5") |
| 393 | | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('-') |
| 394 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) |
| 395 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) |
| 414 | PORT_START( "ROW4" ) |
| 415 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N') |
| 416 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O') |
| 417 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K') |
| 418 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M') |
| 419 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("0 \xE2\x86\x91") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(0x2191) |
| 420 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J') |
| 421 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I') |
| 422 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') |
| 396 | 423 | |
| 397 | | PORT_MODIFY("ROW6") |
| 398 | | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('+') |
| 399 | | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("= Pi \xE2\x86\x90") PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('=') PORT_CHAR(0x03C0) PORT_CHAR(0x2190) |
| 400 | | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) |
| 401 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) |
| 402 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT) PORT_CHAR('*') |
| 403 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) |
| 424 | PORT_START( "ROW5" ) |
| 425 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') |
| 426 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('-') |
| 427 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':') PORT_CHAR('[') |
| 428 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') |
| 429 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) |
| 430 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L') |
| 431 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P') |
| 432 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) |
| 404 | 433 | |
| 405 | | PORT_MODIFY("ROW7") |
| 406 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Home Clear") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(HOME)) |
| 434 | PORT_START( "ROW6" ) |
| 435 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') |
| 436 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('+') |
| 437 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("= Pi \xE2\x86\x90") PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('=') PORT_CHAR(0x03C0) PORT_CHAR(0x2190) |
| 438 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) |
| 439 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) |
| 440 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(';') PORT_CHAR(']') |
| 441 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT) PORT_CHAR('*') |
| 442 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) |
| 407 | 443 | |
| 408 | | PORT_INCLUDE( c16_special ) /* SPECIAL */ |
| 444 | PORT_START( "ROW7" ) |
| 445 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RUN STOP") PORT_CODE(KEYCODE_HOME) |
| 446 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') |
| 447 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CBM") PORT_CODE(KEYCODE_LALT) |
| 448 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') |
| 449 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') |
| 450 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_SHIFT_2) |
| 451 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Home Clear") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(HOME)) |
| 452 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') |
| 409 | 453 | |
| 410 | | PORT_INCLUDE( c16_controls ) /* CTRLSEL, JOY0, JOY1 */ |
| 454 | PORT_START( "LOCK" ) |
| 455 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) |
| 456 | PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 411 | 457 | INPUT_PORTS_END |
| 412 | 458 | |
| 413 | 459 | |
| r20583 | r20584 | |
| 419 | 465 | PORT_INCLUDE( plus4 ) |
| 420 | 466 | |
| 421 | 467 | PORT_MODIFY( "ROW0" ) |
| 422 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT) PORT_CHAR(0xA3) |
| 468 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT) PORT_CHAR(0xA3) |
| 423 | 469 | |
| 424 | 470 | PORT_MODIFY( "ROW5" ) |
| 425 | | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') |
| 426 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR(UCHAR_MAMEKEY(UP)) |
| 427 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) |
| 471 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') |
| 472 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR(UCHAR_MAMEKEY(UP)) |
| 473 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) |
| 428 | 474 | |
| 429 | 475 | PORT_MODIFY( "ROW6" ) |
| 430 | | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('+') |
| 431 | | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("= Pi \xE2\x86\x90") PORT_CODE(KEYCODE_PGDN) PORT_CHAR('=') PORT_CHAR(0x03C0) PORT_CHAR(0x2190) |
| 432 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) |
| 433 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('*') |
| 434 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) |
| 476 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('+') |
| 477 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("= Pi \xE2\x86\x90") PORT_CODE(KEYCODE_PGDN) PORT_CHAR('=') PORT_CHAR(0x03C0) PORT_CHAR(0x2190) |
| 478 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) |
| 479 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('*') |
| 480 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) |
| 435 | 481 | INPUT_PORTS_END |
| 436 | 482 | |
| 437 | 483 | |
| r20583 | r20584 | |
| 541 | 587 | m_cassette->write(!BIT(data, 1)); |
| 542 | 588 | } |
| 543 | 589 | |
| 590 | |
| 544 | 591 | //------------------------------------------------- |
| 545 | 592 | // ted7360_interface ted_intf |
| 546 | 593 | //------------------------------------------------- |
| r20583 | r20584 | |
| 552 | 599 | |
| 553 | 600 | INTERRUPT_GEN_MEMBER(plus4_state::c16_frame_interrupt) |
| 554 | 601 | { |
| 555 | | int value, i; |
| 556 | | static const char *const c16ports[] = { "ROW0", "ROW1", "ROW2", "ROW3", "ROW4", "ROW5", "ROW6", "ROW7" }; |
| 557 | | |
| 558 | | /* Lines 0-7 : common keyboard */ |
| 559 | | for (i = 0; i < 8; i++) |
| 560 | | { |
| 561 | | value = 0xff; |
| 562 | | value &= ~machine().root_device().ioport(c16ports[i])->read(); |
| 563 | | |
| 564 | | /* Shift Lock is mapped on Left/Right Shift */ |
| 565 | | if ((i == 1) && (machine().root_device().ioport("SPECIAL")->read() & 0x80)) |
| 566 | | value &= ~0x80; |
| 567 | | |
| 568 | | m_keyline[i] = value; |
| 569 | | } |
| 570 | | |
| 571 | | if (machine().root_device().ioport("CTRLSEL")->read() & 0x01) |
| 572 | | { |
| 573 | | value = 0xff; |
| 574 | | if (machine().root_device().ioport("JOY0")->read() & 0x10) /* Joypad1_Button */ |
| 575 | | { |
| 576 | | if (machine().root_device().ioport("SPECIAL")->read() & 0x40) |
| 577 | | value &= ~0x80; |
| 578 | | else |
| 579 | | value &= ~0x40; |
| 580 | | } |
| 581 | | |
| 582 | | value &= ~(machine().root_device().ioport("JOY0")->read() & 0x0f); /* Other Inputs Joypad1 */ |
| 583 | | |
| 584 | | if (machine().root_device().ioport("SPECIAL")->read() & 0x40) |
| 585 | | m_keyline[9] = value; |
| 586 | | else |
| 587 | | m_keyline[8] = value; |
| 588 | | } |
| 589 | | |
| 590 | | if (machine().root_device().ioport("CTRLSEL")->read() & 0x10) |
| 591 | | { |
| 592 | | value = 0xff; |
| 593 | | if (machine().root_device().ioport("JOY1")->read() & 0x10) /* Joypad2_Button */ |
| 594 | | { |
| 595 | | if (machine().root_device().ioport("SPECIAL")->read() & 0x40) |
| 596 | | value &= ~0x40; |
| 597 | | else |
| 598 | | value &= ~0x80; |
| 599 | | } |
| 600 | | |
| 601 | | value &= ~(machine().root_device().ioport("JOY1")->read() & 0x0f); /* Other Inputs Joypad2 */ |
| 602 | | |
| 603 | | if (machine().root_device().ioport("SPECIAL")->read() & 0x40) |
| 604 | | m_keyline[8] = value; |
| 605 | | else |
| 606 | | m_keyline[9] = value; |
| 607 | | } |
| 608 | | |
| 609 | 602 | m_ted->frame_interrupt_gen(); |
| 610 | 603 | } |
| 611 | 604 | |
| r20583 | r20584 | |
| 618 | 611 | |
| 619 | 612 | READ8_MEMBER( plus4_state::ted_k_r ) |
| 620 | 613 | { |
| 621 | | UINT8 value = 0xff; |
| 622 | | int i; |
| 614 | /* |
| 615 | |
| 616 | bit description |
| 617 | |
| 618 | 0 JOY A0, JOY B0 |
| 619 | 1 JOY A1, JOY B1 |
| 620 | 2 JOY A2, JOY B2 |
| 621 | 3 JOY A3, JOY B3 |
| 622 | 4 |
| 623 | 5 |
| 624 | 6 BTN A |
| 625 | 7 BTN B |
| 626 | |
| 627 | */ |
| 623 | 628 | |
| 624 | | for (i = 0; i < 8; i++) |
| 629 | UINT8 data = 0xff; |
| 630 | |
| 631 | // joystick |
| 632 | if (!BIT(offset, 2)) |
| 625 | 633 | { |
| 626 | | if (!BIT(m_port6529, i)) |
| 627 | | value &= m_keyline[i]; |
| 634 | UINT8 joy_a = m_joy1->joy_r(); |
| 635 | |
| 636 | data &= (0xf0 | (joy_a & 0x0f)); |
| 637 | data &= ~(!BIT(joy_a, 5) << 6); |
| 628 | 638 | } |
| 629 | 639 | |
| 630 | | /* looks like joy 0 needs dataline2 low |
| 631 | | * and joy 1 needs dataline1 low |
| 632 | | * write to 0xff08 (value on databus) reloads latches */ |
| 633 | | if (!BIT(offset, 2)) |
| 634 | | value &= m_keyline[8]; |
| 635 | | |
| 636 | 640 | if (!BIT(offset, 1)) |
| 637 | | value &= m_keyline[9]; |
| 641 | { |
| 642 | UINT8 joy_b = m_joy2->joy_r(); |
| 643 | |
| 644 | data &= (0xf0 | (joy_b & 0x0f)); |
| 645 | data &= ~(!BIT(joy_b, 5) << 7); |
| 646 | } |
| 638 | 647 | |
| 639 | | return value; |
| 648 | // keyboard |
| 649 | if (!BIT(m_kb, 7)) data &= m_row7->read(); |
| 650 | if (!BIT(m_kb, 6)) data &= m_row6->read(); |
| 651 | if (!BIT(m_kb, 5)) data &= m_row5->read(); |
| 652 | if (!BIT(m_kb, 4)) data &= m_row4->read(); |
| 653 | if (!BIT(m_kb, 3)) data &= m_row3->read(); |
| 654 | if (!BIT(m_kb, 2)) data &= m_row2->read(); |
| 655 | if (!BIT(m_kb, 1)) data &= m_row1->read() & m_lock->read(); |
| 656 | if (!BIT(m_kb, 0)) data &= m_row0->read(); |
| 657 | |
| 658 | return data; |
| 640 | 659 | } |
| 641 | 660 | |
| 642 | 661 | static MOS7360_INTERFACE( ted_intf ) |
| r20583 | r20584 | |
| 663 | 682 | // MOS6529_INTERFACE( spi_kb_intf ) |
| 664 | 683 | //------------------------------------------------- |
| 665 | 684 | |
| 666 | | UINT8 plus4_state::read_keyboard(UINT8 databus) |
| 667 | | { |
| 668 | | UINT8 value = 0xff; |
| 669 | | int i; |
| 670 | | |
| 671 | | for (i = 0; i < 8; i++) |
| 672 | | { |
| 673 | | if (!BIT(m_port6529, i)) |
| 674 | | value &= m_keyline[i]; |
| 675 | | } |
| 676 | | |
| 677 | | /* looks like joy 0 needs dataline2 low |
| 678 | | * and joy 1 needs dataline1 low |
| 679 | | * write to 0xff08 (value on databus) reloads latches */ |
| 680 | | if (!BIT(databus, 2)) |
| 681 | | value &= m_keyline[8]; |
| 682 | | |
| 683 | | if (!BIT(databus, 1)) |
| 684 | | value &= m_keyline[9]; |
| 685 | | |
| 686 | | return value; |
| 687 | | } |
| 688 | | |
| 689 | 685 | READ8_MEMBER( plus4_state::spi_kb_r ) |
| 690 | 686 | { |
| 691 | | /* |
| 692 | | |
| 693 | | bit description |
| 694 | | |
| 695 | | 0 |
| 696 | | 1 |
| 697 | | 2 |
| 698 | | 3 |
| 699 | | 4 |
| 700 | | 5 |
| 701 | | 6 |
| 702 | | 7 |
| 703 | | |
| 704 | | */ |
| 705 | | |
| 706 | | return m_port6529 & (read_keyboard (0xff /*databus */ ) | (m_port6529 ^ 0xff)); |
| 687 | return 0xff; |
| 707 | 688 | } |
| 708 | 689 | |
| 709 | 690 | WRITE8_MEMBER( plus4_state::spi_kb_w ) |
| 710 | 691 | { |
| 711 | | /* |
| 712 | | |
| 713 | | bit description |
| 714 | | |
| 715 | | 0 |
| 716 | | 1 |
| 717 | | 2 |
| 718 | | 3 |
| 719 | | 4 |
| 720 | | 5 |
| 721 | | 6 |
| 722 | | 7 |
| 723 | | |
| 724 | | */ |
| 725 | | |
| 726 | | m_port6529 = data; |
| 692 | m_kb = data; |
| 727 | 693 | } |
| 728 | 694 | |
| 729 | 695 | static MOS6529_INTERFACE( spi_kb_intf ) |
| r20583 | r20584 | |
| 812 | 778 | |
| 813 | 779 | void plus4_state::machine_start() |
| 814 | 780 | { |
| 815 | | cbm_common_init(); |
| 816 | | |
| 817 | 781 | // initialize memory |
| 818 | 782 | UINT8 data = 0xff; |
| 819 | 783 | |
| r20583 | r20584 | |
| 828 | 792 | save_item(NAME(m_ted_irq)); |
| 829 | 793 | save_item(NAME(m_acia_irq)); |
| 830 | 794 | save_item(NAME(m_exp_irq)); |
| 831 | | save_item(NAME(m_port6529)); |
| 832 | | save_item(NAME(m_keyline)); |
| 795 | save_item(NAME(m_kb)); |
| 833 | 796 | } |
| 834 | 797 | |
| 835 | 798 | |
| r20583 | r20584 | |
| 856 | 819 | } |
| 857 | 820 | |
| 858 | 821 | m_addr = 0; |
| 859 | | |
| 860 | | for (int i = 0; i < 10; i++) |
| 861 | | { |
| 862 | | m_keyline[i] = 0xff; |
| 863 | | } |
| 864 | 822 | } |
| 865 | 823 | |
| 866 | 824 | |
| r20583 | r20584 | |
| 896 | 854 | MCFG_QUICKLOAD_ADD("quickload", cbm_c16, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) |
| 897 | 855 | MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, plus4_datassette_devices, "c1531", NULL) |
| 898 | 856 | MCFG_CBM_IEC_ADD(iec_intf, NULL) |
| 857 | MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) |
| 858 | MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL) |
| 899 | 859 | MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL_14_31818MHz/16, expansion_intf, plus4_expansion_cards, "c1551", NULL) |
| 900 | 860 | MCFG_PLUS4_USER_PORT_ADD(PLUS4_USER_PORT_TAG, plus4_user_port_cards, NULL, NULL) |
| 901 | 861 | |
| r20583 | r20584 | |
| 936 | 896 | MCFG_QUICKLOAD_ADD("quickload", cbm_c16, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) |
| 937 | 897 | MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, plus4_datassette_devices, "c1531", NULL) |
| 938 | 898 | MCFG_CBM_IEC_ADD(iec_intf, NULL) |
| 899 | MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL) |
| 900 | MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL) |
| 939 | 901 | MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL_17_73447MHz/20, expansion_intf, plus4_expansion_cards, "c1551", NULL) |
| 940 | 902 | MCFG_PLUS4_USER_PORT_ADD(PLUS4_USER_PORT_TAG, plus4_user_port_cards, NULL, NULL) |
| 941 | 903 | |