Sinclair ZX81 Emulator V2.1
===========================


Vorgeschichte
~~~~~~~~~~~~~ 
Es war einmal... damals...  genauer  gesagt achtzig/einenachtzig... in den An-
tennen... als wir noch  schwarz/wei sahen... und als wir noch  jung und schn
waren... damals... als alles begann...

... also damals, da gab es eigentlich noch keine Handbcher und README-Dateien
und ich htte niemals auch nur  einen Gedanken daran verschwendet, so eine An-
leitung zu tippen.  "Press any key to start"  reichte da noch vllig aus. Aber
heutzutage geht es wohl doch nicht mehr ohne. Also noch einmal von vorne...

Wie gesagt, es begann  damals, im Jahre 1980. Schon zu  dieser Zeit hatten ei-
nige Leute  bemerkt, da die Mikroprozessoren  der Firma Intel  nichts taugen,
eine neue Firma  namens ZILOG gegrndet und einen  neuen Mikroprozessor namens
"Z80" entworfen. Der Name Z80 kommt  allerdings nicht daher, da dies im Jahre
1980 passiert war, denn da war der  Z80 schon vier Jahre alt, sondern weil der
Z80 eine Verbesserung des Mikroprozessors 8080  war und auerdem von ZILOG. Im
Jahr 1980 kam dann ein spleeniger Englnder  auf die Idee, da der Z80 an sich
eigentlich auch nicht so das Gelbe vom Ei wre, und fgte 1 kByte RAM, 4 kByte
ROM, einen  Modulator zum  Anschlu eines  Fernsehers und  eine Folientastatur
hinzu. Einzig im Namengeben war dieser  Englnder nicht so erfindungsreich, er
nannte das  fertige Gert einfach "ZX80",  was wohl soviel wie  "Z80, extended
version" bedeuten sollte. Aber Clive Sinclair, so der Name des ZX80-Erfinders,
wre nicht  Clive Sinclair gewesen,  wenn er den  ZX80 nicht noch  kleiner und
billiger gemacht htte. Er  packte alles, was der ZX80 auer  Z80, RAM und ROM
noch brauchte, in ein  einziges IC, so da der fertige  Computer nur noch vier
ICs in seinem  Inneren hatte. Aus den 4  kByte ROM wurden 8 kByte  ROM, in die
Sinclair mit  Hilfe einiger  englischer Mathematiker das  ganze Betriebssystem
und ein  brauchbares BASIC  stopfte. Das  fertige Gert  bekam dann  den Namen
"ZX81", weil inzwischen  schon ein Jahr vergangen war und  Sinclair immer noch
nicht einfallsreicher im Namengeben geworden war.

Warum ich  diese Geschichte  erzhle? Nun,  eben diesen  Computer namens  ZX81
bildet das beiliegende Programm ZX81.PRG auf  dem Atari ST softwaremig nach.
Die Geschichte  des Atari ST erzhle  ich allerdings hier nicht,  das kann mal
jemand machen, der einen Atari-Emulator schreibt.  Ein Programm, das einen an-
deren Computer  nachbildet, nennt  man auch einen  "Emulator". Somit  wre ge-
klrt, was ein "Sinclair ZX81 Emulator" ist. "V2.1" bedeutet "Version 2.1" und
das wiederum bedeutet, da der Autor  nach der ersten Version immer noch nicht
genug hatte und das Programm weiter perfektioniert hat. Verrckter Kerl.

Nun eine andere Frage. Warum berhaupt  ein ZX81-Emulator? Nunja, was soll ich
sagen? Diejenigen,  die den ZX81 kennen,  wissen warum, und die  anderen haben
mit Sicherheit nicht bis hierhin gelesen.

Der ZX81 ist  einfach eine Legende. Fr einen Computerfreak  bedeutet der ZX81
vielleicht das, was die Tin Lizzy fr einen alten Auto-Liebhaber bedeutet. Als
mein Bruder und ich  ihn 1981 zu Weihnachten geschenkt bekamen,  habe ich mich
sofort in das kleine schwarze Kstchen  verliebt. Zum Leidwesen meiner Freunde
und Verwandten  sa ich Tage  und Nchte  davor, auf Omas  alten Schwarz/Wei-
Fernseher starrend, auf dem meistens flimmernde schwarz/weie Streifen hin und
her huschten,  die nur  ab und  an von  einer aussagekrftigen  Mitteilung wie
"E/0" unterbrochen  wurden. Als  dann das  Buch  "Programmierung des Z80"  von
Rodnay Zaks dazukam, war  meine Begeisterung fr den ZX81 nicht  mehr zu brem-
sen. Ein Freund von  mir war genauso angetan davon und  wir machten als Schul-
kinder sogar einen kleinen Handel  mit selbstgeschriebenen Programmen auf. Wir
hrten aber  schnell wieder damit  auf, als wir  gemerkt hatten, wie  gro die
Nachfrage war  und wieviel Arbeit  da auf uns  zu kam. Schlielich  hatten wir
sowieso keine Zeit, das  verdiente Geld auszugeben, weil wir ja  immer vor dem
"blden Ding"  saen, wie  unsere Eltern  den ZX81 nannten.  Denn auch  an der
Hardware gab es damals viel zu Basteln.

Vielleicht  ist an  dieser  Stelle auch  eine  kleine  Anekdote ber  besagten
Schulfreund angebracht, ich hoffe er wird  es mir verzeihen. Damals hatten wir
nmlich noch keinen Assembler und muten uns die Codes mhsam aus Rodnay Zaks'
Buch zusammensuchen und dann  in den ZX81 "poken". Er hatte  es geschafft, ein
mehrere Seiten langes, kompliziertes  Assembler-Programm whrend einiger lang-
weiliger Schulstunden  zu schreiben.  Was mich dann  aber doch  verblfft hat,
war, da schon alle Maschinensprache-Codes fertig daneben standen. Er mu fast
alle Z80-Opcodes  auswendig gekonnt haben. Und  das dezimal - die  Vorzge des
Hexadezimalsystems hatte  er damals wohl  noch nicht eingesehen.  Das Programm
ist brigens heute noch erhalten, es ist das "3D_LABYR.81".

