mirror of
https://github.com/cc65/cc65.git
synced 2024-12-27 00:29:31 +00:00
56 lines
1.1 KiB
ArmAsm
56 lines
1.1 KiB
ArmAsm
|
;
|
||
|
; int __fastcall__ vscanf (const char* format, va_list ap);
|
||
|
;
|
||
|
; Ullrich von Bassewitz, 2004-11-27
|
||
|
;
|
||
|
|
||
|
.export _vscanf
|
||
|
.import _vfscanf
|
||
|
.import _stdin
|
||
|
.import decsp2
|
||
|
|
||
|
.include "zeropage.inc"
|
||
|
|
||
|
|
||
|
; ----------------------------------------------------------------------------
|
||
|
; int __fastcall__ vscanf (const char* format, va_list ap)
|
||
|
; /* Standard C function */
|
||
|
; {
|
||
|
; return vfscanf (stdin, format, ap);
|
||
|
; }
|
||
|
;
|
||
|
|
||
|
.code
|
||
|
_vscanf:
|
||
|
pha ; Save low byte of ap
|
||
|
|
||
|
; Decrement the stack pointer by two for the additional parameter.
|
||
|
|
||
|
jsr decsp2 ; Won't touch X
|
||
|
|
||
|
; Move the format down
|
||
|
|
||
|
ldy #2
|
||
|
lda (sp),y ; Load byte of format
|
||
|
ldy #0
|
||
|
sta (sp),y
|
||
|
ldy #3
|
||
|
lda (sp),y
|
||
|
ldy #1
|
||
|
sta (sp),y
|
||
|
|
||
|
; Store stdin into the stack frame
|
||
|
|
||
|
iny
|
||
|
lda _stdin
|
||
|
sta (sp),y
|
||
|
iny
|
||
|
lda _stdin+1
|
||
|
sta (sp),y
|
||
|
|
||
|
; Restore the low byte of ap and jump to vfscanf, which will cleanup the stack
|
||
|
|
||
|
pla
|
||
|
jmp _vfscanf
|
||
|
|