From b28d91f1f2696effc2971d35d74260d00a45543a Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 3 Dec 2017 18:31:04 +0100 Subject: [PATCH] hh_tms1k: fonas 3in1 WIP (nw) --- src/mame/drivers/hh_tms1k.cpp | 129 +++++++++++++++++++++++++++++++++- src/mame/mame.lst | 1 + 2 files changed, 127 insertions(+), 3 deletions(-) diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index c160c32da96..82f501050c5 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -41,7 +41,7 @@ @MP1180 TMS1100 1980, Tomy Power House Pinball @MP1181 TMS1100 1979, Conic Football 2 @MP1183 TMS1100 1980, E.R.S. Superbowl XV Football/Tandy Championship Football (model 60-2151) - *MP1185 TMS1100 1979, Fonas 3-in-1: Football, Basketball, Soccer + @MP1185 TMS1100 1979, Fonas 3-in-1: Football, Basketball, Soccer @MP1193 TMS1100 1980, Tandy Championship Football (model 60-2150) @MP1204 TMS1100 1980, Entex Baseball 3 (6007) *MP1209 TMS1100 1980, U.S. Games Space Cruiser/Strategy Football @@ -129,7 +129,7 @@ - unknown MCU clocks for some: TMS1000 RC curve is documented in the data manual, but not for newer ones (rev. E or TMS1400 MCUs). TMS0970/0980 osc. is on-die. - some of the games rely on the fact that faster/longer strobed leds appear brighter, - eg. tc4/h2hfootb(offense), bankshot(cue ball), ... + eg. tc4/h2hfootb(offense), bankshot(cue ball), f3in1(ball), ... - stopthiep: unable to start a game (may be intentional?) - 7in1ss: in 2-player mode, game select and skill select can be configured after selecting a game? - arrball: shot button is unresponsive sometimes, maybe BTANB? no video of game on Youtube @@ -3957,6 +3957,116 @@ MACHINE_CONFIG_END +/*************************************************************************** + + Fonas 3 in 1: Football, Basketball, Soccer + * TMS1100NLL MP1185 + * 4 7seg LEDs, 40 other LEDs, 1-bit sound + + It's not known if this game has an official title. The current one is + taken from the handheld front side. + MAME external artwork is needed for the switchable overlays. + +***************************************************************************/ + +class f3in1_state : public hh_tms1k_state +{ +public: + f3in1_state(const machine_config &mconfig, device_type type, const char *tag) + : hh_tms1k_state(mconfig, type, tag) + { } + + void prepare_display(); + DECLARE_WRITE16_MEMBER(write_r); + DECLARE_WRITE16_MEMBER(write_o); + DECLARE_READ8_MEMBER(read_k); +}; + +// handlers + +void f3in1_state::prepare_display() +{ + // R6-R9 are 7segs + set_display_segmask(0x3c0, 0x7f); + display_matrix(8, 10, m_o, m_r & ~0x20); +} + +WRITE16_MEMBER(f3in1_state::write_r) +{ + // R0-R2,R4: input mux + m_inp_mux = (data & 7) | (data >> 1 & 8); + + // R10: speaker out + m_speaker->level_w(data >> 10 & 1); + + // R0-R4,R6-R9: led select + m_r = data; + prepare_display(); +} + +WRITE16_MEMBER(f3in1_state::write_o) +{ + // O0-O7: led state + m_o = data; + prepare_display(); +} + +READ8_MEMBER(f3in1_state::read_k) +{ + // K: multiplexed inputs + return read_inputs(4); +} + + +// config + +static INPUT_PORTS_START( f3in1 ) + PORT_START("IN.0") // R0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) // P + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) // K + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // D + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.1") // R1 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY + PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.2") // R2 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY + PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.3") // R4 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_CONFNAME( 0x0e, 0x02, "Game Select" ) + PORT_CONFSETTING( 0x02, "Football" ) + PORT_CONFSETTING( 0x04, "Basketball" ) + PORT_CONFSETTING( 0x08, "Soccer" ) +INPUT_PORTS_END + +static MACHINE_CONFIG_START( f3in1 ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS1100, 325000) // see set_clock ---TODO + MCFG_TMS1XXX_READ_K_CB(READ8(f3in1_state, read_k)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(f3in1_state, write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(f3in1_state, write_o)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + //MCFG_DEFAULT_LAYOUT(layout_f3in1) + MCFG_DEFAULT_LAYOUT(layout_hh_tms1k_test) + + /* 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 + + + + + /*************************************************************************** Gakken Poker @@ -8828,6 +8938,7 @@ static MACHINE_CONFIG_START( xl25 ) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(xl25_state, write_o)) MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + //MCFG_DEFAULT_LAYOUT(layout_xl25) MCFG_DEFAULT_LAYOUT(layout_hh_tms1k_test) /* sound hardware */ @@ -9146,6 +9257,17 @@ ROM_START( f2pbball ) ROM_END +ROM_START( f3in1 ) + ROM_REGION( 0x0800, "maincpu", 0 ) + ROM_LOAD( "mp1185", 0x0000, 0x0800, CRC(53f7b28d) SHA1(2249890e3a259095193b4331ca88c29ccd81eefe) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) ) + ROM_REGION( 365, "maincpu:opla", 0 ) + ROM_LOAD( "tms1100_f3in1_output.pla", 0, 365, CRC(51d947bc) SHA1(f766397d84f038be96e83d40989195c98ddcb1d9) ) +ROM_END + + ROM_START( gpoker ) ROM_REGION( 0x0800, "maincpu", 0 ) ROM_LOAD( "mp2105", 0x0000, 0x0800, CRC(95a8f5b4) SHA1(d14f00ba9f57e437264d972baa14a14a28ff8719) ) @@ -9652,6 +9774,7 @@ CONS( 1980, ebaskb2 , 0, 0, ebaskb2, ebaskb2, ebaskb2_state, 0, CONS( 1980, raisedvl, 0, 0, raisedvl, raisedvl, raisedvl_state, 0, "Entex", "Raise The Devil", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1979, f2pbball, 0, 0, f2pbball, f2pbball, f2pbball_state, 0, "Fonas", "2 Player Baseball (Fonas)", MACHINE_SUPPORTS_SAVE ) +CONS( 1979, f3in1, 0, 0, f3in1, f3in1, f3in1_state, 0, "Fonas", "3 in 1: Football, Basketball, Soccer", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1979, gpoker, 0, 0, gpoker, gpoker, gpoker_state, 0, "Gakken", "Poker (Gakken, 1979 version)", MACHINE_SUPPORTS_SAVE ) CONS( 1980, gjackpot, 0, 0, gjackpot, gjackpot, gjackpot_state, 0, "Gakken", "Jackpot: Gin Rummy & Black Jack", MACHINE_SUPPORTS_SAVE ) @@ -9706,7 +9829,7 @@ CONS( 1980, phpball, 0, 0, phpball, phpball, phpball_state, 0, CONS( 1980, ssports4, 0, 0, ssports4, ssports4, ssports4_state, 0, "U.S. Games", "Super Sports-4", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) -CONS( 1983, xl25, 0, 0, xl25, xl25, xl25_state, 0, "Vulcan Electronics", "XL 25", MACHINE_SUPPORTS_SAVE ) +CONS( 1983, xl25, 0, 0, xl25, xl25, xl25_state, 0, "Vulcan Electronics", "XL 25", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // ***: As far as MAME is concerned, the game is emulated fine. But for it to be playable, it requires interaction // with other, unemulatable, things eg. game board/pieces, playing cards, pen & paper, etc. diff --git a/src/mame/mame.lst b/src/mame/mame.lst index a3adca7212a..f676922b89e 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -14743,6 +14743,7 @@ eleciq // Conic esbattle // Entex esoccer // Entex f2pbball // Fonas +f3in1 // Fonas fxmcr165 // Gakken ginv1000 // Gakken gjackpot // Gakken