ASMB,R,B,L,X,C HED BINARY TO ASCII ROUTINE. JRN. 11 MAY 70. * * *** THIS IS A SUBROUTINE TO CONVERT A POSITIVE BINARY * NUMBER UP TO 2,147,583,647 TO ITS ASCII EQUIVALENT. * * *** AT THE TIME OF TRANSFER, THE BINARY NUMBER * WILL BE IN THE A & B REGISTERS IN DOUBLE * PRECISION FORMAT. * * *** THE CALLING SEQUENCE SHOULD BE: * * JSB B2ASC * DEF RESULTS * DEC (# WORDS TO BE STORED) * * *** B2ASC WILL STORE THE ASCII EQUIVALENT IN THE * STORAGE AREA DEFINED WITH * HIGH ORDER DIGITS FIRST, AND RETURN CONTROL TO THE * 1'ST WORD FOLLOWING THE DEFINED STORAGE AREA. *** * * *** LEADING ZERO'S WILL BE RE&LACED WITH BLANKS. *** * * NAM B2ASC,7 ENT B2ASC * * *** START OF SUBROUTINE. *** * B2ASC NOP * LOOP DST HOLD STORE # TEMPORARILLY. CLE ADA =B-103240 ADD -100,000 TO ORIG NUMBER. SEZ,CLE,RSS " ADB =B-1 " ADB =B-1 " SSB RESULTS NEGATIVE? JMP OUT YES, LEAVE LOOP. ISZ CNTR NO, INCREMENT COUNTER. JMP LOOP LOOP AGAIN. * * *** PROCESS COUNTER. * CNTR = # OF TIMES 100,000 COULD BE * SUBTRACTED FROM ORIGINAL NUMBER * WITHOUT THAT NUMBER GOING NEGATIVE. *** * OUT LDA CNTR LOAD COUNTER. CLB DIV =D10000 GET 10**9 BIT. ALF,ALF SHIFT TO HIGHER ORDER POSITION. IOR ASCII CONVERT QUOTIENT TO ASCII. STA TEMP STORE TEMPORARILY. LDA 1 LOAD REMAINDER. CLB DIV =D1000 GET 10**8 BIT. IOR TEMP CONVERT QUOTIENT TO ASCII. STA BUFF SAVE IN BUFFER. LDA 1 LOAD REMAINDER. CLB DIV =D100 GET 10**7 BIT. ALF,ALF SHIFT TO HIGH ORDER POSITION. IOR ASCII CONVERT QUOTIENT TO ASCII. STA TEMP STORE TEMPORARILY. LDA 1 LOAD REMAINDER. CLB DIV =D10 GET 10**6 BIT. IOR TEMP COMBINE WITH M.S.B. STA BUFF+1 SAVE IN BUFFER. LDA 1 LOAD REMAINDER. = 10**5 BIT. ALF,ALF SHIFT TO HIGH ORDER POSITION. IOR ASCII CONVERT TO ASCII. STA TEMP STORE TEMPORARILY. * * *** OPERATE ON REMAINDER OF ABOVE PROCESS. *** * DLD HOLD RELOAD # (LESS 100,000'S IF NEC) DIV =D10000 GET 10**4 BIT. IOR TEMP COMBINE WITH M.S.B. STA BUFF+2 SAVE IN BUFFER. LDA 1 LOAD REMAINDER. CLB DIV =D1000 GET 10**3 BIT. ALF,ALF SHIFT TO HIGH ORDER POSITION. IOR ASCII CONVERT TO ASCII. STA TEMP STORE TEMPORARILY. LDA 1 LOAD REMAINDER. CLB DIV =D100 GET 10**2 BIT. IOR TEMP COMBINE WITH M.S.B. STA BUFF+3 SAVE IN BUFFER. LDA 1 LOAD REMAINDER CLB DIV =D10 GET 10**1 BIT. ALF,ALF SHIFT TO HIGH ORDER POSITION. IOR ASCII CONVERT TO ASCII. STA TEMP STORE TEMPORIALLY LDA 1 LOAD REMAINDER. =10**0 BIT. IOR TEMP COMBINE WITH M.S.B. STA BUFF+4 SAVE IN BUFFER. * LDB POINT GET POINTER TO DATA BUFFER. LDA =D-4 SET UP 4 CHAR. LOOP. STA COUNT LOOP1 LDA 1,I GET 2 CHARACTERS. CPA =A00 BOTH = 0? RSS JMP NO NO. LDA =A YES, REPLACE STA 1,I WITH 2 BLANKS. INB POINT B-REG TO NEXT CHARS. ISZ COUNT END LOOP? JMP LOOP1 NO JMP OUTLP YES. * NO AND =B177400 MASK OFF RIGHT CHAR. CPA =B30000 LEFT ONE = 0? RSS JMP OUTLP NO. LDA 1,I YES, REPLACE WITH AND =B377 A BLANK. IOR =B20000 STA 1,I * OUTLP LDA B2ASC GET ADDR TO STORE LDA 0,I RESULTS IN. STA ADDR ISZ B2ASC LDA B2ASC GET COUNT OF DIGITS TO LDA 0,I BE STORED. CMA,INA STA COUNT STORE IN LOOP COUNTER. ADA =D5 SET UP LOOP POINTER. ADA POINT LOOP2 LDB 0,I GET 2 CHARS. STB ADDR,I STORE. ISZ ADDR INCREMENT POINTERS. INA ISZ COUNT ALL CHARS STORED YET? JMP LOOP2 NO. CLA YES, ZERO COUNTER STA CNTR AND RETURN. ISZ B2ASC JMP B2ASC,I * *** CONSTANTS AREA. *** * ADDR BSS 1 ASCII OCT 30060 CNTR OCT 0 COUNT BSS 1 HOLD BSS 2 TEMP BSS 1 POINT DEF BUFF BUFF BSS 5 END 24380-18021 1402