From e16118a331b123baa65e6ad51d256c8bd86724f4 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 21 Mar 2020 15:53:40 +0100 Subject: [PATCH] reversed botched attempt to increase FP division precission --- c64/basic/math/bb12.div_FAC2_FAC1.s | 5 +---- c64/basic/math/div_FAC1_denorm.s | 15 ++++++++------- c64/basic/math/div_mantissas.s | 18 +++++------------- 3 files changed, 14 insertions(+), 24 deletions(-) diff --git a/c64/basic/math/bb12.div_FAC2_FAC1.s b/c64/basic/math/bb12.div_FAC2_FAC1.s index 563422b1..583572dc 100644 --- a/c64/basic/math/bb12.div_FAC2_FAC1.s +++ b/c64/basic/math/bb12.div_FAC2_FAC1.s @@ -37,7 +37,7 @@ div_FAC2_FAC1: beq_16 set_FAC1_zero // Multiply signs - + lda FAC1_sign eor FAC2_sign sta FAC1_sign @@ -85,9 +85,6 @@ div_FAC2_FAC1: lda FAC2_mantissa+0 sta FAC1_mantissa+0 - lda #$00 - sta FACOV - // Normalize and quit jmp normal_FAC1 diff --git a/c64/basic/math/div_FAC1_denorm.s b/c64/basic/math/div_FAC1_denorm.s index fb1150f9..228eb88f 100644 --- a/c64/basic/math/div_FAC1_denorm.s +++ b/c64/basic/math/div_FAC1_denorm.s @@ -3,17 +3,21 @@ // #LAYOUT# * * #IGNORE // -// Math package - denormalize FAC1 mantissa and adapt its exponent accordingly, -// so that division is more precise +// Math package - denormalize FAC1 mantissa and adapt its exponent accordingly // // XXX test this div_FAC1_denorm: + // Set FACOV to 0, no need for increased precision here + + lda #$00 + sta FACOV + // Start by moving whole bytes, if possible - lda FACOV + lda FAC1_mantissa+3 bne div_FAC1_denorm_by_bit // branch if last byte of mantissa is non-zero lda FAC1_exponent @@ -27,8 +31,6 @@ div_FAC1_denorm: // Move mantissa bytes - lda FAC1_mantissa+3 - sta FACOV lda FAC1_mantissa+2 sta FAC1_mantissa+3 lda FAC1_mantissa+1 @@ -42,7 +44,7 @@ div_FAC1_denorm: div_FAC1_denorm_by_bit: - lda FACOV + lda FAC1_mantissa+3 and #$01 bne div_FAC1_denorm_done // branch if lowest bit of mantissa is already 1 @@ -61,7 +63,6 @@ div_FAC1_denorm_by_bit: ror FAC1_mantissa+1 ror FAC1_mantissa+2 ror FAC1_mantissa+3 - ror FACOV bcc div_FAC1_denorm_by_bit // branch always diff --git a/c64/basic/math/div_mantissas.s b/c64/basic/math/div_mantissas.s index d7771710..06c274aa 100644 --- a/c64/basic/math/div_mantissas.s +++ b/c64/basic/math/div_mantissas.s @@ -2,10 +2,10 @@ // #LAYOUT# * BASIC_0 #TAKE // #LAYOUT# * * #IGNORE -// Math package - mantissa division, based on code by Verz +// Math package - 32-bit mantissa division, based on code by Verz // -// divident: FAC2_mantissa, divisor: FAC1_mantissa, result: FAC2_mantissa, remainder: RESHO -// temporary storage: INDEX+0, INDEX+1, INDEX+2, INDEX+3, .Y +// divident: FAC2_mantissa, divisor: FAC1_mantissa (without FACOV), result: FAC2_mantissa, remainder: RESHO +// temporary storage: INDEX+0, INDEX+1, INDEX+2, INDEX+3 // // RESHO (remainder) should be set to 0 before // @@ -15,7 +15,7 @@ div_mantissas: - ldx #40 // repeat for each bit + ldx #32 // repeat for each bit // FALLTROUGH @@ -24,13 +24,12 @@ div_mantissas_loop: // Multiply divident by 2, msb -> Carry asl FAC2_mantissa+3 - rol FAC2_mantissa+2 + rol FAC2_mantissa+2 rol FAC2_mantissa+1 rol FAC2_mantissa+0 // Multiply remainder by 2, lsb <- Carry - rol RESHO+4 rol RESHO+3 rol RESHO+2 rol RESHO+1 @@ -39,10 +38,6 @@ div_mantissas_loop: // Subtract divisor from the remainder, result to INDEX and .Y sec - lda RESHO+4 - sbc FACOV - tay - lda RESHO+3 sbc FAC1_mantissa+3 sta INDEX+3 @@ -63,9 +58,6 @@ div_mantissas_loop: // Save subtraction result as new remainder - tya - sta RESHO+4 - lda INDEX+3 sta RESHO+3