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 sch”n waren... damals... als alles begann... ... also damals, da gab es eigentlich noch keine Handbcher und README-Dateien und ich h„tte niemals auch nur einen Gedanken daran verschwendet, so eine An- leitung zu tippen. "Press any key to start" reichte da noch v”llig 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 aužerdem von ZILOG. Im Jahr 1980 kam dann ein spleeniger Engl„nder auf die Idee, daž der Z80 an sich eigentlich auch nicht so das Gelbe vom Ei w„re, und fgte 1 kByte RAM, 4 kByte ROM, einen Modulator zum Anschluž eines Fernsehers und eine Folientastatur hinzu. Einzig im Namengeben war dieser Engl„nder nicht so erfindungsreich, er nannte das fertige Ger„t einfach "ZX80", was wohl soviel wie "Z80, extended version" bedeuten sollte. Aber Clive Sinclair, so der Name des ZX80-Erfinders, w„re nicht Clive Sinclair gewesen, wenn er den ZX80 nicht noch kleiner und billiger gemacht h„tte. Er packte alles, was der ZX80 aužer 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 Ger„t 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 erz„hle? Nun, eben diesen Computer namens ZX81 bildet das beiliegende Programm ZX81.PRG auf dem Atari ST softwarem„žig nach. Die Geschichte des Atari ST erz„hle 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 w„re ge- kl„rt, 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 K„stchen verliebt. Zum Leidwesen meiner Freunde und Verwandten saž ich Tage und N„chte davor, auf Omas alten Schwarz/Weiž- Fernseher starrend, auf dem meistens flimmernde schwarz/weiže Streifen hin und her huschten, die nur ab und an von einer aussagekr„ftigen 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 h”rten aber schnell wieder damit auf, als wir gemerkt hatten, wie grož die Nachfrage war und wieviel Arbeit da auf uns zu kam. Schliežlich hatten wir sowieso keine Zeit, das verdiente Geld auszugeben, weil wir ja immer vor dem "bl”den Ding" sažen, 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 n„mlich noch keinen Assembler und mužten 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 w„hrend 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". Sp„ter habe ich dann doch einen Assembler geschrieben, der ebenfalls noch er- halten ist, n„mlich "ASSEMBLE.81". Aber auch der mužte 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 n„mlich der "C64" er- schienen, den man, um beim Vergleich mit Autos zu bleiben, als eine Art "VW K„fer" 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 maltr„tieren zu k”nnen, noch etwas verlockender. So investierten wir das mit dem Software-Handel verdiente Geld in einen Commodore 64. Wieder drei Jahre sp„ter erschien dann der Atari ST. Die Farbe war wieder verschwunden und nun stand auf dem Tisch statt des Fernsehers ein seri”ser 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 m”glich 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 pl”tzlich auftauchendes ZX81-ROM-Listing sowie ein Gespr„ch mit einem ehemaligen ZX81-Hardware-Experten Licht in diese wirklich genial-ver- zwickt-sparsame Angelegenheit brachten. Schliežlich war die Version 1.0 des ZX81-Emulators fertig. Leider erlaubte aber die Firma Amstrad nicht, das Pro- gramm irgendwo zu ver”ffentlichen. Zwei Jahre sp„ter, 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 Verbesserungsvorschl„ge angesammelt, aužerdem 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 mužte 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 ge„ndert hat, hier eine Liste der wesentlichen Neuerungen: - Neben der mittleren und hohen ST-Aufl”sung wird jetzt auch die mittlere und hohe TT-Aufl”sung 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. - Speicherbl”cke im ZX81 k”nnen auf Diskette geladen und gespeichert werden. - S„mtliche 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 k”nnen 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 erh„lt, 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 Schr„gstrich "/" 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 mužten 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 legend„ren 8-Bit-Homecomputer ZX81 auf dem Atari ST. Es wird keine weitere Hardwareuntersttzung ben”tigt, und trotzdem wird fast alles originalgetreu emuliert. Darunter f„llt 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 M”glichkeit 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 Grožbuchsta- ben kennt, ist die CapsLock-Taste im ZX81 fr diesen Zweck frei. Einige Zeichen auf der Atari-Tastatur kennt der ZX81 nicht. Grunds„tzlich gibt es wie gesagt nur Grožbuchstaben. Kleinbuchstaben, Umlaute und Buchstaben mit Akzenten werden durch den jeweiligen grožen 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, n„mlich die Emulator- Kontrollbox. Zu den Einstellungen in dieser Dialogbox im Einzelnen: Neben dem Symbol "Power Pack" kann man dem Speicherausbau w„hlen. Standard war hier wohl eine 16-kByte-Erweiterung. Nach einem Wechsel der Speichergr”že ist ein Reset erforderlich. Der Ausbau auf 48 kByte ist allerdings mit Vorsicht zu geniežen. Hier wird einfach RAMTOP auf das Ende des 64 kByte Adressraums ge- setzt, erh„lt 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 Kn”pfen neben dem Symbol "Keypad" kann man die Belegung des Nummern- tasten-Blocks w„hlen, "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 w„hlen, ob im FAST-Modus des ZX81 der Bildschirm wie beim Original, w„hrend der Computer arbeitet, dunkelgeschaltet werden soll oder ob er einfach stehen bleiben soll. Das nervige Geblinke entf„llt dann. Rechts daneben befinden sich zwei "Regler", die mit SLOW und FAST beschriftet sind. Damit l„žt 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, w„hrend der ZX81 im FAST-Modus dem Atari davonl„uft. Dieses unterschiedliche Verhalten rhrt da- her, daž der ZX81 im SLOW-Modus durch den Bildschirmaufbau, den der Z80 zum gr”žten 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 w„re 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 Kn”pfen "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 L„nge des Blocks eingegeben hat. Die Kn”pfe "ZX81 Break" und "ZX81 Reset" bewirken genau das, was draufsteht, n„mlich einen Abbruch des laufenden ZX81-Programms oder einen Reset des ZX81. Mit "Quit Emulator" kann der Emulator verlassen werden. Mit den Kn”pfen "Load Parameters" und "Save Parameters" k”nnen 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 k”nnen 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. Aužerdem 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 Parit„tsfunktion 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 l”schen 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 M”glichkeit, 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- g„nge, nach deren Ende man feststellte, daž der Lautst„rkeregler eine Prise niedriger gedreht werden mužte, sind damit leider unwiederbringlich verloren. Es sei denn, man m”chte seine alten ZX81-Programme auf Diskette berspielen. Dazu mehr unter "H„ufig gestellte Fragen". Man l„dt 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 gebr„uchlichen TOS-Versionen der Name nach 8 Zeichen abgeschnitten wird. Falls keine andere Datei-Endung angegeben ist, wird ".81" angeh„ngt, 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 grunds„tzlich 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 m”glich. Kleine Kostprobe gef„llig? ~~~~~~~~~~~~~~~~~~~~~~~~~~ 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 N„he 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 G„nsefžchen 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 G„nsefžchen mit der Hochkomma-Taste erreichen, denn da der ZX81 kein Hochkomma hatte, ist es im Emulator kurzerhand durch die G„nsefž- chen ersetzt worden. Wenn Sie sich vertippt haben, k”nnen Sie die Eingabe je- derzeit mit den Cursortasten und Backspace korrigieren. Das geht alles etwas schwerf„llig, 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 k”nnen 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- w„hlt, weil es eine kurze Erkl„rung 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 v”llig 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 dazugeh”rigen Dateien, also den Emulator an sich, die Anleitungstexte und auch die ZX81-Programme nicht „ndern. Sie k”nnen 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 H„ufig 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 aužer mir? A: Die gibt es in der Tat immer noch, z.B. im "ZX-Team", das sogar eine regelm„žige 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 M”glichkeiten: 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 L”sungen, einige rein softwarem„žig, andere mit Hardwareuntersttzung, daž der Emulator unm”glich 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 mžte 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 Speicherbl”cke 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 k”nnen und wegen „hnlicher Probleme. Aber Sie k”nnen 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 regelm„žig 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. L”schen 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 erz„hlt, 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. Aužerdem 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 unabh„ngig voneinander entstanden sind. Anfragen dazu richte man bitte an folgende Adressen: J”rg Tochtenhagen Am Schlehdorn 12, D-50189 Elsdorf-Heppendorf, Germany Hansj”rg 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 gef„llt 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 H”rensagen. Aber ich weiž, daž es (mindestens) einen Sinclair-QL-Emulator gibt. Der ben”tigt aber zus„tzliche Hardware und ist nicht "Public Domain". Informationen dazu gibt es bei: Jochen Merz Im Stillen Winkel 12, D-47169 Duisburg 11, Germany F: Wann h”rt 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 w”rtlich 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 k”nnen auch beliebig andere Programme laden, ohne daž er gel”scht wird. Nach dem Laden erscheint das berhmte "Press any key". Wenn Sie jetzt eine Taste aužer 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 n„chste 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 k”nnen 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 L„nge 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 h”herwertige 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 aufgefažt. 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 L”schen des Quellprogramms die momentane Zeile bis zu der Zeile mit dem END-Befehl verl„ngert 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 L„nge 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 gel”scht 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 L”schen 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 verl„ngert worden. Dies kann man zwar nicht sehen, aber wenn man einfach eintippt 10 NEW LINE, dann ist der gesamte Quelltext gel”scht, und man hat nur noch die Zeile 1 mit dem Code, die man dann zusammen mit der Zeile 10 LET L=USR 16514 als lauff„higes und kurzes Programm speichern kann. Basic-Compiler ZX_GT.81 ----------------------- ZX GT ist ein schneller BASIC-Compiler, der allerdings auf Integer-Arithmetik beschr„nkt 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 Durchl„ufen kompiliert. Zum Scrollen eine beliebige Taste drcken (es erscheint ein Fragezeichen). Der Compiler hat nun die omin”se 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 h„ufiger 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 k”nnen, braucht man natrlich noch das ZX81-Handbuch. Das war, soweit ich mich erinnern kann, wirklich sehr gut gemacht, und man konnte damit sehr sch”n 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 k”nnen oder noch selber haben und jemand BASIC lernen m”chte. 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 h„tte ein ZX81-Benutzer nicht zu tr„umen gewagt, daž er an seinen Rechner einmal eine "normale" Tastatur, einen Joystick, Floppylaufwerke, Festplatten, RAM-Disks, Wechselplatten, einen 19-Zoll-Monitor usw. anschliežen k”nnte. 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 selbstverst„ndlich 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