Spter habe ich dann doch einen  Assembler geschrieben, der ebenfalls noch er-
halten ist, nmlich  "ASSEMBLE.81". Aber auch der mute  natrlich erst einmal
per Hand in Maschinencode bersetzt werden.

Die ganze  ZX81-Herrlichkeit hielt allerdings nur  zwei oder drei  Jahre. Dann
kam endlich Ton und  Farbe ins Spiel. Von Commodore war  nmlich der "C64" er-
schienen, den man,  um beim Vergleich mit  Autos zu bleiben, als  eine Art "VW
Kfer" ansehen kann. Aber  auch Clive Sinclair war nicht faul  und brachte den
"ZX Spectrum"  auf den Markt. Irgendwie  hatte er das mit  dem Namengeben auch
inzwischen gelernt.  Der "Speccy"  war zwar  in mancher  Hinsicht der  bessere
Computer, aber der "64er" war wegen seines Soundchips, der vielen kursierenden
Programme und  der Aussicht, einmal einen  anderen Mikroprozessor als  den Z80
maltrtieren zu knnen,  noch etwas verlockender. So investierten  wir das mit
dem Software-Handel verdiente Geld in einen Commodore 64.

Wieder drei  Jahre spter  erschien dann  der Atari ST.  Die Farbe  war wieder
verschwunden und  nun stand auf  dem Tisch  statt des Fernsehers  ein seriser
Monochrom-Monitor. Und irgendwie keimte da in mir die Idee auf, den alten ZX81
wiederzubeleben. Als dann noch ein CP/M-Emulator  fr den Atari ST auftauchte,
wurde mir klar, da  es mglich war, den ZX81 originalgetreu  auf dem Atari ST
nachzubilden. Das hat mir dann natrlich  keine Ruhe mehr gelassen. Nach einer
Woche und einigen neugierigen Blicken in besagten CP/M-Emulator krabbelten die
ersten ZX81-Zeichen  ber den  Atari-Monitor. Aber  die Bildschirmausgabe  des
ZX81 ohne Videochip war  eine harte Nu, und so dauerte  es nochmal eine ganze
Weile, bis ein pltzlich auftauchendes ZX81-ROM-Listing sowie ein Gesprch mit
einem ehemaligen  ZX81-Hardware-Experten Licht  in diese  wirklich genial-ver-
zwickt-sparsame Angelegenheit  brachten. Schlielich  war die Version  1.0 des
ZX81-Emulators fertig. Leider erlaubte aber die  Firma Amstrad nicht, das Pro-
gramm irgendwo  zu verffentlichen. Zwei Jahre  spter, nachdem der  ZX81 auch
von Amstrad  nicht mehr verkauft wurde,  konnte das Programm dann  leicht ver-
bessert als Version 1.1 in der Zeitschrift "TOS" erscheinen.

Ich hatte nicht damit gerechnet, daraufhin  soviel "Fan-Post" zu bekommen. Al-
len Schreibern an dieser Stelle herzlichen Dank. Im Laufe der Zeit hatten sich
einige  sinnvolle  Verbesserungsvorschlge  angesammelt,   auerdem  lief  der
ZX81-Emulator auf  schnelleren als  den Standard-68000-8MHz-Ataris  einfach zu
schnell. Als  ich dann auf  den Atari TT umgestiegen  bin, war klar:  Es mute
einfach  noch eine  Version des  ZX81-Emulators geben,  die auch  mit dem  19-
Zoll-Monitor zurechtkommt. Nur so  konnte das Original-ZX81-Feeling wie damals
auf Omas  altem Schwarz/Wei-Fernseher  wiederhergestellt werden. Hier  ist es
also wieder!


Neuerungen ab der Version 2.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Fr diejenigen, die  schon Version 1.0 oder 1.1 des  ZX81-Emulators kennen und
nur wissen wollen, was  sich ab der Version 2.0 gendert  hat, hier eine Liste
der wesentlichen Neuerungen:

 - Neben der mittleren und hohen ST-Auflsung wird jetzt auch die mittlere und
   hohe TT-Auflsung untersttzt.
 - Die Geschwindigkeit  des ZX81  ist  nun  fr den  SLOW- und  den FAST-Modus
   getrennt einstellbar.
 - Das Dunkeltasten des Bildschirms im FAST-Modus kann abgeschaltet werden.
 - Der Nummerntasten-Block kann als Hex-Eingabefeld benutzt werden.
 - Speicherblcke im ZX81 knnen auf Diskette geladen und gespeichert werden.
 - Smtliche Parameter lassen sich in ZX81-Programmen speichern  und aus ihnen
   laden, so da Programme stets mit den passenden Parametern verknpft sind.
 - Bei jedem  ZX81-Reset knnen  automatisch die Parameter  und ein beliebiger
   Speicherblock in den ZX81 geladen werden.
 - Die Alternate-Taste  hat nun  eine andere  Funktion bekommen:  Sie schaltet
   nicht mehr  auf die Tasten-Belegung mit Shift des Atari um, sondern auf die
   normale Tasten-Belegung  des Atari.  Tasten, die  man beim  Atari mit Shift
   erhlt,  mssen  nun  mit  Shift-Alternate  angesprochen  werden.  Mit  der
   CapsLock-Taste kann der Atari-Tasten-Modus jetzt festgeklemmt werden.
 - Die Funktionstasten entsprechen jetzt der obersten Zeile der ZX-Tastatur.
 - Man kann  nun im  ZX81 beliebige Dateinamen eingeben,  auch mit Pfadangaben
   und Wildcards. Der normale Schrgstrich "/" wird dabei in den Backslash "\"
   umgewandelt. Dadurch lassen sich beliebige Dateien auch ohne den Umweg ber
   die Datei-Auswahlbox erreichen.
 - Nun sind auch ".", SPACE, SHIFT und NEW LINE als Joystick-Tasten benutzbar.
   Man gebe "^" oder "~" fr SHIFT und "\" oder "|" fr NEW LINE ein.

