New working machine added

-------------
TSI Speech+ [hap, Sean Riddle, Lord Nightmare]
This commit is contained in:
hap 2016-09-06 21:43:03 +02:00
parent 261f6fbd5c
commit e927784a90
3 changed files with 206 additions and 2 deletions

View File

@ -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<s14001a_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 )

View File

@ -0,0 +1,40 @@
<?xml version="1.0"?>
<mamelayout version="2">
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.15" blue="0.08" /></led7seg>
</element>
<view name="Internal Layout">
<bounds left="0" right="90" top="0" bottom="15" />
<bezel name="digit8" element="digit">
<bounds x="0" y="0" width="10" height="15" />
</bezel>
<bezel name="digit7" element="digit">
<bounds x="10" y="0" width="10" height="15" />
</bezel>
<bezel name="digit6" element="digit">
<bounds x="20" y="0" width="10" height="15" />
</bezel>
<bezel name="digit5" element="digit">
<bounds x="30" y="0" width="10" height="15" />
</bezel>
<bezel name="digit4" element="digit">
<bounds x="40" y="0" width="10" height="15" />
</bezel>
<bezel name="digit3" element="digit">
<bounds x="50" y="0" width="10" height="15" />
</bezel>
<bezel name="digit2" element="digit">
<bounds x="60" y="0" width="10" height="15" />
</bezel>
<bezel name="digit1" element="digit">
<bounds x="70" y="0" width="10" height="15" />
</bezel>
<bezel name="digit0" element="digit">
<bounds x="80" y="0" width="10" height="15" />
</bezel>
</view>
</mamelayout>

View File

@ -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