mirror of
https://github.com/holub/mame
synced 2025-06-02 02:49:44 +03:00
thayers: Fixed keyboard. [Curt Coder]
This commit is contained in:
parent
c713f9ed1d
commit
4ceeca611d
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user