67 lines
1.1 KiB
PHP
67 lines
1.1 KiB
PHP
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
|