*20 / / / / / / THIS IS THE SECOND PART OF THE FPP FUNCTION LIBRARY. / / / / IFREF GETNUM / / / / / / / / / G E T N U M / - - - - - - / / / / / / COPYRIGHT 1971 / DIGITAL EQUIPMENT CORPORATION / 146 MAIN STREET, / MAYNARD, MASSACHUSSETTS. / 01754 / / / / WRITTEN BY JACK BURNESS. / / / / / / / / / / / / / / / THIS ROUTINE WILL CONVERT A / STRING OF ASCII CHARACTERS PACKED / ONE PER WORD TO A FPP NUMBER. / / / / THIS ROUTINE WILL CALL A ROUTINE CALLED "GETC" TO GET IS CHARACTERS. / / / / / / GETNUM, JA . /ENTRY AND RETURN POINT. FCLA /CLEAR FAC FSTA MCRTP1 /ZERO OUT ACCUMULATED NUMBER. FSTA MCRTP3 /ZERO OUT NUMBER OF DIGITS OFTER POINT. ATX 0 /CLEAR OUT DIGIT TOTAL ATX 1 /SET TO ACCEPT SIGN (+ OR -) JSA GETCOL /ASSEMBLE A NUMBER NOW. FLDA MCRTP8 /GET THE BAD CHARACTER. FSUB GETCDT /IS IT A PERIOD. JNE GETNDT /NO. NO DECIMAL POINT. CHECK FOR "E". ATX 0 /DECIMAL POINT. SET DIGIT TOTAL TO 0. FLDA MCRTP7 /RESET ACCUMULATED SUM POSITIVE. FMULM MCRTP1 /BY MULTIPLY BY SIGN AGAIN. JSA GETCOL /ACCULATE IN THE NEXT STRING. XTA 0 /RECALL TOTAL NUMBER OF DIGITS. FSTA MCRTP3 /AND SAVE AWAY FOR AWHILE. / GETNDT, FLDA MCRTP1 /MOVE OVER TOTAL BECAUSE FSTA MCRTP2 /THE EXPONENT WILL CREAM IT. FLDA MCRTP8 /RECALL THE BAD CHARACTER. FSUB GETCEE /SEE IF ITS AN "E". JNE GETEX1 /NOT AN "E". NO EXPONENT. FSTA MCRTP1 /ZERO OUT ACCUMULATING REGISTER. ATX 1 /AND ALSP RESET THE SIGN ACCEPT SWITCH. JSA GETCOL /GET THE EXPONENT. FLDA MCRTP1 /RECALL EXPONENT. GETNEX, FSUB MCRTP3 /SUBTRACT OFF THE DIGITS AFTER POINT. JEQ GETDEQ /EXPONENTS BALANCE. ALL IS WELL. JGT GETDGT /GREATER THEN 0. MULITPLY. / ATX 1 /NEGATIVE. SET UP COUNT. FLDA MCRTP2 /RECALL NUMBER. FDIV GETC10 /DIVIDE BY 10. JXN .-2,1+ /LOOP UNTIL DONE. JA GETNUM /RETURN WHEN DONE. / GETDEQ, FLDA MCRTP2 /RECALL THE NUMBER JA GETNUM /AND EXIT. / GETDGT, FNEG /NEGATE NUMBER AND STICK ATX 1 /IT IN THE INDEX COUNTER. FLDA MCRTP2 /RECALL NUMBER FMUL GETC10 /MULTIPLY IT BY 10. JXN .-2,1+ /LOOP UNTIL DONE. JA GETNUM /THEN RETURN. / GETEX1, FCLA /FAKE OUT ZERO EXPONENT. JA GETNEX /AND REENTER. / / / / / / / / / / GETCOL, JA . /ROUTINE TO ASSEMBLE A STRING OF DIGITS. JXN GETCLP,1 /IF SIGN SET, BYPASS THIS CRUD. FLDA FPPONE /SET THE SIGN TO ONE. FSTA MCRTP7 /7 IS THE SIGN REGISTER. GETCLP, JSA GETC /GET A CHARACTER NOW. FSTA MCRTP8 /SAVE AWAY. FSUB GETC00 /TEST AGAINST "0". JLT GETBD /ITS BAD. FSUB GETC10 /TEST AGAINST "9". JGE GETBD /NOPE. ITS BAD. ATX 1 /SET THE SIGN TO SWITCH TO NON-ACCEPT MODE. FLDA GETC10 /MULTIPLY TOTAL. FMULM MCRTP1 /AND STASH BACK. XTA 1 /RECALL MAGIC DIGIT. FADD GETC10 /FIX IT UP ABIT. FADDM MCRTP1 /AND THEN STORE BACK. JXN GETCLP,0+ /GO BACK AND LOOP. BOP DIGIT COUNTER. / GETBD, FLDA MCRTP8 /GET THE BAD CHARACTER. FSUB GETCPL /SEE IF ITS A PLUS SIGN JEQ GETP /ITS A PLUS SIGN. FSUB FPPTWO /SUBTRACT 2 AND SEE JEQ GETM /IF ITS A MINUS SIGN. FADD GETCSP /SEE IF ITS A SPACE JEQ GETCLP /AND LOOP IF IT IS. / GETXX, FLDA MCRTP7 /RECALL THE SIGN. FMULM MCRTP1 /AND FORCE IT IN. JA GETCOL /AND THEN EXIT. / GETM, FSUB FPPONE /MINUS ONE FOR THE SIGN WORD. JA .+4 /SKIP PAST THE CRAP. / GETP, FLDA FPPONE /PLUS ONE. JXN GETXX,1 /IF X IS ALREADY SET, EXIT. ATX 1 /ELSE RESET SWITCH. JA GETCLP-1 /AND LOOP. / / / / / / / / GETC00, 10 2600 0 GETC10, 10. GETCEE, 10 3050 0 GETCDT, 10 2560 0 GETCPL, 10 2530 0 GETCSP, 13. / / / / / $ IFREF PCON / / / / / P C O N / - - - - / / / / / / / COPYRIGHT 1971 / DIGITAL EQUIPMENT CORPORATION / 146 MAIN STREET, / MAYNARD, MASSACHUSSETTS. / 01754 / / / / WRITTEN BY JACK BURNESS. / / / / / / / / / / / / / / / PCON, JA . /ENTRY POINT FOR P CONVERSION. FSTA MCRTP8 /SAVE IT AWAY. FLDA PTOTAL /RECALL TOTAL NUMBER OF SPACES. JSA MCPUTC /AND PUT IN HIS BUFFER FLDA MCRTP8 /GET HIS NUMBER AGAIN. JLT PMINUS /WHERE TO GO IF MINUS TO FIGURE IN SIGN. FLDA PTOTAL /RECALL THE TOTAL. / PBACK, FSUB PMC8 /SUBTRACT FOR EXPONENT,DECMIL POINT, ETC. FSUB PAFTER /REMOVE EXTRA GARBAGE AFTER POINT. JLT PSTARS /IF IT WON T FIT, GIVE STARS. JSA MCLBLK /IF EXTRA ROOM GIVE SPACES. FLDA MCRTP8 /GET THE NUMBER AGAIN. JSA MCCPMS /GIVE MINUS SIGN IF NECESSARY. FLDA MCRTP8 /RECALL NUMBER JSA MCDIGC /CONVERT IT. FLDA MCRTP7 /GET THE EXPONENT FSUB FPPONE /SUBTRACT ONE FROM IT. FSTA MCRTP8 /AND SAVE FOR MCPEXP TO USE. FLDA FPPONE /PRINT ONE DIGIT NOW. JSA MCPRTD JSA MCPDOT /GIVE THE DECIMAL POINT. FLDA PAFTER /GET NUMBER OF DIGITS AFTER POINT JSA MCPRTD /AND PRINT THEM. JSA MCPEXP /FINALLY PRINT THE EXPONENT. JA PCON /AND RETURN. / / / / PMINUS, FLDA PTOTAL /IF MINUS SUBTRACT ONE FOR THE SIGN. FSUB FPPONE JA PBACK /AND GO IN AND FIGURE IT OUT. / / / / / / / / / PTYPE, JA . /SETS UP THE CONVERSION PROCESS. FSTA MCRTP6 /SAVE FOR A SECOND. FCLA /CLEAR TOTALS AND AFTER. FSTA PTOTAL FSTA PAFTER FLDA MCRTP1 /RECALL TRAILING PLACES. JSA PTLIT /IS IT OK? FSTA PAFTER /YEP. STORE AWAY. FLDA MCRTP6 /RECALL TOTAL? JSA PTLIT /IS IT OK? FSTA PTOTAL /YEP. JA PTYPE /RETURN NOW. / / / / PTLIT, JA . /ARGUMENT CHECKER. JLT PTYPE /IF MINUS EXIT. JAL PTYPE /IF TOO BIG EXIT. ALN 0 /ELSE FIX IT. FNORM /AND FLOAT IT. JA PTLIT /RETURN NOW. / / / PSTARS, FLDA PTOTAL /GET THE TOTAL NUMBER PLACES JSA MCSTAR /AND GENERATE STARS. JA PCON /NOW EXIT. / / / / PTOTAL, 0.0 PAFTER, 0.0 PMC8, 8. /EXPON+.+LEADING+MISC. / / / / / / / / / / $ IFREF ETYPE / / / / / / E T Y P E / - - - - - / / / / / / / COPYRIGHT 1971 / DIGITAL EQUIPMENT CORPORATION / 146 MAIN STREET, / MAYNARD, MASSACHUSSETTS. / 01754 / / / / WRITTEN BY JACK BURNESS. / / / / / / / / / / / / / E - CONVERSION ROUTINE. / / ECON, JA . /CONVERSION ENTRY. AC=NUMBER. BASE(0)=POINTER. FSTA MCRTP8 /SAVE NUMBER AWAY. FLDA ETOTAL /GET TOTAL NUMBER OF SPACES FOR CONVERSION. JSA MCPUTC /PUT IT IN HIS BUFFER. FLDA MCRTP8 /RECALL HIS NUMBER. JLT EMINUS /ITS MINUS. FIGURE FOR SIGN. FLDA ETOTAL /RECALL TOTAL NUMBER OF SPACES. / EBACK, FSUB EMC7 /DEDUCT FOR SPACES,.,E,ETC. FSUB EAFTER /SUBTRACT PRECISION DIGITS. JLT ESTARS /WONT FIT. GIVE STARS. JSA MCLBLK /PRODUCE NECESSARY NUMBER F BLANKS. FLDA MCRTP8 /RECALL MAGIC NUMBER JSA MCCPMS /GIVE MINUS SIGN IF PRESENT. JSA MCPDOT /PRINT THE DECIMAL POINT. FLDA MCRTP8 /RECALL THE MAGIC NUMBER. JSA MCDIGC /CONVERT IT,BABY. FLDA MCRTP7 /GET THE EXPONENT. FSTA MCRTP8 /SAVE FOR A SECOND. FLDA EAFTER /GET NUMBER OF PRECISION BITS. JSA MCPRTD /PRINT DIGITS. JSA MCPEXP /PRINT EXPONENT. JA ECON /AND RETURN NOW. / / / / / ETOTAL, 0.0 EAFTER, 0.0 EMC7, 7. / / / EMINUS, FLDA ETOTAL /ALLOW ONE PLACE FOR MINUS SIGN. FSUB FPPONE /CHOP OFF. JA EBACK /GO BACK INTO IT,BUBBY. / / / / ETYPE, JA . /ROUTINE TO SET UP CONVERSION. FSTA MCRTP6 /SAVE THE TOTAL NUMBER IN A TEMP. FCLA /NOW CLEAR OUT BOTH DIGIT COUNTS. FSTA ETOTAL FSTA EAFTER FLDA MCRTP1 /GET THE NUMBER AFTER. JSA ETLIT /CHECK IT. FSTA EAFTER /STORE BACK. FLDA MCRTP6 /RECALL TOTAL JSA ETLIT /CHECK IT. FSTA ETOTAL /SAVE IT, BUBBY. JA ETYPE /RETURN. / / / ETLIT, JA . /ENTRY POINT. JLT ETYPE /RETURN IF NOT POSITIVE. JAL ETYPE /RETURN IF TOO BIG. ALN 0 /FIX IT UP. FNORM JA ETLIT /AND RETURN NOW. / / / ESTARS, FLDA ETOTAL /GENERATE STARS WHEN REQUIRED. JSA MCSTAR /BY CALLING THE STAR ROUTINE. JA ECON /AND THEN RETURN. / / / / / / / / $ IFREF FCON / / / / / / / F C O N / - - - - / / / / / / / COPYRIGHT 1971 / DIGITAL EQUIPMENT CORPORATION / 146 MAIN STREET, / MAYNARD, MASSACHUSSETTS. / 01754 / / / / WRITTEN BY JACK BURNESS. / / / / / / / / / / / / / / / F TYPE FORMAT CONVERSION ROUTINE. / / / FCON, JA . /ENTRY. LDX -1,2 /SET FOR NO MINUS SIGN. FSTA MCRTP3 /STASH AWAY. JGE .+4 /CHECK IT NOW. LDX -2,2 /YEP. ACCOUT FOR THE MINUS SIGN. JSA MCDIGC /CONVERT THE AC NOW. FLDA FTOTAL /PUT TOTAL NUMBER PLACES IN BUFFER. JSA MCPUTC FLDA MCRTP7 /GET THE EXPONENT. JGE .+3 /ONLY INTERESTED IN PLACES FCLA /BEFORE THE DECIMAL POINT. FSTA MCRTP2 /AND SAVE IT FOR A SECOND. XTA 2 /RECALL MINUS SIGN OR NOT. FSUB MCRTP2 /SUBTRACT OFF PLACES BEFORE DECIMAL POINT. FSUB FAFTER /SUBTRACT OFF PLACES AFTER DECIMAL POINT. FADD FTOTAL /ADD IN TOTAL NUMBER OF PLACES ALLOWED. JLT FSTARS /WONT FIT. GIVE STARS. JSA MCLBLK /GIVE LEADING BLANKS NOW. ADDX 1,2 /INCREMENT INDEX 2. NOW -1 OR 0 XTA 2 /NOW MOVE SIGNED TO AC. JSA MCCPMS /GIVE A MINUS SIGN IF DESIRED. FLDA MCRTP2 /RECALL NUMBER OF DIGITS BEFORE POINT. JSA MCPRTD /PRINT THEM. JSA MCPDOT /GIVE A DECIMAL POINT NOW. FLDA MCRTP7 /RECALL REAL EXPONENT. JGE FCONOK /WE RE DOING ALRIGHT. ATX 2 /ITS NEGATIVE. SET UP TO PRINT LEADING ZEROS. FLDA FAFTER /DONT FORGET ABOUT TOTAL AFTER. FNEG ATX 0 /ALSO SAVE THIS IN A COUNTER. JEQ FCON /IF NON AFTER, EXIT. / FCONLP, FLDA MC260 /PICK UP A "0" JSA MCPUTC /PUT IT INTO THE BUFFER. JXN .+4,0+ /CHECK WHETHER END. JA FCON /IT IS. JXN FCONLP,2+ /STILL SKIPPING. XTA 0 /RECALL SPACES LEFT FNEG /MAKE INTO POSITITVE TYPE NUMBER. JA .+4 /AVOID BAD LOAD. / FCONOK, FLDA FAFTER /RECALL NUMBER AFTER DECIMAL POINT JSA MCPRTD /PRINT THEM. JA FCON /AND EXIT NOW. / / / / FTYPE, JA . /SET UP ENTRY. FSTA MCRTP6 /SAVE TOTAL FOR A SECOND. FCLA /RESET BOTH TO ZERO. FSTA FAFTER FSTA FTOTAL FLDA MCRTP1 /RECALL THE AFTER PART. JSA FTLIT /TEST IT FSTA FAFTER /AND STORE IT AWAY FLDA MCRTP6 /RECALL TOTAL JSA FTLIT FSTA FTOTAL JA FTYPE /AND RETURN. / / / FTLIT, JA . /LITTLE CHECKER. JLT FTYPE /IF NEGATIVE EXIT. JAL FTYPE /IF TOO BIG, EXIT. ALN 0 /FIX IT. FNORM /AND FLOAT IT. JA FTLIT /AND RETURN. / / / FSTARS, FLDA FTOTAL /GIVE STARS IF NECESSARY. JSA MCSTAR JA FCON /AND RETURN / / / FTOTAL, 0.0 FAFTER, 0.0 / / / / / $ IFREF MCDIGC / / / / / C O N V E R S I O N - P R O T O T Y P E / - - - - - - - - - - - - - - - - - - - - / / / / / / / / / COPYRIGHT 1971 / DIGITAL EQUIPMENT CORPORATION / 146 MAIN STREET, / MAYNARD, MASSACHUSSETTS. / 01754 / / / / WRITTEN BY JACK BURNESS. / / / / / / / / / / / / / / / THIS ROUTINE IS CALLED BY A JA WITH THE NUMBER IN THE FAC. / TO RETREIVE ACTUAL DIGITS THE ROUTINE MCGETD IS CALLED. / / / / MCDIGC, JA . /RETURN GOES HERE. JGE .+3 /TAKE THE ABSOLUTE VALUE BY NEGATING FNEG /FAC IF ITS NEGATIVE. FSTA MCRTP6 /STORE AWAY IN MY WORKING REGISTER. FCLA /CLEAR THE AC SO WE CAN RESET THE EXPONENT COUNTER. FSTA MCRTP7 /ZAP OUT THE EXPONENT. LDX -12,1 /SET UP INDEX COUNT FOR THE NON-EXACT CASE. FLDA MCRTP6 /REGET THE MAGIC NUMBER OF THE CALLER. JAL MCTOOB /ITS TOO BIG TO FIX.JUST DO BRUTE CONVERSION. ALN 0 /FIX THE AC. FNORM /THEN FLOAT IT AGAIN. FSUB MCRTP6 /IS IT AN EXACT INTEGER. JEQ MCEXAC /YES. DO THE EXACT CONVERSION. FLDA MCRTP6 /REGET HIS NUMBER. FSUB MC1 /IS IT GREATER THEN 1.? JGE MCTOOB /YEP. GOT TO WORK OUR WAY DOWN / / / / / / THIS ROUTINE CONVERTS THE NUMBER IF ITS LESS THEN 1. / / / MC1LOP, FLDA MCRTP6 /REGET THE NUMBER. FSUB MC2TAB+36-30000,1 /COMPARE AGAINST GIVEN EXPONENT. JGE MCGRTO /ITS GREATER THEN EXPONENT. DONT FOOL AROUND. FLDA MC1TAB+36-30000,1 /UPDATE THE NUMBER WE RE WORKING ON. FMULM MCRTP6 /BY DOING A MULT TO MEMORY. FLDA MCRTP7 /AND UPDATE THE EXPONENT ALSO. FSUB MC3TAB+36-30000,1 /SUBTRACT OFF CORRECT NUMBER FSTA MCRTP7 /AND STORE AWAY. MCGRTO, JXN MC1LOP,1+ /AND LOOP TO TRY NEXT EXPONENT [COOL, HUH!] JA MCDUN /WE ARE DONE NOW. CLEAN UP A BIT. / / / / / / / THIS ROUTINE PROCESSES A NUMBER IF ITS / GREATER THEN 1. / / MCTOOB, FLDA MCRTP6 /REGET THE NUMBER FSUB MC1TAB+36-30000,1 /TEST AGAINST EXPONENT. JLT MCLESO /ITS LESS THEN EXPONENT, SO AVOID DOING ANYTHING. FLDA MCRTP6 /NOW FIX UP THE NUMBER. FDIV MC1TAB+36-30000,1 /BY DIVIDING BY THE CORRECT TABLE ENTRY. FSTA MCRTP6 /STORE AWAY NOW. FLDA MC3TAB+36-30000,1 /ALSO UPDATE THE EXPONENT COUNT. FADDM MCRTP7 /ZAP BACK INTO MEMORY. MCLESO, JXN MCTOOB,1+ /AND LOOP AROUND TILL DUNE. FLDA MCRTP6 /WE NOW MUST DO ONE MORE CORRECTION.TO GET IT LESS THEN 1. FDIV MC10 FSTA MCRTP6 /AND NOW STASH BACK. FLDA FPPONE /AND NOW CORRECT THE EXPONENT. FADDM MCRTP7 /FOR THE EXTRA DIVIDE. / / / MCDUN, FLDA MC1PRT /SET UP POINTER FOR DIGIT PRODUCER TO USE. FSTA MCDO1 FLDA MCRTP6 /REGET THE CONVERTED NUMBER STARTD /GO INTO DOUBLE FOR A SECOND. XTA 0 /JAM THE LOW 12 BITS INTO AN INDEX REGISTER. STARTF /GET BACK INTO SUPER MODE. ATX 0 /NOW GET THE INDEX REGISTER AS A 12 BIT QUATITY. JEQ MCDIGC /IF ITS ZERO DON T BOTHER FUDGING. FLDA MCFUD /CORRECT WITH A FUDGE FACTOR. FADDM MCRTP6 /AND STORE BACK. JA MCDIGC /AND EXIT FOR NOW. / MC1PRT=.-1 /REMEMBER AC IS A THREE WORD QUANTITY. JA MCRES1 / / / / / / / / / THIS ROUTINE CONVERTS NUMBERS IF THEY ARE AN EXACT INTEGER. / IT MAY BE REMOVED AT ANY TIME. / / MCEXAC, FLDA MC2PRT /RESET THE SWITCH FOR THE EXACT CONVERSION. FSTA MCDO1 /AND STORE AWAY. FLDA MCRTP6 /RECALL THE NUMBER. JEQ MCEXEX /IF ZERO EXIT IMMEDIATELY. LDX -10,1 /SET FOR A COUNT OF 7 (MOST NUMBER OF DIGS POSS.) MCELOP, FLDA MCRTP6 /GET THE NUMBER AGAIN. FDIV MC4TAB+30-30000,1 /TEST THE RANGES. ALN 0 /FIX IT. FNORM /THEN NORMALIZE IT. JNE MCFOUN /ITS NON-ZERO. WE VE GOT THE CORRECT EXPONENT RANGE. JXN MCELOP,1+ /KEEP LOOKING FOR(THIS LOOP CAN NEVER FALL THROUGH). / MCFOUN, XTA 1 /GET THE INDEX IN THE AC. FNEG /PLAY WITH IT. FSUB FPPONE /ADD IN A FUDGE FACTOR. FSTA MCRTP7 /AND SAVE IT AS OUR EXPONENT. MCEXEX, JA MCDIGC /AND EXIT FROM THS ROUTINE. / / / / / MC2PRT=.-1 /REMEMBER THRE WORD ARITHMETIC. / JA MCRES2 /SECOND CONVERTER. / / / / / / / / / THIS ROUTINE ACTUALLY GETS A DIGIT AND MAKES IT A NUMBER. / / / MCGET4, FADD MC260 /EXIT IS TO HERE, SO IT FALLS THRUGH TO RETURN JUMP. / MCGETD, JA . /ENTRY. / MCDO1=.-1 /THIS CORRECTS FOR THE THREE WORD ARITHMETIC. JA . /THIS INSTRUCTION IS OVERLAYED. / / / / / MCRES1, FLDA MCRTP6 /GET MY NUMBER. FMUL MC10 /BOP UP BY 10 TO GET NEXT DECIMAL DIGIT. FSTA MCRTP6 /AND STORE IT AWAY NOW. ALN 0 /FIX THE AC NOW. FNORM /AND LEAVE IT NORMALIZED. FNEG /NEGATE THE AC. FADDM MCRTP6 /THEN UPDATE THE NUMBER. FNEG /AND FINALLY RESTORE IT TO ITS PROPER SELF. JA MCGET4 /AND RETURN WITH IT IN THE AC. / / / / / / / / / MCRES2, FLDA MCRTP7 /GET THE EXPONENT. JEQ MCGET4 /IF ITS 0 RETURN NOW. FSUB MC1 /SUBTRACT ONE FROM IT. FSTA MCRTP7 /AND SAVE FOR NEXT TIME AROUND. FLDA MCRTP6 /RECALL MY NUMBER. FDIV MC4TAB+25-30000,1+ /CHOP DOWN ANOTHER NOTCH. ATX 0 /SAVE FOR A SECOND. XTA 0 /AND RECALL IT INTEGERIZED. FNEG /AND REMOVE IT FROM MCMYNU. FMUL MC4TAB+25-30000,1 /BY MULTIPLYING IT BY TO CORRECT POWER. FADDM MCRTP6 /SO THAT THE CHOPPING PROCESS CONTINUES. XTA 0 /FINALLY RECALL THE CORRECT DIGIT. JA MCGET4 /AND RETURN / / / / / / / / / / / / / THIS ROUTINE INSERTS ONE CHARACTER INTO THE BUFFER (AS POINTED TO BY BASE 0) / / / MCPUTC, JA . /STANDARD CALL. FSTA MCRTP5 /STORE AC FOR A SECOND. FLDA I MCRTPB /GET THREE CHARACTERS NOW. FSTA MCBLK /STORE IN THE MIDDLE OF A LITTLE BLOCK HERE. FLDA MCRTP5 /RECALL ARGUMENT ALN 0 /FIX IT. FSTA MCBLK-2 /PLACE IT RIGHT AHEAD OF PREVIOUS THREE CHARACTERS. FLDA MCBLK /SO ONE CHARACTER OVERLAPS. FSTA I MCRTPB /FINALLY STORE BACK THREE CHARACTERS (ONE WAS CORRECTED). STARTD /NOW WE MUST UPDATE THE POINTER. FLDA MCMAGIC /ADD IN THE MAGIC NUMBER. FADDM MCRTPB /UPDATE POINTER STARTF /RETURN TO SUPER MODE. JA MCPUTC /AND EXIT. / / 0 /FIVE WORD BLOCK FOR CHACTER SCHUFFLING 0 MCBLK, 0 0 0 / / / / / / / / / / / / / / / / MCSTAR, JA . /THIS ROUTINE PRINTS "N" PUTS ASTERISKS INTO THE BUFFER. JLE MCSTAR /RETURN IF ZERO OR NEGATIVE. FNEG ATX 1 /PLACE NEGATED COUNT INTO AN INDEX REGISTER. MCSLOP, FLDA MC252 /A STAR. JSA MCPUTC /OUT IT GOES. JXN MCSLOP,1+ JA MCSTAR /RETURN NOW. / / / / / / / / MCLBLK, JA . /THIS ROUTINE PRINTS LEADING BLANKS. JLE MCLBLK /IF ZERO RETURN NOW. FNEG /ELSE NEGATE THE AC. ATX 0 /AND PLACE NUMBER OF BLANKS IN INDEX. MCBBLP, FLDA MC240 /GET A BLANK IN THE AC. JSA MCPUTC /AND STORE IT AWAY. JXN MCBBLP,0+ /LOOP UNITL DONE. JA MCLBLK /THEN RETURN. / / / / / / / MCPEXP, JA . /THIS ROUTINE PRINTS THE EXPONENT. FLDA MC1 /FIRST PRINT ONE SPACE. JSA MCLBLK /BY CALLING ONE OF OUR ROUTINES. FLDA MC305 /THEN PRINT THE E. JSA MCPUTC /BY CALLING A LOW LEVEL ROUTINE. FLDA MCRTP8 /RECALL THE EXPONENT NOW. JGE MCGPLS /GIVE A PLUS SIGN JSA MCCPMS /GIVE A MINUS SIGN. FLDA MCRTP8 FNEG JA MCCPL2 /BYPASS PLUS SIGN. MCGPLS, FLDA MC253 /THE PLUS SIGN. JSA MCPUTC /OUTPUT IT NOW. FLDA MCRTP8 /RECALL THE EXPONENT NOW. MCCPL2, FADD MC4F /ADD IN 1000 TO FUDGE UP THE EXPONENT. JSA MCDIGC /CONVERT IT. JSA MCGETD /IGNORE THE 1000 DIGIT. FLDA MC3 /NOW PRINT THE LAST THREE DIGITS. JSA MCPRTD /BY CALLING OUR LITTLE ROUTINE. JA MCPEXP /AND NOW RETURN TO THE CALLER. / / / / MCPDOT, JA . /ENTRY. FLDA MC256 /GET THE DOT. JSA MCPUTC /AND PRINT IT JA MCPDOT /AND RETURN NOW. / / / / MCCPMS, JA . /THIS ROUTINE CONDITIONALLY PRINTS THE MINUS SIGN. JGE MCCPMS /IF NOT NEGATIVE RETURN FLDA MC255 /ELSE PRINT THE MINUS SIGN. JSA MCPUTC /AND PRINT IT. JA MCCPMS /AND RETURN NOW. / / / / / MCPRTD, JA . /THIS ROUTINE CONVERTS XXX NUMBER OF DIGITS. FNEG /NEGATE THE NUMBER FOR THE INDEX ATX 2 /SAVE IN AN INDEX. JGE MCPRTD /IF NO PLACES THEN EXIT. MCPRTL, JSA MCGETD /GET A DIGIT NOW. JSA MCPUTC /PRINT IT. JXN MCPRTL,2+ /LOOP UNTIL ALL DONE. JA MCPRTD /THEN RETURN NOW. / / / / / / / / / / / / / / / / / / / / TABLES FOR THE NUMERIC CONVERSIONS. / / / / MC1TAB, 3245 3430 6320 /1.E512 THE FPP ASSEMBLER CAN T DO IT. / 1523 2523 7566 /NOR THIS ONE EITHER. / 0652 2235 6444 /1.E128 NOT YET, BUT WE RE GETTING THERE. / 0325 3023 6020 /ITS ALRIGHT NOW. / 1.E32 1.E16 1.E8 1.E4 1.E2 MC10, 1.E1 / / MC2TAB, 4534 / 1.E-512 2202 2367 / 6256 / 1.E-256 3001 4242 / 7127 / 1.E-128 3356 4043 / 7454 / 1.E-64 2503 7765 / 7626 / 1.E-32 3175 4217 / 7713 / 1.E-16 3464 5312 / 7746 / 1.E-8 2536 3074 / 7763 / 1.E-4 3215 5614 / 1.E-2 1.E-1 / MC3TAB, 512. 256. 128. 64. 32. 16. 8. 4. 2. MC1, 1. / MCMAGIC=MC1-1 / / MC4TAB, 1000000. 100000. 10000. MC4F, 1000. 100. 10. 1. /DIVIDING BY 1. IS RIDICULOUS, /BUT IT ELIMINATES A SPECIAL CASE CHECK. / / / / / / / / / / / / / / MCFUD, 7750 /MAGIC FORMAT FUDGE CONSTANT. 2000 0000 MC260, 176. /THESE ARE REALLY OCTAL NUMBERS. MC252, 170. MC240, 160. MC305, 197. MC253, 171. MC3, 3. MC256, 174. MC255, 173. / / / / / / / / / $ IFREF ALOG10 / / / / / / / / / A L O G 1 0 / - - - - - - / / / / / / COPYRIGHT 1971 / DIGITAL EQUIPMENT CORPORATION / 146 MAIN STREET, / MAYNARD, MASSACHUSSETTS. / 01754 / / / / WRITTEN BY JACK BURNESS. / / / / / / / / / / / / / / ALOG10, JA . /THIS ROUTINE WILL TAKE THE LOG BASE 10. JSA ALOG /OF THE ARGUMENT. FMUL ALOG1C /CORRECT FOR THE LOG BASE E. JA ALOG10 /AND RETURN. / / / ALOG1C, 7777 /FUDGE CONSTANT. 3362 6754 / / / / $ IFREF SQRT / / / / / / S Q R T / - - - - / / / / / / / COPYRIGHT 1971 / DIGITAL EQUIPMENT CORPORATION / 146 MAIN STREET, / MAYNARD, MASSACHUSSETTS. / 01754 / / / / WRITTEN BY JACK BURNESS. / / / / / / / / / / / / / / / THIS IS THE SQUARE ROOT PROGRAM. / / THE ARGUMENT IS WRITTEN IN THE FORM: / X=F*(2**2B) WHERE 00 FLDA FPPONE /NEGITE. INVERT IT. FDIV MCRTP1 /BY DIVIDING INTO ONE. FSTA MCRTP1 LDX 0,0 /RESET SIGN TO NEGATIVE. JA .+3 /AVOID USELESS LOAD INSTRUCTION. / ALOGST, FLDA MCRTP1 /RECALL NUMBER. FDIV FPPTWO /CUT IN HALF. FSTA ALOGTM /PREPARE FOR EXPONENT DIDDLE. FLDA ALOGMG /SET THE EXPONENT OF THE EXPONENT TO 13. FSTA ALOGTM-3 /SO THAT NORMALIZE WILL DO JOB. FSTA ALOGTM+1 /AND ALSO ZERO OUT LOW ORDER POART OF EX. MANT. FLDA ALOGTM-1 /RECALL THE NUMBER FNORM /NORMALIZE IT. FMUL ALOGE2 /NOW MULITPLY EXPONENT BY LOG E 2 FSTA MCRTP2 /AND SAVE IT FOR A SECOND. FLDA MCRTP1 /RECALL THE NUMBER AGAIN. FSTA ALOGTM /STORE IN THE TEMPORARY WORKER. FLDA FPPPI2-2 /RECALL WORD WITH LOW ORDER ONE. FSTA ALOGTM-2 /STORE AWAY. FLDA ALOGTM /RECALL NUMBER WITH AN EXPONENT OF 1 FSUB FPPONE /SUBTRACT AWAY. FSTA MCRTP1 /AND STORE FMUL ALOGL8 /MULTIPLY BY THE CONSTANT. FADD ALOGL7 /ADD IN FMUL MCRTP1 /MULT. FADD ALOGL6 /AND SO ON DOWN THE LINE. FMUL MCRTP1 FADD ALOGL5 FMUL MCRTP1 FADD ALOGL4 FMUL MCRTP1 FADD ALOGL3 FMUL MCRTP1 FADD ALOGL2 FMUL MCRTP1 FADD ALOGL1 FMUL MCRTP1 FADD MCRTP2 /CORRECT NOW.ADD IN EXPONENT. JXN ALOG,0 /EXIT IF SIGN IS OK. FNEG /ELSE NEGATE IT. / ALOG, JA . /ENTRY AND EXIT. JGT ALOGOK /IF GREATER THEN 0, START DOING IT. JEQ ALOG0 /IF =0 THEN ERROR TRAP7 6 /LESS THEN 0. JA ALOG /RETURN. / ALOG0, TRAP7 7 /ZERO TRAP. JA ALOG /RETURN NOW. / / / / / / / / / / / / 0 /WORKING SPACE FOR EXPONENT DIDDLE. 0 0 ALOGTM, 0 0 0 0 / / / ALOGMG, 0 0 13 /CORRECT EXPONENT DIDDLER. / / / / ALOGL1, 0 3777 7742 / ALOGE2, 0 2613 4414 / ALOGL2, 7777 4000 4100 / ALOGL3, 7777 2517 0310 / ALOGL4, 7776 4113 7211 / ALOGL5, 7776 2535 3301 / ALOGL6, 7775 4746 0771 / ALOGL7, 7774 2236 4304 / ALOGL8, 7771 4544 1735 / / / / / / / / / $ IFREF SIN / / / / / / S I N / - - - / / / / / / / / / COPYRIGHT 1971 / DIGITAL EQUIPMENT CORPORATION / 146 MAIN STREET, / MAYNARD, MASSACHUSSETTS. / 01754 / / / / WRITTEN BY JACK BURNESS. / / / / / / / / / / / / / / / SINABT, FLDA MCRTP2 /RECALL NUMBER IF TOO SMALE JXN SIN,0 /EXIT IF SAME SIGN. FNEG /ELSE NEGATE IT. / / / SIN, JA . /CALCULATES THE SIGN OF FAC IN RADIANS. LDX -1,0 /SET SIGN TO POSITIVE. JGT SINMOD /IF POSITIVE BYPASS FUDGE. JEQ SIN /IF ZERO EXIT. FNEG /NEGATIVE. NEGATE AC. SIN(-X)=-SIN(X) LDX 0,0 /SET SIGN TO MINUS. SINMOD, JAL SINER /IF SIGN CAN T INT, THEN ERROR. FDIV FPP2PI /REDUCE TO BELOW TWO PI. FSTA MCRTP1 /SAVE IN A TEMP. ALN 0 FNORM /INTERGIZE IT. FNEG FADD MCRTP1 /RECALL NUMBER. AC NOW <0 FMUL FPP2PI /NOW MULTIPLY BACK. FSTA MCRTP2 /AND SAVE AWAY. FSUB FPPPI /SUBTRACT OFF PI. JLT SINP /LESS THEN PI. FSTA MCRTP2 /RESTORE AS 2. XTA 0 /INVERT THE SIGN. FNEG FSUB FPPONE /SIN(X-PI)=-SIN(X) ATX 0 /AND PUT BACK. / SINP, FLDA MCRTP2 /RECALL MAGIC GOODY. FSUB FPPPI2 /TEST TO SEE IF X