Solid State Software - Module, Module, ...



Auf dieser Seite will ich etwas näher auf die Technik in den Modulen eingehen, auf denen die Vielseitigkeit des TI-99/4A beruht, d.h. ich werde sie öffnen, Fotos vom Innenleben machen, und ein paar Worte zur Funktion hinterlassen.
Wenn man das Ergebnis betrachtet, darf man folgendes nicht vergessen:
  • Das Konzept dieser Module stammt aus den 1970er Jahren, einer Zeit also, wo Speicher teuer war und die gängigen Prozessoren in 4, 8 oder 12 Bit organisiert waren.
  • Alles, was richtig Dampf unter der Haube hatte, steckte in Mini- oder Mainframe-Computern (so die TMS9900!).
  • Man programmierte noch weitgehend in Assembler, um eben diesen Speicher zu sparen, und da ging es um jedes Bit.
    Da war so ein 'hauseigener p-Code' (== GPL) eine prima Idee, kompakteren Code zu generieren um mehr Funktion im knappen Speicher unterzubringen.
  • Die Halbleitertechnologie erlaubte keine allzu kleinen Strukturen, der Yield war niedrig und der Preis hoch.
  • Software zur Softwareentwicklung war fast immer eine Eigenentwicklung (sic!), da sich die Standards erst etablierten.
  • Das alles war teuer, aber Texas Instruments war schon damals DER Name im Halbleiter-Business, und man fand Wege, das umzusetzen.
  • Über die Gründe, warum die GROMs erfunden bzw. eingesetzt wurden, ranken sich viele Gerüchte, aber am Ende war es sicher der kostengünstigste und effizienteste Weg, große Datenmengen und ensprechend umfangreiche Software in ein Gehäuse zu packen, das nur wenig größer als eine Compact-Cassette ist.
  • Und - last but not least - ermöglicht das GROM Konzept (an GRAM hatte man auch schon gedacht!) einen theoretisch bis zu 16 MB großen Speicher, den man mit der 16 Bit TMS9900 per GROM ohne Banking adressieren konnte!

Unterschiedliche Hardware

Je nach Hersteller, Alter des Moduls und der Aufgabenstellung für die abgelegte Software, gibt es auch passende Hardwarekonzepte für die Module. Diese sind:
  1. Einfache Module mit einem bis fünf GROMs - Beispiele: Editor/Assembler (1 GROM), Multiplication 1 (3 GROMs)
  2. Einfache Module wie vor, jedoch mit bis zu 8KB ROM zusätzlich - Beispiele: Othello (1 GROM, 1 ROM), Parsec (3 GROM, 1 ROM), TI Logo II (wie Parsec), TE-II, ...
  3. Einfache Module mit bis zu 8KB ROM, aber ohne GROMs - Beispiele: ROMOX oder Atari Cartridges
  4. Aufwendigere Module, bei denen das ROM durch Banking mehr als 8KB groß sein kann - Beispiele: Extended Basic (4 GROMs, 2 ROMs, 2 TTLs)
  5. Sehr aufwendige Module wie die für das MBX Expansion System, die GROMs, ROM (z.T. mit Banking) und RAM (meist 1KB) beinhalten
  6. Singularitäten wie das Minimemory, das GROM, ROM und batteriegepuffertes SRAM enthält
  7. Die Tigervision Module, die nicht in den Modulport sondern in den Erweiterungsport gesteckt werden
  8. Die Romox ECPC-Cartridges, mit denen man Module kopieren konnte (Recherche läuft)
  9. ... und die, die ich bislang übersehen habe (und wohl auch weiterhin werde), wie z.B. die Klasse der 'Supercarts'...
    mal abgesehen vom FinalGROM99, das aber eine eigene Rubrik verdient
    Na gut - das Strangecart von Erik Piehl werde ich betrachten, sobald ich mehr Infos darüber bekommen konnte.

Wat is enne Ge Romm? Da stelle ma uns mal janz dumm...

