*/beginfile ARITH_asm
; --------------------------------------------------------------
; ARITH_asm - QDOS arithmetic routines
;	   - last modified 07/04/98
; QDOS-Amiga sources by Rainer Kowallik
;    ...some changes by Mark J Swift
; --------------------------------------------------------------
RI_EXEC_a1:
	MOVE.L	A6,-(A7)
	SUBA.L	A6,A6
	BSR.S	RI_EXEC
	BRA.S	L041A4
RI_A1_EXecb:
	MOVE.L	A6,-(A7)
	SUBA.L	A6,A6
	BSR.S	RI_EXECB
L041A4	BEQ.S	L041A8
	MOVEQ	#0,D2
L041A8	MOVEA.L	(A7)+,A6
	RTS
;*/beginoverlay
RI_EXEC	; operation with code in D0
	MOVEM.L	D1-D3/A0/A2-A3/A5,-(A7)
	SUBA.L	A5,A5
	BRA.S	L041C0
RI_EXECB ; list of operations (A5)
	MOVEM.L	D1-D3/A0/A2-A3/A5,-(A7)
	MOVEA.L	A3,A5
L041BA:
;*/insertcode
	move.l	a5,d0	;*/mend
	beq.s	L041F8	;*/mend
;*/endinsertcode
	MOVEQ	#0,D0
	MOVE.B	(A5)+,D0
	BEQ.S	L041F8
L041C0	CMPI.B	#$30,D0
	BHI.S	L041CC
L041FE	MOVE.W	JMP_RI_Exec-2(PC,D0.W),D0
	JSR	JMP_RI_Exec(PC,D0.W)
	BEQ.S	L041BA
L041F8	MOVEM.L	(A7)+,D1-D3/A0/A2-A3/A5
	RTS
L041CC	ORI.W	#$FF00,D0
	BCLR	#0,D0
	ADDA.W	D0,A4
	BNE.S	L041DE
	SUBQ.W	#6,A1
	BSR.S	L041EA
	BRA.S	L041E6
L041DE	EXG	A4,A1
	BSR.S	L041EA
	EXG	A1,A4
	ADDQ.W	#6,A1
L041E6	SUBA.W	D0,A4
	BRA.S	L041BA
L041EA	MOVE.W	0(A6,A4.L),0(A6,A1.L)
	MOVE.L	2(A6,A4.L),2(A6,A1.L)
	RTS
;*/endoverlay
JMP_RI_Exec:
	DC.W	RI_NINT-JMP_RI_Exec
	DC.W	RI_INT-JMP_RI_Exec
	DC.W	RI_NLINT-JMP_RI_Exec
	DC.W	RI_FLOAT-JMP_RI_Exec
	DC.W	RI_ADD-JMP_RI_Exec
	DC.W	RI_SUB-JMP_RI_Exec
	DC.W	RI_MULT-JMP_RI_Exec
	DC.W	RI_DIV-JMP_RI_Exec
	DC.W	RI_ABS-JMP_RI_Exec
	DC.W	RI_NEG-JMP_RI_Exec
	DC.W	RI_DUP-JMP_RI_Exec
	DC.W	RI_COS-JMP_RI_Exec
	DC.W	RI_SIN-JMP_RI_Exec
	DC.W	RI_TAN-JMP_RI_Exec
	DC.W	RI_COT-JMP_RI_Exec
	DC.W	RI_ASIN-JMP_RI_Exec
	DC.W	RI_ACOS-JMP_RI_Exec
	DC.W	RI_ATAN-JMP_RI_Exec
	DC.W	RI_ACOT-JMP_RI_Exec
	DC.W	RI_SQRT-JMP_RI_Exec
	DC.W	RI_LN-JMP_RI_Exec
	DC.W	RI_LOG10-JMP_RI_Exec
	DC.W	RI_EXP-JMP_RI_Exec
	DC.W	RI_POWFP-JMP_RI_Exec
RI_SIN:
	MOVEM.L	D4-D7/A4,-(A7)
	MOVEQ	#0,D7
	BRA.S	L04248
RI_COS:
	MOVEM.L	D4-D7/A4,-(A7)
	JSR	RI_ABS(PC)	;*/undomodify BSR RI_ABS
	MOVEQ	#-1,D7
L04248	JSR	L04684(PC)	;*/undomodify BSR L04684
	BNE.S	L042B0
	BSR.S	L042B6
	LEA	L045AE(PC),A4	; (MJS)
	BSR.S	L042C6
	BTST	#0,D7
	BEQ.S	L042B0
	JSR	RI_NEG(PC)	;*/undomodify BSR RI_NEG
	BRA.S	L042B0
RI_TAN:
	MOVEM.L	D4-D7/A4,-(A7)
	MOVEQ	#0,D6
	BRA.S	L04274
