;
; Ullrich von Bassewitz, 26.10.2000
;
; CC65 runtime: Push value in a/x onto the stack
;

       	.export	    	push0, pusha0, pushax
	.importzp   	sp

push0:	lda	#0
pusha0:	ldx	#0

; This function is used *a lot*, so don't call any subroutines here.
; Beware: The value in ax must not be changed by this function!
; Beware^2: The optimizer knows about the value of Y after the function
;           returns!

.proc	pushax

	pha                     ; (3)
	lda	sp              ; (6)
	sec                     ; (8)
	sbc	#2              ; (10)
	sta	sp		; (13)
	bcs	@L1             ; (17)
	dec	sp+1            ; (+5)
@L1:	ldy	#1              ; (19)
	txa			; (21)
	sta	(sp),y          ; (27)
	pla                     ; (31)
	dey                     ; (33)
	sta	(sp),y		; (38)
	rts                     ; (44)     

.endproc
