trunk/src/mess/drivers/odyssey2.c
| r20530 | r20531 | |
| 31 | 31 | , m_i8243(*this, "i8243") |
| 32 | 32 | , m_i8244(*this, "i8244") |
| 33 | 33 | , m_ef9340_1(*this, "ef9340_1") |
| 34 | | { } |
| 34 | , m_user1(*this, "user1") |
| 35 | , m_bank1(*this, "bank1") |
| 36 | , m_bank2(*this, "bank2") |
| 37 | , m_key0(*this, "KEY0") |
| 38 | , m_key1(*this, "KEY1") |
| 39 | , m_key2(*this, "KEY2") |
| 40 | , m_key3(*this, "KEY3") |
| 41 | , m_key4(*this, "KEY4") |
| 42 | , m_key5(*this, "KEY5") |
| 43 | , m_joy0(*this, "JOY0") |
| 44 | , m_joy1(*this, "JOY1") |
| 45 | { } |
| 35 | 46 | |
| 36 | 47 | required_device<cpu_device> m_maincpu; |
| 37 | 48 | required_device<screen_device> m_screen; |
| r20530 | r20531 | |
| 79 | 90 | static const UINT8 P1_VDC_COPY_MODE_ENABLE = 0x40; |
| 80 | 91 | static const UINT8 P2_KEYBOARD_SELECT_MASK = 0x07; /* select row to scan */ |
| 81 | 92 | |
| 93 | required_memory_region m_user1; |
| 94 | |
| 95 | required_memory_bank m_bank1; |
| 96 | required_memory_bank m_bank2; |
| 97 | |
| 98 | required_ioport m_key0; |
| 99 | required_ioport m_key1; |
| 100 | required_ioport m_key2; |
| 101 | required_ioport m_key3; |
| 102 | required_ioport m_key4; |
| 103 | required_ioport m_key5; |
| 104 | required_ioport m_joy0; |
| 105 | required_ioport m_joy1; |
| 106 | |
| 82 | 107 | UINT8 m_g7400_ic674_decode[8]; |
| 83 | 108 | UINT8 m_g7400_ic678_decode[8]; |
| 84 | 109 | |
| r20530 | r20531 | |
| 267 | 292 | { |
| 268 | 293 | case 12288: |
| 269 | 294 | /* 12KB cart support (for instance, KTAA as released) */ |
| 270 | | membank( "bank1" )->set_base( memregion("user1")->base() + (m_p1 & 0x03) * 0xC00 ); |
| 271 | | membank( "bank2" )->set_base( memregion("user1")->base() + (m_p1 & 0x03) * 0xC00 + 0x800 ); |
| 295 | m_bank1->set_base( m_user1->base() + (m_p1 & 0x03) * 0xC00 ); |
| 296 | m_bank2->set_base( m_user1->base() + (m_p1 & 0x03) * 0xC00 + 0x800 ); |
| 272 | 297 | break; |
| 273 | 298 | |
| 274 | 299 | case 16384: |
| 275 | 300 | /* 16KB cart support (for instance, full sized version KTAA) */ |
| 276 | | membank( "bank1" )->set_base( memregion("user1")->base() + (m_p1 & 0x03) * 0x1000 + 0x400 ); |
| 277 | | membank( "bank2" )->set_base( memregion("user1")->base() + (m_p1 & 0x03) * 0x1000 + 0xC00 ); |
| 301 | m_bank1->set_base( m_user1->base() + (m_p1 & 0x03) * 0x1000 + 0x400 ); |
| 302 | m_bank2->set_base( m_user1->base() + (m_p1 & 0x03) * 0x1000 + 0xC00 ); |
| 278 | 303 | break; |
| 279 | 304 | |
| 280 | 305 | default: |
| 281 | | membank("bank1")->set_base(memregion("user1")->base() + (m_p1 & 0x03) * 0x800); |
| 282 | | membank("bank2")->set_base(memregion("user1")->base() + (m_p1 & 0x03) * 0x800 ); |
| 306 | m_bank1->set_base( m_user1->base() + (m_p1 & 0x03) * 0x800 ); |
| 307 | m_bank2->set_base( m_user1->base() + (m_p1 & 0x03) * 0x800 ); |
| 283 | 308 | break; |
| 284 | 309 | } |
| 285 | 310 | } |
| r20530 | r20531 | |
| 515 | 540 | { |
| 516 | 541 | UINT8 h = 0xFF; |
| 517 | 542 | int i, j; |
| 518 | | static const char *const keynames[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5" }; |
| 543 | ioport_port* ioports[] = { m_key0, m_key1, m_key2, m_key3, m_key4, m_key5 }; |
| 519 | 544 | |
| 520 | 545 | if (!(m_p1 & P1_KEYBOARD_SCAN_ENABLE)) |
| 521 | 546 | { |
| 522 | 547 | if ((m_p2 & P2_KEYBOARD_SELECT_MASK) <= 5) /* read keyboard */ |
| 523 | 548 | { |
| 524 | | h &= ioport(keynames[m_p2 & P2_KEYBOARD_SELECT_MASK])->read(); |
| 549 | h &= ioports[m_p2 & P2_KEYBOARD_SELECT_MASK]->read(); |
| 525 | 550 | } |
| 526 | 551 | |
| 527 | 552 | for (i= 0x80, j = 0; i > 0; i >>= 1, j++) |
| r20530 | r20531 | |
| 566 | 591 | |
| 567 | 592 | if ((m_p2 & P2_KEYBOARD_SELECT_MASK) == 1) |
| 568 | 593 | { |
| 569 | | data &= ioport("JOY0")->read(); /* read joystick 1 */ |
| 594 | data &= m_joy0->read(); /* read joystick 1 */ |
| 570 | 595 | } |
| 571 | 596 | |
| 572 | 597 | if ((m_p2 & P2_KEYBOARD_SELECT_MASK) == 0) |
| 573 | 598 | { |
| 574 | | data &= ioport("JOY1")->read(); /* read joystick 2 */ |
| 599 | data &= m_joy1->read(); /* read joystick 2 */ |
| 575 | 600 | } |
| 576 | 601 | |
| 577 | 602 | return data; |