changeset 65:bb9fe2bd4894

Fix display of integer values
author William Astle <lost@l-w.ca>
date Sat, 22 Apr 2023 20:06:05 -0600
parents 2205c3c59a33
children 02080e77386f
files src/lwbasic.s
diffstat 1 files changed, 18 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/src/lwbasic.s	Sat Apr 22 08:47:54 2023 -0600
+++ b/src/lwbasic.s	Sat Apr 22 20:06:05 2023 -0600
@@ -1562,12 +1562,17 @@
                 lda #0x20                       ; default sign (positive)
                 ldb val0.int                    ; is it negative?
                 bpl cmd_printint0               ; brif not
+		ldd zero			;
+		subd val0.int+2
+		std val0.int+2
+		ldd zero
+		sbcb val0.int+1
+		sbca val0.int
+		std val0.int
                 lda #'-                         ; negative sign
 cmd_printint0   sta ,y+                         ; save sign
                 ldu #cmd_printintpc             ; point to positive constant table
                 ldx #10                         ; there are 10 constants to process
-                tsta                            ; negative value?
-                bmi cmd_printint3               ; brif so - start with addition loop
 ; subtraction loop - positive residue
 cmd_printint1   lda #'0-1                       ; initialize digit
                 sta ,y
@@ -1580,26 +1585,17 @@
                 sbca ,u
                 std val0.int
                 bcc cmd_printint2               ; brif we didn't go negative
+		ldd val0.int+2			; undo last subtract
+		addd 2,u
+		std val0.int+2
+		ldd val0.int
+		adcb 1,u
+		adca ,u
+		std val0.int
                 leay 1,y                        ; move to next digit in buffer
                 leau 4,u                        ; move to next constant
                 leax -1,x                       ; done all constants?
-                beq cmd_printint5               ; brif so - handle cleanup
-; addition loop - negative residue
-cmd_printint3   lda #'0-1                       ; initialize digit
-                sta ,y
-cmd_printint4   inc ,y                          ; bump digit
-                ldd val0.int+2                  ; add the constant to the residue
-                addd 2,u
-                std val0.int+2
-                ldd val0.int
-                adcb 1,u
-                adca ,u
-                std val0.int
-                bcc cmd_printint3               ; brif we didn't go positive (subtraction loop)
-                leay 1,y                        ; move to next digit
-                leau 4,u                        ; move to next constant
-                leax -1,x                       ; done all digits?
-                bne cmd_printint1               ; brif not - go do a subtraction loop
+                bne cmd_printint1               ; brif not - done all
 cmd_printint5   clr ,y                          ; NUL terminate the string
                 leax 1,s                        ; point past the sign
 cmd_printint6   lda ,x+                         ; get digit
@@ -1607,7 +1603,7 @@
                 cmpa #'0                        ; is it a zero?
                 beq cmd_printint6               ; brif so - skip it
 cmd_printint7   lda ,s                          ; get the sign
-                sta ,-x                         ; put it at the start of the number
+                sta ,--x                        ; put it at the start of the number
                 jsr console_outstr              ; display the number
                 leas 12,s                       ; clean up stack
                 bra cmd_printnext               ; go print the next thing
@@ -1729,7 +1725,8 @@
                 bra eval_number0                ; deal with next input
 eval_number2    cmpa #'+                        ; unary +?
                 beq eval_number0                ; brif so - skip it
-eval_number5    beq eval_float                  ; brif decimal - force float
+eval_number5    cmpa #'.			; decimal point?
+		beq eval_float                  ; brif decimal - force float
                 cmpa #'0                        ; is it a number?
                 blo eval_numberr                ; brif below digit
                 cmpa #'9                        ; is it still a number?