Heute kommen wir zum vorerst letzten Teil der Artikelreihe rund um das ZXC3 Modul. Schon lange hat mich keine „Erweiterung“ mehr so beschäftigt wie diese kleine Cartridge. Für den Preis bietet es schon sehr viel an zusätzlichen Möglichkeiten. Wenn man nur diesen Artikel heute liest und mit diesem Model einfach mal die Möglichkeit hat einen defekten Spectrum zu identifizieren – das ist schon richtig toll. Evt. folgt ja mal noch ein Bericht zu dem schon öfter erwähnten SPECTRA Interface 🙂
1. 128 RAM Tester
Diese 8K ROM Cartridge wurde für den Spectrum 128 und den grauen Spectrum +2, kann aber auch mit dem16K/48K Spectrum verwendet werden. Es verbessert den Speichertest der beim Start des Spectrum 128 Editor ROM durchgeführt wird, welcher folgende Fehlerkategorien nicht erkennen kann:
- es wird nur das erste Byte in jeder 16K RAM Bank getestet und würde daher keine Fehler in anderen Plätzen innerhalb der RAM Bank erkennen
- es tastet nur die Werte FFh und 00h und erkennt daher keine kurzgeschlossenen Lines
- es erkennt kein RAM Paging Fehler die verursachen das die falsche Bank eingeschaltet wird
Sollte das Editor ROM einen Speicherfehler entdecken dann setzt es die entsprechende Randfarbe um anzuzeigen welche 16K Bank fehlerhaft ist. Die Bedeutung der Farben ist wie folgt:
Randfarbe | Fehlerhafte RAM Bank |
Schwarz | 7 |
Weiß | 6 |
Gelb | 5 |
Cyan | 4 |
Grün | 3 |
Magenta | 2 |
Rot | 1 |
Blau | 0 |
Das Spectrum 128 RAM Tester ROM macht einen genaueren Test der 128K RAM und des Paging-Mechanismus der zwischen den verschiedenen 16K Bänken schaltet. Wenn ein Speicherfehler entdeckt wurde dann versucht die Cartridge herauszufinden welche Data-Line oder Adress-Line den Fehler verursacht. Die Cartridge beginnt startet den Test bei den unteren 16K RAM welcher an Adress 4000h – 7FFFh ist, da dieser den Bildschirmspeicher enthält und der Cartridge erlaubt festzustellen ob Nachrichten auf dem Bildschirm angezeigt werden können. Die Cartridge setzt die Randfarbe erst Mal auf weiß und sollte sie einen Fehler innerhalb der unteren 16K RAM finden dann setzt es die Randfarbe entsprechend um die Herkunft des Fehlers anzuzeigen und es finden keine weiteren Tests statt. Die Randfarben haben folgende Bedeutung:
Rand Farbe | Fehler |
Schwarz | Kein RAM vorhanden |
Rot | Schlechte Address Line |
Blau | Schlechte Daten Line |
Wenn eine Address oder Data Line identifiziert wurde dann wird die fehlerhafte Line durch ein Anzahl an weißen Linien im Randbereich angezeigt. Für die Adress oder Dataline 0 wird ein Streifen, für Adress oder Dataline 1 werden zwei Streifen, für Adress oder Dataline 2 werden 3 Streifen, usw. angezeigt. Sollte die fehlerhafte Line nicht identifiziert werden können, wird der Rand keinen weissen Streifen haben.
Wenn ein Dataline Fehler erkannt wird, zeigt das Bild im Hauptbereich mehr Informationen über den Fehler an. Der RAM Tester ermittelt die niedrigste Dataline mit einem Fehler indem die untere 16K Bank mit $01 gefüllt wird um Bit 0 zu prüfen. Wenn alle Bytes korrekt zurückgelesen werden, wird die Bank mit $02 gefüllt um Bit 1 zu prüfen. Wenn immer noch alle Bytes korrekt zurückgelesen werden füllt es die Bank mit $04 um Bit 2 zu prüfen usw. Als Konsequenz daraus werden die Bildschirmdatei und die Attribut-Datei entsprechend dem Wert des Bits gesetzt das getestet wird und stellt daher das Bitmuster am Bildschirm dar. Das Bitmuster das dem Bit entspricht das getestet wird sieht man unten. Beachte das für Bit 6 und Bit7 das Attribut File auf $38 gesetzt wird (weißer Hintergrund, schwarze Farbe), damit das Bitmuster auf dem Bildschirm gesehen werden kann.
Bit | Expected Display Pattern |
0 | schwarzer Hintergrund, blaue, vertikale Linien |
1 | schwarzer Hintergrund, rote, vertikale Linien |
2 | schwarzer Hintergrund, graue, vertikale Linien |
3 | blauer Hintergrund, schwarze vertikale Linien |
4 | roter Hintergrund, schwarze, vertikale Linien |
5 | grauer Hintergrund, schwarze, vertikale Linien |
6 | weißer Hintergrund, schwarze, vertikale Linien (bit Position 6) |
7 | weißer Hintergrund, schwarze, vertikale Linien (bit Position 7) |
Wenn das Bit das durch die Streifen dargestellt wird, nicht geschrieben werden kann, wird ein komplett schwarzer oder weißer Bildschirm erwartet. Wenn das passende Muster für das Bit sichtbar ist, bedeutet das, das das Datenbit geschrieben aber nicht mehr gelesen werden konnte. Beachte, das bei mehreren Data Line Fehlern mehr Muster sichtbar sein können, die das Entschlüsseln der Bedeutung der Muster erschweren könnte.
Wenn die unteren 16K funktionieren, kann das Display benutzt werden und damit kann eine Liste der 16K RAM Bänke die getestet werden angezeigt werden. Wenn eine Bank getestet wurde, wird der Erfolg angezeigt. Die acht 16K RAM Bänke werden ebenfalls durch die Nummern 0 bis 7 dargestellt und diese zeigen die Durchführung an und stellen den Erfolg jeder Bank dar. Ein grüner Hintergrund einer Nummer zeigt an das das Paging der Bank funktioniert, ein roter Hintergrund zeigt einen Fehler an. Wenn eine Bank erfolgreich gepaged werden kann aber die Bank selbst fehlerhaft ist, wird die Nummer in roter Schrift auf grünem Hintergrund angezeigt.
Die oberen 32K des RAM in der Speichermap wird dann getestet die Ergebnisse am Bildschirm dargestellt. Es folgen Tests des Paging-Mechanismus des Spectrum 128 durch den Versuch jede der 16K Bänke in die Speichermap zu pagen. Wenn alles diese Tests scheitern stellt die Cartridge die Frage ob wohl nur ein 16K oder ein 48K Spectrum getestet wird. Wenn eine der Bänke erfolgreich gepaged wurde, fährt die Cartridge mit dem Test der Speicherplätze innerhalb dieser Bänke fort. Wenn irgendein Fehler gefunden wurde, versucht die Cartridge herauszufinden ob der Fehler durch fehlenden Speicher entstanden ist oder durch eine fehlerhafte Address- oder Data Line. Obwohl in der Theorie ein Speicherfehler mehrere Gründe haben kann, bestätigt die Cartridge nur den ersten, den sie gefunden hat.
Beispiele:
Das RAM des Spectrum 128 wird durch sechzehn 4164 RAM ICs generiert. Das sind 1 x64Kb dynamische RAM Chips und habe die IC Bezeichnungen IC6 – IC13 und IC15 – IC22. Die RAM Bänke 1,3,5 und 7 (das „umstrittene“ RAM) wird durch IC6 – IC13 erzeugt, wobei die RAM Bänke 0, 2, 4 und 6 (das unumstrittene RAM) durch IC15 – IC22 erzeugt werden. [Beachte das das Spectrum 128 Service-Handbuch fälschlicherweise behauptet das die Bänke 4-7 das umstritten RAM bilden und die Bänke 0-3 das unumstrittene RAM}. Jeder RAM IC speichert ein spezielles Datenbit für das zugehörige RAM. Beispiel: IC6 speichert die Data Line D0 für alle Adressen innerhalb der RAM Bänke 1, 3, und 7. Daher ist es einfach wenn die RAM Tester Cartridge einen Dataline Fehler findet, diesen direkt einem RAM Chip innerhalb des Spectrum 128 zuzuordnen, wie diese Tabelle zeigt:
Data Line | RAM Chip | Data Line | RAM Chip | |
0 | IC6 | 0 | IC15 | |
1 | IC7 | 1 | IC16 | |
2 | IC8 | 2 | IC17 | |
3 | IC9 | 3 | IC18 | |
4 | IC10 | 4 | IC19 | |
5 | IC11 | 5 | IC20 | |
6 | IC12 | 6 | IC21 | |
7 | IC13 | 7 | IC22 | |
Spectrum 128/+2 Contended RAM (Banks 1, 3, 5, 7) | Spectrum 128/+2 Uncontended RAM (Banks 0, 2, 4, 6) |
Das RAM des 48K Spectrum wird durch acht 4116 RAM ICs für die unteren 16K (umstrittenes RAM) und acht 4532 RAM ICs für die oberen 32K (unumstrittenes RAM) generiert. Das 4116 RAM sind 8 x 16Kb dynamische RAM Chips und haben die IC Bezeichnungen IC6-IC13. Das 4532 RAM sind 8 x 32Kb dynamische RAM Chips und haben die IC Bezeichnungen IC15 – IC22. Jeder RAM IC speichert ein spezielles Datenbit für das zugehörige RAM. Zum Beispiel speicher IC6 die Dataline D0 für alle Addressen innerhalb der unteren 16K. Daher ist es einfach wenn die RAM Tester Cartridge einen 16K oder 48K Spectrum mit einem Dataline Fehler identifiziert diese direkt einem RAM Chip innerhalb des Spectrum zuzuordnen, wie die folgende Tabelle zeigt:
Data Line | RAM Chip | Data Line | RAM Chip | |
0 | IC6 | 0 | IC15 | |
1 | IC7 | 1 | IC16 | |
2 | IC8 | 2 | IC17 | |
3 | IC9 | 3 | IC18 | |
4 | IC10 | 4 | IC19 | |
5 | IC11 | 5 | IC20 | |
6 | IC12 | 6 | IC21 | |
7 | IC13 | 7 | IC22 | |
16K/48K Spectrum Contended RAM (Lower 16K) | 16K/48K Spectrum Uncontended RAM (Upper 32K) |
2. ROM Tester
Diese 8K ROM Cartridge wurde für den Gebrauch mit dem Spectrum 16K, 48K, +, 128 und dem grauen Spectrum+2 entworfen. Es führt einen Test der ROMs im Rechner durch um festzustellen ob sie beschädigt sind. Es prüft auch ob ein ZX Interface 1 angeschlossen ist und stellt die Version fest und ob es beschädigt ist.
Die Cartridge stellt zuerst fest ob sie auf einem 16K, 48K oder 128K Rechner läuft und stellt dadurch fest wie viele ROMs geprüft werden müssen. Es berechnet dann eine 16-bit Pürfsumme und eine exklusive 8-bit Prüfsumme für jedes ROM und stellt diese in Hexadezimal dar. Danach vergleich es diese Prüfsummen mit der bekannten Liste der Spectrum ROM Prüfsummen und zeigt das identifizierte Modell an. Die bekannten ROMs sind:
- UK Spectrum ROM (16K/48K/+)
- UK Spectrum 128 ROM 0
- UK Spectrum 128 ROM 1
- UK Spectrum +2 ROM 0
- UK Spectrum +2 ROM 1
- Spanish Spectrum+ ROM
- Spanish Spectrum 128 ROM 0
- Spanish Spectrum 128 ROM 1
- Spanish Spectrum +2 ROM 0
- Spanish Spectrum +2 ROM 1
- French Spectrum +2 ROM 0
- Scandinavian Spectrum ROM (16K/48K)
- Timex TC2048 ROM
Bei anderen ROMs als die aufgelisteten muss die Prüfsumme manuell verglichen werden. Die Prüfsumme wird durch das Summieren aller Bytes des ROMs erzeugt.Die exklusive Prüfsumme wird erzeigt indem man die XOR’s aller Bytes des ROMs addiert. Die Cartridge prüft dann ob das Interface 1 angeschlossen ist. Dies macht es indem es versucht den Paging Mechanismus des Interface 1 „aufzuwecken“ durch das Ausführen eines Befehls der innerhalb der ROM Cartridge bei $0008 liegt. Wenn ein Interface 1 angeschlossen ist, wird versucht dessen ROM einzubinden auch wenn die ROM Cartridge den Speicher überschreiben wird. Die ROM Cartridge startet dann eine Routine die ins RAM kopiert wird, die die ROM Cartridge entfernt, dann eine Prüfsumme der ersten 8K des Speicherbereichs berechnet und dann die ROM Cartridge wieder einbindet. Das Interface 1 ROM wird dann wieder entfernt durch das Ausführen eines Befehls der innerhalb der ROM Cartridge bei $0700 liegt.
Es wurden zwei Editionen des Interface 1 ROMs veröffentlicht, die beide von der ROM Cartridge identifiziert werden können. Das Edition 2 ROM wurde im Interface 1 verwendet deren Seriennummer größer als 87315 war. Über eine dritte Edition des ROMs gab es Spekulationen, wurde aber nie veröffentlicht. Daher kann es sein, falls die ROM Cartridge die Edition des Interface 1 ROM nicht identifizieren kann (auch wenn in BASIC alle Funktionen des ROM ordentlich funktionieren) das es mit der dritten Edition des ROMs ausgestattet ist.
Die Downloads der beiden Cartridges sind wie immer auf der Homepage von Paul Farrow zu finden:
ZXC3 – Teil 1: Allgemeines zum ZXC3
ZXC3 – Teil 2: Cartridge Programmer Utility/Flash Programmer
ZXC3 – Teil 3: ZX80/ZX81 Emulatoren
ZXC3 – Teil 4: Spectrum 128 Emulator
ZXC3 – Teil 5: Microdrive Emulator/Microdrive Kopierer
ZXC3 – Teil 6: Testprogramme
Hallo Jungsi,
sehr schöne Serie mit schön ausführlichen Artikeln!
Die Hard- und Software von Paul Farrow sind klasse und die Anschaffung lohnt sich wirklich!
Danke – da hast Du vollkommen recht – sobald ich wieder etwas Zeit habe, werde ich mir noch das SPECTRA-Interface „organisieren“.