2024-09-03 17:57:28 -04:00
|
|
|
.macro breakpoint ; $02 isn't a valid instruction, the emulator will see this and halt, dump memory contents
|
|
|
|
.byte $02
|
|
|
|
.endm
|
|
|
|
|
|
|
|
.macro pop ; drops a data stack cell
|
|
|
|
inx
|
|
|
|
inx
|
|
|
|
.endm
|
|
|
|
|
|
|
|
.macro pop2 ; drops 2 data stack cells
|
|
|
|
inx
|
|
|
|
inx
|
|
|
|
inx
|
|
|
|
inx
|
|
|
|
.endm
|
|
|
|
|
2024-10-07 01:49:17 -04:00
|
|
|
.macro push, cell_high, cell_low ; push a data stack cell
|
2024-09-03 17:57:28 -04:00
|
|
|
dex
|
|
|
|
dex
|
2024-10-07 01:49:17 -04:00
|
|
|
lda \cell_low
|
|
|
|
sta 0, x
|
|
|
|
lda \cell_high
|
|
|
|
sta 1, x
|
2024-09-03 17:57:28 -04:00
|
|
|
.endm
|
|
|
|
|
|
|
|
.macro push2 ; push 2 data stack cells
|
|
|
|
dex
|
|
|
|
dex
|
|
|
|
dex
|
|
|
|
dex
|
|
|
|
.endm
|
|
|
|
|
|
|
|
.macro push_char, char; pushes an ascii character code onto the stack
|
|
|
|
lda \char
|
|
|
|
push
|
|
|
|
sta 0, x ; char low byte
|
|
|
|
stz 1, x ; char high byte
|
|
|
|
.endm
|
|
|
|
|
|
|
|
.macro push_coords, coord_x, coord_y ; push a set of (x,y) coordinates onto the data stack
|
|
|
|
lda \coord_x
|
|
|
|
push
|
|
|
|
sta 0, x ; low byte
|
|
|
|
stz 1,x ; high byte is zero
|
|
|
|
lda \coord_y
|
|
|
|
push
|
|
|
|
sta 0,x ; same here
|
|
|
|
stz 1,x
|
|
|
|
.endm
|
|
|
|
|
|
|
|
.macro to_r ; pop the top of the stack off and save it in the return (hardware) stack: (n -- )
|
|
|
|
lda 1, x
|
|
|
|
pha
|
|
|
|
lda 0, x
|
|
|
|
pha
|
|
|
|
pop
|
|
|
|
.endm
|
|
|
|
|
|
|
|
.macro from_r ; pop the top of the return stack off and put it on the data stack: ( -- n)
|
|
|
|
push
|
|
|
|
pla
|
|
|
|
sta 0, x
|
|
|
|
pla
|
|
|
|
sta 1, x
|
|
|
|
.endm
|
|
|
|
|