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 |
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 |
| schickt Bytes an den Drucker | |
| .Title | druckt zu Beginn jeder Seite eine Kopfzeile |
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 |
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
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