59 lines
1.3 KiB
Text
59 lines
1.3 KiB
Text
.TITLE HAPPY
|
|
.MCALL .TTYOUT,.EXIT
|
|
HAPPY:: MOV #^D8,R5 ; 8 HAPPY NUMBERS
|
|
CLR R4
|
|
1$: INC R4
|
|
MOV R4,R0
|
|
JSR PC,CHECK
|
|
BNE 1$
|
|
MOV R4,R0
|
|
JSR PC,PR0
|
|
SOB R5,1$
|
|
.EXIT
|
|
|
|
; CHECK IF R0 IS HAPPY: ZERO FLAG SET IF TRUE
|
|
CHECK: MOV #200,R1
|
|
MOV #3$,R2
|
|
1$: CLR (R2)+
|
|
SOB R1,1$
|
|
2$: INCB 3$(R0)
|
|
JSR PC,SUMSQ
|
|
TST 3$(R0)
|
|
BEQ 2$
|
|
DEC R0
|
|
RTS PC
|
|
3$: .BLKW 200
|
|
|
|
; LET R0 = SUM OF SQUARES OF DIGITS OF R0
|
|
SUMSQ: CLR R2
|
|
1$: MOV #-1,R1
|
|
2$: INC R1
|
|
SUB #12,R0
|
|
BCC 2$
|
|
ADD #12,R0
|
|
MOVB 3$(R0),R0
|
|
ADD R0,R2
|
|
MOV R1,R0
|
|
BNE 1$
|
|
MOV R2,R0
|
|
RTS PC
|
|
3$: .BYTE ^D 0,^D 1,^D 4,^D 9,^D16
|
|
.BYTE ^D25,^D36,^D49,^D64,^D81
|
|
|
|
; 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 15,12,0
|
|
.END HAPPY
|