... Nein, das hier ist kein 'Basis-Repetitorium' in Sachen GROM - ich setze voraus, daß der Leser weiß, was ein GROM ist, wie es adressiert wird und wie man Daten daraus liest. Hier kommen die Spezialitäten dran: GROM Basisadresse, Module Library etc. seien da als Stichworte schon mal gespoilert.
Die nebenstehende Memory-Map (obere Graphik) zeigt die diversen Zugriffsadressen, wie der TI-99/4A für den GROM-Zugriff vorsieht. Der Bereich des lesenden und schreibenden Zugriffs wiederholt sich pro Funktion alle 4 Byte, was bedeutet, daß es im gesamten Adressbereich von >9800 bis >9FFE (danach kommt der Memory-Block 5) insgesamt 256 GROM-Basisadressen gibt. Daraus und aus der Tatsache, daß die 6KB pro GROM historisch-technisch bedingt sind, folgt ein adressierbarer GROM/GRAM-Speicher von theoretisch 16MB (256 * 64KB). Theoretisch deshalb, weil die 3 TI-Basic GROMs innerhalb der Konsole auf allen Basisadressen reagieren und somit 24KB von den möglichen 64KB jeder Basisadresse wegnehmen. Aber diese Feinheiten, und wie man sie umgehen kann, damit dann echte 16MB bereitstehen, lassen wir hier beiseite - dazu gibt es ein separates Hardware-Projekt. Die Basisadresse ist für das GROM selbst übrigens irrelevant bzw. transparent - das muss durch die Decodierung 'außerhalb' des Chips erledigt werden.

Zu beachten ist auch, daß das TI-Monitorprogramm nur die ersten 16 Basisadressen scannt, und bei Vorliegen von GROM auf einer anderen als der Standardadresse >9800 den Text 'Review Module Library' anzeigt, womit man sich dann durch die ersten 16 Bereiche arbeiten kann.

Jedes GROM verfügt übrigens über einen eigenen 16 Bit breiten Adresszähler der GROM-Adresse sowie über einen Adressdecoder, der jedes GROM nur auf exakt einem festgelegten 8KB Block im Adressraum der jeweiligen Basisadresse aktiviert.
Siehe hierzu auch Punkt 3 in der unteren Graphik mit den Spezifikationen der GROMs. Deswegen können alle GROMs einer Basisadresse an allen Pins identisch angesteuert werden - sie 'wissen' selbst, wann sie dran sind.
Dieses Verhalten ist aber auch aus einem anderen Grund erforderlich: beim Lesen der aktuellen GROM-Adresse liefern ALLE GROMs der aktuellen Basisadresse den internen Zählerstand ab - wäre das nicht so, gäbe es regelmäßige Kurzschlüsse, mit anderen Worten: es würde gar nichts funktionieren!
Ein genauerer Blick in die Specs zeigt übrigens, daß in der Tat schon beim initialen Design an ein GRAM gedacht wurde: "-SPARE TO WRITE RAM OR PROM" - klar, ne?! Am Ende sollte sich das Teil gar selbst programmieren können...

Eine Anmerkung zur o.a. GROM-Memory-Map darf hier nicht fehlen: Wenn man eine snug HSGPL in der PEB hat, sind die Bereiche jenseits der 16 vom Monitorprogramm unterstützten Basisadressen nicht uneingeschränkt verfügbar, da einige für die Programmierung der FLASH-EPROMs auf der Karte benötigt werden. Hierzu lese man die Anleitung zu dieser Karte - Michael hat darin viele hilfreiche Informationen zusammengetragen.

Das QI-Dilemma

