reversed botched attempt to increase FP division precission

This commit is contained in:
FeralChild64 committed 2020-03-21 15:53:40 +01:00
1 parent 2c76825286
commit e16118a331
3 files changed
+14 -24

No files matched your search

+1 -4
View File
@@ -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
+8 -7
View File
@@ -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
+5 -13
View File
@@ -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