Inhaltsverzeichnis

b16-CPU

Der b16 ist eine kleine, von Chuck Moore's Prozessoren inspirierte Forth-CPU. Im Rahmen des Altera-DE1-Projekts der Forth-Gesellschaft läuft das Projekt in einem Subversion-Repository auf dem FG-Server.

Benutzung

Benötigt wird

Auschecken des Repository mit

git clone https://github.com/forthy42/b16-small.git

oder

git clone https://gitlab.com/forthy42/b16-small.git

Das dort enthaltene Projekt b16 einfach übersetzen, und auf's FPGA hochladen - damit läuft dann auch schon das Testprogramm.

Debugger

Den Debugger starten mit

xbigforth b16.m test.asm

oder einer anderen Assembler-Datei. Das sollte dann aussehen wie folgt:

Das Debugger-Fenster teilt sich in drei Teile: Oben ist ein Tool, um den Speicher zu lesen oder zu ändern, in der Mitte ist der Debugger, der Register anzeigt und Start/Stop/Single Step (n Stück) erlaubt, und unten ist der Editor der Assembler-Datei. Dateien kann man laden/speichern/hochladen (Icons an der linken Seite). Die übersetzte Datei wird rechts mit Adressen annotiert; klickt man eine Adresse an, so setzt man einen Breakpoint (es gibt genau einen solchen Breakpoint).

Address Map

Der b16 im Projekt hat folgende Adressbelegung:

Start Ende Belegung
0000 1FFF Externes SRAM, 1 Wait-State
2000 3FFF Internes SRAM, 0 Wait-States, vorbelegt
4000 FEFF Externes SRAM, 1 Wait-State
FF00 FFFF Special Function Register

Die Reset-Adresse ist bei 3FFE.

Register Map

Adresse Name Bedeutung Reset-Wert
FF00 LED7 7-Segment-Anzeige 0000
FF08 IRQMASK Interrupt-Maske 01
FF09 IRQACT Interrupt-Aktiv 01
FF10 TVAL0 Timer Compare high 0000
FF12 TVAL1 Timer Compare low 0000
FF14 TIMERVAL0 Timer high 0000
FF16 TIMERVAL1 Timer low 0000
FF20 GPIO00 GPIO0 MSB (35..32) …0
FF22 GPIO01 GPIO0 mitte (31..16) 0000
FF24 GPIO02 GPIO0 LSB (15..0) 0000
FF28 GPIO00t GPIO0 dir MSB (35..32) …0
FF2A GPIO01t GPIO0 dir mitte (31..16) 0000
FF2C GPIO02t GPIO0 dir LSB (15..0) 0000
FF30 GPIO10 GPIO1 MSB (35..32) …0
FF32 GPIO11 GPIO1 mitte (31..16) 0000
FF34 GPIO12 GPIO1 LSB (15..0) 0000
FF38 GPIO10t GPIO1 dir MSB (35..32) …0
FF3A GPIO11t GPIO1 dir mitte (31..16) 0000
FF3C GPIO12t GPIO1 dir LSB (15..0) 0000

GPIO Direction ist 0 für Input, 1 für Output. Der Timer wird jeden Takt um 1 erhöht, bleibt aber stehen, wenn die CPU mit dem Debugger angehalten wird. Die symbolischen Adressen lassen sich mit include regmap.asm laden.