reversed botched attempt to increase FP division precission
This commit is contained in:
1 parent
2c76825286
commit
e16118a331
3 files changed
+14
-24
No files matched your search
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in new issue
Block a user