Die Standard-Konsole (die 'alte') erlaubt GROM und ROM im Modulport, die neue scannt das ROM nicht mehr. Welche man hat, ist nur dann eindeutig zu erkennen, wenn man die schwarz-silberne Ausführung hat, die weißen können beides sein - bei diesen kann man anhand der Meldung des ROM-Monitors auf dem Startbildschirm erkennen, ob man eine 'alte' hat: das Copyright ist bei den alten 1981, bei den neuen 1983 und i.d.R. steht am Ende V 2.2.
Irgendwie hatte TI damit ein Problem, weil auf einmal(?) Cartridges auf den Markt kamen, die auch ohne den 'Segen aus Lubbock' (= PHM-Nummer) genutzt wurden. Da man sowieso - warum auch immer 😉 - ein billigeres Redesign wollte, wurde das 'IC-Grab' in der Urversion beseitigt und mittels FPGA eine neue Konsole aufgelegt - mit durchaus sauberem PCB-Design und optimiertem Netzteil, diesmal aber mit einem Monitor, der das ROM ab >6000 im Modulport ignorierte!
Der Adressbereich war noch verfügbar, wurde aber vom Monitorprogramm nicht mehr gescannt und zur Auswahl angeboten - Bingo! Das war der nächste Schuss ins Knie, den die Texaner abgegeben hatten - auf einmal liefen alle ROM-only Module nicht mehr... obwohl es schon damals Stimmen gab, die behaupteten daß die einzig guten Spiele, die als Modul vorlagen, nicht von TI stammten und somit ohne GROM-Lizenz hergestellt wurden - die rund 20 Titel von Atari nur beispielhaft genannt (obwohl man das auch als Revanche von TI an Atari wegen Activision ansehen könnte, aber das ist eine andere Geschichte).
Soweit ich weiß hatte danach nur Tigervision eine Reihe an Modulen aufgelegt, die keine Module mehr waren, sondern Sidecars! Von diesen habe ich nur 'Miner 2049er', den ich aber erst untersuchen kann, wenn ich ihn in Händen habe.

ROM-Banking - Thema mit Variationen

Bevor es mit den GROMs losgeht, möchte ich noch ein paar Worte über das ROM-Banking verlieren. Der Adressbereich >6000 bis >7FFF (Memory Block 3, MB3) umfasst bekanntermaßen exakt 8KB, das sog. Modul-ROM. Diesen zu erweitern ist nur möglich, indem sein Inhalt nach Bedarf umgeblendet wird, wobei es komplette Umblendungen gibt (das setzt adressmäßig identische Codesequenzen voraus) sowie teilweise Umblendungen (i.d.R. wird die obere Hälfte ersetzt). Der resultierende Adressbereich ist aber immer MB3.
Die Funktionalität all dessen, was im Modulport steckt, wird bestimmt durch die Signale, die dort verfügbar sind. Diese sind (die Sternchen kennzeichnen Änderungen der QI-Versionen):
  • Adressen A3 bis A15/CRUOUT(*)
  • Daten D0 bis D7
  • GND, +5V, -5V, -0,8V(*)
  • Reset
  • CRUCLK(*) und CRUIN(*)
  • GROM Chip Select und ROM Chip Select
  • DBIN
  • GROM Clock und GROM Ready
Bei den QI-Versionen (auch als 'Late Model' bezeichnet) fehlt die gesamte CRU (bis auf A15, aber das reicht nicht), und die Substratspannung für die GROMs ist auf GND gelegt (braucht man auch nicht).

Das Banking erfolgt immer durch Schreiben auf die Adressen des MB3, aber welche das sind, ist je nach Modul unterschiedlich. Meist wird ein Latch oder ein D-Flipflop verwendet, durch das bestimmte Datenleitungen als zusätzliche Adressleitungen an ein ROM/PROM/EPROM/EEPROM oderwasauchimmer gelegt werden. Dabei gibt es Varianten, die eine sog. Adress-Trap verwenden (wie z.B. bei DSRs für Diskcontroller, wo die Register des Floppy-Controllers oder des System-RAMs aus dem durchgängigen Adressbereich ausgespart werden), oder andere, denen das völlig egal ist (und strenggenommen sehe ich aktuell keinen Grund für Traps im MB3).
Beispiele (NB: diese Angaben stammen von den entsprechenden Foren auf Atariage und sind bislang nicht durch mich verifiziert worden!):
  • Extended Basic: 4 GROMs und 3x4K ROM, mit festem >6000->6FFF und 2x austauschbarem >7000->7FFF
  • Atari Module: da muss ich noch die Platine analysieren...
  • TI-Calc: 1 GROM und 2x8KB ROM, die im oberen 4K Bereich ausgetauscht werden, indem auf >7000, >7002, >7004 und >7006 geschrieben wird - hier werden also die Adressleitungen gelatcht.
  • MBX-Module: Hier fehlen mir genauere Details zu den GROMs, das ROM hat 2 Traps bei >6C00->6FFD (RAM) und >6FFE (Mapper-Byte)

