mcForth - Einleitung

Wie schon auf der Hauptseite erwähnt, soll dieses FORTH auf möglichst vielen Microcontroller, Prozessoren und DSP's laufen. Da ich zur Zeit ca. 170 Microcontrollerfamilien von 20 Hersteller betreue, ist es ein großer Anspruch an das mcForth:
  • Lauffähig auf 8- bis 64-Bit Controller
  • ROM-Fähig - aber auch reine RAM-Versionen möglich
  • Möglichst leicht portierbar
  • Möglichst nahe an dem aktuellen Standard (FORTH200x und ANS)
  • Sollte sich selbst kompilieren können (also auch Targetcompiler in mcForth)
  • Option: Targetcompiler auf PC für ganz kleine Systeme

    Herausgekommen ist ein FORTH mit folgender Struktur:
  • Benötigt ca. 32K Flash und 3K RAM für den Kern (sinnvoll ab 64K Flash und 8K RAM)
  • Getrennte Behandlung für Programm- (evtl. Flash) und Variablenspeicher (RAM)
  • Das FORTH verfügt über einen Heap und kann deshalb:
    - Wörter headerless ins Flash compilieren
    - Den Heap für temporäre Programme (z.B. Assembler) verwenden
  • Es kann mit sequenziellen Files und FORTH-Screenfiles umgehen
    - Ein Puffer von 1K für ganze Screens sind vorgesehen
    - Sequenzielle Files und Eingaben haben maximal 128 Zeichen/Zeile
    - Lesen/Schreiben von Daten für den gesamten Speicher möglich
    - Interface über Betriebssystems oder über Terminal möglich
  • Es gibt eine Version für einen virtuellen Prozessor VP32:
    - Einfache Portierung durch Assembler- oder C-basierenden Simulator
    - Bei 32-Bit-Systeme kann auf dem PC eine Applikation erstellt und getestet werden

    Die Anzahl der Befehle für Zugriff aüf die diversen Speicher ist deutlich gewachsen, aber gut zu überblicken.

    Folgende Prefixes vor @ oder ! werden verwendet:
    c@...Zeichen - #b/c gibt an, wieviel Bit pro Zeichen verwendet werden
    w@...Wort - 16 Bit
    @...Wort hat kein Prefix - Länge #b/w
    2@...Doppeltgenaues Wort

    Der entsprechende Postfix gibt dann an, welcher Speicher adressiert werden soll:
    ...@Datenspeicher hat keine Extension (Adresse einfachgenau)
    ...@pProgrammspeicher erwartet einfachgenaue Adresse
    ...@xExterner Speicher nutzt doppeltgenaue Adresse, aber Deutung ist HW-spezifisch
    ...@ioPorts erwarten auch einfachgenaue Adressen
    Beispiel: 2@p = Lesen eines doppeltgenauen Wertes aus dem Programmspeicher


    Hier noch ein paar Dinge, bei dem mcForth "etwas eigen" ist:
  • Wenn der Anwender ins Flash compilieren will, muß er Befehle wie ,P C,P ALIGNP ALLOTP ... verwenden
  • Wörter (auch bei Create) werden versteckt compiliert - erst END-CREATE schreibt das Flash zurück und macht den Befehl sichtbar
  • Flags wie Immediate oder Restrict müssen vor dem Befehl mit (i oder (r gesetzt werden - oder man verwendet I: , R: oder IR: