trunk/src/mess/machine/nes.c
r23726 | r23727 | |
51 | 51 | m_paddle_btn_latch = 0; |
52 | 52 | } |
53 | 53 | |
54 | | static void nes_state_register( running_machine &machine ) |
| 54 | void nes_state::state_register() |
55 | 55 | { |
56 | | nes_state *state = machine.driver_data<nes_state>(); |
| 56 | save_item(NAME(m_last_frame_flip)); |
57 | 57 | |
58 | | state->save_item(NAME(state->m_last_frame_flip)); |
| 58 | save_item(NAME(m_fds_motor_on)); |
| 59 | save_item(NAME(m_fds_door_closed)); |
| 60 | save_item(NAME(m_fds_current_side)); |
| 61 | save_item(NAME(m_fds_head_position)); |
| 62 | save_item(NAME(m_fds_status0)); |
| 63 | save_item(NAME(m_fds_read_mode)); |
| 64 | save_item(NAME(m_fds_write_reg)); |
| 65 | save_item(NAME(m_fds_last_side)); |
| 66 | save_item(NAME(m_fds_count)); |
| 67 | save_item(NAME(m_fds_mirroring)); |
59 | 68 | |
60 | | state->save_item(NAME(state->m_fds_motor_on)); |
61 | | state->save_item(NAME(state->m_fds_door_closed)); |
62 | | state->save_item(NAME(state->m_fds_current_side)); |
63 | | state->save_item(NAME(state->m_fds_head_position)); |
64 | | state->save_item(NAME(state->m_fds_status0)); |
65 | | state->save_item(NAME(state->m_fds_read_mode)); |
66 | | state->save_item(NAME(state->m_fds_write_reg)); |
67 | | state->save_item(NAME(state->m_fds_last_side)); |
68 | | state->save_item(NAME(state->m_fds_count)); |
69 | | state->save_item(NAME(state->m_fds_mirroring)); |
| 69 | save_pointer(NAME(m_ciram), 0x800); |
70 | 70 | |
71 | | state->save_pointer(NAME(state->m_ciram), 0x800); |
| 71 | if (m_disk_expansion) |
| 72 | save_pointer(NAME(m_vram), 0x800); |
72 | 73 | |
73 | | if (state->m_disk_expansion) |
74 | | state->save_pointer(NAME(state->m_vram), 0x800); |
75 | | |
76 | | state->save_item(NAME(state->m_pad_latch)); |
77 | | state->save_item(NAME(state->m_zapper_latch)); |
78 | | state->save_item(NAME(state->m_paddle_latch)); |
79 | | state->save_item(NAME(state->m_paddle_btn_latch)); |
80 | | state->save_item(NAME(state->m_mjpanel_latch)); |
| 74 | save_item(NAME(m_pad_latch)); |
| 75 | save_item(NAME(m_zapper_latch)); |
| 76 | save_item(NAME(m_paddle_latch)); |
| 77 | save_item(NAME(m_paddle_btn_latch)); |
| 78 | save_item(NAME(m_mjpanel_latch)); |
| 79 | save_item(NAME(m_fck_scan)); |
| 80 | save_item(NAME(m_fck_mode)); |
| 81 | save_item(NAME(m_mic_obstruct)); |
81 | 82 | } |
82 | 83 | |
83 | 84 | |
r23726 | r23727 | |
197 | 198 | membank("fdsram")->set_base(m_fds_ram); |
198 | 199 | } |
199 | 200 | |
200 | | nes_state_register(machine()); |
| 201 | state_register(); |
201 | 202 | } |
202 | 203 | |
203 | 204 | |
r23726 | r23727 | |
374 | 375 | |
375 | 376 | READ8_MEMBER(nes_state::fc_in0_r) |
376 | 377 | { |
| 378 | int cfg = m_io_ctrlsel->read(); |
377 | 379 | int exp = m_io_exp->read(); |
378 | 380 | |
379 | 381 | // Some games expect bit 6 to be set because the last entry on the data bus shows up |
r23726 | r23727 | |
383 | 385 | |
384 | 386 | // shift |
385 | 387 | m_pad_latch[0] >>= 1; |
386 | | |
| 388 | |
| 389 | // microphone bit |
| 390 | if ((cfg & 0x00f0) == 0x00f0) |
| 391 | ret |= m_mic_obstruct; //bit2! |
| 392 | |
387 | 393 | // EXP input |
388 | 394 | switch (exp & 0x0f) |
389 | 395 | { |
r23726 | r23727 | |
542 | 548 | m_paddle_btn_latch = 0; |
543 | 549 | m_paddle_latch = 0; |
544 | 550 | m_mjpanel_latch = 0; |
| 551 | m_mic_obstruct = 0; |
545 | 552 | |
546 | 553 | // P1 inputs |
547 | 554 | switch (cfg & 0x000f) |
r23726 | r23727 | |
566 | 573 | m_pad_latch[1] = m_io_cc_right->read(); |
567 | 574 | break; |
568 | 575 | |
| 576 | case 0x0f: // pad 2 old style with microphone instead of START/SELECT keys |
| 577 | // we only emulate obstruction of mic (when you blow or talk into it) |
| 578 | m_mic_obstruct = m_io_pad[1]->read() & 0x04; |
| 579 | m_pad_latch[1] = (m_io_pad[1]->read() & ~0x04); |
| 580 | break; |
569 | 581 | } |
570 | 582 | |
571 | 583 | // P3 & P4 inputs in Famicom (e.g. through Hori Twin Adapter or Hori 4 Players Adapter) |
trunk/src/mess/includes/nes.h
r23726 | r23727 | |
512 | 512 | DECLARE_READ8_MEMBER(psg_4015_r); |
513 | 513 | DECLARE_WRITE8_MEMBER(psg_4015_w); |
514 | 514 | DECLARE_WRITE8_MEMBER(psg_4017_w); |
| 515 | void state_register(); |
515 | 516 | |
516 | 517 | /***** FDS-floppy related *****/ |
517 | 518 | |
r23726 | r23727 | |
551 | 552 | |
552 | 553 | void fds_irq(int scanline, int vblank, int blanked); |
553 | 554 | |
| 555 | // input related |
554 | 556 | UINT32 m_pad_latch[4]; |
555 | 557 | UINT8 m_zapper_latch[2][3]; |
556 | 558 | UINT8 m_paddle_latch, m_paddle_btn_latch; |
557 | 559 | UINT8 m_mjpanel_latch; |
558 | 560 | UINT8 m_fck_scan, m_fck_mode; |
| 561 | UINT8 m_mic_obstruct; |
559 | 562 | |
560 | 563 | protected: |
561 | 564 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
trunk/src/mess/drivers/nes.c
r23726 | r23727 | |
184 | 184 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0010) |
185 | 185 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0010) |
186 | 186 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0010) |
| 187 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P2 A") PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x00f0) |
| 188 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P2 B") PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x00f0) |
| 189 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_NAME("Microphone") PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x00f0) |
| 190 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x00f0) |
| 191 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x00f0) |
| 192 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x00f0) |
| 193 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x00f0) |
| 194 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x00f0) |
187 | 195 | |
188 | 196 | INPUT_PORTS_END |
189 | 197 | |
r23726 | r23727 | |
523 | 531 | PORT_CONFSETTING( 0x0000, "Unconnected" ) |
524 | 532 | PORT_CONFSETTING( 0x0010, "Gamepad" ) |
525 | 533 | PORT_CONFSETTING( 0x0020, "Crazy Climber pad (Right)" ) |
| 534 | PORT_CONFSETTING( 0x00f0, "Gamepad (Older Version)" ) |
526 | 535 | PORT_CONFNAME( 0x0f00, 0x0000, "P3 Controller") PORT_CONDITION("EXP", 0x0f, EQUALS, 0x07) |
527 | 536 | PORT_CONFSETTING( 0x0000, "Unconnected" ) |
528 | 537 | PORT_CONFSETTING( 0x0100, "Gamepad" ) |