Previous 199869 Revisions Next

r34288 Friday 9th January, 2015 at 16:03:21 UTC by hap
tispeak.c: added TI Language Tutor (preliminary, need to figure out why it's buggy)
[src/emu/cpu/tms0980]tms0980.c tms0980.h
[src/mess]mess.lst mess.mak
[src/mess/drivers]tispeak.c
[src/mess/layout]lantutor.lay*

trunk/src/emu/cpu/tms0980/tms0980.c
r242799r242800
775775
776776void tms0270_cpu_device::dynamic_output()
777777{
778   // R15: filament on (handled in the driver)
779   // R14: N/C by default
780   // R13: power off, trigger on falling edge
781   if ((m_r_prev >> 13 & 1) && !(m_r >> 13 & 1))
782      m_power_off(1);
783
784778   // R11: TMS5100 CTL port direction (0=read from TMS5100, 1=write to TMS5100)
785779   m_ctl_dir = m_r >> 11 & 1;
786780
r242799r242800
10841078   // write to output is done in dynamic_output
10851079}
10861080
1087void tms0270_cpu_device::op_off()
1088{
1089   // OFF was moved to R13, handled in dynamic_output
1090}
10911081
10921082
1093
10941083//-------------------------------------------------
10951084//  execute_run
10961085//-------------------------------------------------
trunk/src/emu/cpu/tms0980/tms0980.h
r242799r242800
320320   virtual void op_setr();
321321   virtual void op_rstr();
322322   virtual void op_tdo();
323   virtual void op_off();
324323
325324private:
326325   // state specific to interface with TMS5100
trunk/src/mess/drivers/tispeak.c
r242799r242800
77  (still need to write notes here..)
88
99  Other stuff on similar hardware:
10  - Language Tutor/Translator
1110  - Touch & Tell, but it runs on a TMS1100!
1211  - Speak & Spell Compact, Speak & Write (UK version), TMS1100? TMS0980?
1312  - Speak & Read
r242799r242800
2120#include "bus/generic/slot.h"
2221#include "bus/generic/carts.h"
2322
23#include "lantutor.lh"
2424#include "tispeak.lh"
2525
2626// The master clock is a single stage RC oscillator into TMS5100 RCOSC:
r242799r242800
5757   int m_filament_on;
5858   int m_power_on;
5959
60   UINT16 m_digit_state[9];
60   UINT16 m_digit_state[0x10];
6161   void display_update();
6262   TIMER_DEVICE_CALLBACK_MEMBER(delayed_filament_off);
6363
64   UINT32 m_cart_max_size;
65   UINT8* m_cart_base;
66   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(tispeak_cartridge);
67   DECLARE_DRIVER_INIT(snspell);
68   DECLARE_DRIVER_INIT(lantutor);
69
6470   DECLARE_READ8_MEMBER(snspell_read_k);
6571   DECLARE_WRITE16_MEMBER(snmath_write_o);
6672   DECLARE_WRITE16_MEMBER(snspell_write_o);
6773   DECLARE_WRITE16_MEMBER(snspell_write_r);
74   DECLARE_WRITE16_MEMBER(lantutor_write_r);
6875
6976   DECLARE_INPUT_CHANGED_MEMBER(power_button);
70   DECLARE_WRITE_LINE_MEMBER(auto_power_off);
7177   void power_off();
7278
73   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(tispeak_cartridge);
7479   virtual void machine_reset();
7580   virtual void machine_start();
7681};
r242799r242800
8792{
8893   UINT32 size = m_cart->common_get_size("rom");
8994
90   // max size is 16KB
91   if (size > 0x4000)
95   if (size > m_cart_max_size)
9296   {
9397      image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid file size");
9498      return IMAGE_INIT_FAIL;
r242799r242800
101105}
102106
103107
108DRIVER_INIT_MEMBER(tispeak_state, snspell)
109{
110   m_cart_max_size = 0x4000;
111   m_cart_base = memregion("tms6100")->base() + 0x8000;
112}
104113
114DRIVER_INIT_MEMBER(tispeak_state, lantutor)
115{
116   m_cart_max_size = 0x10000;
117   m_cart_base = memregion("tms6100")->base();
118}
119
120
121
105122/***************************************************************************
106123
107124  VFD Display
r242799r242800
136153   }
137154
138155   // update digit state
139   for (int i = 0; i < 9; i++)
156   for (int i = 0; i < 0x10; i++)
140157      if (m_r >> i & 1)
141158         m_digit_state[i] = m_o;
142159
143160   // send to output
144   for (int i = 0; i < 9; i++)
161   for (int i = 0; i < 0x10; i++)
145162   {
146163      // standard led14seg
147164      output_set_digit_value(i, m_filament_on ? m_digit_state[i] & 0x3fff : 0);
r242799r242800
178195WRITE16_MEMBER(tispeak_state::snspell_write_r)
179196{
180197   // R0-R7: input mux and select digit (+R8 if the device has 9 digits)
181   // R15: filament on
198   // R15: filament on (handled in display_update)
199   // R13: power-off request, on falling edge
200   if ((m_r >> 13 & 1) && !(data >> 13 & 1))
201      power_off();
202
182203   // other bits: MCU internal use
183204   m_r = data;
184205   display_update();
r242799r242800
203224   m_power_on = 0;
204225}
205226
206WRITE_LINE_MEMBER(tispeak_state::auto_power_off)
207{
208   // power-off request from the MCU, when [OFF] is pressed, also typically after a couple of minutes of idling
209   if (state)
210      power_off();
211}
212227
213
214228// snmath specific
215229
216230WRITE16_MEMBER(tispeak_state::snmath_write_o)
r242799r242800
223237}
224238
225239
240// lantutor specific
226241
242WRITE16_MEMBER(tispeak_state::lantutor_write_r)
243{
244   // same as default, except R13 is used for an extra digit
245   m_r = data;
246   display_update();
247}
248
249
250
227251/***************************************************************************
228252
229253  Inputs
r242799r242800
363387INPUT_PORTS_END
364388
365389
390static INPUT_PORTS_START( lantutor )
391   PORT_INCLUDE( snspell )
366392
393   PORT_MODIFY("IN.5") // R5
394   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("Diacritical")
395   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Space")
396
397   PORT_MODIFY("IN.6") // R6
398   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_NAME("1")
399   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_NAME("2")
400   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_NAME("3")
401   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_NAME("4")
402   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_NAME("5")
403
404   PORT_MODIFY("IN.7") // R7
405   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_NAME("6")
406   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_NAME("7")
407   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_NAME("8")
408   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_NAME("9")
409   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_NAME("0")
410
411   PORT_MODIFY("IN.8") // Vss!
412   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_NAME("Translate")
413   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("Learn")
414   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("Phrase")
415   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("Link")
416   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("Repeat")
417INPUT_PORTS_END
418
419
420
367421/***************************************************************************
368422
369423  Machine Config
r242799r242800
398452      astring region_tag;
399453      memory_region *src = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
400454      if (src)
401      {
402         UINT8 *dest_ptr = memregion("tms6100")->base() + 0x8000;
403         memcpy(dest_ptr, src->base(), src->bytes());
404      }
455         memcpy(m_cart_base, src->base(), src->bytes());
405456   }
406457}
407458
r242799r242800
413464   MCFG_TMS1XXX_READ_K_CB(READ8(tispeak_state, snspell_read_k))
414465   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tispeak_state, snmath_write_o))
415466   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tispeak_state, snspell_write_r))
416   MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(tispeak_state, auto_power_off))
417467
418468   MCFG_TMS0270_READ_CTL_CB(DEVREAD8("tms5100", tms5100_device, ctl_r))
419469   MCFG_TMS0270_WRITE_CTL_CB(DEVWRITE8("tms5100", tms5100_device, ctl_w))
r242799r242800
451501   MCFG_SOFTWARE_LIST_ADD("cart_list", "snspell")
452502MACHINE_CONFIG_END
453503
504static MACHINE_CONFIG_DERIVED( lantutor, snmath )
454505
506   /* basic machine hardware */
507   MCFG_CPU_MODIFY("maincpu")
508   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tispeak_state, snspell_write_o))
509   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tispeak_state, lantutor_write_r))
455510
511   MCFG_DEFAULT_LAYOUT(layout_lantutor)
512
513   /* cartridge */
514   MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "lantutor")
515   MCFG_GENERIC_MANDATORY
516   MCFG_GENERIC_EXTENSIONS("vsm,bin")
517   MCFG_GENERIC_LOAD(tispeak_state, tispeak_cartridge)
518
519   MCFG_SOFTWARE_LIST_ADD("cart_list", "lantutor")
520MACHINE_CONFIG_END
521
522
523
456524/***************************************************************************
457525
458526  Game driver(s)
r242799r242800
553621ROM_END
554622
555623
556
557624ROM_START( snmath )
558625   ROM_REGION( 0x1000, "maincpu", 0 )
559   // typed in from patent 4946391, verified with source code (mark BAD_DUMP just to be unsure)
626   // typed in from patent 4946391, verified with source code
560627   // BTANB note: Mix It does not work at all, this is an original bug in the prototype. There are probably other minor bugs too.
561   ROM_LOAD( "us4946391_t2074", 0x0000, 0x1000, BAD_DUMP CRC(011f0c2d) SHA1(d2e14d72e03ca864abd51da78ffb71a9da82f624) )
628   ROM_LOAD( "us4946391_t2074", 0x0000, 0x1000, CRC(011f0c2d) SHA1(d2e14d72e03ca864abd51da78ffb71a9da82f624) )
562629
563630   ROM_REGION( 1246, "maincpu:ipla", 0 )
564631   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
r242799r242800
592659ROM_END
593660
594661
662ROM_START( lantutor )
663   ROM_REGION( 0x1000, "maincpu", 0 )
664   ROM_LOAD( "us4631748_tmc0275", 0x0000, 0x1000, CRC(22818845) SHA1(1a84f15fb18ca66b1f2bf7491d76fbc56068984d) ) // extracted visually from patent 4631748, verified with source code
595665
596COMP( 1978, snspell,    0,       0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (US prototype)", GAME_IMPERFECT_SOUND ) // also US set 1
597COMP( 1980, snspella,   snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (US set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
598COMP( 1978, snspelluk,  snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (UK set 1)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
599COMP( 1981, snspelluka, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (UK set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // different voice actor
600COMP( 1979, snspelljp,  snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (Japan)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
601COMP( 1980, ladictee,   snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "La Dictee Magique (France)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // doesn't work due to missing CD2702 MCU dump, German version has CD2702 too
666   ROM_REGION( 1246, "maincpu:ipla", 0 )
667   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
668   ROM_REGION( 2127, "maincpu:mpla", 0 )
669   ROM_LOAD( "tms0270_cd2708_mpla.pla", 0, 2127, BAD_DUMP CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) // taken from cd2708, need to verify if it's same as tmc0275
670   ROM_REGION( 1246, "maincpu:opla", 0 )
671   ROM_LOAD( "tms0270_tmc0271_opla.pla", 0, 1246, BAD_DUMP CRC(9ebe12ab) SHA1(acb4e07ba26f2daca5f1c234885ac0371c7ce87f) ) // taken from snspell, mostly looks correct
602672
603COMP( 1980, snmath,     0,       0, snmath,  snmath,  driver_device, 0, "Texas Instruments", "Speak & Math (US prototype)", GAME_IMPERFECT_SOUND ) // also US set 1
604COMP( 1986, snmatha,    snmath,  0, snmath,  snmath,  driver_device, 0, "Texas Instruments", "Speak & Math (US set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
673   ROM_REGION( 0x10000, "tms6100", ROMREGION_ERASEFF ) // cartridge area
674ROM_END
675
676
677
678COMP( 1978, snspell,    0,       0, snspell,  snspell,  tispeak_state, snspell,  "Texas Instruments", "Speak & Spell (US prototype)", GAME_IMPERFECT_SOUND ) // also US set 1
679COMP( 1980, snspella,   snspell, 0, snspell,  snspell,  tispeak_state, snspell,  "Texas Instruments", "Speak & Spell (US set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
680COMP( 1978, snspelluk,  snspell, 0, snspell,  snspell,  tispeak_state, snspell,  "Texas Instruments", "Speak & Spell (UK set 1)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
681COMP( 1981, snspelluka, snspell, 0, snspell,  snspell,  tispeak_state, snspell,  "Texas Instruments", "Speak & Spell (UK set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // different voice actor
682COMP( 1979, snspelljp,  snspell, 0, snspell,  snspell,  tispeak_state, snspell,  "Texas Instruments", "Speak & Spell (Japan)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
683COMP( 1980, ladictee,   snspell, 0, snspell,  snspell,  tispeak_state, snspell,  "Texas Instruments", "La Dictee Magique (France)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // doesn't work due to missing CD2702 MCU dump, German version has CD2702 too
684
685COMP( 1980, snmath,     0,       0, snmath,   snmath,   driver_device, 0,        "Texas Instruments", "Speak & Math (US prototype)", GAME_IMPERFECT_SOUND ) // also US set 1
686COMP( 1986, snmatha,    snmath,  0, snmath,   snmath,   driver_device, 0,        "Texas Instruments", "Speak & Math (US set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
687
688COMP( 1979, lantutor,   0,       0, lantutor, lantutor, tispeak_state, lantutor, "Texas Instruments", "Language Tutor (prototype)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
trunk/src/mess/layout/lantutor.lay
r0r242800
1<?xml version="1.0"?>
2<mamelayout version="2">
3
4<!-- define elements -->
5
6<!-- note: the TI Language Tutor 14seg digits look different from MAME's default, most notably the right half is wider -->
7
8   <element name="digit" defstate="0">
9      <led14seg><color red="0.2" green="1.0" blue="0.85" /></led14seg>
10   </element>
11
12   <element name="triangle_mark" defstate="0">
13      <text state="0" string="v"><color red="0.0235" green="0.1255" blue="0.1059" /></text>
14      <text state="1" string="v"><color red="0.2" green="1.0" blue="0.85" /></text>
15   </element>
16
17
18<!-- build screen -->
19
20   <view name="Internal Layout">
21      <bounds left="0" right="111" top="0" bottom="19" />
22
23      <bezel name="digit0" element="digit"><bounds x="0" y="4" width="10" height="15" /></bezel>
24      <bezel name="digit1" element="digit"><bounds x="11" y="4" width="10" height="15" /></bezel>
25      <bezel name="digit2" element="digit"><bounds x="22" y="4" width="10" height="15" /></bezel>
26      <bezel name="digit3" element="digit"><bounds x="33" y="4" width="10" height="15" /></bezel>
27      <bezel name="digit4" element="digit"><bounds x="44" y="4" width="10" height="15" /></bezel>
28      <bezel name="digit5" element="digit"><bounds x="55" y="4" width="10" height="15" /></bezel>
29      <bezel name="digit6" element="digit"><bounds x="66" y="4" width="10" height="15" /></bezel>
30      <bezel name="digit7" element="digit"><bounds x="77" y="4" width="10" height="15" /></bezel>
31      <bezel name="digit8" element="digit"><bounds x="88" y="4" width="10" height="15" /></bezel>
32      <bezel name="digit13" element="digit"><bounds x="99" y="4" width="10" height="15" /></bezel>
33
34      <bezel name="lamp0" element="triangle_mark"><bounds x="4" y="0" width="4" height="3" /></bezel>
35      <bezel name="lamp10" element="triangle_mark"><bounds x="15" y="0" width="4" height="3" /></bezel>
36      <bezel name="lamp20" element="triangle_mark"><bounds x="26" y="0" width="4" height="3" /></bezel>
37      <bezel name="lamp30" element="triangle_mark"><bounds x="37" y="0" width="4" height="3" /></bezel>
38      <bezel name="lamp40" element="triangle_mark"><bounds x="48" y="0" width="4" height="3" /></bezel>
39      <bezel name="lamp50" element="triangle_mark"><bounds x="59" y="0" width="4" height="3" /></bezel>
40      <bezel name="lamp60" element="triangle_mark"><bounds x="70" y="0" width="4" height="3" /></bezel>
41      <bezel name="lamp70" element="triangle_mark"><bounds x="81" y="0" width="4" height="3" /></bezel>
42      <bezel name="lamp80" element="triangle_mark"><bounds x="92" y="0" width="4" height="3" /></bezel>
43      <bezel name="lamp130" element="triangle_mark"><bounds x="103" y="0" width="4" height="3" /></bezel>
44
45   </view>
46</mamelayout>
trunk/src/mess/mess.lst
r242799r242800
10731073ladictee
10741074snmath
10751075snmatha
1076lantutor
10761077
10771078// Texas Instruments Calculators
10781079tisr16    // 1974 SR-16
trunk/src/mess/mess.mak
r242799r242800
21842184                     $(MESS_LAYOUT)/ti30.lh \
21852185                     $(MESS_LAYOUT)/tisr16.lh \
21862186                     $(MESS_LAYOUT)/wizatron.lh
2187$(MESS_DRIVERS)/tispeak.o:  $(MESS_LAYOUT)/tispeak.lh
2187$(MESS_DRIVERS)/tispeak.o:  $(MESS_LAYOUT)/lantutor.lh \
2188                     $(MESS_LAYOUT)/tispeak.lh
21882189$(MESS_DRIVERS)/tk80.o:     $(MESS_LAYOUT)/tk80.lh
21892190$(MESS_DRIVERS)/tm990189.o: $(MESS_LAYOUT)/tm990189.lh \
21902191                     $(MESS_LAYOUT)/tm990189v.lh


Previous 199869 Revisions Next


© 1997-2024 The MAME Team