RI_COT:
	MOVEM.L	D4-D7/A4,-(A7)
	MOVEQ	#-$01,D6
	JSR	RI_NEG(PC)	;*/undomodify BSR RI_NEG
L04274:
	MOVEQ	#0,D7
	JSR	L04674(PC)	;*/undomodify BSR L04674
	BNE.S	L042B0
	EOR.B	D6,D7
	BSR.S	L042B6
	LEA	L045D6(PC),A4
	JSR	L04726(PC)	;*/undomodify BSR L04726
	ADDQ.W	#6,A1
	BSR.S	L042CA
	SUBQ.W	#6,A1
	MOVE.L	-10(A6,A1.L),2(A6,A1.L)
	MOVE.W	-12(A6,A1.L),0(A6,A1.L)
	BTST	#0,D7
	BEQ.S	L042AA
	JSR	RI_SWAP(PC)	;*/undomodify BSR RI_SWAP
	JSR	RI_NEG(PC)	;*/modify JSR RI_NEG
				;*/note absolute address!
				;*/undomodify BSR RI_NEG
	nop			;*/modify
				;*/note JSR(PC) < JSR
L042AA	JSR	RI_DIV(PC)	;*/undomodify BSR RI_DIV
L042AE	MOVEQ	#0,D0
L042B0	MOVEM.L	(A7)+,D4-D7/A4
	RTS
L042B6	JSR	RI_DUP(PC)	;*/undomodify BSR RI_DUP
L042BA	JSR	RI_DUP(PC)	;*/undomodify BSR RI_DUP
	JSR	RI_DUP(PC)	;*/undomodify BSR RI_DUP
	JMP	RI_MULT(PC)	;*/undomodify BRA RI_MULT
L042C6	JSR	L0472C(PC)	;*/undomodify BSR L0472C
L042CA	JSR	RI_MULT(PC)	;*/undomodify BSR RI_MULT
	JMP	RI_ADD(PC)	;*/undomodify BRA RI_ADD
L042D2	SUBQ.W	#6,A1
	CLR.W	4(A6,A1.L)
	MOVE.L	#$08014000,0(A6,A1.L) ; Floatingpoint 1.0
	JMP	RI_SWAP(PC)	;*/undomodify BRA RI_SWAP
RI_ACOS:
	JSR	RI_NEG(PC)	;*/undomodify BSR RI_NEG
	BSR.S	RI_ASIN
	BNE.S	L0431C
	BSR.S	L0430C
	JMP	RI_ADD(PC)	;*/undomodify BRA RI_ADD
RI_ASIN:
	BSR.S	L042BA
	BSR.S	L042D2
	JSR	RI_SUB(PC)	;*/undomodify BSR RI_SUB
	BSR	RI_SQRT
	BNE.S	L0431C
	JSR	RI_DIV(PC)	;*/undomodify BSR RI_DIV
	BEQ.S	RI_ATAN
	BSR.S	L0430C
	JMP	RI_MULT(PC)	;*/undomodify BRA RI_MULT
L0430C	SUBQ.W	#6,A1
	MOVE.L	#$6487ED51,2(A6,A1.L) ; PI/2
	MOVE.W	#$0801,0(A6,A1.L)
L0431C	RTS
RI_ACOT:
	MOVEM.L	D4-D7/A4,-(A7)
	MOVEQ	#$02,D7
	BRA.S	L0432C
RI_ATAN:
	MOVEM.L	D4-D7/A4,-(A7)
	MOVEQ	#0,D7
L0432C	TST.B	2(A6,A1.L)
	BGE.S	L04338
	ADDQ.B	#4,D7
	JSR	RI_NEG(PC)	;*/undomodify BSR RI_NEG
L04338	CMPI.W	#$0800,0(A6,A1.L)
	BLE.S	L0434A
	BSR.S	L042D2
	JSR	RI_DIV(PC)	;*/undomodify BSR RI_DIV
	BCHG	#$01,D7
L0434A	JSR	RI_DUP(PC)	;*/undomodify BSR RI_DUP
	SUBQ.W	#6,A1
	MOVE.L	#$4498517A,2(A6,A1.L) ;*/mend MOVE.L #$4498517A,2(A6,A1.W)
	MOVE.W	#$07FF,0(A6,A1.L) ; 0.2679492
	JSR	RI_SUB(PC)	;*/undomodify BSR RI_SUB
	ADDQ.W	#6,A1
	TST.B	-$04(A6,A1.L)
	BLE.S	L04378
	LEA	L045F2(PC),A4	; (MJS)
	JSR	L04726(PC)	;*/undomodify BSR L04726
	JSR	RI_DIV(PC)	;*/undomodify BSR RI_DIV
	ADDQ.B	#1,D7
