.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 .macro push ; push a data stack cell dex dex .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