.TITLE MR17.. CONVERT ASCII STRING INTO RAD50 DATA BLOCK .IDENT /MR17../ ; .PAGE .SBTTL . CONVERT ASCII STRING TO RAD50 DATA BLOCK ; ; R$R50L:: ;THIS PROCEDURE CONVERTS ASCII CHARACTERS ;TO RAD 50 CODE AND LOADS THREE PER WORD ; ; ENTRY CONDITIONS +0 ; R0 = ASCII CHARACTER ; R4 -> ADDRESS TO LOAD CHARACTERS ; ; ENTRY CONDITIONS +2 ; R4 -> ADDRESS TO LOAD CHARACTERS ; ; EXIT CONDITIONS ; STATUS = SUCCESS OR ERROR ; R4 -> LAST RADIX 50 WORD ; ; BR 5$ ;NORMAL ENTRY POINT CLR @R4 ;INITIALISATION ENTRY POINT MOV #3,100$ ;SET UP LOAD COUNTER EXITSUCCESS ;GO BACK TO CALLING PROGRAM ; 5$: TST 100$ ;IS IT TIME TO STEP ONTO NEXT WORD BNE 20$ ;NOT A NEW WORD YET TST (R4)+ ;INCREMENT TO NEXT LOAD OUT WORD 10$: CLR @R4 ;CLEAR OUT NEW LOAD AREA MOV #3,100$ ;RESET LOAD COUNTER 20$: DEC 100$ ;INDICATE A CHAR HAS BEEN LOADED OUT ; SAVE R0,R2 ;PROTECT REGISTER R0 AND R2 CALL R$CR50 ;CONVERT ASCII CHAR RAD50 IFERROR 30$ ;J IF INVALID CHAR ASSUME A SPACE ; CMP 100$,#2 ;IS THIS THE TOP CHARACTER BNE 23$ ;J IF NOT TOP CHARACTER CALL 40$ ;MULT CHAR VALUE BY 40 23$: CMP 100$,#1 ;IS THE ONE OF THE TOP TWO CHARACTERS BLT 26$ ;J IF NOT ONE OF THE TOP TWO CALL 40$ ;MULT CHAR VALUE BY 40 26$: ADD R0,@R4 ;ADD IN NEWLY CONVERTED CHARACTER VALUE SETSUCCESS ;INDICATE JOB DONE WITH SUCCESS 30$: UNSAVE R0,R2 ;RESTORE REGISTERS RETURN ;BACK TO CALLING PROGRAM ; 40$: ;MULTIPLY VALUE BY DECIMAL 40 ASL R0 ;MULTIPLY BY 32. ASL R0 ASL R0 MOV R0,R2 ;HOLD TIMES 8 VALUE ASL R0 ASL R0 ; NOTE 40 = 32+8 IE. SHIFT AND ADD ADD R2,R0 ;R0 VALUE * 40 RETURN ;BACK TO CALLING ROUTINE ; 100$: .WORD 0 ;RADIX 50 LOADER CONTROL WORD ; .END ;