From: uz Date: Mon, 28 Sep 2009 17:47:33 +0000 (+0000) Subject: Fixed two bugs, made the sources somewhat better readable. X-Git-Tag: V2.13.0rc1~2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=6c8fab8e51c9775a8a3ce3a98e924d7c10625392;p=cc65 Fixed two bugs, made the sources somewhat better readable. git-svn-id: svn://svn.cc65.org/cc65/trunk@4256 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/common/vsnprintf.s b/libsrc/common/vsnprintf.s index 2e5f8a056..10dc7fa1d 100644 --- a/libsrc/common/vsnprintf.s +++ b/libsrc/common/vsnprintf.s @@ -18,11 +18,11 @@ ; Static data for the _vsnprintf routine ; -outdesc: ; Static outdesc structure - .word 0 ; ccount - .word out ; Output function pointer - .word 0 ; ptr - .word 0 ; Buffer size +outdesc: ; Static outdesc structure +ccount: .word 0 ; ccount +func: .word out ; Output function pointer +bufptr: .word 0 ; ptr +bufsize:.word 0 ; Buffer size .code @@ -40,12 +40,12 @@ out: ; Calculate the space left in the buffer. If no space is left, don't copy ; any characters - lda outdesc+6 ; Low byte of buffer size + lda bufsize ; Low byte of buffer size sec - sbc outdesc+0 ; Low byte of bytes already written + sbc ccount+0 ; Low byte of bytes already written sta ptr1 - lda outdesc+7 - sbc outdesc+1 + lda bufsize+1 + sbc ccount+1 sta ptr1+1 bcs @L0 ; Space left lda #0 @@ -55,14 +55,14 @@ out: ; Replace the pointer to d by a pointer to the write position in the buffer ; for the call to memcpy that follows. -@L0: lda outdesc+0 +@L0: lda bufptr+0 clc - adc outdesc+4 + adc ccount+0 ldy #4 sta (sp),y - lda outdesc+1 - adc outdesc+5 + lda bufptr+1 + adc ccount+1 iny sta (sp),y @@ -74,19 +74,19 @@ out: pha clc - adc outdesc+0 - sta outdesc+0 + adc ccount+0 + sta ccount+0 txa - adc outdesc+1 - sta outdesc+1 + adc ccount+1 + sta ccount+1 pla ; if (Count > Left) Count = Left; - cmp ptr1 - bne @L1 cpx ptr1+1 -@L1: bcs @L2 + bne @L1 + cmp ptr1 +@L1: bcc @L2 lda ptr1 ldx ptr1+1 @@ -107,8 +107,8 @@ _vsnprintf: ; Setup the outdesc structure lda #0 - sta outdesc - sta outdesc+1 ; Clear ccount + sta ccount+0 + sta ccount+1 ; Clear ccount ; Get the size parameter and replace it by a pointer to outdesc. This is to ; build a stack frame for the call to _printf. @@ -128,22 +128,22 @@ _vsnprintf: lda #>outdesc sta (sp),y -; Write size-1 to the outdesc structure +; Write size-1 to outdesc.uns ldx ptr1 ldy ptr1+1 dex bne L1 dey -L1: stx outdesc+6 - sty outdesc+7 +L1: stx bufsize+0 + sty bufsize+1 -; Copy buf to the outdesc structure +; Copy buf to the outdesc.ptr ldy #5 jsr ldaxysp - sta outdesc+4 - stx outdesc+5 + sta bufptr+0 + stx bufptr+1 ; Restore low byte of ap and call _printf @@ -152,19 +152,19 @@ L1: stx outdesc+6 ; Terminate the string - lda outdesc+0 - ldx outdesc+1 - cpx outdesc+7 + lda ccount+0 + ldx ccount+1 + cpx bufsize+1 bne L2 - cmp outdesc+6 + cmp bufsize+0 L2: bcc L3 - lda outdesc+6 - ldx outdesc+7 + lda bufsize+0 + ldx bufsize+1 clc -L3: adc outdesc+4 +L3: adc bufptr+0 sta ptr1 txa - adc outdesc+5 + adc bufptr+1 sta ptr1+1 lda #0 @@ -173,8 +173,8 @@ L3: adc outdesc+4 ; Return the number of bytes written and drop buf - lda outdesc ; ccount - ldx outdesc+1 + lda ccount+0 + ldx ccount+1 jmp incsp2 ; Bail out if size is zero diff --git a/libsrc/common/vsprintf.s b/libsrc/common/vsprintf.s index c6084bdda..4c265ec22 100644 --- a/libsrc/common/vsprintf.s +++ b/libsrc/common/vsprintf.s @@ -1,33 +1,32 @@ ; -; int vsprintf (char* Buf, const char* Format, va_list ap); +; int __fastcall__ vsprintf (char* Buf, const char* Format, va_list ap); ; ; Ullrich von Bassewitz, 2009-09-26 ; .export _vsprintf - .import ldax0sp, pushax, staxysp + .import pushw0sp, staxysp .import _vsnprintf ; ---------------------------------------------------------------------------- ; vsprintf - formatted output into a buffer ; -; int vsprintf (char* buf, const char* format, va_list ap); +; int __fastcall__ vsprintf (char* buf, const char* format, va_list ap); ; _vsprintf: - pha ; Save low byte of ap + pha ; Save low byte of ap txa pha ; Save high byte of op ; Build a stackframe for vsnprintf. To do that, we move format one word down, -; and store 0x7FF (INT_MAX) as size. +; and store 0x7FFF (INT_MAX) as size. - jsr ldax0sp ; Get format - jsr pushax ; And push it - lda #$7F - ldx #$FF ; INT_MAX + jsr pushw0sp ; Get format and push it + lda #$FF + ldx #$7F ; INT_MAX ldy #2 jsr staxysp