ZX81: Neunmalkluge Software-Programme

Für den ZX81 gibt es kistenweise »Werkzeuge«. Wir haben neun von diesen Programmen getestet, um Ihnen die Auswahl zu erleichtern.

Nicht alle hier besprochenen Tool-Programme sind für jeden Anwender geeignet. Vor allem der weniger gewandte Hobbyprogrammierer wird nur einen Teil als hilfreich empfinden.

Extended Basic für ZX81 (16 bis 64 KByte)

So ist zum Beispiel das Programm »Extended Basic« (Erweitertes Basic) ausschließlich für Anwender geeignet, die sich in der allgemeinen Basic-Programmierung zumindest fundamental auskennen.

Ist dies der Fall, wird das Programm zu einem kaum entbehrlichen Hilfsmittel. Verwendbar für Speichererweiterungen von 16 bis 64 KByte RAM bietet das Programm folgende zusätzliche Befehle:

READ, DATA, RESTORE n, ON, GOTO, ON, GOSUB, ON ERROR GOTO, SCROLL (auf, ab, links, rechts), TRON, TROFF, BRKON, BROFF.

Zudem werden die Basic-Befehle CLS, SCROLL, PRINT und COPY verbessert, indem sie schneller (CLS) und erweitert (SCROLL in vier Richtungen, PRINT auf 24 Zeilen) anwendbar sind. Somit nähert sich der Befehlssatz des ZX81 größeren und teureren Computern.

Naheliegend ist auch der Gedanke, mit Hilfe dieses Programms und einer seriellen Schnittstelle RS232 (ASCII-Code durch Transforming), Kontakt mit anderen Computern aufzunehmen.

Das Maschinencode-Programm benötigt eine Speicherkapazität von 1777 Byte und wird bei einem 16 KByte-Speicher über RAMTOP geladen, bei 64 KByte RAM in den Adressenbereich 8192 bis 16383.

Bei der Verwendung eines 64-KByte-RAM-Speichers und zusätzlichen Peripheriegeräten wie etwa Schnittstellen, HRG-Modul, Digitaltracer oder Soundbox ist auf die Belegung der verschiedenen Speicheradressen zu achten.

Auf die neuen Programmierbefehle einzeln einzugehen, würde diesen Rahmen sprengen. Sie dürften aber dem etwas fortgeschrittenen Programmierer — für den dieses Programm ja geschrieben wurde — bekannt sein.

Die Anleitung zum Programm (leider etwas klein geschrieben und kurz gefaßt) erläutert jeden Programmbefehl. Zusammenfassend darf man sagen, daß Extended Basic eine willkommene Bereicherung für den ZX81 bringt.

Nach einer gewissen Einarbeitungszeit ist es dem Programmmierer möglich, Befehle einzugeben, die früher bei einem Mini-Computer in dieser Preisklasse noch niemand für möglich hielt.

Disacsem für ZX81 (ab Grundversion)

ZX81-Freunde, die sich näher mit Hexadezimalcode und Mnemonics befassen wollen, erhalten mit diesem Programm eine wertvolle Hilfe. Es verfügt über alle Mnemonic-Kürzel, mit einer Ausnahme: den relativen Sprung. Hier muß anstelle der Sprungweite die Zieladresse eingegeben werden.

Nach dem Laden des Programms (mit Autostart) wird nach der Startadresse gefragt, ab der die Disassemblerfunktion gewünscht wird. Ist diese Adresse eingegeben, werden für die ersten 21 Speicherstellen der jeweilige Dezimalcode, der Hexadezimalcode sowie das entsprechende Mnemonickürzel aufgelistet.

Das Bildschirmlisting kann ebenfalls ausgedruckt werden. Begrüßenswert ist, daß die Disassembler-Funktion durch einen entsprechenden Befehl mit einer anderen Adresse fortgesetzt werden kann.

