mirror of
https://github.com/cc65/cc65.git
synced 2024-12-27 00:29:31 +00:00
53dd513176
which included commits to RCS files with non-trunk default branches. git-svn-id: svn://svn.cc65.org/cc65/trunk@3 b7a2c559-68d2-44c3-8de9-860c34a00d81
84 lines
1.5 KiB
ArmAsm
84 lines
1.5 KiB
ArmAsm
;
|
|
; Ullrich von Bassewitz, 05.08.1998
|
|
;
|
|
; CC65 runtime: Push ints onto the stack
|
|
;
|
|
|
|
;
|
|
; push/pop things on stack
|
|
;
|
|
.export push0, push1, push2, push3, push4, push5
|
|
.export push6, push7, pusha0, pushaFF, pushax
|
|
.export pusha, pushaysp, pushc0, pushc1, pushc2
|
|
.importzp sp
|
|
|
|
pushaFF:
|
|
ldx #$FF
|
|
bne pushax
|
|
|
|
push7: lda #7
|
|
bne pusha0
|
|
push6: lda #6
|
|
bne pusha0
|
|
push5: lda #5
|
|
bne pusha0
|
|
push4: lda #4
|
|
bne pusha0
|
|
push3: lda #3
|
|
bne pusha0
|
|
push2: lda #2
|
|
bne pusha0
|
|
push1: lda #1
|
|
bne pusha0
|
|
push0: lda #0
|
|
; beq pusha0
|
|
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!
|
|
|
|
pushax: ldy sp
|
|
beq @L1
|
|
dey
|
|
beq @L2
|
|
dey
|
|
@L0: sty sp
|
|
ldy #0 ; get index
|
|
sta (sp),y ; store lo byte
|
|
pha ; save it
|
|
txa ; get hi byte
|
|
iny ; bump idx
|
|
sta (sp),y ; store hi byte
|
|
pla ; get A back
|
|
rts ; done
|
|
|
|
@L1: dey
|
|
@L2: dey
|
|
dec sp+1
|
|
bne @L0 ; Branch always
|
|
|
|
; Push for chars, same warning as above: The optimizer expects the value
|
|
; 0 in the Y register after this function.
|
|
|
|
pushc2: lda #2
|
|
bne pusha
|
|
pushc1: lda #1
|
|
bne pusha
|
|
pushc0: lda #0
|
|
beq pusha
|
|
pushaysp:
|
|
lda (sp),y
|
|
pusha: ldy sp
|
|
beq @L1
|
|
dec sp
|
|
ldy #0
|
|
sta (sp),y
|
|
rts
|
|
|
|
@L1: dec sp+1
|
|
dec sp
|
|
sta (sp),y
|
|
rts
|