VolksForth/8080/CPM/DOC/DE/ASSEM.org
Carsten Strotmann c7f5bfbb7b Fixed Typo
2020-06-28 16:23:24 +02:00

2.8 KiB

Der volksForth-8080-Assembler

Die CP/M-Version von volksFORTH ist mit einem Assembler für den Intel 8080 ausgestattet. Dieser Assembler kann aber auch unter den anderen Versionen geladen werden und so als Cross-Assembler arbeiten. Diese Beschreibung enthält kein vollständiges Glossar, da die Mnemonics des Assemblers den meisten Programmierern vertraut sein dürften. Sie dient als Ergänzung der Beschreibung des 6502-Assemblers im UltraForth83-Handbuch Seite 175ff.

Eine genaue Darstellung der Funktionsweise findet sich in dem Artikel von John J. Cassady in den FORTH-Dimensions (Jahrgang III/6 Seite 180f), an dessen Implementation sich die volksFORTH-Version anlehnt.

Der 8080-Assembler erlaubt strukturierte Programmierung. Er verwendet die gleichen Strukturelemente, wie der 6502-Assembler. Vor den Kontrollstrukturen sind folgende Condition Codes zulässig:

   c0=    c0<>   cs   0=   0<>    pe   0<   0>=

Sie entsprechen den Flags im Processor Status Word des 8080. Neben den Kontrollstrukturen gibt es auch noch absoluten Sprünge (jc, jm, jmp, jnc, jnz, jp, jpe, jpo, jz).

Beispiele für die Verwendung des 8080-Assemblers:

volksFORTH Intel
A xra xra A
A L mov mov L,A
0 H mvi mvi H,0
H pop pop H
vector lxi lxi vektor
D dad dad D

Die Belegung der Forth-Register sieht folgendermaßen aus:

IP im BC-Registerpaar
W im DE-Registerpaar
SP im SP
UP im Speicher
RP im Speicher

Die beiden 8-Bit-Hälften von IP und W können auch getrennt angesprochen werden durch (IP und IP', bzw. W und W').

Zum Ansprechen der 8080-Register dürfen die FORTH-Namen sowie die Intel Namen benutzt werden.

Zusätzlich enthält das System noch mehrere Macros:

  • R rpop : Hole das 16-Bit-Register R (R<>H) vom Returnstack.
  • R rpush : Bringe das 16-Bit-Register R (R<>H) zum Returnstack.
  • R1 R2 mvx : Kopiere 16-Bit-Register R1 nach R2.
  • Next : Springe zum Address-Interpreter.
  • ;c: : Schalte den Assembler ab und den Forth-Compiler an.

Vordefinierte Labels sind:

  • Hpush : Adresse der Routine, die das H-Register auf den Stack bringt und dann zu Next springt.
  • Dpush : Adresse der Routine, die das D- und H-Register auf den Stack bringt und dann zu Next springt.
  • >Next : Adresse des Address-Interpreters.
  • UP : Adresse der Speicherzelle für den User-Pointer
  • RP : Adresse der Speicherzelle für den Returnstackpointer
  • IPsave : Adresse einer Hilfszelle um den IP zwischenzuspeichern

Neue Labels können mit >LABEL und LABEL erzeugt werden, wie im 6502-Assembler.