Man muß aber unbedingt berücksichtigen, daß dieses Programm die Bytes 32491 bis 32499 als Zwischenpuffer benutzt und diese somit als Speicherplätze nicht mehr zur Verfügung stehen! Als interessant betrachte ich die Möglichkeit, das Programm Disacsem mit dem Programm Progstore zu verbinden. Dann kann man nämlich Routinen bis zu einer Länge von 2736 Byte entschlüsseln.

Insgesamt bieten also beide Programme zusammen die optimale Lösung für diejenigen ZX81-Anwender, die gerne näheres über ihre Programme und die Arbeitsweise ihres Computers wissen wollen. Acsembler für ZX81 (ab Grundversion)

Bei dem Programm Acsembler handelt es sich um ein Hilfsprogramm zum Erstellen eigener Maschinencode-Programme, indem es Mnemonic-Kürzel in Maschinencode (M-Code) umsetzt.

Acsembler läßt sich mit den Programmen ACS-Debug und Disacsem kombinieren, so daß die in M-Code transformierten Daten auch wieder decodiert werden können. Dieses ist für eine eventuelle Fehlersuche fast unentbehrlich.

Nach dem Laden des Programms kann man nun die Mnemonic-Kürzel in REM-Zeilen eingeben. Hierbei müssen jedoch einige Punkte beachtet werden.

Die Eingabe der Mnemonics darf erst mit der dritten REM-Zeile beginnen.

Die erste REM-Zeile muß genügend Speicherplatz für die gewünschte M-Code-Länge zur Verfügung haben. Die zweite REM-Zeile bedarf eines GO-Befehls, um dem Computer mitzuteilen, daß nunmehr die Mnemonics verarbeitet werden sollen.

Nach Beendigung der Eingabe von Mnemonics muß die folgende REM-Zeile unbedingt mit dem »Finish« besetzt werden, um dem Computer das Ende der Eingabe zu signalisieren. Hiernach braucht der Acsembler nur noch mit »RAND USR 30512« aktiviert zu werden.

Vorausgesetzt, man hat bei der Eingabe Abstände, Trennzeichen und so weiter genau beachtet, steht nach Betätigung der RUN-Taste nunmehr das entsprechende Maschinenprogramm in der ersten REM-Zeile.

Sollte man sich vertan haben, was mir selbst zu Beginn häufig passierte, wird anhand der Fehlermeldung deutlich, was falsch gemacht wurde. Das Programm erzieht somit zum logischen Denken.

Ansonsten dürften bei ZX81-Anwendern, die sich mit Mnemonics und M-Code befassen wollen, kaum Schwierigkeiten bei diesem nützlichen Programm auftreten.

ZX-Bug für ZX 81 (ab 8KByte)

Wohl jeder von uns kennt Möbel-Supermärkte, die zum Teil qualitativ hochwertige Einrichtungsgegenstände verkaufen, — jedoch mit der Einschränkung, diese selbst abholen und aufbauen zu müssen.

Ein ähnliches Empfinden hatte ich (bezüglich der Vertriebsart) beim Betrachten der Programmkassette sowie der beiliegenden »Beschreibung«.

Hier wird ein durchaus brauchbares »Arbeits«-Programm, welches auch im Detail Brisanz zeigt, mit einer Anleitung versehen, die, ganz abgesehen von Druckfehlern, wirklich unzumutbar ist.

Nun kann ein Programm für den Anwender nur so gut sein wie seine Beschreibung. Dieses weiß jeder Insider. Warum also diese rigorosen »Sparmaßnahmen« bei der Anleitung? Die Vertriebsfirma sollte dieses überdenken.

Zum Programm selbst: Das 4 KByte RAM umfassende Programm mit seinen 29 abzurufenden Befehlen wird wie üblich, in den oberen Bereich des Speichers geladen, also über RAMTOP. Erwähnenswert ist für interessierte Programmierer, daß ZX-Bug in Hexadezimalcode arbeitet und somit alle Adressen maximal vier »Hexstellen« beanspruchen.

