--- /dev/null
+/ 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.
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+\f/ 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 <F.P. VARIABLE>
+ 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 <VARIABLE>
+ 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 <F.P. VARIABLE>
+ DCA FAD
+ TAD ABS#
+ DCA FAD#
+ CLL STA RAR /=3777
+ DCA ABSSW
+ JMP ED1 /GO INTO ADD ROUTINE...
+
+ PAGE
+\f
+
+/ 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
+\f/
+/ 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 <F.P. VARIABLE>
+ 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
+\f
+/
+/ 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
+\f/
+/ 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 <INT. VARIABLE>
+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
+\f