-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrace_as.s
148 lines (133 loc) · 2.71 KB
/
trace_as.s
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
.set trace_base, 0x10000001
.set podr_e, 0xEC094004
.set dsdr_e, 0xEC09401C
.set clrr_e, 0xEC094028
.set dspi1, 0xFC03C000
.set dspi1_sr, dspi1+0x2C
.set dspi1_pushr, dspi1+0x34
.set dspi_tfff, 0x02000000
.set dspi_tx_mask, #0x80010000
.set dspi_tx_done_mask, #0x00010000
.set rgpio, 0x8C000000
.set rgpio_clr, sim_rgpio+0x06
.set rgpio_set, sim_rgpio+0x0A
.set rgpio_tog, sim_rgpio+0x0E
.macro tfff_loop
1:
move.l dspi_sr, %d0
andi.l dspi_tfff, %d0
bne 1b
.endm
.macro send_data dat mask
move.l \dat, %d0
lsl #16, %d0
ori.l \mask, %d0
tfff_loop
move.l %d0, dspi1_pushr
move.w \dat, %d0 ; move word to get the low 16 without masking
ori.l \mask, %d0
tfff_loop
move.l %d0, dspi1_pushr
.endm
.macro nop_loop cnt
move.l \cnt, %d0
1:
nop
nop
subi.l #1, %d0
bne 1b
.endm
.macro starting_trace
move.b podr_e, %d0
andi.l #0x7F, %d0
move.b / %d0, podr_e
nop
nop
.endm
.macro ending_trace
move.b #0x80, %d0
move.b %d0, podr_e
nop_loop #4
.endm
.align(0x10)
.global trace_exception
trace_exception:
lea -16(%sp), %sp
movem.l %d0-%d1/%a0-%a1, (%a7)
# set up to write to FB
starting_trace
move.l #0x10000001, %d0
lea +20(%sp), %a1
# write PC
move.l %a1@, %d1
move.l %d0, %a0
send_data %d1,
move.l %d1, (%a0)
adda.l #1, %a0
# write d0
lea +16(%sp), %a1
move.l %a1@, %d1
move.l %d1, (%a0)
adda.l #1, %a0
# write d1
lea +12(%sp), %a1
move.l %a1@, %d1
move.l %d1, (%a0)
adda.l #1, %a0
#movem.l %d2-%d7, (%a0)
# write d2
move.l %d2, (%a0)
adda.l #1, %a0
# write d3
move.l %d3, (%a0)
adda.l #1, %a0
# write d4
move.l %d4, (%a0)
adda.l #1, %a0
# write d5
move.l %d5, (%a0)
adda.l #1, %a0
# write d6
move.l %d6, (%a0)
adda.l #1, %a0
# write d7
move.l %d7, (%a0)
adda.l #1, %a0
# write a0
lea +8(%sp), %a1
move.l (%a1), %d1
move.l %d1, (%a0)
adda.l #1, %a0
# write a1
lea +4(%sp), %a1
move.l (%a1), %d1
move.l %d1, (%a0)
adda.l #1, %a0
#movem.l %a2-%a7, (%a0)
# write a2
move.l %a2, %d1
move.l %d1, (%a0)
adda.l #1, %a0
# write a3
move.l %a3, %d1
move.l %d1, (%a0)
adda.l #1, %a0
# write a4
move.l %a4, %d1
move.l %d1, (%a0)
adda.l #1, %a0
# write a5
move.l %a5, %d1
move.l %d1, (%a0)
adda.l #1, %a0
# write a6
move.l %a6, %d1
move.l %d1, (%a0)
adda.l #1, %a0
# write a7
move.l %a7, %d1
move.l %d1, (%a0)
ending_trace
movem.l (%a7), %d0-%d1/%a0-%a1
lea 16(%a7), %a7
rte