L04378	BSR	L042B6
	LEA	L0461A(PC),A4	; (MJS)
	JSR	L04726(PC)	;*/undomodify BSR L04726
	JSR	RI_DIV(PC)	;*/undomodify BSR RI_DIV
	BSR	L042CA
	LSR.B	#1,D7
	BCC.S	L043A4
	SUBQ.W	#6,A1
	MOVE.L	#$430548E1,2(A6,A1.L) ; 0.5235988
	MOVE.W	#$0800,0(A6,A1.L)
	JSR	RI_ADD(PC)	;*/undomodify BSR RI_ADD
L043A4	LSR.B	#1,D7
	BCC.S	L043B4
	JSR	RI_NEG(PC)	;*/undomodify BSR RI_NEG
	BSR	L0430C
	JSR	RI_ADD(PC)	;*/undomodify BSR RI_ADD
L043B4	LSR.B	#1,D7
	BCC	L042AE
	JSR	RI_NEG(PC)	;*/undomodify BSR RI_NEG
	BRA	L042B0
RI_POWFP:
	MOVE.W	0(A6,A1.L),D1
	BEQ.S	L043E6
	MOVE.W	#$080F,D0
	SUB.W	D1,D0
	BLT.S	L043F0
	CMPI.W	#$000F,D0
	BGT.S	L043F0
	MOVE.L	2(A6,A1.L),D1
	TST.W	D1
	BNE.S	L043F0
	ASR.L	D0,D1
	TST.W	D1
	BNE.S	L043F0
	SWAP	D1
L043E6	ADDQ.W	#4,A1
	MOVE.W	D1,0(A6,A1.L)
	JMP	L047DC(PC)	;*/undomodify BRA L047DC
L043F0	MOVEM.L	D4-D7/A4,-(A7)
	MOVE.W	0(A6,A1.L),D4
	MOVE.L	2(A6,A1.L),D5
	ADDQ.W	#6,A1
	TST.B	2(A6,A1.L)
	BEQ.S	L04420
	BSR.S	RI_LN
	BNE	L042B0
	SUBQ.W	#6,A1
	MOVE.L	D5,2(A6,A1.L)
	MOVE.W	D4,0(A6,A1.L)
	JSR	RI_MULT(PC)	;*/undomodify BSR RI_MULT
	BNE	L042B0
	BRA	L044E4
L04420	TST.B	-4(A6,A1.L)
	BGE	L042AE
	BRA	OV_ERR
RI_LOG10:
	BSR.S	RI_LN
	BNE.S	L04444
	SUBQ.W	#6,A1
	MOVE.L	#$6F2DEC55,$02(A6,A1.L) ; 1/LN(10)
	MOVE.W	#$07FF,0(A6,A1.L)
	JSR	RI_MULT(PC)	;*/undomodify BSR RI_MULT
L04444	RTS
RI_LN:
	MOVEM.L	D4-D7/A4,-(A7)
	MOVE.W	0(A6,A1.L),D4
	MOVE.L	2(A6,A1.L),D5
	ADDQ.W	#6,A1
	BLE	OV_ERR
	MOVE.W	#$0800,D0
	MOVE.L	D5,D1
	LSR.L	#1,D5
	CMPI.L	#$5A82799A,D1	; floatingpoint 0.7071068
	BGT.S	L04476
	SUBQ.W	#1,D4
	ADDI.L	#$20000000,D5
	BCLR	#$1E,D1
	BRA.S	L0447E
L04476	BSET	#$1E,D5
	BSET	#$1F,D1
L0447E:
	TST.L	D1
	JSR	L04830(PC)	;*/undomodify BSR L04830
	SUBQ.W	#6,A1
	MOVE.L	D5,2(A6,A1.L)
	MOVE.W	#$0800,0(A6,A1.L)
	JSR	RI_DIV(PC)	;*/undomodify BSR RI_DIV
	BSR	L042B6
	JSR	RI_DUP(PC)	;*/undomodify BSR RI_DUP
	LEA	L04636(PC),A4	; (MJS)
	MOVE.W	D4,D7
	JSR	L04726(PC)	;*/undomodify BSR L04726
	JSR	RI_DIV(PC)	;*/undomodify BSR RI_DIV
	JSR	RI_MULT(PC)	;*/undomodify BSR RI_MULT
	BSR	L042CA
	SUBI.W	#$0800,D7
	SUBQ.W	#2,A1
	MOVE.W	D7,0(A6,A1.L)
	JSR	RI_FLOAT(PC)	;*/undomodify BSR RI_FLOAT
	SUBQ.W	#6,A1
	MOVE.L	#$58B90BFC,2(A6,A1.L) ; floatingpoint LN(2)
	MOVE.W	#$0800,0(A6,A1.L)
	BSR	L042CA
	BRA	L042AE
