summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2017-05-26 17:35:04 +0200
committer hap <happppp@users.noreply.github.com>2017-05-26 17:35:04 +0200
commit2d5bb2dc20176f765a5fb7f1e59ff4e27a41e34e (patch)
tree970d01003a218697f02f1c63cc3434c58b747eb2
parent763ea8412b5754a18fa04f1e9d8ad60e6a08c4ae (diff)
New working clone added
---------- Speak & Spell (Spanish, prototype) [hap, Sean Riddle, David Viens]
-rw-r--r--src/devices/sound/tms5110r.hxx2
-rw-r--r--src/lib/util/unicode.h2
-rw-r--r--src/mame/drivers/hh_tms1k.cpp3
-rw-r--r--src/mame/drivers/tispeak.cpp117
-rw-r--r--src/mame/layout/snread.lay (renamed from src/mame/layout/lantutor.lay)2
-rw-r--r--src/mame/layout/snspell.lay2
-rw-r--r--src/mame/layout/snspellsp.lay59
-rw-r--r--src/mame/mame.lst1
8 files changed, 168 insertions, 20 deletions
diff --git a/src/devices/sound/tms5110r.hxx b/src/devices/sound/tms5110r.hxx
index 9547427e86c..8f6bfa27a4b 100644
--- a/src/devices/sound/tms5110r.hxx
+++ b/src/devices/sound/tms5110r.hxx
@@ -53,7 +53,7 @@
VVVVVV VVVVV
T0280A 0281 = 1978 speak & spell, unknown difference to below, assumed same? uses old chirp
T0280B 0281A = 1979 speak & spell, also == TMS5100, uses old chirp
- ?????? ????? (no decap; likely 'T0280D 0281D') = 1980 speak & spell, 1981 speak & spell compact, changed energy table, otherwise same as above, uses old chirp
+ T0280F 0281D = 1980 speak & spell, 1981 speak & spell compact, changed energy table, otherwise same as above, uses old chirp
T0280F 2801A = 1980 speak & math, 1980 speak and read, uses old chirp
T0280F 2802 = touch and tell, language translator; uses a unique chirp rom.
?????? ????? = TMS5110
diff --git a/src/lib/util/unicode.h b/src/lib/util/unicode.h
index 189aa877d29..8a1180dcc92 100644
--- a/src/lib/util/unicode.h
+++ b/src/lib/util/unicode.h
@@ -60,12 +60,14 @@
#define o_UMLAUT "\xc3\xb6" /* small o with an umlaut */
#define u_UMLAUT "\xc3\xbc" /* small u with an umlaut */
#define e_ACUTE "\xc3\xa9" /* small e with an acute */
+#define n_TILDE "\xc3\xb1" /* small n with a tilde */
#define A_RING "\xc3\x85" /* capital A with a ring */
#define A_UMLAUT "\xc3\x84" /* capital A with an umlaut */
#define O_UMLAUT "\xc3\x96" /* capital O with an umlaut */
#define U_UMLAUT "\xc3\x9c" /* capital U with an umlaut */
#define E_ACUTE "\xc3\x89" /* capital E with an acute */
+#define N_TILDE "\xc3\x91" /* capital N with a tilde */
#define UTF8_LEFT "\xe2\x86\x90" /* cursor left */
#define UTF8_RIGHT "\xe2\x86\x92" /* cursor right */
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 9eff9992015..fd411b96e17 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -65,7 +65,8 @@
@MP3301A TMS1000 1979, Milton Bradley Big Trak
*MP3320A TMS1000 1979, Coleco Head to Head Basketball
@M32001 TMS1000 1981, Coleco Quiz Wiz Challenger (note: MP3398, MP3399, M3200x?)
- *M32018 TMS1000 1990, unknown device, decap/dump is available
+ *M32018 TMS1000 1990, unknown device (have decap/dump)
+ *M32045B TMS1000 1983, Chrysler Electronic Voice Alert (11-function) (have decap/dump)
@MP3403 TMS1100 1978, Marx Electronic Bowling
@MP3404 TMS1100 1978, Parker Brothers Merlin
@MP3405 TMS1100 1979, Coleco Amaze-A-Tron
diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp
index e17c4329115..9f2c101a98a 100644
--- a/src/mame/drivers/tispeak.cpp
+++ b/src/mame/drivers/tispeak.cpp
@@ -80,11 +80,11 @@ above expectations. TI continued to manufacture many products for this line.
- VFD: some seen with the one from Speak & Math(!)
- notes: this one has a dedicated voice actor
- Speak & Spell (Spanish), 1981
- - MCU: CD2701N2L*
+ Speak & Spell (Spanish, prototype), 1981
+ - MCU: CD2701N2L P (die label T0270D 2701)
- TMS51xx: TMC0281
- - VSM(1/2): 16KB? CD2319*
- - VSM(2/2): 16KB? CD2320*
+ - VSM(1/2): 16KB CD2319
+ - VSM(2/2): 16KB CD2320
- VFD: 8 digits with 14 segments, DP and accent mark
Speak & Spell (France) "La Dictee Magique", 1980
@@ -411,9 +411,10 @@ K28 modules:
// internal artwork
#include "k28m2.lh"
-#include "lantutor.lh"
#include "snmath.lh"
+#include "snread.lh"
#include "snspell.lh"
+#include "snspellsp.lh"
#include "tntell.lh" // keyboard overlay
// The master clock is a single stage RC oscillator into TMS5100 RCOSC:
@@ -810,7 +811,7 @@ static INPUT_PORTS_START( snspellfr ) // French button names
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Essaie")
PORT_MODIFY("IN.7")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Arr" e_ACUTE "t")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Arr" e_ACUTE "t") // -> auto_power_off
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_HOME) PORT_NAME("D" e_ACUTE "part")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_NAME("Rejoue")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_NAME("Repete")
@@ -833,7 +834,7 @@ static INPUT_PORTS_START( snspellit ) // Italian button names
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Controllo")
PORT_MODIFY("IN.7")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Stop")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Stop") // -> auto_power_off
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_HOME) PORT_NAME("Via")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_NAME("Ritorno")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_NAME("Replica")
@@ -847,6 +848,67 @@ static INPUT_PORTS_START( snspellit ) // Italian button names
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_PGUP) PORT_NAME("Scrivi") PORT_CHANGED_MEMBER(DEVICE_SELF, tispeak_state, power_button, (void *)true)
INPUT_PORTS_END
+static INPUT_PORTS_START( snspellsp ) // Spanish button names, different alphabet
+ PORT_START("IN.0") // R0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("CH")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
+
+ PORT_START("IN.1") // R1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H')
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I')
+
+ PORT_START("IN.2") // R2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("LL")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M')
+
+ PORT_START("IN.3") // R3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_NAME(N_TILDE)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P')
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
+
+ PORT_START("IN.4") // R4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("RR")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T')
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U')
+
+ PORT_START("IN.5") // R5
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Entra")
+
+ PORT_START("IN.6") // R6
+ PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.7") // R7
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_NAME("Acento")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_HOME) PORT_NAME("Listo")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_NAME("Programa")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("Borra")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_NAME("Repite")
+
+ PORT_START("IN.8") // Vss!
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_NAME("Otra Vez")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_NAME("Palabra Secreta")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_NAME("Dilo")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") // -> auto_power_off
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_PGUP) PORT_NAME("Deletrea/On") PORT_CHANGED_MEMBER(DEVICE_SELF, tispeak_state, power_button, (void *)true)
+INPUT_PORTS_END
+
static INPUT_PORTS_START( snmath )
PORT_START("IN.0") // R0
@@ -1235,6 +1297,12 @@ static MACHINE_CONFIG_DERIVED( sns_cd2801, snmath )
MCFG_SOFTWARE_LIST_ADD("cart_list", "snspell")
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( snspellit, sns_cd2801 )
+
+ /* basic machine hardware */
+ MCFG_DEFAULT_LAYOUT(layout_snmath)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( sns_tmc0281, sns_cd2801 )
/* sound hardware */
@@ -1242,6 +1310,12 @@ static MACHINE_CONFIG_DERIVED( sns_tmc0281, sns_cd2801 )
MCFG_FRAGMENT_ADD(tms5110_route)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( snspellsp, sns_tmc0281 )
+
+ /* basic machine hardware */
+ MCFG_DEFAULT_LAYOUT(layout_snspellsp)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( sns_tmc0281d, sns_cd2801 )
/* sound hardware */
@@ -1249,12 +1323,6 @@ static MACHINE_CONFIG_DERIVED( sns_tmc0281d, sns_cd2801 )
MCFG_FRAGMENT_ADD(tms5110_route)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( sns_cd2801_m, sns_cd2801 )
-
- /* basic machine hardware */
- MCFG_DEFAULT_LAYOUT(layout_snmath)
-MACHINE_CONFIG_END
-
static MACHINE_CONFIG_DERIVED( snread, snmath )
@@ -1262,7 +1330,7 @@ static MACHINE_CONFIG_DERIVED( snread, snmath )
MCFG_CPU_MODIFY("maincpu")
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tispeak_state, snspell_write_o))
- MCFG_DEFAULT_LAYOUT(layout_lantutor)
+ MCFG_DEFAULT_LAYOUT(layout_snread)
/* cartridge */
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "snread")
@@ -1280,7 +1348,7 @@ static MACHINE_CONFIG_DERIVED( lantutor, snmath )
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tispeak_state, snspell_write_o))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tispeak_state, lantutor_write_r))
- MCFG_DEFAULT_LAYOUT(layout_lantutor)
+ MCFG_DEFAULT_LAYOUT(layout_snread)
/* cartridge */
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "lantutor")
@@ -1500,6 +1568,22 @@ ROM_START( snspelljp )
ROM_LOAD( "cd2322.vsm", 0x4000, 0x4000, CRC(b6f4bba4) SHA1(65d686a9385b5ef3f080a5f47c6b2418bb9455b0) )
ROM_END
+ROM_START( snspellsp )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "cd2701n2l_p", 0x0000, 0x1000, CRC(5230612a) SHA1(3ec75b207380af2efe84e865fe83ea29e79e8eea) )
+
+ ROM_REGION( 1246, "maincpu:ipla", 0 )
+ ROM_LOAD( "tms0980_common1_instr.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
+ ROM_REGION( 2127, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms0270_common2_micro.pla", 0, 2127, CRC(86737ac1) SHA1(4aa0444f3ddf88738ea74aec404c684bf54eddba) )
+ ROM_REGION( 1246, "maincpu:opla", 0 )
+ ROM_LOAD( "tms0270_cd2701_output.pla", 0, 1246, CRC(f26980bd) SHA1(8d0c98fe5240541cb53c1e1d14c2a4560e7a7f32) )
+
+ ROM_REGION( 0x10000, "tms6100", ROMREGION_ERASEFF ) // 8000-bfff = space reserved for cartridge
+ ROM_LOAD( "cd2319.vsm", 0x0000, 0x4000, CRC(f293ac2f) SHA1(6f941743efcc2f05e514ce07167c094c554dca5d) )
+ ROM_LOAD( "cd2320.vsm", 0x4000, 0x4000, CRC(16b68766) SHA1(a9ea335b4487cc333268bfd2e71428258968461d) )
+ROM_END
+
ROM_START( snspellfr )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "cd2702an2l", 0x0000, 0x1000, CRC(895d6a4e) SHA1(a8bc118c83a84260033734191dcaa71a93dfa52b) )
@@ -1747,8 +1831,9 @@ COMP( 1978, snspellua, snspell, 0, sns_tmc0281, snspell, tispeak_state, sn
COMP( 1978, snspelluk, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK, 1978 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) // "
COMP( 1981, snspelluka, snspell, 0, sns_cd2801, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK, 1981 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
COMP( 1979, snspelljp, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
+COMP( 1981, snspellsp, snspell, 0, snspellsp, snspellsp, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (Spanish, prototype)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
COMP( 1980, snspellfr, snspell, 0, sns_cd2801, snspellfr, tispeak_state, snspell, "Texas Instruments", "La Dictee Magique (France)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
-COMP( 1982, snspellit, snspell, 0, sns_cd2801_m, snspellit, tispeak_state, snspell, "Texas Instruments", "Grillo Parlante (Italy)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
+COMP( 1982, snspellit, snspell, 0, snspellit, snspellit, tispeak_state, snspell, "Texas Instruments", "Grillo Parlante (Italy)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
COMP( 1981, snspellc, 0, 0, snspellc, snspellc, tispeak_state, snspell, "Texas Instruments", "Speak & Spell Compact (US, 1981 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
COMP( 1982, snspellca, snspellc, 0, snspellc, snspellc, tispeak_state, snspell, "Texas Instruments", "Speak & Spell Compact (US, 1982 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/layout/lantutor.lay b/src/mame/layout/snread.lay
index f5d0d9c1b03..524a67a4257 100644
--- a/src/mame/layout/lantutor.lay
+++ b/src/mame/layout/snread.lay
@@ -18,7 +18,7 @@
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="0" right="111" top="0" bottom="19" />
+ <bounds left="0" right="109" top="0" bottom="19" />
<!-- 10 digits (snread doesn't use the last digit) -->
diff --git a/src/mame/layout/snspell.lay b/src/mame/layout/snspell.lay
index 185868cce5a..bc128f0939a 100644
--- a/src/mame/layout/snspell.lay
+++ b/src/mame/layout/snspell.lay
@@ -25,7 +25,7 @@
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="0" right="89" top="0" bottom="15" />
+ <bounds left="0" right="88.5" top="0" bottom="15" />
<!-- 8 digits -->
diff --git a/src/mame/layout/snspellsp.lay b/src/mame/layout/snspellsp.lay
new file mode 100644
index 00000000000..c45a8397a07
--- /dev/null
+++ b/src/mame/layout/snspellsp.lay
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+<!-- note: TI's alphanumeric 14seg digits look different from MAME's default, most notably the right half is wider -->
+
+ <element name="digit" defstate="0">
+ <led14seg><color red="0.2" green="1.0" blue="0.85" /></led14seg>
+ </element>
+
+<!-- add our own for DP(display point) and the custom triangle accent mark segments -->
+
+ <element name="lamp_dp" defstate="0">
+ <disk state="0"><color red="0.0235" green="0.1255" blue="0.1059" /></disk>
+ <disk state="1"><color red="0.2" green="1.0" blue="0.85" /></disk>
+ </element>
+ <element name="triangle_mark" defstate="0">
+ <text state="0" string="&#x25bc;"><color red="0.0235" green="0.1255" blue="0.1059" /></text>
+ <text state="1" string="&#x25bc;"><color red="0.2" green="1.0" blue="0.85" /></text>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="88.5" top="0" bottom="19" />
+
+ <!-- 8 digits with accent mark and dp -->
+
+ <bezel name="digit0" element="digit"><bounds x="0" y="4" width="10" height="15" /></bezel>
+ <bezel name="digit1" element="digit"><bounds x="11" y="4" width="10" height="15" /></bezel>
+ <bezel name="digit2" element="digit"><bounds x="22" y="4" width="10" height="15" /></bezel>
+ <bezel name="digit3" element="digit"><bounds x="33" y="4" width="10" height="15" /></bezel>
+ <bezel name="digit4" element="digit"><bounds x="44" y="4" width="10" height="15" /></bezel>
+ <bezel name="digit5" element="digit"><bounds x="55" y="4" width="10" height="15" /></bezel>
+ <bezel name="digit6" element="digit"><bounds x="66" y="4" width="10" height="15" /></bezel>
+ <bezel name="digit7" element="digit"><bounds x="77" y="4" width="10" height="15" /></bezel>
+
+ <bezel name="lamp14" element="triangle_mark"><bounds x="4" y="0" width="4" height="3" /></bezel>
+ <bezel name="lamp114" element="triangle_mark"><bounds x="15" y="0" width="4" height="3" /></bezel>
+ <bezel name="lamp214" element="triangle_mark"><bounds x="26" y="0" width="4" height="3" /></bezel>
+ <bezel name="lamp314" element="triangle_mark"><bounds x="37" y="0" width="4" height="3" /></bezel>
+ <bezel name="lamp414" element="triangle_mark"><bounds x="48" y="0" width="4" height="3" /></bezel>
+ <bezel name="lamp514" element="triangle_mark"><bounds x="59" y="0" width="4" height="3" /></bezel>
+ <bezel name="lamp614" element="triangle_mark"><bounds x="70" y="0" width="4" height="3" /></bezel>
+ <bezel name="lamp714" element="triangle_mark"><bounds x="81" y="0" width="4" height="3" /></bezel>
+
+ <bezel name="lamp15" element="lamp_dp"><bounds x="9" y="17.5" width="1.5" height="1.5" /></bezel>
+ <bezel name="lamp115" element="lamp_dp"><bounds x="20" y="17.5" width="1.5" height="1.5" /></bezel>
+ <bezel name="lamp215" element="lamp_dp"><bounds x="31" y="17.5" width="1.5" height="1.5" /></bezel>
+ <bezel name="lamp315" element="lamp_dp"><bounds x="42" y="17.5" width="1.5" height="1.5" /></bezel>
+ <bezel name="lamp415" element="lamp_dp"><bounds x="53" y="17.5" width="1.5" height="1.5" /></bezel>
+ <bezel name="lamp515" element="lamp_dp"><bounds x="64" y="17.5" width="1.5" height="1.5" /></bezel>
+ <bezel name="lamp615" element="lamp_dp"><bounds x="75" y="17.5" width="1.5" height="1.5" /></bezel>
+ <bezel name="lamp715" element="lamp_dp"><bounds x="86" y="17.5" width="1.5" height="1.5" /></bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index c673866f562..796293ebf51 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -36095,6 +36095,7 @@ snspellfr //
snspellit //
snspelljp //
snspellp //
+snspellsp //
snspellua //
snspellub //
snspelluk //