some tispeak vfd fixes (still need to fix DP segment in snmath)

This commit is contained in:
hap 2015-08-22 18:25:47 +02:00
parent a726125d5a
commit 8c3e43d56b
6 changed files with 48 additions and 19 deletions

View File

@ -2234,6 +2234,7 @@ mbdtower // Milton Bradley
// hh_tms1k tispeak.c
snspell
snspellp
snspella
snspellb
snspelluk

View File

@ -146,6 +146,8 @@ void hh_tms1k_state::machine_start()
m_inp_mux = 0;
m_power_led = false;
m_power_on = false;
m_grid = 0;
m_plate = 0;
// register for savestates
save_item(NAME(m_display_maxy));
@ -162,6 +164,8 @@ void hh_tms1k_state::machine_start()
save_item(NAME(m_r));
save_item(NAME(m_inp_mux));
save_item(NAME(m_power_on));
save_item(NAME(m_grid));
save_item(NAME(m_plate));
}
void hh_tms1k_state::machine_reset()

View File

@ -48,7 +48,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 +74,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 +90,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 +143,7 @@ Speak & Math:
- TMS51xx: CD2801
- VSM(1/2): 16KB CD2392
- VSM(2/2): 16KB CD2393
- VFD: NEC FIP9xxx
- 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 +170,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 +302,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:
@ -344,6 +350,7 @@ Language Tutor modules:
// internal artwork
#include "lantutor.lh"
#include "snmath.lh"
#include "snspell.lh"
#include "tntell.lh" // keyboard overlay
@ -478,7 +485,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)
@ -491,14 +498,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();
}
@ -523,9 +532,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();
}
@ -536,6 +545,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();
}
@ -909,7 +919,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! */
@ -928,6 +938,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")
@ -950,6 +962,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 )
@ -957,6 +975,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")
@ -1025,6 +1045,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
@ -1289,14 +1311,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 )
@ -1306,8 +1329,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 )

View File

@ -49,6 +49,9 @@ public:
int m_display_maxy; // display matrix number of rows
int m_display_maxx; // display matrix number of columns (max 31 for now)
UINT32 m_grid; // VFD current row data
UINT32 m_plate; // VFD current column data
UINT32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on)
UINT16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
UINT32 m_display_cache[0x20]; // (internal use)

View File

@ -20,6 +20,8 @@
<view name="Internal Layout">
<bounds left="0" right="111" top="0" bottom="19" />
<!-- 10 digits (snread doesn't use the last digit) -->
<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>

View File

@ -25,9 +25,9 @@
<!-- build screen -->
<view name="Internal Layout">
<bounds left="0" right="100" top="0" bottom="15" />
<bounds left="0" right="89" top="0" bottom="15" />
<!-- 9 digits (snspell has 8, snmath has 9) -->
<!-- 8 digits -->
<bezel name="digit0" element="digit"><bounds x="0" y="0" width="10" height="15" /></bezel>
<bezel name="lamp14" element="lamp_dp"><bounds x="9" y="13.5" width="1.5" height="1.5" /></bezel>
@ -61,9 +61,5 @@
<bezel name="lamp714" element="lamp_dp"><bounds x="86" y="13.5" width="1.5" height="1.5" /></bezel>
<bezel name="lamp715" element="lamp_ap"><bounds x="87.5" y="0" width="0.5" height="3.5" /></bezel>
<bezel name="digit8" element="digit"><bounds x="88" y="0" width="10" height="15" /></bezel>
<bezel name="lamp814" element="lamp_dp"><bounds x="97" y="13.5" width="1.5" height="1.5" /></bezel>
<bezel name="lamp815" element="lamp_ap"><bounds x="98.5" y="0" width="0.5" height="3.5" /></bezel>
</view>
</mamelayout>