OV_ERR:
*/beginundoinsert
;	 MOVEQ	 #0,D0
;	 MOVE.L	 D0,2(A6,A1.L)	 ; set Result to Zero
;	 MOVE.W	 D0,0(A6,A1.L)
;	 BTST	 #1,$28002	 ; overflow enable ?
;	 BNE.S	 L044DA
*/endundoinsert
L044D8:
	MOVEQ	#-18,D0		; signal overflow
L044DA:
	BRA	L042B0
RI_EXP:
	MOVEM.L	D4-D7/A4,-(A7)
	MOVEQ	#0,D7
L044E4	JSR	L04692(PC)	;*/undomodify BSR L04692
	BNE.S	L044DA
	BSR	L042BA
	LEA	L04658(PC),A4	; (MJS)
	JSR	L04726(PC)	;*/undomodify BSR L04726
	ADDQ.W	#6,A1
	JSR	RI_MULT(PC)	;*/undomodify BSR RI_MULT
	JSR	RI_DUP(PC)	;*/undomodify BSR RI_DUP
	SUBQ.W	#6,A1
	JSR	RI_SWAP(PC)	;*/undomodify BSR RI_SWAP
	JSR	RI_SUB(PC)	;*/undomodify BSR RI_SUB
	JSR	RI_DIV(PC)	;*/undomodify BSR RI_DIV
	SUBQ.W	#6,A1
	MOVE.L	#$40000000,$02(A6,A1.L) ; floatinpoint 0.5
	MOVE.W	#$0800,0(A6,A1.L)
	JSR	RI_ADD(PC)	;*/undomodify BSR RI_ADD
	ADDQ.W	#1,D7
	ADD.W	D7,0(A6,A1.L)
	BRA	L042AE
RI_SQRT:
	MOVEM.L	D4-D7/A4,-(A7)
	MOVE.W	0(A6,A1.L),D6
	TST.L	2(A6,A1.L)
	BEQ	L042AE
	BLT.S	OV_ERR
	LEA	L04666(PC),A4	; (MJS)
	MOVE.W	D6,D7
	SUBI.W	#$0800,D7
	SUB.W	D7,0(A6,A1.L)
	ASR.W	#1,D7
	BCC.S	L04554
	LEA	L04674(PC),A4	; (MJS)
L04554	SWAP	D6
	JSR	L0472C(PC)	;*/undomodify BSR L0472C
	SWAP	D6
	ADD.W	D7,0(A6,A1.L)
	MOVEQ	#1,D7
L04562	JSR	RI_DUP(PC)	;*/undomodify BSR RI_DUP
	SUBQ.W	#6,A1
	MOVE.L	D5,2(A6,A1.L)
	MOVE.W	D6,0(A6,A1.L)
	JSR	RI_SWAP(PC)	;*/undomodify BSR RI_SWAP
	JSR	RI_DIV(PC)	;*/undomodify BSR RI_DIV
	JSR	RI_ADD(PC)	;*/undomodify BSR RI_ADD
	SUBQ.W	#1,0(A6,A1.L)
	DBF	D7,L04562
	BRA	L042AE
L04588	DC.W	0
	DC.L	0
L0458E	DC.W	$07FE		; -0.1666667
	DC.L	$AAAAAAB0
L04594	DC.W	$07FA		; 8.33333E-3
	DC.L	$444442DD
L0459A	DC.W	$07F4		; -1.984083E-4
	DC.L	$97FA15C1
L045A0	DC.W	$07EE		; 2.752397E-6
	DC.L	$5C5AE940
L045A6	DC.W	$07E7		; -2.386835E-8
	DC.L	$997C79C0
L045AC	DC.W	5
L045AE	DC.W	$0801		; 1.0
	DC.L	$40000000
L045B4	DC.W	$07FF		; -0.4446948
	DC.L	$8E287BC1
L045BA	DC.W	$07FB		; 1.597339E-2
	DC.L	$416D50CD
L045C0	DC.W	2
	DC.W	0
	DC.W	0
	DC.W	0
L045C8	DC.W	$07FD		; -.1113614
	DC.L	$8DF7443E
L045CE	DC.W	$07F7		; 1.075155E-3
	DC.L	$46761A70
L045D4	DC.W	2
L045D6	DC.W	$0801		; 1.732051
	DC.L	$6ED9EBA1
L045DC	DC.W	$0801		; 1
	DC.L	$40000000
L045E2	DC.W	1
L045E4	DC.W	$0800		; -1
	DC.L	$80000000
L045EA	DC.W	$0801		; 1.732051
	DC.L	$6ED9EBA1
L045F0	DC.W	1
L045F2	DC.W	$0803		; 4.32025
	DC.L	$451FBEDF
L045F8	DC.W	$0803		; 4.752226
	DC.L	$4C091DF8
L045FE	DC.W	$0801		; 1
	DC.L	$40000000
