trunk/src/mess/drivers/px4.c
| r18809 | r18810 | |
| 187 | 187 | TIMER_DEVICE_CALLBACK_MEMBER(frc_tick); |
| 188 | 188 | TIMER_DEVICE_CALLBACK_MEMBER(upd7508_1sec_callback); |
| 189 | 189 | |
| 190 | | void px4_sio_txd(device_t *device,int state); |
| 191 | | int px4_sio_rxd(device_t *device); |
| 192 | | int px4_sio_pin(device_t *device); |
| 193 | | void px4_sio_pout(device_t *device,int state); |
| 194 | 190 | void px4_rs232c_txd(device_t *device,int state); |
| 195 | 191 | int px4_rs232c_rxd(device_t *device); |
| 196 | 192 | void px4_rs232c_rts(device_t *device,int state); |
| r18809 | r18810 | |
| 474 | 470 | void px4_state::install_rom_capsule(address_space &space, int size, const char *region) |
| 475 | 471 | { |
| 476 | 472 | // ram, part 1 |
| 477 | | space.install_readwrite_bank(0x0000, 0xdfff - size, "bank1"); |
| 478 | | membank("bank1")->set_base(m_ram->pointer()); |
| 473 | space.install_ram(0x0000, 0xdfff - size, 0, 0, m_ram->pointer()); |
| 479 | 474 | |
| 480 | 475 | // actual rom data, part 1 |
| 481 | | space.install_read_bank(0xe000 - size, 0xffff - size, "bank2"); |
| 482 | | space.nop_write(0xe000 - size, 0xffff - size); |
| 483 | | membank("bank2")->set_base(memregion(region)->base() + (size - 0x2000)); |
| 476 | space.install_rom(0xe000 - size, 0xffff, 0, 0, memregion(region)->base() + (size - 0x2000)); |
| 484 | 477 | |
| 485 | 478 | // rom data, part 2 |
| 486 | 479 | if (size != 0x2000) |
| 487 | 480 | { |
| 488 | | space.install_read_bank(0x10000 - size, 0xdfff, "bank3"); |
| 489 | | space.nop_write(0x10000 - size, 0xdfff); |
| 490 | | membank("bank3")->set_base(memregion(region)->base()); |
| 481 | space.install_rom(0x10000 - size, 0xdfff, 0, 0, memregion(region)->base()); |
| 491 | 482 | } |
| 492 | 483 | |
| 493 | 484 | // ram, continued |
| 494 | | space.install_readwrite_bank(0xe000, 0xffff, "bank4"); |
| 495 | | membank("bank4")->set_base(m_ram->pointer() + 0xe000); |
| 485 | space.install_ram(0xe000, 0xffff, 0, 0, m_ram->pointer() + 0xe000); |
| 496 | 486 | } |
| 497 | 487 | |
| 498 | 488 | // bank register |
| r18809 | r18810 | |
| 505 | 495 | |
| 506 | 496 | m_bankr = data; |
| 507 | 497 | |
| 508 | | /* bank switch */ |
| 498 | // bank switch |
| 509 | 499 | switch (data >> 4) |
| 510 | 500 | { |
| 511 | 501 | case 0x00: |
| 512 | | /* system bank */ |
| 513 | | space_program.install_read_bank(0x0000, 0x7fff, "bank1"); |
| 514 | | space_program.nop_write(0x0000, 0x7fff); |
| 515 | | membank("bank1")->set_base(memregion("os")->base()); |
| 516 | | space_program.install_readwrite_bank(0x8000, 0xffff, "bank2"); |
| 517 | | membank("bank2")->set_base(m_ram->pointer() + 0x8000); |
| 502 | // system bank |
| 503 | space_program.install_rom(0x0000, 0x7fff, 0, 0, memregion("os")->base()); |
| 504 | space_program.install_ram(0x8000, 0xffff, 0, 0, m_ram->pointer() + 0x8000); |
| 518 | 505 | break; |
| 519 | 506 | |
| 520 | 507 | case 0x04: |
| 521 | | /* memory */ |
| 522 | | space_program.install_readwrite_bank(0x0000, 0xffff, "bank1"); |
| 523 | | membank("bank1")->set_base(m_ram->pointer()); |
| 508 | // memory |
| 509 | space_program.install_ram(0x0000, 0xffff, 0, 0, m_ram->pointer()); |
| 524 | 510 | break; |
| 525 | 511 | |
| 526 | 512 | case 0x08: install_rom_capsule(space_program, 0x2000, "capsule1"); break; |
| r18809 | r18810 | |
| 584 | 570 | } |
| 585 | 571 | else |
| 586 | 572 | { |
| 587 | | // nothing happenend |
| 573 | // nothing happened |
| 588 | 574 | m_sior = 0xbf; |
| 589 | 575 | } |
| 590 | 576 | |
| r18809 | r18810 | |
| 751 | 737 | if (VERBOSE) |
| 752 | 738 | logerror("%s: px4_artdir_r\n", machine().describe_context()); |
| 753 | 739 | |
| 740 | // clear ready |
| 741 | m_artsr &= ~ART_RXRDY; |
| 742 | |
| 754 | 743 | return m_artdir; |
| 755 | 744 | } |
| 756 | 745 | |
| r18809 | r18810 | |
| 798 | 787 | |
| 799 | 788 | result |= m_centronics->busy_r() << 0; |
| 800 | 789 | result |= !m_centronics->pe_r() << 1; |
| 801 | | result |= m_sio->pin_r() << 2; |
| 790 | result |= !m_sio->pin_r() << 2; |
| 802 | 791 | result |= m_sio->rx_r() << 3; |
| 803 | 792 | result |= px4_rs232c_dcd(m_rs232c_device) << 4; |
| 804 | 793 | result |= px4_rs232c_cts(m_rs232c_device) << 5; |
| r18809 | r18810 | |
| 858 | 847 | m_centronics->strobe_w(!BIT(data, 0)); |
| 859 | 848 | m_centronics->init_prime_w(BIT(data, 1)); |
| 860 | 849 | |
| 861 | | m_sio->pout_w(BIT(data, 2)); |
| 850 | m_sio->pout_w(!BIT(data, 2)); |
| 862 | 851 | |
| 863 | 852 | // bit 3, cartridge reset |
| 864 | 853 | |