X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Fos8%2Fv3d%2Fsources%2Fsystem%2Fdectapes%2Fdectape1%2FFLOAT.SB;fp=sw%2Fos8%2Fv3d%2Fsources%2Fsystem%2Fdectapes%2Fdectape1%2FFLOAT.SB;h=81078aa81eb253b1e1b17add5c61c91dc10a9e76;hb=7af5ad59491ddf2066641aef1e0025a337c0f247;hp=0000000000000000000000000000000000000000;hpb=919757fd611e482003ce51f366f6783cab73dea3;p=pdp8.git diff --git a/sw/os8/v3d/sources/system/dectapes/dectape1/FLOAT.SB b/sw/os8/v3d/sources/system/dectapes/dectape1/FLOAT.SB new file mode 100644 index 0000000..81078aa --- /dev/null +++ b/sw/os8/v3d/sources/system/dectapes/dectape1/FLOAT.SB @@ -0,0 +1,746 @@ +/ FLOATING POINT MATH PACKAGE +/ +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 1974,1977 BY DIGITAL EQUIPMENT CORPORATION +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ +/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE +/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT +/CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY +/FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL. +/ +/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER +/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED +/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH +/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. +/ +/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE +/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY +/DIGITAL. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + / VERSION 5A +/ APRIL 28, 1977 +/ VERSION NUMBER IS AVAILABLE AT ENTRY POINTS +/ ENTRIES +/ + ENTRY FAD + ENTRY FSB + ENTRY FMP + ENTRY FDV + ENTRY STO + ENTRY FLOT + ENTRY FLOAT + ENTRY FIX + ENTRY IFIX + ENTRY IFAD + ENTRY ISTO + ENTRY ABS + ENTRY CHS + +/THE FOLLOWING DEFINITIONS ENABLE LIBRARY OPTIMIZATIONS +/WHERE CRITICAL TIMING CONSIDERATIONS EXIST. +/THEY SHOULD BE USED WITH EXTREME CAUTION, AND MUST +/REFERENCE CURRENT PAGE AND PAGE ZERO SYMBOLS ONLY. + +OPDEF TADI 1400 +OPDEF DCAI 3400 +OPDEF JMSI 4400 +OPDEF JMPI 5400 +SKPDF JMSKP 4000 +/ +/ +ABSYM HAC 20 +ABSYM MAC 21 +ABSYM LAC 22 +ABSYM SRH 23 +ABSYM SRM 24 +ABSYM SRL 25 +ABSYM ACS 26 +ABSYM ACX 27 +ABSYM SRS 30 +ABSYM SRX 31 +ABSYM MQH 30 +ABSYM MQM 31 +ABSYM MQL 32 + +// ADDITION AND SUBTRACTION ROUTINE +// + + LAP /LEAVE AUTO PAGING + +ADSRAD, ADSRAC /SOME INDIRECTS TO SAVE CORE... +ARSAB, ARS +GTSPLA, GTSPLT +NORMAD, NORMAC +COMAD, COM + +FSB, BLOCK 1 + 5 /FLOATING POINT SUBTRACT + TAD FSB / CALL 1,FSB + DCA FAD / ARG + TAD FSB# + DCA FAD# + CLA CLL CML RAR + JMP ED1 +/ +ER1, FAD +FAD, BLOCK 1 + 5 /FLOATING POINT ADD SUBROUTINE +ED1, DCA FSB / CALL 1,FAD + TAD FAD / ARG + DCA FAD1 +FAD1, NOP /CDF TO PICK UP ARGUMENT + TADI FAD# + INC FAD# + DCA 7 + CLA CMA + TADI FAD# + INC FAD# + DCA 10 +FADENT, TAD ER1 + DCA ER0 + TAD ACH /EXAMINE THE FLOATING AC + SNA CLA + JMP FADLD /IT'S ZERO, DO A LOAD... + JMSI GTSPLA + JMP FADEND + TAD SRS + TAD FSB + DCA SRS + TAD ACX + SNA + JMP SHFAC + CIA + TAD SRX + SMA + JMP SHFAC + DCA FSB +SHFSR, TAD SRH + CLL RAR + DCA SRH + TAD SRM + RAR + DCA SRM + TAD SRL + RAR + DCA SRL + ISZ FSB + JMP SHFSR + JMP JD1 +/ +SHFAC, CMA + DCA FSB + TAD SRX + DCA ACX + JMP ED3A +ED3, JMSI ARSAB +ED3A, ISZ FSB + JMP ED3 +/ +JD1, TAD ACS + SMA CLA + JMP ED4 + CLA CLL CMA RTL / GENERATE -3 + JMSI COMAD +ED4, TAD SRS + SPA CLA + JMSI COMAD + JMSI ADSRAD + TAD HAC + SMA CLA + JMP ED5 + CLA CLL CMA RTL + JMSI COMAD + CLA CLL CML RAR +ED5, DCA ACS + DCA RSW +FADEND, JMSI NORMAD + JMP FADEX + + +FADLD, TAD 7 /FLOATING LOAD WHEN AC=0 + DCA FADSB# + JMS FADSB + SZA /CHECK FOR 0.-0. DON'T GIVE -0. + TAD FSB + AND ABSSW + DCA ACH + JMS FADSB + DCA ACM + JMS FADSB + DCA ACL +FADEX, CLA CMA + DCA ABSSW + DCA FSB /FOR IFAD AFTER SUBTRACT + CLA STL RTL /=0002 + TAD FAD /HIGH SPEED RETURN + DCA FAD3 +FAD3, NOP + JMPI FAD# + +ABSSW, 7777 /ABSOLUTE VALUE SWITCH + +FADSB, 0 /TIME SAVING SUBROUTINE + NOP /CHANGED TO CDF + TADI 10 + JMPI FADSB + +/ FLOATING POINT ABSOLUTE VALUE FUNCTION + +ABS, BLOCK 1 + 5 / CALL 1,ABS + TAD ABS / ARG + DCA FAD + TAD ABS# + DCA FAD# + CLL STA RAR /=3777 + DCA ABSSW + JMP ED1 /GO INTO ADD ROUTINE... + + PAGE + + +/ ROUTINE TO GET OPERAND INTO SR, SEPARATE SIGNS AND +/ EXPONENTS OF AC AND SR, AND MOVE GLOBAL AC TO LOCAL AC. +/ + +GTSPLT, 0 + TAD 7 + DCA GTS1 +GTS1, NOP + TADI 10 /PICK UP HIGH ORDER WORD + JMS SPLIT /MUST NOT CHANGE DATA FIELD**** + DCA SRH + TAD ACX + SZA + INC GTSPLT + DCA SRX + TAD ACS + DCA SRS + TADI 10 /PICK UP WORD 2 + DCA SRM + TADI 10 /PICK UP WORD 3 + DCA SRL + TAD ACH + JMS SPLIT /EXPAND THE FLOATING AC... + DCA HAC + DCA RSW +GTS2, TAD ACM /NEEDS LABEL TO FORCE CDF! + DCA MAC + TAD ACL + DCA LAC + JMPI GTSPLT +/ + +SPLIT, 0 /BREAK UP SIGN, EXPON, AND HI-ORD BITS + DCA TMP /ROUTINE MUST NOT CHANGE DATA FIELD**** + TAD TMP + RAR + RTR + AND (377 + DCA ACX + CLA CLL CML RAR / = 4000 + AND TMP + DCA ACS + TAD TMP + AND (7 + JMPI SPLIT +TMP, 0 +/ +/ + +ALS, 0 /LOCAL AC SHIFT LEFT SUBROUTINE + TAD LAC + CLL RAL + DCA LAC + TAD MAC + RAL + DCA MAC + TAD HAC + RAL + DCA HAC + JMPI ALS +/ +/ ADD SR TO AC +/ + +ADSRAC, 0 /ADD LOCAL SR TO LOCAL AC + CLL + TAD LAC + TAD SRL + DCA LAC + CLA RAL + TAD MAC + TAD SRM + DCA MAC + CLA RAL + TAD HAC + TAD SRH + DCA HAC + JMPI ADSRAC +/ +/ ROUTINE TO NORMALIZE AND RECOMBINE ACCUMULATOR, +/ AND PLACE LOCAL ACC. IN GLOBAL ACC. +/ +ARSAD, ARS /SOME CORE SAVING INDIRECTS +ERRAD, ERR +RSW, 0 /ROUNDING BIT + +NORMAC, 0 /NORMALIZE AND PACKING SUBROUTINE +ED6, TAD HAC + TAD (7770 + SPA CLA + JMP RUND + JMSI ARSAD + ISZ ACX + JMP ED6 +/ +/ ROUNDOFF ROUTINE +/ +RUND, TAD RSW + SNA CLA + JMP LEFTST + ISZ LAC + JMP LEFTST + ISZ MAC + JMP LEFTST + ISZ HAC + DCA RSW + JMP ED6 +/ +LEFTST, TAD ACX + SNA SPA + JMP ZEROUT + DCA ACX + CLA CLL CMA RTL / = -3 + TAD HAC + SMA SZA CLA + JMP COMBIN + JMS ALS + CLA CMA + JMP LEFTST +/ +COMBIN, TAD ACX + CLL RAL + RTL + SPA + JMPI ERRAD + TAD HAC + TAD ACS +ED7, DCA ACH + TAD MAC + DCA ACM + TAD LAC + DCA ACL + JMPI NORMAC + +ZEROUT, CLA + DCA LAC + DCA MAC + JMP ED7 + + PAGE + / +/ INDIRECT STORE +/ + +ISTO, BLOCK 1 + 5 /FLOATING POINT INDIRECT STORE + TAD ISTO / CALL 1,ISTO + DCA IST1 / ARG <2WORD ADDRESS> +IST1, NOP + TADI ISTO# + INC ISTO# + DCA IST2 + TADI ISTO# + DCA 7 + TAD ISTO + DCA STO + TAD ISTO# + DCA STO# +IST2, NOP + TADI 7 + INC 7 + DCA ISTO + CLA CMA + TADI 7 + DCA 10 + TAD ISTO + DCA STOSB# + JMP STOX +/ +/ +/ ROUTINE TO STORE CONTENTS OF FL. PT. ACC AND CLEAR IT +/ +STO, BLOCK 1 + 5 / CALL 1,STO + TAD STO / ARG + DCA STO1 +STO1, NOP /REPLACED BY CDF + TADI STO# + INC STO# + DCA STOSB# + CLA CMA + TADI STO# + DCA 10 +STOX, TAD ACH + JMS STOSB + DCA ACH + TAD ACM + JMS STOSB + DCA ACM + TAD ACL + JMS STOSB + DCA ACL + INC STO# + CLA STL RTL /=0002 + TAD STO /SOME TIME SAVING CODE... + DCA STO3 +STO3, NOP /REPLACED BY CIF CDF + JMPI STO# + +STOSB, 0 /TIME SAVING SUBROUTINE + NOP /CHANGED TO A CDF DESTINATION + DCAI 10 + JMPI STOSB +/ +/ FLOATING POINT TO FIXED POINT CONVERSION +/ +FXER, 4611 + 3040 /"FIX" ERROR +FIX, BLOCK 1 + 5 +FIXX, TAD ACH + JMS SPLIT + DCA HAC + TAD ACM + DCA MAC + TAD ACX + TAD (-214 + SMA + JMP FIXERR + TAD (-3 + DCA SRM +RSH, JMS ARS + ISZ SRM + JMP RSH + TAD ACS + RAL + TAD MAC + SZL + CIA +FIXRTN, DCA ACS + DCA ACH + DCA ACM + DCA ACL + TAD ACS + RETRN FIX +/ +IFIX, BLOCK 1 + 5 + TAD IFIX + DCA ADDR + TAD IFIX# + DCA ADDR# + CALL 1,IFAD +ADDR, ARG 0 + TAD IFIX + DCA FIX + CLA CLL CML RTL / = 2 + TAD IFIX# + DCA FIX# + JMP FIXX + +FIXERR, CALL 1,ERROR + ARG FXER + CLA CLL CMA RAR + JMP FIXRTN /RETURN WITH 2047 IN FIXED AC + + PAGE + +/ +/ FLOATING POINT MULTIPLICATION +/ + +ADSRAE, ADSRAC /SOME TIME SAVING INDIRECTS +ARSAE, ARS +COMAF, COM +GTSPLB, GTSPLT +NORMAG, NORMAC +ER4, FDV +ER01, ER0 +ER3, FMP +FMP, BLOCK 1 + 5 + TAD ER3 + DCAI ER01 + TAD FMP + DCA FMP1 +FMP1, NOP /CDF TO FIELD OF CALLING PROGRAM + TADI FMP# + INC FMP# + DCA 7 + CLA CMA + TADI FMP# + INC FMP# + DCA 10 + JMSI GTSPLB /WARNING ***THIS INSTRUCTION SKIPS*** + JMP MULZRO + TAD ACS + TAD SRS + DCA ACS + TAD ACX + TAD SRX +MULZRO, TAD (-201 + DCA ACX + TAD HAC + DCA MQH + TAD MAC + DCA MQM + TAD LAC + DCA MQL + DCA HAC + TAD (-33 + DCA FMP1 +/ +MULT, JMSI ARSAE + TAD MQH + RAR + DCA MQH + TAD MQM + RAR + DCA MQM + TAD MQL + RAR + DCA MQL + SZL + JMSI ADSRAE + ISZ FMP1 + JMP MULT + JMSI NORMAG + RETRN FMP +/ +/ +/ FLOATING POINT DIVISION +/ +DIVZ, 4411 + 2632 +FDV, BLOCK 1 + 5 + TAD ER4 + DCAI ER01 + TAD FDV + DCA FDV0 +FDV0, NOP /CDF TO FIELD OF CALLING PROGRAM + TADI FDV# + INC FDV# + DCA 7 + CLA CMA + TADI FDV# + INC FDV# + DCA 10 + JMSI GTSPLB + JMP DIVERR + TAD ACS + TAD SRS + DCA ACS + TAD SRX + CIA + TAD ACX + TAD (177 + DCA ACX + DCA MQL + TAD (-35 + DCA FDV0 +DVID, CLA CLL CML RAR / = 4000 + AND SRH + TAD HAC + SPA CLA + JMP FDV1 + JMSI COMAF +FDV1, JMSI ADSRAE + TAD MQL + RAL + DCA MQL + TAD MQM + RAL + DCA MQM + TAD MQH + RAL + DCA MQH + JMS ALS + ISZ FDV0 + JMP DVID +/ + TAD MQH + DCA HAC + TAD MQM + DCA MAC + TAD MQL + DCA LAC + JMSI NORMAG +FDVRET, RETRN FDV + +DIVERR, CALL 1,ERROR + ARG DIVZ + CLA CLL CMA RAR + DCA ACH + JMP FDVRET + + PAGE + / +/ ROUTINE TO GET TWO'S COMPLEMENT OF TRIPLE WORD NUMBER +/ IF NO ADDRESS IN AC UPON ENTRY, SR IS ASSUMED. +/ +COM, 0 + TAD (25 /ADDRESS OF SRL + DCA PTR2 + CLA CLL CMA RTL / = -3 + DCA CTR2 +ED8, TAD I PTR2 + CMA + SZL + CLL IAC + DCA I PTR2 + CLA CMA CML + TAD PTR2 + DCA PTR2 + ISZ CTR2 + JMP ED8 + JMP I COM +PTR2, 0 +CTR2, 0 +/ +/ CONVERT FIXED POINT TO FLOATING POINT +/ + CPAGE 14 + +FLOAT, BLOCK 1 + 5 /FLOAT FUNCTION + TAD FLOAT / CALL 1,FLOAT + DCA FLO1 / ARG +FLO1, NOP + TADI FLOAT# + INC FLOAT# + DCA FLO2 + TADI FLOAT# + INC FLOAT# + DCA 7 + TAD FLOAT + DCA FLOT + TAD FLOAT# + DCA FLOT# +FLO2, NOP /CDF TO FIELD OF ARGUMENT + TADI 7 + JMP FLOTX +/ +/ INTEGER TO FLOATING POINT CONVERSION +/ +FLOT, BLOCK 1 + 5 / CALL 0,FLOT +FLOTX, CLL /ASSUMES INTEGER VARIABLE IN AC + SPA + CIA CML + DCA MAC + DCA HAC + DCA LAC + RAR + DCA ACS + TAD (217 + DCA ACX + DCA RSW + JMS NORMAC + RETRN FLOT + +/ INDIRECT FLOATING POINT ADD + + CPAGE 36 +IFAD, BLOCK 1 + 5 / CALL 1,IFAD + TAD IFAD / ARG <2WORD ADDRESS> + DCA IFA1 +IFA1, NOP + TADI IFAD# + INC IFAD# + DCA IFA2 + CLA CMA + TADI IFAD# + INC IFAD# + DCA 10 +IFA2, NOP + TADI 10 + DCA 7 + CLA CMA + TADI 10 + DCA 10 + TAD IFAD + DCA FAD + TAD IFAD# + DCA FAD# + JMP FADENT + + +ARS, 0 /LOCAL AC SHIFT RIGHT SUBROUTINE + TAD HAC + CLL RAR + DCA HAC + TAD MAC + RAR + DCA MAC + TAD LAC + RAR + DCA LAC + CLA RAL + DCA RSW + JMPI ARS + +FPER, 5726 + 0614 /"OVFL" ERROR +CHS, BLOCK 1 + 5 /FLOATING POINT NEGATION + TAD ACH / CALL 0,CHS + SZA + TAD (4000 +CHSRET, DCA ACH + RETRN CHS +/ +/ ERROR ROUTINES +/ +ER0, 0 /CONTAINS ADDRESS OF CURRENT ENTRY PT +ERR, CLA + TAD I ER0 /BANK CALL IS FROM + DCA CHS + ISZ ER0 /INDEX TO ADDRESS + TAD I ER0 /ADDRESS + DCA CHS# + CALL 1,ERROR + ARG FPER + CLA CLL CMA RAR + JMP CHSRET + + END +