diff --git a/src/mame/drivers/hh_pic16.cpp b/src/mame/drivers/hh_pic16.cpp index 90a01e74385..dffff4b2cd5 100644 --- a/src/mame/drivers/hh_pic16.cpp +++ b/src/mame/drivers/hh_pic16.cpp @@ -13,7 +13,7 @@ @033 1655A 1979, Toytronic Football (newer) @036 1655A 1979, Ideal Maniac *043 1655A 1979, Caprice Pro-Action Baseball (have dump) - *051 1655A 1979, U.S. Games Basketball/Tandy Electronic Basketball (have dump) + @051 1655A 1979, Tandy Electronic Basketball @053 1655A 1979, Atari Touch Me @0?? 1655A 1979, Tiger Half Court Computer Basketball/Sears Electronic Basketball (custom label) @061 1655A 1980, Lakeside Le Boom @@ -36,6 +36,8 @@ TODO: - leboom discrete sound for volume decay (simulated for now) - ttfball/ttfballa: discrete sound part, for volume gating? + - what's the relation between hccbaskb and tbaskb? Is one the bootleg + of the other? Or are they both made by the same subcontractor? ***************************************************************************/ @@ -49,6 +51,7 @@ #include "maniac.lh" // clickable #include "melodym.lh" // clickable #include "rockpin.lh" +#include "tbaskb.lh" #include "touchme.lh" // clickable #include "ttfball.lh" @@ -765,6 +768,115 @@ MACHINE_CONFIG_END +/*************************************************************************** + + Tandy Electronic Basketball (model 60-2146) + * PIC1655A-51 + * 2 7seg LEDs + 21 other LEDs, 1-bit sound + + The ROM is nearly identical to hccbaskb, the shell/overlay is the same as + U.S. Games/Tandy Trick Shot Basketball. + +***************************************************************************/ + +class tbaskb_state : public hh_pic16_state +{ +public: + tbaskb_state(const machine_config &mconfig, device_type type, const char *tag) + : hh_pic16_state(mconfig, type, tag) + { } + + void prepare_display(); + DECLARE_READ8_MEMBER(read_a); + DECLARE_WRITE8_MEMBER(write_b); + DECLARE_WRITE8_MEMBER(write_c); +}; + +// handlers + +void tbaskb_state::prepare_display() +{ + // B4,B5 are 7segs + set_display_segmask(0x30, 0x7f); + display_matrix(7, 6, m_c, m_b); +} + +READ8_MEMBER(tbaskb_state::read_a) +{ + // A2: skill switch, A3: multiplexed inputs + return m_inp_matrix[5]->read() | read_inputs(5) | 3; +} + +WRITE8_MEMBER(tbaskb_state::write_b) +{ + // B0: RTCC pin + m_maincpu->set_input_line(PIC16C5x_RTCC, data & 1); + + // B0-B4: input mux + m_inp_mux = ~data & 0x1f; + + // B0-B5: led select + m_b = data; + prepare_display(); +} + +WRITE8_MEMBER(tbaskb_state::write_c) +{ + // C7: speaker out + m_speaker->level_w(data >> 7 & 1); + + // C0-C6: led data + m_c = ~data; + prepare_display(); +} + + +// config + +static INPUT_PORTS_START( tbaskb ) + PORT_START("IN.0") // B0 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_16WAY + + PORT_START("IN.1") // B1 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_16WAY + + PORT_START("IN.2") // B2 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_16WAY + + PORT_START("IN.3") // B3 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_16WAY + + PORT_START("IN.4") // B4 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) + + PORT_START("IN.5") // port A2 + PORT_CONFNAME( 0x04, 0x04, "Skill Level" ) + PORT_CONFSETTING( 0x04, "1" ) + PORT_CONFSETTING( 0x00, "2" ) +INPUT_PORTS_END + +static MACHINE_CONFIG_START( tbaskb, tbaskb_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", PIC1655, 1000000) // approximation - RC osc. R=18K, C=47pF + MCFG_PIC16C5x_READ_A_CB(READ8(tbaskb_state, read_a)) + MCFG_PIC16C5x_WRITE_B_CB(WRITE8(tbaskb_state, write_b)) + MCFG_PIC16C5x_READ_C_CB(CONSTANT(0xff)) + MCFG_PIC16C5x_WRITE_C_CB(WRITE8(tbaskb_state, write_c)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_pic16_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_tbaskb) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + + + + /*************************************************************************** Tiger Electronics Rocket Pinball (model 7-460) @@ -976,6 +1088,7 @@ static MACHINE_CONFIG_START( hccbaskb, hccbaskb_state ) MCFG_CPU_ADD("maincpu", PIC1655, 1000000) // approximation - RC osc. R=15K, C=47pF MCFG_PIC16C5x_READ_A_CB(READ8(hccbaskb_state, read_a)) MCFG_PIC16C5x_WRITE_B_CB(WRITE8(hccbaskb_state, write_b)) + MCFG_PIC16C5x_READ_C_CB(CONSTANT(0xff)) MCFG_PIC16C5x_WRITE_C_CB(WRITE8(hccbaskb_state, write_c)) MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_pic16_state, display_decay_tick, attotime::from_msec(1)) @@ -993,9 +1106,13 @@ MACHINE_CONFIG_END /*************************************************************************** - Toytronic Football - * PIC1655-024 or PIC1655A-033 + Toytronic Football (set 1) + * PIC1655A-033 * 4511 7seg BCD decoder, 7 7seg LEDs + 27 other LEDs, 1-bit sound + + (no brand) Football (set 2) + * PIC1655-024 + * rest same as above, 1 less button Hello and welcome to another Mattel Football clone, there are so many of these. The PIC1655-024 one came from an unbranded handheld, but comparison suggests @@ -1120,7 +1237,7 @@ INPUT_PORTS_END static MACHINE_CONFIG_START( ttfball, ttfball_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", PIC1655, 1000000) // approximation - RC osc. R=27K or 33K, C=68pF + MCFG_CPU_ADD("maincpu", PIC1655, 1000000) // approximation - RC osc. R=27K(set 1) or 33K(set 2), C=68pF MCFG_PIC16C5x_READ_A_CB(READ8(ttfball_state, read_a)) MCFG_PIC16C5x_WRITE_B_CB(WRITE8(ttfball_state, write_b)) MCFG_PIC16C5x_READ_C_CB(CONSTANT(0xff)) @@ -1169,6 +1286,12 @@ ROM_START( leboom ) ROM_END +ROM_START( tbaskb ) + ROM_REGION( 0x0400, "maincpu", 0 ) + ROM_LOAD( "pic1655a-051", 0x0000, 0x0400, CRC(92534b40) SHA1(7055e32846c913e68f7d35f279cd537f6325f4f2) ) +ROM_END + + ROM_START( rockpin ) ROM_REGION( 0x0400, "maincpu", 0 ) ROM_LOAD( "pic1650a-110_69-11397", 0x0000, 0x0400, CRC(d5396e77) SHA1(952feaff70fde53a9eda84c54704520d50749e78) ) @@ -1202,6 +1325,8 @@ CONS( 1979, maniac, 0, 0, maniac, maniac, driver_device, 0, "Ideal CONS( 1980, leboom, 0, 0, leboom, leboom, driver_device, 0, "Lakeside", "Le Boom", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1979, tbaskb, 0, 0, tbaskb, tbaskb, driver_device, 0, "Tandy Radio Shack", "Electronic Basketball (Tandy)", MACHINE_SUPPORTS_SAVE ) + CONS( 1979, rockpin, 0, 0, rockpin, rockpin, driver_device, 0, "Tiger Electronics", "Rocket Pinball", MACHINE_SUPPORTS_SAVE ) CONS( 1979, hccbaskb, 0, 0, hccbaskb, hccbaskb, driver_device, 0, "Tiger Electronics", "Half Court Computer Basketball", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/layout/tbaskb.lay b/src/mame/layout/tbaskb.lay new file mode 100644 index 00000000000..185ce823abd --- /dev/null +++ b/src/mame/layout/tbaskb.lay @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index acd18e3718b..b43a3d793f8 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -14322,6 +14322,7 @@ leboom // Lakeside maniac // Ideal melodym // GAF rockpin // Tiger Electronics +tbaskb // Tandy Radio Shack touchme // Atari ttfball // Toytronic ttfballa // Toytronic