;
; The Calculator, Main Algorithm
;
LEA R6,StackBase ; Initialize the Stack.
ADD R6,R6,#-1 ; R6 is stack pointer
LEA R0,PromptMsg
PUTS
GETC
OUT
;
; Check the command
;
Test LD R1,NegX ; Check for X
ADD R1,R1,R0
BRz Exit
;
LD R1,NegC ; Check for C
ADD R1,R1,R0
BRz OpClear ; See Figure 10.23
;
LD R1,NegPlus ; Check for +
ADD R1,R1,R0
BRz OpAdd ; See Figure 10.8
;
LD R1,NegMult ; Check for *
ADD R1,R1,R0
BRz OpMult ; See Figure 10.12
;
LD R1,NegMinus ; Check for -
ADD R1,R1,R0
BRz OpNeg ; See Figure 10.13
;
LD R1,NegD ; Check for D
ADD R1,R1,R0
BRz OpDisplay ; See Figure 10.22
;
; Then we must be entering an integer
;
BRnzp PushValue ; See Figure 10.21
;
NewCommand LEA R0,PromptMsg
PUTS
GETC
OUT
BRnzp Test
Exit HALT
PromptMsg .FILL x000A
.STRINGZ "Enter a command:"
NegX .FILL xFFA8
NegC .FILL xFFBD
NegPlus .FILL xFFD5
NegMinus .FILL xFFD3
NegMult .FILL xFFD6
NegD .FILL xFFBC