; Lab section -> 21
.ORIG x3100
AND R0, R0, 0
AND R1, R1, 0
AND R2, R2, 0
AND R3, R3, 0
AND R4, R4, 0
AND R5, R5, 0
AND R6, R6, 0
AND R7, R7, 0
LD R6, NEGNUM
LD R0, RETURN
GETNUM1:
GETC
ADD R7, R0, R6
ADD R7, R7, #3
BRz NEGATIVE
ADD R7, R0, R6
ADD R7, R7, #5
BRz POSITIVE
ADD R7, R0, R6
BRn GETNUM1
BRz GETNUM2
ADD R7, R7, #-10
BRnz GETNUM2
BRp GETNUM1
GETNUM2:
ADD R1, R0, R6
OUT
GETC
ADD R7, R0, R6
BRn GETNUM2
BRz GETNUM3
ADD R7, R7, #-10
BRnz GETNUM3
BRp GETNUM2
GETNUM3:
ADD R2, R0, R6
OUT
GETC
ADD R7, R0, R6
BRn GETNUM3
BRz GETNUM4
ADD R7, R7, #-10
BRnz GETNUM4
BRp GETNUM3
GETNUM4:
ADD R3, R0, R6
OUT
GETC
ADD R7, R0, R6
BRn GETNUM4
BRz DONE
ADD R7, R7, #-10
BRnz DONE
BRp GETNUM4
POSITIVE:
OUT
AND R5, R5, 0
BR GETNUM1
NEGATIVE:
OUT
AND R5, R5, 0
ADD R5, R5, 1
BR GETNUM1
DONE:
ADD R4, R0, R6
OUT
SKIP1:
LEA R0, STABLE
ADD R0, R0, R1
LDR R1, R0, 0
LEA R0, HTABLE
ADD R0, R0, R2
LDR R2, R0, 0
LEA R0, QTABLE
ADD R0, R0, R3
LDR R3, R0, 0
LEA R0, GTABLE
ADD R0, R0, R4
LDR R4, R0, 0
AND R0, R0, 0
ADD R0, R0, R1
ADD R0, R0, R2
ADD R0, R0, R3
ADD R0, R0, R4
AND R5, R5, 1
BRnz SKIP
NOT R0, R0
ADD R0, R0, 1
SKIP:
ADD R6, R0, 0
LD R0, RETURN
OUT
; ADD R7, R6, 0
LEA R1, MASKTABLE
LD R4, COUNTER
LD R5, NEG1
LD R3, MAKENUM
LOOP:
LDR R2, R1, 0
AND R2, R6, R2
BRnp ONE
ZERO:
AND R0, R0, 0
ADD R0, R0, R3
OUT
BR COUNT
ONE:
AND R0, R0, 0
ADD R0, R0, 1
ADD R0, R0, R3
OUT
COUNT:
ADD R1, R1, 1
ADD R4, R4, R5
BRp LOOP
EXIT:
HALT
MAKENUM .FILL #48
COUNTER .FILL #16
NEG1 .FILL xFFFF
RETURN .FILL $A
RETNEG .FILL $-A
NEGNUM .FILL #-48
STABLE .FILL 0
.FILL 1000
.FILL 2000
.FILL 3000
.FILL 4000
.FILL 5000
.FILL 6000
.FILL 7000
.FILL 8000
.FILL 9000
HTABLE .FILL 0
.FILL 100
.FILL 200
.FILL 300
.FILL 400
.FILL 500
.FILL 600
.FILL 700
.FILL 800
.FILL 900
QTABLE .FILL 0
.FILL 10
.FILL 20
.FILL 30
.FILL 40
.FILL 50
.FILL 60
.FILL 70
.FILL 80
.FILL 90
GTABLE .FILL 0
.FILL 1
.FILL 2
.FILL 3
.FILL 4
.FILL 5
.FILL 6
.FILL 7
.FILL 8
.FILL 9
MASKTABLE .FILL $8000
.FILL $4000
.FILL $2000
.FILL $1000
.FILL $0800
.FILL $0400
.FILL $0200
.FILL $0100
.FILL $0080
.FILL $0040
.FILL $0020
.FILL $0010
.FILL $0008
.FILL $0004
.FILL $0002
.FILL $0001
.END