# HG changeset patch # User William Astle # Date 1698726347 21600 # Node ID 65cb0a0297b3330d87e4ae46c688a525b0d6169c # Parent eecb576c76c6454388c791567ed4bd64ca0fe6af Make integer to floating point conversion use extra bits in fp accumulator diff -r eecb576c76c6 -r 65cb0a0297b3 src/fps.s --- a/src/fps.s Mon Oct 30 22:25:04 2023 -0600 +++ b/src/fps.s Mon Oct 30 22:25:47 2023 -0600 @@ -898,24 +898,24 @@ sta fpa0+fpa.sign ldd zero ; negate the value and store it to temporary location subd val.int+2,x - std fpaextra+2 + std fpa0+fpa.extra+2 ldd zero sbcb val.int+1,x sbca val.int,x - std fpaextra + std fpa0+fpa.extra bra fps_fromint0 ; go finish the conversion fps_fromuint clr fpa0+fpa.sign ; set sign to positive ldd val.int+2,x ; copy value to temporary accumulator - std fpaextra+2 + std fpa0+fpa.extra+2 ldd val.int,x - std fpaextra + std fpa0+fpa.extra fps_fromint0 ldd zero ; zero out destination std fpa0+fpa.sig std fpa0+fpa.sig+2 sta fpa0+fpa.sig+4 ldd #0x5f20 ; set exponent for decimal right of significand and 32 bit shifts sta fpa0+fpa.exp ; save exponent - stb fpaextra+5 ; save counter + stb fpa0+fpa.extra+4 ; save counter bra fps_fromint2 ; skip digit check on the first iteration since none need adjustment fps_fromint1 ldu #fpa0+fpa.sig ; point to significand bsr fps_fromint3 ; do adjustments, 5 bytes worth of digits @@ -923,16 +923,16 @@ bsr fps_fromint3 bsr fps_fromint3 bsr fps_fromint3 -fps_fromint2 lsl fpaextra+3 ; shift left - rol fpaextra+2 - rol fpaextra+1 - rol fpaextra +fps_fromint2 lsl fpa0+fpa.extra+3 ; shift left + rol fpa0+fpa.extra+2 + rol fpa0+fpa.extra+1 + rol fpa0+fpa.extra rol fpa0+fpa.sig+4 rol fpa0+fpa.sig+3 rol fpa0+fpa.sig+2 rol fpa0+fpa.sig+1 rol fpa0+fpa.sig - dec fpaextra+5 ; done all digits? + dec fpa0+fpa.extra+4 ; done all digits? bne fps_fromint1 ; brif not lda #valtype_float ; set result type to floating point sta val.type,y