% 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