comment "subroutine prologue" .macro gdbasm_enter ldx _.frame pshx sts _.frame .endm comment "subroutine epilogue" .macro gdbasm_leave pulx stx _.frame rts .endm .macro gdbasm_call subr jsr \subr .endm .macro gdbasm_several_nops nop nop nop nop .endm comment "exit (0)" .macro gdbasm_exit0 clra clrb wai .endm comment "crt0 startup" .macro gdbasm_startup .sect .data .globl _.frame _.frame: .word 0 .previous lds #0x2000 ; the linker script maps the data section in ROM (LMA) for its initial ; content and in RAM (VMA) for its runtime value. We have to do ; what the default crt0 does: copy the ROM part in RAM. ; (otherwise any 'globalvar' appears uninitialized) ldx #__data_image ldy #__data_section_start bra Start_map Loop: ldaa 0,x staa 0,y inx iny Start_map: cpx #__data_image_end blo Loop Done: clr _.frame clr _.frame+1 .endm comment "Declare a data variable" .purgem gdbasm_datavar .macro gdbasm_datavar name value .data \name: .word \value .endm