;
; int __fastcall__ vsprintf (char* Buf, const char* Format, va_list ap);
;
; Ullrich von Bassewitz, 2009-09-26
;

        .export         _vsprintf
        .import         pushw0sp, staxysp
        .import         vsnprintf


; ----------------------------------------------------------------------------
; vsprintf - formatted output into a buffer
;
; int __fastcall__ vsprintf (char* buf, const char* format, va_list ap);
;


_vsprintf:
        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 0x7FFF (INT_MAX) as size.

        jsr     pushw0sp        ; Get format and push it
        lda     #$FF
        ldx     #$7F            ; INT_MAX
        ldy     #2
        jsr     staxysp

; Contine by jumping to vsnprintf, which expects ap on the CPU stack and will 
; cleanup the C stack

        jmp     vsnprintf

