.TITLE MR02.. STRING PROCEDURES IN MACRO .IDENT /MR02.A/ ; ; MODS LIST ; ; (A) ALLOW EITHER WORD OR BYTE CONVERSIONS ; .PAGE .SBTTL . BINARY TO OCTAL STRING CONVERSIONS ; R$BOCT:: ;CONVERT BINARY TO OCTAL ASCII STRING ; ; ENTRY CONDITIONS ; R0 = BINARY VALUE WORD ENTRY +0 ; BYTE ENTRY +2 ; EXIT CONDITIONS ; R0 -> CONVERTED STRING ; BR 6$ ;WORD ENTRY ;BYTE ENTRY BIC #177400,R0 ;MASK VALUE DOWN TO 8 BITS MOV #3,50$ ;INDICATE THIS IS A BYTE ENTRY BR 7$ ;ENTER COMMON SOFTWARE ; 6$: MOV #6,50$ ;INDICATE THIS IS A WORD ENTRY 7$: SAVE R1,R3,R4 ;SAVE R1 R3 R4 ; MOV #55$,R4 ;HOLD START ADDRESS OF DATA AREA MOV #5,R3 ;LOOP CHARACTER COUNTER PRESET ; 10$: MOV R0,R1 ;HOLD VALUE BEING PROCESSED BIC #177770,R1 ;CLEAR ALL BUT BOTTOM 3 BITS ADD #'0,R1 ;CONVERT BCD TO ASCII MOVB R1,(R4)+ ;SAVE CHARACTER ASH #-3,R0 ;SHIFT CONTENTS OFF R0 3 PLACES RIGHT SOB R3,10$ ;LOOP 5 TIMES MOVB #'0,@R4 ;STORE ZERO AS LAST DIGIT TST R0 ;SHOULD LAST DIGIT BE ZERO BEQ 20$ ;J IF DIGIT SHOULD BE ZERO INCB @R4 ;CONVERT LAST DIGIT FROM ZERO TO ONE ; 20$: MOV #50$,R0 ;HOLD ADDRESS OF RESULT CHARACTER STRING CALL R$REVERSE ;SWITCH CHARACTERS BACK TO CORRECT ORDER 30$: UNSAVE R1,R3,R4 ;RESTORE REGISTERS RETURN ;RETURN TO CALLING PROGRAM ; ; DATA AREA .WORD 6 ;MAX NUMBER OF CHARACTERS ALLOWED 50$: .WORD 6 ;ACTUAL NUMBER OF CHARACTERS IN STRING 55$: .BYTE 0,0,0,0,0,0 .EVEN ;SET TO EVEN BOUNDRY ; .END ;