diff options
author | hap <happppp@users.noreply.github.com> | 2021-04-27 02:43:18 +0200 |
---|---|---|
committer | hap <happppp@users.noreply.github.com> | 2021-04-27 02:43:18 +0200 |
commit | 8dfcc87b2694b216c4ca4d89b5609c53554548ce (patch) | |
tree | 69ab07890ebb623204634d49d003af802a702440 | |
parent | 468c1d134649d8277e4401974f4cf8034df2a6d2 (diff) |
lc80: add input mappings for sc80
-rw-r--r-- | src/mame/drivers/lc80.cpp | 151 |
1 files changed, 99 insertions, 52 deletions
diff --git a/src/mame/drivers/lc80.cpp b/src/mame/drivers/lc80.cpp index 9ab166e8e91..fbc372d30da 100644 --- a/src/mame/drivers/lc80.cpp +++ b/src/mame/drivers/lc80.cpp @@ -11,11 +11,10 @@ be updating. Pasting: 0-F : as is - + : as is - - : as is + +,- : as is ADR : , DAT : . - GO : X + EX : X Test Paste: ,2000.11+22+33+44+55+66+77+88+99+,2000 @@ -78,7 +77,7 @@ public: m_display(*this, "display"), m_cassette(*this, "cassette"), m_speaker(*this, "speaker"), - m_inputs(*this, "Y%u", 0U), + m_inputs(*this, "IN.%u", 0U), m_halt_led(*this, "halt") { } @@ -101,7 +100,7 @@ private: required_device<pwm_display_device> m_display; required_device<cassette_image_device> m_cassette; required_device<speaker_sound_device> m_speaker; - required_ioport_array<4> m_inputs; + required_ioport_array<6> m_inputs; output_finder<> m_halt_led; void lc80_mem(address_map &map); @@ -175,42 +174,97 @@ INPUT_CHANGED_MEMBER( lc80_state::trigger_nmi ) m_maincpu->set_input_line(INPUT_LINE_NMI, newval ? CLEAR_LINE : ASSERT_LINE); } +#define OVERLAY(val) \ + PORT_CONDITION("CONF", 0x01, EQUALS, val) + static INPUT_PORTS_START( lc80 ) - PORT_START("Y0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('3') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('7') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F') - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('-') - - PORT_START("Y1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("LD") PORT_CODE(KEYCODE_L) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('2') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("+") PORT_CODE(KEYCODE_EQUALS) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR('+') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A') - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('6') - - PORT_START("Y2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ST") PORT_CODE(KEYCODE_S) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('1') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('5') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('9') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D') - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("DAT") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') - - PORT_START("Y3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("EX") PORT_CODE(KEYCODE_X) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR('X') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('0') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('4') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('8') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C') - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ADR") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') - - PORT_START("SPECIAL") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RES") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, lc80_state, trigger_reset, 0) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("NMI") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF, lc80_state, trigger_nmi, 0) + PORT_START("IN.0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_NAME("LD") PORT_CODE(KEYCODE_L) PORT_CHAR('L') + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_NAME("ST") PORT_CODE(KEYCODE_S) PORT_CHAR('S') + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_NAME("EX") PORT_CODE(KEYCODE_X) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR('X') + + PORT_START("IN.1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('3') + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('2') + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('1') + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('0') + + PORT_START("IN.2") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('7') + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_NAME("+") PORT_CODE(KEYCODE_EQUALS) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR('+') + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('5') + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('4') + + PORT_START("IN.3") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_B) PORT_CHAR('B') + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_E) PORT_CHAR('E') + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('9') + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('8') + + PORT_START("IN.4") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_F) PORT_CHAR('F') + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_A) PORT_CHAR('A') + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_D) PORT_CHAR('D') + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_C) PORT_CHAR('C') + + PORT_START("IN.5") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('-') + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('6') + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_NAME("DAT") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) OVERLAY(0x00) PORT_NAME("ADR") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') + + PORT_START("IN.6") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RES") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, lc80_state, trigger_reset, 0) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("NMI") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF, lc80_state, trigger_nmi, 0) + + PORT_START("CONF") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) +INPUT_PORTS_END + +static INPUT_PORTS_START( sc80 ) // half of the button labels for the SC-80 overlay are actually in German + PORT_INCLUDE( lc80 ) + + PORT_MODIFY("IN.0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) OVERLAY(0x01) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("Random") PORT_CODE(KEYCODE_M) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("Control") PORT_CODE(KEYCODE_T) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("EX") PORT_CODE(KEYCODE_X) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) + + PORT_MODIFY("IN.1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("C / 3") PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("B / 2") PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("A / 1") PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("SP / 0") PORT_CODE(KEYCODE_0) + + PORT_MODIFY("IN.2") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("G / 7") PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("Board") PORT_CODE(KEYCODE_R) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("E / 5") PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("D / 4") PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) + + PORT_MODIFY("IN.3") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("Knight") PORT_CODE(KEYCODE_2_PAD) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("Queen") PORT_CODE(KEYCODE_5_PAD) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("9") PORT_CODE(KEYCODE_9) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("H / 8") PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) + + PORT_MODIFY("IN.4") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("King") PORT_CODE(KEYCODE_6_PAD) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("Pawn") PORT_CODE(KEYCODE_1_PAD) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("Rook") PORT_CODE(KEYCODE_4_PAD) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("Bishop") PORT_CODE(KEYCODE_3_PAD) + + PORT_MODIFY("IN.5") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("Color") PORT_CODE(KEYCODE_O) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("F / 6") PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("Self Play / Change Sides") PORT_CODE(KEYCODE_S) // SW (Seitenwechsel) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) OVERLAY(0x01) PORT_NAME("New Game / Level") PORT_CODE(KEYCODE_N) PORT_CODE(KEYCODE_L) + + PORT_MODIFY("CONF") + PORT_CONFNAME( 0x01, 0x00, "Overlay" ) + PORT_CONFSETTING( 0x00, "None" ) + PORT_CONFSETTING( 0x01, "SC-80" ) INPUT_PORTS_END @@ -322,20 +376,13 @@ u8 lc80_state::pio2_pb_r() */ - u8 data = 0xf0; + u8 data = 0; for (int i = 0; i < 6; i++) - { if (BIT(m_digit, i+2)) - { - if (!BIT(m_inputs[0]->read(), i)) data &= ~0x10; - if (!BIT(m_inputs[1]->read(), i)) data &= ~0x20; - if (!BIT(m_inputs[2]->read(), i)) data &= ~0x40; - if (!BIT(m_inputs[3]->read(), i)) data &= ~0x80; - } - } - - return data; + data |= m_inputs[i]->read() << 4; + + return data ^ 0xf0; } @@ -477,5 +524,5 @@ ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS COMP( 1984, lc80, 0, 0, lc80, lc80, lc80_state, empty_init, "VEB Mikroelektronik \"Karl Marx\" Erfurt", "Lerncomputer LC 80 (set 1)", MACHINE_SUPPORTS_SAVE ) COMP( 1984, lc80a, lc80, 0, lc80a, lc80, lc80_state, empty_init, "VEB Mikroelektronik \"Karl Marx\" Erfurt", "Lerncomputer LC 80 (set 2)", MACHINE_SUPPORTS_SAVE ) -COMP( 1984, lc80e, lc80, 0, lc80e, lc80, lc80_state, empty_init, "VEB Mikroelektronik \"Karl Marx\" Erfurt", "Lerncomputer LC 80 (export)", MACHINE_SUPPORTS_SAVE ) +COMP( 1984, lc80e, lc80, 0, lc80e, sc80, lc80_state, empty_init, "VEB Mikroelektronik \"Karl Marx\" Erfurt", "Lerncomputer LC 80 (export)", MACHINE_SUPPORTS_SAVE ) COMP( 1991, lc80_2, lc80, 0, lc80_2, lc80, lc80_state, empty_init, "hack (Eckart Buschendorf)", "Lerncomputer LC 80.2", MACHINE_SUPPORTS_SAVE ) |