	.TITLE	IR		
; JEFFREY KODOSKY	ARL	NOV75
;
; UTILITY:	INTEGER TO REAL CONVERSION
; ENTRY:	1 ARG (SP)	1-WD INTEGER FOR IR
;				2-WD INTEGER FOR IDR (MSW @SP)
; EXIT:		1 ARG (SP)	FLOATING POINT NUMBER
; ERRORS:	NONE
; CALLS:	NONE
; R5 PRESERVED
; ASSEMBLY SWITCHES:	FPU,EAE
	.GLOBL	IR,IDR
MQ=177304
NOR=177312
	.IFDF	FPU
IR:	.WORD	170002	;SETI
	BR	.+4
IDR:	.WORD	170012	;SETL
	.WORD	170001	;SETF
	.WORD	177026	;LDCLF (SP)+,F0
	.WORD	174046	;STF F0,-(SP)
	JMP	@-(R4)
	.ENDC
	.IFNDF	FPU
IR:	CLR	-(SP)	;ROOM FOR RESULT
	CLR	-(SP)	;SIGN
	MOV	4(SP),R0
	BGT	SHORT
	BEQ	ZERO
	NEG	R0
	INC	@SP	;NOTE -
	BR	SHORT
IDR:	MOV	2(SP),R1;GET LO ORDER
	CLR	-(SP)	;SIGN SPACE
	MOV	2(SP),R0	;GET HIGH ORDER
	BGT	POS	;GET ABSOLUTE VALUE
	BEQ	TSTLO
	NEG	R1
	ADC	R0
	NEG	R0
	INC	@SP	;NOTE -
	BCC	TSTLO
	.IFDF	EAE
POS:	MOV	#237,R3	;SET MAX EXPONENT
	.ENDC
	.IFNDF	EAE
POS:	MOV	#240,R3	;SET MAX EXPONENT+1
	.ENDC
	BR	SHIFT
TSTLO:	MOV	R1,R0	;CHECK LSW
	BEQ	ZERO
SHORT:	CLR	R1
	.IFDF	EAE
	MOV	#217,R3	;SET MAX EXPONENT FOR 1 WORD
	.ENDC
	.IFNDF	EAE
	MOV	#220,R3	;SET MAX EXPONENT FOR LSW +1
	.ENDC
	.IFNDF	EAE
SHIFT:	ASL	R1	;LOOK FOR NORMAL BIT
	ROL	R0
	BCS	NORMED	;JUMP IF FOUND
	DEC	R3	;DECREASE EXPONENT
	BR	SHIFT	;TRY AGAIN
	.ENDC
	.IFDF	EAE
	MOV	#MQ,R2
	MOV	R1,@R2
	MOV	R0,-(R2)
	MOV	#NOR,R0
	CLR	@R0
	SUB	(R0)+,R3
	MOV	#2,@R0
	MOV	(R2)+,R0
	MOV	@R2,R1
	.ENDC
NORMED:	CLRB	R1	;FORM LO ORDER MANTISSA
	BISB	R0,R1
	SWAB	R1
	CLRB	R0	;COMBINE EXPONENT AND HIGH
	BISB	R3,R0	;ORDER MANTISSA
	SWAB	R0
	ROR	(SP)+	;INSERT SIGN
	ROR	R0
	ROR	R1
	ADC	R1	;DOUBLE INTEGERS ARE "ROUNDED" TO REALS
	ADC	R0
	MOV	R1,2(SP);MOVE OUT RESULT
	MOV	R0,@SP
	JMP	@-(R4)
ZERO:	TST	(SP)+
	JMP	@-(R4)
	.ENDC
	.END
