trunk/src/mess/drivers/mephisto.c
| r20510 | r20511 | |
| 72 | 72 | { |
| 73 | 73 | public: |
| 74 | 74 | mephisto_state(const machine_config &mconfig, device_type type, const char *tag) |
| 75 | | : mboard_state(mconfig, type, tag), |
| 76 | | m_maincpu(*this, "maincpu"), |
| 77 | | m_beep(*this, BEEPER_TAG) |
| 75 | : mboard_state(mconfig, type, tag) |
| 76 | , m_maincpu(*this, "maincpu") |
| 77 | , m_beep(*this, BEEPER_TAG) |
| 78 | , m_key1_0(*this, "KEY1_0") |
| 79 | , m_key1_1(*this, "KEY1_1") |
| 80 | , m_key1_2(*this, "KEY1_2") |
| 81 | , m_key1_3(*this, "KEY1_3") |
| 82 | , m_key1_4(*this, "KEY1_4") |
| 83 | , m_key1_5(*this, "KEY1_5") |
| 84 | , m_key1_6(*this, "KEY1_6") |
| 85 | , m_key1_7(*this, "KEY1_7") |
| 86 | , m_key2_0(*this, "KEY2_0") |
| 87 | , m_key2_1(*this, "KEY2_1") |
| 88 | , m_key2_2(*this, "KEY2_2") |
| 89 | , m_key2_3(*this, "KEY2_3") |
| 90 | , m_key2_4(*this, "KEY2_4") |
| 91 | , m_key2_5(*this, "KEY2_5") |
| 92 | , m_key2_6(*this, "KEY2_6") |
| 93 | , m_key2_7(*this, "KEY2_7") |
| 78 | 94 | { } |
| 79 | 95 | |
| 80 | 96 | required_device<m65c02_device> m_maincpu; |
| r20510 | r20511 | |
| 96 | 112 | TIMER_DEVICE_CALLBACK_MEMBER(update_nmi); |
| 97 | 113 | TIMER_DEVICE_CALLBACK_MEMBER(update_nmi_r5); |
| 98 | 114 | TIMER_DEVICE_CALLBACK_MEMBER(update_irq); |
| 115 | |
| 116 | protected: |
| 117 | required_ioport m_key1_0; |
| 118 | required_ioport m_key1_1; |
| 119 | required_ioport m_key1_2; |
| 120 | required_ioport m_key1_3; |
| 121 | required_ioport m_key1_4; |
| 122 | required_ioport m_key1_5; |
| 123 | required_ioport m_key1_6; |
| 124 | required_ioport m_key1_7; |
| 125 | required_ioport m_key2_0; |
| 126 | required_ioport m_key2_1; |
| 127 | required_ioport m_key2_2; |
| 128 | required_ioport m_key2_3; |
| 129 | required_ioport m_key2_4; |
| 130 | required_ioport m_key2_5; |
| 131 | required_ioport m_key2_6; |
| 132 | required_ioport m_key2_7; |
| 99 | 133 | }; |
| 100 | 134 | |
| 101 | 135 | |
| r20510 | r20511 | |
| 115 | 149 | |
| 116 | 150 | READ8_MEMBER( mephisto_state::read_keys ) |
| 117 | 151 | { |
| 118 | | UINT8 data; |
| 119 | | static const char *const keynames[2][8] = |
| 120 | | { |
| 121 | | { "KEY1_0", "KEY1_1", "KEY1_2", "KEY1_3", "KEY1_4", "KEY1_5", "KEY1_6", "KEY1_7" }, |
| 122 | | { "KEY2_0", "KEY2_1", "KEY2_2", "KEY2_3", "KEY2_4", "KEY2_5", "KEY2_6", "KEY2_7" } |
| 123 | | }; |
| 152 | UINT8 data = 0; |
| 124 | 153 | |
| 125 | 154 | if (((m_led_status & 0x80) == 0x00)) |
| 126 | | data=ioport(keynames[0][offset])->read(); |
| 155 | { |
| 156 | switch ( offset ) |
| 157 | { |
| 158 | case 0: data = m_key1_0->read(); break; |
| 159 | case 1: data = m_key1_1->read(); break; |
| 160 | case 2: data = m_key1_2->read(); break; |
| 161 | case 3: data = m_key1_3->read(); break; |
| 162 | case 4: data = m_key1_4->read(); break; |
| 163 | case 5: data = m_key1_5->read(); break; |
| 164 | case 6: data = m_key1_6->read(); break; |
| 165 | case 7: data = m_key1_7->read(); break; |
| 166 | } |
| 167 | } |
| 127 | 168 | else |
| 128 | | data=ioport(keynames[1][offset])->read(); |
| 169 | { |
| 170 | switch ( offset ) |
| 171 | { |
| 172 | case 0: data = m_key2_0->read(); break; |
| 173 | case 1: data = m_key2_1->read(); break; |
| 174 | case 2: data = m_key2_2->read(); break; |
| 175 | case 3: data = m_key2_3->read(); break; |
| 176 | case 4: data = m_key2_4->read(); break; |
| 177 | case 5: data = m_key2_5->read(); break; |
| 178 | case 6: data = m_key2_6->read(); break; |
| 179 | case 7: data = m_key2_7->read(); break; |
| 180 | } |
| 181 | } |
| 129 | 182 | |
| 130 | | logerror("Keyboard Port = %s Data = %d\n ", ((m_led_status & 0x80) == 0x00) ? keynames[0][offset] : keynames[1][offset], data); |
| 183 | logerror("Keyboard Port = %d-%d Data = %d\n ", ((m_led_status & 0x80) == 0x00) ? 0 : 1, offset, data); |
| 131 | 184 | return data | 0x7f; |
| 132 | 185 | } |
| 133 | 186 | |
| r20510 | r20511 | |
| 338 | 391 | if (m_allowNMI) |
| 339 | 392 | { |
| 340 | 393 | m_allowNMI = 0; |
| 341 | | machine().device("maincpu")->execute().set_input_line(INPUT_LINE_NMI,PULSE_LINE); |
| 394 | m_maincpu->set_input_line(INPUT_LINE_NMI,PULSE_LINE); |
| 342 | 395 | } |
| 343 | 396 | beep_set_state(m_beep, m_led_status&64?1:0); |
| 344 | 397 | } |
| 345 | 398 | |
| 346 | 399 | TIMER_DEVICE_CALLBACK_MEMBER(mephisto_state::update_nmi_r5) |
| 347 | 400 | { |
| 348 | | machine().device("maincpu")->execute().set_input_line(INPUT_LINE_NMI,PULSE_LINE); |
| 401 | m_maincpu->set_input_line(INPUT_LINE_NMI,PULSE_LINE); |
| 349 | 402 | beep_set_state(m_beep, m_led_status&64?1:0); |
| 350 | 403 | } |
| 351 | 404 | |
| 352 | 405 | TIMER_DEVICE_CALLBACK_MEMBER(mephisto_state::update_irq)//only mm2 |
| 353 | 406 | { |
| 354 | 407 | // That will not work |
| 355 | | machine().device("maincpu")->execute().set_input_line(M65C02_IRQ_LINE, ASSERT_LINE); |
| 356 | | machine().device("maincpu")->execute().set_input_line(M65C02_IRQ_LINE, CLEAR_LINE); |
| 408 | m_maincpu->set_input_line(M65C02_IRQ_LINE, ASSERT_LINE); |
| 409 | m_maincpu->set_input_line(M65C02_IRQ_LINE, CLEAR_LINE); |
| 357 | 410 | |
| 358 | 411 | beep_set_state(m_beep, m_led_status&64?1:0); |
| 359 | 412 | } |