| ★ APPLICATIONS ★ PROGRAMMATION ★ MAXAM ASSEMBLER AND EXPANSION ROM BOARD ★ |
MAXAM heißt er, der "maximale” Assembler von Arnor Ltd aus England - für alle CPC-Computer! Für den CPC wird bereits eine Reihe von Assemblern angeboten. Welche Unterschiede dabei von Bedeutung sind, darüber mögen sich die Enthusiasten streiten. MAXAM schneidet bereits in der Cassetten- und Diskettenversion gut gegenüber den Mitbewerbern ab. Eine Besonderheit ist z.B. die Möglichkeit, Assemblerprogramme direkt in ein Basicprogramm einzubauen. Wirklich unschlagbar ist MAXAM jedoch als ROM,, wenn alles sofort nach dem Einschalten zur Verfügung steht und man sich nicht mehr um Ladeformalitäten und Speicherplatzbedarf kümmern muß. Diese Bequemlichkeit ist zur Zeit allerdings noch recht teuer. Bereits das ROM selbst kostet mehr als die Cas-setten-/Diskettenversion. Zusätzlich braucht man jedoch eine ROM-Erweiterungskarte. Von Arnor, der englischen Herstellerfirma des MAXAM-ROMs, wird als Minimalsystem ein Modul mit fest eingelötetem MAXAM- oder PROTEXT-ROM angeboten. Dadurch sind die Kosten für ROM-Anfäger geringer. Wer später das System erweitern und weitere ROMs anschließen will, kann eine Zusatzkarte mit Steckplätzen für diese ROMs auf das MAXAM-Modul aufstecken. Das Modul hat die Bezeichnung AD-2 (welche Unterschiede zum Vorläufer AD-1 bestehen, ist nicht bekannt). Es handelt sich um eine wirklich erstaunliche Konstruktion. Den Leuten von Arnor ist es auf beeindruckende Weise gelungen, die Busverlängerung, den Stecker für die Erweiterungskarte und die Platine mit der ROM-Auswahlschaltung auf kleinstem Raum unterzubringen. Das Modul wird auf den Erweiterungsport aufgesteckt. Dabei verschwindet ein Teil des Moduls im CPC-Gehäuse, so daß es (ohne Erweiterungskarte) fast unsichtbar ist. Beim CPC 664/6128 klappt das leider nicht so elegant. Da ist innen nicht soviel Platz. Zum Anschluß von AD-2 ist in diesem Fall sogar ein Adapter (Zwischenstecker) notwendig, so daß man bei Bestellungen unbedingt immer den CPC-Typ mit angeben muß. Das ROM selbst läuft auf allen CPCs. Beim CPC 664/6128 Adapter erforderlich Die Schwäche von AD-2 ist, daß die Konstruktion ausschließlich vom Erweiterungsport des CPC abhängt. Sobald man den Floppy-Controller aufsteckt, wackelt es arg, und man sollte dringend dafür sorgen, daß weitere mechanische Belastungen vermieden werden. Nach dem Einbau erscheint die Einschaltmeldung um eine MAXAM-Zeüe vermehrt. Weniger auffällig ist die neue Aufteilung des CPC-Speicherplatzes. MAXAM verbraucht 256 plus 4 Byte Speicherplatz, und um diesen Betrag verschiebt sich HIMEM nach unten. Soll ein Programm betrieben werden, das diese Änderung nicht verträgt (es gibt da ja schmerzliche Erfahrungen mit der vortex-Speicherer-weiterung), einfach den Befehl MAX-OFF eingeben. Der Rechner wird dann ohne MAXAM neu gestartet. Dem gleichen Zweck dient der Befehl ROMOFF für den Fall, daß mehrere ROMs angeschlossen sind und unter diesen eine Auswahl getroffen wérden soll. Für die Arbeit mit ROMs ist auch noch der Befehl HELP vorhanden. Damit werden alle angeschlossenen ROMs aufgelistet. Man erfährt dadurch auch die aktuellen ROM-Nummern (wichtig für Experimente mit SASEM). Der Befehl HELP, romnr listet die Befehle des jeweiligen ROMs. Weitere für die ROM-Version spezifische Befehle sind MSH und MSL. Damit kann der Bildspeicher von seinem Standardbereich &C000 nach &4000 verlegt werden. Das ist eine Möglichkeit, die nur ein ROM-Assembler anbieten kann, da sonst der Speicherplatz nicht ausreichen würde. Aber wozu der Aufwand? Das MAXAM-Handbuch sagt, daß es darum geht, "sideways RAM" im Speicherbereich ab &C000 zu bearbeiten. Es geht also um Speichererweiterungen. Damit im Zusammenhang stehen wohl auch die Befehle RAMON und RAMOFF, die in der zur Verfügung stehenden Ausgabe des Handbuches leider nicht erklärt werden. Da die Produkte von vortex in England unbekannt sind, kann man nur raten, ob es um die RAM-Erweiterung von dk'tronics geht oder einfach nur um den Zusatzspeicher im CPC 6128. Unabhängig davon besteht eine interessante Anwendungsmöglichkeit für diejenigen, die eigene ROM-Programme entwickeln wollen. Mit MSH und MSL können derartige Routinen nämlich gleich mit ihren richtigen Speicheradressen ab &C000, die sie später einmal im ROM haben müssen, entwikkelt und getestet werden. Erweiterungs befehle MAXAM stellt zunächst eine Reihe von Erweiterungs befehlen zur Verfügung. Diese müssen wie RSX-Befehle mit dem senkrechten Strich vorweg eingegeben werden. Die Hauptfunktionen werden dann über den Befehl MAXAM (auch die Abkürzung M ist zulässig) erreicht. Es erscheint das Hauptmenü mit einer Reihe von Speicherfunktionen. Unter anderem sind dies:
Die Ausgabe kann wahlweise auch über den Drucker erfolgen. Die Bildschirmausgabe ist in MODE 2 oder vierfarbig in MODE 1 möglich. Der Wechsel innerhalb des Menüs ist jedoch nicht mit Basic-Befehlen, sondern nur mit RSX-Befehlen möglich. MAXAM stellt dafür einen eigenen MODE- Befehl (aus dem gleichen Anlaß auch CAT und SPEED) zur Verfügung. Der Disassembler beachtet die RESTART-Besonderheiten des CPC und gibt die nachfolgenden Bytes als Adresse aus. Die gelegentlich doch mal in Programmen eingesetzten "unbekannten” Z 80-Befehle sind leider auch MAXAM fremd, aber vermutlich kann man nie alles haben. Für die RAM-Schwerarbeit eignet sich hervorragend der Menüpunkt "Edit Memory". Während für die anderen Funktionen immer die Anfangs- und Endadresse genau angegeben werden muß, ist hier eine Steuerung über die CUR-SOR-Tasten möglich, so daß man im RAM beliebig vorwärts und rückwärts blättern kann. Die Bildschirmausgabe ist wie bei List Memory, in MODE 1 aber nicht mehr so bunt. Hauptsächlich ist dieser Punkt ja auch zum Ändern des Speicherinhalts gedacht. Dazu wird die gewünschte Speicheradresse einfach mit dem Cursor angefahren und der neue Wert eingegeben. Mit der TAB-Taste kann dabei zwischen Hex- und ASCII-Bereich umgeschaltet werden. Kernstück eines jeden Assemblers ist der Editor, der darüber entscheidet, wie einfach oder mühselig die Eingabe eines Assemblerprogrammes ausfällt. Bei MAXAM gelangt man über den Menüpunkt "Text Editor" in ein weiteres Menü, das es in sich hat. Wer will, kann damit gut Briefe oder auch längere Texte schreiben. Zwar ist es nicht möglich, Druckersteuerzeichen einzubauen, um das Druckbild zu gestalten (dazu braucht man dann doch ein "richtiges" Textverarbeitungsprogramm), aber sonst hat der MAXAM-Editor alles, was man braucht. Die Tastenfunktionen (CLR/DEL/CURSOR) sind so wie in Basic, so daß man nicht ständig umdenken muß. Zusätzliche Funktionen bestehen für die TAB-Taste (Tabulator) und COPY (Markieren von Textblöcken). Blöcke können verschoben, kopiert, unabhängig vom Gesamttext auf Cassette/Dis-kette gespeichert oder an die aktuelle CURSOR-Position geladen werden. Ein deutscher Zeichensatz ist ganz normal mit Basic-SYMBOL-Befehlen möglich, allerdings muß dazu ein SYMBOL AFTER 0 gegeben werden. Eine Besonderheit ist, daß der freie Wechsel zwischen Textverarbeitung und Basic jederzeit möglich ist. Ein vorhandenes Basic-Programm bleibt erhalten. Der Text wird, solange der Speicher reicht (also maximal ca. 40 K) im Variablenbereich von Basic abgelegt. Wenn die Textbearbeitung beendet ist, sollte man mit dem MAXAM- Befehl CLEAR den Text löschen und Basic von dieser Belastung befreien. Modify-Funktion Auch Basic-Programme können über den Editor eingegeben werden. Sinnvoller als eine direkte Eingabe ist das eventuell, wenn man längere Programmlistings abtippen will. Der Editor bietet als Hilfe die Modify-Funktion. Damit können nachträglich Zeilennummern und "Quotes" ('), die dem REM- Befehl entsprechen, eingefügt werden. Die Hauptaufgabe des Editors ist naturgemäß die Eingabe von Assemblertexten. Eine Besonderheit ist, daß der Assembler unterschiedliche Bezeichnungsweisen versteht und dadurch einerseits zu anderen Assemblern kompatibel ist, andererseits z.B. spezielle CPC-Eigenhei-ten bietet, wie die Eingabe von Hex-Wertenmit Der Text wird über das Editormenü assembliert. Dabei werden nicht nur Fehlernummern, sondern richtige Fehlermeldungen (in Englisch) ausgegeben. Zusätzlich erscheinen Warnungen, z.B. bei relativen Sprüngen, die nur über eine begrenzte Distanz möglich sind. Steht der Error-Zähler endlich auf null, so kann mit einem weiteren Menüpunkt das Maschinenprogramm ausgeführt werden. Um den Maschinencode abzu-speichem, muß man in den Assemblertext eine Write-Anweisung einbauen. Ein weiteres MAXAM-Plus ist, daß es damit auch möglich ist, ein COM-File für CP/M zu erzeugen. Mit einem einfachen BIN-Füe klappte es allerdings nicht. Die Ladeadresse richtete sich beim besten Willen nicht nach der ORG-Anweisung: Es blieb nichts anderes übrig, als das Menü zu verlassen und konventionell mit SAVE "name”, b,... abzuspeichern. Weitere Eigenheiten: Adresswerte für ORG- und EQU-Anweisungen können auch aus zusammengesetzten Ausdrücken bestehen. In diesem Fall müssen die verwendeten Variablen bereits vorher im Text definiert sein. MAXAM kann die Werte nicht aus den später folgenden Programmteilen berechnen. MAXAM verwendet für Breakpoints wie allgemein üblich den RESTART 6. Dieser wird jedoch nur beim Einschalten (RESET) gesetzt. Wenn man zwischendurch z.B. den Monitor von vortex benutzt, ist der MAXAM-Vektor zerstört und müßte mit POKEs oder Edit Memory wiederhergestellt werden. Die meisten CPC-Besitzer werden die Maschinenspracheprogrammierung kaum zu ihrem Hauptberuf machen wollen. Hauptsächlich wird es darum gehen, kurze Routinen zu erstellen. Die schon erwähnte Möglichkeit, Assembler befehle in ein Basicprogramm einzubauen, ist dazu ideal. Die Assemblerteile müssen in REM-Zeilen untergebracht werden (was ja z.B. der Text-Editor schon unterstützt). Der Befehl ASSEM-BLE (sobald alles fehlerfrei läuft, kann die Kurzform ASSEM eingesetzt werden) erzeugt den Maschinencode. Das Programm wird dann einfach mit CALL aufgerufen. Völlig neue Programmiertechniken sind dadurch möglich, daß mit PUT und GET Werte zwischen Basic und dem Assembler ausgetauscht werden können. Mit einer IF-Anweisung kann die Assemblierung auch von bestimmten Bedingungen abhängig erfolgen. Bei der Ausführung des Maschinenprogramms bestehen diese Möglichkeiten nicht, dazu muß man die herkömmlichen Methoden anwenden (Parameterübergabe mit CALL). In der Regel wird ein Maschinenprogramm, sobald es fertig ist, für sich gespeichert und dann später vom Basic-Hauptprogramm nach Bedarf hinzugeladen. Kann es überhaupt sinnvoll sein, den vollen Assemblerquelltext im Basic-Programm stehenzulassen und auch jedesmal erst wieder neu zu assemblieren? Als Textobjekt für diese Frage diente das HIDUMP-Programm (CPC Magazin 4/86) mit der Maschinencodelänge von 768 Byte. Ein Basicladeprogramm mit den Hexwerten in DATA-Zeilen hat bereits eine Länge von 2 V2 K. Mit MAXAM-Assemblertext in REM-Zeüen sind es 4 V2 K. Die Umwandlungszeit zur Erzeugung des Maschinencodes dauert in beiden Fällen ca. 7 Sekunden. Bei längeren Programmen gibt es für diese Methode also eine praktische Grenze. Für die Beurteilung von MAXAM ist schließlich noch das Handbuch wichtig. Nach einer Einleitung und Hinweisen, z.B. zum Laden der Diskettenversion, folgt ein sanfter Einstieg in die Arbeit mit dem Assembler, begleitet von kurzen Beispielprogrammen. Alle Anweisungen und die Menüs sind in den weiteren Abschnitten erklärt. Nützlich sind auch zahlreiche kleine Tips. Ein Anhang bringt dann noch einmal eine übersichtliche Zusammenstellung aller Funktionen und weitere Informationen. Für das Handbuch reicht einfaches Computer-Englisch, es gibt aber auch eine deutsche Fassung. Gerhard Knapienski, CPC Magazin |
| ![]() |