Das ROM

ROM steht für read only memory, zu deutsch etwa: Nur-lese-Speicher. Sein Inhalt wird bei der Herstellung einmal fest gelegt und ist danach nicht mehr zu verändern.

In ihm enthalten sind die Anweisungen und Daten, die den ZX81 erst zu einem ZX81 machen: das BASIC, der Zeichensatz, die Routinen zur Erzeugung des Fernsehbild, ein Gleitkommarechner zum Durchführen mathematischen Berechnungen; die Routinen, die Drucker und Kassettenrekorder ansteuern...

Entwickelt wurde es, wie dem Sinclair ZX81 Handbuch zu entnehmen ist, "von einer kleinen Gruppe Cambridger Mathematiker". Obwohl sich diese Formulierung nicht gerade nach einer professionellen Software schmiede anhört, ist das gerade 8KB große ROM dennoch als Meisterleistung anzusehen, angesichts der ungeheuer kompakten Programmierstils und der vielen Tricks und Kniffe, die es enthält, um dem kostbaren und raren Speicherplatz ein Maximum an Effizienz abzuringen.


Bekannte Fehler

It's not a bug, it's a feature. Dieses Microsoft-Zitat bedeutet zu Deutsch etwa: das ist kein Fehler, sondern eine Eigenschaft. Ähnlich muss man auch das ZX81-ROM betrachten: im Laufe der Jahre wurden (wie bei allen anderen Computern auch) Phänomene entdeckt, die man gemeinhin als Fehler bezeichnet - nämlich dann, wenn das tatsächliche Verhalten des Rechners deutlich von dem abweicht, was man eigentlich erwarten sollte oder müsste.

Dabei sind beim ZX81 keine wirklich schwer wiegenden Fehler bekannt, so dass man eher von "Seltsamen Eigenarten mit zu berücksichtigten Seiteneffekten" sprechen müsste.

Der Arithmetik-Bug

Dieser Begriff hat sich für einen Fehler in den Gleitkommaprogrammen des BASIC-ROMs etabliert. Durch einen Fehler wird auf die ersten fünf Bytes des ROMs schreibend zugegriffen. Bei normalen Betrieb fällt dieser Fehler niemals auf, da der Inhalt des ROMs unveränderlich ist und die Schreibbefehle somit keine Wirkung haben.

Anders verhält sich die Sache jedoch, wenn das Original-ROM ausgeblendet und durch ein RAM ersetzt wird, um beispielsweise Änderungen am Betriebssystem oder BASIC vorzunehmen: nun wird der Start-Code des ROM-Abbild überschrieben, die Folge ist ein Systemabsturz.

Abhilfe wurde insoweit geschaffen, dass die Memory-Decoder moderner Speichererweiterungen Möglichkeiten zulassen, die erste 8K-Seite schreibgeschützt zu halten, dabei aber über eine Spiegelung auf eine andere Seite Schreibzugriffe für Modifikationen möglich sind.

Fehler im PAUSE-Befehl

Wenn PAUSE im FAST-Mode benutzt wird oder auf einem ZX80 mit 8K-BASIC muss es von einem POKE 16437,255 gefolgt werden. Andernfalls besteht die Gefahr eines Systemabsturzes.

Wenn Speicherplatz nicht das primäre Problem ist, also gerade bei etwas größeren, schwer zu überschauenden BASIC-Programmen, sollte man sich daher direkt angewöhnen, bei PAUSE auch an diesen POKE zu denken. Andernfalls denkt man bei eventuellen Systemabstürzen erst einmal an überhitzte Rechner, wackelnde Speichererweiterungen, Schwankungen in der Stromleitung oder ungünstigen Mond stand bis man schließlich auf die wahre Lösung stößt.

Unvollständigkeitserklärung

Diese Liste erhebt keinerlei Anspruch auf Vollständigkeit. Sollten Ihnen weitere Fehler bekannt sein oder werden, würde ich mich über eine Mitteilung der Fehlerbeschreibung sehr freuen!

 Nach oben


Typ und Anschlussbelegung

Das ROM kommt im 24-poligem DIL-Gehäuse daher, ist 8 KB "groß" und wurde unter anderem von Mostek produziert. Dort trägt es die aufgedruckte Typenbezeichnung MK 36809-N-IRL. MK steht für Mostek, 36000 für Masken-ROM, die 809 ist die Seriennummer für dieses spezielle Teil. N kennzeichnet ein Plastikgehäuse und IRL steht für die Produktionsstätte in Irland.