In der Version 2.1 muten nochmal einige Kleinigkeiten verbessert werden, z.B.
gab es in  den Farbmodi von STEs  und TTs einen leichten  Grauschleier und das
Dunkeltasten konnte nicht  abgeschaltet werden. Ab Version 2.1  sollte es auch
unter Multi-TOS keine  Probleme mehr geben. Multitasking ist  aber leider "aus
technischen Grnden" trotzdem nicht machbar.

Die ZX81-Programmsammlung  konnte dank Andreas Steinbacher  nochmal wesentlich
erweitert werden. Es ist schon erstaunlich, wieviele Pacmans, Scrambles, Crazy
Kongs und Froggers damals programmiert worden sind.


Bedienung des ZX81-Emulators
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Wie gesagt,  dieses Programm emuliert Sinclairs  legendren 8-Bit-Homecomputer
ZX81 auf dem  Atari ST. Es wird keine  weitere Hardwareuntersttzung bentigt,
und trotzdem wird fast alles originalgetreu emuliert.

Darunter fllt auch die Tastatur. Da der ZX81 keinen Tastaturpuffer hatte (wer
die Tastatur kennt, wei auch warum),  ist etwas Geduld bei der Eingabe erfor-
derlich. Die Tastaturbelegung entspricht  ebenfalls dem Original. Das bedeutet
insbesondere, da  die Tasten  Y und  Z gegenber  der deutschen  Tastatur des
Atari vertauscht  sind und die  meisten Sonderzeichen woanders  liegen. Dieses
Problem wird aber dadurch gemildert, da erstens ber die Help-Taste jederzeit
die Tastaturbelegung  des ZX81  angezeigt werden  kann, und  man zweitens  die
Mglichkeit hat, durch gleichzeitiges  Drcken der Alternate-Taste die normale
Tastatur-Belegung des  Atari zu  benutzen. Diesen Atari-Tasten-Modus  kann man
mit der CapsLock-Taste auch festklemmen. Da  der ZX81 sowieso nur Grobuchsta-
ben kennt, ist die CapsLock-Taste im ZX81 fr diesen Zweck frei.

Einige Zeichen auf der Atari-Tastatur kennt der ZX81 nicht. Grundstzlich gibt
es wie gesagt nur Grobuchstaben.  Kleinbuchstaben, Umlaute und Buchstaben mit
Akzenten werden durch den jeweiligen  groen Grundbuchstaben ersetzt. Die wei-
teren Ersetzungen sind in der folgenden Tabelle aufgeschlsselt:

            Atari ST        ZX81
            --------------------------------
            \               /
            ^               **
            ' und `         "
            [ und ]         < und >
            { und }         ( und )
            # und +         
            @               C (AT)
            ! und ~         N (NOT)
            &               SHIFT 2 (AND)
            |               SHIFT W (OR)

            Shift           SHIFT
            Control         FUNCTION
            Insert          GRAPHICS
            Delete          RUBOUT
            Backspace       RUBOUT
            Esc, Tab        EDIT
            Leertaste       SPACE
            Return          NEW LINE
            Clr Home        V (CLS)

Neben dem Anzeigen der Tastaturbelegung mit der Help-Taste steht jederzeit ein
anderes Hilfsmittel ber  die Undo-Taste zur Verfgung,  nmlich die Emulator-
Kontrollbox. Zu den Einstellungen in dieser Dialogbox im Einzelnen:

Neben dem Symbol "Power Pack" kann man dem Speicherausbau whlen. Standard war
hier wohl eine 16-kByte-Erweiterung. Nach  einem Wechsel der Speichergre ist
ein Reset erforderlich. Der Ausbau auf 48 kByte ist allerdings mit Vorsicht zu
genieen. Hier wird einfach  RAMTOP auf das Ende des 64  kByte Adressraums ge-
setzt, erhlt  also den Wert 0.  Abgesehen davon, da der  ZX81 hier natrlich
einen positiven Wert erwartet, kann in den oberen 32 kByte eigentlich auch von
der ZX81-Hardware kein RAM adressiert werden.

Naben dem  Joystick-Symbol kann man  den 4  Richtungen und dem  Feuerknopf des
Joysticks in Port 2 jeweils eine  Taste des ZX81 zuordnen. Als Joystick-Tasten
sind alle 40 Grund-Tasten des ZX81  zugelassen, also "0" bis "9", "A" bis "Z",
".", " " fr SPACE, "^" oder "~" fr SHIFT und "\" oder "|" fr NEW LINE.

Mit den Knpfen neben  dem Symbol "Keypad" kann man die  Belegung des Nummern-
tasten-Blocks whlen,  "Num" steht  fr die  Standard-Belegung mit  Zahlen und
Rechensymbolen, bei  "Hex" werden statt  der Rechensymbole die  Buchstaben "A"
bis "F" zur  Eingabe von Hexadezimalwerten verwendet und bei  "Cur" werden die
Tasten 2, 4, 6  und 8 als Cursortasten verwendet. Diese  Belegung des Nummern-
tasten-Blocks gilt  natrlich nur fr den  ZX81-Tasten-Modus, im Atari-Tasten-
Modus mit Alternate oder CapsLock gilt die Standardbelegung.

Darunter befindet sich ein Knopf, der mit "Black out" beschriftet ist. Hiermit
kann man whlen, ob  im FAST-Modus des ZX81 der Bildschirm  wie beim Original,
whrend der Computer arbeitet, dunkelgeschaltet werden soll oder ob er einfach
stehen bleiben soll. Das nervige Geblinke entfllt dann.