Ich habe versucht, auf die Maschinencode-Routinen einzeln einzugehen. Dieses hätte allein schon ein halbes Dutzend Seiten ergeben.

Betrachten wir also nur die interessanten Anwendungsmöglichkeiten: Eine gute Routine ist das Suchen von Hexbytes in einem definierten Speicherbereich, wobei jede Adresse mit einem Hexadezimalcode gelistet wird.

Oft verwendet wird sicher die Routine, die das Übertragen eines Speicherinhalts in einen anderen Speicherblock ermöglicht. Für den Programmierer interessant ist auch die Möglichkeit, Auskunft über den Wert von Flags zu bekommen. Ein Korrigieren (Austauschen) einzelner Bytes in einem definierten Speicherbereich ist ebenso möglich.

Selbst das »ZX-Bug« läßt sich ohne weiteres in einem anderen Speicherbereich transferieren.

Zur Disassembler-Funktion sei vielleicht noch gesagt, daß sie auch für ZX81-Anwender geeignet ist, die noch keine großen Erfahrungen in der Maschinencode-Programmierung haben und sich noch in der Lernphase befinden. Alle anderen Routinen sind aus anderen Programmen bekannt und im Prinzip nichts Neues.

Programm Meditor für ZX81 (16 KByte RAM)

Das Programm Meditor stellt den Taster bei dem Versuch einer Beschreibung vor Probleme.

Dieses Maschinencode-Programm mit einer Länge von 3,57 KByte (oberhalb von RAMTOP gespeichert) und seinen zirka 200 Unterprogrammen gehört zu den besten und umfangreichsten Arbeitsprogrammen, die mir bislang für den ZX81 bekannt sind. Daher ist es in diesem Rahmen auch nur komplex zu beschreiben. Glücklicherweise hat sich die Vertriebsfirma entschlossen, eine entsprechend ausführliche und verständliche Anleitung beizufügen. Durch diese Anleitung wird das Arbeiten mit dem Programm zur Freude. Die Behauptung der Vertriebsfirma, »Meditor« bilde ein zweites Betriebssystem, ist sicher nicht übertrieben. In der Tastzeit war es mir trotz intensiver Bemühungen nicht möglich, alle Funktionen durchzuarbeiten, da diesen teilweise nur durch die eigene Phantasie Grenzen gesetzt sind. Also eine wahre Spielwiese für experimentierfreudige Programmierer. Der Entwickler dieses Programms hat es verstanden, mit nur einem Programm dem ZX81 eine Fülle schneller Funktionen beizubringen. Was kann nun Meditor? Hier eine Auswahl der wichtigsten Funktionen:

Das Programm besteht aus dem eigentlichen Meditor-Programm und einem Demo-Programm, welches beim Beobachten auf dem Monitor schon Vorfreude für die eigene Anwendung aufkommen läßt. Aufgrund der guten Beschreibung hatte ich keine Schwierigkeiten mit dem Abrufen der Maschinencode-Routinen. Im Gegenteil: Mein Interesse an der Erstellung eigener Programme wurde geweckt. Meine Ideen ließen sich Dank dieses »Multi-Editors« zügig realisieren.

Es ist so gut wie unmöglich, unbeabsichtigt das Betriebssystem »ab-stürzen« zu lassen, da ein Eingabefehler sofort eine Error-Meldung zur Folge hat. Der gemachte Fehler ist anhand des Error-Code-Listings ohne weiteres zu erkennen und leicht zu korrigieren.

Das Programm läßt sich leicht in eigene Basic-Programme einbinden und kann durch diese beliebig manipuliert werden. Der Cursor, welcher auch den jeweiligen Modus anzeigt und beliebig gesetzt werden kann, sowie 76 verschiedene Funktionen, die unmittelbar über die Tastatur eingegeben werden können, erlauben eine Vielfalt von Bildschirm — und Speichermanipulationen. Hierdurch wird auch dem noch etwas unerfahrenen Programmierer die Möglichkeit gegeben, eigenen Basic-Programmen ein professionelles Design zu verleihen.

