From ee258a156bd99f1a59ac3252696c640795a2f86a Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 19 Jul 2015 16:19:17 +0200 Subject: [PATCH] added buttons according to schems, but doesn't seem to be doing much --- src/mess/drivers/tb303.c | 86 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 81 insertions(+), 5 deletions(-) diff --git a/src/mess/drivers/tb303.c b/src/mess/drivers/tb303.c index 12931552a9e..691fa3b7fb9 100644 --- a/src/mess/drivers/tb303.c +++ b/src/mess/drivers/tb303.c @@ -35,9 +35,13 @@ public: DECLARE_WRITE8_MEMBER(ram_w); DECLARE_READ8_MEMBER(ram_r); - DECLARE_WRITE8_MEMBER(strobe_w); void refresh_ram(); + DECLARE_WRITE8_MEMBER(led_w); + DECLARE_WRITE8_MEMBER(switch_w); + DECLARE_WRITE8_MEMBER(strobe_w); + DECLARE_READ8_MEMBER(input_r); + TIMER_DEVICE_CALLBACK_MEMBER(t3_clock); TIMER_DEVICE_CALLBACK_MEMBER(t3_off); @@ -124,6 +128,16 @@ READ8_MEMBER(tb303_state::ram_r) return 0; } +WRITE8_MEMBER(tb303_state::led_w) +{ +} + +WRITE8_MEMBER(tb303_state::switch_w) +{ + // MCU H: input/led mux + m_inp_mux = data; +} + WRITE8_MEMBER(tb303_state::strobe_w) { // MCU I0: RAM _WE @@ -134,6 +148,19 @@ WRITE8_MEMBER(tb303_state::strobe_w) // MCU I2: gate signal } +READ8_MEMBER(tb303_state::input_r) +{ + // MCU A,B: multiplexed inputs + // if input mux(port H) is 0, port A status buffer & gate is selected (via Q5 NAND) + if (offset == NEC_UCOM4_PORTA && m_inp_mux == 0) + { + // todo.. + return m_inp_matrix[4]->read(); + } + else + return read_inputs(4) >> (offset*4) & 0xf; +} + /*************************************************************************** @@ -143,6 +170,55 @@ WRITE8_MEMBER(tb303_state::strobe_w) ***************************************************************************/ static INPUT_PORTS_START( tb303 ) + PORT_START("IN.0") // H0 port A/B + PORT_CONFNAME( 0x03, 0x03, "Mode" ) + PORT_CONFSETTING( 0x03, "Track Write" ) + PORT_CONFSETTING( 0x02, "Track Play" ) + PORT_CONFSETTING( 0x00, "Pattern Play" ) + PORT_CONFSETTING( 0x01, "Pattern Write" ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("DEL C#") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("INS D#") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_NAME("1 C") + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_NAME("2 D") + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_NAME("3 E") + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_NAME("4 F") + + PORT_START("IN.1") // H1 port A/B + PORT_CONFNAME( 0x07, 0x00, "Track / Patt.Group" ) + PORT_CONFSETTING( 0x00, "1 / I" ) + PORT_CONFSETTING( 0x01, "2 / I" ) + PORT_CONFSETTING( 0x02, "3 / II" ) + PORT_CONFSETTING( 0x03, "4 / II" ) + PORT_CONFSETTING( 0x04, "5 / III" ) + PORT_CONFSETTING( 0x05, "6 / III" ) + PORT_CONFSETTING( 0x06, "7 / IV" ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_NAME("5 G") + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_NAME("6 A") + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_NAME("7 B") + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_NAME("8 C") + + PORT_START("IN.2") // H2 port A/B + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("Pattern Clear") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("Function") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Pitch Mode") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Time Mode") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_NAME("9 Step") + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_NAME("0 3n") + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("100 A") + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("200 B") + + PORT_START("IN.3") // H3 port B + PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("F#") + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("G#") + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) PORT_NAME("A#") + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("Back") + + PORT_START("IN.4") // H=0 port A + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Run/Stop") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Tap") + PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END @@ -174,15 +250,15 @@ static MACHINE_CONFIG_START( tb303, tb303_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", NEC_D650, TB303_T2_CLOCK_HZ) - //MCFG_UCOM4_READ_A_CB - //MCFG_UCOM4_READ_B_CB + MCFG_UCOM4_READ_A_CB(READ8(tb303_state, input_r)) + MCFG_UCOM4_READ_B_CB(READ8(tb303_state, input_r)) MCFG_UCOM4_READ_C_CB(READ8(tb303_state, ram_r)) MCFG_UCOM4_WRITE_C_CB(WRITE8(tb303_state, ram_w)) MCFG_UCOM4_WRITE_D_CB(WRITE8(tb303_state, ram_w)) MCFG_UCOM4_WRITE_E_CB(WRITE8(tb303_state, ram_w)) MCFG_UCOM4_WRITE_F_CB(WRITE8(tb303_state, ram_w)) - //MCFG_UCOM4_WRITE_G_CB - //MCFG_UCOM4_WRITE_H_CB + MCFG_UCOM4_WRITE_G_CB(WRITE8(tb303_state, led_w)) + MCFG_UCOM4_WRITE_H_CB(WRITE8(tb303_state, switch_w)) MCFG_UCOM4_WRITE_I_CB(WRITE8(tb303_state, strobe_w)) MCFG_TIMER_DRIVER_ADD_PERIODIC("t3_clock", tb303_state, t3_clock, TB303_T3_CLOCK)