	.TITLE	DVR		
; JEFFREY KODOSKY	ARL	MAY76
;
; UTILITY:	FLOATING POINT DIVIDER
; ENTRY:	2 ARGS (SP)	<F1>;<F2>
; EXIT:		1 ARG (SP)	<F>=F2/F1
;		C BIT SET AND +-INF RETURNED IF OVERFLOW
; ERRORS:	NONE
; CALLS:	NONE
; R5 PRESERVED
; ASSEMBLY SWITCHES:	FPU,FIS,EAE,EIS
;(THIS ROUTINE IS A MODIFIED VERSION OF $DVR08 OF FPMP)
; RESTRICTIONS:	DO NOT CALL THIS ROUTINE WITH F1=0.
	.GLOBL	DVR
	MQ=177304
	NOR=177312
	LSH=177314
	ASH=177316
	F0=%0
	F1=%1
	D=8.
	N=12.
	Q=12.
	.IFDF	FPU
DVR:	.WORD	170001	
	.WORD	172526	
	.WORD	172426	
	.WORD	174401	
	.WORD	174046	
	.WORD	170000
	BVS	INF
	JMP	@-(R4)
	.GLOBL	$$INF
;GOTO ADR FPU OVERFLOW CODE
INF:	JMP	$$INF
	.ENDC
	.IFNDF	FPU
	.IFDF	FIS
DVR:	FDIV	SP
	BVS	UOVFL
	JMP	@-(R4)
	.GLOBL	$$INF0
;GOTO MLR FIS OVER/UNDER FLOW CODE
UOVFL:	JMP	$$INF0
	.ENDC
	.IFNDF	FIS
DVR:	MOV	R4,-(SP)
	MOV	R5,-(SP)
	CLR	R0
	CLR	R1
	CLR	-(SP)
	ASL	N+0-2(SP)	
	ROL	@SP	
	CLR	-(SP)
	BISB	N+1(SP),@SP	
	BEQ	ZER$18	
	BISB	N(SP),R0
	SWAB	R0	
	SEC		
	ROR	R0
	BISB	N+3(SP),R0
	BISB	N+2(SP),R1
	SWAB	R1
	CLR	R2
	CLR	R3
	ASL	D(SP)	
	ADC	2(SP)	
	BISB	D+1(SP),R2	
	SUB	R2,@SP	
	CLR	R2
	BISB	D(SP),R2	
	SWAB	R2
	SEC		
	ROR	R2
	BISB	D+3(SP),R2
	BISB	D+2(SP),R3
	SWAB	R3
	.IFDF	EAE!EIS
	CLC		
	ROR	R0
	ROR	R1	
	ROR	R2
	ROR	R3
	.ENDC
	CMP	R0,R2	
	BLO	DHI$18	
	.IFNDF	EAE&EIS
	BHI	DLW$18	
	CMP	R1,R3	
	BHI	DLW$18
	BNE	DHI$18
	CLR	Q(SP)	
	INC	@SP	
	CLR	R5
	BR	FLT$18
	.ENDC
	.IFDF	EAE!EIS
	BHIS	DLW$18	
	.ENDC
ZER$18:	CMP	(SP)+,(SP)+	
	BR	EC1$18
OV1$18:	ROL	-(SP)
OVR$18:	MOV	#-1,Q+2-2(SP)
	CLR	Q+0-2(SP)
	ROR	(SP)+
	ROR	Q+0-4(SP)
	MOV	(SP)+,R5
	MOV	(SP)+,R4
	CMP	(SP)+,(SP)+
	SEC
	JMP	@-(R4)
UND$18:	TST	(SP)+
EC1$18:	CLR	Q+0-4(SP)	
	CLR	Q+2-4(SP)
	BR	RTN$18
DLW$18:	ROR	R0	
	ROR	R1	
	INC	@SP	
	.IFNDF	EAE&EIS
DHI$18:	MOV	#9.,R4	
	JSR	PC,DV1$18
	MOVB	R5,Q(SP)	
				
	TST	R4	
	BEQ	NT0$18	
	CLR	R5	
	BR	FLT$18
NT0$18:	MOV	#16.,R4	
	JSR	PC,DV1$18
	.ENDC
	.IFDF	EAE!EIS
DHI$18:	CLC
	ROR	R3	
	ROR	R0	
	ROR	R1
	.ENDC
	.IFDF	EAE
	MOV	#MQ,R5	
	MOV	R1,@R5	
	MOV	R0,-(R5)
	MOV	R2,-(R5)	
	TST	(R5)+	
	MOV	(R5)+,R1	
	MOV	(R5)+,R4	
	MOV	R3,@R5	
	TST	-(R5)	
	ASR	R1	
	SUB	R1,-(R5)	
	DEC	@#ASH
	MOV	R2,-(R5)	
	CMP	(R5)+,(R5)+	
	NEG	@R5
	MOV	#2,@#ASH	
	ADD	R4,-(R5)	
	CLR	@#NOR	
	SUB	@#NOR,@SP	
	MOV	#-6,@#LSH	
	MOV	(R5)+,Q(SP)	
	MOV	@R5,R5
	.ENDC
	.IFDF	EIS
	MOV	R0,R4	
	MOV	R1,R5
	.WORD	071402	
	MOV	R5,R1	
	MOV	R4,R0	
	.WORD	070403	
	ASR	R1	
	SUB	R1,R4	
	.WORD	073427,-1	
	.WORD	071402	
	NEG	R4	
	.WORD	073427,-14.	
	ADD	R0,R4	
NBT$18:	.WORD	073427,1	
	BMI	NBI$18	
	DEC	@SP	
	BR	NBT$18	
NBI$18:	.WORD	073427,-7	
	MOV	R4,Q(SP)	
	.ENDC
FLT$18:	MOV	(SP)+,R4	
	ADD	#200,R4	
	BLE	UND$18	
	CMP	#377,R4
	BLT	OVR$18	
	MOVB	R4,Q+1-2(SP)	
SGN$18:	ROR	(SP)+	
	ROR	Q+0-4(SP)
	ROR	R5
	ADC	R5	
	MOV	R5,Q+2-4(SP)
	ADC	Q+0-4(SP)
	BCS	OV1$18
	BVS	OV1$18
RTN$18:	MOV	(SP)+,R5
	MOV	(SP)+,R4
	CMP	(SP)+,(SP)+	
	CLC
	JMP	@-(R4)
	.IFNDF	EAE&EIS
DV1$18:	ASL	R5	
	ASL	R1	
	ROL	R0
	BCS	GO$18	
	CMP	R2,R0	
	BHI	NGO$18	
	BLO	GO$18	
	CMP	R3,R1	
	BHI	NGO$18
	BEQ	NQD$18	
GO$18:	SUB	R3,R1	
	SBC	R0
	SUB	R2,R0
	INC	R5	
NGO$18:	DEC	R4	
	BGT	DV1$18
	RTS	PC
NQD$18:	INC	R5	
	BR	EQ1$18
EQ2$18:	ASL	R5	
EQ1$18:	DEC	R4
	BGT	EQ2$18
	INC	R4	
RTS$18:	RTS	PC	
	.ENDC
	.ENDC
	.ENDC
	.END
