
FORTRAN OTS TAPE 3 INTERPRETIVE ARITHMETIC

/FLOATING POINT ADD AND SUBTRACT
FSUB,	JMS FPKUP
	LAC YS
	XOR (1
	DAC YS
	SKP
FADD,	JMS FPKUP
	JMS FMAG
	JMS CEE
	LAC FSI#GN
	SZA!CLL
	JMS FADCOM
	LAC ACR
	TAD YR
	DAC ACR
	GLK
	TAD ACL
	TAD YL
	DAC ACL
	LAC FSIGN
	SZA
	JMP FADREC
	JMS OVFL
FADA,	JMS I END+43
	LAC YS
	DAC ACS
MAGF,	LAC ACL
	ADD ACR
	SZA
	JMP BACK
	DZM ACX
	DZM ACS
	JMP BACK

FADCOM,	0
	LAC ACR
	CMA!CLL
	TAD (1
	DAC ACR
	LAC ACL
	CMA
	SZL
	TAD (1
	DAC ACL
	CLL
	JMP I FADCOM

OVFL,	0
	LAC ACL
	SMA
	JMP I OVFL
	RCR
	DAC ACL
	LAC ACR
	RAR
	DAC ACR
	ISZ ACX
	OPR
	JMP I OVFL

FADREC,	LAC ACL
	SMA
	JMP FADA
	JMS FADCOM
	LAC YS
	XOR (1
	DAC YS
	JMP FADA

/DOUBLE PRECISION FLOATING POINT DIVISION

FDIV,	JMS FPKUP	/PICKUP ARGUMENT
	JMS FMAG		/TAKE ABSOLUTE VALUES AND SAVE SIGN
	LAC #YR	/SHIFT DIVISOR LEFT
	RCL	/SO AS TO AVOID OVERFLOW
	DAC YR
	LAC YL
	RAL
	DAC YL
	LAC ACL	/PERFORM FIRST DIVIDE:
	JMS I END+46
	LAC ACR	/  -------------
	LAC YL	/       YL
	DAC ACL	/HIGH ORDER QUOTIENT, Q1
	JMS I END+44	/MULTIPLY Q1 * YR
	LAC YR
	DAC ACR	/LOW ORDER PRODUCT TO ACR
	LAC END+10	/TAKE HIGH ORDER PRODUCT
	CMA	/AND SUBTRACT FROM
	TAD END+12	/REMAINDER OF FIRST DIVISION
	CMA
	SZA!CMA
	JMP .+3
	DZM ACR
	JMP FDIV5
	JMS FDIV2
FDIV2,	0		/SAVE LINK, INDICATES FINAL SIGN
	SNL
	JMP FDIV1	/LINK PLUS INDICATES CORECTION FACTOR -
	TAD (1
	DAC T#
	LAC ACR	/ADJUST LEFT HALF FOR OVERFLOW
	CMA
	DAC ACR
	LAC T
	ISZ ACR
	TAD (-0

FDIV3,	JMS I END+46
	LAC ACR	/  R - Q1 * YR (LEFT) - Q1 * YR (RIGHT) * K
	LAC YL	/  ----------------------------------------
	DAC ACR	/                  YL
	LAC FDIV2
	SMA
	JMP FDIV4

FDIV5,	LAC YX
	CMA	/EXPONENT IS DIFFERENCE OF ACX AND YX
	TAD (1
	TAD ACX
	DAC ACX
	JMS OVFL
	JMS I END+43	/IF ZERO CLEAR EXPONENT
	LAC FSIGN
	DAC ACS
	JMP MAGF

FDIV1,	CMA
	SMA
	JMP FDIV3
	DAC T
	CMA
	TAD YL
	CMA
	SPA
	JMP FDIV6
	DAC T
	CLC
	TAD ACL
	DAC ACL
FDIV6,	LAC T
	SZA
	JMP FDIV3
	JMP FDIV2-3

FDIV4,	LAC ACR
	CMA!CLL
	TAD (1
	DAC ACR
	GLK
	ADD ACL
	ADD (-1
	DAC ACL
	JMP FDIV5

FMPY,	JMS FPKUP
	JMS FMAG
	LAC ACR
	JMS I END+44
	LAC YL
	DAC T
	LAC END+10
	DAC T1#
	LAC ACL
	JMS I END+44
	LAC YR
	CLL
	TAD T
	GLK
	TAD END+10
	TAD T1
	DAC T
	GLK
	DAC T1
	LAC ACL
	JMS I END+44
	LAC YL
	CLL
	TAD T
	DAC ACR
	GLK
	TAD T1
	TAD END+10
	DAC ACL
	LAC YX
	TAD ACX
	TAD (1
	DAC ACX
	JMS I END+43
	LAC FSIGN
	DAC ACS
	JMP MAGF



/COMPARE AND EQUALIZE EXPONENTS

CEE,	0
	LAC ACL
	ADD ACR
	SNA
	JMP CEESWA
	LAC YL
	ADD YR
	SNA
	JMP I CEE
	LAC YX
	CMA
	TAD ACX
	TAD (1
	DAC END+11
	SNA
	JMP I CEE
	SPA!CMA
	JMP CEESW
	TAD (1
	DAC END+11
	LAC ACX
	DAC YX
	JMS I END+47
	JMP I CEE

CEESWA,	DZM END+11

CEESW,	LAC YX
	DAC ACX
	LAC ACL
	DAC TEMZER
	LAC YL
	DAC ACL
	LAC TEMZER
	DAC YL
	LAC ACR
	DAC TEMZER
	LAC YR
	DAC ACR
	LAC TEMZER
	DAC YR
	LAC AC#S
	RAR
	LAC Y#S
	DAC ACS
	CLA!RAL
	DAC YS
	JMS I END+47
	JMP I CEE

FLAC,	JMS JLAC
	JMP BACK

JLAC,	0
	JMS JLAC0
	SZA
	JMP JLAC2
	LAC I T
	DAC ACX
	ISZ T
	LAC I T
	DZM ACS
	SPA
	ISZ ACS
	AND (377777
	DAC ACL
	ISZ T
	LAC I T
	DAC ACR
	JMP I JLAC
JLAC2,	LAM -10
	DAC JLACTM
	LAC I T
	AND (777000
JLAC3,	CLL!SPA
	STL
	RAR
	ISZ JLACTM
	JMP JLAC3
	DAC JLACTM
	LAC I T
	AND (777
	DAC ACL
	ISZ T
	DZM ACS
	LAC I T
	SPA!CLL
	ISZ ACS
	RAL
	DAC ACR
	JMS I END+43
	LAC JL#ACTM
	DAC ACX
	JMP I JLAC
JLAC0,	0
	LAC IDRECT
	SZA
	JMP . 3
	LAC MODE
	JMP I JLAC0
	LAC T
	AND (400000
	JMP I JLAC0




FDAC,	JMS JLAC0
	SZA
	JMP FDAC2
	LAC ACX
	DAC I T
	ISZ T
	LAC ACS
	RCR	RAR
	XOR ACL
	JMP SETACS
FDAC2,	LAC T
	DAC FOP
	LAC ACX
	AND (777
	RL6
	RTL	RAL
	DAC JLACTM
	DZM ACX
	JMS UNFLOT
	7
	LAC ACS
	RCR
	LAC ACR
	RAR
	DAC ACR
	LAC ACL
	ADD JLACTM
SETACS,	DAC I T
	ISZ T
	LAC ACR
	DAC I T
	JMS JLAC0
	SNA
	JMP BACK
	LAC FOP
	DAC T
	JMP FLAC

FPKUP,	0
	JMS JLAC0
	RCL
	LAC T
	AND (77777
	SZL
	XOR (400000
	DAC TEM#P2
	LAC EFMTEM
	DAC TEMP#3
	EFM
	DAC TEMP4
	LAC I TEMP2
	LFM
	LAC ACS
	DAC YS
	LAC ACX
	DAC YX
	LAC ACL
	DAC YL
	LAC ACR
	DAC YR
	EFM
	LAC TEMP4
	LFM
	LAC TEMP3
	DAC EFMTEM
	JMP I FPKUP
TEMP4,	0
TEMP4 3/

FMAG,	0
	LAC YS
	XOR ACS
	DAC FSIGN
	JMP I FMAG

UNFLOT,	0
	LAC ACX
	CMA
	ADD I UNFLOT
	CMA
	DAC END+11
	LAC ACL
	DAC YL
	LAC ACR
	DAC YR
	JMS I END+47
	LAC YL
	DAC ACL
	LAC YR
	DAC ACR
	ISZ UNFLOT
	DZM ACX
	JMP I UNFLOT

START