Rechts daneben befinden sich zwei "Regler",  die mit SLOW und FAST beschriftet
sind. Damit  lt sich die Geschwindigkeit  des ZX81 im SLOW-  bzw. FAST-Modus
einstellen. Die  Regler sollten normalerweise ganz  oben stehen, dann  ist die
Emulation  "so schnell es geht". Bei einem  Standard-68000-8MHz-Atari ist dann
der SLOW-Modus  etwa gleich  schnell wie  beim Original,  whrend der  ZX81 im
FAST-Modus dem  Atari davonluft. Dieses unterschiedliche  Verhalten rhrt da-
her, da  der ZX81 im SLOW-Modus  durch den Bildschirmaufbau, den  der Z80 zum
grten Teil selbst  erledigen mu, sehr stark abgebremst wird.  Der Atari mit
seiner Video-Hardware hat  hier eindeutig die besseren  Karten. Im FAST-Modus,
wo es  nur auf  die Rechenleistung  der CPU ankommt,  wird hingegen  der Atari
durch die Emulation  eines fremden Prozessors stark  gebremst. Bei schnelleren
als  den Standard-68000-8MHz-Ataris  laufen die  ZX81-Programme im  SLOW-Modus
jedoch zu schnell ab, was besonders bei Spielen fatal ist. Hier mu der Regler
fr den SLOW-Modus heruntergeschoben werden. Im  FAST-Modus kann das kaum pas-
sieren, und  wre auch normalerweise kein  Nachteil. Der Regler fr  den FAST-
Modus kann also eigentlich immer am oberen Anschlag stehen.

Rechts oben befindet sich ein "Memory Block" titulierter Kasten mit den beiden
Knpfen "Load" und "Save". Hiermit kann  man einen Speicherblock im Adressraum
des ZX81 laden oder  speichern, nachdem man unter "Start ..."  und "Bytes ..."
den Anfang und die Lnge des Blocks eingegeben hat.

Die Knpfe "ZX81 Break"  und "ZX81 Reset" bewirken genau  das, was draufsteht,
nmlich einen Abbruch des laufenden ZX81-Programms  oder einen Reset des ZX81.
Mit "Quit Emulator" kann der Emulator verlassen werden.

Mit den Knpfen "Load Parameters"  und "Save Parameters"  knnen die Emulator-
Einstellungen auch geladen und abgespeichert  werden. Dies geschieht immer aus
oder in ein vorhandenes ZX81-Programm. Die  Programme sind so immer gleich mit
den richtigen Einstellungen  verknpft. Die Programme bleiben  auch nach Spei-
chern der Parameter ZX81-kompatibel, da  die Parameter im ungenutzten Drucker-
puffer in den Systemvariablen gespeichert werden.

Findet der ZX81-Emulator bei einem  Reset ein ZX81-Programm namens "ZX81.INF",
so werden dessen Parameter automatisch  geladen. Findet er einen Speicherblock
namens "ZX81.MEM",  so wird  auch dieser geladen.  Die Parameter  werden dabei
zuerst geladen und  knnen so die Adresse bestimmen, an  die der Speicherblock
geladen wird. Eine  denkbare Anwendung dafr ist das Laden  eines anderen Zei-
chensatzes als Block von $0200 Bytes ab der Adresse $1E00 im ZX81-Speicher.


Die Z80-Emulation
~~~~~~~~~~~~~~~~~ 
Das Kernstck im ZX81-Emulator ist natrlich die Emulation des Z80-Prozessors.
Damit aber  auch auf  den schon mehrfach  zitierten Standard-68000-8MHz-Ataris
zumindest  im SLOW-Modus  die originale  ZX81-Geschwindigkeit erreicht  werden
konnte, wurden dabei u.a. folgende Abstriche gemacht:

Der Z80-Stack wird  auf Motorola-Art behandelt. Die beiden  Bytes von Adressen
werden also auf  dem Stack vertauscht abgelegt. Auerdem kommt  es dadurch auf
Ataris mit 68000  zu Problemen bei einer ungeraden  Adresse des Stackpointers.
H- und N-Flag  werden nicht gesetzt, insbesondere  funktioniert der Z80-Befehl
"daa" dadurch  nicht korrekt.  Die Parittsfunktion  des P/V-Flags  wird nicht
emuliert. Nur  bei zwei  Z80-Befehlen wird  das Schreiben  in den  ROM-Bereich
verboten, weil sich das ZX81-8K-ROM damit sonst selber lschen wrde. Generell
kann man sagen, da mindestens alle  Funktionen, die vom ZX81-ROM benutzt wer-
den, korrekt emuliert werden.


Das Cassetten-Interface
~~~~~~~~~~~~~~~~~~~~~~~ 
Als Tribut an  den Fortschritt der Technik wurde  das berhmt-berchtigte Cas-
setteninterface ersetzt durch die Mglichkeit, Programme von Diskette zu laden
oder auf  Diskette zu speichern.  Man kann  natrlich auch eine  Harddisk oder
RAM-Disk oder ein  anderes Laufwerk verwenden, auf das man  mit dem TOS-Datei-
system zugreifen kann. Die  Zeiten ausgedehnter Kaffeepausen oder Waldspazier-
gnge, nach  deren Ende man feststellte,  da der Lautstrkeregler  eine Prise
niedriger gedreht werden mute,  sind damit leider unwiederbringlich verloren.
Es sei denn,  man mchte seine alten ZX81-Programme  auf Diskette berspielen.
Dazu mehr  unter  "Hufig gestellte Fragen". Man  ldt Programme von  Disk mit
LOAD "programmname" oder  einfach mit LOAD "". Im letzten  Fall erscheint dann
die Datei-Auswahl-Box.  Speichern geht genauso, nur  mit SAVE statt  LOAD. Die
Programme sollten die  Endung ".81" haben. Beim Eingeben  der Programmnamen im
ZX81 ist zu beachten, da die Zeichen "?", "*", ":", "/" und "." beim Atari im
Gegensatz zum ZX81  eine besondere Bedeutung haben. Die  Dateinamen drfen bis
zu 250 Zeichen  lang sein, obwohl bei den  bisher gebruchlichen TOS-Versionen
der Name  nach 8 Zeichen abgeschnitten  wird. Falls keine  andere Datei-Endung
angegeben ist, wird ".81" angehngt, und falls keine Pfadangaben gemacht sind,
wird der aktuelle Zugriffspfad verwendet,  mit dem der ZX81-Emulator gestartet
wurde.  Beim  ZX81 werden  die  Variablen  und der  Bildschirminhalt  brigens
grundstzlich mit abgespeichert.


Der ZX81-Drucker
~~~~~~~~~~~~~~~~ 
Der ZX81-Drucker wird  nicht emuliert. Die Befehle LPRINT und  LLIST fhren zu
einer entsprechenden  Fehlermeldung. Bildschirm-Hardcopys  ber Alternate/Help
oder COPY sind allerdings mglich.


