diff --git a/src/mame/drivers/thayers.cpp b/src/mame/drivers/thayers.cpp index ca0cd4c1bf3..5a6653b750a 100644 --- a/src/mame/drivers/thayers.cpp +++ b/src/mame/drivers/thayers.cpp @@ -4,7 +4,6 @@ TODO: - - keyboard - LDV1000 mode - PR7820 INT/_EXT line - coin counter @@ -59,6 +58,7 @@ public: int m_rx_bit; int m_keylatch; uint8_t m_keydata; + bool m_kbdata; bool m_kbclk; uint8_t m_cop_data_latch; int m_cop_data_latch_enable; @@ -163,7 +163,7 @@ READ8_MEMBER(thayers_state::irqstate_r) */ - return (m_data_rdy_int << 5) | (m_timer_int << 4) | 0x08 | (m_ssi_data_request << 2); + return m_cart_present << 6 | (m_data_rdy_int << 5) | (m_timer_int << 4) | 0x08 | (m_ssi_data_request << 2); } WRITE8_MEMBER(thayers_state::timer_int_ack_w) @@ -308,8 +308,8 @@ WRITE8_MEMBER(thayers_state::cop_g_w) READ_LINE_MEMBER(thayers_state::kbdata_r) { - if (LOG) logerror("%s KBDATA %u BIT %u\n",machine().time().as_string(),BIT(m_keydata,7),m_rx_bit); - return BIT(m_keydata, 7); + if (LOG) logerror("%s KBDATA %u BIT %u\n",machine().time().as_string(),m_kbdata,m_rx_bit); + return m_kbdata; } WRITE_LINE_MEMBER(thayers_state::kbclk_w) @@ -321,10 +321,20 @@ WRITE_LINE_MEMBER(thayers_state::kbclk_w) if (!m_kbclk && state) { m_rx_bit++; + // 1, 1, 0, 1, Q9, P3, P2, P1, P0, 0 switch (m_rx_bit) { + case 0: case 1: case 3: + m_kbdata = 1; + break; + + case 2: case 9: + m_kbdata = 0; + break; + case 10: m_rx_bit = 0; + m_kbdata = 1; m_keylatch++; @@ -332,17 +342,17 @@ WRITE_LINE_MEMBER(thayers_state::kbclk_w) m_keylatch = 0; } + m_keydata = m_row[m_keylatch]->read(); + if (LOG) logerror("keylatch %u\n",m_keylatch); break; - case 9: - // 1, 0, 1, Q9, P3, P2, P1, P0, 0, 1 - m_keydata = 0xa0 | (m_keylatch == 9) << 4 | m_row[m_keylatch]->read(); - - if (LOG) logerror("keydata %02x keylatch %u\n",m_keydata,m_keylatch); + case 4: + m_kbdata = (m_keylatch == 9); break; default: + m_kbdata = BIT(m_keydata, 3); m_keydata <<= 1; if (LOG) logerror("keydata %02x shift\n",m_keydata); @@ -483,13 +493,11 @@ WRITE8_MEMBER(thayers_state::den2_w) #define SSI263_CLOCK (XTAL_4MHz/2) -#if 0 static const char SSI263_PHONEMES[0x40][5] = { "PA", "E", "E1", "Y", "YI", "AY", "IE", "I", "A", "AI", "EH", "EH1", "AE", "AE1", "AH", "AH1", "W", "O", "OU", "OO", "IU", "IU1", "U", "U1", "UH", "UH1", "UH2", "UH3", "ER", "R", "R1", "R2", "L", "L1", "LF", "W", "B", "D", "KV", "P", "T", "K", "HV", "HVC", "HF", "HFC", "HN", "Z", "S", "J", "SCH", "V", "F", "THV", "TH", "M", "N", "NG", ":A", ":OH", ":U", ":UH", "E2", "LB" }; -#endif WRITE8_MEMBER(thayers_state::ssi263_register_w) { @@ -526,6 +534,7 @@ WRITE8_MEMBER(thayers_state::ssi263_register_w) //logerror("SSI263 Phoneme Duration: %u\n", ssi263.dr); //logerror("SSI263 Phoneme: %02x %s\n", ssi263.p, SSI263_PHONEMES[ssi263.p]); + if (LOG && ssi263.p) printf("%s ", SSI263_PHONEMES[ssi263.p]); } break; @@ -683,64 +692,64 @@ static INPUT_PORTS_START( thayers ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, thayers_state,laserdisc_ready_r, nullptr) PORT_START("ROW.0") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "2" ) PORT_CODE( KEYCODE_F2 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "1 - Clear" ) PORT_CODE( KEYCODE_BACKSPACE ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "Q" ) PORT_CODE( KEYCODE_Q ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( DEF_STR( Yes ) ) PORT_CODE( KEYCODE_0_PAD ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1 YES") PORT_CODE(KEYCODE_1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F1 CLEAR") PORT_CODE(KEYCODE_F1) PORT_CODE(KEYCODE_BACKSPACE) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_START("ROW.1") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "Z - Spell of Release" ) PORT_CODE( KEYCODE_Z ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "A" ) PORT_CODE( KEYCODE_A ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "W - Amulet" ) PORT_CODE( KEYCODE_W ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "Items" ) PORT_CODE( KEYCODE_1_PAD ) - + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2 ITEMS") PORT_CODE(KEYCODE_2) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W AMULET") PORT_CODE(KEYCODE_W) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z SPELL OF RELEASE") PORT_CODE(KEYCODE_Z) + PORT_START("ROW.2") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "X - Scepter" ) PORT_CODE( KEYCODE_X ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "S - Dagger" ) PORT_CODE( KEYCODE_S ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "E - Black Mace" ) PORT_CODE( KEYCODE_E ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "Drop Item" ) PORT_CODE( KEYCODE_2_PAD ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3 DROP ITEM") PORT_CODE(KEYCODE_3) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("E BLACK MACE") PORT_CODE(KEYCODE_E) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("S DAGGER") PORT_CODE(KEYCODE_S) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("X SCEPTER") PORT_CODE(KEYCODE_X) PORT_START("ROW.3") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "C - Spell of Seeing" ) PORT_CODE( KEYCODE_C ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "D - Great Circlet" ) PORT_CODE( KEYCODE_D ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "R - Blood Sword" ) PORT_CODE( KEYCODE_R ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "Give Score" ) PORT_CODE( KEYCODE_3_PAD ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4 GIVE SCORE") PORT_CODE(KEYCODE_4) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("R BLOOD SWORD") PORT_CODE(KEYCODE_R) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("D GREAT CIRCLET") PORT_CODE(KEYCODE_D) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("C SPELL OF SEEING") PORT_CODE(KEYCODE_C) PORT_START("ROW.4") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "V - Shield" ) PORT_CODE( KEYCODE_V ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "F - Hunting Horn" ) PORT_CODE( KEYCODE_F ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "T - Chalice" ) PORT_CODE( KEYCODE_T ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "Replay" ) PORT_CODE( KEYCODE_4_PAD ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5 REPLAY") PORT_CODE(KEYCODE_5) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("T CHALICE") PORT_CODE(KEYCODE_T) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F HUNTING HORN") PORT_CODE(KEYCODE_F) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("V SHIELD") PORT_CODE(KEYCODE_V) PORT_START("ROW.5") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "B - Silver Wheat" ) PORT_CODE( KEYCODE_B ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "G - Long Bow" ) PORT_CODE( KEYCODE_G ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "Y - Coins" ) PORT_CODE( KEYCODE_Y ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "Combine Action" ) PORT_CODE( KEYCODE_6_PAD ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6 COMBINE ACTION") PORT_CODE(KEYCODE_6) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y COINS") PORT_CODE(KEYCODE_Y) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("G LONG BOW") PORT_CODE(KEYCODE_G) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("B SILVER WHEAT") PORT_CODE(KEYCODE_B) PORT_START("ROW.6") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "N - Staff" ) PORT_CODE( KEYCODE_N ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "H - Medallion" ) PORT_CODE( KEYCODE_H ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "U - Cold Fire" ) PORT_CODE( KEYCODE_U ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "Save Game" ) PORT_CODE( KEYCODE_7_PAD ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7 SAVE GAME") PORT_CODE(KEYCODE_7) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("U COLD FIRE") PORT_CODE(KEYCODE_U) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("H MEDALLION") PORT_CODE(KEYCODE_H) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("N STAFF") PORT_CODE(KEYCODE_N) PORT_START("ROW.7") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "M - Spell of Understanding" ) PORT_CODE( KEYCODE_M ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "J - Onyx Seal" ) PORT_CODE( KEYCODE_J ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "I - Crown" ) PORT_CODE( KEYCODE_I ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "Update" ) PORT_CODE( KEYCODE_8_PAD ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8 UPDATE") PORT_CODE(KEYCODE_8) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("I CROWN") PORT_CODE(KEYCODE_I) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("J ONYX SEAL") PORT_CODE(KEYCODE_J) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("M SPELL OF UNDERSTANDING") PORT_CODE(KEYCODE_M) PORT_START("ROW.8") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "3 - Enter" ) PORT_CODE( KEYCODE_ENTER ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "K - Orb of Quoid" ) PORT_CODE( KEYCODE_K ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "O - Crystal" ) PORT_CODE( KEYCODE_O ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "Hint" ) PORT_CODE( KEYCODE_9_PAD ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9 HINT") PORT_CODE(KEYCODE_9) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("O CRYSTAL") PORT_CODE(KEYCODE_O) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("K ORB OF QUOID") PORT_CODE(KEYCODE_K) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F4 SPACE") PORT_CODE(KEYCODE_F4) PORT_CODE(KEYCODE_SPACE) PORT_START("ROW.9") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "4 - Space" ) PORT_CODE( KEYCODE_SPACE ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "L" ) PORT_CODE( KEYCODE_L ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( "P" ) PORT_CODE( KEYCODE_P ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME( DEF_STR( No ) ) PORT_CODE( KEYCODE_0_PAD ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0 NO") PORT_CODE(KEYCODE_0) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F3 ENTER") PORT_CODE(KEYCODE_F3) PORT_CODE(KEYCODE_ENTER) INPUT_PORTS_END /* Machine Initialization */ @@ -755,8 +764,9 @@ void thayers_state::machine_reset() m_laserdisc_data = 0; m_rx_bit = 0; + m_kbdata = 1; m_keylatch = 0; - m_keydata = 0xb0; + m_keydata = m_row[m_keylatch]->read(); m_cop_data_latch = 0; m_cop_data_latch_enable = 0; @@ -769,9 +779,6 @@ void thayers_state::machine_reset() m_cart_present = 0; m_pr7820_enter = 0; - -// newtype = (ioport("DSWB")->read() & 0x18) ? LASERDISC_TYPE_PIONEER_LDV1000 : LASERDISC_TYPE_PIONEER_PR7820; -// laserdisc_set_type(m_laserdisc, newtype); } /* Machine Driver */