.. einen hab ich noch! - Module auslesen

Wie kommt man denn nun an den Inhalt der Module? Sobald ein Modul steckt, haben wir entweder nur noch TI-Basic (und das kann ohne fremde Hilfe kein Assemblerprogramm ausführen) oder wir kommen gar nicht dort rein, weil uns (siehe Multiplication 1) entweder gar keine Auswahl vorgelegt wird, oder das Modul gleich nach dem Punkt, wo eigentlich das Titelbild kommt, die Kontrolle übernimmt.
Erfahrene TI-Fans werden nun sagen: Geht doch alles ganz einfach mit dem GRAM-Cracker von Millers Graphics! Tja - den muss man aber erst mal haben, und vielleicht noch dazu eine 32K-Speichererweiterung (ist aber kein Muss).
Der Trick mit dem Laden einer Auslesesoftware per Minimem, E/A oder sonstwas, und dem Wechsel des Moduls zu dem, was man auslesen will, scheitert entweder am Reset beim Stecken des Moduls (kann man mit etwas Tesa vermeiden), oder - wenn man den Reset unterbindet - es kommt zum Absturz, weil kurzzeitig die Adress- oder Datenleitungen gestört werden.
Den Reset kann ein per Load-Interrupt aufrufbares Programm möglicherweise 'überleben', aber eben nur möglicherweise. Aber es geht viel einfacher, wenn man ein TIPI-32K oder ein anderes Sidecar mit 32K und Loader-DSR angesteckt hat, vorausgesetzt, das aktuell gesteckte Modul erlaubt den Aufruf von TI-Basic: aus TI-Basic heraus ruft man den Loader mit der passenden Software (z.B. dem snug Memory-Manager) auf und - schwupp - kann man ans Auslesen gehen!
Speichern muss man das natürlich auch irgendwo, aber auch da hilft - sofern man keine PEB hat - eines der Sidecars. ODER man wählt die Warmduscher-Variante und lädt sich die Files aus dem Netz... 😉

Aber das hier ist ja die Kategorie 'Hardware-Projekte' und da darf es schon mal elektrischer werden...
Das Konzept: man baue sich einen Modulport-Adapter für zwei Module: ein assemblerfähiges Modul (Modul A) und das MOC (Module Of Choice, Modul B). Die beiden werden komplett parallel kontaktiert, bis auf ROMS (Pin 34, Cartridge ROM Select - MB3) und GS (Pin 21, GROM Select). ROMS und GS, die beide Low-Aktiv sind, werden an die Eingänge von je 2 OR-Gattern geführt, die anderen Eingänge werden mit 10K an +5V angeschlossen, und über einen Kippschalter wechselseitig an Masse geschaltet, so daß immer ein Gatterpaar pro Modul das Signal durchlässt, und das andere es auf log. High hält. Nun wird Modul A aktiviert (Kippschalter dieser Seite = geschlossen), das System gestartet, die Software geladen, und sobald die Software läuft wird umgeschaltet. Zu beachten ist dann noch, daß man das GROM im Modul initialisieren muss, indem ein Datenbyte gelesen wird - dadurch wird das Adresszähler-Flipflop zurückgesetzt, was für die korrekte Funktion notwendig ist.
Ein Schaltbild spare ich mir - das ist jetzt wirklich zu trivial. Ach ja: die Teile, speziell die Steckverbinder, bekommt man bei Aliexpress, zumindest habe ich meine von dort: den Edge-Connector, den man zuschneiden muss, die 34 Pole für den Modulport, 44 Pole für den Erweiterungsstecker, und 60 Pole für die PEB.