Kleine Kostprobe gefllig?
~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Wie, Sie haben  keine Lust mehr, diese Anleitung weiterzulesen  oder das ZX81-
Handbuch aus  dem Keller zu holen  und wollen den ZX81-Emulator  jetzt einfach
direkt ausprobieren? Na gut.

Nach dem  Starten des Emulators  und Drcken des  Knopfes "GO ZX81"  sehen Sie
erst einmal eine kleine  Weile gar nichts, weil der ZX81  ja erstmal einen or-
dentlichen Reset  durchfhren und  alles initialisieren mu.  Danach erscheint
links unten ein invertiertes K, welches den Eingabe-Cursor darstellt. Der ZX81
wartet also nun auf Ihre Eingabe. Der Buchstabe K bedeutet, da genauer gesagt
auf ein  BASIC-Kommando gewartet wird.  Beim ZX81  mu man nun  nicht mhselig
LOAD oder  LIST Buchstabe fr  Buchstabe eingeben,  sondern es gengt  ein Ta-
stendruck. Meist ist es der Anfangsbuchstabe des Kommandos, oder eine Taste in
der Nhe  davon. Im Falle von  LOAD ist es die  Taste "J". Man kann  dies aber
jederzeit nach  Druck auf  die Help-Taste  selbst herausfinden.  Versuchen Sie
also mal, das Programm  "Crazy Kong" mit dem Befehl LOAD  "KONG" zu laden. Sie
tippen ein "J", daraufhin erscheint das  Kommando LOAD und der Cursor wechselt
von einem  invertierten K zu einem  invertierten L. Damit wird  angezeigt, da
der ZX81 nun auf die Parameter  des Kommandos wartet, also auf das "KONG". Die
beiden Gnsefchen erreichen sie entweder  mit der Kombination Shift-"P" (wie
beim ZX81) oder,  wenn Sie dabei noch Alternate gedrckt  halten oder CapsLock
aktiviert haben, mit  der Kombination Shift-"2" (wie beim  Atari). Noch einfa-
cher kann man die Gnsefchen mit  der Hochkomma-Taste erreichen, denn da der
ZX81 kein Hochkomma  hatte, ist es im Emulator kurzerhand  durch die Gnsef-
chen ersetzt worden. Wenn Sie sich  vertippt haben, knnen Sie die Eingabe je-
derzeit mit den  Cursortasten und Backspace korrigieren. Das  geht alles etwas
schwerfllig, weil der ZX81 keinen Tastaturpuffer  hatte, aber so war das eben
damals. Zum Schlu drcken Sie die Return-Taste, die der Taste "NEW LINE" beim
ZX81 entspricht und  das LOAD-Kommando ausfhrt. Falls sich  auf dem Datei-Zu-
griffspfad, mit dem  der Emulator gestartet wurde, nun  das Programm "KONG.81"
befindet, und  das sollte  eigentlich so  sein, erhalten  Sie die  Rckmeldung
"0/0", die bedeutet, da das LOAD-Programm ordnungsgem ausgefhrt wurde. Die
erste Null  steht fr "OK",  und die zweite fr  Programmzeile 0, das  ist die
Zeile fr Direkt-Eingabe, in der Sie  gerade getippt haben. Andernfalls erhal-
ten Sie  etwa die Fehlermeldung "E/0".  In diesem Fall knnen  Sie z.B. versu-
chen, das Programm "Crazy  Kong" mit dem Kommando LOAD ""  ber die Datei-Aus-
wahlbox des  TOS zu suchen. Einige  Programme starten sich nach  dem Laden von
selbst. Da dies bei "KONG" offensichtlich  nicht der Fall ist, mssen Sie noch
den Befehl RUN eingeben, was mit einem  Druck auf die Taste "R" getan ist, und
ihn mit  der Return-Taste ausfhren lassen.  Ich habe das Programm  "KONG" ge-
whlt, weil  es eine  kurze Erklrung anzeigt,  was bei  ZX81-Programmen sonst
meist nicht der Fall ist. Man kann das Programm brigens auch mit dem Joystick
in Port 2 bedienen. Nur die Leertaste darf man nicht drcken, denn das bewirkt
beim ZX81 ein BREAK, also einen Abbruch des laufenden Programms.


Das leidige Thema
~~~~~~~~~~~~~~~~~ 
Dies ist normalerweise das Thema "Shareware-Gebhr". Aber hier haben Sie Glck
gehabt. Der  ZX81-Emulator ist vllig umsonst,  "fr lau", wie man  bei mir zu
Hause sagt, "fr umme",  wie man hier in Heidelberg sagt  oder "Freeware", wie
der Computerfreak sagt. Sie  drfen ihn, soweit Sie dies privat  und nicht auf
kommerzieller Basis  betreiben, nach  Belieben weiterkopieren. Das  setzt aber
voraus, da  Sie alle dazugehrigen  Dateien, also  den Emulator an  sich, die
Anleitungstexte und auch die ZX81-Programme nicht ndern. Sie knnen natrlich
nach Belieben Texte oder Programme hinzufgen,  aber bitte lassen Sie die vor-
handenen Dateien so, wie sie sind. Vorsorglich weise ich an dieser Stelle auch
darauf hin,  da das Copyright  der im ZX81-Emulator  eingebauten ROM-Software
wahrscheinlich bei  Amstrad, auf jeden Fall  nicht bei mir liegt,  und da ich
irgendwelche  Copyright-Verletzungen beim  Kopieren  des  Emulators nicht  auf
meine Kappe nehme. Ich denke aber, das sollte heute kein Thema mehr sein.

Mit PD-Versendern und anderen Anbietern, die PD- bzw. Freeware verkaufen, habe
ich bisher leider nur schlechte Erfahrungen gemacht. Oft werden veraltete oder
fehlerhaft  kopierte Versionen  in  Umlauf gebracht,  der PD-Versand  verdient
trotzdem daran,  aber der  arme Programmautor  mu die  ganzen Fehlermeldungen
beantworten. PD-Versender  und sonstige kommerzielle Anbieter  bitte ich also,
mich von der  Aufnahme meiner Programme in ihr Angebot  zu benachrichtigen und
eine Sonderspende locker zu machen. Meine Anschrift:

            Christoph Zwerschke
            Am Steinfeld 4, D-59379 Selm-Cappenberg, Germany