L04604	DC.W	2
	DC.W	0
	DC.W	0
	DC.W	0
L0460C	DC.W	$0801		; -1.440083
	DC.L	$A3D5AC3B
L04612	DC.W	$0800		; -.7200268
	DC.L	$A3D62904
L04618	DC.W	2
L0461A	DC.W	$0803		; -5.578874
	DC.L	$A6BCEEE1
L04620	DC.W	$0801		; 1
	DC.L	$40000000
L04626	DC.W	1
L04628	DC.W	$07FF		; -.4649062
	DC.L	$88FBE7C1
L0462E	DC.W	$07FA		; 1.360095E-2
	DC.L	$6F6B44F3
L04634	DC.W	1
L04636	DC.W	$0800		; .5
	DC.L	$40000000
L0463C	DC.W	$07FC		; 5.356752E-2
	DC.L	$6DB4CE83
L04642	DC.W	$07F5		; 2.972936E-4
	DC.L	$4DEF09CA
L04648	DC.W	2
L0464A	DC.W	$07FF		; .25
	DC.L	$40000000
L04650	DC.W	$07F9		; 5.950426E-3
	DC.L	$617DE4BA
L04656	DC.W	1
L04658	DC.W	$07FF		; .41731
	DC.L	$6AD4D402
L0465E	DC.W	$0800		; .59016
	DC.L	$4B8A5CE6
L04664	DC.W	1
L04666	DC.W	$0800		; .59016
	DC.L	$4B8A5CE6
L0466C	DC.W	$0800		; .83462
	DC.L	$6AD4D402
L04672	DC.W	1
L04674:
	ADDQ.W	#1,0(A6,A1.L)
	BSR.S	L04684
	BNE.S	L046EE
	SUBQ.W	#1,0(A6,A1.L)
	MOVEQ	#0,D0
	RTS
L04684:
	LEA	L04714(PC),A4
	CMPI.W	#$0810,0(A6,A1.L)
	BGT.S	OV_RTS
	BRA.S	L0469E
L04692:
	LEA	L04726(PC),A4
	CMPI.W	#$0809,0(A6,A1.L)
	BGT.S	OV_RTS
L0469E:
	JSR	RI_DUP(PC)	;*/undomodify BSR RI_DUP
	SUBQ.W	#6,A1
	MOVE.L	-(A4),$02(A6,A1.L)
	MOVE.W	-(A4),0(A6,A1.L)
	JSR	RI_MULT(PC)	;*/undomodify BSR RI_MULT
	TST.B	D7
	BNE.S	L046C0
	JSR	RI_NINT(PC)	;*/undomodify BSR RI_NINT
	MOVE.W	D1,D7
	JSR	RI_FLOAT(PC)	;*/undomodify BSR RI_FLOAT
	BRA.S	L046D6
L046C0:
	JSR	RI_INT(PC)	;*/undomodify BSR RI_INT
	ADD.W	D1,D7
	ADD.W	D1,0(A6,A1.L)
	ADDQ.W	#1,0(A6,A1.L)
	JSR	RI_FLOAT(PC)	;*/undomodify BSR RI_FLOAT
	SUBQ.W	#1,0(A6,A1.L)
L046D6:
	MOVE.W	0(A6,A1.L),D4
	MOVE.L	$02(A6,A1.L),D5
	BSR.S	L046F0
	SUBQ.W	#6,A1
	MOVE.L	D5,2(A6,A1.L)
	MOVE.W	D4,0(A6,A1.L)
	BRA.S	L046F0
OV_RTS:
*/beginundoinsert
;	 MOVEQ	 #0,D0
;	 MOVE.L	 D0,2(A6,A1.L)	 ; set result to 0
;	 MOVE.W	 D0,0(A6,A1.L)
;	 BTST	 #1,$28002	 ; overflow enable ?
;	 BNE.S	 L046EE
*/endundoinsert
L046EC:
	MOVEQ	#-18,D0		; signal overflow
L046EE:
	RTS
L046F0	SUBQ.W	#6,A1
	MOVE.L	-(A4),$02(A6,A1.L)
	MOVE.W	-(A4),0(A6,A1.L)
	JSR	RI_MULT(PC)	;*/undomodify BSR RI_MULT
	JMP	RI_SUB(PC)	;*/undomodify BRA RI_SUB
L04702	DC.W	$07F0		; -8.90891E-6
	DC.L	$B54442D1
L04708	DC.W	$0802		; 3.141602 =  PI
	DC.L	$64880000
L0470E	DC.W	$07FF		; .3183099
	DC.L	$517CC1B7
L04714	DC.W	$07F4		; -2.121944E-4
	DC.L	$90BFBE8F
L0471A	DC.W	$0800		; .6933594
	DC.L	$58C00000
L04720	DC.W	$0801		; 1.442695
	DC.L	$5C551D95
