Der GMC-4 Befehlssatz

Der GMC-4 verfügt über einen einfachen Befehlssatz, der an Assembler angelehnt ist, teilweise aber auch höhere Funktionen enthält, hinter denen sich komplexe Unterprogramme des Interpreters verstecken.

Es gibt vier 4-Bit-Register A, B, Y und Z und einen zusätzlichen zweiten Registersatz A‘, B‘, Y‘ und Z‘. Jedes dieser Register kann eine Zahl zwischen 0 und 15 enthalten. Die meisten Befehle verwenden das Register A.

Zusätzlich gibt es ein Flag, also einen 1-Bit-Merker, der wie eine Flagge hoch- oder runtergesetzt werden kann. Viele Befehle setzen das Flag grundsätzlich auf 1, andere setzen es in Abhängigkeit von der jeweiligen Aktion wahlweise auf Null oder Eins. Der Zustand des Flags wird vom Sprungbefehl ausgewertet. Der Sprung zur angegebenen Adresse wird nur dann ausgeführt, wenn Flag=1 ist.

CodeBefehlWirkungFlagKommentar
0KAA=K0, 1Tastendruck nach A übernehmen, Flag = 0 bei Tastendruck, sonst Flag = 1

(KA = Key to A)

1AOOp=A1A an Siebensegmentanzeige ausgeben

(AO = A to Output)

2CHA<=>B

Y<=>Z

1Tausche A und B sowie Y und Z

(CH = Change)

3CYAr<=>Yr1Austausch der Inhalte von A und Y

(CY = Change A and Y)

4AMM=A1A in RAM-Adr (50+Y) kopieren

(AM = A to Memory)

5MAA=M1RAM-Adr (50+Y) in A zurücklesen

(MA = Memory to A)

6M+A=M+A0, 1RAM-Adr (50+Y) zu A addieren,

bei Überlauf: Flag = 1

7M-A=M-A0, 1RAM-Adr (50+Y) von A subtrahieren, bei Überlauf: Flag = 1
8TIA [ ]A=[ ]1Konstante in A laden

(TIA = Transfer Immediate to A)

9AIA [ ]A=A+[ ]0, 1Konstante zu A addieren,

bei Überlauf: Flag = 1

(AIA = Add Immediate to A)

ATIY [ ]Y=[ ]1Konstante in Y laden

(TIY = Transfer Immediate to Y)

BAIY [ ]Y=Y+[ ]0, 1Konstante zu Y addieren,

bei Überlauf: Flag = 1

(AIY = Add Immediate to Y)

CCIA [ ]A=[ ] ?0, 1A mit Konstante vergleichen, bei Übereinstimmung: Flag =0

(Compare Immediate and A)

DCIY [ ]Y=[ ] ?0, 1Y mit Konstante vergleichen, bei Übereinstimmung: Flag =0

(Compare Immediate and Y)

ECALUnterprogrammaufrufe,

Erweiterte Befehle

(Call)

FJUMP [ ] [ ]  Adr= [ ] [ ]1Direkter Sprung zur Adresse [High] [Low] wenn Flag = 1

Unterprogramme:

 

CodeBefehlFlagKommentar
E 0CAL RSTO1Siebensegmentanzeige löschen
E 1CAL SETR1Einzelne LED einschalten. In Y wird die Nummer der LED (0-6) übergeben.
E 2CAL RSTR1Einzelne LED ausschalten. In Y wird die Nummer der LED (0-6) übergeben.
E4CAL CMPL1Komplement des A-Registers (aus F wird 0)
E 5CAL CHNG1Inhalte der Register A,B,Y,Z  mit A‘,B‘,Y‘,Z‘ tauschen
E 6CAL SIFT0, 1A-Register bitweise nach recht schieben. Flag wird 1 wenn das rechte Bit 0 war.
E 7CAL ENDS1Ende-Sound
E 8CAL ERRS1Error-Sound
E 9CAL SHTS1Kurzer Ton
E ACAL LONS1Langer Ton
E BCAL SUND1Note spielen, die im A-Register übergeben wird (1 … E)
E CCAL TIMR1 (A + 1) * 0,1 Sekunden warten
E DCAL DSPR1Ausgabe der RAM-Adressen 5F (high) und 5E  (low) an die LEDs