C 64
Software-Test

Macro-Basic: Die Unterprogramm-Bibliothek

Herkömmliche Basic-Erweiterungen sind in der Regel aus einem Guß, mit vielen nützlichen, aber auch unnötigen Befehlen. Und oft fehlen gerade die Funktionen, die man am dringendsten braucht. Damit will Macro-Basic ein für allemal Schluß machen.

An anderen Befehlserweiterungen fehlt immer etwas: Exbasic Level II hat keine Grafikmöglichkeiten, Simons Basic kein richtiges RENUMBER, um nur einige Beispiele zu nennen. Der Gedanke, ein flexibles Software-Instrument zu bauen, welches aus einer Vielzahl von Modulen besteht, die man — je nach aktuellem Bedarf — in den Computer lädt, drängt sich da geradezu auf. Verwirklicht wurde dieses einleuchtende Konzept mit Macro-Basic.

Packt man Macro-Basic aus, dann fällt dem in dieser Hinsicht von Commodore nicht gerade verwöhntem C 64-Besitzer zunächst einmal ein mehrere hundert DIN-A4-Seiten starkes Handbuch auf. Da merken Sie dann, was es heißt, seinen verfügbaren Basic-Befehlssatz in etwa zu vervierfachen. Das ist aber noch nicht alles, denn im Mai soll noch eine Grafikerweiterung auf den Markt kommen mit nochmal 18 neuen Befehlen. Daneben übersieht man fast die doppelseitig beschriebene Diskette und den Dongle, einen Kopierschutzstecker, der in den Kassettenport geschoben werden muß.

Wie ist Macro-Basic aufgebaut? Zwei Softwarepakete bilden derzeit das komplette System, von denen das erste aus einem Ladeprogramm und 260 Befehlen besteht, das zweite aber eine Dateiverwaltungs-Bibliothek mit weiteren 30 Befehlen bereithält. Das Ganze verteilt sich auf 160, größtenteils voneinander unabhängige, Module, die mittels eines Linkprogramms nach Belieben zusammengestellt werden können. Theoretisch verfügt man mit Macro-Basic nicht nur über eine, sondern über 160 x 160 = 25 600 mögliche Befehlserweiterungen, je nachdem, wie man sich die Module zusammenbastelt. Jedes Modul enthält einen oder meist mehrere Befehle in Form von optimierten Maschinenprogrammen. Das kleinste Modul beansprucht 7 Byte, das größte — wenn ich mich nicht vertan habe — 3670 Byte an Speicherplatz. Im Schnitt opfert man für jedes Modul etwa 100 bis 200 Byte. Wohin man im Speicher seine Befehlsbibliothek packen will, bleibt im eigenen Ermessen. Eine fertig erstellte Basic-Erweiterung kann unter einem Kennwort abgespeichert werden. Sollten Sie Zugang zu anderen Commodore-Computern haben, dann können Sie die Befehlserweiterung auch auf diese anwenden, denn Macro-Basic ist mit besonderem Augenmerk auf Kompatibilität gebaut worden.

Das Erstellen der individuellen Basic-Erweiterung geschieht relativ einfach im Dialog. Dazu lädt man das erste Programm auf der Macro-Basic-Diskette, gibt ein, auf welchem Commodore-System man arbeitet, steckt auf Anforderung den Datenstecker in den Kassettenport und gibt an, wo im Speicher die Maschinenprogramme abgelegt werden sollen. Man hat dann die Möglichkeit, sich auf dem Drucker ein Protokoll der weiteren Prozedur mitschreiben zu lassen. Das empfiehlt sich besonders bei größeren Erweiterungen, weil man nach einiger Zeit sicher nicht mehr weiß, welche Kombinationen man gewählt hat, und wohin man im Speicher das ganze Werk lädt. Die Startadresse braucht man nämlich, um die Erweiterung zu initialisieren. Von nun an ist alles ein Kinderspiel. Das Programm erfragt Stück für Stück die Kennzahlen der einzelnen Module bis man schließlich END eingibt. Dann erteilt man dem Ganzen einen Namen, legt eine formatierte Diskette ins Laufwerk, der Drucker schließt das Protokoll ab und das Ladeprogramm speichert alles ab, bevor es sich diskret aus dem Geschehen zurückzieht. Zum Testen habe ich mir mal eine Erweiterung aus 154 Modulen zusammengestellt, die etwa 23,6 KByte beansprucht. Das Ganze dauert ungefähr eine halbe Stunde. Wenn man mehr Übung darin hat, reduziert sich der Zeitaufwand sicher noch erheblich. In diesen 23,6 KByte liegen immerhin 260 neue Befehle! Für den Normalgebrauch kommt man sicher leicht mit den 4 KByte im oberen RAM des Commodore 64 ($C000 bis $D000) aus.