Hufig gestellte Fragen
~~~~~~~~~~~~~~~~~~~~~~~ 
Erfahrungsgem wurden einige Fragen  zum ZX81-Emulator immer wieder gestellt,
weswegen ich versuche, sie hier direkt in der Anleitung zu beantworten:

F: Gibt es noch andere ZX81-Freaks auer mir?
A: Die  gibt es  in der  Tat immer  noch, z.B.  im "ZX-Team",  das sogar  eine
   regelmige  Zeitschrift  namens  "ZX-TEAM-Magazin"  herausgibt.  Hier  die
   Kontaktadresse fr das "ZX-Team":

            Joachim Merkl
            Bernbacher Str. 12, D-90768 Frth, Germany

F: Wie bekomme ich meine alten ZX81-Programme von Cassette auf Diskette?
A: Das ist  wirklich ein  Problem. Ich hatte  seinerzeit bereits  ein Programm
   namens  "ZX81-Utility"  geschrieben, mit  dem  man  die Programme  von  der
   "Datasette" oder einem normalen Cassettenrecorder  ber den Userport in den
   Commodore 64  laden und dort auf  Diskette oder im C64-Format  auf Cassette
   archivieren  konnte.  Deswegen hatte  ich  meine  ZX81-Programme schon  auf
   Disketten fr den  Commodore 64 und von  dort zum Atari ST war  es ber die
   RS232-Schnittstelle  nur  noch ein  "Katzensprung".  Das  Programm auf  dem
   Commodore 64  konnte brigens noch mehr,  z.B. die Programme  wieder zurck
   zum ZX81 schicken,  saubere ZX81-Listings und HEX-Dumps  ausdrucken und die
   Programme in C64-BASIC umwandeln. Es wurde damals in der Zeitschrift "Happy
   Computer" abgedruckt.  Ich habe mir dann  natrlich auf dem Atari  ST nicht
   noch einmal die gleiche Arbeit gemacht  und deswegen gibt es bis heute kein
   brauchbares  Atari-Programm   dafr.  Ich  sehe  also   nur  folgende  drei
   Mglichkeiten: Erstens, Sie organisieren sich  einen Commodore 64 oder 128,
   das "ZX81-Utility" und verbinden den Commodore  irgendwie mit dem Atari ST,
   zweitens,  Sie organisieren  sich  ein RS232-Interface  fr  den ZX81  oder
   verbinden  ihn  irgendwie anders  direkt  mit  dem  ST oder  drittens,  Sie
   schreiben selbst  ein Programm  fr den  Atari ST,  das Daten  von Cassette
   laden kann. Vielleicht kann Ihnen dabei auch

            Thomas Busse
            Mainzer Str. 29, D-42119 Wuppertal, Germany

   helfen, wenn Sie ihn freundlich fragen  und Rckporto beilegen, weil er mit
   dem  Laden  und Speichern  von  ZX81-Cassetten  auf  dem Atari  ST  bereits
   experimentiert hat.

F: Was ist mit HRG (High Resolution Graphic)?
A: Dafr gab es so viele unterschiedliche Lsungen, einige rein softwaremig,
   andere  mit   Hardwareuntersttzung,  da   der  Emulator   unmglich  alle
   bercksichtigen kann.  Dafr kann  man den  eingebauten Character-Generator
   modifizieren und ihn an beliebige Adressen legen.

F: Was ist mit Sound?
A: Hier gilt das  gleiche wie fr die  vorige Frage. Ich glaube,  es gab sogar
   eine  Zusatzhardware mit  dem  gleichen Soundchip,  wie  ihn  der Atari  ST
   eingebaut hat, die mte natrlich sehr einfach zu emulieren sein. Ich habe
   aber keine Unterlagen und Software dafr.

F: Kann  man  auch  andere  ROMs als  das  8K-BASIC-ROM  verwenden,  z.B.  das
   ASZMIC-ROM oder das INTEGER-BASIC, FORTH, ASDIS?
A: Ab der Version 2.0 des Emulators kann man Speicherblcke laden, z.B. in den
   Bereich $2000-$4000.  Nur werden die  meisten Zusatz- oder  gar Ersatz-ROMs
   nicht  laufen,  weil  sie  oft  HRG  oder  einen  anderen  Bildschirmaufbau
   verwenden, eigene  LOAD/SAVE-Routinen haben, die  auf dem Atari  nicht mehr
   funktionieren  knnen und  wegen  hnlicher Probleme.  Aber  Sie knnen  ja
   einfach mal experimentieren.

F: Warum werden bei den Joystick-Tasten die Buchstaben "Y" und "Z" vertauscht?
A: Die Joystick-Tasten beziehen sich auf die ZX81-Tastatur,  bei der gegenber
   einer deutschen Atari-Tastatur die Tasten Y und Z vertauscht sind.

F: Warum wird bei  mir regelmig ein bestimmter Buchstabe  auf den Bildschirm
   geschrieben, obwohl ich nicht auf die Tastatur drcke?
A: Entweder kommt der ZX81-Emulator nicht  mit Ihrer TOS-Version zurecht, oder
   Sie haben eine Hardware am Joystick-Port  2 angeschlossen, zum Beispiel ein
   Uhren-Modul. Lschen Sie  dann einfach die Tasten fr den  Joystick mit der
   Emulator-Kontrollbox.

