diff options
author | Robbbert <Robbbert@users.noreply.github.com> | 2021-07-09 11:14:16 +1000 |
---|---|---|
committer | Robbbert <Robbbert@users.noreply.github.com> | 2021-07-09 11:14:16 +1000 |
commit | ca5567e1db269e9e3b9f68af3255a3e0d5965889 (patch) | |
tree | 4144e7c85c6740c9a4c7dbbfe3b7a956a548d18f | |
parent | 911f056a939abeaa73b28454cb4d688d83bb5b8b (diff) |
rx78: keyboard / joystick cleanup
-rw-r--r-- | src/mame/drivers/rx78.cpp | 122 |
1 files changed, 59 insertions, 63 deletions
diff --git a/src/mame/drivers/rx78.cpp b/src/mame/drivers/rx78.cpp index cd1fc360f85..b7b3075130a 100644 --- a/src/mame/drivers/rx78.cpp +++ b/src/mame/drivers/rx78.cpp @@ -12,7 +12,8 @@ TODO: - Keyboard works in all scenarios, but it is a guess. - RAM handling can't be right: PCB has 30KB shared RAM (manual also says this in the technical specs), but MAME allocates much more -- Find out what port F3 does - read and write +- Find out what port F3 does - read and write - used by many games +- Find out what ports 23 and EF do - used by rengo Notes: - BS-BASIC v1.0 notes: @@ -85,6 +86,7 @@ public: , m_cart(*this, "cartslot") , m_ram(*this, RAM_TAG) , m_palette(*this, "palette") + , m_io_keyboard(*this, "X%u", 0U) { } void init_rx78(); @@ -113,12 +115,12 @@ private: void rx78_io(address_map &map); void rx78_mem(address_map &map); - u8 m_vram_read_bank; - u8 m_vram_write_bank; + u8 m_vram_read_bank = 0; + u8 m_vram_write_bank = 0; u8 m_pal_reg[7]; - u8 m_pri_mask; - u8 m_key_mux; - u8 m_background; + u8 m_pri_mask = 0; + u8 m_key_mux = 0; + u8 m_background = 0; bool m_irq_en = 1; u8 m_irq_slow = 0; u8 m_irq_count = 0; @@ -128,6 +130,7 @@ private: required_device<generic_slot_device> m_cart; required_device<ram_device> m_ram; required_device<palette_device> m_palette; + required_ioport_array<16> m_io_keyboard; }; @@ -192,17 +195,12 @@ uint32_t rx78_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, u8 rx78_state::key_r() { - static const char *const keynames[] = { "KEY0", "KEY1", "KEY2", "KEY3", - "KEY4", "KEY5", "KEY6", "KEY7", - "KEY8", "JOY1P_0","JOY1P_1","JOY1P_2", - "JOY2P_0", "JOY2P_1", "JOY2P_2", "UNUSED" }; - - if(m_key_mux >= 1 && m_key_mux <= 15) - return ioport(keynames[m_key_mux - 1])->read(); + if((m_key_mux >= 1) && (m_key_mux <= 15)) + return m_io_keyboard[m_key_mux]->read(); u8 res = 0; - for(u8 i=0; i<15; i++) - res |= ioport(keynames[i])->read(); + for(u8 i=1; i<10; i++) + res |= m_io_keyboard[i]->read(); return res; } @@ -210,7 +208,7 @@ u8 rx78_state::key_r() void rx78_state::key_w(u8 data) { // special codes: 10 (disable irq?) used by gundam and exbaseb; 30 (no idea) used by basic - m_key_mux = data; + m_key_mux = data & 15; m_irq_en = !BIT(data, 4); m_maincpu->set_input_line(0, CLEAR_LINE); // fixes exbaseb opening screen } @@ -303,8 +301,10 @@ void rx78_state::rx78_io(address_map &map) { map.unmap_value_high(); map.global_mask(0xff); +// map(0x23, 0x23).nopw(); //used by rengo // map(0xe2, 0xe2).noprw(); //printer // map(0xe3, 0xe3).nopw(); //printer +// map(0xef, 0xef).nopw(); //used by rengo map(0xf0, 0xf0).rw(FUNC(rx78_state::cass_r), FUNC(rx78_state::cass_w)); //cmt map(0xf1, 0xf1).w(FUNC(rx78_state::vram_read_bank_w)); map(0xf2, 0xf2).w(FUNC(rx78_state::vram_write_bank_w)); @@ -318,7 +318,10 @@ void rx78_state::rx78_io(address_map &map) /* Input ports */ static INPUT_PORTS_START( rx78 ) - PORT_START("KEY0") + PORT_START("X0") + PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("X1") PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_BIT(0x02,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') PORT_BIT(0x04,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') @@ -328,7 +331,7 @@ static INPUT_PORTS_START( rx78 ) PORT_BIT(0x40,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') PORT_BIT(0x80,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') - PORT_START("KEY1") + PORT_START("X2") PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') PORT_BIT(0x02,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') PORT_BIT(0x04,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(":") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*') @@ -338,7 +341,7 @@ static INPUT_PORTS_START( rx78 ) PORT_BIT(0x40,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') PORT_BIT(0x80,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("/") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') - PORT_START("KEY2") + PORT_START("X3") PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('@') PORT_CHAR('`') PORT_BIT(0x02,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a') PORT_BIT(0x04,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b') @@ -348,7 +351,7 @@ static INPUT_PORTS_START( rx78 ) PORT_BIT(0x40,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f') PORT_BIT(0x80,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g') - PORT_START("KEY3") + PORT_START("X4") PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') PORT_BIT(0x02,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i') PORT_BIT(0x04,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') @@ -358,7 +361,7 @@ static INPUT_PORTS_START( rx78 ) PORT_BIT(0x40,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n') PORT_BIT(0x80,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o') - PORT_START("KEY4") + PORT_START("X5") PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') PORT_BIT(0x02,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q') PORT_BIT(0x04,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') @@ -368,7 +371,7 @@ static INPUT_PORTS_START( rx78 ) PORT_BIT(0x40,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v') PORT_BIT(0x80,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w') - PORT_START("KEY5") + PORT_START("X6") PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') PORT_BIT(0x02,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y') PORT_BIT(0x04,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z') @@ -378,7 +381,7 @@ static INPUT_PORTS_START( rx78 ) PORT_BIT(0x40,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Up Down Arrow") PORT_CODE(KEYCODE_PGUP) PORT_CHAR('^') PORT_BIT(0x80,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Right Left Arrow") PORT_CODE(KEYCODE_PGDN) - PORT_START("KEY6") + PORT_START("X7") PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') PORT_BIT(0x02,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_BIT(0x04,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) @@ -388,7 +391,7 @@ static INPUT_PORTS_START( rx78 ) PORT_BIT(0x40,IP_ACTIVE_HIGH,IPT_UNUSED ) PORT_BIT(0x80,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("INST / DEL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) - PORT_START("KEY7") + PORT_START("X8") PORT_BIT(0x07,IP_ACTIVE_HIGH,IPT_UNUSED ) PORT_BIT(0x08,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("STOP") PORT_CODE(KEYCODE_END) PORT_CHAR(0xff) PORT_CHAR(3) PORT_BIT(0x10,IP_ACTIVE_HIGH,IPT_UNUSED ) @@ -396,50 +399,43 @@ static INPUT_PORTS_START( rx78 ) PORT_BIT(0x40,IP_ACTIVE_HIGH,IPT_UNUSED ) PORT_BIT(0x80,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("SFT LOCK") PORT_CODE(KEYCODE_CAPSLOCK) - PORT_START("KEY8") + PORT_START("X9") PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) //kana shift? PORT_BIT(0x02,IP_ACTIVE_HIGH,IPT_UNUSED ) PORT_BIT(0x04,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_BIT(0xf8,IP_ACTIVE_HIGH,IPT_UNUSED ) - PORT_START("JOY1P_0") - PORT_BIT( 0x11, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x22, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Up Left") PORT_PLAYER(1) - PORT_BIT( 0x44, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x88, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) - - PORT_START("JOY1P_1") - PORT_BIT( 0x11, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Down Left") PORT_PLAYER(1) - PORT_BIT( 0x22, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Up Right") PORT_PLAYER(1) - PORT_BIT( 0x44, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x88, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("JOY1P_2") - PORT_BIT( 0x11, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x22, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Down Right") PORT_PLAYER(1) - PORT_BIT( 0x44, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x88, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) - - PORT_START("JOY2P_0") - PORT_BIT( 0x11, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x22, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Up Left") PORT_PLAYER(2) - PORT_BIT( 0x44, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x88, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) - - PORT_START("JOY2P_1") - PORT_BIT( 0x11, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Down Left") PORT_PLAYER(2) - PORT_BIT( 0x22, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Up Right") PORT_PLAYER(2) - PORT_BIT( 0x44, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x88, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("JOY2P_2") - PORT_BIT( 0x11, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x22, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Down Right") PORT_PLAYER(2) - PORT_BIT( 0x44, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x88, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) - - PORT_START("UNUSED") - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_START("X10") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Up Left") PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) + + PORT_START("X11") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Down Left") PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Up Right") PORT_PLAYER(1) + + PORT_START("X12") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Down Right") PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) + + PORT_START("X13") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Up Left") PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) + + PORT_START("X14") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Down Left") PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Up Right") PORT_PLAYER(2) + + PORT_START("X15") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Down Right") PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) INPUT_PORTS_END |