Benötigt man nun irgendwann eines der auf diese Weise zusammengestellten Instrumente, dann lädt man es unter dem zugeteilten Namen, gibt danach NEW ein und startet mittels SYS Startadresse,*. Die Startadresse holt man sich aus dem Protokoll als Startadresse Original. Automatisch wird nun auch der Basic-Speicher begrenzt und alle Befehle der Erweiterung stehen zur Verfügung.

Um welche Befehle es sich dabei handelt, sehen Sie aus der beigefügten Tabelle. Es ist allerdings unmöglich, in diesem Rahmen alle 290 Befehle vorzustellen. Deswegen habe ich nur eine — sicherlich etwas willkürliche — Auswahl der wichtigsten dort aufgeführt. Allen Macro-Basic-Befehlen ist ein »&« voranzustellen.

Befehl Kurzbeschreibung
AUTO Automatische Zeilennumerierung mit Textvorgabe-Option
BIN Wandelt Binärstring in Dezimalzahl um
BIN$ Wandelt Ganzzahl in 8- oder 16-stelligen Binärstring um
BLOAD Datenblock ab bestimmter Adresse in Speicher laden
BSAVE Speicherbereich abspeichern
BSPACE Bildschirmfenster mit Zeichen füllen
CALL Aufruf echter Unterprogramme
CEIL Ermittelt den Nachkommawert
CHANGE Durchsucht Speicher nach Stringvariable, teilt Position mit und ersetzt String
CONV Umsetzen von Druckersteuerzeichen etc. in einem String
DEEK Lesen von 2 Byte, die in 16-Bit-Wert umgesetzt werden
DEG Umrechnung Altgrad in Bogenmaß
DELDIM$ Löschen eines String-Arrays
DEZ Umwandeln von Sedezimalzahlen in Dezimalzahlen
DLIST Anzeige best. Records auf dem Bildschirm
DMERGE Mischen von Basic-Programmen nach Zeilennummern
DOKE Speichern von 16-Bit-Werten als 2 Byte
EDIT Editieren bestimmter Bildschirmzeilen
EVAL Ermittelt Zahlenwert aus Arithmetikstring
FAK Berechnen der Fakultät
FIND Durchsucht Speicher nach String und teilt Position mit
FLASH Läßt Bildschirmfenster blinken
FREDIM Hebt eine Dimensionierung auf
GET Liest Zeichen von Tastatur und überträgt nur erlaubte Zeichen
INDEX Durchsucht Stringvariable nach einer Stringvariablen und teilt Position mit
INFORM Erlaubt formatierte Dateneingabe
INMSG Überträgt Speicherbereich in Eingabefelder einer Bildschirm-Maske
INPUT# Lädt maximal 65000 Zeichen von Diskette in angegebenen Speicherbereich
INS$ Einfügen eines Strings in eine Stringvariable
KEY.S$ Durchsucht sequentielle Datei nach Suchbegriff
LIKE Kopiert Speicherbereich in Stringvariable
LINE INPUT Überträgt alle Zeichen (auch ,; etc.) in Stringvariable
LIST$ Überträgt Basic-Zeile entschlüsselt in String
MASK Erlaubt die Erstellung von Bildschirmmasken
MAX Ermittelt Maximum aus numerischen Variablen
MOB DEF Erlaubt die temporäre Anwendung weiterer Erweiterungen von Diskette
MIN Ermittelt Minimum aus numerischen Variablen
MOVE Kopiert Speicherbereich an vorgegebene Adresse
NONSTOP Blockiert STOP-Taste
NSORT Sortiert Gleitkomma-Array in aufsteigender Folge
PACK Packt Gleitkommavariable in 5-Byte-String
PLIST Zeigt Basic-Programm von Diskette auf Bildschirm
QUIT Liest nur erlaubte Zeichen von Tastatur
REP Schaltet Repeat-Funktion ein
REPLC$ Durchsucht String A$ nach String B$ und ersetzt B$ durch C$
RESTORE Setzt DATA-Zeiger auf bestimmte Zeile oder Label
ROLLDE Löscht Bildschirmzeile. Überträgt die Zeile in String und füllt sie dann mit einem angegebenen Stringinhalt
ROTL Rollt Stringinhalt nach Bedingungen nach links
ROUND Rundet Zahl auf angegebene Nachkommastellen
RUN$ Ausführen von Basic-Befehlen in einem String
SBC Subtrahiert Inhalt zweier Stringvariablen
SCR DO Rollt Bildschirm nach unten
SET% Setzt Bitposition eines Strings auf bestimmten Wert
SIM Simuliert Eingabe einer Stringvariablen über Tastatur
SORT Sortiert String-Array in aufsteigender Folge
STATE Setzt Inhalt einer String-Variablen in ausführbare Basic-Befehle um und plaziert sie in angegebene Basic-Zeile während der Ausführung
SWAP Vertauschen zweier Zahlenvariable
TEST% Ermittelt Bit-Wert bestimmter Position eines Strings
TFRAME Erzeugt Rahmen um Textstring
TIME Initialisiert, stellt und zeigt Uhr an bestimmter Speicheradresse
TRANS Formatiertes Umsetzen eines Strings nach Format und Positionsvariable
TRON Aktivieren der TRACE-Funktion
USING Ausgabe von Zahlen oder Strings nach Formatvariablen
WAIT STOP Hält Programm an, bis STOP-Taste ein zweites Mal gedrückt wird
XRT Ermittelt X-te Wurzel aus Y
ZADR Ermittelt Adresse des 1. Byte einer bestimmten oder der gerade ausgeführten Basic-Zeile.
' Erlaubt Kommentar auch zwischen Befehlen. Vor jeden Befehl & setzen.

