*20 / /DBLFLT4 /A PACKAGE OF MATHEMATICAL ROUTINES / IN DBLFLT FORMAT / DESIGNED FOR INTER-MEMORY-SEGMENT USE / BY PAUL F. SULLIVAN / AND RAYNA B. COLE / NASA ELECTRONICS RESEARCH CENTER / CAMBRIDGE, MASS. /REVISED FOR PDP-12 / BY D.A.OVERTON 6-6-71 /THE CENTRAL MATH PROGRAM IS DBLFLT1 / BY MICHAEL MCDONALD / BIOMEDICAL COMPUTOR LAB. / WASHINGTON UNIVERSITY / ST. LOUIS, MO. /THIS IS A CUT-DOWN VERSION OF DBLFLT3 / SMALL ENOUGH TO FIT IN ONE MEMORY SEGMENT. /TELETYPE ? TRIG ROUTINES ARE DELETED, / SOME OTHER ROUTINES CHANGED. /13 STORAGE REGISTERS AVAILABLE FOR USER PGMS /FOR INSTRUCTIONS, SEE THE DECUS 12-7 DOCUMENT / AND THE "D4RULES" DOCUMENT ON THIS TAPE /ENTER FROM USER PROGRAM VIA DBL4GO /MEMORY SEGMENT ASSIGNMENT: / (PGM MAY BE RELOCATED) SEGA=3 /XX INDICATES A VARIABLE XX=0 /USES IR. 1-7, 12 ? 17 IN SEGA SEGMNT SEGA /SEG 3 UNLESS MOVED *20 /CONTROL PROGRAM: /SUPERVISES COMMUNICATIONS BETWEEN / CALLING PGMS AND DBLFLT4 ROUTINES / USES IR. 4,5,12 ? 17 / TAKES 0.25 MILLISEC. /ENTRY POINT: DENTER, STC DV3 /SAVE ACC. /COMPUTE FIELDS SET PRIOR TO ENTRY TO DBL3GO IOB 6234 /RIB - SAVE FIELD REG.TO ACC. ROL 2 /PUT INST FIELD SCR 5 / IN RIGHT 5 BITS ADA I /MAKE LIF INST LIF STC DV4+3 /SAVE FOR RTN TO CALLING PGM IOB 6214 /RDF - READ DATA FIELD SCR 1 /PUT IN RIGHT 5 BITS ADA I /MAKE LDF INST LDF STC DV3+1 /SAVE FOR DBLFLT OPERATION ADD DV4+3 /WHAT FIELD CALLED DBLFLT4? ADA I /MAKE LDF INST LDF-LIF STC .+1 DV1, XX /SET DATA FIELD TO CALLING PGM STC 12 /CLEAR LOCATION 12 /SAVE .+1 RTN JMP LOCATION SET 17 2\0 ADD 17 STC DV1 /FIND DBLFLT4 ENTRY POINT LDA /HOW MANY OF XSK I 17? 2\17 ADA I DLISTA STC DV6 LDA /GET JMP FROM LIST DV6, XX STC DV3+2 /CLEAR IR.17 IN CALLING SEGMENT STA 2\17 /SETUP TO TRANSFER ARGUMENTS, IF ANY SET I 4 /TRANSFER 3 ARGS. (MAX.) -3 SET I 5 /INTO V3+4, V3+5, ? V3+6 DV3+2 /IS IT AN ARGUMENTED INSTRUCTION? ADD DV6 ADA I /THERE ARE 11 ARGUMENTED -DLISTA-12 / ENTRIES IN DLISTA APO I /ARGUMENTED ? JMP DV3-6 /NO /YES: TRANSFER ARGUMENTS LDA 17 /GET 1ST ARGUMENT STA I 5 /? STORE IT APO /LAST ARGUMENT? JMP DV3-3 /YES LDA I 17 /NO: GET NEXT ARGUMENT XSK I 4 /4TH ARGUMENT? JMP .-5 /NO: STORE IT JMP DV3-1 /YES: IGNORE IT ? GO ON /FILL BLANKS WITH ADDRESS COUNTING INSTRUCTS. LDA I XSK I 12 STA I 5 XSK I 4 /3RD BLANK FILLED? JMP .-4 /NO:FILL ANOTHER WITH XSK I 12 /JUMP TO DBLFLT4 ROUTINE LDA I /RESTORE ACC. DV3, XX LDF XX /RESTORE DATA FIELD JMP XX /JMP TO DESIRED DBLFLT ROUTINE XX /A (ARGUMENT, OR XSK I 12) XX /B " " XX /C " " XSK I 12 /EXTRA XSK FOR COMPARE RTN STC DV3 /SAVE ACC. /CALCULATE RTN JMP TO CALLING PGM ADD 12 /NUMBER OF XSK I 12 COM ADD DC10 /ADD 4 DV4, ADD DV1 /ADD .+1 RTN JMP STC .+3 ADD DV3 /RESTORE ACC. LIF XX /CALLING PGM INST.FIELD JMP XX /RTN TO CALLING PGM /END DBLFLTA CONTROL PGM /COMPARE : /BY P.F.SULLIVAN AND R.B.COLE, 10-28-68 /COMPARES TWO NUMBERS, A AND B /ENTER VIA: JMP COMPRA / FOLLOWED BY 1 OR 2 ARGUMENTS /RETURNS TO: / .+1 FOR A=B / .+2 FOR A>B / .+3 FOR A0? XSK I 3 /YES, THEN AB JMP 3 /RTN /END COMPARE /NEGATE /COMPLEMENT THE DBLFLT NUMBER SPECIFIED / BY THE SINGLE (NEGATIVE) ARGUMENT /ENTER VIA: / JMP DNEGAT / -LOCATION (OR -2000-LOCATION) /RTNS AT .+2 WITH RESULT LEFT WHERE THE / NUMBER WAS FOUND /USES IR.1-3, SETUP ? COM1A DNEGAT, CLR ADD 0 /USE SETUP JMP SETUP SET 1 /IR.1 POINTS TO NUMB DD7 JMP COM1A JMP DT7 /RTN WAS SAVED THERE /ABSVAL /GET ABSOLUTE VALUE OF THE DBLFLT NUMBER / SPECIFIED BY THE SINGLE (NEGATIVE ) ARGUMENT /ENTER VIA: / JMP DABSVA / -LOCATION (OR -2000-LOCATION) /RTNS AT .+2 WITH RESULT LEFT WHERE THE / NUMBER WAS FOUND /USES IR.1-3, SETUP ? ABS1A DABSVA, CLR ADD 0 /GET RTN JMP SETUP SET 1 /IR.1 POINTS TO NUMB DD7 JMP ABS1A JMP DT7 /RTN /FLOT12 /FLOATS SINGLE PRECISION FIXED POINT NUMBERS /ENTER VIA JMP FLOT1B / WITH THE INTEGER TO BE FLOATED / IN THE ACC. /RTNS TO .+1 WITH THE FLOATED NUMBER / LEFT IN THE FAC /USES IR.17 FLOT1B, SET 17 /SAVE RTN 0 STA /PREPARE TO FLOAT FAC+2 SCR 13 STC FAC+1 JMP FLOATA -FAC JMP 17 /RETURN /FIX12 /FIX DBLFLT NUMBER INTO SIGNED 12-BIT INTEGER /ENTER VIA: JMP FIX12B WITH DBLFLT NO. IN FAC /RTNS TO .+1 IF NUMBER EXCEEDS + OR - 2047 / WITH C(AC) = NUMBER OF BITS TOO MANY /OTHERWISE, RTNS TO .+2 / WITH 12-BIT INTEGER IN ACC. / FRACTIONAL PORTION IS ROUNDED INTO INTEGER /USES IR.17 ? FAC FIX12B, SET 17 /SAVE RTN JMP 0 LDA I -13 /FIX INTO 12 BITS STC FIXA+7 JMP FIXA -FAC STC 1 /SAVE AC LDA I /RESTORE FIX ROUTINE -27 STC FIXA+7 ADD 1 /RESTORE AC AZE /OVERFLOW? JMP 17 /YES: RTN XSK I 17 /NO: INCREMENT RTN ADD FAC+1 /GET INTEGER SAE I /3777? 3777 SKP JMP 17 /DO NOT ROUND SAE I 4000 SKP JMP 17 /DITTO SCR 17 /SIGN INTO MQ BIT 11 SCR 10 ADD FAC+2 /GET FRACT. ROL I 1 /BIT 0 TO LINK STC 1 /CLEAR ACC QLZ / + ? COM /AC=7777 IF -, AC=0 IF + LAM /ADD IN LINK ? INTEGER FAC+1 JMP 17 /RTN /END FIX12 /SIGN TEST: /BY P.F.SULLIVAN, 9-68 /DETERMINES WHETHER X=0, X<0, OR X>0 /ENTER AT SIGNB / WITH X IN FAC /RETURNS TO: / .+1 FOR X=0 / .+2 FOR X>0 / .+3 FOR X<0 SIGNB, LDA /GET MOST SIGNIF PART OF FAC FAC+1 AZE I /IS IT 0? JMP 0 /YES, RTN AT .+1 XSK I 0 /NO,INDEX RTN ADDRESS APO I /IS IT + ? JMP 0 /YES, RTN AT .+2 XSK I 0 /NO,INDEX RTN ADDRESS JMP 0 /RTN AT .+3 IF NEGATIVE /END SIGN TST /MAGNITUDE TEST : /BY PAUL SULLIVAN, 9-68 /DETERMINES WHETHER ABSOLUTE VALUE X > 1 /ENTER AT MAGTSB / WITH X IN FAC /RTNS TO .+1 FOR \X\>1 /RTNS TO .+2 OTHERWISE /USES IR.1-2 MAGTSB, SET 1 /SAVE RTN ADDRESS 0 SET I 2 /POINTER TO FAC FAC LDA 2 /LOAD EXP OF FAC APO /IS IT POSITIVE? JMP .+16 /NO,THEN \X\<1. INDEX AND RTN AZE I /IS IT +0? JMP .+14 /YES,THEN \X\<1.INDEX AND RTN ADD DL7 / -1 AZE /WAS IT +1? JMP 1 /NO, THEN \X\>1. RTN TO .+1 LDA I 2 /YES,LOOK AT MANTISSA APO /IS IT POSITIVE? COM /NO, THEN COMPLEMENT IT SAE I /WAS THE MOST SIGNIF. 2000 / PART + OR - 2000? JMP 1 /NO, THEN \X\>1. RETURN TO .+1 LDA I 2 /YES, LOAD LEAST SIGNIF. PART AZE I /IS IT + OR -0? XSK I 1 /YES,THEN \X\=1. / INDEX RTN ADDRESS JMP 1 /RTN /END MAGTST /POWER SERIES : /BY P.F.SULLIVAN, 9-68 /CALCULATES POWER SERIES /PUT X IN TEM2 /PUT (1-NO.OF TERMS) IN THE ACC /THEN ENTER VIA: JMP DPOWSE /FOLLOWED BY A SINGLE (NEGATIVE) ARGUMENT / WHICH GIVES THE DATA FIELD ADDRESS OF / THE LIST OF CONSTANTS /RTNS TO .+2 / WITH RESULT IN FAC /DATA FIELD MUST BE SET TO TABLE OF CONSTANTS /WHICH MAY BE IN ANY DATA FIELD /USES IRS.6,17 ? TEM2 DPOWSE, STC 6 /(1-NO. OF TERMS) INTO IR.6 ADD 0 /USE SETUP JMP SETUP ADD DD7 /ADDRESS OF CONSTANTS STC 17 /INTO IR.17 ADD DT7 /GET RTN JMP STC DXIPWR /SAVE IT JMP TRANSA /1ST CONSTANT TO FAC 17 -FAC JMP MULTA /MULTIPLY BY VARIABLE -TEM2 JMP ADDTA /ADD NEW CONSTANT -17 XSK I 6 /THROUGH? JMP .-5 /NO, DO IT AGAIN DXIPWR, JMP XX /YES, RTN /END POWSER /SQUARE ROOT : /CALCULATES SQUARE ROOT X /ASSUMES ACCESS TO SIGN TST, COMPARE ? NEGFAC /ENTER VIA: JMP DSQRT / WITH X IN FAC /LEAVES WITH SQUARE ROOT \X\ IN FAC /RTN IS TO .+1 FOR X<0 / .+2 OTHERWISE /USES IR.6?17, TEM1, TEM2 ? TEM3 /TIME AVERAGES 55 M.SEC. XSK I 6 /INDEX RTN ADDRESS JMP 6 /RTN /ENTRY POINT: DSQRT, SET 6 /SAVE RTN ADDRESS 0 JMP SIGNB /SIGN TST JMP DSQRT-2 /0:NO COMPUTATION NEEDED JMP DSQRT1-1 / +, CALCULATE IT JMP DNEGAT / -, GET ABS. VALUE -FAC SKP /? INDICATE AN IMAGINARY ROOT XSK I 6 /INDEX RTN ADDRESS DSQRT1, JMP TRANSA /MOVE X -TEM2 /TO TEM2 /DIVIDE EXPONENT BY 2 (APPROXIMATELY) /TO FORM A 1ST APPROX TO SQROOT OF X ADD FAC SCR 1 /DIVIDE BY 2 AZE I /-0 BECOMES +0 CLR STA /PUT BACK FAC /NOW ADJUST MANTISSA TO IMPROVE THE APPROX APO JMP DSQRT3 JMP MULTA -DCRT2 /SQUARE ROOT GETS COMPUTED HERE DSQRT3, JMP TRANSA /SAVE PRESENT APPROX -TEM1 /IN TEM1 JMP DIVIDA /DIVIDE TEM2 / X FAC / BY APPROXIMATION (A) TEM3 / TO GET (X/A) IN TEM3 JMP ADDTA /ADD FAC TO TEM3 -TEM3 /TO GET [(X/A)+A] IN FAC ADD FAC /GET NEW EXPON. ADD DL7 /-1 FROM EXP.GIVES [(X/A)+A]/2 AZE I CLR STC FAC /A NEW APPROX TO ROOT X IS NOW IN FAC /TEST WHETHER THE LAST ITERATION CHANGED IT JMP COMPRA /COMPARE FAC TO TEM1 -TEM1 JMP 6 /NO CHANGE: WE ARE DONE JMP DSQRT3 /ITS STILL IMPROVING JMP DSQRT3 /SO TRY AGAIN /END SQROOT /LOGS : /BY P.F.SULLIVAN, 9-30-69 /CALCULATES LOGARITHMS /ASSUMES ACCESS TO DBLFLT1 ? SIGN TST /ENTER WITH X IN FAC VIA: / JMP LOG2B FOR LOG BASE 2 OF X / JMP LOB10B FOR LOG BASE 10 OF X / JMP LOGNB FOR NATURAL LOG OF X /FOR X>0, RTNS TO .+2 / WITH APPROPRIATE LOG IN FAC /OTHERWISE RTNS TO .+1 /USES IR.6,7?17, TEM1, TEM2, TEM3 /ENTRY POINT FOR LOG BASE 2: LOG2B, SET 6 /SET RTN ADDRESS 0 JMP SIGNB /SIGN TST JMP 6 /0: LOG 0 IS UNDEFINED. / RTN TO .+1 JMP .+2 /+: CALCULATE LOG X JMP 6 /-: LOG OF NEGATIVE NUMBER /UNDEFINED.RTN TO .+1 XSK I 6 /INDEX RTN ADDRESS LDA /GET L FAC STA /STORE IT TEM1+2 SCR 13 /GET SIGN STC TEM1+1 /STORE IT JMP LOGS1 /RAISE Y1 TO 2**11 STA /STORE NEW EXPONENT M TEM2+2 SCR 13 /GET SIGN STC TEM2+1 /SAVE IT JMP LOGS1 /RAISE Y2 TO 2**11 STA /STORE NEW EXPONENT N TEM3+2 SCR 13 /GET SIGN STC TEM3+1 /STORE IT JMP FLOATA /FLOAT L -TEM1 JMP FLOATA / M -TEM2 JMP FLOATA / N -TEM3 /DIVIDE M BY 2**11 LDA I -13 ADM TEM2 FLO /TEST FOR UNDERFLOW JMP .+4 /NO: GO ON JMP TRANSA /YES:SET ANSWER TO 0 DC0 -TEM2 /DIVIDE N BY 2**22 LDA I -26 ADM TEM3 FLO /SKIP ON UNDERFLOW JMP LOGS1-6 /NO: GO ON JMP TRANSA /YES: SET ANSWER TO 0 DC0 -TEM3 JMP ADDTA TEM1 / L -TEM2 / M/2**11 JMP ADDTA -TEM3 / AND N/2**22 JMP 6 /RTN TO .+2 LOGS1, ADD 0 /SAVE RTN ADDRESS STC .+11 STC FAC /SET EXPONENT TO 0 /RAISE Y TO 2**11 SET I 7 -13 JMP MULTA -FAC XSK I 7 JMP .-3 ADD FAC /PUT NEW EXPONENT IN ACC JMP XX /RTN / /ENTRY POINT FOR LOG BASE 10: LOG10B, SET 17 /SET RTN ADDRESS 0 JMP LOG2B /GET LOG BASE 2 OF X JMP 17 /RTN TO .+1 IN MAIN PGM / IF X<0 OR X=0 XSK I 17 /INDEX RTN ADDRESS JMP MULTA /MULT. BY LOG BASE 10 OF 2 -DCLOG2 JMP 17 /RTN.TO .+2 IN MAIN PGM / /ENTRY POINT FOR NATURAL LOG: LOGNB, SET 17 /SET RTN ADDRESS 0 JMP LOG2B /GET LOG BASE 2 OF X JMP 17 /RTN TO .+1 IN MAIN PGM / IF X<0 OR X=0 XSK I 17 /INDEX RTN ADDRESS JMP MULTA /MULT. BY LN 2 -DCLN2 JMP 17 /RTN.TO .+2 IN MAIN PGM /END LOGS /EXPONENTIAL : /AUTHOR, M.D.MCDONALD / MODIFIED BY P.F.SULLIVAN, 9-68 /CALCULATES E TO THE X /ASSUMES ACCESS TO DBLFLT, SIGN TST, NEGFAC /ENTER VIA: JMP EXPONB / WITH X IN FAC /RTNS TO .+1 / WITH E TO THE X IN FAC /USES IR.6?17, TEM1, TEM2, TEM3 /TAYLOR SERIES METHOD JMP TRANSA /EXP 0 = 1 DC1 -FAC JMP 6 /RTN /ENTRY POINT : EXPONB, SET 6 /SAVE RTN ADDRESS 0 SET I 17 /CLEAR FLAG 0 JMP SIGNB /SIGN TST JMP EXPONB-4 / 0: EXP 0 = 1 JMP EXPON1 / +: CALCULATE EXP. X JMP DNEGAT / -: GET ABS. VALUE -FAC SET I 17 /AND SET FLAG -0 EXPON1, JMP TRANSA /SAVE \X\ -TEM1 /IN TEM1 JMP TRANSA -TEM2 /AND TEM2 JMP TRANSA /PUT 1.0 DC1 -FAC /IN FAC JMP TRANSA -TEM3 /AND TEM3 EXPON2, JMP ADDTA /ADD NEXT TERM -TEM2 /DOES THIS TERM INCREASE THE PARTIAL SUM /BY MORE THAN 2**-22 OF ITS PREVIOUS VALUE ? ADD FAC COM ADD TEM2 ADA I 27 APO JMP EXPON3 /NO, EXCEEDS ACCURACY /OF DBLFLT. GO ON. /YES, CALCULATE NEXT TERM JMP ADDTA /ADD 1 TO NO. FOR FACTORIAL TEM3 DC1 TEM3 JMP DIVIDA /DIVIDE TEM2 / LAST TERM TEM3 / BY INCREMENTED NUMBER TEM2 / FOR FACTORIAL JMP MULTA /MULT. TEM2 / LAST TERM TEM1 / BY X TEM2 JMP EXPON2 /ADD AND CHECK THIS TERM EXPON3, XSK 17 /WAS X NEGATIVE? JMP 6 /NO, RTN JMP DIVIDA /YES, GET RECIPROCAL DC1 -FAC JMP 6 /RTN /END EXPONENTIAL /DBLFLT1 /FROM DBLFLT BY MICHAEL MCDONALD /USES IR.1-5 /ADDITION ADDTA, CLR ADD 0 JMP SETUP LDA 1 COM ADA 2 FLO JMP .+4 SCR 14 BCO I 7737 SCR I 1 ROL I 1 LZE I COM STC DM7+1 JMP DI6 LZE JMP DH6 LDA 1 STA 3 LDA I 2 STA I 3 LDA I 2 STA I 3 JMP DM7 JMP DH7 JMP DI7-2 JMP DG6 LDA I 3 JMP DB6+2 SET 1 DG6+1 JMP ABS1A JMP EXIT /SUBTRACTION SUBTA, CLR ADD 0 JMP SETUP JMP DI6+2 JMP COM1A JMP DH6 JMP ADDTA+3 /MULTIPLY MULTA, CLR ADD 0 JMP SETUP LDA 1 ADA 2 JMP DE6+1 STC DE5 JMP DB6 JMP DI6+2 JMP ABS1A JMP DH6 JMP DD6 LDA I 2 LDA I 2 ROR 1 STA 2 JMP DH6 LDA I 1 MUL I 2 STA 3 QAC STA I 3 LDA I 1 ROR 1 MUL I 2 ROL 1 STA I 3 JMP DH6+2 LDA I 1 MUL 2 JMP DF5 DD5, JMP DH6 LDA I 1 LDA I 1 ROR 1 MUL I 2 JMP DF5 JMP DG6 LDA I 3 LDA I 3 ROL I 1 ROL 1 BCL I 7776 STC DP7 JMP DG6 LDA I 3 ROL I 1 STA I 3 JMP DG6 LDA 3 STA I 3 JMP DG6 LDA I DE5, XX STA 3 JMP EXIT DF5, STC ARG1 JMP DQAC12 STC ARG1+1 SET I 1 ARG1-1 JMP DG6 JMP DH7 SET I 2 -0 JMP DI7 SRO I 2525 JMP DD5 JMP DD5+6 /DIVISION DIVIDA, CLR ADD 0 JMP SETUP ADD DK7 STC DJ5+1 LDA I 2 AZE I HLT JMP DH6 LDA 2 COM ADA 1 JMP DE6+1 JMP DB6 JMP DH6+2 JMP ABS1A JMP DI6+2 JMP ABS1A JMP DH6 LDA I 1 STA I 3 LDA I 1 STA I 3 LDA I 2 COM STC ARG1+1 LDA I 2 COM STC ARG1+2 STC ARG1 STC ARG2 SET I 2 ARG1-3 DH5, JMP DH6+2 JMP .+2 DI5, JMP DI6+2 JMP DH7 DJ5, SRO I 1 JMP DM5 SET I 5 -0 JMP DG6 LDA I 3 AZE JMP DK5-3 LDA I 3 AZE I JMP DK5+2 CLR JMP DG6 LDA I 3 DK5, APO JMP DL5 LDA 2 BSE DJ5+1 STA 2 XSK I 5 DL5, SET 1 DG6+1 JMP DG6 JMP DH7 XSK 5 JMP DH5 JMP DI5 DM5, XSK I 2 XSK I 2 XSK I 2 SRO I 3333 JMP DJ5+3 JMP DG6 CLR ADD ARG1 STA I 3 CLR ADD ARG2 STA I 3 JMP EXIT /MOVE VIA. IR.1?2 MOVE12, LDA 1 STA 2 LDA I 1 STA I 2 LDA I 1 STA I 2 LDA I 1 LDA I 2 CLR JMP 0 /MQ TO ACC. DQAC12, QAC ROL 1 QLZ ADD DK7 JMP 0 /COM SETUP DB6, LDA I 1 BCO I 2 ROL I 1 LDA I NOP LZE ADD .+3 STC DJMPC JMP 0 JMP COM1A-NOP /COMPLEMENT COM1A, SET I 2 -0 /ABSOLUTE VALUE SKP ABS1A, SET I 2 NOP DD6, LDA I 1 SCR I 1 ROL I 1 XSK 2 LZE COM STA 1 LDA I 1 XSK 2 LZE COM STA 1 LDA I 1 CLR JMP 0 /OVERFLOW CHECK DE6, ADA 3 AZE I CLR STA 3 FLO JMP 0 APO HLT /SET RESULT=0 DF6, JMP DG6 LDA I -3777 STA 3 CLR STA I 3 STA I 3 JMP DT7 /SET IR.3 DG6, SET I 3 XX JMP 0 /SET IR.1?2 NORMAL DH6, SET I 2 4\ARG2 SET I 1 ARG1 JMP 0 /SET IR.1?2 REVERSE DI6, SET I 2 ARG1 SET I 1 ARG2 JMP 0 /STANDARD SETUP SETUP, BCL I 6000 STC 4 ADD 0 STC DE7 LDA 4 JMP DG7 JMP DF7 STC DCC7 LDA I 4 JMP DG7 JMP DE7+1 STC DD7 LDA I 4 JMP DG7 NOP STC DG6+1 DB7, JMP DI6 SET I 1 DCC7, XX JMP MOVE12 SET I 1 DD7, XX JMP MOVE12 XSK I 4 ADD 4 ADD SETUP+1 STC DT7 STC DP7 JMP DG6 JMP DH6 DE7, JMP XX STC DD7 ADD DF7+2 JMP DB7-1 DF7, STC DD7 LDA I FAC STC DCC7 JMP DE7+2 /TEST ARGS. DG7, APO I XSK I 0 APO COM ADA I -17 SCR I 1 ROL I 1 ADD DG7+3 LZE I JMP 0 STC 1 LDA 1 ADD DJMPC-1 STA 1 ADA I -3 JMP 0 /ADD 1 TO 3 DH7, SET 4 0 CLR JMP DG6 LDA I 1 STC DJ7 LDA I 3 STC DJ7+2 LDA 1 LAM 3 LDA I 1 LAM I 3 JMP DG6 STC 0 LAM I 3 STC 0 LAM I 3 JMP 4 SET I 2 0 /ADD OVERFLOW CHECK DI7, SET 1 0 JMP DG6 LDA I DJ7, XX BCO I XX APO JMP 1 LDA I 3 BCO DJ7 APO I JMP 1 JMP DG6 LDA I DK7, 1 JMP DE6 LDA I DL7, -1 XSK 2 JMP DM7+2 ADD DP7 XSK 2 COM STC DP7 JMP DG6 LDA I 3 BCO I 4000 STA 3 JMP 1 /SCR N 3 DM7, LDA I XX SET 2 0 AZE I JMP 2 STC 5 SET I 4 -30 DO7, CLR JMP DG6 LDA I 3 SCR I 1 STA 3 LDA I 3 ROR I 1 STA 3 XSK I 4 JMP .+2 JMP .+3 XSK I 5 JMP DO7 JMP DG6 LDA I 3 ROL I 1 LZE COM STC DP7 JMP 2 DP7, XX /NORMALIZE,ROUND ? EXIT EXIT, CLR STC 1 ADD DP7 ROR I 1 JMP DG6 LDA I 3 SAE I 3 JMP .+5 AZE JMP .+3 LZE I JMP DF6 JMP DG6 LDA I 3 APO JMP DU7 ROL 1 APO I JMP DT7+1 DR7, JMP DG6 LDA I 3 LDA I 3 ROR I 1 STC 0 LAM 3 JMP DG6 STC 0 LAM I 3 APO JMP DV7 JMP DG6 CLR ADD 1 COM JMP DE6 SET 1 3 DJMPC, NOP /XX CLR DT7, JMP XX /EXIT LDA I 3 ROL I 1 STA 3 JMP DG6 LDA I 3 ROL I 1 STA 3 XSK I 1 JMP DR7-3 DU7, JMP DV7 JMP DR7 DV7, CLR ADD 0 STC DW7 ADD DL7 JMP DM7+2 ADD DL7 ADD 1 STC 1 LDA 3 BCL I 4000 STA 3 DW7, XX /TRANSFER TRANSA, CLR ADD 0 JMP SETUP SET 2 DD7 JMP MOVE12 JMP DT7-1 / FLOATA, CLR ADD 0 JMP SETUP ADD DD7 STC DG6+1 JMP DG6 LDA I 27 STA 3 JMP ADDTA+35 / FIXA, CLR ADD 0 JMP SETUP ADD DD7 STC DG6+1 JMP DG6 LDA I -27 JMP DE6 APO I JMP DT7 JMP DM7+2 JMP DT7-1 /END DBLFLT1 /SOME USEFUL CONSTANTS IN DBLFLT FORMAT: / E = 2.718281746 DCE, 0002 2557 6052 /3.0 DC3, 0002 3000 /LN 2 = 0.6931473 DCLN2, 0000 /PART OF 3.0 ? LN 2 2613 4410 /LOG 2 = 0.30103 DCLOG2, 7776 2321 0116 /10.0 DC10, 0004 2400 0000 /0.0 DC0, -3777 0000 0000 /1.0 DC1, 0001 2000 0000 /4.0 DC4, 0003 2000 0000 /SQUARE ROOT OF 2 = 1.414214 DCRT2, 0001 2650 1174 /2.0 DC2, 0002 2000 0000 /PI = 3.141593 DCPI, 0002 3110 3756 /END CONSTANTS /LIST OF ENTRY JUMPS FOR DBLFLTA CONTROL PGM DLISTA, JMP ADDTA JMP SUBTA JMP MULTA JMP DIVIDA JMP TRANSA JMP FIXA JMP FLOATA JMP COMPRA JMP DABSVA JMP DNEGAT JMP DPOWSE JMP FIX12B JMP FLOT1B JMP SIGNB JMP MAGTSB JMP DSQRT JMP EXPONB JMP LOG2B JMP LOG10B JMP LOGNB /END JUMP LIST /UNUSED LOCATIONS 0 0 /STORAGE LOCATIONS FOR USER PGMS /(NOT USED BY DBLFLT4 ROUTINES) DS1, 0 0 0 DS2, 0 0 0 DS3, 0 0 0 DS4, 0 0 0 DS5, 0 0 0 DS6, 0 0 0 DS7, 0 0 0 DS8, 0 0 0 DS9, 0 0 0 DS10, 0 0 0 DS11, 0 0 0 DS12, 0 0 0 /RESERVED FOR DATA BREAK DISC CONTROL *1750 0 0 /MORE USER PGM STORAGE DS13, 0 0 0 /STORAGE FOR DBLFLT1 /1ST ARGUMENT ARG1, 0 0 0 /2ND ARGUMENT ARG2, 0 0 0 /FLOATING POINT ACCUMULATOR (FAC) FAC, 0 0 0 /STORAGE FOR DBLFLT4 ROUTINES TEM1, 0 0 0 TEM2, 0 0 0 TEM3, 0 0 0 0 /NOT USED /NOTE: THE DIALV2 LOADER OVERLAYS 1761 TO /1777 WHICH WILL NOT = 0 AFTER LOADING /END DBLFLT4 / / /