EINFÜHRUNG Toolkit ist ein reines Maschinencodeprogramm, das besondere Hilfsroutinen für den ZX-Spectrum zur Verfügung stellt und in jede Stelle des Speichers geladen werden kann, so daß auch Besitzer eines erweiterten Computers ihren Ram voll ausnutzen können. Das Programm enthält folgende Zusatzbefehle: 1. RENUMBER 2. LÖSCHEN VON PROGRAMMZEILEN 3. AUSTAUSCHEN ODER VERÄNDERN VON STRINGS 4. PROGRAMMZEILEN-BLOCKVERSCHIEBEN 5. ANZEIGE ALLER ZUR ZEIT DEFINIERTEN VARIABLEN UND DEREN WERTE 6. ANZEIGE DER LÄNGE DES PROGRAMMS UND DER VARIABLEN Toolkit hat eine Länge von 1450 Bytes, wobei der Autor bestrebt war, den größten Effekt bei geringstem Speicherplatzbedarf zu erreichen. Bevor Sie Toolkit laden, muß zuerst ein freier Bereich im RAM reserviert werden, wohin der Maschinencode geladen wird. Um die Zahlen zu vereinfachen, schlagen wir vor, für einen 48k Spec- trum den RAMTOP auf 62000 zu setzen und das Programm ab Adresse 63000 einzuladen. Für den 16l Spektrum werden entsprechend die Adressen 29000 und 30000 benutzt. Diese Werte können aber je nach Bedarf geändert werden, wobei nur darauf geachtet werden muß, daß der RAMTOP kleiner als die Adresse, ab der das Programm geladen wird, ist und genug Platz für den Code und Ihr Programm vorhanden ist. Geben Sie also CLEAR 62000 (und andere Werte entsprechend für einen 16k Spectrum) ein, um den RAMTOP zu setzen, gefolgt von LOAD "" CODE 63000,1450. 63000 ist die Anfangsadresse von Toolkit und 1450 die Länge des Programms in bytes. SYNTAX Toolkit benötigt eine einzige BASIC - Zeile, um die Routinen anzusteuern. Diese Programmzeile hat die Form 9999 REM, gefolgt von den Instruktionen, die je durch ein Leerzeichen getrennt werden. Die Eingabe der Befehle wird in den folgenden Beispielen behandelt. RENUMBER Die Funktion RENUMBER ist, wenn nichts weiter festgelegt wurde, vorgegeben und hat vorgegebene Werte, d.h., daß, wenn sich hinter der REM-Zeile nichts befindet, Toolkit nach Aufruf Ihr gesamtes Programm beginnend ab Zeile 10 mit Schrittweite 10 neunumeriert. Um die RENUMBER - Funktion mit ihren ganzen Möglichkeiten zu nut- zen, können Sie noch folgende Parameter spezifizieren: ST = Anfangszeile (Start) NS = Neue Anfangszeile (New Start) NI = Neues Intervall oder Schrittweite SP = Letzte Zeile (Stop) Geben Sie nun folgendes Beispielprogramm ein: 1 RUN 2 GO TO 6 3 LIST 4 RETURN 5 REM 6 GOSUB 3 9999 REM Nun können Sie die RENUMBER-Routine aufrufen; da Toolkit in Maschinencode ge- schrieben ist, benutzen wir dazu die USR - Funktion, also: RANDOMIZE USR nnnnn oder LET X=USR nnnnn. PRINT USR nnnnn zeigt zusätzlich noch eine nützliche Zahl auf den Bildschirm an (Erklärungen dazu folgen). Starten Sie also jetzt RENUMBER mit PRINT USR 63000 (30000 oder nnnnn), was nach der korrekten Ausführung die Anzeige von 9999 zur Folge hat. Das Programm ist nun ab Zeile 10 mit dem Intervall 10 neu numeriert worden. Es folgen nun die Parame- ter, mit denen RENUMBER detailliertere Funktionen ausführen kann. 9999 REM ST - Numeriert ab Programmzeile ST (s.o.). Ihr Programm mit neu- er Anfangszeile (NS) 10 und Schrittweite (NI) 10 bis Zeile 9999 (SP) neu. (NS kann auch für eine Programmblockver- scheibung benutzt werden, die später beschrieben wird.) 9999 REM ST NS - Numeriert ab ST mit neuer Anfangszeile (NS) und dem Inter- vall (NI) 10 bis Zeile 9999 (SP) neu. 9999 REM ST NS NI - Numeriert ab ST beginnend ab NS mit NI bis Zeile 9999 (SP) neu. 9999 REM ST NS NI SP - Numeriert ab ST bis SP eingeschlossen mit neuer NS mit NI neu. Versuchen Sie jetzt mit Ihrem neunumerierten Programm (letztes Beispiel) eine Neu- numerierung ab einer neuen Zeile 100 mit der Schrittweite 2. Geben Sie dazu 9999 REM 10 100 2 60 ein. Die funktion wird dann von Zeile 10 bis 60 mit neuer An- fangszeile 100 und dem Intervall 2 ausgeführt, nachdem PRINT USR nnnnn (die An- fangsadresse nnnnn wird ja von Ihnen wie schon beschrieben festgelegt) eingegeben wurde. Für RENUMBER gelten folgende Bedingungen: Wenn Sie eine Anfangszeile (ST) defi- nieren, die nicht existiert, beginnt Toolkit mit der nächstfolgenden. Dasselbe be- zieht sich auf eine nicht vorhandene Endzeilennummer (SP). Falls neunumerierte Zeilennummern sich mit anderen überschneiden oder falls ähnliche Fehler entstehen würden, wird Toolkit dies mit einer Fehlermeldung quittieren, so daß Sie bei Expe- rimenten nichts falsch machen können. Außerdem werden alle direkten GOTO, GOSUB, LLIST, RUN, LIST und RESTORE Anweisungen des entsprechenden Programmgebiets auch neunumeriert. BLOCKVERSCHIEBUNG Mit der letzten voll spezifizierten RENUMBER - Anweisung können auch ganze Pro- grammbereicht verschoben werden, was für eine Reorganisation von z.B. Unterpro- grammen sehr nützlich ist. Dabei sollten Sie sorgfältig auf das Zielgebiet achten, da die Blockverschiebung nicht auf schon belegte Bereiche angewandt werden kann. Die Parameter erhalten jetzt folgende (zu den vorhergehenden nicht sehr unter- schiedliche) Bedeutungen: ST ist der Blockanfang, NS der Anfang des Zielgebiets, NI das Intervall, mit dem die Programmzeilen in das Zielgebiet eingebracht werden und SP das (alte) Blockende. Das ganze Verfahren stellt eigentlich kein Problem dat; Sie werden aber eine Fehlermeldung bekommen, wenn Sie versuchen, einen Pro- grammblock an eine Stelle zu schieben, wo nicht genügend Platz vorhanden ist. Zur Zusammenfassung: 9999 REM BLOCKANFANG ZIELGEBIET INTERVALL BLOCKENDE schiebt einen Block von BLOCK- ANFANG bis BLOCKENDE zum ZIELGEBIET mit einem neuen INTERVALL. LÖSCHEN Das Format dieser Anweisung unterscheidet sich nicht sehr von der vorhergehenden; zusätzlich wird nur als erste Anweisung hinter dem REM - Befehl ein kleines "e" eingegeben. Die zwei Parameter sind hier ST = Anfangszeile, ab der gelöscht werden soll und SP = Endzeile, bis zu der gelöscht werden soll. ST und SP sind dabei eingeschlossen. 9999 REM e 10 20 löscht Zeile 10 bis 20 einschließlich. Falls SP oder ST nicht existiert, betrifft der Löschvorgang die darauffolgende Programmzeile. 9999 REM e hat die Fehlermel- dung INVALID ARGUMENT zur Folge. AUSTAUSCH VON STRINGS Diese Routine kann einen String, der sich überall im Programm oder in bestimmten Programmzeilen befindet, durch einen anderen ersetzen. Die Austauschanweisung ist "c" (Kleinbuchstabe) gefolgt von den beiden Strings, wobei der erste durch den zweiten ersetzt wird. Zusätzlich können ST und SP festgelegt werden, um nur einen String in einem bestimmten Gebiet zu ersetzen. Ein String-Austausch im gesamten Programm wird folgendermaßen erreicht: 9999 REM c STRING1 STRING2 Weiterhin künnen Sie auch einen Stringaustausch ab ST bekommen, und zwar durch: 9999 REM c ST STRING1 STRING2 Ein Stringaustausch zwischen ST und SP erreichen Sie durch 9999 REM c ST SP STRING1 STRING2 ST und SP sind jeweils im Austausch eingeschlossen, falls ein entsprechender String in diesem Zeilen vorhanden ist. Da die beiden Strings durch ein Leerzeichen getrennt sind, darf der erste String kein Leerzeichen und auch nur Zeichen, deren Code über 32 liegt, enthälten. Der zweite String kann jeden Code (auch Kontroll- zeichen) beinhalten. Funktionen, die normalerweise im K-Modus eingegeben werden, künnen unter Verwendung des Statements THEN, das nachher gelöscht wird, eingegeben werden. Zahlen können zwar im Listing geändert werden, intern bleibt aber der vor- herige Wert erhalten. Wenn Sie PRINT USR nnnn als Programmzeile verwenden, haben Sie dadurch einen schnellen Editor für längere Programme, wenn Sie Variable oder Werte durchsehen wollen; dieses Verfahren wird später noch beschrieben. ANZEIGE DER VARIABLEN UND DEREN WERTE Durch diese Routine werden alle z.Z. definierten Variablen und deren Werte ange- zeigt. Durch "d" wird die Funktion aufgerugfen; dazu können noch zwei Parameter festgelegt werden, die sich auf die Anzahl der Elemente eines numerischen und al- phanumerischen Feldes, die angezeigt werden sollen, beziehen. Der gesamte Befehl hat die Form: 9999 REM d N1 N2 N1 ist die Anzahl der anzuzeigenden Elemente eines numerischen Feldes und N2 die Anzahl der Elemente eines alphanumerischen oder String-Feldes. Alle Programmvari- ablen werden angezeigt; wenn Sie nicht an den Feldern interessiert sind, geben Sie nur 9999 REM d 1 1 ein, woraufhin die Anzeige entsprechend minimalisiert wird. 9999 REM d zeigt die ersten 10 Elemente der numerischen Felder, bis zu 9999 Ele- mente der alphanumerischen Felder und natürlich alle anderen Variablen an. Durch weitere Festlegung von N1 können Sie selbstverständlich die Anzahl der Elemente der numerischen Felder erhöhen. Eine weitere Möglichkeit ist, die PRINT USR nnnn Anweisung als Programmzeile, z.B. in einer FOR NEXT Schleife einzugeben, was eine Anzeige der Variablen jedesmal, wenn die Zeile vom Programm abgearbeitet wird, zur Folge hat. Weiterhin können Sie, wenn die Anzeige mehr als eine Bildschirmseite füllt, die Systemvariable SCR CT verändern (POKE 23672,255), um einen automatischen Scroll mit der Programmge- schwindigkeit von Toolkit zu erhalten. SPEICHERPLATZBEDARF VON PROGRAMM UND VARIABLEN Sie können sich die Lange des Programms plus Variable durch 9999 REM p anzeigen lassen. Dieser Befehl hat nur ein Format und zeigt praktisch immer den Bedarf vom Programm und der Variablen an. Durch CLEAR erhalten Sie nur die Länge des Programms (alles in Bytes). ZUSAMMENFASSUNG Die einfachste Methode, um die Toolkit-Routinen aufzurufen, ist, die PRINT USR nnnnn Anweisung in Zeile 9997 zu setzen. In Verbindung mit 9998 LIST können auto- matisch eventuelle Änderungen durchgesehen werden; dabei erscheint hinter der letzten z.B. durch RENUMBER geänderten GOSUB Funktion ein blinkender Kursor. Die zusätzlich bei PRINT USR nnnnn angezeigte Zahl hängt von der jeweilig in der 9999 REM Anweisung festgelegten Funktion ab. Es wird demnach angezeigt: - bei RENUMBER die nächste nicht geänderte Programmzeilennummer - bei der Programmblockverschiebung die Anzahl der Bytes, die verschoben worden sing. - bei dem Stringaustausch die nächste nicht mehr bearbeitete (ob festgelegter String vorhanden oder nicht) Programmzeilennummer. - bei der Anzeige der Variablen der Wert 128 (Dimension des Variablenbereichs). - beim Löschen von Programmzeilen die nächste noch vorhandene Programmzeilennum- mer. Nun zu den Fehlermeldungen: Falls Toolkit irgendetwas, was hinter der REM-Zeile steht, nicht verstehen kann, erscheint die Meldung INVALID ARGUMENT. Wenn die Pa- rameter nicht verarbeitet werden können, erscheint PARAMETER ERROR. Eine OUT OF MEMORY ERROR Mitteilung bekommen Sie unter anderem, wenn Sie versuchen, eine Blockverschiebung durchzuführen, wenn nicht mehr genügend Speicherplatz für die Zwischenspeicherung des Blocks vorhanden ist. Reduzieren Sie dann den Programm- block. Wir sind sicher, daß Toolkit Ihnen beim Programmieren in BASIC eine große Hilfe sein wird und wünschen Ihnen viel Erfolg. Ihr Team von PROFISOFT