home *** CD-ROM | disk | FTP | other *** search
- */beginfile ARITH_asm
- ; --------------------------------------------------------------
- ; ARITH_asm - QDOS arithmetic routines
- ; - last modified 22/10/95
- ; QDOS-Amiga sources by Rainer Kowallik
- ; ...some changes by Mark J Swift
- ; --------------------------------------------------------------
- ;*/beginoverlay
- ;*/note routine moved for RI.EXEC fix
- 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
- 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
- ;*/endoverlay
- MOVEQ #0,D0
- MOVE.B (A5)+,D0
- BEQ.S L041F8
- L041C0 CMPI.B #$30,D0
- BHI.S L041CC
- BSR.S L041FE
- BNE.S L041F8
- BRA.S L041BA
- 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
- L041F8 MOVEM.L (A7)+,D1-D3/A0/A2-A3/A5
- RTS
- L041FE MOVE.W JMP_RI_Exec-2(PC,D0.W),D0
- JMP JMP_RI_Exec(PC,D0.W)
- 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
-