; Ullrich von Bassewitz, 1.12.2000
;
- .export _printf
- .import _stdout, pushax, addysp, _vfprintf
- .importzp sp, ptr1
+ .export _printf
+ .import _stdout, pushax, addysp, _vfprintf
+ .importzp sp, ptr1
- .macpack generic
+ .macpack generic
; ----------------------------------------------------------------------------
; Data
.bss
-ParamSize: .res 1 ; Number of parameter bytes
+ParamSize: .res 1 ; Number of parameter bytes
; ----------------------------------------------------------------------------
; Code
_printf:
- sty ParamSize ; Number of param bytes passed in Y
+ sty ParamSize ; Number of param bytes passed in Y
; We are using a (hopefully) clever trick here to reduce code size. On entry,
-; the stack pointer points to the last pushed parameter of the variable
+; the stack pointer points to the last pushed parameter of the variable
; parameter list. Adding the number of parameter bytes, would result in a
; pointer that points *after* the Format parameter.
; Since we have to push stdout anyway, we will do that here, so
; be pushed next.
;
- lda _stdout
- ldx _stdout+1
- jsr pushax
+ lda _stdout
+ ldx _stdout+1
+ jsr pushax
; Now calculate the va_list pointer, which does points to Format
- lda sp
- ldx sp+1
- add ParamSize
- bcc @L1
- inx
-@L1: sta ptr1
- stx ptr1+1
+ lda sp
+ ldx sp+1
+ add ParamSize
+ bcc @L1
+ inx
+@L1: sta ptr1
+ stx ptr1+1
; Push Format
- ldy #1
- lda (ptr1),y
- tax
- dey
- lda (ptr1),y
- jsr pushax
+ ldy #1
+ lda (ptr1),y
+ tax
+ dey
+ lda (ptr1),y
+ jsr pushax
; Load va_list (last and __fastcall__ parameter to vfprintf)
- lda ptr1
- ldx ptr1+1
+ lda ptr1
+ ldx ptr1+1
; Call vfprintf
- jsr _vfprintf
+ jsr _vfprintf
; Cleanup the stack. We will return what we got from vfprintf
- ldy ParamSize
- jmp addysp
+ ldy ParamSize
+ jmp addysp