src/mess/machine/pc.c
| r15096 | r15097 | |
| 38 | 38 | |
| 39 | 39 | #include "machine/8237dma.h" |
| 40 | 40 | |
| 41 | | #include "machine/kb_keytro.h" |
| 42 | 41 | #include "machine/ram.h" |
| 43 | 42 | |
| 44 | 43 | #include "memconv.h" |
| r15096 | r15097 | |
| 618 | 617 | * |
| 619 | 618 | **********************************************************/ |
| 620 | 619 | |
| 621 | | |
| 622 | | WRITE8_MEMBER(pc_state::ibm5150_kb_set_clock_signal) |
| 620 | WRITE_LINE_MEMBER( pc_state::keyboard_clock_w ) |
| 623 | 621 | { |
| 624 | | device_t *keyboard = machine().device("keyboard"); |
| 625 | | |
| 626 | | if ( m_ppi_clock_signal != data ) |
| 622 | if ( m_ppi_clock_signal != state ) |
| 627 | 623 | { |
| 628 | 624 | if ( m_ppi_keyb_clock && m_ppi_shift_enable ) |
| 629 | 625 | { |
| 630 | | m_ppi_clock_signal = data; |
| 626 | m_ppi_clock_signal = state; |
| 631 | 627 | if ( ! m_ppi_keyboard_clear ) |
| 632 | 628 | { |
| 633 | 629 | /* Data is clocked in on a high->low transition */ |
| 634 | | if ( ! data ) |
| 630 | if ( ! state ) |
| 635 | 631 | { |
| 636 | | UINT8 trigger_irq = m_ppi_shift_register & 0x01; |
| 632 | UINT8 trigger_irq = m_ppi_shift_register & 0x01; |
| 637 | 633 | |
| 638 | 634 | m_ppi_shift_register = ( m_ppi_shift_register >> 1 ) | ( m_ppi_data_signal << 7 ); |
| 639 | 635 | if ( trigger_irq ) |
| r15096 | r15097 | |
| 641 | 637 | pic8259_ir1_w(m_pic8259, 1); |
| 642 | 638 | m_ppi_shift_enable = 0; |
| 643 | 639 | m_ppi_clock_signal = 0; |
| 644 | | kb_keytronic_clock_w(keyboard, m_ppi_clock_signal); |
| 640 | m_pc_kbdc->clock_write_from_mb(m_ppi_clock_signal); |
| 645 | 641 | } |
| 646 | 642 | } |
| 647 | 643 | } |
| 648 | 644 | } |
| 649 | 645 | } |
| 650 | | |
| 651 | | kb_keytronic_clock_w(keyboard, m_ppi_clock_signal); |
| 652 | 646 | } |
| 653 | 647 | |
| 654 | 648 | |
| 655 | | WRITE8_MEMBER(pc_state::ibm5150_kb_set_data_signal) |
| 649 | WRITE_LINE_MEMBER( pc_state::keyboard_data_w ) |
| 656 | 650 | { |
| 657 | | device_t *keyboard = machine().device("keyboard"); |
| 658 | | |
| 659 | | m_ppi_data_signal = data; |
| 660 | | |
| 661 | | kb_keytronic_data_w(keyboard, m_ppi_data_signal); |
| 651 | m_ppi_data_signal = state; |
| 662 | 652 | } |
| 663 | 653 | |
| 654 | |
| 664 | 655 | static READ8_DEVICE_HANDLER (ibm5160_ppi_porta_r) |
| 665 | 656 | { |
| 666 | 657 | int data = 0xFF; |
| r15096 | r15097 | |
| 727 | 718 | static WRITE8_DEVICE_HANDLER( ibm5160_ppi_portb_w ) |
| 728 | 719 | { |
| 729 | 720 | pc_state *st = device->machine().driver_data<pc_state>(); |
| 730 | | device_t *keyboard = device->machine().device("keyboard"); |
| 731 | 721 | |
| 732 | 722 | /* PPI controller port B*/ |
| 733 | 723 | st->m_ppi_portb = data; |
| r15096 | r15097 | |
| 738 | 728 | pc_speaker_set_spkrdata( device->machine(), data & 0x02 ); |
| 739 | 729 | |
| 740 | 730 | st->m_ppi_clock_signal = ( st->m_ppi_keyb_clock ) ? 1 : 0; |
| 741 | | kb_keytronic_clock_w(keyboard, st->m_ppi_clock_signal); |
| 731 | st->m_pc_kbdc->clock_write_from_mb(st->m_ppi_clock_signal); |
| 742 | 732 | |
| 743 | 733 | /* If PB7 is set clear the shift register and reset the IRQ line */ |
| 744 | 734 | if ( st->m_ppi_keyboard_clear ) |
src/mess/machine/kb_keytro.c
| r15096 | r15097 | |
| 103 | 103 | |
| 104 | 104 | |
| 105 | 105 | /***************************************************************************** |
| 106 | | INLINE FUNCTIONS |
| 107 | | *****************************************************************************/ |
| 108 | | |
| 109 | | INLINE kb_keytr_state *get_safe_token(device_t *device) |
| 110 | | { |
| 111 | | assert(device != NULL); |
| 112 | | assert(device->type() == KB_KEYTRONIC); |
| 113 | | |
| 114 | | return (kb_keytr_state *)downcast<legacy_device_base *>(device)->token(); |
| 115 | | } |
| 116 | | |
| 117 | | |
| 118 | | /***************************************************************************** |
| 119 | 106 | INPUT PORTS |
| 120 | 107 | *****************************************************************************/ |
| 121 | 108 | |
| r15096 | r15097 | |
| 303 | 290 | INPUT_PORTS_END |
| 304 | 291 | |
| 305 | 292 | |
| 306 | | INPUT_PORTS_START( kb_keytronic_pc ) |
| 293 | static INPUT_PORTS_START( kb_keytronic_pc ) |
| 307 | 294 | PORT_INCLUDE( kb_keytronic_common ) |
| 308 | 295 | |
| 309 | 296 | PORT_START( "kb_keytronic_0b" ) |
| r15096 | r15097 | |
| 329 | 316 | INPUT_PORTS_END |
| 330 | 317 | |
| 331 | 318 | |
| 332 | | INPUT_PORTS_START( kb_keytronic_at ) |
| 319 | static INPUT_PORTS_START( kb_keytronic_at ) |
| 333 | 320 | |
| 334 | 321 | PORT_INCLUDE( kb_keytronic_common ) |
| 335 | 322 | |
| r15096 | r15097 | |
| 357 | 344 | |
| 358 | 345 | |
| 359 | 346 | /*************************************************************************** |
| 360 | | EXTERNAL INTERFACE |
| 361 | | ***************************************************************************/ |
| 362 | | |
| 363 | | /* Write handler which is called when the clock signal may have changed */ |
| 364 | | WRITE_LINE_DEVICE_HANDLER( kb_keytronic_clock_w ) |
| 365 | | { |
| 366 | | kb_keytr_state *keytronic = get_safe_token(device); |
| 367 | | |
| 368 | | keytronic->clock_signal = state; |
| 369 | | device_set_input_line(keytronic->cpu, MCS51_INT0_LINE, keytronic->clock_signal); |
| 370 | | } |
| 371 | | |
| 372 | | /* Write handler which is called when the data signal may have changed */ |
| 373 | | WRITE_LINE_DEVICE_HANDLER( kb_keytronic_data_w ) |
| 374 | | { |
| 375 | | kb_keytr_state *keytronic = get_safe_token(device); |
| 376 | | |
| 377 | | keytronic->data_signal = state; |
| 378 | | device_set_input_line(keytronic->cpu, MCS51_T0_LINE, keytronic->data_signal); |
| 379 | | } |
| 380 | | |
| 381 | | |
| 382 | | /*************************************************************************** |
| 383 | | IMPLEMENTATION |
| 384 | | ***************************************************************************/ |
| 385 | | |
| 386 | | static READ8_HANDLER( kb_keytronic_p1_r ) |
| 387 | | { |
| 388 | | kb_keytr_state *keytronic = get_safe_token(space->device().owner()); |
| 389 | | return keytronic->p1 & keytronic->p1_data; |
| 390 | | } |
| 391 | | |
| 392 | | static WRITE8_HANDLER( kb_keytronic_p1_w ) |
| 393 | | { |
| 394 | | kb_keytr_state *keytronic = get_safe_token(space->device().owner()); |
| 395 | | |
| 396 | | if (LOG) |
| 397 | | logerror("kb_keytronic_p1_w(): write %02x\n", data); |
| 398 | | |
| 399 | | keytronic->p1 = data; |
| 400 | | } |
| 401 | | |
| 402 | | static READ8_HANDLER( kb_keytronic_p2_r ) |
| 403 | | { |
| 404 | | kb_keytr_state *keytronic = get_safe_token(space->device().owner()); |
| 405 | | return keytronic->p2; |
| 406 | | } |
| 407 | | |
| 408 | | static WRITE8_HANDLER( kb_keytronic_p2_w ) |
| 409 | | { |
| 410 | | kb_keytr_state *keytronic = get_safe_token(space->device().owner()); |
| 411 | | |
| 412 | | if (LOG) |
| 413 | | logerror("kb_keytronic_p2_w(): write %02x\n", data); |
| 414 | | |
| 415 | | keytronic->p2 = data; |
| 416 | | } |
| 417 | | |
| 418 | | static READ8_HANDLER( kb_keytronic_p3_r ) |
| 419 | | { |
| 420 | | kb_keytr_state *keytronic = get_safe_token(space->device().owner()); |
| 421 | | UINT8 data = keytronic->p3; |
| 422 | | |
| 423 | | data &= ~0x14; |
| 424 | | |
| 425 | | /* -INT0 signal */ |
| 426 | | data |= (keytronic->clock_signal ? 0x04 : 0x00); |
| 427 | | |
| 428 | | /* T0 signal */ |
| 429 | | data |= (keytronic->data_signal ? 0x00 : 0x10); |
| 430 | | |
| 431 | | return data; |
| 432 | | } |
| 433 | | |
| 434 | | static WRITE8_HANDLER( kb_keytronic_p3_w ) |
| 435 | | { |
| 436 | | kb_keytr_state *keytronic = get_safe_token(space->device().owner()); |
| 437 | | |
| 438 | | if (LOG) |
| 439 | | logerror("kb_keytronic_p3_w(): write %02x\n", data); |
| 440 | | |
| 441 | | keytronic->p3 = data; |
| 442 | | } |
| 443 | | |
| 444 | | static READ8_HANDLER( kb_keytronic_internal_data_r ) |
| 445 | | { |
| 446 | | kb_keytr_state *keytronic = get_safe_token(space->device().owner()); |
| 447 | | |
| 448 | | if (LOG) |
| 449 | | logerror("kb_keytronic_internal_data_r(): read from %04x\n", offset); |
| 450 | | |
| 451 | | keytronic->data_signal = BIT(offset, 8); |
| 452 | | keytronic->clock_signal = BIT(offset, 9); |
| 453 | | |
| 454 | | keytronic->out_data_func(keytronic->data_signal); |
| 455 | | keytronic->out_clock_func(keytronic->clock_signal); |
| 456 | | |
| 457 | | return 0xff; |
| 458 | | } |
| 459 | | |
| 460 | | static WRITE8_HANDLER( kb_keytronic_internal_data_w ) |
| 461 | | { |
| 462 | | kb_keytr_state *keytronic = get_safe_token(space->device().owner()); |
| 463 | | |
| 464 | | if (LOG) |
| 465 | | logerror("kb_keytronic_internal_data_w(): write to offset %04x\n", offset); |
| 466 | | |
| 467 | | /* Check for low->high transition on AD8 */ |
| 468 | | if ( ! ( keytronic->last_write_addr & 0x0100 ) && ( offset & 0x0100 ) ) |
| 469 | | { |
| 470 | | switch (keytronic->p1) |
| 471 | | { |
| 472 | | case 0x0e: |
| 473 | | break; |
| 474 | | case 0x0f: |
| 475 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_0f")->read(); |
| 476 | | break; |
| 477 | | case 0x30: |
| 478 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_30_0")->read(); |
| 479 | | break; |
| 480 | | case 0x31: |
| 481 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_31_0")->read(); |
| 482 | | break; |
| 483 | | case 0x32: |
| 484 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_32_0")->read(); |
| 485 | | break; |
| 486 | | case 0x33: |
| 487 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_33_0")->read(); |
| 488 | | break; |
| 489 | | case 0x34: |
| 490 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_34_0")->read(); |
| 491 | | break; |
| 492 | | case 0x35: |
| 493 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_35_0")->read(); |
| 494 | | break; |
| 495 | | case 0x36: |
| 496 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_36_0")->read(); |
| 497 | | break; |
| 498 | | case 0x37: |
| 499 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_37_0")->read() | (space->machine().root_device().ioport("kb_keytronic_36_0")->read() & 0x01); |
| 500 | | break; |
| 501 | | case 0x38: |
| 502 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_38_0")->read(); |
| 503 | | break; |
| 504 | | case 0x39: |
| 505 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_39_0")->read(); |
| 506 | | break; |
| 507 | | case 0x3a: |
| 508 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_3a_0")->read(); |
| 509 | | break; |
| 510 | | case 0x3b: |
| 511 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_3b_0")->read(); |
| 512 | | break; |
| 513 | | } |
| 514 | | } |
| 515 | | |
| 516 | | /* Check for low->high transition on AD9 */ |
| 517 | | if ( ! ( keytronic->last_write_addr & 0x0200 ) && ( offset & 0x0200 ) ) |
| 518 | | { |
| 519 | | switch (keytronic->p1) |
| 520 | | { |
| 521 | | case 0x0b: |
| 522 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_0b")->read(); |
| 523 | | break; |
| 524 | | case 0x30: |
| 525 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_30_1")->read(); |
| 526 | | break; |
| 527 | | case 0x31: |
| 528 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_31_1")->read(); |
| 529 | | break; |
| 530 | | case 0x32: |
| 531 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_32_1")->read(); |
| 532 | | break; |
| 533 | | case 0x33: |
| 534 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_33_1")->read(); |
| 535 | | break; |
| 536 | | case 0x34: |
| 537 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_34_1")->read(); |
| 538 | | break; |
| 539 | | case 0x35: |
| 540 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_35_1")->read(); |
| 541 | | break; |
| 542 | | case 0x36: |
| 543 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_36_1")->read(); |
| 544 | | break; |
| 545 | | case 0x37: |
| 546 | | keytronic->p1_data = space->machine().root_device().ioport("kb_keytronic_37_1")->read(); |
| 547 | | break; |
| 548 | | case 0x38: |
| 549 | | keytronic->p1_data = 0xff; |
| 550 | | break; |
| 551 | | case 0x39: |
| 552 | | keytronic->p1_data = 0xff; |
| 553 | | break; |
| 554 | | case 0x3a: |
| 555 | | keytronic->p1_data = 0xff; |
| 556 | | break; |
| 557 | | } |
| 558 | | } |
| 559 | | |
| 560 | | keytronic->last_write_addr = offset; |
| 561 | | } |
| 562 | | |
| 563 | | |
| 564 | | /***************************************************************************** |
| 565 | | ADDRESS MAPS |
| 566 | | *****************************************************************************/ |
| 567 | | |
| 568 | | static ADDRESS_MAP_START( keytronic_program, AS_PROGRAM, 8, kb_keytr_device ) |
| 569 | | AM_RANGE(0x0000, 0x0fff) AM_ROM AM_REGION("kb_keytr", 0) |
| 570 | | ADDRESS_MAP_END |
| 571 | | |
| 572 | | static ADDRESS_MAP_START( keytronic_io, AS_IO, 8, kb_keytr_device ) |
| 573 | | AM_RANGE(0x0000, 0xffff) AM_READWRITE_LEGACY(kb_keytronic_internal_data_r, kb_keytronic_internal_data_w) |
| 574 | | AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READWRITE_LEGACY(kb_keytronic_p1_r, kb_keytronic_p1_w) |
| 575 | | AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_READWRITE_LEGACY(kb_keytronic_p2_r, kb_keytronic_p2_w) |
| 576 | | AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READWRITE_LEGACY(kb_keytronic_p3_r, kb_keytronic_p3_w) |
| 577 | | ADDRESS_MAP_END |
| 578 | | |
| 579 | | |
| 580 | | /***************************************************************************** |
| 581 | | MACHINE CONFIG |
| 582 | | *****************************************************************************/ |
| 583 | | |
| 584 | | MACHINE_CONFIG_FRAGMENT( kb_keytr ) |
| 585 | | MCFG_CPU_ADD("kb_keytr", I8051, 11060250) |
| 586 | | MCFG_CPU_PROGRAM_MAP(keytronic_program) |
| 587 | | MCFG_CPU_IO_MAP(keytronic_io) |
| 588 | | MACHINE_CONFIG_END |
| 589 | | |
| 590 | | |
| 591 | | /*************************************************************************** |
| 592 | 347 | ROM DEFINITIONS |
| 593 | 348 | ***************************************************************************/ |
| 594 | 349 | |
| r15096 | r15097 | |
| 598 | 353 | ROM_END |
| 599 | 354 | |
| 600 | 355 | |
| 601 | | /***************************************************************************** |
| 602 | | DEVICE INTERFACE |
| 603 | | *****************************************************************************/ |
| 604 | | |
| 605 | | static DEVICE_START( kb_keytr ) |
| 606 | | { |
| 607 | | kb_keytr_state *keytronic = get_safe_token(device); |
| 608 | | const kb_keytronic_interface *intf = (const kb_keytronic_interface *)device->static_config(); |
| 609 | | |
| 610 | | /* find our cpu */ |
| 611 | | keytronic->cpu = device->subdevice("kb_keytr"); |
| 612 | | |
| 613 | | /* some basic checks */ |
| 614 | | assert(keytronic->cpu != NULL); |
| 615 | | assert(intf != NULL); |
| 616 | | |
| 617 | | /* resolve callbacks */ |
| 618 | | keytronic->out_clock_func.resolve(intf->out_clock_func, *device); |
| 619 | | keytronic->out_data_func.resolve(intf->out_data_func, *device); |
| 620 | | |
| 621 | | /* set default values */ |
| 622 | | keytronic->p3 = 0xff; |
| 623 | | |
| 624 | | /* setup savestates */ |
| 625 | | device->save_item(NAME(keytronic->clock_signal)); |
| 626 | | device->save_item(NAME(keytronic->data_signal)); |
| 627 | | device->save_item(NAME(keytronic->p1)); |
| 628 | | device->save_item(NAME(keytronic->p1_data)); |
| 629 | | device->save_item(NAME(keytronic->p2)); |
| 630 | | device->save_item(NAME(keytronic->p3)); |
| 631 | | device->save_item(NAME(keytronic->last_write_addr)); |
| 632 | | } |
| 633 | | |
| 634 | | |
| 635 | | /*************************************************************************** |
| 636 | | DEVICE GETINFO |
| 637 | | ***************************************************************************/ |
| 638 | | |
| 639 | | static const char DEVTEMPLATE_SOURCE[] = __FILE__; |
| 640 | | |
| 641 | | #define DEVTEMPLATE_ID(p,s) p##kb_keytr##s |
| 642 | | #define DEVTEMPLATE_FEATURES DT_HAS_START | DT_HAS_ROM_REGION | DT_HAS_MACHINE_CONFIG |
| 643 | | #define DEVTEMPLATE_NAME "Keytronic Keyboard" |
| 644 | | #define DEVTEMPLATE_SHORTNAME "kb_keytro" |
| 645 | | #define DEVTEMPLATE_FAMILY "PC Keyboard" |
| 646 | | #define DEVTEMPLATE_CLASS DEVICE_CLASS_PERIPHERAL |
| 647 | | #define DEVTEMPLATE_VERSION "1.0" |
| 648 | | #define DEVTEMPLATE_CREDITS "Copyright MESS Team" |
| 649 | | #include "devtempl.h" |
| 650 | | |
| 651 | | DEFINE_LEGACY_DEVICE(KB_KEYTRONIC, kb_keytr); |
| 652 | | |
| 653 | | |
| 654 | 356 | //************************************************************************** |
| 655 | 357 | // GLOBAL VARIABLES |
| 656 | 358 | //************************************************************************** |
| 657 | 359 | |
| 658 | | const device_type PC_KBD_KEYTRONIC_PC3270 = &device_creator<pc_kbd_keytronic_pc3270_device>; |
| 360 | const device_type PC_KBD_KEYTRONIC_PC3270 = &device_creator<pc_kbd_keytronic_pc3270_device>; |
| 361 | const device_type PC_KBD_KEYTRONIC_PC3270_AT = &device_creator<pc_kbd_keytronic_pc3270_at_device>; |
| 659 | 362 | |
| 660 | 363 | |
| 661 | 364 | /***************************************************************************** |
| r15096 | r15097 | |
| 747 | 450 | } |
| 748 | 451 | |
| 749 | 452 | |
| 453 | ioport_constructor pc_kbd_keytronic_pc3270_at_device::device_input_ports() const |
| 454 | { |
| 455 | return INPUT_PORTS_NAME( kb_keytronic_at ); |
| 456 | } |
| 457 | |
| 458 | |
| 750 | 459 | //------------------------------------------------- |
| 751 | 460 | // rom_region - device-specific ROM region |
| 752 | 461 | //------------------------------------------------- |
src/mess/machine/kb_keytro.h
| r15096 | r15097 | |
| 8 | 8 | #define __KB_KEYTRO_H__ |
| 9 | 9 | |
| 10 | 10 | #include "devcb.h" |
| 11 | | |
| 12 | | |
| 13 | | /*************************************************************************** |
| 14 | | TYPE DEFINITIONS |
| 15 | | ***************************************************************************/ |
| 16 | | |
| 17 | | typedef struct _kb_keytronic_interface kb_keytronic_interface; |
| 18 | | struct _kb_keytronic_interface |
| 19 | | { |
| 20 | | devcb_write_line out_clock_func; |
| 21 | | devcb_write_line out_data_func; |
| 22 | | }; |
| 23 | | |
| 24 | | |
| 25 | | /*************************************************************************** |
| 26 | | FUNCTION PROTOTYPES |
| 27 | | ***************************************************************************/ |
| 28 | | WRITE_LINE_DEVICE_HANDLER( kb_keytronic_clock_w ); |
| 29 | | WRITE_LINE_DEVICE_HANDLER( kb_keytronic_data_w ); |
| 30 | | |
| 31 | | |
| 32 | | /*************************************************************************** |
| 33 | | INPUT PORTS |
| 34 | | ***************************************************************************/ |
| 35 | | |
| 36 | | INPUT_PORTS_EXTERN( kb_keytronic_pc ); |
| 37 | | INPUT_PORTS_EXTERN( kb_keytronic_at ); |
| 38 | | |
| 39 | | |
| 40 | | /*************************************************************************** |
| 41 | | DEVICE CONFIGURATION MACROS |
| 42 | | ***************************************************************************/ |
| 43 | | |
| 44 | | DECLARE_LEGACY_DEVICE(KB_KEYTRONIC, kb_keytr); |
| 45 | | |
| 46 | | #define MCFG_KB_KEYTRONIC_ADD(_tag, _interface) \ |
| 47 | | MCFG_DEVICE_ADD(_tag, KB_KEYTRONIC, 0) \ |
| 48 | | MCFG_DEVICE_CONFIG(_interface) |
| 49 | | |
| 50 | | |
| 51 | 11 | #include "machine/pc_kbdc.h" |
| 52 | 12 | |
| 53 | 13 | //************************************************************************** |
| r15096 | r15097 | |
| 95 | 55 | }; |
| 96 | 56 | |
| 97 | 57 | |
| 58 | class pc_kbd_keytronic_pc3270_at_device : public pc_kbd_keytronic_pc3270_device |
| 59 | { |
| 60 | public: |
| 61 | // construction/destruction |
| 62 | pc_kbd_keytronic_pc3270_at_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 63 | : pc_kbd_keytronic_pc3270_device(mconfig, tag, owner, clock) |
| 64 | { |
| 65 | } |
| 66 | |
| 67 | virtual ioport_constructor device_input_ports() const; |
| 68 | }; |
| 69 | |
| 70 | |
| 98 | 71 | // device type definition |
| 99 | 72 | extern const device_type PC_KBD_KEYTRONIC_PC3270; |
| 73 | extern const device_type PC_KBD_KEYTRONIC_PC3270_AT; |
| 100 | 74 | |
| 101 | 75 | #endif /* __KB_KEYTRO_H__ */ |
src/mess/drivers/at.c
| r15096 | r15097 | |
| 11 | 11 | |
| 12 | 12 | |
| 13 | 13 | #include "includes/at.h" |
| 14 | #include "machine/pc_keyboards.h" |
| 14 | 15 | |
| 16 | |
| 15 | 17 | static ADDRESS_MAP_START( at16_map, AS_PROGRAM, 16, at_state ) |
| 16 | 18 | AM_RANGE(0x000000, 0x09ffff) AM_MIRROR(0xff000000) AM_RAMBANK("bank10") |
| 17 | 19 | AM_RANGE(0x0c0000, 0x0c7fff) AM_ROM |
| r15096 | r15097 | |
| 257 | 259 | PORT_DIPSETTING( 0x00, DEF_STR( No ) ) |
| 258 | 260 | PORT_DIPSETTING( 0x01, DEF_STR( Yes ) ) |
| 259 | 261 | |
| 260 | | PORT_INCLUDE( kb_keytronic_at ) /* IN4 - IN11 */ |
| 261 | 262 | PORT_INCLUDE( pcvideo_cga ) |
| 262 | 263 | INPUT_PORTS_END |
| 263 | 264 | |
| r15096 | r15097 | |
| 298 | 299 | PORT_DIPNAME( 0x01, 0x01, "Floppy installed") |
| 299 | 300 | PORT_DIPSETTING( 0x00, DEF_STR( No ) ) |
| 300 | 301 | PORT_DIPSETTING( 0x01, DEF_STR( Yes ) ) |
| 301 | | |
| 302 | | PORT_INCLUDE( kb_keytronic_at ) |
| 303 | 302 | INPUT_PORTS_END |
| 304 | 303 | |
| 305 | 304 | static const unsigned i286_address_mask = 0x00ffffff; |
| r15096 | r15097 | |
| 310 | 309 | DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), |
| 311 | 310 | DEVCB_DEVICE_LINE("pic8259_master", pic8259_ir1_w), |
| 312 | 311 | DEVCB_NULL, |
| 313 | | DEVCB_DEVICE_LINE("keyboard", kb_keytronic_clock_w), |
| 314 | | DEVCB_DEVICE_LINE("keyboard", kb_keytronic_data_w) |
| 312 | DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, clock_write_from_mb), |
| 313 | DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, data_write_from_mb) |
| 315 | 314 | }; |
| 316 | 315 | |
| 317 | | static const kb_keytronic_interface at_keytronic_intf = |
| 316 | static const pc_kbdc_interface pc_kbdc_intf = |
| 318 | 317 | { |
| 319 | 318 | DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_clock_w), |
| 320 | 319 | DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_data_w) |
| r15096 | r15097 | |
| 400 | 399 | MCFG_PIC8259_ADD( "pic8259_slave", at_pic8259_slave_config ) |
| 401 | 400 | |
| 402 | 401 | MCFG_AT_KEYBOARD_CONTROLLER_ADD("keybc", XTAL_12MHz, keyboard_controller_intf) |
| 403 | | MCFG_KB_KEYTRONIC_ADD("keyboard", at_keytronic_intf) |
| 402 | MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf) |
| 403 | MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_KEYTRONIC_PC3270, NULL) |
| 404 | 404 | |
| 405 | 405 | MCFG_MC146818_IRQ_ADD( "rtc", MC146818_STANDARD, at_mc146818_config ) |
| 406 | 406 | |
src/mess/drivers/pc.c
| r15096 | r15097 | |
| 95 | 95 | #include "machine/8237dma.h" |
| 96 | 96 | #include "sound/sn76496.h" |
| 97 | 97 | |
| 98 | | #include "machine/kb_keytro.h" |
| 99 | 98 | #include "machine/ram.h" |
| 99 | #include "machine/pc_keyboards.h" |
| 100 | 100 | |
| 101 | |
| 101 | 102 | static ADDRESS_MAP_START( pc8_map, AS_PROGRAM, 8, pc_state ) |
| 102 | 103 | ADDRESS_MAP_UNMAP_HIGH |
| 103 | 104 | AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10") |
| r15096 | r15097 | |
| 462 | 463 | PORT_BIT( 0x02, 0x02, IPT_UNUSED ) /* no turbo switch */ |
| 463 | 464 | PORT_BIT( 0x01, 0x01, IPT_UNUSED ) |
| 464 | 465 | |
| 465 | | PORT_INCLUDE( kb_keytronic_pc ) |
| 466 | 466 | PORT_INCLUDE( pc_joystick ) /* IN15 - IN19 */ |
| 467 | 467 | PORT_INCLUDE( pcvideo_cga ) |
| 468 | 468 | INPUT_PORTS_END |
| r15096 | r15097 | |
| 532 | 532 | PORT_BIT( 0x02, 0x02, IPT_UNUSED ) /* no turbo switch */ |
| 533 | 533 | PORT_BIT( 0x01, 0x01, IPT_UNUSED ) |
| 534 | 534 | |
| 535 | | PORT_INCLUDE( kb_keytronic_pc ) |
| 536 | 535 | PORT_INCLUDE( pc_joystick ) /* IN15 - IN19 */ |
| 537 | 536 | PORT_INCLUDE( pcvideo_cga ) |
| 538 | 537 | INPUT_PORTS_END |
| r15096 | r15097 | |
| 656 | 655 | PORT_BIT( 0x01, 0x01, IPT_UNUSED ) |
| 657 | 656 | |
| 658 | 657 | // PORT_INCLUDE( at_keyboard ) /* IN4 - IN11 */ |
| 659 | | PORT_INCLUDE( kb_keytronic_pc ) |
| 660 | 658 | PORT_INCLUDE( pc_joystick ) /* IN15 - IN19 */ |
| 661 | 659 | PORT_INCLUDE( pcvideo_cga ) |
| 662 | 660 | INPUT_PORTS_END |
| r15096 | r15097 | |
| 726 | 724 | SLOT_INTERFACE("mouse_systems_mouse", MSYSTEM_SERIAL_MOUSE) |
| 727 | 725 | SLOT_INTERFACE_END |
| 728 | 726 | |
| 729 | | static const kb_keytronic_interface pc_keytronic_intf = |
| 730 | | { |
| 731 | | DEVCB_DRIVER_MEMBER(pc_state, ibm5150_kb_set_clock_signal), |
| 732 | | DEVCB_DRIVER_MEMBER(pc_state, ibm5150_kb_set_data_signal), |
| 733 | | }; |
| 734 | | |
| 735 | | |
| 736 | 727 | #define MCFG_CPU_PC(mem, port, type, clock, vblankfunc) \ |
| 737 | 728 | MCFG_CPU_ADD("maincpu", type, clock) \ |
| 738 | 729 | MCFG_CPU_PROGRAM_MAP(mem##_map) \ |
| r15096 | r15097 | |
| 787 | 778 | GFXDECODE_END |
| 788 | 779 | |
| 789 | 780 | |
| 781 | static const pc_kbdc_interface pc_kbdc_intf = |
| 782 | { |
| 783 | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, pc_state, keyboard_clock_w), |
| 784 | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, pc_state, keyboard_data_w) |
| 785 | }; |
| 786 | |
| 787 | |
| 790 | 788 | static MACHINE_CONFIG_START( pccga, pc_state ) |
| 791 | 789 | /* basic machine hardware */ |
| 792 | 790 | MCFG_CPU_PC(pc8, pc8, I8088, 4772720, pc_frame_interrupt) /* 4,77 MHz */ |
| r15096 | r15097 | |
| 823 | 821 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 824 | 822 | |
| 825 | 823 | /* keyboard */ |
| 826 | | MCFG_KB_KEYTRONIC_ADD("keyboard", pc_keytronic_intf) |
| 824 | MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf) |
| 825 | MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270, NULL) |
| 827 | 826 | |
| 828 | 827 | /* printer */ |
| 829 | 828 | MCFG_PC_LPT_ADD("lpt_0", pc_lpt_config) |
| r15096 | r15097 | |
| 875 | 874 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 876 | 875 | |
| 877 | 876 | /* keyboard */ |
| 878 | | MCFG_KB_KEYTRONIC_ADD("keyboard", pc_keytronic_intf) |
| 877 | MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf) |
| 878 | MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270, NULL) |
| 879 | 879 | |
| 880 | 880 | /* printer */ |
| 881 | 881 | MCFG_PC_LPT_ADD("lpt_0", pc_lpt_config) |
| r15096 | r15097 | |
| 1244 | 1244 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 1245 | 1245 | |
| 1246 | 1246 | /* keyboard */ |
| 1247 | | MCFG_KB_KEYTRONIC_ADD("keyboard", pc_keytronic_intf) |
| 1247 | MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf) |
| 1248 | MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270, NULL) |
| 1248 | 1249 | |
| 1249 | 1250 | /* printer */ |
| 1250 | 1251 | MCFG_PC_LPT_ADD("lpt_0", pc_lpt_config) |
| r15096 | r15097 | |
| 1296 | 1297 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 1297 | 1298 | |
| 1298 | 1299 | /* keyboard */ |
| 1299 | | MCFG_KB_KEYTRONIC_ADD("keyboard", pc_keytronic_intf) |
| 1300 | MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf) |
| 1301 | MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270, NULL) |
| 1300 | 1302 | |
| 1301 | 1303 | /* printer */ |
| 1302 | 1304 | MCFG_PC_LPT_ADD("lpt_0", pc_lpt_config) |
| r15096 | r15097 | |
| 1349 | 1351 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 1350 | 1352 | |
| 1351 | 1353 | /* keyboard */ |
| 1352 | | MCFG_KB_KEYTRONIC_ADD("keyboard", pc_keytronic_intf) |
| 1354 | MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf) |
| 1355 | MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270, NULL) |
| 1353 | 1356 | |
| 1354 | 1357 | /* printer */ |
| 1355 | 1358 | MCFG_PC_LPT_ADD("lpt_0", pc_lpt_config) |
| r15096 | r15097 | |
| 1401 | 1404 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 1402 | 1405 | |
| 1403 | 1406 | /* keyboard */ |
| 1404 | | MCFG_KB_KEYTRONIC_ADD("keyboard", pc_keytronic_intf) |
| 1407 | MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf) |
| 1408 | MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270, NULL) |
| 1405 | 1409 | |
| 1406 | 1410 | /* printer */ |
| 1407 | 1411 | MCFG_PC_LPT_ADD("lpt_0", pc_lpt_config) |
| r15096 | r15097 | |
| 1453 | 1457 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 1454 | 1458 | |
| 1455 | 1459 | /* keyboard */ |
| 1456 | | MCFG_KB_KEYTRONIC_ADD("keyboard", pc_keytronic_intf) |
| 1460 | MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf) |
| 1461 | MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270, NULL) |
| 1457 | 1462 | |
| 1458 | 1463 | /* printer */ |
| 1459 | 1464 | MCFG_PC_LPT_ADD("lpt_0", pc_lpt_config) |
| r15096 | r15097 | |
| 1505 | 1510 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 1506 | 1511 | |
| 1507 | 1512 | /* keyboard */ |
| 1508 | | MCFG_KB_KEYTRONIC_ADD("keyboard", pc_keytronic_intf) |
| 1513 | MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf) |
| 1514 | MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270, NULL) |
| 1509 | 1515 | |
| 1510 | 1516 | /* printer */ |
| 1511 | 1517 | MCFG_PC_LPT_ADD("lpt_0", pc_lpt_config) |