summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers/hh_tms1k.cpp
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2022-02-26 00:25:58 +1100
committer Robbbert <Robbbert@users.noreply.github.com>2022-02-26 00:25:58 +1100
commita79ea2e9baf351d80452e3fc9f53be06c0bb8a58 (patch)
tree0d752f300238f3999508e137b07185e1c076325f /src/mame/drivers/hh_tms1k.cpp
parent1281aa019f5175cc76ee3d51d2f56ea28f62aec7 (diff)
parent45b02a490f066feb186df56b83c5c19c5499bff5 (diff)
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'src/mame/drivers/hh_tms1k.cpp')
-rw-r--r--src/mame/drivers/hh_tms1k.cpp680
1 files changed, 509 insertions, 171 deletions
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index f7eb6717a7f..bcd6014c6ed 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -53,11 +53,11 @@ on Joerg Woerner's datamath.org: http://www.datamath.org/IC_List.htm
@MP1204 TMS1100 1980, Entex Baseball 3 (6007)
*MP1209 TMS1100 1980, U.S. Games Space Cruiser/Strategy Football
@MP1211 TMS1100 1980, Entex Space Invader (6012)
- *MP1215 TMS1100 1980, Tiger Playmaker
+ @MP1215 TMS1100 1980, Tiger Playmaker
@MP1218 TMS1100 1980, Entex Basketball 2 (6010)
@MP1219 TMS1100 1980, U.S. Games Super Sports-4
@MP1221 TMS1100 1980, Entex Raise The Devil (6011)
- *MP1231 TMS1100 1983, Tandy 3-in-1 Sports Arena (model 60-2178)
+ @MP1231 TMS1100 1984, Tandy 3 in 1 Sports Arena (model 60-2178)
@MP1296 TMS1100 1982, Entex Black Knight Pinball (6081)
*MP1311 TMS1100 1981, Bandai TC7: Air Traffic Control
@MP1312 TMS1100 1983, Gakken FX-Micom R-165/Radio Shack Science Fair Microcomputer Trainer
@@ -125,7 +125,7 @@ on Joerg Woerner's datamath.org: http://www.datamath.org/IC_List.htm
*MP6354 ? 1982, Tsukuda The Dracula (? note: 40-pin, VFD-capable)
*MP6361 ? 1983, Defender Strikes (? note: VFD-capable)
@MP7302 TMS1400 1980, Tiger Deluxe Football with Instant Replay
- @MP7304 TMS1400 1980, Tiger 7 in 1 Sports Stadium (model 7-555)
+ @MP7304 TMS1400 1982, Tiger 7 in 1 Sports Stadium (model 7-555)
@MP7313 TMS1400 1980, Parker Brothers Bank Shot
@MP7314 TMS1400 1980, Parker Brothers Split Second
MP7324 TMS1400 1985, Tiger K28/Coleco Talking Teacher -> tispeak.cpp
@@ -172,7 +172,7 @@ TODO:
but not for newer ones (rev. E or TMS1400 MCUs). TMS0970/0980 osc. is on-die.
- fake-press ON button when emulation starts for machines that have it on the button matrix
(doesn't look like any relies on it though)
-- 7in1ss: in 2-player mode, game select and skill select can be configured after selecting a game?
+- t7in1ss: in 2-player mode, game select and skill select can be configured after selecting a game?
Possibly BTANB, players are expected to quickly press the "First Up" button after the alarm sound.
- bship discrete sound, netlist is documented
- finish bshipb SN76477 sound
@@ -202,7 +202,7 @@ TODO:
#include "speaker.h"
// internal artwork
-#include "7in1ss.lh"
+#include "t7in1ss.lh"
#include "alphie.lh"
#include "amaztron.lh" // clickable
#include "arcmania.lh" // clickable
@@ -261,6 +261,7 @@ TODO:
#include "palmmd8.lh"
#include "pbmastm.lh"
#include "phpball.lh"
+#include "playmaker.lh"
#include "qfire.lh" // clickable
#include "quizwizc.lh"
#include "raisedvl.lh"
@@ -272,6 +273,7 @@ TODO:
#include "starwbc.lh" // clickable
#include "stopthief.lh" // clickable
#include "subwars.lh"
+#include "t3in1sa.lh"
#include "tandy12.lh" // clickable
#include "tbreakup.lh"
#include "tc4.lh"
@@ -743,7 +745,7 @@ u8 mathmagi_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
ON ONE [SEL] [NXT] [?] [/]
| | [7] [8] [9] [x]
@@ -1529,6 +1531,7 @@ the letter buttons from it, the 8-character encoding for date input uses
letters and digits in combination. This fact and the use of the P key are
why the digit buttons are mapped here as keyboard inputs rather than as a
keypad.
+
*/
static INPUT_PORTS_START( zodiac )
@@ -2381,8 +2384,7 @@ class quizwizc_state : public hh_tms1k_state
{
public:
quizwizc_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_tms1k_state(mconfig, type, tag),
- m_pinout(0)
+ hh_tms1k_state(mconfig, type, tag)
{ }
void quizwizc(machine_config &config);
@@ -2392,7 +2394,7 @@ protected:
private:
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
- u16 m_pinout; // cartridge R pins
+ u16 m_pinout = 0x07; // cartridge R pins
void update_display();
void write_r(u16 data);
@@ -2419,10 +2421,16 @@ DEVICE_IMAGE_LOAD_MEMBER(quizwizc_state::cart_load)
}
// get cartridge pinout K1 to R connections
- std::string pinout(image.get_feature("pinout"));
- m_pinout = std::stoul(pinout, nullptr, 2) & 0xe7;
+ const char *pinout = image.get_feature("pinout");
+ m_pinout = pinout ? strtoul(pinout, nullptr, 2) & 0xe7 : 0;
m_pinout = bitswap<8>(m_pinout,4,3,7,5,2,1,6,0) << 4;
+ if (m_pinout == 0)
+ {
+ image.seterror(image_error::INVALIDIMAGE, "Invalid cartridge pinout");
+ return image_init_result::FAIL;
+ }
+
return image_init_result::PASS;
}
@@ -2571,8 +2579,7 @@ class tc4_state : public hh_tms1k_state
{
public:
tc4_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_tms1k_state(mconfig, type, tag),
- m_pinout(0)
+ hh_tms1k_state(mconfig, type, tag)
{ }
void tc4(machine_config &config);
@@ -2582,7 +2589,7 @@ protected:
private:
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
- u8 m_pinout; // cartridge K pins
+ u8 m_pinout = 0xf; // cartridge K pins
void update_display();
void write_r(u16 data);
@@ -2609,8 +2616,8 @@ DEVICE_IMAGE_LOAD_MEMBER(tc4_state::cart_load)
}
// get cartridge pinout R9 to K connections
- std::string pinout(image.get_feature("pinout"));
- m_pinout = std::stoul(pinout, nullptr, 0) & 0xf;
+ const char *pinout = image.get_feature("pinout");
+ m_pinout = pinout ? strtoul(pinout, nullptr, 0) & 0xf : 0xf;
return image_init_result::PASS;
}
@@ -3535,7 +3542,7 @@ ROM_END
/***************************************************************************
Entex (Electronic) Soccer
- * TMS1000NL MP0158 (die label same)
+ * TMS1000NL MP0158 (die label 1000B, MP0158)
* 2 7seg LEDs, 30 other LEDs, 1-bit sound
known releases:
@@ -3599,14 +3606,14 @@ u8 esoccer_state::read_k()
static INPUT_PORTS_START( esoccer )
PORT_START("IN.0") // R0
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY
PORT_START("IN.1") // R1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_16WAY
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_16WAY
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_16WAY
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_16WAY
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_16WAY
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_16WAY
PORT_START("IN.2") // R2
@@ -3620,7 +3627,7 @@ INPUT_PORTS_END
void esoccer_state::esoccer(machine_config &config)
{
// basic machine hardware
- TMS1000(config, m_maincpu, 350000); // approximation - RC osc. R=47K, C=33pF
+ TMS1000(config, m_maincpu, 475000); // approximation - RC osc. R=47K, C=33pF
m_maincpu->k().set(FUNC(esoccer_state::read_k));
m_maincpu->r().set(FUNC(esoccer_state::write_r));
m_maincpu->o().set(FUNC(esoccer_state::write_o));
@@ -3628,7 +3635,7 @@ void esoccer_state::esoccer(machine_config &config)
// video hardware
PWM_DISPLAY(config, m_display).set_size(10, 7);
m_display->set_segmask(0x300, 0x7f);
- m_display->set_bri_levels(0.01, 0.1); // player led is brighter
+ m_display->set_bri_levels(0.008, 0.08); // player led is brighter
config.set_default_layout(layout_esoccer);
// sound hardware
@@ -4050,7 +4057,7 @@ u8 ebball3_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
main device (batter side): remote pitcher:
@@ -4219,7 +4226,7 @@ INPUT_PORTS_END
void esbattle_state::esbattle(machine_config &config)
{
// basic machine hardware
- TMS1000(config, m_maincpu, 425000); // approximation - RC osc. R=47K, C=33pF
+ TMS1000(config, m_maincpu, 450000); // approximation - RC osc. R=47K, C=33pF
m_maincpu->k().set(FUNC(esbattle_state::read_k));
m_maincpu->r().set(FUNC(esbattle_state::write_r));
m_maincpu->o().set(FUNC(esbattle_state::write_o));
@@ -5242,8 +5249,6 @@ public:
void gpoker(machine_config &config);
protected:
- virtual void machine_reset() override;
-
required_device<beep_device> m_beeper;
void update_display();
@@ -5252,12 +5257,6 @@ protected:
virtual u8 read_k();
};
-void gpoker_state::machine_reset()
-{
- hh_tms1k_state::machine_reset();
- m_beeper->set_state(0);
-}
-
// handlers
void gpoker_state::update_display()
@@ -5295,7 +5294,7 @@ u8 gpoker_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
[7] [8] [9] [DL] | (on/off switch)
[4] [5] [6] [BT]
@@ -5418,7 +5417,7 @@ void gjackpot_state::write_r(u16 data)
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
(note: on dual-function buttons, upper label=Gin, lower label=Black Jack)
BJ --o GIN
@@ -5981,7 +5980,7 @@ u8 fxmcr165_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
[C] [D] [E] [F] [ADR SET]
[8] [9] [A] [B] [INCR]
@@ -6115,7 +6114,7 @@ u8 elecdet_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
[1] [2] [3] [SUSPECT]
[4] [5] [6] [PRIVATE QUESTION]
@@ -6268,7 +6267,7 @@ u8 starwbc_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
(reconnnaissance=yellow) (tactical reaction=green)
[MAGNA] [ENEMY] [EM] [BS] [SCR]
@@ -6732,7 +6731,7 @@ u8 horseran_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
[PURSE] [DIST.] [P. POSN.] [DAYS] [R.S.L.] [7] [8] [9]
[RACES] [WINS] [PLACES] [SHOWS] [EARNINGS] [4] [5] [6]
@@ -7854,7 +7853,7 @@ u8 bigtrak_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
USA version: UK version:
@@ -8118,7 +8117,7 @@ u8 mbdtower_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
(green) (l.blue) (red)
[YES/ [REPEAT] [NO/
@@ -8248,7 +8247,7 @@ u8 arcmania_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
(orange) (orange) (orange)
[1] [2] [3]
@@ -8371,7 +8370,7 @@ u8 cnsector_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
COMBAT INFORMATION CENTER
[NEXT SHIP] [RECALL] [MOVE SHIP]
@@ -8834,7 +8833,7 @@ u8 stopthief_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
[1] [2] [OFF]
[3] [4] [ON]
@@ -8993,7 +8992,7 @@ u8 bankshot_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
(note: remember that you can rotate the display in MAME)
[SELECT [BALL UP] [BALL OVER]
@@ -9240,7 +9239,7 @@ u8 lostreas_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
(note: Canadian version differs slightly to accomodoate dual-language)
[N-S(gold)] [1] [2] [3] [AIR]
@@ -9654,12 +9653,14 @@ ROM_END
/***************************************************************************
- Tandy Computerized Arcade (1981, 1982, 1995)
+ Tandy Computerized Arcade (model 60-2159 or 60-2159A)
* TMS1100 MCU, label CD7282SL
* 12 lamps behind buttons, 1-bit sound
known releases:
- World: Tandy-12: Computerized Arcade, published by Tandy
+ - World: Computerized Arcade, published by Tandy, Radio Shack brand.
+ This one is model 60-2495 from the mid-90s, perhaps different hardware!
- Mexico: Fabuloso Fred, published by Ensueño Toys (also released as
9-button version, a clone of Mego Fabulous Fred)
@@ -9730,7 +9731,7 @@ u8 tandy12_state::read_k()
// config
-/* physical button layout and labels is like this:
+/* physical button layout and labels are like this:
REPEAT-2 SPACE-2
[O] OFF--ON [O]
@@ -9956,6 +9957,172 @@ ROM_END
/***************************************************************************
+ Tandy 3 in 1 Sports Arena (model 60-2178)
+ * TMS1100 (just a datestamp label (8331), die label 1100B MP1231)
+ * 2x2-digit 7seg LED display + 47 other LEDs, 1-bit sound
+
+ For Tandy Sports Arena (model 60-2158), see cmsport, this is a different game.
+ This version is very similar to ssports4 released a few years earlier.
+
+ 3 overlays were included for the games (Tandy calls them graphic sheets),
+ MAME external artwork is needed for those.
+
+ It is always in 2-player head-to-head mode, the Player switch is just meant
+ for allowing the other player to have full control over 2 defense spots.
+
+***************************************************************************/
+
+class t3in1sa_state : public hh_tms1k_state
+{
+public:
+ t3in1sa_state(const machine_config &mconfig, device_type type, const char *tag) :
+ hh_tms1k_state(mconfig, type, tag)
+ { }
+
+ void t3in1sa(machine_config &config);
+
+private:
+ void update_display();
+ void write_r(u16 data);
+ void write_o(u16 data);
+ u8 read_k();
+};
+
+// handlers
+
+void t3in1sa_state::update_display()
+{
+ m_display->matrix(m_r, m_o | (m_r << 6 & 0x100));
+}
+
+void t3in1sa_state::write_r(u16 data)
+{
+ // R10: speaker out
+ m_speaker->level_w(data >> 10 & 1);
+
+ // R0,R1,R5,R7-R9: input mux
+ m_inp_mux = (data & 3) | (data >> 3 & 4) | (data >> 4 & 0x38);
+
+ // R2: led data high
+ // R3-R7: led select
+ // R0,R1,R8,R9: digit select
+ m_r = data;
+ update_display();
+}
+
+void t3in1sa_state::write_o(u16 data)
+{
+ // O0-O7: led data low
+ m_o = data;
+ update_display();
+}
+
+u8 t3in1sa_state::read_k()
+{
+ // K: multiplexed inputs
+ return read_inputs(6);
+}
+
+// config
+
+/* physical button layout and labels are like this:
+
+ ↑
+ [ ] [ ] [ ]
+ TEAM-MATE PASS
+ ←[ ] [ ]→ shoot
+ ↗ ↖
+ [ ] [ ] [ ]
+ STATUS ↓ KICK
+ pass
+ shoot
+
+Game and difficulty switches are under the yellow buttons,
+player switch is under the red buttons. P1 is yellow, P2 is red.
+
+*/
+
+static INPUT_PORTS_START( t3in1sa )
+ PORT_START("IN.0") // R0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY
+
+ PORT_START("IN.1") // R1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_16WAY
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_16WAY
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_16WAY
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_16WAY
+
+ PORT_START("IN.2") // R5
+ PORT_CONFNAME( 0x01, 0x00, DEF_STR( Difficulty ) )
+ PORT_CONFSETTING( 0x00, "1" ) // AMATEUR
+ PORT_CONFSETTING( 0x01, "2" ) // PRO
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_CONFNAME( 0x08, 0x08, DEF_STR( Players ) )
+ PORT_CONFSETTING( 0x08, "1" )
+ PORT_CONFSETTING( 0x00, "2" )
+
+ PORT_START("IN.3") // R7
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_CONFNAME( 0x0e, 0x08, "Game Select" )
+ PORT_CONFSETTING( 0x08, "Football" ) // F
+ PORT_CONFSETTING( 0x04, "Basketball" ) // B
+ PORT_CONFSETTING( 0x02, "Soccer" ) // S
+
+ PORT_START("IN.4") // R8
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P1 Up-Left / Kick")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Up-Right / Status")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Pass / Shoot")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Team-Mate")
+
+ PORT_START("IN.5") // R9
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_COCKTAIL PORT_NAME("P2 Up-Left / Kick")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_COCKTAIL PORT_NAME("P2 Up-Right / Status")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Pass / Shoot")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Team-Mate")
+INPUT_PORTS_END
+
+void t3in1sa_state::t3in1sa(machine_config &config)
+{
+ // basic machine hardware
+ TMS1100(config, m_maincpu, 350000); // approximation - RC osc. R=47K, C=47pF
+ m_maincpu->k().set(FUNC(t3in1sa_state::read_k));
+ m_maincpu->r().set(FUNC(t3in1sa_state::write_r));
+ m_maincpu->o().set(FUNC(t3in1sa_state::write_o));
+
+ // video hardware
+ PWM_DISPLAY(config, m_display).set_size(10, 9);
+ m_display->set_segmask(0x303, 0x7f);
+ m_display->set_bri_levels(0.005, 0.05); // offense leds are brighter
+ config.set_default_layout(layout_t3in1sa);
+
+ // sound hardware
+ SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, m_speaker);
+ m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
+}
+
+// roms
+
+ROM_START( t3in1sa )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD( "mp1231", 0x0000, 0x0800, CRC(1c24e5c2) SHA1(0b6c2edea27eba15e890d82475b91a5e9ef6c4b9) )
+
+ 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_t3in1sa_output.pla", 0, 365, CRC(de82a294) SHA1(7187666a510919b90798b92b9104ac5d6820d559) )
+ROM_END
+
+
+
+
+
+/***************************************************************************
+
Telesensory Systems, Inc.(TSI) Speech+
* TMS1000 MCU, label TMS1007NL (die label 1000B, 1007A)
* TSI S14001A speech chip, GI S14007-A 2KB maskrom for samples
@@ -12316,127 +12483,162 @@ ROM_END
/***************************************************************************
- Tiger Deluxe Football (model 7-550)
- * TMS1400NLL MP7302 (die label TMS1400 MP7302)
- * 4-digit 7seg LED display, 80 red/green LEDs, 1-bit sound
+ Tiger Playmaker: Hockey, Soccer, Basketball (model 7-540 or 7-540A)
+ * TMS1100 MP1215 (die label 1100B MP1215)
+ * 2-digit 7seg LED display + 40 other LEDs, 1-bit sound
- According to the manual, player 1 is green, player 2 is red. But when
- playing a 1-player game, the CPU controls green, so on MAME, player 1
- is the red side.
+ The games are on playcards(Tiger calls them that), the hardware detects which
+ game is inserted from a notch at the lower-right. The playcards also function
+ as an overlay. MAME external artwork is needed for those.
+
+ Booting the handheld with no playcard inserted will initiate a halftime show.
+
+ "Playmaker" is actually Tiger's trademark for the d-pad controller, this
+ controller term was also used in for example Deluxe Football, and 7 in 1 Sports
+ Stadium. The d-pad has a ball shape at the bottom that sits on a concave base.
+ It is patented under US4256931 (mid-1979, a couple of years before Nintendo's
+ Game & Watch d-pad with US4687200).
***************************************************************************/
-class dxfootb_state : public hh_tms1k_state
+class playmaker_state : public hh_tms1k_state
{
public:
- dxfootb_state(const machine_config &mconfig, device_type type, const char *tag) :
+ playmaker_state(const machine_config &mconfig, device_type type, const char *tag) :
hh_tms1k_state(mconfig, type, tag)
{ }
- void dxfootb(machine_config &config);
+ void playmaker(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
private:
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
+ u8 m_notch = 0; // cartridge K1/K2
+
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
};
+void playmaker_state::machine_start()
+{
+ hh_tms1k_state::machine_start();
+
+ // register for savestates
+ save_item(NAME(m_notch));
+}
+
// handlers
-void dxfootb_state::update_display()
+DEVICE_IMAGE_LOAD_MEMBER(playmaker_state::cart_load)
{
- // 2 led groups (double multiplexed)
- u16 g1 = (m_r & 0x100) ? 0x7f : 0;
- u16 g2 = (m_r & 0x80) ? 0x7f << 7 : 0;
- m_display->matrix((m_r & g1) | (m_r << 7 & g2), m_o);
+ if (!image.loaded_through_softlist())
+ {
+ image.seterror(image_error::UNSUPPORTED, "Can only load through softwarelist");
+ return image_init_result::FAIL;
+ }
+
+ // get cartridge notch
+ const char *notch = image.get_feature("notch");
+ m_notch = notch ? strtoul(notch, nullptr, 0) & 3 : 0;
+
+ return image_init_result::PASS;
}
-void dxfootb_state::write_r(u16 data)
+void playmaker_state::update_display()
{
- // R9,R10: speaker out
- m_speaker->level_w(data >> 9 & 3);
+ m_display->matrix(m_r, m_o);
+}
- // R3-R6: input mux
- m_inp_mux = data >> 3 & 0xf;
+void playmaker_state::write_r(u16 data)
+{
+ // R10: speaker out
+ m_speaker->level_w(data >> 10 & 1);
- // R0-R6: led select
- // R7,R8: group select
+ // R0-R3: input mux
+ m_inp_mux = data & 0xf;
+
+ // R0-R7: led select
+ // R8,R9: digit select
m_r = data;
update_display();
}
-void dxfootb_state::write_o(u16 data)
+void playmaker_state::write_o(u16 data)
{
- // O0-O7: led data
+ // O0-O6: led data
m_o = data;
update_display();
}
-u8 dxfootb_state::read_k()
+u8 playmaker_state::read_k()
{
- // K: multiplexed inputs
- return read_inputs(4);
+ // K: multiplexed inputs, cartridge notch from R3
+ return read_inputs(3) | ((m_inp_mux & 8) ? m_notch : 0);
}
// config
-static INPUT_PORTS_START( dxfootb )
- PORT_START("IN.0") // R3
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START2 ) PORT_NAME("Replay / Skill (Green)")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("Score / Skill (Red)")
- PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("IN.1") // R4
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 )
+static INPUT_PORTS_START( playmaker )
+ PORT_START("IN.0") // R0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
- PORT_START("IN.2") // R5
+ PORT_START("IN.1") // R1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
- PORT_START("IN.3") // R6
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
+ PORT_START("IN.2") // R2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Shoot")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Pass")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Shoot / P1 Skill")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Pass / P2 Skill")
INPUT_PORTS_END
-void dxfootb_state::dxfootb(machine_config &config)
+void playmaker_state::playmaker(machine_config &config)
{
// basic machine hardware
- TMS1400(config, m_maincpu, 425000); // approximation - RC osc. R=47K, C=47pF
- m_maincpu->k().set(FUNC(dxfootb_state::read_k));
- m_maincpu->r().set(FUNC(dxfootb_state::write_r));
- m_maincpu->o().set(FUNC(dxfootb_state::write_o));
+ TMS1100(config, m_maincpu, 375000); // approximation - RC osc. R=20K, C=250pF
+ m_maincpu->k().set(FUNC(playmaker_state::read_k));
+ m_maincpu->r().set(FUNC(playmaker_state::write_r));
+ m_maincpu->o().set(FUNC(playmaker_state::write_o));
// video hardware
- PWM_DISPLAY(config, m_display).set_size(7+7, 8);
- m_display->set_segmask(0x3c00, 0x7f);
- config.set_default_layout(layout_dxfootb);
+ PWM_DISPLAY(config, m_display).set_size(10, 7);
+ m_display->set_segmask(0x300, 0x7f);
+ m_display->set_bri_levels(0.004, 0.04); // player 1 leds are brighter
+ config.set_default_layout(layout_playmaker);
// sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
- static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0 };
- m_speaker->set_levels(4, speaker_levels);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
+
+ // cartridge
+ generic_cartslot_device &cartslot(GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "playmaker_cart"));
+ cartslot.set_must_be_loaded(false);
+ cartslot.set_device_load(FUNC(playmaker_state::cart_load));
+
+ SOFTWARE_LIST(config, "cart_list").set_original("playmaker");
}
// roms
-ROM_START( dxfootb )
- ROM_REGION( 0x1000, "maincpu", 0 )
- ROM_LOAD( "mp7302", 0x0000, 0x1000, CRC(a8077062) SHA1(c1318fe5c8f2db021d7d1264fc70158944045fa3) )
+ROM_START( playmaker )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD( "mp1215", 0x0000, 0x0800, CRC(bfc7b6c8) SHA1(33f6e2b86fae2fd9e4b0a4b8dc842c257ca3047d) )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) )
- ROM_REGION( 557, "maincpu:opla", 0 )
- ROM_LOAD( "tms1400_dxfootb_output.pla", 0, 557, CRC(a1b3d2c0) SHA1(8030e6dcd3878b58668c98cff36d93b764e1d67f) )
+ ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1100_playmaker_output.pla", 0, 365, CRC(0cd484d6) SHA1(4a9af9f3d18af504145690cb0f6444ff1aef26ca) )
ROM_END
@@ -12445,28 +12647,27 @@ ROM_END
/***************************************************************************
- Tiger 7 in 1 Sports Stadium (model 7-555)
- * TMS1400 MP7304 (die label TMS1400 MP7304A)
- * 2x2-digit 7seg LED display + 39 other LEDs, 1-bit sound
+ Tiger Deluxe Football with Instant Replay (model 7-550)
+ * TMS1400NLL MP7302 (die label TMS1400 MP7302)
+ * 4-digit 7seg LED display, 80 red/green LEDs, 1-bit sound
- This handheld includes 7 games: 1: Basketball, 2: Hockey, 3: Soccer,
- 4: Maze, 5: Baseball, 6: Football, 7: Raquetball.
- MAME external artwork is needed for the switchable overlays.
+ According to the manual, player 1 is green, player 2 is red. But when
+ playing a 1-player game, the CPU controls green, so on MAME, player 1
+ is the red side.
- known releases:
- - World: 7 in 1 Sports Stadium, published by Tiger
- - USA: 7 in 1 Sports, published by Sears
+ Booting the handheld with the Score and Replay buttons held down will
+ initiate a halftime show.
***************************************************************************/
-class ss7in1_state : public hh_tms1k_state
+class dxfootb_state : public hh_tms1k_state
{
public:
- ss7in1_state(const machine_config &mconfig, device_type type, const char *tag) :
+ dxfootb_state(const machine_config &mconfig, device_type type, const char *tag) :
hh_tms1k_state(mconfig, type, tag)
{ }
- void ss7in1(machine_config &config);
+ void dxfootb(machine_config &config);
private:
void update_display();
@@ -12477,33 +12678,36 @@ private:
// handlers
-void ss7in1_state::update_display()
+void dxfootb_state::update_display()
{
- m_display->matrix(m_r, m_o);
+ // 2 led groups (double multiplexed)
+ u16 g1 = (m_r & 0x100) ? 0x7f : 0;
+ u16 g2 = (m_r & 0x80) ? 0x7f << 7 : 0;
+ m_display->matrix((m_r & g1) | (m_r << 7 & g2), m_o);
}
-void ss7in1_state::write_r(u16 data)
+void dxfootb_state::write_r(u16 data)
{
- // R9: speaker out
- m_speaker->level_w(data >> 9 & 1);
+ // R9,R10: speaker out
+ m_speaker->level_w(data >> 9 & 3);
- // R0-R2,R10: input mux
- m_inp_mux = (data & 7) | (data >> 7 & 8);
+ // R3-R6: input mux
+ m_inp_mux = data >> 3 & 0xf;
- // R0-R3: digit select
- // R4-R8: led select
+ // R0-R6: led select
+ // R7,R8: group select
m_r = data;
update_display();
}
-void ss7in1_state::write_o(u16 data)
+void dxfootb_state::write_o(u16 data)
{
// O0-O7: led data
m_o = data;
update_display();
}
-u8 ss7in1_state::read_k()
+u8 dxfootb_state::read_k()
{
// K: multiplexed inputs
return read_inputs(4);
@@ -12511,63 +12715,62 @@ u8 ss7in1_state::read_k()
// config
-static INPUT_PORTS_START( ss7in1 )
- PORT_START("IN.0") // R0
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
+static INPUT_PORTS_START( dxfootb )
+ PORT_START("IN.0") // R3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START2 ) PORT_NAME("Replay / Skill (Green)")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("Score / Skill (Red)")
+ PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_START("IN.1") // R1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 )
+ PORT_START("IN.1") // R4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Kick")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Pass")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Kick")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Pass")
- PORT_START("IN.2") // R2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
+ PORT_START("IN.2") // R5
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
- PORT_START("IN.3") // R10
- PORT_CONFNAME( 0x01, 0x00, DEF_STR( Players ) )
- PORT_CONFSETTING( 0x00, "1" )
- PORT_CONFSETTING( 0x01, "2" )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_START("IN.3") // R6
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
INPUT_PORTS_END
-void ss7in1_state::ss7in1(machine_config &config)
+void dxfootb_state::dxfootb(machine_config &config)
{
// basic machine hardware
TMS1400(config, m_maincpu, 425000); // approximation - RC osc. R=47K, C=47pF
- m_maincpu->k().set(FUNC(ss7in1_state::read_k));
- m_maincpu->r().set(FUNC(ss7in1_state::write_r));
- m_maincpu->o().set(FUNC(ss7in1_state::write_o));
+ m_maincpu->k().set(FUNC(dxfootb_state::read_k));
+ m_maincpu->r().set(FUNC(dxfootb_state::write_r));
+ m_maincpu->o().set(FUNC(dxfootb_state::write_o));
// video hardware
- PWM_DISPLAY(config, m_display).set_size(9, 8);
- m_display->set_segmask(0xf, 0x7f);
- m_display->set_bri_levels(0.01, 0.04); // player led is brighter
- config.set_default_layout(layout_7in1ss);
+ PWM_DISPLAY(config, m_display).set_size(7+7, 8);
+ m_display->set_segmask(0x3c00, 0x7f);
+ config.set_default_layout(layout_dxfootb);
// sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
+ static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0 };
+ m_speaker->set_levels(4, speaker_levels);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
}
// roms
-ROM_START( 7in1ss )
+ROM_START( dxfootb )
ROM_REGION( 0x1000, "maincpu", 0 )
- ROM_LOAD( "mp7304", 0x0000, 0x1000, CRC(2a1c8390) SHA1(fa10e60686af6828a61f05046abc3854ab49af95) )
+ ROM_LOAD( "mp7302", 0x0000, 0x1000, CRC(a8077062) SHA1(c1318fe5c8f2db021d7d1264fc70158944045fa3) )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) )
ROM_REGION( 557, "maincpu:opla", 0 )
- ROM_LOAD( "tms1400_7in1ss_output.pla", 0, 557, CRC(6b7660f7) SHA1(bb7d58fa04e7606ccdf5b209e1b089948bdd1e7c) )
+ ROM_LOAD( "tms1400_dxfootb_output.pla", 0, 557, CRC(a1b3d2c0) SHA1(8030e6dcd3878b58668c98cff36d93b764e1d67f) )
ROM_END
@@ -12875,6 +13078,137 @@ ROM_END
/***************************************************************************
+ Tiger 7 in 1 Sports Stadium (model 7-555)
+ * TMS1400 MP7304 (die label TMS1400 MP7304A)
+ * 2x2-digit 7seg LED display + 39 other LEDs, 1-bit sound
+
+ This handheld includes 7 games: 1: Basketball, 2: Hockey, 3: Soccer,
+ 4: Maze, 5: Baseball, 6: Football, 7: Raquetball.
+ MAME external artwork is needed for the switchable overlays.
+
+ known releases:
+ - World: 7 in 1 Sports Stadium, published by Tiger
+ - USA: 7 in 1 Sports, published by Sears
+
+***************************************************************************/
+
+class t7in1ss_state : public hh_tms1k_state
+{
+public:
+ t7in1ss_state(const machine_config &mconfig, device_type type, const char *tag) :
+ hh_tms1k_state(mconfig, type, tag)
+ { }
+
+ void t7in1ss(machine_config &config);
+
+private:
+ void update_display();
+ void write_r(u16 data);
+ void write_o(u16 data);
+ u8 read_k();
+};
+
+// handlers
+
+void t7in1ss_state::update_display()
+{
+ m_display->matrix(m_r, m_o);
+}
+
+void t7in1ss_state::write_r(u16 data)
+{
+ // R9: speaker out
+ m_speaker->level_w(data >> 9 & 1);
+
+ // R0-R2,R10: input mux
+ m_inp_mux = (data & 7) | (data >> 7 & 8);
+
+ // R0-R3: digit select
+ // R4-R8: led select
+ m_r = data;
+ update_display();
+}
+
+void t7in1ss_state::write_o(u16 data)
+{
+ // O0-O7: led data
+ m_o = data;
+ update_display();
+}
+
+u8 t7in1ss_state::read_k()
+{
+ // K: multiplexed inputs
+ return read_inputs(4);
+}
+
+// config
+
+static INPUT_PORTS_START( t7in1ss )
+ PORT_START("IN.0") // R0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
+
+ PORT_START("IN.1") // R1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 )
+
+ PORT_START("IN.2") // R2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
+
+ PORT_START("IN.3") // R10
+ PORT_CONFNAME( 0x01, 0x00, DEF_STR( Players ) )
+ PORT_CONFSETTING( 0x00, "1" )
+ PORT_CONFSETTING( 0x01, "2" )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
+INPUT_PORTS_END
+
+void t7in1ss_state::t7in1ss(machine_config &config)
+{
+ // basic machine hardware
+ TMS1400(config, m_maincpu, 425000); // approximation - RC osc. R=47K, C=47pF
+ m_maincpu->k().set(FUNC(t7in1ss_state::read_k));
+ m_maincpu->r().set(FUNC(t7in1ss_state::write_r));
+ m_maincpu->o().set(FUNC(t7in1ss_state::write_o));
+
+ // video hardware
+ PWM_DISPLAY(config, m_display).set_size(9, 8);
+ m_display->set_segmask(0xf, 0x7f);
+ m_display->set_bri_levels(0.004, 0.04); // player led is brighter
+ config.set_default_layout(layout_t7in1ss);
+
+ // sound hardware
+ SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, m_speaker);
+ m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
+}
+
+// roms
+
+ROM_START( t7in1ss )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "mp7304", 0x0000, 0x1000, CRC(2a1c8390) SHA1(fa10e60686af6828a61f05046abc3854ab49af95) )
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) )
+ ROM_REGION( 557, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1400_t7in1ss_output.pla", 0, 557, CRC(6b7660f7) SHA1(bb7d58fa04e7606ccdf5b209e1b089948bdd1e7c) )
+ROM_END
+
+
+
+
+
+/***************************************************************************
+
Tomy(tronics) Break Up (manufactured in Japan)
* PCB label TOMY B.O.
* TMS1040 MP2726 TOMY WIPE (die label MP2726A)
@@ -13213,11 +13547,13 @@ ROM_END
* TMS1100 MP1219 (no decap)
* 4 7seg LEDs, 49 other LEDs, 1-bit sound
+ The game is very similar to t3in1sa, even parts of the ROM match. But by
+ the time that one was released (in 1983 or 1984), U.S. Games did not exist
+ anymore. I suspect t3in1sa was programmed by the same (Hong Kong) company.
+
This handheld includes 4 games: Basketball, Football, Soccer, Hockey.
MAME external artwork is needed for the switchable overlays.
- The later Coleco Total Control 4 is clearly based on this.
-
***************************************************************************/
class ssports4_state : public hh_tms1k_state
@@ -13294,14 +13630,14 @@ static INPUT_PORTS_START( ssports4 )
PORT_CONFSETTING( 0x00, "2" )
PORT_START("IN.3") // R8
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_16WAY PORT_NAME("P1 Kick") // or diagonal up-left
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_16WAY PORT_NAME("P1 Info") // or diagonal up-right
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_16WAY PORT_NAME("P1 Up-Left / Kick")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_16WAY PORT_NAME("P1 Up-Right / Info")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_16WAY PORT_NAME("P1 Pass")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_16WAY PORT_NAME("P1 O.P.") // offensive player (modifier button)
PORT_START("IN.4") // R9
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Kick")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Info")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Up-Left / Kick")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Up-Right / Info")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Pass")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 O.P.")
@@ -13317,7 +13653,7 @@ INPUT_PORTS_END
void ssports4_state::ssports4(machine_config &config)
{
// basic machine hardware
- TMS1100(config, m_maincpu, 375000); // approximation - RC osc. R=47K, C=47pF
+ TMS1100(config, m_maincpu, 350000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(ssports4_state::read_k));
m_maincpu->r().set(FUNC(ssports4_state::write_r));
m_maincpu->o().set(FUNC(ssports4_state::write_o));
@@ -13325,7 +13661,7 @@ void ssports4_state::ssports4(machine_config &config)
// video hardware
PWM_DISPLAY(config, m_display).set_size(10, 9);
m_display->set_segmask(0x303, 0x7f);
- m_display->set_bri_levels(0.003, 0.03); // offense leds are brighter
+ m_display->set_bri_levels(0.005, 0.05); // offense leds are brighter
config.set_default_layout(layout_ssports4);
// sound hardware
@@ -13628,6 +13964,7 @@ CONS( 1980, tcfball, 0, 0, tcfball, tcfball, tcfball_state, emp
CONS( 1980, tcfballa, tcfball, 0, tcfballa, tcfballa, tcfballa_state, empty_init, "Tandy Corporation", "Championship Football (model 60-2151)", MACHINE_SUPPORTS_SAVE )
CONS( 1981, tandy12, 0, 0, tandy12, tandy12, tandy12_state, empty_init, "Tandy Corporation", "Tandy-12: Computerized Arcade", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // some of the minigames: ***
CONS( 1982, monkeysee, 0, 0, monkeysee, monkeysee, monkeysee_state, empty_init, "Tandy Corporation", "Monkey See (1982 version)", MACHINE_SUPPORTS_SAVE )
+CONS( 1984, t3in1sa, 0, 0, t3in1sa, t3in1sa, t3in1sa_state, empty_init, "Tandy Corporation", "3 in 1 Sports Arena", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
COMP( 1976, speechp, 0, 0, speechp, speechp, speechp_state, empty_init, "Telesensory Systems, Inc.", "Speech+", MACHINE_SUPPORTS_SAVE )
@@ -13652,11 +13989,12 @@ CONS( 1979, timaze, 0, 0, timaze, timaze, timaze_state, emp
SYST( 1979, tithermos, 0, 0, tithermos, tithermos, tithermos_state, empty_init, "Texas Instruments", "Electronic Digital Thermostat", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING )
CONS( 1979, subwars, 0, 0, subwars, subwars, subwars_state, empty_init, "Tiger Electronics", "Sub Wars (LED version)", MACHINE_SUPPORTS_SAVE )
+CONS( 1980, playmaker, 0, 0, playmaker, playmaker, playmaker_state, empty_init, "Tiger Electronics", "Playmaker: Hockey, Soccer, Basketball", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
CONS( 1980, dxfootb, 0, 0, dxfootb, dxfootb, dxfootb_state, empty_init, "Tiger Electronics", "Deluxe Football with Instant Replay", MACHINE_SUPPORTS_SAVE )
-CONS( 1980, 7in1ss, 0, 0, ss7in1, ss7in1, ss7in1_state, empty_init, "Tiger Electronics", "7 in 1 Sports Stadium", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
CONS( 1979, copycat, 0, 0, copycat, copycat, copycat_state, empty_init, "Tiger Electronics", "Copy Cat (model 7-520)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1989, copycatm2, copycat, 0, copycatm2, copycatm2, copycatm2_state, empty_init, "Tiger Electronics", "Copy Cat (model 7-522)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1981, ditto, 0, 0, ditto, ditto, ditto_state, empty_init, "Tiger Electronics", "Ditto", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1982, t7in1ss, 0, 0, t7in1ss, t7in1ss, t7in1ss_state, empty_init, "Tiger Electronics", "7 in 1 Sports Stadium", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
CONS( 1979, tbreakup, 0, 0, tbreakup, tbreakup, tbreakup_state, empty_init, "Tomy", "Break Up (Tomy)", MACHINE_SUPPORTS_SAVE )
CONS( 1980, phpball, 0, 0, phpball, phpball, phpball_state, empty_init, "Tomy", "Power House Pinball", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )