.TITLE ORCSR .IDENT /V01.2/ ; ; ORC - COMMON SUBROUTINES ; ; THIS FILE CONTAINS SUBROUTINES USED IN ALL THREE PASSES ; OF ORC: ; OCO CONVERT BINARY TO OCTAL ; R50ASC CONVERT RAD50 TO ASCII ; TAB8 INSERT 8 SPACES IN OUTPUT LINE ; ; ********************************************************** ; ; OCO - CONVERT BINARY TO OCTAL (LEADING ZEROES SUPPRESSED) ; INPUT: VALUE IS IN OCOBUF ; OUTPUT: STRING STARTS AT OCOBUF, LENGTH IN R0 ; OTHER REGISTERS ARE UNCHANGED ; OCO:: MOV R1,-(SP) ; USE ONLY REGISTER R0 MOV R2,-(SP) MOV R3,-(SP) ; MOV #6,R0 ; NUMBER OF DIGITS MOV #OCOBUF,R1 MOV (R1),R3 ; PUT VALUE IN R3 CLR R2 ASHC #1,R2 ; SPLIT OFF FIRST DIGIT 5$: TST R2 ; ZERO? BNE 10$ ; IF NOT - CONVERT IT ASHC #3,R2 ; SPLIT OFF NEXT DIGIT SOB R0,5$ ; REPEAT MOVB #60,(R1) ; IF WE COME HERE, VALUE WAS ZERO INC R0 ; SET LENGTH = 1 BR 100$ ; AND EXIT ; 10$: MOV R0,-(SP) ; NON-ZERO DIGIT FOUND 15$: ADD #60,R2 ; CONVERT TO ASCII MOVB R2,(R1)+ ; STORE IN OUTPUT STRING CLR R2 ASHC #3,R2 ; GET NEXT DIGIT SOB R0,15$ ; REPEAT MOV (SP)+,R0 ; 100$: MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 RTS PC ; ; R50ASC - CONVERT TWO RAD50 WORDS TO ASCII ; ON ENTRY: R0 -> OUTPUT BUFFER (ASCII) ; R1 -> INPUT BUFFER (RAD50) ; NOTE: R1 COULD BE ODD ; BOTH POINTERS ARE STEPPED ON THE APPROPRIATE AMOUNT ; OTHER REGISTERS ARE UNCHANGED ; R50ASC:: MOV R2,-(SP) ; SAVE R2 MOV R3,-(SP) ; SAVE R3 MOV R1,R3 ; SAVE R1 IN R3 CLR R1 ; GET THE FIRST RAD50 WORD BISB (R3)+,R1 SWAB R1 BISB (R3)+,R1 SWAB R1 JSR PC,$C5TA ; CONVERT TO ASCII CLR R1 ; GET THE SECOND RAD50 WORD BISB (R3)+,R1 SWAB R1 BISB (R3)+,R1 SWAB R1 JSR PC,$C5TA ; CONVERT TO ASCII MOV R3,R1 ; RESTORE R1 MOV (SP)+,R3 ; RESTORE OTHER REGISTERS MOV (SP)+,R2 RTS PC ; ; ; MOVE 8 SPACES INTO OUTPUT LINE ; ON ENTRY, R2 -> OUTPUT BUFFER ; OTHER REGISTERS UNCHANGED ; TAB8:: MOV #" ,(R2) MOV (R2)+,(R2) MOV (R2)+,(R2) MOV (R2)+,(R2)+ RTS PC ; ; .END