	.TITLE  REAL FLOATING POINT 
	.GLOBL .AH,.AP,.AO,.AG,.AI,.AR
	.GLOBL .AK,.AT,.AQ,.AL,.AU,.AM
	.GLOBL .BA,.AA,.AB,.AC,.AW,.AX
	.GLOBL .AJ,.AS,.AV,.AN,.CB,.ER
	.GLOBL .RB,.FS,.CH,.CD,.ZS
	.GLOBL .CI,.CE,.T1,.SET,.CC,.CA
	.GLOBL .A4,.HS,.HX
	/.AH-STORE SINGLE PRECISION
.AH	CAL	0
	LAC*	.AH
	JMS	.CB	/CLEARS LINK
	JMS	.ZRSN	/CHECK FOR 0
	LAC	.AA
	DAC*	CE14	/SAVE EX
	SZL
	JMP	AH01	/0 RESULT
	LAC	.AC
	TAD	REAL02	/ROUND BIT
	AND	REAL04	/EXTRACT LO
	DAC	T2	/SAVE LO
	GLK
	TAD	.AB
	SNA		/=0?
	TAD	(600000	/YES
	SAD	CN01	/=400000?
	JMP	.-2	/YES
/IF ARITH OV L=1,A=200000 IF+,A=600000 IF-
	DAC	T1	/SAVE HI
	GLK		/0 IF NO OV
	TAD*	CE14	/CHECK EX
	TAD	(377400	/FOR OV
	SZL		/& UNF
	JMP	OVF	/L=1,A0=0
	TAD	(1000
	SNL!CLL
	JMP	UNF	/L=0,A0=1
	XOR	T2	/ADD LO
	XOR	REAL02	/CHANGE SIGN
	DAC*	CE14	/STORE LO-EX
	LAC	T1
AH01	ISZ	CE14
	DAC*	CE14	/STORE HI
	JMP*	.AH
OVF	JMS*	.ER
	400001
	JMP	.	/IDLE
UNF	JMS*	.ER
	400002
	CLA!STL		/CREATE 0
	JMP	.AH+5
/
	/.AP-STORE DOUBLE PRECISION
.AP	CAL	0
	LAC*	.AP
	JMS	.CB	/GET ARG
	JMS	.ZRSN	/CHECK FOR 0
	LAC	.AA
	SNL
	XOR	CN01	/REMOVE BIAS
	DAC*	CE14	/STORE EX
	ISZ	CE14
	LAC	.AB
	DAC*	CE14	/STORE HI
	ISZ	CE14
	LAC	.AC
	DAC*	CE14	/STORE LO
	LAC	.AB
	JMP*	.AP
/
	/.ZRSN-CHECK FOR 0 & INSERT SIGN
.ZRSN	CAL	0
	LAC	.AB
	AND	CN02	/377777
	SAD	.AC
	SZA!STL
	JMP	.+4
	DZM	.AA	/0 TO EX
	DZM	CE05	/+ SIGN
	JMP*	.ZRSN
	LMQ		/.AB TO MQ
	LAC	CE05	/GET SIGN
	AND	CN03
	RTR!CLL		/SIGN TO A0
	OMQ	/PACK SIGN & FRAC
	DAC	.AB
	JMP*	.ZRSN
.ZS=.ZRSN
/
	/.AO .AG -LOAD
.AO	CAL	0	/DOUBLE LOAD
	LAC	.-1
	JMS	.SET
.AG	CAL	0	/SINGLE LOAD
	LAC*	.AG
	JMS	.CB	/GET ARG ADR
	JMS	.FRE	/ARG TO HAC
	JMS	.XFR	/EXC HAC&FAC
	JMS	.XSE	/EXC SIGN&EX
	JMS	.ZRSN	/INSERT SIGN
	JMP*	.AG
/
	/.AQ .AI  ADD
.AQ	CAL	0	/DOUBLE ADD
	LAC	.-1
	JMS	.SET
.AI	CAL	0	/SINGLE ADD
	LAC*	.AI
	JMS	.CB
	JMS	.FRE	/ARG TO HAC
	JMS	.CC	/GEN. ADD
	JMS	.NORD	/NORM-RD-OV
	JMP*	.AI
/
	/.AR  .AJ -SUBTRACT
.AR	CAL	0	/DOUBLE SUB
	LAC	.-1
	JMS	.SET
.AJ	CAL	0	/SINGLE SUB
	LAC*	.AJ
	JMS	.CB
	ISZ	CE05	/CHANGE SIGN
	JMS	.FRE
	JMS	.CC	/GEN. ADD
	ISZ	CE05	/CHANGE SIGN
	JMS	.NORD	/NORM-RD-OV
	JMP*	.AJ
/
	/.AS  .AK -MULTIPLY
.AS	CAL	0	/DOUBLE MULT
	LAC	.-1
	JMS	.SET
.AK	CAL	0	/SINGLE MULT
	LAC*	.AK
	JMS	.CB
	JMS	.FRE
	JMS	.CA	/GEN. MULT
	JMP*	.AK
/
	/.AT  .AL -DIVIDE
.AT	CAL	0	/DOUBLE DIV
	LAC	.-1
	JMS	.SET
.AL	CAL	0	/SINGLE DIV
	LAC*	.AL
	JMS	.CB
	JMS	.FRE
	JMS	.XSE
	JMS	.XFR
	JMS	.CI	/GEN. DIVIDE
	JMP*	.AL
/
	/.AU  .AM -REVERSE SUB
.AU	CAL	0	/DOUBLE RSUB
	LAC	.-1
	JMS	.SET
.AM	CAL	0	/SINGLE RSUB
	LAC*	.AM
	JMS	.CB
	ISZ	CE05	/CHANGE SIGN
	JMS	.FRE
	JMS	.CC	/GEN. ADD
	JMS	.NORD	/NORM-RD-OV
	JMP*	.AM
/
	/.AV  .AN -REVERSE DIV
.AV	CAL	0	/DOUBLE RDIV
	LAC	.-1
	JMS	.SET
.AN	CAL	0	/SINGLE RDIV
	LAC*	.AN
	JMS	.CB
	JMS	.FRE
	JMS	.CI	/GEN DIV
	JMP*	.AN
/
	/.CB -GET ARG ADDRESS
.CB	CAL	0
	DAC	CE14	/ARG ADD.
	SPA!STL		/NOT INDIR.
	LAC*	CE14	/INDIRECT
	DAC	CE14
	LAW	-3	/ADV. EXIT
	TAD	.CB	/OVER ARG
	DAC	T1	/IN SUBR
	ISZ*	T1	/CALL
	LAC	CE14
	JMP*	.CB
/
	/ DIVIDE ROUTINE-.CI
.CI	XX
	LAC	.AC	/LO DIVISOR
	STL!CMA
	TAD	CN03	/1
	DAC	CI01	/D2'=1-D2
	DAC	CI02
	GLK		/L=0 IF.AC=0
	TAD	.AB	/D1'=D1+1, 
	DAC	CI03	/D=D1'-D2'
	AND	(600000	/UNNORM DIV
	SNA!CLL
	JMP	FAULT
	LAC	CE03
	LMQ
	ALS	20
	AND	(600000	/PUT 2 BITS
	DAC	.A4	/IN .A4
	LAC	CE02
	LRS	2
	JMS	DIVR	/HI DIVISION
	DAC	.AC	/R1=N-D1'*Q1
	LACQ
	DAC	.AB	/Q1
	MUL		/Q1*D2'
CI01	CAL	0
	TAD	.AC	/R+Q1*D2'
	DAC	.AC
	LACQ		/GET LO PART
	TAD	.A4	/+ 2 LO BITS
	LMQ
	GLK
	TAD	.AC	/NEW NUM.
	LRS	2	/AVOID OVF
	JMS	DIVR	/Q2
	DAC	.A4	/R2
	LACQ
	DAC	.AC	/Q2
	MUL
CI02	CAL	0	/Q2*D2'
	TAD	.A4	/R2+Q2*D2'
	LRS	2	/AVOID OVF
	JMS	DIVR	/Q3
	641604		/CLA+LLS4
	DAC	T1
	LACQ		/SHIFTED Q3
	DAC	.A4
	LAC	.AC
	LMQ		/Q2 TO MQ
	641602		/CLA+LLS2
	TAD	.AB
	DAC	.AB	/HI QUOTIENT
	LACQ
	TAD	T1	/Q2+Q3
	DAC	.AC	/LO QUOTIENT
	SZL!CLL
	ISZ	.AB
	LAC	(377776	/BIAS
	JMS	ADN	/+ .AA EXT
	CMA
	DAC	.AAG
	LAC	.AA
	CMA
	DAC	.AA
	LAC	.CE	/FORM SIGN
	DAC	CE05
	JMS	.NORD	/NORM-RD-OV
	JMP*	.CI
FAULT	JMS*	.ER
	400003
	JMP	.	/IDLE
DIVR	CAL	0
	DIV
CI03	CAL	0
	JMP*	DIVR
/
	/ CONSTANTS-WORKING STORE
.AAG	0	/.AA EXTEN
.AA	0	/FAC
.AB	0
.AC	0
.A4	0	/GUARD WORD
CE01	0	/HAC
CE02	0
CE03	0
.FS	0	/FAC SIGN
.HS	0	/HAC SIGN
.CE	0	/COMBINED SIGN
CE14	0	/OPERAND ADDRESS
.T1	0	/TEMP STORE
	0
	0
REAL02	400
REAL03	777
REAL04	777000
REAL05	377400
CN01	400000
CN02	377777
CN03	1
.HX=CE01
CEHS=.HS
CE05=.FS
TP1=.T1
/
	/MULT ROUTINE-.CA
.CA	XX
	LAC	.AC
	DAC	CA01
	DAC	CA02
	LAC	.AB
	DAC	CA03
	DAC	CA04
	CLL
	LAC	CE03
	MUL		/LO*LO
CA01	CAL	0
	DAC	.A4
	LAC	CE02
	MUL		/HI*HI
CA03	CAL	0
	DAC	.AB
	LACQ
	DAC	.AC
	LAC	CE02
	MUL		/HIH*LOF
CA02	CAL	0
	JMS	.ACU
	LAC	CE03
	MUL		/LOH*HIF
CA04	CAL	0
	JMS	.ACU
	LAC	OTS1	/BIAS=400001
	JMS	ADN	/+ .AA EXT
	LAC	.CE	/FORM SIGN
	DAC	CE05
	JMS	.NORD	/NORM-RD-OV
	JMP*	.CA
.ACU	CAL	0
	TAD	.AC
	DAC	.AC
	SZL!CLL
	ISZ	.AB
	LACQ
	TAD	.A4
	DAC	.A4
	SZL!CLL
	ISZ	.AC
	SKP
	ISZ	.AB
	JMP*	.ACU
T1=.ACU
/
	/ ADD ROUTINE -.CC
.CC	XX
	LAC	CE01	/HX
	CMA!STL
	TAD	.AA	/FX
	SNL
	JMP	CC01	/FX > HX
	CMA
	DAC	T1	/EX DIF
	JMS	.XSE	/EXCH SIGN&EX
CC02	DZM	.A4
CC04	LAC	T1
	SNA!CLL
	JMP	CC11	/EX DIF=0
	TAD	M22
	SZL!STL
	JMP	CC03	/DIF > 21
	TAD	(LRS+22	/FORM SHIFT
	JMS	CC06
CC11	LAC	.CE
	RAR		/SIGN TO L
	SZL!CLL		/SIGNS=?
	JMS	CC12	/COMP. FAC
	LAC	.AC	/ADD PARTS
	TAD	CE03
	DAC	.AC
	GLK
	TAD	.AB
	TAD	CE02
	DAC	.AB
	CML!GLK
	AND	.CE
	SZA
	JMP	CC13	/CHANGE SIGN
CC14	DZM	CE01
	JMP*	.CC	/EXIT ADD
CC01	TAD	CN03	/FX > HX
	DAC	T1
	JMS	.XFR	/EXCH. FRACS
	JMP	CC02
CC03	DAC	T1	/DIF=DIF-22
	TAD	M22
	SNL!CLL
	JMP	CC05	/EX DIF > 43
	LAC	(LRS+22
	JMS	CC06
	JMP	CC04
CC05	JMS	.XFR	/HAC IS ANS
	JMP	CC14
CC06	CAL	0	/SHIFT < 22
	DAC	CC07
	DAC	CC10
	LAC	.A4
	LMQ
	LAC	.AC
CC07	XX
	DAC	.AC
	LACQ
	DAC	.A4
	CLQ
	LAC	.AB
CC10	XX
	DAC	.AB
	LACQ
	XOR	.AC
	DAC	.AC
	JMP*	CC06
CC12	CAL	0	/COMP. FAC
	LAC	.A4
	CMA!CLL
	TAD	CN03
	DAC	.A4
	LAC	.AC
	CMA!SZL!CLL
	TAD	CN03
	DAC	.AC
	LAC	.AB
	CMA!SZL!CLL
	TAD	CN03
	DAC	.AB
	CLL
	JMP*	CC12
CC13	ISZ	CE05	/CHANGE SIGN
	JMS	CC12	/COMP. FAC
	JMP	CC14
/
	/.XFR-EXCHANGE FRACTIONS
.XFR	CAL	0
	LAC	.AB
	DAC	T2
	LAC	CE02
	DAC	.AB
	LAC	T2
	DAC	CE02
	LAC	.AC
	DAC	T2
	LAC	CE03
	DAC	.AC
	LAC	T2
	DAC	CE03
	JMP*	.XFR
/
	/.XSE-EXCHANGE SIGN & EXP
.XSE	CAL	0
	LAC	CE05
	DAC	T2
	LAC	CEHS
	DAC	CE05
	LAC	T2
	DAC	CEHS
	LAC	.AA
	DAC	T2
	LAC	CE01
	DAC	.AA
	LAC	T2
	DAC	CE01
	JMP*	.XSE
/
.NORD	CAL	0
	JMS	.CD	/NORMALIZE
	JMS	.CH	/ROUND
	JMS	.ZRSN	/PACK SIGN
	SNL		/SKIP IF 0
	JMS	OUTS	/OV-UN TEST
	LAC	.AB
	JMP*	.NORD
/
	/.CD-NORMALIZE
.CD	CAL	0
CD04	LAC	.AC
	LMQ
	LAC	.AB
	SPA!CLL
	JMP	CD01	/ARITH OV
	SNA
	JMP	CD02	/.AB=0
	NORM
	DAC	.AB
	LACQ
	DAC	.AC
	LACS		/-44+SHIFTS
	DAC	CD07
	TAD	M35	/SHIFTS-1
	CMA!CLL		/-SHIFTS
	SZA
	JMS	ADN	/.AA-SHIFTS
	LAC	CD07
	TAD	(LRS+44	/FORMS LLS
	DAC	CD07
	LAC	.A4
	LMQ
	CLA!CLL
CD07	LLS		/SHIFT FRAC
	XOR	.AC
	DAC	.AC
	LACQ
	DAC	.A4
CD06	JMP*	.CD	/EXIT
CD01	RCR		/ARITH OV
	DAC	.AB	/SHIFT R1
	LAC	.AC
	RAR
	DAC	.AC
	LAC	.A4
	RAR
	DAC	.A4
	ISZ	.AA	/ADD 1 TO EX
	JMP*	.CD
	ISZ	.AAG
M1	LAW	-1	/NULL COMMAND
	JMP*	.CD
CD02	LAW	-22	/HI FRAC=0
	JMS	ADN
	LAC	.AC
	SZA		/AC=0?
	JMP	CD05
	SAD	.A4	/.AC=.A4?
	JMP	CD06	/ZERO RESULT
CD05	DAC	.AB	/MOVE UP
	LAC	.A4	/FRACTION
	DZM	.A4	/PARTS
	DAC	.AC
	JMP	CD04
/
	/.CH-ROUND
.RB	0		/0= ROUND
			/>0 NO ROUND
.CH	CAL	0
	LAC	.RB
	DZM	.RB
	SZA
	JMP*	.CH
	LAC	.A4	/=0,ROUND
	RAL		/A0 TO LINK
	GLK
	TAD	.AC
	DAC	.AC
	GLK
	TAD	.AB
	DAC	.AB
	SMA
	JMP	CH02
	RAR		/RD UP OV
	DAC	.AB
	ISZ	.AA	/ADD 1 TO EX
	JMP	.+3
	ISZ	.AAG
M35	LAW	-35	/NULL COMMAND
CH02	DZM	.A4
	JMP*	.CH
/
	/OVERFLOW-UNDERFLOW TEST
OUTS	CAL	0
	LAC	CE01
	JMS	ADN
	SAD	M1
	JMP*	OUTS	/OK IF -1
	SMA!CLA
	JMP	.OV	/OV IF +
.UN	JMS*	.ER	/UN IF < -1
	400002
	JMS	.AW	/FLOAT 0
	JMP*	OUTS
.OV	JMS*	.ER
OTS1	400001
	JMP	.	/IDLE
/
	/ADN- ADD TO EXPONENT
ADN	CAL	0
	TAD	.AA
	DAC	.AA
	GLK
	TAD	.AAG
	TAD	M1
	DAC	.AAG
	JMP*	ADN
/
	/.SET-DOUBLE PREC SETUP
.SET	CAL	0
	DAC*	.SET
	ISZ	.SET
	JMP*	.SET
/
	/.FRE-.FDB ARG TO HAC
	/.CG-SIGN CONTROL
.FRE	CAL	0
	LAC	.SET
	DZM	.SET
	SZA
	JMP	.FDB
	LAC*	CE14	/SINGLE PREC
	AND	REAL04	/EXTRACT LO
	DAC	CE03
	LAC*	CE14
	AND	REAL03	/EXTRACT EX
	XOR	REAL02	/CHANGE SIGN
	TAD	REAL05	/BIAS EX
	DAC	CE01
	ISZ	CE14
	LAC*	CE14
.CG	SAD	CE03	/FRAC = ?
	SZA!CLL		/YES, =0?
	SKP!CLL
	DZM	CE01
	TAD	CN01	/SIGN TO L
	AND	CN02	/ABS VALUE
	DAC	CE02	/OF FRAC
	GLK
	DAC	CEHS	/SAVE SIGN
	XOR	CE05
	DAC	.CE	/JOINT SIGN
	DZM	.AAG	/0 TO .AA EX
	LAC	.AB	/ABS VALUE
	AND	CN02	/OF FAC
	DAC	.AB
	JMP*	.FRE
.FDB	LAC*	CE14	/DOUBLE PREC
	XOR	CN01	/ADD BIAS
	DAC	CE01
	ISZ	CE14
	LAC*	CE14
	DAC	CE02
	ISZ	CE14
	LAC*	CE14
	DAC	CE03
	LAC	CE02
	JMP	.CG
/
	/.BA-NEGATE FAC
.BA	CAL	0
	ISZ	CE05
	JMS	.ZRSN
	JMP*	.BA
T2=.BA
/
	/.AW-INTEGER T0 FLOAT
	/INTEGER IN A
.AW	CAL	0
	DZM	CE05	/SET SIGN +
	DZM	.AC	/0 TO LOW
	DZM	.A4	/FRACS
	SMA
	JMP	AW01
	CMA		/2'S COMPL
	TAD	CN03
	ISZ	CE05	/SET SIGN -
AW01	DAC	.AB
	LAC	AW02	/FORM EXP
	DAC	.AA
	JMS	.CD	/NORM
	JMS	.ZRSN	/PACK SIGN
	JMP*	.AW
AW02	400021
M22=CD02
/
	/.AX-FLOAT TO INTEGER
/IF I>18 BITS,RIGHTMOST 18 BITS GIVEN &
/OTS 0.  -2**17 IS CONVERTED
.AX	CAL	0
	JMS	.AP	/SAVE FAC
		TP1
	LAC	TP1	/UNBIAS EXP
	TAD	M22	/FORM EXDEL
	LRSS		/SIGN TO L
	SNA!CLC		/EXDEL=0 ?
	LAC	.AC	/YES
	SMA!CLA		/.AC + ?
	LAC	.AB	/YES
	SAD	(600000
	JMP	AX02	/= -2**17
AX01	SNL		/EXDEL - ?
	JMS*	.ER	/INTEGER OV
	NOP		/OTS 0 OR
			/NULL COMM.
AX02	JMS	.AG	/LD 2**35
		TWO35	/ARG TO HAC
	LAC	TP1+1	/SIGN OF ARG
	SPA
	ISZ	.AA	/2**36 IF -
	JMS	.CC	/ADD HAC
	JMS	.CD	/NORMALIZE
	JMS	.AO	/RESTORE FAC
		TP1	/.AC TO CE03
			/.AB IN A
	SPA!CLA		/ARG - ?
	LAC	.A4	/YES
	SZA!CLA		/RESIDUE 0 ?
	ISZ	CE03	/NO,RD UP
	LAC	CE03	/= INTEGER
	JMP*	.AX
TWO35	43
	200000
/
	.END