ZX-Toolkit für ZX-81 (16 KByte RAM)

Es ist schon erstaunlich, welche Möglichkeiten dem ZX-81-Programmierer teilweise nur durch gut durchdachte Software geboten werden.

Eines dieser nützlichen Hilfs- und Arbeitsprogramme ist sicher das Programm »ZX-Toolkit«. Das zirka 2,3 KByte lange Programm (über RAM-TOP gespeichert) erlaubt das Abrufen neun verschiedener Maschinencode-Routinen. Diese können nach dem Laden mit »RAND USR« und der entsprechenden Adresse abgerufen werden. Hier nun die neuen Toolkit-Befehle:

RENUM, DEL, MEM, DUMP, FIND, REPLACE, REMKILL, SAVE, AP-PEND.

Die Beschreibung des Programms ist knapp gehalten, reicht aber aus, um alle Funktionen zu verstehen. Das Aufrufen und Arbeiten mit den Maschinencode-Routinen ist einfach und auch für den nicht so erfahrenen Programmierer zu verstehen.

Von mir am meisten benutzt wurde die RENUM-Routine, während die DEL-Routine meines Erachtens seltener benötigt wird, da in den wenigsten Fällen viele hintereinanderliegende Zeilen aus einem Listing genommen werden müssen.

Auch die MEM-Routine hat sich als äußerst nützlich erwiesen, zeigt sie ja jederzeit den noch verfügbaren Speicherplatz an. Optimal ist ebenfalls die DUMP-Routine. Wer kennt bei langen Programmen nicht das dauernde Suchen nach schon definierten Strings. SAVE und AP-PEND in Verbindung mit RENUM bieten jederzeit die Möglichkeit, zwei Programme durch Umnumerierung der Zeilen eines der beiden Programme aneinanderzufügen.

Im Ganzen gesehen bietet Toolkit also einige wirklich brauchbare Erleichterungen beim Programmieren und hat sich in der Praxis voll bewährt.

Screenkit 1 für ZX-81 (bis 64 KByte RAM)

Dieses Maschinencode-Programm bietet die Möglichkeit, Bildschirmgrafiken effektiv zu gestalten und anschließend auf Band zu speichern.

Mit einem Speicherbedarf von zirka 3,5 KByte RAM in einem 16 bis 64 KByte großen RAM-Speicher bietet es neun abrufbare Routinen, die sich leicht in Basic-Programme ein-fügen lassen.

Folgende Routinen sind mit der USR-Funktion abrufbar: SCREEN-SLIDE (mit vier verschiedene SCROLL-Funktionen)

CLS (Eine schnellere Funktion des gleichen Basic-Befehls)