Pinbelegung des 8K-BASIC-ROMs von Mostek (MK 36809)

                    _________    _________                    
                  _|         \__/         |_                 
          --> A7 |_|1                   24|_| +5V
                  _|                      |_                  
          --> A6 |_|2                   23|_| A8 <--
                  _|                      |_                  
          --> A5 |_|3                   22|_| A9 <--
                  _|                      |_                  
          --> A4 |_|4                   21|_| A12 <--
                  _|       ZX81 ROM       |_  __                
          --> A3 |_|5                   20|_| CE <--
                  _|                      |_                  
          --> A2 |_|6      MK 36809     19|_| A10 <--
                  _|                      |_                  
          --> A1 |_|7                   18|_| A11 <--          
                  _|                      |_                  
          --> A0 |_|8                   17|_| D7 -->          
                  _|                      |_                  
          <-- D0 |_|9                   16|_| D6 -->          
                  _|                      |_                  
          <-- D1 |_|10                  15|_| D5 -->          
                  _|                      |_                  
          <-- D2 |_|11                  14|_| D4 -->          
                  _|                      |_                  
             GND |_|12                  13|_| D3 -->            
                   |______________________|                   

Die von einem Schrägstrich "/" angeführten Signalbezeichnungen kennzeichnen low-aktive Signale, d.h. das Signal ist dann aktiv, wenn der Nullpegel (ca. 0V) anliegt.

 Nach oben


ROM kaputt - was nun?

Als Ersatzteil ist der Chip praktisch nicht mehr zu bekommen, daher besteht die einfachste und sehr wahrscheinlich preiswerteste Möglichkeit in dem Austausch durch ein mit dem Inhalt des BASIC-ROM gebrannten EPROM vom Typ 2764 oder 27C64. Dieses EPROM fasst ebenfalls 8 KB, allerdings besitzt es im Gegensatz zum 24-poligen Gehäuse des Original-ROMs ein 28-poliges Gehäuse, so dass ein paar Anschlüsse verändert werden müssen.

Einen direkt passendes EPROM als Ersatzteil wurde für einige Zeit ausschließlich von Motorola produziert, ist allerdings bereits seit langer Zeit vergriffen.

Prinzipiell kommen auch andere, größere EPROM- oder Flash-Typen in Betracht, auf deren Einbau hier jedoch aufgrund der wiederum unterschiedlichen Anschlussbelegung nicht weiter eingegangen werden soll. Es ist ausschließlich zu beachten, dass das ROM-Bild in die ersten 8 KB des Chips gelegt werden und alle Adressleitungen des EPROM oder Flashs ab einschließlich A13 auf GND / 0V gelegt werden müssen. Wer mag, kann sich dann noch verschiedene ROM-Images brennen und z.B. per DIP-Schalter sein jeweiliges Betriebssystem der Wahl aussuchen. Siehe hierzu auch das Kapitel Alternativen zum BASIC-ROM.

Pinbelegungen des Original-ROMs (innen) und die Abweichungen zum 2764 (außen)

                    _________    _________                    
                  _|         \__/         |_                 
              NC |_|                      |_| +5V
                  _|         2764         |_                  
         --> A12 |_|_________    _________|_| NC
                  _|         \__/         |_                 
          --> A7 |_|1                   24|_| +5V
                  _|                      |_                  
          --> A6 |_|2                   23|_| A8 <--    Abweichend: 
                  _|                      |_              2764
          --> A5 |_|3                   22|_| A9 <--            
                  _|                      |_                  
          --> A4 |_|4                   21|_| A12 <--      A11 <--
                  _|       ZX81 ROM       |_  __           __
          --> A3 |_|5                   20|_| CE <--       OE <--
                  _|                      |_                  
          --> A2 |_|6      MK 36809     19|_| A10 <--
                  _|                      |_               __ 
          --> A1 |_|7                   18|_| A11 <--      CE <--
                  _|                      |_                  
          --> A0 |_|8                   17|_| D7 -->          
                  _|                      |_                  
          <-- D0 |_|9                   16|_| D6 -->          
                  _|                      |_                  
          <-- D1 |_|10                  15|_| D5 -->          
                  _|                      |_                  
          <-- D2 |_|11                  14|_| D4 -->          
                  _|                      |_                  
             GND |_|12                  13|_| D3 -->            
                   |______________________|                   

