diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index 2dfb8863d9f..1b9f2458c9e 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -154,6 +154,7 @@ #include "7in1ss.lh" #include "amaztron.lh" // clickable #include "arcmania.lh" +#include "arrball.lh" #include "astro.lh" #include "bankshot.lh" #include "bcheetah.lh" @@ -558,13 +559,15 @@ MACHINE_CONFIG_END /*************************************************************************** A-One LSI Arrange Ball + * PCB label Kaken, PT-249 * TMS1000NLL MP0166 (die label 1000B, MP0166) * 2-digit 7seg LED display + 22 LEDs, 1-bit sound known releases: - Japan/World: Arrange Ball (black case) - - USA(1): Computer Impulse, published by LJN (white case) - - USA(2): Zingo (model 60-2123), published by Tandy (red case) + - USA(1): Zingo (model 60-2123), published by Tandy (red case) + - USA(2): Computer Impulse, published by LJN (white case) + - Germany: Fixball, unknown publisher, same as LJN version ***************************************************************************/ @@ -575,6 +578,7 @@ public: : hh_tms1k_state(mconfig, type, tag) { } + void prepare_display(); DECLARE_WRITE16_MEMBER(write_r); DECLARE_WRITE16_MEMBER(write_o); DECLARE_READ8_MEMBER(read_k); @@ -582,24 +586,50 @@ public: // handlers +void arrball_state::prepare_display() +{ + set_display_segmask(0x10, 0x7f); + set_display_segmask(0x20, 0x06); // left digit only segments B and C + display_matrix(7, 7, m_o, m_r); +} + WRITE16_MEMBER(arrball_state::write_r) { + // R8: input mux (always set) + m_inp_mux = data >> 8 & 1; + + // R9,R10: speaker out + m_speaker->level_w(data >> 9 & 3); + + // R0-R6: digit/led select + m_r = data; + prepare_display(); } WRITE16_MEMBER(arrball_state::write_o) { + // O0-O6: digit segments/led data + m_o = data; + prepare_display(); } READ8_MEMBER(arrball_state::read_k) { - return 0; + // K: multiplexed inputs (actually just 1) + return read_inputs(1); } // config static INPUT_PORTS_START( arrball ) - + PORT_START("IN.0") // R8 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Shot") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Stop") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_CONFNAME( 0x08, 0x00, "Speed" ) + PORT_CONFSETTING( 0x00, "Slow" ) + PORT_CONFSETTING( 0x08, "Fast" ) INPUT_PORTS_END static const s16 arrball_speaker_levels[4] = { 0, 0x7fff, -0x8000, 0 }; @@ -613,7 +643,7 @@ static MACHINE_CONFIG_START( arrball ) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(arrball_state, write_o)) MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) - //MCFG_DEFAULT_LAYOUT(layout_arrball) + MCFG_DEFAULT_LAYOUT(layout_arrball) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/layout/arrball.lay b/src/mame/layout/arrball.lay new file mode 100644 index 00000000000..2a7bbc0aef1 --- /dev/null +++ b/src/mame/layout/arrball.lay @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +