diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index a3697da82c5..48d9d2e332b 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -51,6 +51,7 @@ @MP2726 TMS1040 1979, Tomy Break Up *MP2788 TMS1040? 1980, Bandai Flight Time (? note: VFD-capable) @MP3005 TMS1730 1989, Tiger Copy Cat (model 7-522) + *MP3201 TMS1000 1977, Milton Bradley Electronic Battleship (1977, 1st version) @MP3208 TMS1000 1977, Milton Bradley Electronic Battleship (1977, model 4750A or B) @MP3226 TMS1000 1978, Milton Bradley Simon (model 4850) *MP3232 TMS1000 1979, Fonas 2-Player Baseball (no "MP" on chip label) @@ -101,7 +102,7 @@ inconsistent: - *TMC1007 TMS1000 1976, TSI Speech+ (S14002-A) + @TMS1007 TMS1000 1976, TSI Speech+ (S14002-A) @CD7282SL TMS1100 1981, Tandy Radio Shack Tandy-12 (serial is similar to TI Speak & Spell series?) *M95041 ? 1983, Tsukuda Game Pachinko (? note: 40-pin, VFD-capable) @@ -125,6 +126,7 @@ #include "machine/tms1024.h" #include "sound/beep.h" #include "sound/sn76477.h" +#include "sound/s14001a.h" // internal artwork #include "amaztron.lh" // clickable @@ -159,6 +161,7 @@ #include "mmerlin.lh" // clickable #include "raisedvl.lh" #include "simon.lh" // clickable +#include "speechp.lh" #include "splitsec.lh" #include "ssimon.lh" // clickable #include "ssports4.lh" @@ -3729,7 +3732,8 @@ MACHINE_CONFIG_END This is a 2-player electronic board game. It still needs game pieces like the original Battleship board game. - It went through 3 hardware revisions: + It went through 4 hardware revisions: + 1977: TODO 1977: model 4750A or B, see notes above 1979: model 4750C: cost-reduced single chip design, lesser quality game board. The chip is assumed to be custom, no MCU: 28-pin DIP, label 4750, SCUS 0462 @@ -5254,6 +5258,149 @@ MACHINE_CONFIG_END +/*************************************************************************** + + TSI Speech+ + * TMS1000 MCU, label TMS1007NL (die label 1000B, 1007A) + * TSI S14001A speech chip, GI S14007-A 2KB maskrom for samples + * 9-digit 7seg LED display + + This is a speaking calculator for the blind, the instructions that came + with it were on audio cassette. It was also released in 1978 by APH + (American Printing House for the Blind). + +***************************************************************************/ + +class speechp_state : public hh_tms1k_state +{ +public: + speechp_state(const machine_config &mconfig, device_type type, const char *tag) + : hh_tms1k_state(mconfig, type, tag), + m_speech(*this, "speech") + { } + + required_device m_speech; + + void prepare_display(); + virtual DECLARE_WRITE16_MEMBER(write_r); + virtual DECLARE_WRITE16_MEMBER(write_o); + virtual DECLARE_READ8_MEMBER(read_k); +}; + +// handlers + +void speechp_state::prepare_display() +{ + set_display_segmask(0x1ff, 0xff); + display_matrix(8, 9, m_o, m_r); +} + +WRITE16_MEMBER(speechp_state::write_r) +{ + // R5-R9: TSI C0-C5 + m_speech->data_w(space, 0, data >> 5 & 0x3f); + + // R10: TSI START line + m_speech->start_w(data >> 10 & 1); + + // R0-R9: input mux + m_inp_mux = data & 0x3ff; + + // R0-R8: select digit + m_r = data; + prepare_display(); +} + +WRITE16_MEMBER(speechp_state::write_o) +{ + // O0-O7: digit segments + m_o = data; + prepare_display(); +} + +READ8_MEMBER(speechp_state::read_k) +{ + // K1-K4: multiplexed inputs + return read_inputs(10) & 7; +} + + +// config + +static INPUT_PORTS_START( speechp ) + PORT_START("IN.0") // R0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("S") // Swap + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") + + PORT_START("IN.1") // R1 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_DEL) PORT_NAME("C") // Clear + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-") + + PORT_START("IN.2") // R2 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=") + + PORT_START("IN.3") // R3 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("%") + + PORT_START("IN.4") // R4 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Speak") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.5") // R5 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.6") // R6 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE) + + PORT_START("IN.7") // R7 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("M") // Memory + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.8") // R8 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME(UTF8_SQUAREROOT) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.9") // R9 + PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_CONFNAME( 0x04, 0x00, "Verbose" ) + PORT_CONFSETTING( 0x04, DEF_STR( Off ) ) + PORT_CONFSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static MACHINE_CONFIG_START( speechp, speechp_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS1000, 400000) // approximation - RC osc. R=39K, C=47pf + MCFG_TMS1XXX_READ_K_CB(READ8(speechp_state, read_k)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(speechp_state, write_r)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(speechp_state, write_o)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_speechp) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speech", S14001A, 25000) // approximation + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) +MACHINE_CONFIG_END + + + + + /*************************************************************************** Tiger Electronics Copy Cat (model 7-520) @@ -6350,6 +6497,20 @@ ROM_START( tandy12 ) ROM_END +ROM_START( speechp ) + ROM_REGION( 0x0400, "maincpu", 0 ) + ROM_LOAD( "tms1007nl", 0x0000, 0x0400, CRC(c2669d5c) SHA1(7943d6f39508a9a82bc21e4fe34a5b9f86e3add2) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1000_speechp_micro.pla", 0, 867, CRC(4becec19) SHA1(3c8a9be0f00c88c81f378b76886c39b10304f330) ) + ROM_REGION( 365, "maincpu:opla", 0 ) + ROM_LOAD( "tms1000_speechp_output.pla", 0, 365, CRC(e1b4197f) SHA1(258f4276a9f15c9bfbfa58df2f7202aed1542fdc) ) + + ROM_REGION( 0x0800, "speech", 0 ) + ROM_LOAD("s14007-a", 0x0000, 0x0800, CRC(543b46d4) SHA1(99daf7fe3354c378b4bd883840c9bbd22b22ebe7) ) +ROM_END + + ROM_START( copycat ) ROM_REGION( 0x0400, "maincpu", 0 ) ROM_LOAD( "mp0919", 0x0000, 0x0400, CRC(92a21299) SHA1(16daadb8dbf53aaab8a71833017b4a578d035d6d) ) @@ -6457,6 +6618,8 @@ CONS( 1982, lostreas, 0, 0, lostreas, lostreas, driver_device, 0, "Par CONS( 1981, tandy12, 0, 0, tandy12, tandy12, driver_device, 0, "Tandy Radio Shack", "Tandy-12: Computerized Arcade", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // some of the minigames: *** +COMP( 1976, speechp, 0, 0, speechp, speechp, driver_device, 0, "Telesensory Systems, Inc.", "Speech+", MACHINE_SUPPORTS_SAVE ) + CONS( 1979, copycat, 0, 0, copycat, copycat, driver_device, 0, "Tiger Electronics", "Copy Cat (model 7-520)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1989, copycatm2, copycat, 0, copycatm2, copycatm2, driver_device, 0, "Tiger Electronics", "Copy Cat (model 7-522)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/layout/speechp.lay b/src/mame/layout/speechp.lay new file mode 100644 index 00000000000..4bac9477cfb --- /dev/null +++ b/src/mame/layout/speechp.lay @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index bf054ecb594..779fc80ae85 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -14165,6 +14165,7 @@ mmerlin // Parker Bros phpball // Tomy raisedvl // Entex simon // Milton Bradley +speechp // TSI splitsec // Parker Bros ssimon // Milton Bradley ssports4 // US Games