Typ 1 - Multiplication 1

An sich nichts besonderes: drei GROMs, zwei Kondensatoren für +- 5V und ein 100 Ohm Widerstand für den Reset.
Interessant ist vielleicht, daß dieses Modul die Modulauswahl übergeht, und - sobald der Startbildschirm mit dem charakteristischen Beep erscheint - nach dem Drücken irgendeiner Taste direkt die Modulsoftware startet.
An diesem Punkt macht sich übrigens ein Unterschied zwischen den US-Konsolen und denen für den Rest der Welt bemerkbar: alles geht irgendwie zu langsam, was - ich muss das erst an meiner US-Konsole verifizieren - wohl an den 50Hz Interruptfrequenz des VDP liegt, denn die ist in den US-Versionen mit 60Hz bekanntermaßen 20% höher.

Typ 1 - Fitness Training für den 99/4

Das ist eins von den 'very rare' Modulen, denn es ist NICHT Physical Fitness, auch wenn dies - oha - auf der Platine aufgedruckt ist! Es ist die deutsche Version, mit dem auch vom 'Schachmeister' bekannten TI-99/4 Titelbild (siehe unten), die auch inhaltlich etwas anders aufgebaut ist. Und - ebenfalls im Vorgriff auf den Absatz weiter unten - wir haben auch hier den -5V/Reset Kurzschluss - diesmal etwas 'leistungsfähiger' mit einem richtigen Draht. Den habe ich natürlich sofort gegen einen 150 Ohm Widerstand ausgetauscht - logo. Die GROMs sind tatsächlich Baujahr 1980, mithin also mein ältestes Modul derzeit. Mir ist bei diesem Modul übrigens das erste Mal aufgefallen, daß bei manchen die 'Prägung' auf der Bodenplatte um 180 Grad verdreht ist (oder doch 360? Mal ALB fragen...). Das ist kein Spezifikum der 'alten' Module, das scheint insofern Zufall zu sein, als es wohl von dem benutzten Werkzeug bzw. der jeweiligen Produktionslinie abzuhängen scheint.

Typ 2 - Parsec-Variationen

Aktuell habe ich drei verschiedene Parsec-Versionen in der Schublade (sooo selten sind die gar nicht - TE-II habe ich z.B. fünf!), und irgendwie kam ich auf die Idee 'Wiegst die Dinger mal.'. Gesagt, getan - und auf einmal hatten die alle ein unterschiedliches Gewicht (71g, 72g, 75g)!?
Na - flugs aufgeschraubt und gesehen: drei verschiedene Platinen... naja, drei Bestückungsvarianten - die Platinen sind identisch.
Den größten Unterschied dürfte der Elko machen, aber die 3 Gramm der Variante 3, sind das wirklich die Glas-Kondensatoren? Muss ich mal auslöten und wiegen.

Typ 2 - Darf's etwas mehr sein? - Othello

Die Parsec-Platine hat Platz für maximal 3 GROMs. Maximal? Die kann man doch 'stacken', also übereinanderlöten (sieht man bei Extended Basic). Wie dem auch sei - die Typ 2 Platine gibt es auch in anderem Layout für bis zu vier GROMs.

Typ 2 - Video Chess, PCB Rev2, oder: Warum Power Supply 'Power' heißt

