From afff478793afd71c055289deef613c05bc5ff56a Mon Sep 17 00:00:00 2001 From: Stephen Heumann Date: Tue, 18 Apr 2023 22:27:49 -0500 Subject: [PATCH] More small size optimizations for (f)printf. --- stdio.asm | 77 ++++++++++++++++++++++++------------------------------- 1 file changed, 33 insertions(+), 44 deletions(-) diff --git a/stdio.asm b/stdio.asm index b2af261..6601fba 100644 --- a/stdio.asm +++ b/stdio.asm @@ -1322,11 +1322,10 @@ fprintf start sta stream+2 phy restore return address/data bank phx + ldx stream plb - lda >stream+2 verify that stream exists - pha - lda >stream - pha + pha verify that stream exists + phx jsl ~VerifyStream bcc lb1 lda #EIO @@ -3327,11 +3326,10 @@ vfprintf start sta stream+2 phy restore return address/data bank phx + ldx stream plb - lda >stream+2 verify that stream exists - pha - lda >stream - pha + pha verify that stream exists + phx jsl ~VerifyStream bcc lb1 lda #EIO @@ -4165,10 +4163,13 @@ argp equ 7 argument pointer ; ; For signed numbers, if the value is negative, use the sign flag ; - lda ~isLongLong handle long long values + lda ~isLong handle long and long long values + beq sn0a + ldy #2 + lda ~isLongLong beq sn0 ldy #6 - lda [argp],Y +sn0 lda [argp],Y bpl cn0 sec ldx #0 @@ -4179,6 +4180,8 @@ argp equ 7 argument pointer txa sbc [argp],Y sta [argp],Y + lda ~isLongLong + beq sn2 iny iny txa @@ -4190,19 +4193,6 @@ argp equ 7 argument pointer sbc [argp],Y sta [argp],Y bra sn2 -sn0 lda ~isLong handle long values - beq sn0a - ldy #2 - lda [argp],Y - bpl cn0 - sec - lda #0 - sbc [argp] - sta [argp] - lda #0 - sbc [argp],Y - sta [argp],Y - bra sn2 sn0a lda ~isByte handle (originally) byte-size values beq sn1 lda [argp] @@ -4249,13 +4239,12 @@ cn1 lda [argp] push an int value cn1a pha cn2 ph4 #~str push the string addr ph2 #l:~str push the string buffer length - ph2 #0 do an unsigned conversion lda ~isLongLong do the proper conversion beq cn2a - pla jsr ~ULongLong2Dec bra pd1 -cn2a lda ~isLong +cn2a ph2 #0 do an unsigned conversion + lda ~isLong beq cn3 _Long2Dec bra pd1 @@ -4669,36 +4658,36 @@ bitsPerChar ds 2 bits per output character using ~printfCommon argp equ 7 argument pointer - ph4