RANDER (Hiermit wird die Möglichkeit geboten, Ränder um eine beliebige Fläche zu zeichnen. Die Koordinaten werden einfach mittels POKE-Adressen in einem Basic-Programm aufgerufen.

CPS (Mit CPS ist die Löschung eines Teilbereiches des Bildschirminhaltes möglich. Die Parameter können wie bei RÄNDER durch POKE-Adressen beliebig gesetzt werden.) REVERSE (Eine interessante Möglichkeit, Teilbereiche des Bildschirminhaltes invers darzustellen, indem in Verbindung mit RÄNDER die Koordinaten bestimmt werden.)

DURSOR (Der rhythmisch invers blinkende Cursor signalisiert eine Eingabemöglichkeit und läßt sich über den gesamten Bildschirm verschieben)

MEMORY (zeigt die jeweils noch vorhandene Speicherkapazität an) SAVE VARS und LOAD VARS (Diese sehr interessanten Routinen bieten die Möglichkeit, Basic-Variable auf Band zu speichern — in doppelter Geschwindigkeit! Durch SAVE VARS in Verbindung mit LOAD VARS lassen sich zudem zwischen verschiedenen Programmen Datensätze austauschen, was in vielen Fällen eine Arbeitserleichterung bedeutet, speziell für Anwender, die überwiegend gleiche Daten verarbeiten (wie Dateien, Karteien und so weiter).

Screenkit 1 bietet dem Programmierer einige Erleichterungen bei der Erstellung seiner Programme. Die Vorteile des Programms liegen in der sehr guten CPS-Routine, die es auch dem noch ungeübten Programmierer ermöglichen, gute Bildschirmeffekte zu realisieren. Auch die CLS-Routine beeindruckte mich, da die Bildschirmlöschung so schnell vonstatten ging, das kaum ein Übergang beim Wechsel des Bildschirminhaltes zu sehen war.

Dieses ist ein nicht unwesentlicher Faktor beim Programmieren von Spielprogrammen mit verschiedenen Bildern, die schnell gewechselt werden sollen.

Leider hat man auch in diesem Programm versäumt, eine durchaus machbare SCROLL-Routine einzufügen, die immer wieder gewünscht wird: das diagonale Scrollen nach vier Richtungen.

Dennoch bin ich der Meinung, daß man mit diesem Programm eine gute Arbeitshilfe geboten bekommt.

Promerge für ZX-81 (ab Grundversion)

ProgMerge bietet die Möglichkeit, Basic-Programme (oder Teile davon) über RAMTOP zu speichern und diese in einem zweiten Programm zu integrieren. Die so zusammengefaßten Programme werden in Zehner-Schritten neu durchnummeriert. Ein gutes Hilfsprogramm also, welches dem Programmierer die Arbeit wesentlich erleichtert.

Nachdem ein Programm, das übernommen werden soll, am Anfang und Ende durch REM-Anweisungen gekennzeichnet wurde, kann dieses in dem geschützten Speicherbereich zwischengespeichert und durch einen RAND-USR-Befehl mit einem anderen Programm zusammengesetzt werden. Auch Befehle wie GOTO I + V oder GOSUB ZZ werden einwandfrei verarbeitet.

In dieser verbesserten Prog-Merge-Version werden beide Programme zuerst einzeln durchnumeriert, so daß es keine Probleme mit identischen Zeilennummern gibt. Variable wie GOTO A müssen aber nachträglich eingesetzt werden. Hat man einen Fehler begangen, wird dieser angezeigt.

Wie bei anderen Arbeitsprogrammen, zum Beispiel ACS-Debug, ProgStore und ProKit, güt auch hier: Das Programm ist gut — nur die Anleitung könnte übersichtlicher sein.

Progstore für ZX-81 (ab Grundversion)

Das Programm ProgStore beherrscht nur eine, dafür aber umfangreiche Routine. Diese ermöglicht dem Programmierer, ein Programm mit einer Länge bis zu 2759 Bytes in einem vor NEW gesicherten Bereich zu speichern und dieses später nach dem Laden eines zweiten Programmes durch USR-Anweisungen beliebig abzurufen. Ideal also für Unterprogramme.

Jedoch mit einer Einschränkung: FOR/NEXT-Schleifen sind als Eingabe bei ProgStore nicht möglich. Ist man nun gezwungen, eine Schleife zu verwenden, muß diese im Hauptprogramm definiert werden. Eine Tatsache, die nicht unbedingt nötig wäre, würde man das Programm noch einmal gründlich überdenken und entsprechend erweitern. Dann wäre es ein durchaus sinnvolles und komfortables Hilfsprogramm für viele Programmierer.

(Heinz W. Gier/mk)



Aus: Happy Computer 09 / 1984, Seite 150

Links

Copyright-Bestimmungen: siehe Über diese Seite