F: Gibt es auch schon einen ZX-Spectrum-Emulator?
A: Ich habe sehr viele Anfragen bekommen, ob ich nicht auch einen Emulator fr
   den ZX-Spectrum schreiben wollte. Aber weil ich, wie bereits lang und breit
   erzhlt, seinerzeit den Commodore 64 dem ZX-Spectrum vorgezogen habe, kenne
   ich mich  mit dem "Speccy"  nicht so gut aus  und die Motivation  dafr war
   auch einfach nicht da. Auerdem war  der ZX81-Emulator wirklich schon genug
   Arbeit, weshalb  ich zu  einem ZX-Spectrum-Emulator nicht  berredet werden
   konnte. Das war aber auch gut so, denn es gibt inzwischen (mindestens) drei
   verschiedene ZX-Spectrum-Emulatoren, die anscheinend unabhngig voneinander
   entstanden sind. Anfragen dazu richte man bitte an folgende Adressen:

            Jrg Tochtenhagen
            Am Schlehdorn 12, D-50189 Elsdorf-Heppendorf, Germany

            Hansjrg Oppermann
            Rennelbergstr. 15, D-38114 Braunschweig, Germany

            Christian Gandler
            Paletzgasse 17/3/14, A-1160 Wien, Austria

   Alle drei  Programme sind  "Public Domain". Besonders  gut gefllt  mir der
   ZX-Spectrum-Emulator von  Christian Gandler.  Bei Anfragen  aber bitte  den
   frankierten Rckumschlag nicht vergessen.

F: Und was ist mit einem Emulator fr den Sinclair QL?
A: Den  Sinclair QL  kenne  ich nur  vom  Hrensagen. Aber  ich  wei, da  es
   (mindestens) einen Sinclair-QL-Emulator gibt. Der bentigt aber zustzliche
   Hardware und ist nicht "Public Domain". Informationen dazu gibt es bei:

            Jochen Merz
            Im Stillen Winkel 12, D-47169 Duisburg 11, Germany

F: Wann hrt diese Anleitung endlich auf?
A: Wir haben es bald geschafft, jetzt kommt nur noch der Anhang.


Anhang: Kurzanleitung zu einigen ZX81-Programmen 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Nochmal die Bemerkung: ZX81-Programme zeichnen sich  dadurch aus, da sie ohne
Anleitung erscheinen. Die mitgelieferten  Programme funktionieren alle mit dem
Emulator. Die Aufforderung  "Press any key to continue" sollte  man aber nicht
ganz wrtlich nehmen,  denn die Leertaste bewirkt beim ZX81  einen Abbruch des
laufenden Programms.

Disassembler DISASSEM.81
------------------------ 
Der Disassembler befindet  sich in den oberen 1,7 kByte  des 16K-Speichers und
ist vor NEW  geschtzt. Sie knnen auch beliebig andere  Programme laden, ohne
da er gelscht wird.  Nach dem Laden erscheint das berhmte  "Press any key".
Wenn Sie jetzt  eine Taste auer der Leertaste drcken,  wird der Disassembler
automatisch oberhalb RAMTOP  geladen und ein NEW  ausgefhrt. Die Startadresse
zum disassemblieren  mu mit POKE in  die Adressen 32704 (Low-Byte)  und 32705
(High-Byte) geschrieben  werden. Danach kann mit  RAND USR 32032  jeweils eine
neue Bildschirmseite lang  disassembliert werden. Wollen Sie  zum Beispiel die
Zeichen-Ausgabe-Routine im 8K-BASIC-ROM bei  $07F1 untersuchen, dann geben Sie
ein: POKE 32704,241 (=$F1) und POKE  32705,7 (=$07) und danach RAND USR 32032.
Wenn Sie die nchste  Seite sehen wollen, brauchen Sie jetzt  nur nochmal RAND
USR 32032 einzugeben.

Assembler ASSEMBLE.81
--------------------- 
Der Assembler befindet sich in den  oberen 2,6 kByte des 16K-Speichers und ist
vor NEW  geschtzt. Er versteht die  Standard ZILOG-Mnemonics. Sie  werden wie
ein  BASIC-Programm in  REM-Zeilen  eingegeben. Innerhalb  einer Zeile  knnen
mehrere Assemblerbefehle stehen,  wenn sie durch ein  Semikolon getrennt sind.
Der Assembler unterscheidet  zwischen Konstanten und Labels.  Sie bestehen aus
Buchstaben  und Ziffern  (Leerzeichen ignoriert),  das erste  Zeichen mu  ein
Buchstabe sein, die Lnge ist beliebig.  Labels werden durch einen Doppelpunkt
hinter dem  Label gekennzeichnet. Als  Operatoren sind "", $,  +, -, >,  und <
erlaubt.  >  und  <  stehen  hinter einem  numerischen  Wert  und  bilden  das
hherwertige bzw. niederwertige Byte.

 Pseudo-Befehle:

 ORG a1,a2        Das Programm wird ab der Adresse a1 in den Speicher ge-
                  schrieben. Es wird dabei so assembliert, als ob es bei
                  der Adresse a2 stnde. Fehlt a2, wird a2=a1 angenommen.
 BEGIN            Zeigt den Beginn des Assembler-Programms an.
 END              Zeigt das Ende des Assembler-Programms an.
 DEF              Bindet die folgende durch Leerzeichen getrennte Liste
                  von Termen in das Assembler-Programm ein.
 =                Weist einer Konstanten einen 16bit-Wert zu.
 *                Die folgenden Zeichen werden als Kommentar aufgefat.

 Fehlermeldungen:
 1    Kein Programm oder kein BEGIN
 2    Syntax Error oder Bereichsberschreitung
 3    relativer Sprung zu weit
 4    Konstante zweimal definiert
 5    Label zweimal definiert
 6    Fehler in einer DEF-Anweisung

Der Assembler  wird mit  dem Befehl PRINT  USR 30195  gestartet. Normalerweise
wird der Code in eine REM-Zeile am Anfang des BASIC-Speichers assembliert. Mit
PRINT USR 30113  kann dann zum Lschen des Quellprogramms  die momentane Zeile
bis zu der Zeile mit dem END-Befehl verlngert werden.

