diff options
Diffstat (limited to 'src/mess/drivers/tispeak.c')
-rw-r--r-- | src/mess/drivers/tispeak.c | 63 |
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 ) |