.TITLE MR26.. STRING PROCEDURES IN MACRO .IDENT /MR26../ ; .PAGE .SBTTL . BINARY TO HEX STRING CONVERSIONS ; R$BHEX:: ;CONVERT BINARY TO HEX 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 #2,9$ ;INDICATE THIS IS A BYTE ENTRY BR 7$ ;ENTER COMMON SOFTWARE ; 6$: MOV #4,9$ ;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 (PC)+,R3 ;LOOP CHARACTER COUNTER PRESET 9$: .WORD 4 ;COUNT MOV R3,50$ ;SAVE STRING LENGTH ; 10$: MOV R0,R1 ;HOLD VALUE BEING PROCESSED BIC #^C17,R1 ;CLEAR ALL BUT BOTTOM 4 BITS ADD #'0,R1 ;CONVERT BCD TO ASCII CMP R1,#'9 ;IS CHARACTER IN ASCII RANGE ??? BLE 15$ ;IF YES THE BRANCH ADD #'A-'0,R1 ;FUDGE CHARACTER TO GIVE CORRECT ANSWER 15$: MOVB R1,(R4)+ ;SAVE CHARACTER ASH #-4,R0 ;SHIFT CONTENTS OFF R0 4 PLACES RIGHT SOB R3,10$ ;LOOP n TIMES ; 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 4 ;MAX NUMBER OF CHARACTERS ALLOWED 50$: .WORD 4 ;ACTUAL NUMBER OF CHARACTERS IN STRING 55$: .BYTE 0,0,0,0 .EVEN ;SET TO EVEN BOUNDRY ; .END ;