
ASM09  - Ein 6809 Macroassembler

Copyright (C) 1990 by Alexander Holler
                      Ifflandstr.13
                      6800 Mannheim 1
                      Fido 2:247/55


Der Assembler kann fuer nicht!!!-gewerbliche Zwecke beliebig kopiert werden,
unter der Bedingung, das er immer zusammen mit den Files testasm09.asm und
ASM09.dok kopiert wird.
Die Benutzung oder Verbreitung fuer gewerbliche Zwecke bedarf einer
ausdruecklichen schriftlichen Genehmigung von mir, die unter obiger Adresse
zu erhalten ist.



Vorab:

Dieser Macroassembler wurde fuer private Zwecke erstellt, d.h. man kann
ihn nicht als komfortable und ausgereift bezeichnen.
Weiterhin wurde er nicht besonders ausfuehrlich getestet, weshalb ich etwaige
Fehler nicht ausschliesen kann. Nichtsdestotroz assemblierte er die von
mir benutzten Files mit dem gleichen Ergebnis wie der AVMAC09 von AVOCET auf
einem PC.


Aufruf:

Der Assembler wird mit aufgerufen mit

    ASM09 quellfile[.asm]

Die Endung fuegt der Assembler, falls noetig, selbst hinzu.
Als Ergebnis liefert der Assembler ein File im Motorola-S1 Format,
welches jeder bessere Epromer lesen koennen muesste.
Zur Zwischenspeicherung benutzt der Assembler ein File namens ASM09.zwf
das nach Beendigung des Assemblierens wieder geloescht wird.


Syntax:

Die Zeilen des Quellfiles muessen wie folgt aussehen:

    LABEL OPERANT ARGUMENT

Labels muessen immer am Anfang einer Zeile stehen, sonst haelt sie der
Assembler fuer Operanten.
Die Syntax der Operanten und der Argumente haelt sich an die Definitionen
von Motorola.
D.h. Hexzahlen werden mit '$' und Binaerzahlen mit '%' eingeleitet.
Als Operationen beherrscht der Assembler +,-,*,/ und ^ (hoch).
Achtung:
    Bei Push und pull Befehlen verarbeitet der Assembler nur ein Argument,
    d.h. anstatt   pulu a,b,x   muss   pulu a   pulu b   pulu x  geschrieben
    werden.
    Weiterhin wird angenommen das Direct Page Register immer auf 0 steht




Folgende Pseudos stehen zur Verfuegung:

%macro, %endm, %gensym, %include, end, equ und org.


%macro, %endm, %gensym:

    %macro leitet eine Macrodefinition ein, die mit %endm abgeschlossen sein
    muss. Es koennen mehrere Argumente uebergeben werden, wobei ich mit an
    die Syntax des AVMAC von AVOCET gehalten habe.
    Beispiel:

ldst    %macro  a,b,c
    ld&a    b
    st&a    c
    %endm

    Der Assembler generiert mit obiger Definition aus der Zeile

    ldst    b,#31,$e000

    folgende Zeilen

    ldb     #31
    stb     $e000

    %gensym wird benutzt um lokale Labels (innerhalb eines Macros) zu
    definieren.

    Beispiel:

getstr %macro a,b
    %gensym string,stringe
    ld&a #string
    bra stringe
string    db  b
stringe
    %endm

    Ohne die Benutzung von %gensym wuerde der Assembler bei mehrmaliger
    Benutzung von getstr eine mehrmalige Definiton der Labels string und
    stringe feststellen und dies mit einer Fehlermeldung quittieren.


%include:

    Zur Einbindung anderer Files.

    Beispiel:

    %include    "def.asm"


org,equ,end:

    Mit org wird dem Assembler mitgeteilt ab welcher Adresse er assembliert.
    Fehlt diese Definition wird 0 angenommen.

    Beispiel:

    org     $1000
    ...
    org     $2000
    ...

    equ weist einem Symbol einen Wert zu.

    Beispiel:

PROGRAMMSTART equ $100

    org PROGRAMMSTART
    ...


    END muss am Ende des Quellfiles stehen.



Fuer geuebte Programmierer muest diese Beschreibung reichen, andere werden
diesen Assembler wahrscheinlich sowieso nicht benutzen.
Im Zweifelsfall kann noch auf das File testasm09.asm das ich waehrend der
Entwicklungsphase zu Testzwecken benutzte.
In der momentane Version kann ASM09 noch kein Listing erzeugen, und weitere
Versionen werden auf sich warten lassen (wenn ueberhaupt, denn er hat
seinen Zweck erfuellt).

Falls jemand trotzdem Interesse an einer weiterentwickelten Version hat,
(z.B. mit Segmentierung und Linker) kann er sich ja mit mir unter obiger
Adresse in Verbindung setzen ich werde dann sehen was sich machen laesst.


Alex Holler

