diff options
Diffstat (limited to 'src/mess/drivers/hh_tms1k.c')
-rw-r--r-- | src/mess/drivers/hh_tms1k.c | 115 |
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. |