.TITLE ITOC .IDENT /X01/ .NLIST BEX .ENABL LC ; ; UTILITY ROUTINE. ; INTEGER TO (DECIMAL) CHARACTERS. ; .MCALL RETURN ; ; CONVERSION TABLE. ; T: .WORD -10000. ;NEG. POWERS OF TEN. .WORD -1000. ; .WORD -100. ; .WORD -10. ; TE: .BLKW 0 ;TABLE END. ;+ ; ** $ITOC -- INTEGER TO (DECIMAL) CHARACTERS. ; ; INPUTS: ; R0=THE NUMBER. ; R1=POINTER TO THE BUFFER. ; ; OUTPUTS: ; R1=UPDATED. ;- $ITOC:: MOV R4,-(SP) ;SAVE REGISTERS MOV R3,-(SP) ; MOV R2,-(SP) ; MOV R0,-(SP) ;SAVE AND TEST OPERAND BPL 10$ ;BR IF POSITIVE MOVB #'-,(R1)+ ;STORE MINUS SIGN BR 20$ ; 10$: NEG R0 ;FORCE POSITIVE VALUES NEGATIVE 20$: MOV #T,R2 ;GET POINTER TO CONVERSION TABLE CLR R3 ;SET SUPRESSING 30$: MOV #'0,R4 ;START WITH A ZERO 40$: CMP R0,(R2) ;GENERATE A DIGIT BGT 50$ ; SUB (R2),R0 ; INC R4 ; BR 40$ ; 50$: CMP R4,#'0 ;IS THE DIGIT A ZZERO BNE 60$ ;NO TST R3 ;ARE WE SUPRESSING BEQ 70$ ;YES 60$: MOVB R4,(R1)+ ;PUT OUT THE DIGIT INC R3 ;END SUPRESSION 70$: TST (R2)+ ;GET NEXT TABLE ENTRY CMP R2,#TE ;ANY MORE BLO 30$ ;YES NEG R0 ;DO LAST DIGIT ADD #'0,R0 ; MOVB R0,(R1)+ ; MOV (SP)+,R0 ;DONE MOV (SP)+,R2 ; MOV (SP)+,R3 ; MOV (SP)+,R4 ; RETURN ; .END