69 lines
1.5 KiB
Plaintext
69 lines
1.5 KiB
Plaintext
.TITLE ACKRMN
|
|
.MCALL .TTYOUT,.EXIT
|
|
ACKRMN::JMP MKTBL
|
|
|
|
; R0 = ACK(R0,R1)
|
|
ACK: MOV SP,R2 ; KEEP OLD STACK PTR
|
|
MOV #ASTK,SP ; USE PRIVATE STACK
|
|
JSR PC,1$
|
|
MOV R2,SP ; RESTORE STACK PTR
|
|
RTS PC
|
|
1$: TST R0
|
|
BNE 2$
|
|
INC R1
|
|
MOV R1,R0
|
|
RTS PC
|
|
2$: TST R1
|
|
BNE 3$
|
|
DEC R0
|
|
INC R1
|
|
BR 1$
|
|
3$: MOV R0,-(SP)
|
|
DEC R1
|
|
JSR PC,1$
|
|
MOV R0,R1
|
|
MOV (SP)+,R0
|
|
DEC R0
|
|
BR 1$
|
|
.BLKB 4000 ; BIG STACK
|
|
ASTK = .
|
|
|
|
; PRINT TABLE
|
|
MMAX = 4
|
|
NMAX = 7
|
|
MKTBL: CLR R3
|
|
1$: CLR R4
|
|
2$: MOV R3,R0
|
|
MOV R4,R1
|
|
JSR PC,ACK
|
|
JSR PC,PR0
|
|
INC R4
|
|
CMP R4,#NMAX
|
|
BLT 2$
|
|
MOV #15,R0
|
|
.TTYOUT
|
|
MOV #12,R0
|
|
.TTYOUT
|
|
INC R3
|
|
CMP R3,#MMAX
|
|
BLT 1$
|
|
.EXIT
|
|
|
|
; PRINT NUMBER IN R0 AS DECIMAL
|
|
PR0: MOV #4$,R1
|
|
1$: MOV #-1,R2
|
|
2$: INC R2
|
|
SUB #12,R0
|
|
BCC 2$
|
|
ADD #72,R0
|
|
MOVB R0,-(R1)
|
|
MOV R2,R0
|
|
BNE 1$
|
|
3$: MOVB (R1)+,R0
|
|
.TTYOUT
|
|
BNE 3$
|
|
RTS PC
|
|
.ASCII /...../
|
|
4$: .BYTE 11,0
|
|
.END ACKRMN
|