Ein Beispiel: Angenommen,  Sie wollen das Programm  ASSDEMO1 assemblieren, das
dem Emulator beiliegt (es malt einfach  den Bildschirm voller A's). Dann laden
Sie  natrlich zuerst  ASSEMBLE.  Der Assembler  ist  nun  resident im  oberen
Speicherbereich. Laden Sie dann ASSDEMO1 (oder tippen Sie ein eigenes Programm
ein). Die Zeile 10  bewirkt, da ab Adresse 25000 assembliert  wird. Rufen Sie
den Assembler  mit PRINT USR 30195  auf. Das Programm ist  nun assembliert und
kann testweise mit RAND USR 25000 aufgerufen werden. Wenn man den Code nun wie
ein BASIC-Programm  speichern will, mu man  ihn in eine  REM-Zeile schreiben.
Nach dem Assemblieren erscheint  die Zahl 18. Das bedeutet, da  der Code eine
Lnge von  18 Bytes hat. Geben  Sie also eine  Zeile 1 ein, die  mindestens 18
Bytes lang ist, also  z.B. einfach aus REM und 18  Punkten besteht. ndern Sie
nun ORG 25000 in Zeile 10 um in  ORG 16514, das ist die Startadresse der Zeile
1. Starten Sie den Assembler wieder mit PRINT USR 30195. Der Code steht nun in
der REM-Zeile 1 und  erscheint beim Auflisten als wirre Folge  von Zeichen. Er
kann mit RAND  USR 16514 aufgerufen werden. Ist das  Programm fehlerfrei, dann
kann  der Quelltext  gelscht werden,  da er  nicht mehr  gebraucht wird  (man
sollte ihn natrlich  trotzdem vorher mit SAVE speichern). Er  kann z.B. durch
die Zeile 10 LET L=USR 16514 ersetzt werden. Damit das Lschen des Quelltextes
nicht  so  mhsam ist,  habe  ich  eine  kleine Zusatzfunktion  zum  Assembler
hinzugefgt: Tippen Sie LIST 10 und dann PRINT USR 30113. Nun ist die Zeile 10
effektiv bis zur  letzten END-Zeile 160 verlngert worden. Dies  kann man zwar
nicht sehen, aber wenn man einfach  eintippt 10 NEW LINE, dann ist der gesamte
Quelltext gelscht,  und man hat nur  noch die Zeile  1 mit dem Code,  die man
dann zusammen  mit der  Zeile 10  LET L=USR 16514  als lauffhiges  und kurzes
Programm speichern kann.

Basic-Compiler ZX_GT.81
----------------------- 
ZX GT ist ein schneller  BASIC-Compiler, der allerdings auf Integer-Arithmetik
beschrnkt ist.  Er wird  mit PRINT  USR 17389  aufgerufen, wenn  der Code  in
REM-Zeile 2  geschrieben werden soll, sonst  PRINT USR 17381.  Ausgefhrt wird
das compilierte Programm dann mit PRINT USR 18823.

Mit dem ZX_GT  kenne ich mich auch  nicht so gut aus. Dieser  Compiler war ein
Projekt in einem  englischen Computermagazin. Ich habe  ihn daraus eingetippt,
wei aber  gar nicht  mehr, welche Zeitschrift  das war  und ob es  die letzte
Ausbaustufe war. Einige  Befehle funktionieren mit dem Compiler  nicht, und er
kann nur mit ganzen Zahlen rechnen. Wieder ein kurzes Beispiel:

Zuerst wird ZX_GT geladen. Dann gibt man das BASIC-Programm ein, z.B.

      10 LET I=1, 20 PRINT I, 30 LET I=I+1, 40 GOTO 20, 50 STOP.

Leider wird bei der Eingabe immer  nur die Zeile 0 aufgelistet, ich wei nicht
ob das  so sein  mu oder  ob man das  ndern kann.  Danach speichert  man das
Programm sicherheitshalber  ab und  tippt dann PRINT  USR 17389.  Das Programm
wird nun  in zwei  Durchlufen kompiliert. Zum  Scrollen eine  beliebige Taste
drcken (es  erscheint ein  Fragezeichen). Der  Compiler hat  nun die  ominse
Zeile 2 fabriziert und dort das  kompilierte Programm gespeichert. Man kann es
mit PRINT USR 18823 aufrufen. Funktioniert alles, dann kann man eigentlich das
gesamte BASIC-Programm durch eine Zeile 10 PRINT USR 18823 ersetzen.

Der Compiler hat zumindest in der Version, die ich abgetippt habe, anscheinend
einige Tcken,  strzt hufiger  ab, oder  bringt die  Tastatur durcheinander.
Manchmal hilft ein "ZX81 Break" in der Emulator-Kontrollbox.


Das Ende der Anleitung
~~~~~~~~~~~~~~~~~~~~~~ 
So, das  war's eigentlich. Um den  ZX81-Emulator richtig einsetzen  zu knnen,
braucht  man  natrlich noch  das  ZX81-Handbuch.  Das  war, soweit  ich  mich
erinnern kann,  wirklich sehr  gut gemacht,  und man  konnte damit  sehr schn
BASIC und Programmieren  berhaupt daraus lernen. Auch das  ZX81-BASIC an sich
war in vielen Punkten auch gar nicht so schlecht, zum Beispiel untersttzte es
beliebig lange Variablen- und Dateinamen, worauf man erst heute wieder langsam
zurckkommt. Es  hatte auch viel  mehr mathematische Funktionen  eingebaut als
bei  anderen BASICs  blich.  Das nur  als Tip,  falls  Sie das  ZX81-Handbuch
irgendwo  bekommen knnen  oder  noch selber  haben  und  jemand BASIC  lernen
mchte. Mit der ZX81-Emulation auf dem  Atari gibt es ja jetzt auch nicht mehr
die Probleme  mit der  Folientastatur und  dem Cassetteninterface  und anderen
Widrigkeiten des ZX81. Damals htte ein ZX81-Benutzer nicht zu trumen gewagt,
da  er an  seinen Rechner  einmal  eine "normale"  Tastatur, einen  Joystick,
Floppylaufwerke, Festplatten, RAM-Disks, Wechselplatten, einen 19-Zoll-Monitor
usw. anschlieen knnte.

Tja, aber so sind wir Computerfreaks (oder Menschen allgemein) nun mal. Zuerst
wnschen  wir uns  das  Zeug sehnlichst  herbei  und dann  ist  es auf  einmal
selbstverstndlich  und wir  wollen noch  mehr.  Aber bevor  ich nun  anfange,
darber weiter zu philosophieren, verabschiede ich mich und wnsche Ihnen viel
Spa mit dem ZX81-Emulator.

            Christoph Zwerschke                                  18. Juni 1993

