; FILE NAME : B I N A S C . M A C ; DATE : NOVEMBER 28, 1973 ; VERSION : 01.02 ; AUTHOR : JAMES STANFILL ; DEPARTMENT OF MEDICINE ; UNIVERSITY OF WASHINGTON ; ; REVISIONS : 01.02 21-NOV-77 J. STANFILL ; ADDED ENTRY POINT FOR FORTRAN COMPATIBILITY. ; .TITLE BINASC .IDENT /01.02/ .GLOBL BINASC,BAFOR ; ;+ ; SUBROUTINE TO PERFORM A SIGNED CONVERSION FROM BINARY ; TO ASCII. THREE WORDS MUST BE ALLOCATED TO RECEIVE THE ; THE ASCII STRING (5 BYTES FOR THE NUMBER AND 1 BYTE FOR ; THE SIGN). THE RETURNED ASCII EQUIVALENT IS RIGHT JUSTIFIED ; ; CALLING SEQUENCE (FORTRAN) : [01.02] ; ; CALL BAFOR (I,IA) [01.02] ; ; WHERE : ; ; I INTEGER*2 BINARY VALUE TO BE CONVERTED [01.02] ; IA LOGICAL*1 6 CHARACTER ARRAY FOR RESULT [01.02] ; ; CALLING SEQUENCE (MACRO) : ; ; SET R3 = BINARY WORD TO BE CONVERTED ; SET R4 = ADDR OF ASCII STRING ; ; JSR PC,BINASC ;- BAFOR: MOV @2(R5),R3 ;GET BINARY NUMBER [01.02] MOV 4(R5),R4 ;GET ADDR FOR RESULT [01.02] BINASC: MOV R2,-(SP) ;SAVE REGISTER USED MOV #40,R2 ;PUT "SPACE" IN R2 TST R3 ;NUMBER NEGATIVE? BPL 1$ ;NO--PUT "SPACE" ON STACK NEG R3 ;YES--TAKE 2'COMPLEMENT, MOV #55,R2 ;PUT "MINUS" IN R2, AND 1$: MOV R2,-(SP) ;PUSH SIGN ON STACK MOV #6,R2 4$: MOVB #40,(R4)+ ;FILL BUFFER WITH SPACES AND SOB R2,4$ ;MOVE PTR TO END OF BUFFER 2$: CLR R2 DIV #12,R2 ;QUO IN R2, REM IN R3 ADD #60,R3 ;FORM ASCII MOVB R3,-(R4) ;STORE AWAY MOV R2,R3 ;MOVE QUO TO R3 CMP #11,R3 ;QUO GREATER THAN 9 BLT 2$ ;YES--GO BACK TST R3 ;QUO = 0? BEQ 3$ ;YES ADD #60,R3 ;NO--CONVERT LAST BYTE MOVB R3,-(R4) ;AND STORE 3$: MOV (SP)+,R3 ;GET SIGN (OR SPACE) MOVB R3,-(R4) ;APPEND "SIGN" OR "SPACE" MOV (SP)+,R2 ;RESTORE REGISTER USED RTS PC ;RETURN ; .END ;