L04726	BSR.S	L0472C
	SUBQ.W	#6,A1
	BRA.S	L04734
L0472C	MOVE.W	0(A6,A1.L),D4
	MOVE.L	2(A6,A1.L),D5
L04734	MOVE.W	-(A4),D6
	MOVE.L	-(A4),2(A6,A1.L)
	MOVE.W	-(A4),0(A6,A1.L)
L0473E	SUBQ.W	#6,A1
	MOVE.L	D5,2(A6,A1.L)
	MOVE.W	D4,0(A6,A1.L)
	JSR	RI_MULT(PC)	;*/undomodify BSR RI_MULT
	SUBQ.W	#6,A1
	MOVE.L	-(A4),2(A6,A1.L)
	MOVE.W	-(A4),0(A6,A1.L)
	JSR	RI_ADD(PC)	;*/undomodify BSR RI_ADD
	SUBQ.W	#1,D6
	BGT.S	L0473E
	RTS
L04760	SUBQ.W	#6,A1
	CLR.W	4(A6,A1.L)
	MOVE.L	#$08004000,0(A6,A1.L) ; 0.5
	JSR	RI_ADD(PC)	;*/undomodify BSR RI_ADD
L04772	MOVE.W	0(A6,A1.L),D0
	MOVE.L	2(A6,A1.L),D1
	ADDQ.W	#2,A1
	CLR.L	0(A6,A1.L)
	SUBI.W	#$0800,D0
	BGE.S	L04788
	MOVEQ	#0,D0
L04788	SUBI.W	#$001F,D0
	NEG.W	D0
	ASR.L	D0,D1
	MOVE.L	D1,0(A6,A1.L)
	RTS
RI_NINT:
	BSR.S	L04760
	BRA.S	L0479C
RI_INT:
	BSR.S	L04772
L0479C	ADDQ.L	#2,A1
	CMPI.W	#$0010,D0
	BLT.S	L047B4
	BRA.S	L047B0
RI_NLINT:
	BSR.S	L04760
	BRA.S	L047AC
L047AA:
	BSR.S	L04772
L047AC	TST.W	D0
	BLT.S	L047B4
L047B0	MOVEQ	#0,D0
	RTS
L047B4:
*/beginundoinsert
;	 BTST	 #1,$28002	 ; overflow enable ?
;	 BNE.S	 L047B0		 ; don't set flag
*/endundoinsert
	MOVEQ	#-18,D0		; overflow error
	RTS
RI_FLOAT:
	MOVE.W	#$081F,D0
	MOVE.W	0(A6,A1.L),D1
	ADDQ.W	#2,A1
	EXT.L	D1
	JMP	L04830(PC)	;*/undomodify BRA.S L04830
				;*/undomodify nop
L047C8:
	SUBQ.W	#6,A1
	CLR.W	4(A6,A1.L)
	MOVE.L	#$08014000,0(A6,A1.L) ; 1.0
	JSR	RI_SWAP(PC)	;*/undomodify BSR RI_SWAP
	RTS
L047DC	MOVEM.L	D4-D6,-(A7)
	MOVE.W	0(A6,A1.L),D6
	ADDQ.W	#2,A1
	BGE.S	L047F2
	NEG.W	D6
	BSR.S	L047C8
	JSR	RI_DIV(PC)	;*/undomodify BSR RI_DIV
	BNE.S	L04824
L047F2	BSR.S	L047C8
L047F4	LSR.W	#1,D6
	BCC.S	L04810
	MOVE.W	0(A6,A1.L),D5
	MOVE.L	$02(A6,A1.L),D4
	JSR	RI_MULT(PC)	;*/undomodify BSR RI_MULT
	SUBQ.W	#6,A1
	BNE.S	L04822
	MOVE.L	D4,2(A6,A1.L)
	MOVE.W	D5,0(A6,A1.L)
L04810	TST.W	D6
	BEQ.S	L04820
	JSR	RI_DUP(PC)	;*/undomodify BSR RI_DUP
	JSR	RI_MULT(PC)	;*/undomodify BSR RI_MULT
	BNE.S	L04822
	BRA.S	L047F4
L04820	MOVEQ	#0,D0
L04822	ADDQ.W	#6,A1
L04824	MOVEM.L	(A7)+,D4-D6
	RTS
RI_SUB:
	JSR	RI_NEG(PC)	;*/undomodify BSR RI_NEG
	BRA.S	RI_ADD
L04830	SUBQ.W	#6,A1
	MOVEQ	#0,D2
	TST.L	D1
	BRA.S	L04870
