;UCRL-51940, "Floating-Point Package for Intel 8008 and 8080 Microprocessors" ; by Michael D. Maples ; Lawrence Livermore Laboratory, ; University of California/Livermore, California 94550, ; October 24, 1975 ; ; only extracted the square-root code ; Herb Johnson Feb 14 2022 for some bizarre reasons ; ;///SQUARE ROOT ;THE L REG PTS TO THE ?? TO BE ;OPERATED ON ;THE B REG PTS TO THE LOC WHERE ;THE RESULT IS TO BE STORED ;THE C REG PTS TO THE SCRATCH ;AREA. ;WHERE: ;C - ITERATION COUNT ;C+l = L REG ;C+2 = B REG ;C+3 TO C+6 INTRL REG 1 ;C+7 TO C+10 INTRL REG 2 ;C+11 T0 C+14 INTRL REG 3 ;C+15 - ORG 6232Q ;TO MATCH 1975 LISTING COPY EQU 880EH ;10001000 00001110 ;210016 GCHR EQU 260EH ;00100110 00001110 ;046016 LMUL EQU 5F0AH ;01011111 00001010 ;137012 LADD EQU 5C09H ;01011100 00001001 ;134011 LDIV EQU 0009H ;00000000 00001001 ;000011 WZER EQU 8D0BH ;10001101 00001011 ;215013 DSQRT: MOV A,L ;STORE L IN MOV L,C ;2ND WRD SCRTCH MVI M,0 ;INITIALIZE ITER CCUNT INR L MOV M,A INR L ;STR 8 IN 3RD MOV M,B ;WRD OF SCRTCH INR L ;SET C TO INTRL MOV C,L ;REG L MOV L,A ;SET L PTR AT MOV A,H ;SET REGS FOR COPY CALL COPY ;CPT TO INCRL REG1 CALL GCHR ;PUT CHAR IN A MOV B,A ;MAKE COPY ANI 200Q ;CK NEG JNZ ERSQ MOV A,B ANI 100Q ;CH NEG EXP MOV A,B JZ EPOS RAR ;DIV BY 2 ANI 177Q ORI 100Q ;SET SIGN BIT MOV M,A ;SAVE 1ST APPROX JMP AGN4 EPOS: RAR ;DIV BY 2 ANI 177Q MOV M,A ;SAVE 1ST APPROX AGN4: MOV L,C ;SET REGS MOV A,C ;TO COPY 1ST ADI 4 ;APPROX MOV C,A ;INTO INTRL REG 2 MOV A,H ;FRM INTRL REG1 CALL COPY MOV A,C SUI 4 ;MULTIPLY INTRL REG 1 MOV L,A MOV B,C ;TIMES INTRL REG2 ADI 10Q ;PLACE RESULT IN MOV C,A ;INTRL REG 3 CALL LMUL MOV A,C SUI 10Q ;COPY ORG INTO MOV C,A ;INTRL REG 1 SUI 2 MOV L,A MOV L,M MOV A,H CALL COPY MOV A,C ADI 10Q ;ADD INTRL MOV L,A ;REG3 TO MOV B,C ;INTRL REG1 ADI 4 ;ANS TO INTRL MOV C,A ;REG3 CALL LADD MOV A,L SUI 4 ;DIV INTRL REG 3 MOV B,A ;BY INTRL REG 2 SUI 4 ;PUT ANSW IN INTRL MOV C,A ;REG1 CALL LDIV CALL GCHR SUI 1 ANI 177Q MOV M,A MOV A,C SUI 3 ;C PTS TO INTRL REG 1 MOV L,A ;GET ITER MOV B,M ;COUNT NOW INCR INR B MOV M,B MOV A,B CPI 5 ;IF = 5 RTN ANS JNZ AGN4 ;OTHERWISE CONT MOV L,C ALDN: DCR L ;COPY ANS INTO MOV C,M ;LOC REQUESTED INR L MOV A,H CALL COPY RET ERSQ: MOV L,C CALL WZER ;WRITE A FLOATING ZERO JMP ALDN ;C+1 = l REG ;BELOW SHOULD BE 5 DIGIT FLOATING PT OUTPUT ; CVRT ROUTINE END