SAMS - Super Asgard Memory System



ACHTUNG: Hier wird der SAMS Sidecar mit 1MB RAM besprochen.
Obwohl das SAMS für die PEB funktional im wesentlichen identisch ist, gibt es doch ein paar wenige Unterschiede - das ist beim Lesen zu beachten!

Das SAMS, Nachfolger des AMS (oder AEMS, je nach Lesart) verwendet einen TI 74LS612 Memory Mapper zu dem Zweck, für den er gedacht ist...😉 - mit anderen Worten: nichts Aufregendes!
Aber HALT - dann müsste man ja auch nichts darüber schreiben - oder? Ganz genau so ist es, und deshalb mache ich das trotzdem. Aber eins vorweg: Natürlich hat Thierry Nouspikel schon fast alles darüber hier geschrieben, aber er bezieht sich auf die PEB-Version, und auf der verlinkten Seite finden sich leider die üblichen 'Fehlerchen'...
Alsdann...

Funktionsweise des LS612

Der LS612 gehört zu einer Reihe von 'Memory Mappern', die vom LS610 bis zum LS613 reicht, wobei die Unterschiede in dem Typ der Ausgangsschaltung (Tri-State vs. Open Collector) und deren Betriebsart (Transparent bzw. Latch) liegen. Der LS612 besitzt transparente Tri-State Ausgänge.
Das Funktionsprinzip ist so einfach wie undurchsichtig... wobei sich der LS612 zwischen den Adressbus der CPU und einen um ein vielfaches größeren Speicher stellt, in dem er den originären Speicher der CPU abbildet.

Er tut dies, indem er die obersten 4 Adressbits eines Mikroprozessors durch bis zu 12 Bits ersetzt, die aus einem von 16 Mapping Registern kommen, welche mit den genannten 4 Bits adressiert werden.
Der LS612 ist also im Grunde genommen nur ein schnelles 16x12 RAM (70ns Delay über alles!), dessen Adressierung über 4 Bit erfolgt, und dessen 12 Datenleitungen als zusätzliche Adressleitungen für das erweiterte RAM verwendet werden.

Im Fall des TI bzw. des SAMS wird diese Aussage etwas konkreter:
  • Die obersten 4 Bit des Adressbus werden 'oben darüber' um 4 Bit erweitert.
  • Der Adressbereich der TMS9900 CPU wird in 64KB / (2^4) = 4KB große Abschnitte unterteilt, von denen jeder frei in einem Bereich von 256*4=1024 Bytes liegen kann, wobei die Lage durch 16 Map-Register definiert wird.
  • In diesen Map-Registern nutzt das SAMS anstelle der möglichen 12 Bit nur 8, was den nutzbaren Bereich auf 64KB * 2^4 = 1MB begrenzt.
  • Pro 4KB Bereich der CPU gibt es also 256 (2^8) verschiedene Orte, an denen dieser im 'RAM hinter dem Regenbogen bzw. LS612' liegen kann.
  • Hinzu kommt, daß im TI ja nur 32KB an RAM gemappt werden können, d.h. wir brauchen von den 16 Map-Registern nur 8.
    Nicht-RAM Bereiche werden vom SAMS nicht bedient, was von zentraler Bedeutung ist, denn in diesem Fall müsste der LS612 VOR dem gesamten Speicher der TMS9900 liegen.
  • Der Mapper verfügt neben dem Map-Mode über einen transparenten Modus, bei dem die Abbildung 1:1 ist - die oberen 4 Bit gehen direkt durch, und die hinzugefügten Bits sind fest auf 0 gesetzt. Dies wird beim SAMS Sidecar über das CRU-Bit 1 gesteuert.
  • Die Map-Register können auch ausgelesen werden, es ist aber nur das High-Byte (gerade Adressen) gültig.

Ansteuerung im TI-99/4A

Im vorigen Abschnitt wurden schon ein paar Aspekte angesprochen, wie sich das SAMS in den TI-Speicher einordnet, daher wird jetzt die praktische Anwendung beschrieben. Das SAMS besitzt keine eigene DSR, belegt aber die CRU-Basisadresse >1E00 um den Zugriff auf die Mapping-Register freizugeben. CRU-Bit 0 aktiviert den Zugriff auf die insgesamt 8 verfügbaren Register, die an den Adressen >4004->401E liegen. Da nur die von der 32kB-Erweiterung belegten Bereiche gemappt werden können bzw. dürfen, ergibt sich folgende Zuordnung:

Page-Register
Adresse
Speicherbereich
>4004>2000->2FFF
>4006>3000->3FFF
>4014>A000->AFFF
>4016>B000->BFFF
>4018>C000->CFFF
>401A>D000->DFFF
>401C>E000->EFFF
>401E>F000->FFFF
Um das Mapping zu aktivieren, muss das Bit 1 auf der CRU-Adresse >1E00 gesetzt werden, setzt man es zu 0, ist das Mapping aus.
Übrigens: Beim Hardware-Reset des LS612 werden alle Page-Register gelöscht und der Map-Mode ist deaktiviert.
Hier ein paar einfache Beispiele:
*
* Bestimmte Mapping-Seite setzen
*
SETPGE	LI   R12,>1E00		SAMS Basisadresse
	MOVB @PGENUM,R0		Seitennummer (0-255)
	MOV  @MEMRGE,R1		Memory Range nach R1, >2000->F000
	SRL  R1,11		Offset in die Registerliste (12 Bit runter fuer 4K und 1 hoch wegen des 2er Abstands)
	SB0  0			Zugriff auf die Map-Register aktivieren
	MOVB R0,@>4000(R1)	Page festlegen
	SBZ  0			Map-Register wieder ausblenden
	RT			und zurueck von wo immer wir her kamen
*
* Mapping Mode aktivieren
*
MAPON	LI   R12,>1E00		SAMS Basisadresse
	SBO  1			Mapping Mode an
	RT			und weg
*
* Mapping Mode deaktivieren
*
MAPOFF	LI   R12,>1E00		SAMS Basisadresse
	SBZ  1			Mapping Mode aus
	RT			und weg
Recht hilfreich ist auch der SAMS Guide von Lee Stewart.

Die Hardware

Auf der PCB tummeln sich insgesamt 5 Käferchen:
  • 74LS612 - Der Hauptdarsteller
  • 74LS245 - der obligatorische Bustreiber
  • 74LS688 - Adressvergleicher
  • 74LS259 - CRU Latch
  • AS6C8008 - unser 1MB SRAM
... und eine sehr nette Einrichtung haben die Designer auch vorgesehen: mit einem kleinen Schiebeschalter kann man entscheiden, ob man das SAMS über den Erweiterungsbus oder ein separates Netzteil (USB-Buchse vorhanden) versorgen will - prima Sache!

ABER: Schnelle RAMs dieser Ära bzw. Technologie brauchen VIEL Strom, was man an der spürbaren Erwärmung des LS612 erkennen kann (die Gesamtverlustleistung beträgt knapp 1 Watt!). Wenn man also weitere Sidecars anstöpseln will, die über den Erweiterungsport versorgt werden sollen, sollte man sich vorher überlegen, ob das praktikabel ist.


Kontakt:
{anyname}@{use_the_url}.net
Alle Bilder auf diesen Webseiten wurden von mir erstellt.
Findet ihr sie anderswo, wurden sie hier geklaut!
Letzte Aktualisierung:
2026-01-11 CW