File FLOAT.SB (8k SABR macro assembler source file)

Directory of image this file is from
This file as a plain text file

/ FLOATING POINT MATH PACKAGE	*** FLOAT.04 ***

/			OCTOBER 21, 1970

/COPYRIGHT 1969,1970		DIGITAL EQUIPMENT CORP.
/				MAYNARD, MASS.

/
/**********
/PATCHED ON 8/16/71 TO FIX AN ERROR WHICH DOES NOT OCCUR WHEN USING
/THE 12/2/70 VERSION OF LIB8.RL.  THIS INDICATES THAT THIS FILE
/(AND PREHAPS OTHERS OF THE LIBRARY SOURCES ON THIS TAPE) IS NOT
/THE VERSION USED BY DEC WHEN BUILDING THE 12/2/70 VERSION
/OF LIB8.RL!!!  SO BEWARE IF YOU REBUILD LIB8.RL!!!
/(THE PATCH CONSISTED IN MOVING LABEL FADEX UP 1 LINE)
/**********
/		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	2	/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	2	/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
	TAD	FSB
	AND	ABSSW
	DCA	ACH
	JMS	FADSB
	DCA	ACM
	JMS	FADSB
	DCA	ACL
	CLA CMA
	DCA	ABSSW
/********
/8/16/71 PATCH CONSISTED OF MOVING FADEX UP 1 LINE.
FADEX,	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	2	/ 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

/ 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 2 /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 2 / 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 2 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 2 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 ER3, FMP FMP, BLOCK 2 TAD ER3 DCA ER0 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 CTR / MULT, JMSI ARSAE TAD MQH RAR DCA MQH TAD MQM RAR DCA MQM TAD MQL RAR DCA MQL SZL JMSI ADSRAE ISZ CTR JMP MULT JMSI NORMAG RETRN FMP / CTR, 0 / / FLOATING POINT DIVISION / DIVZ, 4411 2632 FDV, BLOCK 2 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 CTR 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 CTR JMP DVID / TAD MQH DCA HAC TAD MQM DCA MAC TAD MQL DCA LAC JMS NORMAC 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 2 /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 2 / 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 2 / 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 2 /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



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search