Und wieder ein Fall von fehlendem Review vor Produktion - oder? Wer genau hinsieht kann erkennen, daß die Reset-Leitung, die bekanntlich über 100 Ohm an -5V gezogen wird, durchgebrannt ist!
Warum? Naja, da hat jemand einen Kurzschluss gebaut, und die -5V des Netzteils hatten genug Power (sic!), um die Leiterbahn durchbrennen zu lassen. Das hat man dann mit dem 100 Ohm Widerstand (der sich nicht einsparen ließ) wieder gerichtet, und bei Othello (PCB Rev4) sieht man dann die Revision. ... oder war dieses Modul, das zu den frühesten des TI-99 gehört, in dieser Form am TI-99/4 lauffähig, weil dessen Reset-Hardware anders ist?
Wenn man sich den Reset-Schaltkreis ansieht, wird es klarer: der Reset-Pin 5 des Taktgenerators U601 (nur dieser ERZEUGT den Reset - die CPU bekommt Reset von hier) ist zwar recht hochohmig angeschlossen, aber der Kondensator geht mit Plus Richtung Modulport (nach oben raus). Wenn man ihm also direkt kontaktiert, klebt seine Anode über den Draht fest an -5V, die Kathode (und in diesem Moment ist es richtig, von Anode und Kathode zu sprechen, da Elkos ähnlich einer Diode reagieren, wenn man sie verpolt) liegt an +5V - in der Folge fließt ein Strom durch den Taktgenerator und irgendwann gibt einer nach - hier eben die Leiterbahn.

Typ 2 Exkurs - Video Chess == Schachmeister? Strange Phenomena...

Schaut man sich die Labels und die Gehäuse an, denkt man sicher: "Video-Chess ist älter als Schachmeister, aber am Ende ist dasselbe drin."
Mitnichten (die Neffen mal beiseite gelassen...), denn der Schachmeister gehört zur alten Garde der TI-99/4 Module, was auch die mit 3008 recht niedrige PHM-Nummer anzeigt. Und er zeigt das ganz unverblümt im Startbildschirm, den er ziemlich verbiegt und sich als TI-99/4 ausgibt - na gut, billiger bekommt man aktuell keinen 99/4 - oder?
Aber dann wird es 'strange': Die Auswahl des Schachmeister Moduls zeigt den im 99/4 noch vorhandenen Formelrechner, der nichts anderes macht, als die im TI-Basic sowieso vorhandenen Algorithmen der 'Allgemeinheit' in angepasster Form zu präsentieren. Aber wenn man 2 drückt, kommt der Schachmeister, und beim Druck auf 3 passiert... nichts (ob es piept (sic!) kann ich aktuell mangels Audio nicht sagen). In der Anfangsanmiation zeigt das '1983er' Schachmeister-Modul (Made in Italy 1983) übrigens 1979 als Copyright, während das '1979'er Video Chess (Made in USA 1982) dies unterlässt - strange indeed!
Es gibt noch mehr Unterschiede, aber das kommt im Software Dies-und-Das dran. Ach ja: Die Platine ist die neue, ohne den Kurzschluss, aber mit einem Kondensator dort, wo bei Othello eine Drahtbrücke ist?

Typ 3 - Atari Dig Dug

2 ROMs und 2 TTLs ('00: 4x NAND mit 2 Eingängen, '75: 2x 2 bistabile Latches), das ist mal der aktuelle Stand. Nicht alle Atari-Module sind verschraubt, was man recht leicht an dem Abdruck des Schraubenloches im Label erkennen kann. Ist diese Fläche glatt, dann ist das Gehäuse verschweißt! Den Schaltplan liefere ich noch...

Typ 4 - TI Extended Basic - (fast) volle Hütte

2x ROM mit Banking, 4x GROM (2x2 'piggiback' == huckepack) und etwas TT-Logik ('00: 4x NAND mit 2 Eingängen, '74: 2x D-Flipflop mit Preset & Clear), - das ist das übliche TI-XB oder EB. Durch das Banking war ein anderes Platinenlayout erforderlich, und um die Schaltung zu analysieren, muss ich die Bauteile zuerst entfernen.
Das dauert noch ein wenig... mit ca. 80g Gewicht/Masse ist es aber in dieser Liste schon mal der derzeitige Spitzenreiter. Übrigens: Die PCBs der 1980er (schwarz) und der 1982er Version (weiß) sind identisch! Alles richtig gemacht...


To be continued...


Kontakt:
{anyname}@{use_the_url}.net
Alle Bilder auf dieser Seite mit Ausnahme des Case und Miner 2049er (© Hauke H.) wurden von mir erstellt.
Findet ihr sie anderswo, wurden sie hier geklaut!
Letzte Aktualisierung:
2025-11-22 CW