ASS_6502 65(c)02 Cross-Makro-Assembler Ass_6502 dient der Erstellung von Programmen der 65xx Prozessoren auf dem Atari ST. Geschrieben habe ich dieses Programm, um auf meine Atari Programme fr einen kleinen Einplatinencomputer zu entwickeln. Die vorliegende Version ist mindestens schon die dritte, und mittlerweile vollst„ndig in Assembler geschrieben, wodurch, wie ich meine,er eine ganz gute Geschwindigkeit erreicht. Es sollten die meisten Fehler beseitigt sein, was aber nicht heižen soll, das es vielleicht doch noch einige gibt. Es ist mir n„mlich nicht m”glich, rein zeitlich gesehen, alle m”glichen und umnm”glichen Test durzufhren, aber wenn man ihn nicht provoziert, l„uft er sehr gut. Sollten sie trotzdem Fehler entdecken, so z”gern sie nicht, diese mir mitzuteilen. Ich werde versuchen, sie dann zu beseitigen. Fr Anregungen bin ich auch sehr aufgeschlossen. Anregungen,Wnsche und Kritik, letzteres hoffentlich konstruktiv, wenden sie sich an : Alexander Stauffenberg Buchsweilerstr. 8 1000 Berlin 33 (030)8313277 =============================================================================== Aufruf des Assemblers Aufruf : ASS_6502 [ Optionen ... ... ] Quelldatei [ Zieldatei ] Die verschiedenen Parameter mssen durch ein Leerzeichen getrennt sein. Optionen beginnen mit den Zeichen '-'. Es k”nnen mehrere Optionen durch ein Leerzeichen getrennt angegeben werden. Es gibt folgende Optionen : -B -> Falls m”glich werden JMP Befehle in BRA umgewandelt. Diese Option ist nur im 65c02 Modus wirksam. -C -> Schaltet den 65c02 Modus ein, d.h. Befehle der 65c02 CPU sind zul„ssig. -E -> Bei Ausgabe eines Listings, werden Include Files mitgelistet. -H -> Der Assembierte Code wird als Hexstring ausgegeben. Die ersten vier Zeichen geben Startadresse ( Low Byte, High Byte ) an, die vier die Endadresse. Darauf folgt der Code in ASCII Zeichen. Wird diese Option nicht angegeben, so wird der Code Bin„r abge- speichert. Bin„rer Code erh„lt ( falls nicht anders angegeben ) die Extension *.65, ASCII Code *.H65. -Z -> Es werden keine kurzen Adressierung mehr verwendet. -F=Datei -> Es werden die Fehlermeldungen in 'Datei' geschrieben. Das Programm wartet nicht mehr auf Tastendruck, und es endet mit Fehlercode 1. Wird diese Option nicht angegeben, so fragt das Programm im Fehler- fall, wohin die Meldungen geschrieben werden sollen. -L=Datei -> Es wird ein Listing in 'Datei' ausgegeben. -S=Datei -> Es wird eine Symbolliste in 'Datei' ausgegeben. Als Quelldatei muž der Name des Quelltextes angegeben werden. Zus„tzlich kann eine Zieldatei angegeben werden. Wird diese nicht angegeben, so bildet sich der Name der Zieldatei aus dem Name der Quelldatei mit der Extension .65 oder .H65 ( s.o. ). Werden die Optionen im Quelltext anders angegeben, so haben diese Vorrang. =============================================================================== Quelldatei Die Quelldatei kann mit jedem beliebigen ASCII Editor erstellt werden. =============================================================================== Textfelder Symbole beginnen immer in der ersten Spalte. Alle weiteren Felder k”nnen an einer beliebigen Spalte beginnen. Getrennt werden sie durch Leerzeichen oder Tabulatoren. z.B Label lda #$FF ; Kommentar -> Richtig Label lda # $ff ; Kommentar -> Falsch ! $ff wird als viertes Feld erkannt, d.h. als Kommentar =============================================================================== Symbole Symbole oder Labels mssen immer in der ersten Spalte beginnen. Symbole mssen immer mit einen Buchstaben beginnen. Danach sind Buchstaben, Ziffern und '_' erlaubt. Der Assembler benutzt alle Zeichen eines Symbols zur unterscheidung. Es wird auch zwischen Grož- und Kleinschreibung unterschieden. Z.B. 'LABEL' ist nicht gleich zu 'label' ================================================================================ Mnemonic Alle Mnemonic der 8 Bit 65xx Prozessoren sind zugelassen. Mnemonics k”nnen sowohl in Grožschrift, als auch in Kleinschrift geschrieben werden. Z.B. 'Lda' ist genauso zul„ssig wie 'LDA' oder 'lda'. =============================================================================== Operanden Register k”nnen sowohl als 'A','X','Y' angegeben werden, als auch als 'a','x','y'. Bei Hexadezimalen Zahlen sind sowohl Grož- als auch Kleinschrift zul„ssig. ------------------------------------------------------------------------------- Ausdrcke im Operanden Zahlen k”nnen in dezimaler,hexadezimaler und bin„rer Darstellung angegeben werden. '$' leiten hexadezimale, '%' bin„re Zahlen ein. z.B. 1234 = 1234 (logisch ! ) $ff = 255 %1111 = 15 Eine Zahl oder ein Symbol gefolgt von '.h' oder '.H' liefert das h”herwertige Byte. ( Zahl DIV 256 ) Eine Zahl oder ein Symbol gefolgt von '.l' oder '.L' liefert das niederwertige Byte. ( Zahl MOD 256 ) z.B. $1234.h = $12 $1234.l = $34 ------------------------------------------------------------------------------- Rechenausdrcke Innerhalb des Operanden k”nnen Rechenausdrcke stehen. Es stehen +,-,* und / zur Verfgung. Es wird stur von links nach rechts gerechnent, d.h. es wird keine Priorit„t bercksichtigt. Klamern von Ausdrcken ist ebenfalls nicht m”glich. Es findet kein šberlaufprfung statt. Komplizierte Ausdrcke sollte man daher meiden. =============================================================================== Kommentare Kommntare stehen im vierten Textfeld oder beginnen mit ';'. Alle Zeichen die einen ';' folgen werden berlesen. z.B. Label Mne Operand Kommentar Label Mne Operand ; Kommentar Label Mne ; Kommentar ; Kommentar =============================================================================== Codedatei Der vom Assembler erzeugte Code wird als Bin„rdatei abegespeichert, d.h. es werden keine Zusatzinformation abgespeichert. Deswegen sollte man sich die Startadresse des Codes gut meren. Die Datei kann als solche direckt in ein EPROM gebrannt werden. Falls gewnscht wird der Code auch als ASCII ausgegeben werden. Die ersten vier Zeichen geben Startadresse ( Low Byte, High Byte ) an, die vier die Endadresse. Darauf folgt der Code in ASCII Zeichen. =============================================================================== Listing Falls gewnscht, kann ein Listing vom Assembler erzeugt werden. Es hat dann folgendes Format : nnnn xxxx yy yy yy label mne operand nnnn - Zeilennummer xxxx - Adresse yy - Code label - Label, falls angegeben mne - Mnemonic operand - Operand =============================================================================== Symbolliste Ebenfalls kann eine Symbolliste ausgegeben werden. Es werden jedoch immer nur die ersten 10 Zeichen eines Symbols ausgegeben. Die Symbole werden in der Reihenfolge ihres Vorkommens ausgegeben. =============================================================================== Assembler Directiven ------------------------------------------------------------------------------- EQU Syntax : Label EQU Ausdruck EQU setzt den Wert von Label gleich dem Ergebnis von Ausdruck. Der Ausdruck darf keine Vorw„rts-Refernzen enthalten. ------------------------------------------------------------------------------- ORG Syntax : ORG Ausdruck ORG setzt die Adresse fest, ab welcher der Code Assembliert werden soll. Der Ausdruck darf keine Vorw„rts-Refernzen enthalten. Ein Label vor ORG wird nicht korrekt behandelt, und sollte deswegen vermieden werden. Es ist nur ein ORG zul„ssig. Dieses muž vor der ersten Codeerzeugenden Zeile stehen. ------------------------------------------------------------------------------- DFB,DFW,DFA Syntax :