RI_ADD:
	ADDQ.W	#6,A1
	MOVE.W	0(A6,A1.L),D0
	SUB.W	-6(A6,A1.L),D0
	BGE.S	L0485C
	NEG.W	D0
	CMPI.W	#$0020,D0
	BGE.S	L048AE
	MOVE.L	$02(A6,A1.L),D1
	BSR.S	L048C2
	MOVE.W	-6(A6,A1.L),D0
	ADD.L	-4(A6,A1.L),D1
	BRA.S	L04870
L0485C	CMPI.W	#$0020,D0
	BGE.S	L048BE
	MOVE.L	-4(A6,A1.L),D1
	BSR.S	L048C2
	MOVE.W	0(A6,A1.L),D0
	ADD.L	2(A6,A1.L),D1
L04870	BVS.S	L04898
	BEQ.S	L048AA
	MOVE.L	D1,D3
	ADD.L	D3,D3
	BVS.S	L048B6
	SUB.L	D2,D3
	BVC.S	L04880
	ADD.L	D2,D3
L04880	SUBQ.W	#1,D0
	MOVE.L	D3,D1
	MOVEQ	#$10,D2
L04886	MOVE.L	D1,D3
	ASL.L	D2,D3
	BVS.S	L04892
	MOVE.L	D3,D1
	SUB.W	D2,D0
	BLT.S	L048A6
L04892	ASR.L	#1,D2
	BNE.S	L04886
	BRA.S	L048B6
L04898	ROXR.L	#1,D1
	ADDQ.W	#1,D0
	BTST	#12,D0
	BEQ.S	L048B6
	MOVEQ	#-$12,D0 	;*/undomodify BRA OV_RTS
	RTS			;*/restorecode
L048A6	NEG.W	D0
	ASR.L	D0,D1
L048AA	CLR.W	D0
	BRA.S	L048B6
L048AE	MOVE.W	-6(A6,A1.L),D0
	MOVE.L	-4(A6,A1.L),D1
L048B6	MOVE.L	D1,2(A6,A1.L)
	MOVE.W	D0,0(A6,A1.L)
L048BE	MOVEQ	#0,D0
	RTS
L048C2	MOVEQ	#0,D2
	TST.W	D0
	BEQ.S	L048DC
	ASR.L	D0,D1
	BCC.S	L048DC
	ADDQ.L	#1,D1
	MOVEQ	#1,D2
	SUBQ.W	#1,D0
	BGT.S	L048DC
	BCLR	#0,D1
	BEQ.S	L048DC
	MOVEQ	#-1,D2
L048DC	RTS
RI_MULT:
	MOVEM.L	D4-D6,-(A7)
	SF	D5
	SF	D6
	MOVE.L	2(A6,A1.L),D3
	BGE.S	L048F4
	JSR	RI_NEG(PC)	;*/undomodify BSR RI_NEG
	MOVE.L	D1,D3
	ST	D6
L048F4	ADDQ.W	#6,A1
	MOVE.L	2(A6,A1.L),D1
	BGT.S	L04904
	BEQ.S	L0496A
	JSR	RI_NEG(PC)	;*/undomodify BSR RI_NEG
	ST	D5
L04904	LSL.L	#1,D1
	MOVE.L	D1,D0
	SWAP	D0
	LSL.L	#1,D3
	MOVE.L	D3,D2
	SWAP	D2
	MOVE.W	D3,D4
	MULU	D1,D4
	CLR.W	D4
	SWAP	D4
	MULU	D0,D3
	MULU	D2,D1
	ADD.L	D4,D3
	ADD.L	D3,D1
	MOVE.W	D1,D4
	CLR.W	D1
	SWAP	D1
	ROXR.W	#1,D1
	ROXL.L	#1,D1
	MULU	D0,D2
	MOVE.W	0(A6,A1.L),D0
	ADD.W	-6(A6,A1.L),D0
	SUBI.W	#$0800,D0
	BLT.S	L04956
	ADD.L	D2,D1
	BMI.S	L04948
	BEQ.S	L04956
	SUBQ.W	#1,D0
	BLT.S	L04956
	ASL.W	#1,D4
	BRA.S	L0494A
L04948	LSR.L	#1,D1
L0494A	MOVEQ	#0,D4
	ADDX.L	D4,D1
	BPL.S	L0495A
	LSR.L	#1,D1
	ADDQ.W	#1,D0
	BRA.S	L0495A
L04956	CLR.W	D0
	CLR.L	D1
L0495A	MOVE.L	D1,2(A6,A1.L)
	MOVE.W	D0,0(A6,A1.L)
	CMP.B	D5,D6
	BEQ.S	L0496A
	JSR	RI_NEG(PC)	;*/undomodify BSR RI_NEG
L0496A:
	MOVEM.L	(A7)+,D4-D6
	BTST	#4,0(A6,A1.L)
	BNE.S	L0497A		;*undomodify BNE.S OV_RTS
	MOVEQ	#0,D0
	RTS
