summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers/tispeak.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/drivers/tispeak.c')
-rw-r--r--src/mess/drivers/tispeak.c63
1 files changed, 46 insertions, 17 deletions
diff --git a/src/mess/drivers/tispeak.c b/src/mess/drivers/tispeak.c
index 4550eb1cbca..211d535f9ac 100644
--- a/src/mess/drivers/tispeak.c
+++ b/src/mess/drivers/tispeak.c
@@ -9,7 +9,9 @@
These devices, mostly edu-toys, are based around an MCU(TMS0270/TMS1100),
TMS51xx speech, and VSM ROM(s). Newer devices, such as Speak & Music,
are based around the TMP50C40 and belong in another driver, probably.
-
+
+ note: except for tntell, MAME external artwork is not required. But it
+ is objectively a large improvement.
----------------------------------------------------------------------------
@@ -48,7 +50,7 @@ above expectations. TI continued to manufacture many products for this line.
with no module inserted
Speak & Spell (US), 1980
- - MCU: TMC0271* (same as 1979 version)
+ - MCU: same as 1979 version
- TMS51xx: TMC0281D
- VSM: 16KB CD2350(rev.A)
- notes: only 1 VSM, meaning much smaller internal vocabulary
@@ -74,6 +76,7 @@ above expectations. TI continued to manufacture many products for this line.
- MCU: TMC0271* (assume same as US 1979 version)
- TMS51xx: CD2801
- VSM: 16KB CD62175
+ - VFD: same as Speak & Math(!)
- notes: this one has a dedicated voice actor
Speak & Spell (France) "La Dictee Magique", 1980
@@ -89,12 +92,14 @@ above expectations. TI continued to manufacture many products for this line.
Speak & Spell (Italy) "Grillo Parlante", 1982
- MCU & TMS51xx: same as French 1980 version
- VSM: 16KB CD62190
+ - VFD: same as Speak & Math
+ - notes: it appears that TI ran out of original snspell VFDs in the early 80s?
Speak & Spell Compact (US), 1981
- MCU: CD8011**
- TMS51xx: TMC0281D
- VSM: 16KB CD2354, CD2354(rev.A)
- - notes: no display, MCU is TMS1100 instead of TMS0270
+ - notes: no display, MCU is TMS1100 instead of TMS0270, overall similar to Touch & Tell
Speak & Spell Compact (UK) "Speak & Write", 1981
- MCU & TMS51xx: same as US 1981 version
@@ -140,6 +145,7 @@ Speak & Math:
- TMS51xx: CD2801
- VSM(1/2): 16KB CD2392
- VSM(2/2): 16KB CD2393
+ - VFD: Futaba 9SY -02Z 7E
- notes: As with the Speak & Spell, the voice actor was a radio announcer.
However, the phrase "is greater than or less than" had to be added in a
hurry by one of the TI employees in a hurry, the day before a demo.
@@ -166,6 +172,7 @@ Speak & Read:
- TMS51xx: CD2801
- VSM(1/2): 16KB CD2394(rev.A)
- VSM(2/2): 16KB CD2395(rev.A)
+ - VFD: same as Language Tutor, rightmost digit unused
Speak & Read modules:
@@ -297,6 +304,7 @@ A later device, called Language Teacher, was released without speech hardware.
Language Tutor (US), 1978
- MCU: TMC0275*
- TMS51xx: CD2801
+ - VFD: NEC FIP10xxx?
- notes: external module is required (see below)
Language Tutor modules:
@@ -331,7 +339,6 @@ Language Tutor modules:
TODO:
- why doesn't lantutor work?
- - tntell/vocaid: able to get overlay code from external artwork file
- emulate other known devices
@@ -345,6 +352,7 @@ Language Tutor modules:
// internal artwork
#include "lantutor.lh"
+#include "snmath.lh"
#include "snspell.lh"
#include "tntell.lh" // keyboard overlay
@@ -479,7 +487,7 @@ DRIVER_INIT_MEMBER(tispeak_state, lantutor)
void tispeak_state::prepare_display()
{
- display_matrix_seg(16, 16, m_o, (m_r & 0x8000) ? (m_r & 0x21ff) : 0, 0x3fff);
+ display_matrix_seg(16, 16, m_plate, (m_r & 0x8000) ? m_grid : 0, 0x3fff);
}
WRITE16_MEMBER(tispeak_state::snspell_write_r)
@@ -492,14 +500,16 @@ WRITE16_MEMBER(tispeak_state::snspell_write_r)
// R15: filament on
// other bits: MCU internal use
m_r = m_inp_mux = data;
+ m_grid = data & 0x1ff;
prepare_display();
}
WRITE16_MEMBER(tispeak_state::snspell_write_o)
{
// reorder opla to led14seg, plus DP as d14 and AP as d15:
+ // note: lantutor and snread VFD has an accent triangle instead of DP, and no AP
// E,D,C,G,B,A,I,M,L,K,N,J,[AP],H,F,[DP] (sidenote: TI KLMN = MAME MLNK)
- m_o = BITSWAP16(data,12,15,10,7,8,9,11,6,13,3,14,0,1,2,4,5);
+ m_plate = BITSWAP16(data,12,15,10,7,8,9,11,6,13,3,14,0,1,2,4,5);
prepare_display();
}
@@ -524,9 +534,9 @@ void tispeak_state::snspell_power_off()
WRITE16_MEMBER(tispeak_state::snmath_write_o)
{
- // reorder opla to led14seg, plus DP as d14 and AP as d15:
- // [DP],D,C,H,F,B,I,M,L,K,N,J,[AP],E,G,A (sidenote: TI KLMN = MAME MLNK)
- m_o = BITSWAP16(data,12,0,10,7,8,9,11,6,3,14,4,13,1,2,5,15);
+ // reorder opla to led14seg, plus DP as d14 and CT as d15:
+ // [DP],D,C,H,F,B,I,M,L,K,N,J,[CT],E,G,A (sidenote: TI KLMN = MAME MLNK)
+ m_plate = BITSWAP16(data,12,0,10,7,8,9,11,6,3,14,4,13,1,2,5,15);
prepare_display();
}
@@ -537,6 +547,7 @@ WRITE16_MEMBER(tispeak_state::lantutor_write_r)
{
// same as default, except R13 is used for an extra digit
m_r = m_inp_mux = data;
+ m_grid = data & 0x21ff;
prepare_display();
}
@@ -585,7 +596,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(tispeak_state::tntell_get_overlay)
// which one is active(if any). If it matches with the internal ROM or
// external module, the game continues.
// 00 for none, 1F for diagnostics, see comment section above for a list
- m_overlay = m_inp_matrix[10]->read();
+
+ // try to get overlay code from artwork file(in decimal), otherwise pick the
+ // one that was selected in machine configuration
+ m_overlay = output_get_value("overlay_code") & 0x1f;
+ if (m_overlay == 0)
+ m_overlay = m_inp_matrix[10]->read();
for (int i = 0; i < 5; i++)
output_set_indexed_value("ol", i+1, m_overlay >> i & 1);
@@ -838,7 +854,7 @@ static INPUT_PORTS_START( tntell )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_PGUP) PORT_NAME("Grid 6-6 (On)") PORT_CHANGED_MEMBER(DEVICE_SELF, tispeak_state, snspell_power_button, (void *)true)
PORT_START("IN.10")
- PORT_CONFNAME( 0x1f, 0x01, "Overlay Code" )
+ PORT_CONFNAME( 0x1f, 0x04, "Overlay Code" ) // only if not provided by external artwork
PORT_CONFSETTING( 0x00, "00 (None)" )
PORT_CONFSETTING( 0x01, "01" )
PORT_CONFSETTING( 0x02, "02" )
@@ -905,7 +921,7 @@ static MACHINE_CONFIG_START( snmath, tispeak_state )
MCFG_TMS0270_WRITE_PDC_CB(DEVWRITELINE("tms5100", tms5110_device, pdc_w))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
- MCFG_DEFAULT_LAYOUT(layout_snspell) // max 9 digits
+ MCFG_DEFAULT_LAYOUT(layout_snmath)
/* no video! */
@@ -924,6 +940,8 @@ static MACHINE_CONFIG_DERIVED( sns_cd2801, snmath )
MCFG_CPU_MODIFY("maincpu")
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tispeak_state, snspell_write_o))
+ MCFG_DEFAULT_LAYOUT(layout_snspell)
+
/* cartridge */
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "snspell")
MCFG_GENERIC_EXTENSIONS("vsm")
@@ -946,6 +964,12 @@ 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 )
@@ -953,6 +977,8 @@ 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)
+
/* cartridge */
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "snread")
MCFG_GENERIC_EXTENSIONS("vsm")
@@ -1021,6 +1047,8 @@ MACHINE_CONFIG_END
***************************************************************************/
+#define rom_snspellp rom_snspell // until we have a correct dump
+
ROM_START( snspell )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "us4189779_tmc0271", 0x0000, 0x1000, CRC(d3f5a37d) SHA1(f75ab617a6067d4d3a954a9f86126d2089554df8) ) // typed in from patent US4189779, verified by 2 sources
@@ -1285,14 +1313,15 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
-COMP( 1978, snspell, 0, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, 1978 version/patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
-COMP( 1979, snspella, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, 1979 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // incomplete dump, uses patent MCU ROM
+COMP( 1978, snspell, 0, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, 1978 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // incomplete dump, uses patent MCU ROM
+COMP( 1978, snspellp, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
+COMP( 1979, snspella, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, 1979 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // "
COMP( 1980, snspellb, snspell, 0, sns_tmc0281d,snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, 1980 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // "
COMP( 1978, snspelluk, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK, 1978 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // "
-COMP( 1981, snspelluka, snspell, 0, sns_cd2801, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK, 1981 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // "
+COMP( 1981, snspelluka, snspell, 0, sns_cd2801_m,snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK, 1981 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // "
COMP( 1979, snspelljp, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // "
COMP( 1980, snspellfr, snspell, 0, sns_cd2801, snspell, tispeak_state, snspell, "Texas Instruments", "La Dictee Magique (France)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // doesn't work due to missing CD2702 MCU dump, German/Italian version has CD2702 too
-COMP( 1982, snspellit, snspell, 0, sns_cd2801, snspell, tispeak_state, snspell, "Texas Instruments", "Grillo Parlante (Italy)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // "
+COMP( 1982, snspellit, snspell, 0, sns_cd2801_m,snspell, tispeak_state, snspell, "Texas Instruments", "Grillo Parlante (Italy)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // "
COMP( 1986, snmath, 0, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US, 1986 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
COMP( 1980, snmathp, snmath, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US, 1980 version/patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
@@ -1302,8 +1331,8 @@ COMP( 1980, snread, 0, 0, snread, snread, tispeak_state, snspe
COMP( 1979, lantutor, 0, 0, lantutor, lantutor, tispeak_state, lantutor, "Texas Instruments", "Language Tutor (patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
COMP( 1981, tntell, 0, 0, tntell, tntell, tispeak_state, tntell, "Texas Instruments", "Touch & Tell (US, 1981 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_REQUIRES_ARTWORK ) // assume there is an older version too, with CD8010 MCU
+COMP( 1980, tntellp, tntell, 0, tntell, tntell, tispeak_state, tntell, "Texas Instruments", "Touch & Tell (patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_REQUIRES_ARTWORK | MACHINE_NOT_WORKING )
COMP( 1981, tntelluk, tntell, 0, tntell, tntell, tispeak_state, tntell, "Texas Instruments", "Touch & Tell (UK)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_REQUIRES_ARTWORK )
COMP( 1981, tntellfr, tntell, 0, tntell, tntell, tispeak_state, tntell, "Texas Instruments", "Le Livre Magique (France)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_REQUIRES_ARTWORK )
-COMP( 1980, tntellp, tntell, 0, tntell, tntell, tispeak_state, tntell, "Texas Instruments", "Touch & Tell (patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_REQUIRES_ARTWORK | MACHINE_NOT_WORKING )
COMP( 1982, vocaid, 0, 0, vocaid, tntell, driver_device, 0, "Texas Instruments", "Vocaid", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_REQUIRES_ARTWORK )