58 lines
1.3 KiB
Plaintext
58 lines
1.3 KiB
Plaintext
.TITLE FIZBUZ
|
|
.MCALL .TTYOUT,.EXIT
|
|
FIZBUZ::MOV #1,R2 ; COUNTER
|
|
MOV #3,R3 ; FIZZ COUNTER
|
|
MOV #5,R4 ; BUZZ COUNTER
|
|
NUMBER: CLR R5
|
|
CHKFIZ: DEC R3
|
|
BNE CHKBUZ
|
|
MOV #FIZZ,R1
|
|
JSR PC,PRSTR
|
|
MOV #3,R3
|
|
INC R5
|
|
CHKBUZ: DEC R4
|
|
BNE CHKNUM
|
|
MOV #BUZZ,R1
|
|
JSR PC,PRSTR
|
|
MOV #5,R4
|
|
INC R5
|
|
CHKNUM: TST R5
|
|
BNE NEXNUM
|
|
MOV R2,R0
|
|
JSR PC,PR0
|
|
NEXNUM: MOV #NL,R1
|
|
JSR PC,PRSTR
|
|
INC R2
|
|
CMP R2,#^D100
|
|
BLE NUMBER
|
|
.EXIT
|
|
; STRING DATA
|
|
FIZZ: .ASCIZ /FIZZ/
|
|
BUZZ: .ASCIZ /BUZZ/
|
|
NL: .BYTE 15,12,0
|
|
.EVEN
|
|
; PRINT NUMBER IN R0 AS DECIMAL
|
|
PR0: MOV R2,-(SP)
|
|
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$
|
|
MOV (SP)+,R2
|
|
RTS PC
|
|
.ASCII /...../
|
|
4$: .BYTE 0
|
|
; PRINT STRING IN R1
|
|
PRSTR: MOVB (R1)+,R0
|
|
.TTYOUT
|
|
BNE PRSTR
|
|
RTS PC
|
|
.END FIZBUZ
|