mgh: fix for default HDD DMA mode, that wasn't correctly set
[open-ps2-loader.git] / modules / debug / ioptrap / handler.s
blob452cb536c08b2b6feabc1a1328caf9ce4ecf389b
1 /*
2 # _____ ___ ____ ___ ____
3 # ____| | ____| | | |____|
4 # | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5 #-----------------------------------------------------------------------
6 # Copyright 2001-2004, ps2dev - http://www.ps2dev.org
7 # Licenced under Academic Free License version 2.0
8 # Review ps2sdk README & LICENSE files for further details.
10 # $Id: handler.S 595 2004-09-21 13:35:48Z pixel $
14 #include "as_reg_compat.h"
16 #define GENERAL_ATSAVE 0x400
17 #define GENERAL_SRSAVE
19 .global def_exc_handler
20 .ent def_exc_handler
21 def_exc_handler:
22 .set noreorder
23 .set noat
24 .word 0
25 .word 0
26 la $k0, __trap_frame
27 sw $0, 0x10($k0)
29 lw $1, 0x400($0)
30 nop
31 sw $1, 0x14($k0)
33 sw $2, 0x18($k0)
34 sw $3, 0x1c($k0)
35 sw $4, 0x20($k0)
36 sw $5, 0x24($k0)
37 sw $6, 0x28($k0)
38 sw $7, 0x2c($k0)
39 sw $8, 0x30($k0)
40 sw $9, 0x34($k0)
41 sw $10, 0x38($k0)
42 sw $11, 0x3c($k0)
43 sw $12, 0x40($k0)
44 sw $13, 0x44($k0)
45 sw $14, 0x48($k0)
46 sw $15, 0x4c($k0)
47 sw $16, 0x50($k0)
48 sw $17, 0x54($k0)
49 sw $18, 0x58($k0)
50 sw $19, 0x5c($k0)
51 sw $20, 0x60($k0)
52 sw $21, 0x64($k0)
53 sw $22, 0x68($k0)
54 sw $23, 0x6c($k0)
55 sw $24, 0x70($k0)
56 sw $25, 0x74($k0)
57 sw $26, 0x78($k0)
58 sw $27, 0x7c($k0)
59 sw $28, 0x80($k0)
60 sw $29, 0x84($k0)
61 sw $30, 0x88($k0)
62 sw $31, 0x8c($k0)
63 mfhi $a0
64 nop
65 sw $a0, 0x90($k0)
67 mflo $a0
68 nop
69 sw $a0, 0x94($k0)
72 #lw $a0, 0x404($0) # saved EPC
73 mfc0 $a0, $14 #EPC
74 nop
75 sw $a0, 0($k0)
77 #lw $a0, 0x408($0) # saved SR
78 mfc0 $a0, $12 #SR
79 nop
80 sw $a0, 0xc($k0)
82 mfc0 $a0, $8 # BadVaddr
83 nop
84 sw $a0, 0x8($k0)
86 sw $0, 0x98($k0)
89 #lw $a0, 0x40c($0) # saved Cause
90 mfc0 $a0, $13 #Cause
91 nop
92 sw $a0, 4($k0)
94 sll $a0, 25
95 srl $a0, 27
96 jal trap
97 or $a1, $k0, $0
99 la $k0, __trap_frame
101 lw $a0, 0x94($k0)
103 mtlo $a0
105 lw $a0, 0x90($k0)
107 mthi $a0
109 #lw $0, 0x10($k0)
110 lw $1, 0x14($k0)
111 lw $2, 0x18($k0)
112 lw $3, 0x1c($k0)
113 lw $4, 0x20($k0)
114 lw $5, 0x24($k0)
115 lw $6, 0x28($k0)
116 lw $7, 0x2c($k0)
117 lw $8, 0x30($k0)
118 lw $9, 0x34($k0)
119 lw $10, 0x38($k0)
120 lw $11, 0x3c($k0)
121 lw $12, 0x40($k0)
122 lw $13, 0x44($k0)
123 lw $14, 0x48($k0)
124 lw $15, 0x4c($k0)
125 lw $16, 0x50($k0)
126 lw $17, 0x54($k0)
127 lw $18, 0x58($k0)
128 lw $19, 0x5c($k0)
129 lw $20, 0x60($k0)
130 lw $21, 0x64($k0)
131 lw $22, 0x68($k0)
132 lw $23, 0x6c($k0)
133 lw $24, 0x70($k0)
134 lw $25, 0x74($k0)
135 #lw $26, 0x78($k0)
136 #lw $27, 0x7c($k0)
137 lw $28, 0x80($k0)
138 lw $29, 0x84($k0)
139 lw $30, 0x88($k0)
140 lw $31, 0x8c($k0)
142 lw $k1, 0xc($k0)
144 srl $k1, 1
145 sll $k1, 1
146 mtc0 $k1, $12 /* restore SR */
148 lw $k1, 0($k0)
149 lw $k0, 0x410($0) /* k0 saved here by exception prologue (at 0x80) */
150 jr $k1
151 cop0 0x10
153 .end def_exc_handler
155 .global bp_exc_handler
156 .ent bp_exc_handler
157 bp_exc_handler:
158 .set noreorder
159 .set noat
160 .word 0
161 .word 0
162 la $k0, __trap_frame
163 sw $0, 0x10($k0)
164 sw $1, 0x14($k0)
165 sw $2, 0x18($k0)
166 sw $3, 0x1c($k0)
167 sw $4, 0x20($k0)
168 sw $5, 0x24($k0)
169 sw $6, 0x28($k0)
170 sw $7, 0x2c($k0)
171 sw $8, 0x30($k0)
172 sw $9, 0x34($k0)
173 sw $10, 0x38($k0)
174 sw $11, 0x3c($k0)
175 sw $12, 0x40($k0)
176 sw $13, 0x44($k0)
177 sw $14, 0x48($k0)
178 sw $15, 0x4c($k0)
179 sw $16, 0x50($k0)
180 sw $17, 0x54($k0)
181 sw $18, 0x58($k0)
182 sw $19, 0x5c($k0)
183 sw $20, 0x60($k0)
184 sw $21, 0x64($k0)
185 sw $22, 0x68($k0)
186 sw $23, 0x6c($k0)
187 sw $24, 0x70($k0)
188 sw $25, 0x74($k0)
189 sw $26, 0x78($k0)
190 sw $27, 0x7c($k0)
191 sw $28, 0x80($k0)
192 sw $29, 0x84($k0)
193 sw $30, 0x88($k0)
194 sw $31, 0x8c($k0)
195 mfhi $a0
197 sw $a0, 0x90($k0)
199 mflo $a0
201 sw $a0, 0x94($k0)
204 #lw $a0, 0x424($0) # saved EPC
205 mfc0 $a0, $14 #EPC
207 sw $a0, 0($k0)
209 #lw $a0, 0x42c($0) # saved SR
210 mfc0 $a0, $12 #SR
212 sw $a0, 0xc($k0)
214 mfc0 $a0, $8 # BadVaddr
216 sw $a0, 0x8($k0)
218 lw $a0, 0x430($0) # saved DCIC
220 sw $a0, 0x98($k0)
223 #lw $a0, 0x428($0) # saved Cause
224 mfc0 $a0, $13 #Cause
226 sw $a0, 4($k0)
228 sll $a0, 25
229 srl $a0, 27
230 jal trap
231 or $a1, $k0, $0
234 la $k0, __trap_frame
236 lw $a0, 0x94($k0)
238 mtlo $a0
240 lw $a0, 0x90($k0)
242 mthi $a0
244 lw $a0, 0x98($k0)
246 mtc0 $a0, $7
248 #lw $0, 0x10($k0)
249 lw $1, 0x14($k0)
250 lw $2, 0x18($k0)
251 lw $3, 0x1c($k0)
252 lw $4, 0x20($k0)
253 lw $5, 0x24($k0)
254 lw $6, 0x28($k0)
255 lw $7, 0x2c($k0)
256 lw $8, 0x30($k0)
257 lw $9, 0x34($k0)
258 lw $10, 0x38($k0)
259 lw $11, 0x3c($k0)
260 lw $12, 0x40($k0)
261 lw $13, 0x44($k0)
262 lw $14, 0x48($k0)
263 lw $15, 0x4c($k0)
264 lw $16, 0x50($k0)
265 lw $17, 0x54($k0)
266 lw $18, 0x58($k0)
267 lw $19, 0x5c($k0)
268 lw $20, 0x60($k0)
269 lw $21, 0x64($k0)
270 lw $22, 0x68($k0)
271 lw $23, 0x6c($k0)
272 lw $24, 0x70($k0)
273 lw $25, 0x74($k0)
274 #lw $26, 0x78($k0)
275 #lw $27, 0x7c($k0)
276 lw $28, 0x80($k0)
277 lw $29, 0x84($k0)
278 lw $30, 0x88($k0)
279 lw $31, 0x8c($k0)
281 lw $k1, 0xc($k0)
283 srl $k1, 1
284 sll $k1, 1
285 mtc0 $k1, $12 /* restore SR */
287 lw $k1, 0($k0)
288 lw $k0, 0x420($0) /* k0 saved here by debug exception prologue (at 0x40) */
289 jr $k1
290 cop0 0x10
292 .end bp_exc_handler