-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCrash.s
171 lines (149 loc) · 3.86 KB
/
Crash.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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
Crash
mfsprg r1, 0
stw r0, KDP.CrashR0(r1)
mfsprg r0, 1
stw r0, KDP.CrashR1(r1)
stmw r2, KDP.CrashR2(r1)
mfcr r0
stw r0, KDP.CrashCR(r1)
mfpvr r0
andis. r0, r0, 0xFFFE
bne @not601_mq
mfspr r0, mq
stw r0, KDP.CrashMQ(r1)
@not601_mq
mfxer r0
stw r0, KDP.CrashXER(r1)
mfsprg r0, 2
stw r0, KDP.CrashLR(r1)
mfctr r0
stw r0, KDP.CrashCTR(r1)
mfspr r0, pvr
stw r0, KDP.CrashPVR(r1)
mfspr r0, dsisr
stw r0, KDP.CrashDSISR(r1)
mfspr r0, dar
stw r0, KDP.CrashDAR(r1)
mfpvr r0
andis. r0, r0, 0xFFFE
bne @not601_rtc
mfspr r0, rtcu
stw r0, KDP.CrashRTCU(r1)
mfspr r0, rtcl
stw r0, KDP.CrashRTCL(r1)
@not601_rtc
mfspr r0, dec
stw r0, KDP.CrashDEC(r1)
mfspr r0, hid0
stw r0, KDP.CrashHID0(r1)
mfspr r0, sdr1
stw r0, KDP.CrashSDR1(r1)
mfsrr0 r0
stw r0, KDP.CrashSRR0(r1)
mfsrr1 r0
stw r0, KDP.CrashSRR1(r1)
mfmsr r0
stw r0, KDP.CrashMSR(r1)
mfsr r0, 0
stw r0, KDP.CrashSR0(r1)
mfsr r0, 1
stw r0, KDP.CrashSR1(r1)
mfsr r0, 2
stw r0, KDP.CrashSR2(r1)
mfsr r0, 3
stw r0, KDP.CrashSR3(r1)
mfsr r0, 4
stw r0, KDP.CrashSR4(r1)
mfsr r0, 5
stw r0, KDP.CrashSR5(r1)
mfsr r0, 6
stw r0, KDP.CrashSR6(r1)
mfsr r0, 7
stw r0, KDP.CrashSR7(r1)
mfsr r0, 8
stw r0, KDP.CrashSR8(r1)
mfsr r0, 9
stw r0, KDP.CrashSR9(r1)
mfsr r0, 10
stw r0, KDP.CrashSR10(r1)
mfsr r0, 11
stw r0, KDP.CrashSR11(r1)
mfsr r0, 12
stw r0, KDP.CrashSR12(r1)
mfsr r0, 13
stw r0, KDP.CrashSR13(r1)
mfsr r0, 14
stw r0, KDP.CrashSR14(r1)
mfsr r0, 15
stw r0, KDP.CrashSR15(r1)
mfmsr r0
_ori r0, r0, MsrFP
mtmsr r0
isync
stfd f0, KDP.CrashF0(r1)
stfd f1, KDP.CrashF1(r1)
stfd f2, KDP.CrashF2(r1)
stfd f3, KDP.CrashF3(r1)
stfd f4, KDP.CrashF4(r1)
stfd f5, KDP.CrashF5(r1)
stfd f6, KDP.CrashF6(r1)
stfd f7, KDP.CrashF7(r1)
stfd f8, KDP.CrashF8(r1)
stfd f9, KDP.CrashF9(r1)
stfd f10, KDP.CrashF10(r1)
stfd f11, KDP.CrashF11(r1)
stfd f12, KDP.CrashF12(r1)
stfd f13, KDP.CrashF13(r1)
stfd f14, KDP.CrashF14(r1)
stfd f15, KDP.CrashF15(r1)
stfd f16, KDP.CrashF16(r1)
stfd f17, KDP.CrashF17(r1)
stfd f18, KDP.CrashF18(r1)
stfd f19, KDP.CrashF19(r1)
stfd f20, KDP.CrashF20(r1)
stfd f21, KDP.CrashF21(r1)
stfd f22, KDP.CrashF22(r1)
stfd f23, KDP.CrashF23(r1)
stfd f24, KDP.CrashF24(r1)
stfd f25, KDP.CrashF25(r1)
stfd f26, KDP.CrashF26(r1)
stfd f27, KDP.CrashF27(r1)
stfd f28, KDP.CrashF28(r1)
stfd f29, KDP.CrashF29(r1)
stfd f30, KDP.CrashF30(r1)
stfd f31, KDP.CrashF31(r1)
mffs f31
lwz r0, KDP.CrashF31+4(r1)
stfd f31, KDP.CrashF31+4(r1)
stw r0, KDP.CrashF31+4(r1)
mflr r0
stw r0, KDP.CrashCaller(r1)
; Now spin
lis r2, 32 ; Count down from 64k to find a zero
@nonzero
lwzu r0, -4(r2)
mr. r2, r2
bne @nonzero
mfpvr r0
andis. r0, r0, 0xFFFE
bne @not601_rtc2
@retryrtc ; Save RTC in "Mac/Smurf shared message mem"
mfspr r2, rtcu
mfspr r3, rtcl
mfspr r0, rtcu
xor. r0, r0, r2
bne @retryrtc
@not601_rtc2
lwz r1, KDP.SharedMemoryAddr(r1)
stw r2, 0(r1)
ori r3, r3, 1
stw r3, 4(r1)
dcbf 0, r1
sync
@loopforever
lwz r1, 0(0)
addi r1, r1, 1
stw r1, 0(0)
li r1, 0
dcbst r1, r1
b @loopforever