Sind Sie ein Verfechter der strukturierten Programmierung? Dann verfügen Sie über Befehle wie IF… THEN… ELSE… ENDIF, aber auch SELECT.. CASE.. OTHER.. ENDSEL, DO…DO WHILE…DO UNTIL… mit END DO und EXIT Label können gesetzt und mit GOSUB oder GOTO angesprungen werden. Echte Unterprogramme mit eigenen Variablen, die per CALL anzusteuern sind, sind möglich. Variable und Arrays können aber auch vom Hauptprogramm an das Unterprogramm übergeben werden. Mittels ’ (Hochkomma) können Kommentare ins Programm geschrieben werden. Durch SUBMIT ist es möglich, auf einfache Weise mit Overlay-Technik zu arbeiten, was auch durch den OVERLAY-Befehl für einzelne Programme möglich ist. ON ERROR und RESUME erlauben das Auffangen von Fehlermeldungen, die in Variablen EC%, EL% und ET$ als Fehlercode, fehlerhafte Basic-Zeile und Fehlertext abfragbar sind. Fast schon selbstverständlich sind Befehle wie AUTO (AUTONUMBER-Funktion, die auch noch Texte wie zum Beispiel DATA schreiben kann), BLOAD oder BSAVE (ladender oder speichernder Zugriff auf beliebige Speicherbereiche), DELETE (Löschen beliebiger Zeilen), DLINK (Anhängen von Programmen) und DMERGE (Mischen von Programmen nach Zeilennummern!), DUMP-Funktionen, die auch die Auflistung von Arrays erlauben, LIM (zum Begrenzen des Basic-Speichers), LPAGE (zum seitenweisen Vorwärts- oder Rückwärts-Auflisten von Programmen), RENUM (das ist ein echtes RENUMBER), RLOAD (zum Laden und Starten eines Programmes), FIND und SEARCH (durchsucht Programme nach Variablen, Befehlen oder Konstanten und listet nach Speicherposition oder Basic-Zeilennummer auf) und TRACE-Möglichkeiten zur schrittweisen Bearbeitung von Basic-Programmen.

Der Verkehr mit Peripherie wird gefördert durch SPOOLING-Befehle, Anweisungen zur Druckeranpassung, DISK zum Ermitteln von Diskettenparametern, HCOPY zum Ausdrucken des Bildschirminhaltes. SCR LOAD oder SAVE erlaubt das Einladen oder Abspeichern von Bildschirmen. Mittels RLIST und SLIST lassen sich relative oder sequentielle Dateien auf dem Bildschirmzeigen. TURBO beschleunigt Diskettenoperationen.

Grafiken können — ab Mai angekündigt, auch mit Hochauflösung — durch Pixel oder Balken erstellt werden. FLASH-Funktionen lassen Bildschirmteile blinken, SOUND und BEEP sorgen für Lautuntermalungen. Eine Reihe von Befehlen greifen direkt auf den Bildschirm zu und erlauben beispielsweise das Füllen von Fenstern mit Zeichen.

