diff options
Diffstat (limited to 'src/mame/drivers/hh_tms1k.cpp')
-rw-r--r-- | src/mame/drivers/hh_tms1k.cpp | 148 |
1 files changed, 134 insertions, 14 deletions
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index 8af983a1c31..cb5708dae9e 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -8,6 +8,7 @@ part of a series is (or will be) in its own driver, see: - eva: Chrysler EVA-11 (and EVA-24) - microvsn: Milton Bradley MicroVision + - sag: Entex Select-A-Game Machine (contd.) hh_tms1k child drivers: - tispellb: TI Spelling B series gen. 1 @@ -72,7 +73,7 @@ @MP3208 TMS1000 1977, Milton Bradley Electronic Battleship (1977, model 4750B) @MP3226 TMS1000 1978, Milton Bradley Simon (Rev A) *MP3232 TMS1000 1979, Fonas 2-Player Baseball (no "MP" on chip label) - *MP3260 TMS1000 1979, Electroplay Quickfire + @MP3260 TMS1000 1979, Electroplay Quickfire @MP3300 TMS1000 1979, Milton Bradley Simon (Rev F) @MP3301A TMS1000 1979, Milton Bradley Big Trak @MP3320A TMS1000 1979, Coleco Head to Head: Electronic Basketball @@ -124,7 +125,7 @@ @MP7351 TMS1400 1982, Parker Brothers Master Merlin @MP7551 TMS1670 1980, Entex Color Football 4 (6009) @MPF553 TMS1670 1980, Gakken/Entex Jackpot: Gin Rummy & Black Jack (6008) (note: assume F to be a misprint) - *MP7573 TMS1670? 1981, Entex Select-a-Game cartridge: Football 4 (? note: 40-pin, VFD-capable) + MP7573 TMS1670 1981, Entex Select-A-Game cartridge: Football 4 -> sag.cpp *M95041 ? 1983, Tsukuda Game Pachinko (? note: 40-pin, VFD-capable) inconsistent: @@ -223,6 +224,7 @@ #include "mmerlin.lh" // clickable #include "monkeysee.lh" #include "phpball.lh" +#include "qfire.lh" // clickable #include "quizwizc.lh" #include "raisedvl.lh" #include "simon.lh" // clickable @@ -2282,7 +2284,7 @@ ROM_START( quizwizc ) ROM_LOAD( "m32001", 0x0000, 0x0400, CRC(053657eb) SHA1(38c84f7416f79aa679f434a3d35df54cd9aa528a) ) ROM_REGION( 867, "maincpu:mpla", 0 ) - ROM_LOAD( "tms1000_common3_micro.pla", 0, 867, CRC(80912d0a) SHA1(7ae5293ed4d93f5b7a64d43fe30c3639f39fbe5a) ) + ROM_LOAD( "tms1000_common4_micro.pla", 0, 867, CRC(80912d0a) SHA1(7ae5293ed4d93f5b7a64d43fe30c3639f39fbe5a) ) ROM_REGION( 365, "maincpu:opla", 0 ) ROM_LOAD( "tms1000_quizwizc_output.pla", 0, 365, CRC(475b7053) SHA1(8f61bf736eb41d7029a6b165cc0a184ba0a70a2a) ) ROM_END @@ -3148,6 +3150,122 @@ ROM_END /*************************************************************************** + Electroplay Quickfire + * TMS1000NLL MP3260 (die label same) + * 2 7seg LEDs, 5 lamps, 3 lightsensors, lightgun + + To play it in MAME, either use the clickable artwork with -mouse, or set + button 1 to "Z or X or C" and each lightsensor to one of those keys. + Although the game seems mostly playable without having to use the gun trigger + +***************************************************************************/ + +class qfire_state : public hh_tms1k_state +{ +public: + qfire_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_tms1k_state(mconfig, type, tag) + { } + + DECLARE_WRITE16_MEMBER(write_r); + DECLARE_WRITE16_MEMBER(write_o); + DECLARE_READ8_MEMBER(read_k); + void qfire(machine_config &config); +}; + +// handlers + +WRITE16_MEMBER(qfire_state::write_r) +{ + // R1,R2,R5: input mux + m_inp_mux = (data >> 1 & 3) | (data >> 3 & 4); + + // R3,R4,R6-R8: leds (direct) + m_display->write_row(2, (data >> 3 & 3) | (data >> 4 & 0x1c)); + m_display->update(); + + // R9: speaker out + m_speaker->level_w(data >> 9 & 1); +} + +WRITE16_MEMBER(qfire_state::write_o) +{ + // O0: 1st digit "1" + // O1-O7: 2nd digit segments + m_display->write_row(0, (data & 1) ? 6 : 0); + m_display->write_row(1, data >> 1 & 0x7f); + m_display->update(); +} + +READ8_MEMBER(qfire_state::read_k) +{ + // K: multiplexed inputs + return read_inputs(3); +} + +// config + +static INPUT_PORTS_START( qfire ) + PORT_START("IN.0") // R1 + PORT_CONFNAME( 0x0f, 0x00, "Game" ) + PORT_CONFSETTING( 0x00, "1" ) + PORT_CONFSETTING( 0x08, "2" ) + PORT_CONFSETTING( 0x04, "3" ) + PORT_CONFSETTING( 0x02, "4" ) + PORT_CONFSETTING( 0x01, "5" ) + PORT_CONFSETTING( 0x06, "6" ) + + PORT_START("IN.1") // R2 + PORT_CONFNAME( 0x07, 0x04, DEF_STR( Difficulty ) ) + PORT_CONFSETTING( 0x04, "A" ) + PORT_CONFSETTING( 0x02, "B" ) + PORT_CONFSETTING( 0x01, "C" ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.2") // R5 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Lightsensor 1") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Lightsensor 2") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Lightsensor 3") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // lightgun trigger, also turns on lightgun lamp +INPUT_PORTS_END + +void qfire_state::qfire(machine_config &config) +{ + /* basic machine hardware */ + TMS1000(config, m_maincpu, 375000); // approximation - RC osc. R=39K, C=47pF + m_maincpu->k().set(FUNC(qfire_state::read_k)); + m_maincpu->r().set(FUNC(qfire_state::write_r)); + m_maincpu->o().set(FUNC(qfire_state::write_o)); + + /* video hardware */ + PWM_DISPLAY(config, m_display).set_size(3, 7); + m_display->set_segmask(3, 0x7f); + config.set_default_layout(layout_qfire); + + /* sound hardware */ + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker); + m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25); +} + +// roms + +ROM_START( qfire ) + ROM_REGION( 0x0400, "maincpu", 0 ) + ROM_LOAD( "mp3260", 0x0000, 0x0400, CRC(f6e28376) SHA1(6129584c55a1629b458694cdc97edccb77ab00ba) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1000_common3_micro.pla", 0, 867, CRC(52f7c1f1) SHA1(dbc2634dcb98eac173ad0209df487cad413d08a5) ) + ROM_REGION( 365, "maincpu:opla", 0 ) + ROM_LOAD( "tms1000_qfire_output.pla", 0, 365, CRC(8f7668a9) SHA1(c8faeff0f88bfea8f032ce5bc583f049e8930c11) ) +ROM_END + + + + + +/*************************************************************************** + Entex (Electronic) Soccer * TMS1000NL MP0158 (die label same) * 2 7seg LEDs, 30 other LEDs, 1-bit sound @@ -5287,7 +5405,7 @@ WRITE16_MEMBER(ginv2000_state::write_r) // R11,R12: TMS1024 S1,S0 (S2 forced high) // R13: TMS1024 STD - m_expander->write_s(space, 0, (data >> 12 & 1) | (data >> 10 & 2) | 4); + m_expander->write_s((data >> 12 & 1) | (data >> 10 & 2) | 4); m_expander->write_std(data >> 13 & 1); // R1-R10: VFD grid @@ -5298,7 +5416,7 @@ WRITE16_MEMBER(ginv2000_state::write_r) WRITE16_MEMBER(ginv2000_state::write_o) { // O4-O7: TMS1024 H1-H4 - m_expander->write_h(space, 0, data >> 4 & 0xf); + m_expander->write_h(data >> 4 & 0xf); } READ8_MEMBER(ginv2000_state::read_k) @@ -7006,7 +7124,7 @@ ROM_START( simon ) ROM_LOAD( "tms1000.u1", 0x0000, 0x0400, CRC(9961719d) SHA1(35dddb018a8a2b31f377ab49c1f0cb76951b81c0) ) ROM_REGION( 867, "maincpu:mpla", 0 ) - ROM_LOAD( "tms1000_simon_micro.pla", 0, 867, CRC(52f7c1f1) SHA1(dbc2634dcb98eac173ad0209df487cad413d08a5) ) + ROM_LOAD( "tms1000_common3_micro.pla", 0, 867, CRC(52f7c1f1) SHA1(dbc2634dcb98eac173ad0209df487cad413d08a5) ) ROM_REGION( 365, "maincpu:opla", 0 ) // unused ROM_LOAD( "tms1000_simon_output.pla", 0, 365, CRC(2943c71b) SHA1(bd5bb55c57e7ba27e49c645937ec1d4e67506601) ) ROM_END @@ -7016,7 +7134,7 @@ ROM_START( simonf ) ROM_LOAD( "mp3300", 0x0000, 0x0400, CRC(b9fcf93a) SHA1(45960e4242a08495f2a99fc5d44728eabd93cd9f) ) ROM_REGION( 867, "maincpu:mpla", 0 ) - ROM_LOAD( "tms1000_simon_micro.pla", 0, 867, CRC(52f7c1f1) SHA1(dbc2634dcb98eac173ad0209df487cad413d08a5) ) + ROM_LOAD( "tms1000_common3_micro.pla", 0, 867, CRC(52f7c1f1) SHA1(dbc2634dcb98eac173ad0209df487cad413d08a5) ) ROM_REGION( 365, "maincpu:opla", 0 ) // unused ROM_LOAD( "tms1000_simon_output.pla", 0, 365, CRC(2943c71b) SHA1(bd5bb55c57e7ba27e49c645937ec1d4e67506601) ) ROM_END @@ -7369,7 +7487,7 @@ ROM_START( bigtrak ) ROM_LOAD( "mp3301a", 0x0000, 0x0400, CRC(1351bcdd) SHA1(68865389c25b541c09a742be61f8fb6488134d4e) ) ROM_REGION( 867, "maincpu:mpla", 0 ) - ROM_LOAD( "tms1000_common3_micro.pla", 0, 867, CRC(80912d0a) SHA1(7ae5293ed4d93f5b7a64d43fe30c3639f39fbe5a) ) + ROM_LOAD( "tms1000_common4_micro.pla", 0, 867, CRC(80912d0a) SHA1(7ae5293ed4d93f5b7a64d43fe30c3639f39fbe5a) ) ROM_REGION( 365, "maincpu:opla", 0 ) ROM_LOAD( "tms1000_bigtrak_output.pla", 0, 365, CRC(63be45f6) SHA1(918e38a223152db883c1a6f7acf56e87d7074734) ) ROM_END @@ -11454,7 +11572,7 @@ INPUT_PORTS_END void ditto_state::ditto(machine_config &config) { /* basic machine hardware */ - TMS1730(config, m_maincpu, 275000); // approximation - RC osc. R=100K, C=47pF + TMS1700(config, m_maincpu, 275000); // approximation - RC osc. R=100K, C=47pF m_maincpu->k().set_ioport("IN.0"); m_maincpu->r().set(FUNC(ditto_state::write_r)); m_maincpu->o().set(FUNC(ditto_state::write_o)); @@ -11732,7 +11850,7 @@ WRITE16_MEMBER(tbreakup_state::write_r) // R3-R5: TMS1025 port S // R2: TMS1025 STD pin - m_expander->write_s(space, 0, data >> 3 & 7); + m_expander->write_s(data >> 3 & 7); m_expander->write_std(data >> 2 & 1); // R0,R1: select digit @@ -11743,7 +11861,7 @@ WRITE16_MEMBER(tbreakup_state::write_r) WRITE16_MEMBER(tbreakup_state::write_o) { // O0-O3: TMS1025 port H - m_expander->write_h(space, 0, data & 0xf); + m_expander->write_h(data & 0xf); // O0-O7: led state m_o = data; @@ -12120,7 +12238,7 @@ public: void update_display(); DECLARE_WRITE16_MEMBER(write_r); DECLARE_WRITE16_MEMBER(write_o); - DECLARE_READ8_MEMBER(read_k); + u8 read_k(); void xl25(machine_config &config); protected: @@ -12138,7 +12256,7 @@ void xl25_state::machine_reset() void xl25_state::update_halt() { // O5+K4 go to HALT pin (used when pressing store/recall button) - bool halt = !((m_o & 0x20) || (read_k(machine().dummy_space(), 0) & 4)); + bool halt = !((m_o & 0x20) || (read_k() & 4)); m_maincpu->set_input_line(INPUT_LINE_HALT, halt ? ASSERT_LINE : CLEAR_LINE); } @@ -12168,7 +12286,7 @@ WRITE16_MEMBER(xl25_state::write_o) update_halt(); } -READ8_MEMBER(xl25_state::read_k) +u8 xl25_state::read_k() { // K: multiplexed inputs // K4 also goes to MCU halt @@ -12306,6 +12424,8 @@ CONS( 1979, cnfball, 0, 0, cnfball, cnfball, cnfball_state, emp CONS( 1979, cnfball2, 0, 0, cnfball2, cnfball2, cnfball2_state, empty_init, "Conic", "Electronic Football II (Conic)", MACHINE_SUPPORTS_SAVE ) CONS( 1979, eleciq, 0, 0, eleciq, eleciq, eleciq_state, empty_init, "Conic", "Electronic I.Q.", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1979, qfire, 0, 0, qfire, qfire, qfire_state, empty_init, "Electroplay", "Quickfire", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + CONS( 1979, esoccer, 0, 0, esoccer, esoccer, esoccer_state, empty_init, "Entex", "Electronic Soccer (Entex)", MACHINE_SUPPORTS_SAVE ) CONS( 1979, ebball, 0, 0, ebball, ebball, ebball_state, empty_init, "Entex", "Electronic Baseball (Entex)", MACHINE_SUPPORTS_SAVE ) CONS( 1979, ebball2, 0, 0, ebball2, ebball2, ebball2_state, empty_init, "Entex", "Electronic Baseball 2 (Entex)", MACHINE_SUPPORTS_SAVE ) |