L0497A:
	MOVEQ	#-$12,D0 	;*/restorecode
	RTS			;*/restorecode
L0497E:
RI_DIV:
	MOVE.L	D4,-(A7)
	MOVE.L	D5,-(A7)
	SF	D5		; Signal +
	MOVE.L	2(A6,A1.L),D2	; mantissa 1
	BGT.S	L04994
	BEQ.S	RI_A1_OVerflow	; X/0
	JSR	RI_NEG(PC)	;*/undomodify BSR.S RI_NEG
				;*/undomodify nop
	MOVE.L	D1,D2
	ST	D5		; signal -
L04994:
	ADDQ.W	#6,A1
	MOVE.L	2(A6,A1.L),D1	; mantissa 2
	BGT.S	L049A4
	BEQ.S	L049F6		; 0/x is simple
	JSR	RI_NEG(PC)	;*/undomodify BSR.S RI_NEG
				;*/undomodify nop
	NOT.B	D5		; signal +/- depending on
				; first argument
L049A4	MOVE.W	0(A6,A1.L),D0	; exponent 2
	ADDI.W	#$0800,D0
	SUB.W	-6(A6,A1.L),D0	; eponent 1
	BGE.S	L049B8
	CLR.W	D0
	CLR.L	D3
	BRA.S	L049E6
L049B8	BTST	#12,D0
	BNE.S	RI_OVERFlow	; overflow
	MOVEQ	#$1F,D4
	MOVEQ	#0,D3		; D2 / D1 -> D3
L049C2	SUB.L	D2,D1
	BCS.S	L049CA
	BSET	D4,D3
	BRA.S	L049CC
L049CA	ADD.L	D2,D1
L049CC	ADD.L	D1,D1
	DBEQ	D4,L049C2
	TST.L	D3
	BLT.S	L049DE
	SUB.L	D1,D2
	BHI.S	L049E6
	ADDQ.L	#1,D3
	BVC.S	L049E6
L049DE	ADDQ.W	#1,D0
	LSR.L	#1,D3
	MOVEQ	#0,D1
	ADDX.L	D1,D3
L049E6:
	MOVE.L	D3,2(A6,A1.L)	; Result mantissa
	MOVE.W	D0,0(A6,A1.L)	; exponent
	TST.B	D5
	BEQ.S	L049F6
	JSR	RI_NEG(PC)	;*/undomodify BSR.S RI_NEG
				;*/undomodify nop
L049F6:
	MOVEQ	#0,D0
L049F8:
	MOVE.L	(A7)+,D5
	MOVE.L	(A7)+,D4
	TST.L	D0
	RTS
L04A00:
RI_A1_OVerflow:
	ADDQ.W #6,A1
RI_OVERFlow:
*/beginundoinsert
;	 MOVE.W	 #$0FEB,0(A6,A1.L) ; Make a big number
;	 MOVEQ	 #0,D0
;	 BTST	 #1,$28002	 ; overflow enable ?
;	 BNE.S	 L049F8
*/endundoinsert
L04A02:
	MOVEQ	#-$12,D0 	; overflow error
	BRA.S	L049F8
L04A06:
RI_ABS:
	TST.B	2(A6,A1.L)
	BGE.S	L04A46
L04A0C:
RI_NEG:
	MOVE.L	2(A6,A1.L),D1
	NEG.L	D1
	BVS.S	L04A2C
	CMPI.L	#$C0000000,D1
	BNE.S	L04A42
	LSL.L	#1,D1
	SUBQ.W	#1,0(A6,A1.L)
	BGE.S	L04A42
	ASR.L	#1,D1
	CLR.W	0(A6,A1.L)
	BRA.S	L04A42
L04A2C	LSR.L	#1,D1
	ADDQ.W	#1,0(A6,A1.L)
	BTST	#4,0(A6,A1.L)
	BEQ.S	L04A42
	SUBQ.W	#1,0(A6,A1.L)
	MOVEQ	#-1,D1
	LSR.L	#1,D1
L04A42	MOVE.L	D1,2(A6,A1.L)
L04A46	MOVEQ	#0,D0
	RTS
RI_DUP:
	SUBQ.W	#6,A1
L04A4C:
	MOVE.W	6(A6,A1.L),0(A6,A1.L)
	MOVE.L	8(A6,A1.L),2(A6,A1.L)
	MOVEQ	#0,D0
	RTS
L04A5C:
RI_SWAP:
	MOVE.W	0(A6,A1.L),D2
	MOVE.L	2(A6,A1.L),D1
	JSR	L04A4C(PC)	;*/undomodify BSR.S L04A4C
				;*/undomodify nop
	MOVE.W	D2,6(A6,A1.L)
	MOVE.L	D1,8(A6,A1.L)
	MOVEQ	#0,D0
	RTS
; --------------------------------------------------------------
;*/endfile