Mathematisch Interessierte haben eine Vielzahl von neuen Möglichkeiten zur Verfügung, angefangen vom ACOS über Rechnungen mit mehrfach genauer Zahlendarstellung (bis zu 100 Ziffern!), Umrechnungen innerhalb der Zahlensysteme dezimal/sedezimal/binär, Winkelmaß-Umrechnungen etc. bis zur Berechnung des Gregorianischen Datums aus dem Julianischen und umgekehrt. Strings können wie mathematische Ausdrücke behandelt oder sogar als Basic-Anweisungen interpretiert werden.

Und beim Stichwort Strings sind wir bei der eigentlichen Stärke von Macro-Basic angelangt. Ich habe nie gewußt, was man alles mit Strings anstellen kann, bis ich Macro-Basic kennenlernte! Sie werden kaum eine String-Operation vermissen. Mir ist jedenfalls keine mehr eingefallen. Ob es sich um Suchen von ganzen Strings oder Teilen davon, Tauschen oder Verändern, Ein- oder Ausgabe, Positionieren, Prüfen, Umwandeln, Formatieren, Löschen… dreht, alles ist vorhanden.

Stringverarbeitung spielt beim Verwalten von Daten eine Rolle. Neben einer ganzen Reihe von neuen Befehlen, die den Datenzugriff auf Diskette oder im Speicher betreffen, gibt es sechs Module mit 30 Befehlen, die einen Dateityp schaffen, der ISAM/VSAM genannt wird. ISAM kennt vielleicht manch einer als IBM-Begriff: Indexed Sequential Access Method (also Index-sequentieller Dateizugriff). VSAM steht für Virtual Storage Access Method, also virtuelle Dateizugriffsmethode. Mittels ISAM/VSAM kann auf dreierlei Wegen Dateiverarbeitung geschehen: Sequentielle Verarbeitung in der Eingabereihenfolge, sequentielle Verarbeitung in Schlüsselfolgen und die gezielte Verarbeitung über Schlüssel. Datensätze dürfen variable Länge haben, die Datenspeicherung erfolgt blocküberspannend, mehrere Schlüssel dürfen pro Datensatz verwendet werden, aber auch mehrere Datensätze pro Schlüssel sind möglich, wobei übrigens der Schlüssel nicht Bestandteil des Datensatzes sein muß. Bis zu fünf Diskettenstationen der unterschiedlichen CBM-Formate können parallel verwaltet werden. Außer den Befehlen zum Einrichten, Löschen und Sichern solcher Dateien stehen Befehle zum Verarbeiten von Diskettenfehlern, zum Update, zum Suchen von Datensätzen, zum Überschreiben, zum Kopieren, zum Reorganisieren der Datei beziehungsweise der Einträge zur Verfügung.

Sicherlich werden Sie in dieser Beschreibung Befehle vermissen. Das liegt aber nicht daran, daß Macro-Basic sie nicht zur Verfügung stellen würde, sondern daran, daß es unmöglich ist, hier alle aufzuführen. Kritik muß das Handbuch finden. Nicht, daß es vor Rechtschreibfehlern nur so strotzt stört, sondern, daß es offensichtlich für die großen Brüder des Commodore 64 geschrieben wurde, denn alle den Bildschirm betreffenden Operationen beziehen sich auf einen Bildschirmstart bei 32768. Einige Demoprogramme enthalten schlichtweg Fehler. Der Gebrauch der Bezeichnung BCD (binary coded decimal) als Abkürzung für Bildschirmcode verwirrt auch einigermaßen. Der Autor versichert aber, das Handbuch sei inzwischen überarbeitet worden und die neue Version enthalte diese Fehler nicht mehr. Der Preis hält sich im üblichen Rahmen: 298 Mark zahlt man für die Normalausführung (inklusive Dongle), dazu noch 34 Mark für das Handbuch. Als Zusatzpackung erhält man für 148 Mark die ISAM/VSAM Dateipackung. Nach Auskunft des Autors sind der Grafikzusatz und weitere geplante Ergänzungen darin schon enthalten.

Fazit: Durch Macro-Basic wird der Commodore 64 zu einem derart vielseitigen Computer, daß dieses Software-Paket für ernsthafte Anwender guten Gewissens zu empfehlen ist.

(Heimo Ponnath/gk)

Info: S&A Software, Bernd, Lambertusstr. 32, 5210 Troisdorf-Muellekoven

PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →