C 64
Software-Test

Der »Assembler-Werkzeugkasten«

Das Programmieren ist eine der reizvollsten Anwendungen eines Computers. Doch ohne gutes »Werkzeug« geht das nicht. Ist StarTool hierfür ein geeignetes Hilfsmittel?

Will man die höchsten Stufen der Programmierung erreichen, so kommt man an der Maschinensprache kaum vorbei. StarTool ist ein Softwarepaket, das zum Preis von 64 Mark alle notwendigen Hilfsmittel zum Erstellen von Maschinenprogrammen beinhaltet. Neben einem Assembler mit einem sehr guten Editor befindet sich auf der Diskette noch ein kleiner Monitor und ein Reassembler. Die Diskette ist in keinster Weise kopiergeschützt, der Käufer kann sich also leicht individuelle Programmierdisketten erstellen.

Das Programm »EDASS«, das sich aus Editor und Assembler zusammensetzt, wird absolut geladen und startet von selbst. Nachdem ein Bereich für eigene Basic- oder Maschinenprogramme reserviert wurde, kann mit dem Editor gearbeitet werden. Er ermöglicht das gleichzeitige Bearbeiten von bis zu acht Quelltexten, was sich als sehr nützlich erweist. Die meisten Befehle des Editors (siehe Tabelle 1), die übrigens an dem vorangestellten Ausrufezeichen zu erkennen sind, lassen sich wie ein normaler Basic-Befehl eingeben und auch abkürzen.

Floppybetrieb
!ASAVE Speichert einen Bereich auf Disk
!DIR Gibt das Directory aus
!DISK Sendet einen Floppy-Befehl
!DS Liest den Fehlerkanal
!LOAD Lädt einen Quelltext
!SAVE Speichert einen Sourcecode in komprimierter Form ab
Verwaltung der Quellcodes
!BEGIN Eröffnet ein neues Programm
!CLEAR Löscht alle Labels
!DISPLAY Listet Länge und Name der Sourcecodes
!EDIT Springt in die Eingabemaske
!LIST Gibt das Listing eines Programms aus
!MOD Wählt zwischen 40- und 80-Zeichen-Darstellung
!NEW Initialisiert den Speicher
!RENAME Benennt einen Quelltext um
Editierkommandos
!ERASE Löscht Zeilen oder Programme
!ERASEB Löscht den aktuellen Block
!EXIT Verläßt den Editor
!FIND Sucht nach Zeichenketten
!INSERT Kopiert einen Programmteil
!INSERTB Kopiert den aktuellen Block
!JUMP Springt an eine Stelle im Programm
!LET Definiert ein Label
Tabelle 1. Die Befehle des Editors

Alle Labels, Befehle und Kommentare werden automatisch untereinandergesetzt, was zur Folge hat, daß zusammen mit der Pseudo-80-Zeichen-Darstellung sehr übersichtliche Sourcecodes fast von selbst entstehen.

Die meisten Maschinenbefehle lassen sich beim Eingeben abkürzen. Das ist besonders praktisch und ermöglicht schnelles und bequemes Programmieren.

Der Editor arbeitet bildschirmorientiert. Dies zeigt sich auch bei der Tastaturbelegung. Sie ist sehr gut durchdacht und läßt kaum Wünsche offen. So kann man mit <CLR> eine Zeile löschen und mit <↑> an jeden Platz im Listing springen. Mit den Funktionstasten <F5/F6> wird seitenweise geblättert, und mit <F7/F8> kann man von Formatposition zu Formatposition springen. <F1> schaltet, zwischen Einfüge- und Änderungsmodus um. Mit dem FIND-Befehl kann man den Quelltext nach einer beliebigen Zeichenfolge durchsuchen und mit <CTRL+L>, <CTRL+O> oder <CTRL+K> werden das Label, der Operand oder der Kommentar einer Zeile gelöscht. Sogar Blockoperationen sind möglich. Dazu definiert man zuerst mit <CTRL+A> und <CTRL+E> Anfang beziehungsweise Ende des gewünschten Bereiches. Danach kann dieser Block gelöscht, kopiert oder an eine andere Stelle im Text verschoben werden. Das Erstellen von Quelltexten geht so komfortabel von der Hand, wie bisher nicht gewohnt. Doch damit nicht genug, auch der Taschenrechner neben dem Computer hat an Wichtigkeit verloren, denn im Editor sind die meisten Rechenoperationen und logischen Verknüpfungen erlaubt. Diese können im Binär-, Oktal- und Hexadezimalsystem ausgeführt werden. Leider wurde hier aber auf komplexere Fließkommaoperationen, wie zum Beispiel die Winkelfunktionen, verzichtet. Wenn das Quellprogramm soweit erstellt ist, ruft man den Assembler auf.

Der Assembler versteht alle Befehle und Adressierungsarten im MOS-Standard und verarbeitet Labels, die aus bis zu 63 alphanumerischen Zeichen zusammengesetzt sein können. Auch die Geschwindigkeit ist nicht zu verachten: So werden 4 KByte Objectcode in zirka 11 Sekunden erzeugt.

Sämtliche Rechenfunktionen des Editors sind auch im Assembler möglich. Die große Anzahl an Pseudo-Opcodes (siehe Tabelle 2) eröffnet dem Programmierer viele Möglichkeiten. So kann man in den Quelltext Tabellen einfügen, die aus Bytes oder Texten bestehen dürfen. Die Texte ihrerseits werden entweder in den ASCII- oder Bildschirmcode umgewandelt. Zu bemängeln ist hier aber, daß StarTool die Erstellung von Tabellen im Fließkommaformat nicht unterstützt, was durchaus wünschenswert wäre.

Systembefehle
!ASSEMBLER Ruft den Assembler auf
!BYTE Verwandelt einen Speicherbereich in eine Tabelle
!COLD RESET Verläßt StarTool
!GO Startet ein Maschinenprogramm im Speicher des Computers
!GOD Startet ein Programm im Floppyspeicher
!REASS Macht aus Objektcode wieder Quelltext
Erstellung von Tabellen
.Byte fügt Byte-Werte in den Objektcode ein
.dByte macht dasselbe mit 16-Bit-Zahlen
.Text erstellt Tabellen im ASCII-Code
.Video erzeugt Tabellen im Bildschirmcode
.Word setzt 16-Bit-Worte in den Objektcode ein
Struktur des Objektcodes
.End beendet die Assemblierung
.Error leitet auftretende Fehlermeldungen auf die Peripherie
.If/.Endif ermöglicht die bedingte Assemblierung
.File verkettet mehrere (Unter-)Programme
.Obj schreibt den Objektcode auf Disk, in den Speicher oder gibt ihn auf dem Drucker aus
.Pull lädt Symboltabelle von Disk
.Push speichert aktuelle Labels ab
Ausgabe von Listings
.ff führt einen Seitenvorschub aus
.Format legt Seiten- und Zeilenlänge fest
.lbl gibt Labels in Tabellenform aus
.List erzeugt ein Assemblerlisting
.Page aktiviert die automatische Seitennumerierung
.Print schickt Bytes an den Drucker
.Title druckt zu Beginn jeder Seite eine Kopfzeile
Tabelle 2. Die Pseudo-Opcodes des Assemblers

Dafür wurde an die bedingte Assemblierung gedacht. Die durch die ».IF ... .ENDIF«-Struktur begrenzten Programmblöcke werden nur dann assembliert, wenn die Bedingung, die dem .IF-Befehl folgt, vollständig erfüllt ist. Diese IF-ENDIF-Strukturen dürfen fast beliebig tief ineinander verschachtelt werden. StarTool ist bedingt makrofähig. Dies wird durch den ».FILE«-Befehl möglich. Normalerweise dient dieser dem Aneinanderreihen einzelner Unterprogramme. Da diese auch auf Disk stehen dürfen, kann man mehr Quelltext assemblieren, als in dem Speicher Platz findet. Durch mehrfachen Aufruf solcher Unterroutinen kann aber auch eine Art Makroassemblierung erreicht werden. Mit dem Opcode zur Redefinition von Labels und den globalen Labels, die speziell gekennzeichnet werden, ist dabei eine hohe Flexibilität gewährleistet. Leider kann man höchstens sieben Makros im Speicher haben. Falls darüber hinaus noch Bedarf besteht, werden diese, vom Assembler gesteuert, nachgeladen.

Da StarTool als Komplettsystem konzipiert wurde, darf auch ein Reassembler nicht fehlen. Mit dem REASS-Befehl soll aus Objectcode wieder editierfähiger Quelltext entstehen. Doch mit der Editierfähigkeit ist es nicht weit her. Längere Tabellen werden nicht erkannt, und so sind die entstandenen Sourcecodes auch nicht sehr übersichtlich. Hier wäre eine Verbesserung vonnöten. StarTool kümmert sich auch um die Peripherie. Sowohl vom Editor als auch vom Assembler aus kann man Listings auf einem Commodore- oder parallel angeschlossenen Drucker ausgeben. Im letzten Fall wird nur ein User-Port-Kabel benötigt, da EDASS zu Beginn ein Software-Interface nachlädt.

Der Monitor orientiert sich sehr am Benutzer. Er bietet zwar nur die üblichen Funktionen (siehe Tabelle 3), wird aber mit gut dokumentiertem Quelltext im EDASS-Format ausgeliefert, so daß er sich ideal zum Experimentieren eignet. Wer möchte, kann den Monitor beliebig erweitern und erfährt dabei einiges über das Programmieren in Maschinensprache. Ein Konzept, das angenehm überrascht und Schule machen sollte.

Monitorbefehle
.a ruft Line-by-Line Assembler auf
.c kopiert Speicherbereiche
.d disassembliert Maschinenprogramme
.f füllt Speicherbereiche
.g startet ein Programm
.h sucht nach ASCII- oder Bytefolge
.l lädt ein Programm
.m gibt Hex- und ASCII-Dump aus
.p leitet die Ausgabe auf den Drucker, wird mit
.o wieder rückgängig gemacht
.r zeigt die Prozessorregister an
.s speichert Bereiche auf Disk
.t aktiviert den Single-Step-Trace
.x verläßt den Monitor
Tabelle 3. Die Befehle des Monitors

