|
|
1.1 root 1: 1 00000000 LL0:
2: 2 00000000 .data
3: 3 0000027c * .text
4: 4 00000000 .align 1
5: 5 00000000 .globl _XTrap
6: 6 00000000 _XTrap:
7: 7 0000C5B4 1f00 .word L218
8: 8 0000C5B6 # #include "fpp_defs.h"
9: 9 0000C5B6 #
10: 10 0000C5B6 # /*************************************************************************
11: 11 0000C5B6 # *
12: 12 0000C5B6 # * FLOATING POINT PROCESSOR EXCEPTION HANDLER
13: 13 0000C5B6 # *
14: 14 0000C5B6 # * This routine will be called after any trap or exception. It will
15: 15 0000C5B6 # * compare the actual event type to any expected event type ( in
16: 16 0000C5B6 # * _EXP_EVENT ). If no event was expected _EXP_EVENT will be = 0.
17: 17 0000C5B6 # *
18: 18 0000C5B6 # * If a previous error has set the FORCE_LOOP flag, then the test will exit
19: 19 0000C5B6 # * through the loop address pointer without any event type checking.
20: 20 0000C5B6 # * current subtest through _EVENT_RETURN.
21: 21 0000C5B6 # *
22: 22 0000C5B6 # * If the event was NOT it expected:
23: 23 0000C5B6 # * if _PRT_ERROR is set, an error message will be printed.
24: 24 0000C5B6 # * if _HALT_FLG is set, the program will halt.
25: 25 0000C5B6 # * if _UNEXP_EVENT_RET is non-zero, it will contain the return address,
26: 26 0000C5B6 # * or the program will return to the monitor via RETURN.
27: 27 0000C5B6 # *
28: 28 0000C5B6 # * The error message will be of the form:
29: 29 0000C5B6 # * ** cycle: xx. test: xx. unexpected event type: xx
30: 30 0000C5B6 # * ** Par0 : xxxxxxxx
31: 31 0000C5B6 # * ** Par1 : xxxxxxxx
32: 32 0000C5B6 # * ** PC : xxxxxxxx
33: 33 0000C5B6 # * ** PSL : xxxxxxxx
34: 34 0000C5B6 # *
35: 35 0000C5B6 # *
36: 36 0000C5B6 # * 30-Apr-85 combined 'fpp_event.s' and 'trap.c' into 'fpp_event.c'.
37: 37 0000C5B6 # *
38: 38 0000C5B6 # *************************************************************************/
39: 39 0000C5B6 #
40: 40 0000C5B6 # XTrap( code )
41: 41 0000C5B6 # long code; /* event type code */
42: 42 0000C5B6 # {
43: 43 0000C5B6 13 026d jbr L220
44: 44 0000C5B9 L221:
45: 45 0000C5B9 # register long r12, r11, r10, r9, r8;
46: 46 0000C5B9 # long tpc, tpsl;
47: 47 0000C5B9 # if( force_loop ) /* check for continual looping */
48: 48 0000C5B9 5d effffffff5 tstl _force_loop
49: 49 0000C5BF 31 06 jeql L222
50: 50 0000C5C1 # asm("jmp *_event_return");;
51: 51 0000C5C1 71 ffffffffed jmp *_event_return
52: 52 0000C5C7 L222:
53: 53 0000C5C7 # asm("movl 8(fp),r12"); /* get par 0 */
54: 54 0000C5C7 0d ad08 5c movl 8(fp),r12
55: 55 0000C5CB # asm("movl 12(fp),r11"); /* get par 1 */
56: 56 0000C5CB 0d ad0c 5b movl 12(fp),r11
57: 57 0000C5CF # asm("movl 16(fp),r10"); /* get par 2 */
58: 58 0000C5CF 0d ad10 5a movl 16(fp),r10
59: 59 0000C5D3 # asm("movl 20(fp),r9"); /* get par 3 */
60: 60 0000C5D3 0d ad14 59 movl 20(fp),r9
61: 61 0000C5D7 # asm("movl 24(fp),r8"); /* get par 4 */
62: 62 0000C5D7 0d ad18 58 movl 24(fp),r8
63: 63 0000C5DB # if( code == ARITH_CODE ) {
64: 64 0000C5DB 1d ad04 34 cmpl 4(fp),$52
65: 65 0000C5DF 21 10 jneq L223
66: 66 0000C5E1 # event_code = r12; /* set the arith fault type seen */
67: 67 0000C5E1 0d 5c efffffffcc movl r12,_event_code
68: 68 0000C5E8 # event_psl = r10; /* take the PSL off the stack */
69: 69 0000C5E8 0d 5a efffffffc5 movl r10,_event_psl
70: 70 0000C5EF # } else
71: 71 0000C5EF 11 07 jbr L224
72: 72 0000C5F1 L223:
73: 73 0000C5F1 # event_psl = r11;; /* take the PSL off the stack */
74: 74 0000C5F1 0d 5b efffffffbc movl r11,_event_psl
75: 75 0000C5F8 L224:
76: 76 0000C5F8 # if( code == exp_event ) { /* was the event expected? */
77: 77 0000C5F8 1d ad04 efffffffb4 cmpl 4(fp),_exp_event
78: 78 0000C600 21 18 jneq L225
79: 79 0000C602 # if( (exp_event != ARITH_CODE) || (exp_code == r12) )
80: 80 0000C602 1d efffffffac 34 cmpl _exp_event,$52
81: 81 0000C609 21 09 jneq L9999
82: 82 0000C60B 1d efffffffa3 5c cmpl _exp_code,r12
83: 83 0000C612 21 06 jneq L226
84: 84 0000C614 L9999:
85: 85 0000C614 # asm("jmp *_event_return");; /* exit -the evt was expected */
86: 86 0000C614 71 ffffffff9a jmp *_event_return
87: 87 0000C61A L226:
88: 88 0000C61A # }
89: 89 0000C61A # /*
90: 90 0000C61A # * If we get here then the event was not expected
91: 91 0000C61A # */
92: 92 0000C61A # errcnt++; /* bump the error count */
93: 93 0000C61A L225:
94: 94 0000C61A 6d efffffff94 incl _errcnt
95: 95 0000C620 # if( prt_error ) {
96: 96 0000C620 5d efffffff8e tstl _prt_error
97: 97 0000C626 21 03 13 01b1 jeql L227
98: 98 0000C62B # if( !error ) {
99: 99 0000C62B 5d efffffff83 tstl _error
100: 100 0000C631 21 10 jneq L228
101: 101 0000C633 # error = TRUE; /* set current-error flag */
102: 102 0000C633 0d 01 efffffff7a movl $1,_error
103: 103 0000C63A # writec('\n');
104: 104 0000C63A dd 0a pushl $10
105: 105 0000C63C fe 08 efffffff71 callf $8,_writec
106: 106 0000C643 # }
107: 107 0000C643 # writes("\n** cycle: ");
108: 108 0000C643 L228:
109: 109 0000C643 .data 1
110: 110 0000027c * L231:
111: 111 0000027c * 0A2A2A206379636C653A2000 .ascii "\12** cycle: \0"
112: 112 00000288 * .text
113: 113 0000C643 dd 8f0000027c pushl $L231
114: 114 0000C649 fe 08 efffffff64 callf $8,_writes
115: 115 0000C650 # writed( cycle );
116: 116 0000C650 dd efffffff5e pushl _cycle
117: 117 0000C656 fe 08 efffffff57 callf $8,_writed
118: 118 0000C65D # writes(". test: ");
119: 119 0000C65D .data 1
120: 120 00000288 * L233:
121: 121 00000288 * 2E20746573743A2000 .ascii ". test: \0"
122: 122 00000291 * .text
123: 123 0000C65D dd 8f00000288 pushl $L233
124: 124 0000C663 fe 08 efffffff4a callf $8,_writes
125: 125 0000C66A # writeh( test_no );
126: 126 0000C66A dd efffffff44 pushl _test_no
127: 127 0000C670 fe 08 efffffff3d callf $8,_writeh
128: 128 0000C677 # writes(". unexpected event -type: ");
129: 129 0000C677 .data 1
130: 130 00000291 * L235:
131: 131 00000291 * 2E20756E65787065637465642 .ascii ". unexpected event -type: \0"
132: 06576656E74202D747970653A
133: 2000
134: 132 000002ac * .text
135: 133 0000C677 dd 8f00000291 pushl $L235
136: 134 0000C67D fe 08 efffffff30 callf $8,_writes
137: 135 0000C684 # writeh( code );
138: 136 0000C684 dd ad04 pushl 4(fp)
139: 137 0000C687 fe 08 efffffff26 callf $8,_writeh
140: 138 0000C68E # writec('\n');
141: 139 0000C68E dd 0a pushl $10
142: 140 0000C690 fe 08 efffffff1d callf $8,_writec
143: 141 0000C697 # if( code==0x37 ) { /* FPP Emulation trap */
144: 142 0000C697 1d ad04 37 cmpl 4(fp),$55
145: 143 0000C69B 21 68 jneq L236
146: 144 0000C69D # writes("** Par 0 : "); write32h(r12); writec('\n');
147: 145 0000C69D .data 1
148: 146 000002ac * L237:
149: 147 000002ac * 2A2A205061722030203A20200 .ascii "** Par 0 : \0"
150: 0
151: 148 000002b9 * .text
152: 149 0000C69D dd 8f000002ac pushl $L237
153: 150 0000C6A3 fe 08 efffffff0a callf $8,_writes
154: 151 0000C6AA dd 5c pushl r12
155: 152 0000C6AC fe 08 efffffff01 callf $8,_write32h
156: 153 0000C6B3 dd 0a pushl $10
157: 154 0000C6B5 fe 08 effffffef8 callf $8,_writec
158: 155 0000C6BC # writes("** Par 1 : "); write32h(r11); writec('\n');
159: 156 0000C6BC .data 1
160: 157 000002b9 * L239:
161: 158 000002b9 * 2A2A205061722031203A20200 .ascii "** Par 1 : \0"
162: 0
163: 159 000002c6 * .text
164: 160 0000C6BC dd 8f000002b9 pushl $L239
165: 161 0000C6C2 fe 08 effffffeeb callf $8,_writes
166: 162 0000C6C9 dd 5b pushl r11
167: 163 0000C6CB fe 08 effffffee2 callf $8,_write32h
168: 164 0000C6D2 dd 0a pushl $10
169: 165 0000C6D4 fe 08 effffffed9 callf $8,_writec
170: 166 0000C6DB # writes("** Par 2 : "); write32h(r10); writec('\n');
171: 167 0000C6DB .data 1
172: 168 000002c6 * L240:
173: 169 000002c6 * 2A2A205061722032203A20200 .ascii "** Par 2 : \0"
174: 0
175: 170 000002d3 * .text
176: 171 0000C6DB dd 8f000002c6 pushl $L240
177: 172 0000C6E1 fe 08 effffffecc callf $8,_writes
178: 173 0000C6E8 dd 5a pushl r10
179: 174 0000C6EA fe 08 effffffec3 callf $8,_write32h
180: 175 0000C6F1 dd 0a pushl $10
181: 176 0000C6F3 fe 08 effffffeba callf $8,_writec
182: 177 0000C6FA # tpc = r9;
183: 178 0000C6FA 0d 59 adc8 movl r9,-56(fp)
184: 179 0000C6FE # tpsl = r8;
185: 180 0000C6FE 0d 58 adc4 movl r8,-60(fp)
186: 181 0000C702 # } else
187: 182 0000C702 13 0097 jbr L241
188: 183 0000C705 L236:
189: 184 0000C705 # if( (code==0x20) || /* bus error */
190: 185 0000C705 # (code==0x2f) || /* access control violation */
191: 186 0000C705 # (code==0x30) ) { /* page fault */
192: 187 0000C705 1d ad04 20 cmpl 4(fp),$32
193: 188 0000C709 31 0c jeql L9998
194: 189 0000C70B 1d ad04 2f cmpl 4(fp),$47
195: 190 0000C70F 31 06 jeql L9998
196: 191 0000C711 1d ad04 30 cmpl 4(fp),$48
197: 192 0000C715 21 48 jneq L242
198: 193 0000C717 L9998:
199: 194 0000C717 # writes("** Par 0 : "); write32h(r12); writec('\n');
200: 195 0000C717 .data 1
201: 196 000002d3 * L243:
202: 197 000002d3 * 2A2A205061722030203A20200 .ascii "** Par 0 : \0"
203: 0
204: 198 000002e0 * .text
205: 199 0000C717 dd 8f000002d3 pushl $L243
206: 200 0000C71D fe 08 effffffe90 callf $8,_writes
207: 201 0000C724 dd 5c pushl r12
208: 202 0000C726 fe 08 effffffe87 callf $8,_write32h
209: 203 0000C72D dd 0a pushl $10
210: 204 0000C72F fe 08 effffffe7e callf $8,_writec
211: 205 0000C736 # writes("** Par 1 : "); write32h(r11); writec('\n');
212: 206 0000C736 .data 1
213: 207 000002e0 * L244:
214: 208 000002e0 * 2A2A205061722031203A20200 .ascii "** Par 1 : \0"
215: 0
216: 209 000002ed * .text
217: 210 0000C736 dd 8f000002e0 pushl $L244
218: 211 0000C73C fe 08 effffffe71 callf $8,_writes
219: 212 0000C743 dd 5b pushl r11
220: 213 0000C745 fe 08 effffffe68 callf $8,_write32h
221: 214 0000C74C dd 0a pushl $10
222: 215 0000C74E fe 08 effffffe5f callf $8,_writec
223: 216 0000C755 # tpc = r10;
224: 217 0000C755 0d 5a adc8 movl r10,-56(fp)
225: 218 0000C759 # tpsl = r9;
226: 219 0000C759 0d 59 adc4 movl r9,-60(fp)
227: 220 0000C75D # } else
228: 221 0000C75D 11 3d jbr L245
229: 222 0000C75F L242:
230: 223 0000C75F # if( (code==0x34) || /* arithmetic acception */
231: 224 0000C75F # (code==0x2b) ) { /* Kcall */
232: 225 0000C75F 1d ad04 34 cmpl 4(fp),$52
233: 226 0000C763 31 06 jeql L9997
234: 227 0000C765 1d ad04 2b cmpl 4(fp),$43
235: 228 0000C769 21 29 jneq L246
236: 229 0000C76B L9997:
237: 230 0000C76B # writes("** Par. : ");
238: 231 0000C76B .data 1
239: 232 000002ed * L247:
240: 233 000002ed * 2A2A205061722E20203A20200 .ascii "** Par. : \0"
241: 0
242: 234 000002fa * .text
243: 235 0000C76B dd 8f000002ed pushl $L247
244: 236 0000C771 fe 08 effffffe3c callf $8,_writes
245: 237 0000C778 # writeh(r12); writec('\n');
246: 238 0000C778 dd 5c pushl r12
247: 239 0000C77A fe 08 effffffe33 callf $8,_writeh
248: 240 0000C781 dd 0a pushl $10
249: 241 0000C783 fe 08 effffffe2a callf $8,_writec
250: 242 0000C78A # tpc = r11;
251: 243 0000C78A 0d 5b adc8 movl r11,-56(fp)
252: 244 0000C78E # tpsl = r10;
253: 245 0000C78E 0d 5a adc4 movl r10,-60(fp)
254: 246 0000C792 # } else {
255: 247 0000C792 11 08 jbr L248
256: 248 0000C794 L246:
257: 249 0000C794 # tpc = r12;
258: 250 0000C794 0d 5c adc8 movl r12,-56(fp)
259: 251 0000C798 # tpsl = r11;
260: 252 0000C798 0d 5b adc4 movl r11,-60(fp)
261: 253 0000C79C # }
262: 254 0000C79C L248:
263: 255 0000C79C L245:
264: 256 0000C79C L241:
265: 257 0000C79C # writes("** PC : "); write32h(tpc); writec('\n');
266: 258 0000C79C .data 1
267: 259 000002fa * L249:
268: 260 000002fa * 2A2A205043202020203A20200 .ascii "** PC : \0"
269: 0
270: 261 00000307 * .text
271: 262 0000C79C dd 8f000002fa pushl $L249
272: 263 0000C7A2 fe 08 effffffe0b callf $8,_writes
273: 264 0000C7A9 dd adc8 pushl -56(fp)
274: 265 0000C7AC fe 08 effffffe01 callf $8,_write32h
275: 266 0000C7B3 dd 0a pushl $10
276: 267 0000C7B5 fe 08 effffffdf8 callf $8,_writec
277: 268 0000C7BC # writes("** PSL : "); write32h(tpsl); writec('\n');
278: 269 0000C7BC .data 1
279: 270 00000307 * L250:
280: 271 00000307 * 2A2A2050534C2020203A20200 .ascii "** PSL : \0"
281: 0
282: 272 00000314 * .text
283: 273 0000C7BC dd 8f00000307 pushl $L250
284: 274 0000C7C2 fe 08 effffffdeb callf $8,_writes
285: 275 0000C7C9 dd adc4 pushl -60(fp)
286: 276 0000C7CC fe 08 effffffde1 callf $8,_write32h
287: 277 0000C7D3 dd 0a pushl $10
288: 278 0000C7D5 fe 08 effffffdd8 callf $8,_writec
289: 279 0000C7DC # }
290: 280 0000C7DC # if( halt_flg ) { /* halt on the error? */
291: 281 0000C7DC L227:
292: 282 0000C7DC 5d effffffdd2 tstl _halt_flg
293: 283 0000C7E2 31 2b jeql L251
294: 284 0000C7E4 # asm("movl _test_no,r0"); /* r0 = test number */
295: 285 0000C7E4 0d effffffdca 50 movl _test_no,r0
296: 286 0000C7EB # asm("clrl r1"); /* r1 = 0 (subtest #) */
297: 287 0000C7EB 4d 51 clrl r1
298: 288 0000C7ED # asm("movl _event_type,r2"); /* r2 = event code */
299: 289 0000C7ED 0d effffffdc1 52 movl _event_type,r2
300: 290 0000C7F4 # asm("movl _cycle,r3"); /* r3 = cycle count */
301: 291 0000C7F4 0d effffffdba 53 movl _cycle,r3
302: 292 0000C7FB # asm("movl r12,r4"); /* r4 = parameter 1 */
303: 293 0000C7FB 0d 5c 54 movl r12,r4
304: 294 0000C7FE # asm("movl r11,r5"); /* r5 = parameter 2 */
305: 295 0000C7FE 0d 5b 55 movl r11,r5
306: 296 0000C801 # asm("movl r10,r6"); /* r6 = parameter 3 */
307: 297 0000C801 0d 5a 56 movl r10,r6
308: 298 0000C804 # asm("movl r9,r7"); /* r7 = parameter 4 */
309: 299 0000C804 0d 59 57 movl r9,r7
310: 300 0000C807 # asm("movl _index,r8"); /* r8 = data index */
311: 301 0000C807 0d effffffda7 58 movl _index,r8
312: 302 0000C80E # asm("halt"); /* halt */
313: 303 0000C80E 00 halt
314: 304 0000C80F # }
315: 305 0000C80F # if( unexp_event_ret )
316: 306 0000C80F L251:
317: 307 0000C80F 5d effffffd9f tstl _unexp_event_ret
318: 308 0000C815 31 08 jeql L252
319: 309 0000C817 # asm("jmp *_unexp_event_ret"); /* return to the test */
320: 310 0000C817 71 fffffffd97 jmp *_unexp_event_ret
321: 311 0000C81D # else
322: 312 0000C81D 11 06 jbr L253
323: 313 0000C81F L252:
324: 314 0000C81F # asm("jmp *return");
325: 315 0000C81F 71 fffffffd8f jmp *return
326: 316 0000C825 L253:
327: 317 0000C825 # }
328: 318 0000C825 40 ret#2
329: 319 0000C826 .set L218,0x1F00
330: 320 0000C826 L220:
331: 321 0000C826 3c 3c 5d 5e subl3 $60,fp,sp
332: 322 0000C82A 13 fd8c jbr L221
333: 323 0000C82D .data
334: 323 00018DE1 .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.