mirror of
https://github.com/holub/mame
synced 2025-04-26 18:23:08 +03:00
New working machine added
------------- TSI Speech+ [hap, Sean Riddle, Lord Nightmare]
This commit is contained in:
parent
261f6fbd5c
commit
e927784a90
@ -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 )
|
||||
|
||||
|
40
src/mame/layout/speechp.lay
Normal file
40
src/mame/layout/speechp.lay
Normal 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>
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user