Nicht zur Nachahmung zu empfehlen sind dagegen die Fehler, die sich leider auch im StarTool eingeschlichen haben. So funktioniert der Opcode zur Redefinition von Labels nicht, und die Initialisierung von EDASS stürzt unter bestimmten Bedingungen ab.

Obwohl die Fehler nur bei den Versionen auftreten sollen, die bis August '86 ausgeliefert wurden, sind sie doch ärgerlich. Aber keine Angst: Mit den Patch-Programmen (Listings 1 und 2) kann man sie beseitigen.

Wie von den Sybex-Produkten gewohnt, ist die Dokumentation sehr gut. In einem 150 Seiten starken, deutschen Handbuch lernt man auf leicht verständliche und doch informative Art und Weise die Bedienung und Funktionen der drei Programme kennen.

Interessant wird es auch im Anhang. Neben den gut dokumentierten Quelltexten von Interface und Monitor findet man hier allerlei nützliche Tabellen. So ist das Handbuch von StarTool gleichzeitig ein gutes Nachschlagewerk.

Empfehlenswert

Abschließend kann man sagen, daß StarTool ein rundum empfehlenswertes Programmpaket ist. Durch den äußerst komfortablen Editor wird das Erstellen von Quelltexten stark erleichtert. Der Assembler ist schnell, leistungsfähig und weist eine große Befehlsvielfalt auf, und anhand der guten Dokumentation lernt man schnell und gezielt mit den einzelnen Programmen umzugehen. Der Quelltext des Monitors schließlich bietet dem fortgeschrittenen Programmierer ein weites Betätigungsfeld, das ihm ermöglicht, seine Assemblerkenntnisse zu vertiefen. Lediglich der Reassembler fällt etwas aus dem Rahmen. Hier wäre eine Verbesserung dringend angeraten. Ein besonderer Vorteil ist aber der Preis von 64 Mark, denn selten gab es so viel Assembler für so wenig Geld.

(Axel Pretzsch/aw)

Sybex Verlag, Vogelsanger Weg 111, 4000 Düsseldorf 30

5 ifa=0thena=1:load"patch.mode",8,1
10 print"{clr}";chr$(14)
20 a$="Startool.Patch +"
30 printtab(20-len(a$)/2)a$:print
40 print"   Bitte geben sie die Farben ein !":print
45 hf=9:rf=0:sf=7
50 input"Hintergrundfarbe";hf:print
60 input"Rahmenfarbe";rf:print
70 input"Schreibfarbe";sf:print
110 input"okay";a$:ifleft$(a$,1)<>"j"then10
200 print
210 print"Bitte  legen sie jetzt eine sicherheits-";
220 print"kopie  von StarTool  in Laufwerk  8  ein";
230 print"    und druecken dann eine Taste !"
250 poke198,0:wait198,255
300 open1,8,15,"r:startool.old=startool.obj":close1
310 poke49311,rf
320 poke49316,hf
330 poke49231,sf
340 sys49152
Listing 1. Bitte geben Sie dieses Listing mit dem Checksummer ein. Nachdem Sie es zusammen mit Listing 2 auf einer Diskette gespeichert haben, können Sie es starten. Es erklärt sich dann von selbst.
PROGRAMM : PATCH.MODE     C000 C0B7
-----------------------------------
C000 : A9 0C A2 5A A0 C0 20 BD   AF
C008 : FF A2 08 A0 00 20 BA FF   5A
C010 : 98 A2 01 A0 08 20 D5 FF   27
C018 : A9 38 8D 9C 24 A9 60 8D   00
C020 : 9D 24 A9 EF 8D B9 2D A9   E6
C028 : 40 8D BA 2D A9 23 8D 83   74
C030 : 30 A2 0F BD 66 C0 9D EF   F0
C038 : 40 CA 10 F7 20 76 C0 EA   6F
C040 : EA EA EA EA EA EA A2 01   4A
C048 : A0 08 86 FB 84 FC A9 FB   DC
C050 : A2 00 A0 41 20 D8 FF 6C   E4
C058 : 02 A0 53 54 41 52 54 4F   A0
C060 : 4F 4C 2E 4F 4C 44 90 08   84
C068 : 20 79 00 C9 D3 D0 04 60   13
C070 : 4C 79 00 4C DB 8E A9 08   EB
C078 : 8D 1A 08 A9 85 8D 20 08   9F
C080 : A9 1B 8D 26 08 A9 4C 8D   F9
C088 : 76 08 A9 79 8D 77 08 A9   A4
C090 : 85 8D 78 08 A9 A9 8D 79   0C
C098 : 08 A9 1B 8D 7A 08 A9 00   7C
C0A0 : 8D BD 0D A9 00 8D C2 0D   16
C0A8 : A9 03 8D C7 0D A9 42 A2   9C
C0B0 : 4A 8D 64 C0 8E 65 C0      05
Listing 2. Bitte geben Sie dieses Listing mit dem MSE ein
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →