summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers/hh_tms1k.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/drivers/hh_tms1k.c')
-rw-r--r--src/mess/drivers/hh_tms1k.c115
1 files changed, 63 insertions, 52 deletions
diff --git a/src/mess/drivers/hh_tms1k.c b/src/mess/drivers/hh_tms1k.c
index d0eaa7b6ced..7474cff3ebe 100644
--- a/src/mess/drivers/hh_tms1k.c
+++ b/src/mess/drivers/hh_tms1k.c
@@ -24,6 +24,7 @@
@MP1221 TMS1100 1980, Entex Raise The Devil
*MP1296 TMS1100? 1982, Entex Black Knight
*MP1312 TMS1100 198?, Tandy/RadioShack Science Fair Microcomputer Trainer
+ *MP1359 TMS1100? 1985, Capsela CRC2000
@MP1525 TMS1170 1980, Coleco Head to Head Baseball
*MP1604 ? 1981, Hanzawa Twinvader III/Tandy Cosmic Fire Away 3000 (? note: VFD-capable)
@MP2105 TMS1370 1979, Gakken Poker
@@ -87,6 +88,7 @@
brighter: tc4/h2hfootb(offense), bankshot(cue ball), ...
- add softwarelist for tc4 cartridges?
- stopthiep: unable to start a game (may be intentional?)
+ - tbreakup: some of the leds flicker (rom and PLAs doublechecked)
***************************************************************************/
@@ -104,6 +106,9 @@
#include "ebball.lh"
#include "ebball2.lh"
#include "ebball3.lh"
+#include "ebaskb2.lh"
+#include "efootb4.lh"
+#include "einvader.lh" // test-layout(but still playable)
#include "elecdet.lh"
#include "gjackpot.lh"
#include "gpoker.lh"
@@ -118,11 +123,9 @@
#include "starwbc.lh"
#include "stopthie.lh"
#include "tandy12.lh" // clickable
-//#include "tbreakup.lh"
+#include "tbreakup.lh"
#include "tc4.lh"
-#include "einvader.lh" // test-layout(but still playable)
-
#include "hh_tms1k_test.lh" // common test-layout - use external artwork
@@ -1622,7 +1625,7 @@ MACHINE_CONFIG_END
Entex Color Football 4
* TMS1670 6009 MP7551 (die also labeled MP7551)
- * * 9-digit cyan VFD display, 60 red and green LEDs behind bezel, 1bit sound
+ * 9-digit cyan VFD display, 60 red and green LEDs behind bezel, 1bit sound
***************************************************************************/
@@ -1680,16 +1683,16 @@ READ8_MEMBER(efootb4_state::read_k)
static INPUT_PORTS_START( efootb4 )
PORT_START("IN.0") // R0
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY // 1
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY // 2
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY // 3
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY // 4
PORT_START("IN.1") // R1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) 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_DOWN ) PORT_COCKTAIL PORT_16WAY
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_16WAY // 1
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_16WAY // 2
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_16WAY // 3
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_16WAY // 4
PORT_START("IN.2") // R2
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Run")
@@ -1723,8 +1726,7 @@ static MACHINE_CONFIG_START( efootb4, efootb4_state )
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(efootb4_state, write_o))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
-// MCFG_DEFAULT_LAYOUT(layout_efootb4)
- MCFG_DEFAULT_LAYOUT(layout_hh_tms1k_test)
+ MCFG_DEFAULT_LAYOUT(layout_efootb4)
/* no video! */
@@ -1744,6 +1746,18 @@ MACHINE_CONFIG_END
* TMS1100 6010 MP1218 (die also labeled MP1218)
* 4 7seg LEDs, and other LEDs behind bezel, 1bit sound
+ lamp translation table: led zz from game PCB = MESS lampyx:
+
+ 11 = lamp90 21 = lamp91 31 = lamp92 41 = lamp93 51 = lamp95
+ 12 = lamp80 22 = lamp81 32 = lamp82 42 = lamp83 52 = lamp85
+ 13 = lamp70 23 = lamp71 33 = lamp72 43 = lamp73 53 = lamp84
+ 14 = lamp60 24 = lamp61 34 = lamp62 44 = lamp63 54 = lamp75
+ 15 = lamp50 25 = lamp51 35 = lamp52 45 = lamp53 55 = lamp74
+ 16 = lamp40 26 = lamp41 36 = lamp42 46 = lamp43 56 = lamp65
+
+ A = lamp94
+ B = lamp64
+
***************************************************************************/
class ebaskb2_state : public hh_tms1k_state
@@ -1837,8 +1851,7 @@ static MACHINE_CONFIG_START( ebaskb2, ebaskb2_state )
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ebaskb2_state, write_o))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
-// MCFG_DEFAULT_LAYOUT(layout_ebaskb2)
- MCFG_DEFAULT_LAYOUT(layout_hh_tms1k_test)
+ MCFG_DEFAULT_LAYOUT(layout_ebaskb2)
/* no video! */
@@ -4006,23 +4019,23 @@ MACHINE_CONFIG_END
lamp translation table: led zz from game PCB = MESS lampyx:
- 00 = - 10 = lamp25 20 = lamp44
- 01 = lamp27 11 = lamp35 21 = lamp53
- 02 = lamp37 12 = lamp45 22 = lamp42
- 03 = lamp47 13 = lamp55
- 04 = lamp57 14 = lamp54
- 05 = lamp26 15 = lamp33
- 06 = lamp36 16 = lamp43
- 07 = lamp46 17 = lamp23
- 08 = lamp56 18 = lamp34
- 09 = lamp24 19 = lamp32
+ 00 = - 10 = lamp50 20 = lamp42
+ 01 = lamp70 11 = lamp51 21 = lamp33
+ 02 = lamp71 12 = lamp52 22 = lamp22
+ 03 = lamp72 13 = lamp53
+ 04 = lamp73 14 = lamp43
+ 05 = lamp60 15 = lamp31
+ 06 = lamp61 16 = lamp32
+ 07 = lamp62 17 = lamp30
+ 08 = lamp63 18 = lamp41
+ 09 = lamp40 19 = lamp21
the 7seg panel is lamp0x and lamp1x(aka digit0/1), and the
8(2*4) * 3 rectangular leds panel, where x=0,1,2,3:
- lamp7x lamp6x
- lamp9x lamp8x
- lamp11x lamp10x
+ lamp9x lamp11x
+ lamp8x lamp13x
+ lamp10x lamp12x
***************************************************************************/
@@ -4061,16 +4074,16 @@ void tbreakup_state::prepare_display()
m_display_segmask[y] = 0x7f;
m_display_state[y] = (m_r >> y & 1) ? (m_o & 0x7f) : 0;
}
-
- // 22 round leds from expander port 7 and O2-O7
- for (int y = 0; y < 4; y++)
- m_display_state[y+2] = (m_exp_port[6] >> y & 1) ? (m_o & 0xfc) : 0;
+
+ // 22 round leds from O2-O7 and expander port 7
+ for (int y = 2; y < 8; y++)
+ m_display_state[y] = (m_o >> y & 1) ? m_exp_port[6] : 0;
// 24 rectangular leds from expander ports 1-6 (not strobed)
for (int y = 0; y < 6; y++)
- m_display_state[y+6] = m_exp_port[y];
-
- set_display_size(8, 12);
+ m_display_state[y+8] = m_exp_port[y];
+
+ set_display_size(8, 14);
display_update();
}
@@ -4078,7 +4091,6 @@ WRITE8_MEMBER(tbreakup_state::expander_w)
{
// TMS1025 port 1-7 data
m_exp_port[offset] = data;
- prepare_display();
}
WRITE16_MEMBER(tbreakup_state::write_r)
@@ -4088,7 +4100,7 @@ WRITE16_MEMBER(tbreakup_state::write_r)
// R7,R8: input mux
m_inp_mux = data >> 7 & 3;
-
+
// R3-R5: TMS1025 port S
// R2: TMS1025 STD pin
m_expander->write_s(space, 0, data >> 3 & 7);
@@ -4103,7 +4115,7 @@ WRITE16_MEMBER(tbreakup_state::write_o)
{
// O0-O3: TMS1025 port H
m_expander->write_h(space, 0, data & 0xf);
-
+
// O0-O7: led state
m_o = data;
prepare_display();
@@ -4146,7 +4158,7 @@ INPUT_CHANGED_MEMBER(tbreakup_state::skill_switch)
void tbreakup_state::set_clock()
{
// MCU clock is from an analog circuit with resistor of 73K, PRO2 adds 100K
- m_maincpu->set_unscaled_clock((m_inp_matrix[3]->read() & 1) ? 400000 : 350000);
+ m_maincpu->set_unscaled_clock((m_inp_matrix[3]->read() & 1) ? 500000 : 325000);
}
void tbreakup_state::machine_reset()
@@ -4167,11 +4179,11 @@ void tbreakup_state::machine_start()
static MACHINE_CONFIG_START( tbreakup, tbreakup_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1040, 400000) // see set_clock
+ MCFG_CPU_ADD("maincpu", TMS1040, 325000) // see set_clock
MCFG_TMS1XXX_READ_K_CB(READ8(tbreakup_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tbreakup_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tbreakup_state, write_o))
-
+
MCFG_DEVICE_ADD("expander", TMS1025, 0)
MCFG_TMS1024_WRITE_PORT_CB(1, WRITE8(tbreakup_state, expander_w))
MCFG_TMS1024_WRITE_PORT_CB(2, WRITE8(tbreakup_state, expander_w))
@@ -4182,8 +4194,7 @@ static MACHINE_CONFIG_START( tbreakup, tbreakup_state )
MCFG_TMS1024_WRITE_PORT_CB(7, WRITE8(tbreakup_state, expander_w))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
-// MCFG_DEFAULT_LAYOUT(layout_tbreakup)
- MCFG_DEFAULT_LAYOUT(layout_hh_tms1k_test)
+ MCFG_DEFAULT_LAYOUT(layout_tbreakup)
/* no video! */
@@ -4307,7 +4318,7 @@ ROM_START( efootb4 )
ROM_LOAD( "6009_mp7551", 0x0000, 0x1000, CRC(54fa7244) SHA1(4d16bd825c4a2db76ca8a263c373ade15c20e270) )
ROM_REGION( 867, "maincpu:mpla", 0 )
- ROM_LOAD( "tms1400_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) )
+ ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) )
ROM_REGION( 557, "maincpu:opla", 0 )
ROM_LOAD( "tms1400_efootb4_output.pla", 0, 557, CRC(5c87c753) SHA1(bde9d4aa1e57a718affd969475c0a1edcf60f444) )
ROM_END
@@ -4351,7 +4362,7 @@ ROM_START( gjackpot )
ROM_LOAD( "mpf553", 0x0000, 0x1000, CRC(f45fd008) SHA1(8d5d6407a8a031a833ceedfb931f5c9d2725ecd0) )
ROM_REGION( 867, "maincpu:mpla", 0 )
- ROM_LOAD( "tms1400_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) )
+ ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) )
ROM_REGION( 557, "maincpu:opla", 0 )
ROM_LOAD( "tms1400_gjackpot_output.pla", 0, 557, CRC(50e471a7) SHA1(9d862cb9f51a563882b62662c5bfe61b52e3df00) )
ROM_END
@@ -4398,7 +4409,7 @@ ROM_START( astro )
ROM_LOAD( "mp1133", 0x0000, 0x1000, CRC(bc21109c) SHA1(05a433cce587d5c0c2d28b5fda5f0853ea6726bf) )
ROM_REGION( 867, "maincpu:mpla", 0 )
- ROM_LOAD( "tms1400_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) )
+ ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) )
ROM_REGION( 557, "maincpu:opla", 0 )
ROM_LOAD( "tms1400_astro_output.pla", 0, 557, CRC(eb08957e) SHA1(62ae0d13a1eaafb34f1b27d7df51441b400ccd56) )
ROM_END
@@ -4575,8 +4586,8 @@ CONS( 1979, ebball, 0, 0, ebball, ebball, driver_device, 0, "Ent
CONS( 1979, ebball2, 0, 0, ebball2, ebball2, driver_device, 0, "Entex", "Electronic Baseball 2 (Entex)", GAME_SUPPORTS_SAVE )
CONS( 1980, ebball3, 0, 0, ebball3, ebball3, driver_device, 0, "Entex", "Electronic Baseball 3 (Entex)", GAME_SUPPORTS_SAVE )
CONS( 1980, einvader, 0, 0, einvader, einvader, driver_device, 0, "Entex", "Space Invader (Entex, TMS1100)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
-CONS( 1980, efootb4 , 0, 0, efootb4, efootb4, driver_device, 0, "Entex", "Color Football 4 (Entex)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
-CONS( 1980, ebaskb2 , 0, 0, ebaskb2, ebaskb2, driver_device, 0, "Entex", "Electronic Basketball 2 (Entex)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
+CONS( 1980, efootb4 , 0, 0, efootb4, efootb4, driver_device, 0, "Entex", "Color Football 4 (Entex)", GAME_SUPPORTS_SAVE )
+CONS( 1980, ebaskb2 , 0, 0, ebaskb2, ebaskb2, driver_device, 0, "Entex", "Electronic Basketball 2 (Entex)", GAME_SUPPORTS_SAVE )
CONS( 1980, raisedvl, 0, 0, raisedvl, raisedvl, driver_device, 0, "Entex", "Raise The Devil", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1979, gpoker, 0, 0, gpoker, gpoker, driver_device, 0, "Gakken", "Poker (Gakken, 1979 version)", GAME_SUPPORTS_SAVE )
@@ -4585,7 +4596,7 @@ CONS( 1980, gjackpot, 0, 0, gjackpot, gjackpot, driver_device, 0, "Gak
CONS( 1979, elecdet, 0, 0, elecdet, elecdet, driver_device, 0, "Ideal", "Electronic Detective", GAME_SUPPORTS_SAVE ) // ***
CONS( 1979, starwbc, 0, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command", GAME_SUPPORTS_SAVE )
-CONS( 1979, starwbcp, starwbc, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command (prototype)", GAME_SUPPORTS_SAVE )
+CONS( 1979, starwbcp, starwbc, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command (patent)", GAME_SUPPORTS_SAVE )
COMP( 1979, astro, 0, 0, astro, astro, driver_device, 0, "Kosmos", "Astro", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
@@ -4597,14 +4608,14 @@ CONS( 1979, bigtrak, 0, 0, bigtrak, bigtrak, driver_device, 0, "Mil
CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) // ***
CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin - The Electronic Wizard", GAME_SUPPORTS_SAVE )
CONS( 1979, stopthie, 0, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", GAME_SUPPORTS_SAVE ) // ***
-CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (prototype)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
+CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (patent)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
CONS( 1980, bankshot, 0, 0, bankshot, bankshot, driver_device, 0, "Parker Brothers", "Bank Shot - Electronic Pool", GAME_SUPPORTS_SAVE )
CONS( 1980, splitsec, 0, 0, splitsec, splitsec, driver_device, 0, "Parker Brothers", "Split Second", GAME_SUPPORTS_SAVE )
CONS( 1982, mmerlin, 0, 0, mmerlin, mmerlin, driver_device, 0, "Parker Brothers", "Master Merlin", GAME_SUPPORTS_SAVE )
CONS( 1981, tandy12, 0, 0, tandy12, tandy12, driver_device, 0, "Tandy Radio Shack", "Tandy-12: Computerized Arcade", GAME_SUPPORTS_SAVE ) // some of the minigames: ***
-CONS( 1979, tbreakup, 0, 0, tbreakup, tbreakup, driver_device, 0, "Tomy", "Break Up (Tomy)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
+CONS( 1979, tbreakup, 0, 0, tbreakup, tbreakup, driver_device, 0, "Tomy", "Break Up (Tomy)", GAME_SUPPORTS_SAVE )
// ***: As far as MESS 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.