Die von einem Schrägstrich "/" angeführten Signalbezeichnungen kennzeichnen low-aktive Signale, d.h. das Signal ist dann aktiv, wenn der Nullpegel (ca. 0V) anliegt.

Bei unserer Reparatur gehen wir davon aus, dass das EPROM dauerhaft im ZX81 verbleiben soll und aufgrund seiner leichten Beschaffbarkeit und geringen Preises geringfügig bearbeitet werden darf. Es sind zwei Beinchen hochzubiegen und zwei Drahtbrücken anzubringen. Im Gegensatz zu dem Umbauvorschlag aus Aribert Deckers "Das kleine ZX-Hardwarebuch" kommt dieser Einbauvorschlag damit aber ohne Änderungen an der Platine des ZX81 aus.

Im ZX81 ist bereits ein 28-poliger Sockel für das EPROM vorhanden und auch die zusätzlichen Pins sind auf der Platine so belegt, wie wir es brauchen. An den oben mit "NC" gekennzeichneten Pins liegt +5V an.

Wichtig: Bei den folgenden Angaben von Pin-Nummern sind die Nummern gemäß der oberen Abbildung MK 36809 / 2764 gemeint, nicht aber die Orginal-Nummerierung des 2764!

Damit kann der Einbau wie folgt von statten gehen:

  1. Brennen des EPROM mit dem ROM-Abbild

  2. Hoch biegen der Beinchen 18 (/CE) und 21 (A11).

  3. Anlöten von kurzen Drahtbrücken auf beide Beinchen.

  4. Die Drahtbrücke des hoch gebogenen Beinchens 18 (/CE) so auf das nicht hoch gebogene Beinchen 20 (/OE) löten, dass dieses noch in den Sockel gesteckt werden kann. Also darauf achten, dass die Drahtbrücke oben auf den breiten Teil des Beinchens, nicht aber unten auf den schmalen Teil des Beinchens gelötet wird!

  5. Einstecken des EPROM in den Sockel der ZX81-Platine.

  6. Einstecken der Verlängerung von Pin 21 (A11) in den freien Pin 18 (A11) des Sockels.

  7. Sicherstellen, dass die Drahtbrücken sich nicht gegenseitig oder andere Beinchen berühren und damit einen Kurzschluss herstellen.

Wenn nun nach Vorschrift verfahren wurde und sich auch kein Fehler eingeschlichen hat, ist der ZX81 nunmehr mit neuem EPROM wieder zu allen Schandtaten bereit!

 Nach oben


Disassembliertes ROM-Listing

Glücklich ist, wer die Bücher von Dr. Ian Logan besitzt. Im Netz geistert an diversen Stellen ein fehlerhafter Scan des Teils A (ZX81ROMA.TXT, 97KB) herum, der Teil B liegt soweit mir bekannt bislang nicht online.

Die Fehler innerhalb des Texts resultieren u.a. aus der Schwierigkeit der Schrifterkennungsoftware, ein l von einer 1 zu unterscheiden, so dass das Listing nicht direkt reassemblierbar ist.

Das beste mir bekannte disassemblierte Listing im Netz liegt auf der Seite The Incomplete Spectrum ROM Assembly - a page devoted to the Z80 based Operating System and Basic Interpreter of the Sinclair ZX Spectrum computer zum Download bereit.

 Nach oben


Alternativen zum BASIC-ROM

Wer eine entsprechende Hardwareerweiterung sein eigen nennt, mit der er sich das ROM seiner Wahl vor einem Systemstart aussuchen kann, der hat mit einem ZX81 eine gewisse Auswahl. Dabei soll diese Liste keineswegs vollständig sein, ich würde gerne noch mehr sammeln!

Name>

Größe

Beschreibung

ZX80-ROM

4096

Damit wird auch ein ZX81 zum "echten" ZX80!

ZX81-ROM

8192

Verbesserte Version, die in den meisten ZX81 enthalten ist.

ASDIS

8192

Assembler / Disassembler (für den Bereich 8-16K)

ASZMIC-ROM

4096

Assembler statt BASIC ;-)

Memocalc

4096

Tabellenkalkulation

H4TH

8192

Forth

Tree Forth

8192

Forth

Lambda-ROM

8192

ZX81-Clone

Power 8300-ROM

8192

ZX81-Clone

ZX97-ROM

32768

Das neue ROM des ZX81-Clones, läft nicht mit einem normalen ZX81




[Home] Home