% University of Luebeck - RTeasy Version 0.3.4%
declare register AR(15:0), DR(19:0), IR(3:0), SP(15:0), TEMP(15:0), PC(15:0);
declare memory MEM(AR,DR);
INIT: PC <- 0, AR <- 0, SP <- $FFFF, DR <- 0, TEMP <- 0; # c0
FETCH: AR <- PC; # c1
read MEM; # c2
PC <- PC + 1, IR <- DR(19:16) | # c3, c4
switch IR { case 0: goto PUSH # k0
case 1: goto POP # k1
case 2: goto SUB # k2
case 3: goto NOT # k3
case 4: goto JNZ # k4
default: goto FETCH };
PUSH: AR <- DR(15:0), SP <- SP - 1; # c5, c6
read MEM, AR <- SP; # c2, c7
write MEM | goto FETCH; # c8
POP: AR <- SP, if SP <> $FFFF then SP <- SP + 1 fi; # c7, k5, c9
read MEM, AR <- DR(15:0); # c2, c5
write MEM | goto FETCH; # c8
SUB: AR <- SP, SP <- SP + 1; # c7, c9
read MEM, AR <- SP; # c2, c7
TEMP <- DR(15:0), read MEM; # cA, c2
TEMP <- TEMP - DR(15:0); # cB
DR(15:0) <- TEMP; # cC
write MEM | goto FETCH; # c8
NOT: AR <- SP; # c7
read MEM; # c2
TEMP <- not DR(15:0); # cD
DR(15:0) <- TEMP; # cC
write MEM | goto FETCH; # c8
JNZ: AR <- SP, SP <- SP + 1; # c7, c9
read MEM; # c2
TEMP <- DR(15:0); # cA
if TEMP <> 0 then goto JNZ1 fi; # k6
SP <- SP + 1 | goto FETCH; # c9
JNZ1: AR <- SP, SP <- SP + 1; # c7, c9
read MEM; # c2
PC <- DR(15:0) | goto FETCH; # cE
Comments