SPECCY Der ZX-Spectrum-Emulator fuer den Atari ST Copyright (c) 1990 Hansjoerg Oppermann Autor: Hansjoerg Oppermann Rennelbergstr. 15 3300 Braunschweig ZX Spectrum ist ein eingetragenes Warenzeichen der Firma Sinclair Research Ltd. --- Unter der Voraussetzung, dass die Dateien SPECCY.PRG, SPECCY.RSC, SPECTRAN.PRG, SPECTRAN.RSC, SPECTRAN.XXX READ_ROM.TOS, SAVE_ROM.XXX, SENDPROG.TTP und SPECCY.TXT zusammen und unveraendert kopiert werden, darf SPECCY fuer private Anwender frei kopiert und benutzt werden. Kommerzielle Nutzung in jeder Form (dies schliesst auch den Vertrieb ueber Public-Domain-Sammeldisketten oder aehnliches ein) ist NICHT gestattet. --- Nun doch! Diese Projekt laeuft schon seit ueber drei Jahren. Ich konnte mich lange nicht entschliessen den Emulator in irgend einer Weise zu beenden. Er war eher eine Studie als ein richtiges Produkt. Ich hatte viele Versionen angefangen und doch nicht beendet; es gab ihn als GEM-Programm, als Entwicklungumgebung mit Monitor und Disassembler und wie nun, als Standalone ohne ROM und ohne viel Schnickschnack. Als grosse Hilfe erwies sich der CPM80-Emulator von SoftDesign Muenchen. Dort habe ich viele Anregungen gefunden. Als ein Problem erwies sich das Behandeln der Interrupts und die Darstellung des Bildschirms, konnte aber (auf Kosten der Geschwindigkeit) geloest werden. Nun, was kann der Emulator? Er verhaelt sich wie ein normaler Sinclair ZX-Spectum mit 48 KB RAM, einem Kemston Joystick-Interface und ohne Drucker. Die Tastatur ist zu einer Rubbel-Gummi-Tastatur zurueck entwickelt worden. Die linke Shift-Taste ist CAPS-Shift, die rechte SYMBOL-Shift und die grosse Space-Taste nun BREAK-SPACE. Wer damals keinen Spectum besessen hat, wird mit diesen Hinweisen nicht viel anfangen koenne. Er sollte sich an einen alten Spectrum-User wenden und dort die noetigen Hilfen holen. SPECCY laeuft nur in High- und Low-Resolution. Weiter Aufloesungen oder Bildschirmformate werden nicht unterstuetzt. Im Monochrombetrieb wird die Farbe in Graustufen dargestellt. Die Geschindigkeit ist nicht berauschend. Leider! Noch eins, da das Spectum-ROM dem Copyright unterliegt, ist es NICHT im Emulator enthalten. Wenn ihr den Emulator also benutzen wollt, muesst ihr euch erst einmal ein Spectrum-ROM besorgen. Es liegt ein Programm bei, welches dieses Problem einfach loest. Ihr braucht einen Spectrum mit Interface I, ein Null-Modem-Kabel zwischen Spectum und Atari ST und los gehts. Das wie wird weiter unten beschrieben. Um Programme des Spectums zu nutzen, liegt ein Transferprogramm fuer den Atari ST und dem Spectrum bei. Die Benutzung der beiden sollte keine Probleme aufwerfen. Selbst Baudraten bis 19 KiloBaud sind moeglich. Beim Starten des Emulators erscheint eine Dialog-Box. Hier koennen einige Parameter veraendert werden: 1. Anzahl der Interrupts pro Sekunde. Wie oft ein Z80- Interrupt erzeugt wird. Hiervon ist die Tastaturroutine des Spectrum abhaengig. Durch Verringern der Interrupts kann die Geschwindigkeit gesteigert werden. 2. Anzahl der Bildschirm-Refreshs pro Sekunde. Die Darstellung des Bildschirm wird periodisch erneuert. Es werden aber nur die Stellen bearbeitet, die sie geaendert haben. Durch Heruntersetzen der Anzahl kann wiederum die Geschwindigkeit gesteigert werden. 3. Flash. Die Blinkgeschwindigkeit, z.B. des Cursor steht in Abhaengigkeit zur Bildschirm-Refresh-Frequenz. 4. Beeper. Schaltet die Tonausgabe ein und aus. Es existiert einmal ein Emulation fuer die im Rom eingebaute Ton-Routine und auch die von den meisten Programmen genutzte Moeglichkeit direkt ueber OUT- Befehle. Da die Geschwindigkeit des Emulators nicht die seines Orginals (jedenfalls auf einem normalen ST) erreicht, sind die Toene oder Geraeusche ueber den OUT- Befehl ein wenig zu tief. Um einen davon zu befreien, gibt es diesen Schalter. 5. Speecy. Mit diesem Button wird der Emulator gestartet. Es wird kein Reset ausgefuert. Das heisst, dass man an der Stelle, wo man den Emulator ueber UNDO verlassen hat, weiter das Programm fortsetzt. 6. Reset. Zuruecksetzen und Starten des Emulators. Die Register des Z80 werden geloescht und ein RST 0 ausgefuehrt (Kaltstart). 7. Exit. Verlassen des SPECCY. Tschuess. Der Emulator kann jederzeit durch die Taste UNDO verlassen werden, man kehrt wieder zu Start-Dialog-Box zurueck. Weiter sind einige Tasten der Atari-Tastatur mit Funktionen belegt, die das Arbeiten mit dem Spectrum erleichtern sollen. Die Cursor-Tasten funktionieren ohne das man zwei Finger quaelen muss, Insert wie EDIT und das DELETE des Spectrums liegt auf Backspace (wo es auch hingehoert). Beim Laden ohne Dateinamenangabe erscheint ein Fileselectorbox, wo beliebige Spectrum-Dateien angewaehlt werden koennen. Fuer Schwerenoeter: ein Spectrum-Datei hat folgendes Format: 17 Bytes Spectrum-Tape-Header 1 Byte Dateitype 2 - 11 Byte Dateiname (10 Zeichen) 12 - 17 Byte Laengen- und Addressangaben anschliessent den Inhalt der Datei Da ein Dateiname des Spectrums 10 Zeichen lang seinen und auch Zeichen enthalten kann, die beim Atari nicht in Dateinamen erscheinen duerfen, musste hier ein Einschnitt geschehen. Der Name im Spectrum-Tape-Header wird ohne Sonderzeichen, bis max. 8 Zeichen als Name fuer die Spectrum-Datei verwendet. (Punktum!) Nun. šbertragung des Spectrum-ROMs und der Spectrum- Programme. Der erste Schritt ist ein geeignetes Null-Modem- Kabel zu bekommen. Wer hat der hat und wer nicht muss noch. Der zweite Schritt ist das šbertragen der Programme zum šbertragen von Daten auf der Spectrum-Seite zur Atari-Seite (Puh). Dazu stellt man auf dem Atari die RS-232-Schnittstelle auf 9600 Baud, 8 Daten-Bit, 1 Stop-Bit ein und schaltet XON- XOFF aus und RTS-CTS ein. Dann tippt man auf dem Spectrum folgende Zeilen ein: 10 FORMAT "b";9600 20 LOAD *"b" (Diese Zeilen stellen einen binaren Stream mit 9600 Baud zur Verfuegung und versucht ein Programm (BASIC-HIC) ueber diese Stream zu laden) Mit RUN dieses Programm starten. Nun auf dem Atari das Program SENDPROG.TTP mit dem Parameter SAVE_ROM.XXX starten. Wenn alles gut gegangen ist, wird auf dem Spectrum nun ein kleines BASIC-Programm liegen. Diese kopiert das Spectrum-ROM in einen hoeheren Bereich im Spectrum und schickt es dann auf die Reise zum Atari. Hier noch ein wichtiger Satz zum Spectrum-ROM: Das Spectrum-ROM muss ein Orginal Sinclair ZX-Spectrum ROM sein, also kein in irgendeinerweise geaendertes. Erklaerung: Da das ROM im Speccy noch gepatch werden muss und ich nur das Orginal beruecksichtige, werden alle Zuwiderhandlungen leider zum Misserfolg dieser Mission fuehren. Nun weiter. Also startet das Programm (SAVE_ROM) auf dem Spectrum und wartet ein Weilchen, denn BASIC ist kein Rennpferdchen. Die Zeit laesst sich nutzen und auf dem Atari das Programm READ_ROM.PRG starten. Zu Ende ist diese Prozedur, wenn beide Programme sich beendet haben und auf dem Atari eine Datei namens SPECCY.ROM vorliegt. Um das erste Mal den Emulator zu Starten, kopieren sie die Dateien SPECCY.PRG, SPECCY.RSC und SPECCY.ROM in einem Pfad und starten das Programm SPECCY.PRG. --- Na, alles klar? (Wenn nicht, weiss ich's auch nicht. Bei mir funktionierts) Nun fehlt noch die šbertragung von Daten. Dazu gibt es das Programm SPECTRAN(S). Nochmals den BASIC-Zwei-Zeiler von oben auf dem Spectrum eingetippt, Starten (RUN) des Spectrums und starten des Programms SENDPROG.TTP mit SPECTRAN.XXX. Das Programm, welches nun im Spectrum liegen sollte, solltet Ihr am Besten nun sichern. Mit dem Programm SPECTRAN auf dem Atari und auf dem Spectrum koennen nun Daten vom Spectrum zum Atari gesendet werden. Beide muessen auf die gleiche Baudrate eingestellt werden, an sonsten gibt es wohl keine Probleme. Bisher werden nur Daten, die auf Kassetten vorliegen und nicht groesser als ca. 36 KByte sind, uebertragen. Auch nur in einer Richtung! Dies ist eine Grenze, die noch zu Beseitigen ist. Wer sich daran versuchen will, kann von mir die noetigen Daten und Sourcen (C) der Atari-Seite bekommen. Puh! Nun ist alles gesagt, was zu sagen ich in der Lage bin. Wahrscheinlich wimmelt dieser Text vor Rechtschreibfehlern, die unterliegen aber meinem Copyright (Ich habe auch immer viel Spass beim Lesen meiner schriftlichen Erguesse). 3.7.90 Viel Spass!