diff --git a/src/mame/drivers/hh_pic16.cpp b/src/mame/drivers/hh_pic16.cpp index 8207a4af5f5..9ea5a17ca14 100644 --- a/src/mame/drivers/hh_pic16.cpp +++ b/src/mame/drivers/hh_pic16.cpp @@ -9,8 +9,8 @@ serial device etc. ----------------------------------------------------------- *020 1650 19??, GI Economega IV TV PPL Tuning System Control - *024 1655 1979, Toytronic? Football (have dump) - *033 1655A 1979, Toytronic Football (have dump) + @024 1655 1979, Toytronic? Football + @033 1655A 1979, Toytronic Football @036 1655A 1979, Ideal Maniac *043 1655A 1979, Calfax/Caprice Pro-Action Baseball (have dump) *051 1655A 1979, U.S. Games Basketball/Tandy Electronic Basketball (have dump) @@ -51,6 +51,7 @@ #include "melodym.lh" // clickable #include "rockpin.lh" #include "touchme.lh" // clickable +#include "ttfball.lh" //#include "hh_pic16_test.lh" // common test-layout - use external artwork @@ -990,6 +991,154 @@ MACHINE_CONFIG_END +/*************************************************************************** + + Toytronic Football + * PIC1655-024 or PIC1655A-033 + * 4511 7seg decoder, 7 7seg LEDs + 27 other LEDs, 1-bit sound + + 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 + that it's the 'prequel' of PIC1655A-033. + +***************************************************************************/ + +class ttfball_state : public hh_pic16_state +{ +public: + ttfball_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 ttfball_state::prepare_display() +{ + // C0-C2: led data + // C0-C3: 4511 A-D, C4: digit segment DP + // C5: select digits or led matrix + const u8 _4511_map[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0,0,0,0,0,0 }; + u16 led_data = (m_c & 0x20) ? (_4511_map[m_c & 0xf] | (~m_c << 3 & 0x80)) : (~m_c << 8 & 0x700); + + set_display_segmask(0x7f, 0xff); + display_matrix(11, 9, led_data, m_b | (m_c << 1 & 0x100)); +} + +READ8_MEMBER(ttfball_state::read_a) +{ + // A3: multiplexed inputs, A0-A2: other inputs + return m_inp_matrix[5]->read() | read_inputs(5); +} + +WRITE8_MEMBER(ttfball_state::write_b) +{ + // B0: RTCC pin + m_maincpu->set_input_line(PIC16C5x_RTCC, data & 1); + + // B0,B1,B3,B7: input mux low + m_inp_mux = (m_inp_mux & 0x10) | (~data & 3) | (~data >> 1 & 4) | (~data >> 4 & 8); + + // B0-B7: led select + m_b = data; + prepare_display(); +} + +WRITE8_MEMBER(ttfball_state::write_c) +{ + // C6: speaker out + m_speaker->level_w(data >> 6 & 1); + + // C7: input mux high + m_inp_mux = (m_inp_mux & 0xf) | (data >> 3 & 0x10); + + // C0-C7: led data/select, 4511 + m_c = data; + prepare_display(); +} + + +// config + +static INPUT_PORTS_START( ttfball ) + PORT_START("IN.0") // B0 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_16WAY + + PORT_START("IN.1") // B1 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_16WAY + + PORT_START("IN.2") // B3 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_16WAY + + PORT_START("IN.3") // B7 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_16WAY + + PORT_START("IN.4") // C7 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Kick") + + PORT_START("IN.5") // port A + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Status") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Score") + PORT_CONFNAME( 0x04, 0x04, "Skill Level" ) + PORT_CONFSETTING( 0x04, "1" ) + PORT_CONFSETTING( 0x00, "2" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( ttfballa ) + PORT_START("IN.0") // B0 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Kick") + + PORT_START("IN.1") // B1 port A3 + PORT_BIT( 0x08, 0x08, IPT_SPECIAL ) PORT_CONDITION("FAKE", 0x03, EQUALS, 0x00) // left/right + + PORT_START("IN.2") // B3 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_16WAY + + PORT_START("IN.3") // B7 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_16WAY + + PORT_START("IN.4") // C7 port A3 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("IN.5") // port A + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Status") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Score") + PORT_CONFNAME( 0x04, 0x04, "Skill Level" ) + PORT_CONFSETTING( 0x04, "1" ) + PORT_CONFSETTING( 0x00, "2" ) + + PORT_START("FAKE") // fake port for left/right combination + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY +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_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)) + MCFG_PIC16C5x_WRITE_C_CB(WRITE8(ttfball_state, write_c)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_pic16_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_ttfball) + + /* 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 + + + + + /*************************************************************************** Game driver(s) @@ -1032,6 +1181,17 @@ ROM_START( hccbaskb ) ROM_END +ROM_START( ttfball ) + ROM_REGION( 0x0400, "maincpu", 0 ) + ROM_LOAD( "pic1655a-033", 0x0000, 0x0400, CRC(2b500501) SHA1(f7fe464663c56e2181a31a1dc5f1f5239df57bed) ) +ROM_END + +ROM_START( ttfballa ) + ROM_REGION( 0x0400, "maincpu", 0 ) + ROM_LOAD( "pic1655-024", 0x0000, 0x0400, CRC(9091102f) SHA1(ef72759f20b5a99e0366863caad1e26be114263f) ) +ROM_END + + /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ CONS( 1979, touchme, 0, 0, touchme, touchme, driver_device, 0, "Atari", "Touch Me (handheld, Rev 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) @@ -1044,3 +1204,6 @@ CONS( 1980, leboom, 0, 0, leboom, leboom, driver_device, 0, "Lakes 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 ) + +CONS( 1979, ttfball, 0, 0, ttfball, ttfball, driver_device, 0, "Toytronic", "Football (Toytronic, set 1)", MACHINE_SUPPORTS_SAVE ) +CONS( 1979, ttfballa, ttfball, 0, ttfball, ttfballa, driver_device, 0, "Toytronic", "Football (Toytronic, set 2)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/layout/cnfball.lay b/src/mame/layout/cnfball.lay index 42c569e5243..160651f4d87 100644 --- a/src/mame/layout/cnfball.lay +++ b/src/mame/layout/cnfball.lay @@ -55,11 +55,9 @@ - - diff --git a/src/mame/layout/ttfball.lay b/src/mame/layout/ttfball.lay new file mode 100644 index 00000000000..2009520223c --- /dev/null +++ b/src/mame/layout/ttfball.lay @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 263f53498e3..cc181b2b69c 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -14321,6 +14321,8 @@ maniac // Ideal melodym // GAF rockpin // Tiger Electronics touchme // Atari +ttfball // Toytronic +ttfballa // Toytronic @source:hh_sm510.cpp gnwmndon // Nintendo