blob: e8f5018c0b212808cf7ed19562de526464d81ed0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
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
|