Das ROM

ROM steht für read only memory, zu deutsch etwa: Nur-lese-Speicher. Sein Inhalt wird bei der Herstellung einmal festgelegt 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 Fernsehbildes, 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 Softwareschmiede anhört, ist das gerade 8KB große ROM dennoch als Meisterleistung anzusehen, angesichts der ungeheuer kompakten Programmierweise 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 Deusch etwa: das ist kein Fehler, sondern eine Eigenschaft. Ähnlich muß 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üßte.

Dabei sind beim ZX81 keine wirklich schwerwiegenden Fehler bekannt, so daß 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 Gleitkommaroutinen 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 Orginal-ROM ausgeblendet und durch ein RAM ersetzt wird, um beispielsweise Änderungen am Betriebssystem oder BASIC vorzunehmen: nun wird der Start-Code des ROM-Abbildes überschrieben, die Folge ist ein Systemabsturz.

Abhilfe wurde insoweit geschaffen, daß 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 muß 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 Mondstand 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 Anschlußbelegung

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 EPROMs 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 daß ein paar Anschlüse verändert werden müssen.

Einen direkt passendes EPROM als Ersatztyp 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 Anschlußbelegung nicht weiter eingegangen werden soll. Es ist aussschließlich zu beachten, daß das ROM-Bild in die ersten 8 KB des Chips gelegt werden und alle Adreßleitungen des EPROMs 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 Orginal-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, daß 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 EPROMs mit dem ROM-Abbild
  2. Hochbiegen der Beinchen 18 (/CE) und 21 (A11).
  3. Anlöten von kurzen Drahtbrücken auf beide Beinchen.
  4. Die Drahtbrücke des hochgebogenen Beinchens 18 (/CE) so auf das nicht hochgebogene Beinchen 20 (/OE) löten, daß dieses noch in den Sockel gesteckt werden kann. Also darauf achten, daß die Drahtbücke oben auf den breiten Teil des Beinchens, nicht aber unten auf den schmalen Teil des Beinchens gelötet wird!
  5. Einstecken des EPROMs 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, daß die Drahtbrücken sich nicht gegenseitig oder andere Beinchen berühren und damit einen Kurzschluß 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 Textdokuments resultieren u.a. aus der Schwierigkeit der Schrifterkennunssoftware, ein l von einer 1 zu unterscheiden, so daß 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