|
|
1.1 root 1:
2: /* init.s */
3:
4:
5: /* This file is a diagnostic version of locore.s. */
6: /* It contains the following: */
7: /* *system data area = scb, dump buffer, interrupt stack, */
8: /* *system page table,user page tables,pcbs,iomap, & io buffers. */
9: /* */
10: /* *system code = interrupt vectors, initialization of system data,*/
11: /* *memory size calculation,initialization of SPT, zeroing of */
12: /* *unused memory, & loading of SBR & SLR. */
13: /* * */
14: /* *at the end of this code, you are ready to go to virtual mode. */
15: /* * --- GOOD LUCK! */
16: /* */
17: /* The arithmetic fault test will only be run if there is a */
18: /* Floating Point Processor in the system or if the users sets the */
19: /* 'run arithmetic test' bit (bit 4 -0x10) in register #1. */
20: /* */
21: /* 14-June-85 : run arithmetic fault test with FPP or option bit set */
22: /* */
23:
24: /* privileged registers addresses */
25: #include "prvreg.h"
26:
27: /* program status long word definition */
28: #include "psl.h"
29:
30: /* page table entry definition */
31: #include "pte.h"
32:
33: /* process control block offsets */
34: #include "pcboffset.h"
35:
36: /* fundamental constants for globl use */
37: #include "const.h"
38:
39: /* system control block offsets*/
40: #include "scboffset.h"
41: /* SPT offsets */
42: #include "sptoffset.h"
43:
44: /* trap numbers*/
45: #include "trap.h"
46:
47:
48: #define V_TRAP 0
49: #define V_SYSCALL 4
50:
51: .set HIGH,0x1f /*mask for disabling all interrupts */
52: .set MCKVEC,4 /*scb offset for machinecheck vector */
53: .set NISP,2 /*no. of interrupt stack pages */
54: .set DONE,255 /*user process done code */
55:
56: .text
57:
58: #include "pstorage.s" /* PROCESSOR STORAGE AREA */
59:
60: .globl _Entry
61: _Entry:
62: jmp start
63: .space (1024-6)
64:
65:
66:
67:
68: /* globl dump buffer to be used for communication */
69: /* between tests & interrupt handlers, & other misc. */
70: /* purposes. */
71:
72: /*physical page 3 */
73:
74: .set NLWU,34 /*no. of longwords already used */
75: /*this must be changed when you define */
76: /*additional variables below before */
77: /*_dbuf */
78: .globl _restart
79: _restart:
80: .space 4 /*contains restart address for restarting*/
81: /*after power is restored (loaded by */
82: /*power fail interrupt handler & used by*/
83: /*CPU 2 */
84: .globl _maxmem
85: _maxmem:
86: .space 4 /*memory size in no of bytes */
87:
88: .globl _maxpages
89: _maxpages:
90: .space 4 /*memory size in no. of physical pages */
91:
92: .globl _lastadd
93: _lastadd:
94: .space 4 /*address of the last long word */
95:
96: .globl _unused
97: _unused:
98: .space 4 /*first unused page in system space */
99:
100: .globl _ctlblk
101: _ctlblk:
102: .long 0 /* pointer to SCB */
103:
104: .globl _savvec0 /*save vectors area */
105: _savvec0:
106: .space 4
107:
108: .globl _savvec1 /*save vectors area */
109: _savvec1:
110: .space 4
111:
112: .globl _savvec2 /*save vectors area */
113: _savvec2:
114: .space 4
115:
116: .globl _savvec3 /*save vectors area */
117: _savvec3:
118: .space 4
119:
120: .globl _savvec4 /*save vectors area */
121: _savvec4:
122: .space 4
123:
124: .globl _savvec5 /*save vectors area */
125: _savvec5:
126: .space 4
127: .globl _savvec6 /*save vectors area */
128: _savvec6:
129: .space 4
130: .globl _savvec7 /*save vectors area */
131: _savvec7:
132: .space 4
133:
134: .globl _savvec8 /*save vectors area */
135: _savvec8:
136: .space 4
137:
138: .globl badrtn
139: badrtn:
140: .long tfail
141:
142: testno: .long 0
143:
144: .globl _dbuf /*dump buffer left out of 1K */
145: .globl _r_no
146: _r_no:
147: .long 0
148: .globl _pt_base
149: _pt_base:
150: .long 0
151: .globl _saved_psl
152: _saved_psl:
153: .long 0
154: .globl _saved_sp
155: _saved_sp:
156: .long 0
157: .globl _saved_fp
158: _saved_fp:
159: .long 0
160: .globl _p_ptr
161: _p_ptr:
162: .long 0
163: .globl _ret_adr
164: _ret_adr:
165: .long 0
166: .globl _exp_par0
167: _exp_par0:
168: .long 0
169: .globl _exp_par1
170: _exp_par1:
171: .long 0
172: .globl _exp_par2
173: _exp_par2:
174: .long 0
175: .globl _exp_par3
176: _exp_par3:
177: .long 0
178: .globl _act_par0
179: _act_par0:
180: .long 0
181: .globl _act_par1
182: _act_par1:
183: .long 0
184: .globl _act_par2
185: _act_par2:
186: .long 0
187: .globl _act_par3
188: _act_par3:
189: .long 0
190: .globl _test_no
191: _test_no:
192: .long 0
193: .globl _clk_cnt
194: _clk_cnt:
195: .long 0 /* Clock int. count */
196: _dbuf:
197: .space NBPG - (NLWU *4)
198: edbuf:
199:
200:
201: .globl _intstack /* Interrupt stack */
202: _intstack: /* Physical pages 4 & 5 */
203: .space NISP*NBPG
204: eintstack:
205:
206:
207: .set SYSPTSIZE,512 /* No. of entries in SPT */
208:
209: /*
210: System Page Table -- physical page 6 & 7
211: */
212: .align 2
213: .globl _Sysmap
214: _Sysmap:
215: .space SYSPTSIZE*4 /* 512 max pages allowed for system */
216: eSysmap:
217: .globl _Syssize
218: .set _Syssize,(eSysmap-_Sysmap)/4 /* should be SYSPTSIZE */
219:
220: .globl _iomap /* Physical page 8 */
221: _iomap: .space 1024 /* IOMAP - unused */
222: .globl _eiomap
223: _eiomap:
224:
225: .globl _pcb0 /* Physical page 9 */
226: _pcb0: .space 128 /*process control block 0 */
227: .globl _pcb1
228: _pcb1: .space 128 /*process control block 1 */
229: .globl _pcb2
230: _pcb2: .space 128 /*process control block 2 */
231: .globl _pcb3
232: _pcb3: .space 128 /*process control block 3 */
233: .globl _pcb4
234: _pcb4: .space 128 /*process control block 4 */
235: .globl _pcb5
236: _pcb5: .space 128 /*process control block 5 */
237: .globl _pcb6
238: _pcb6: .space 128 /*process control block 6 */
239: .globl _pcb7
240: _pcb7: .space 128 /*process control block 7 */
241:
242: /*
243: *user #0 page tables -- P0PT, P1PT, P2PT
244: *physical memory -- page10, 11, & 12 respectively
245: */
246: .align 2
247: .globl _u0p0pt
248: _u0p0pt:
249: .space 1024 /*255 max pages for user #0 text */
250: .globl _u0p1pt
251: _u0p1pt:
252: .space 1024 /*255 max pages for user #0 data */
253: .globl _u0p2pt
254: _u0p2pt:
255: .space 1020 /*255 max pages for user #0 stack */
256: eu0p2pt:
257: .space 4
258:
259: /*
260: *user #1 page tables -- P0PT, P1PT, P2PT
261: *physical memory -- page13 ,14, & 15 respectively
262: */
263: .align 2
264: .globl _u1p0pt
265: _u1p0pt:
266: .space 1024 /*255 max pages for user #1 text */
267: .globl _u1p1pt
268: _u1p1pt:
269: .space 1024 /*255 max pages for user #1 data */
270: .globl _u1p2pt
271: _u1p2pt:
272: .space 1020 /*255 max pages for user #1 stack */
273: eu1p2pt:
274: .space 4
275:
276:
277: /*
278: *user #2 page tables -- P0PT, P1PT, P2PT
279: *physical memory -- page 16, 17 , & 18 respectively
280: */
281: .align 2
282: .globl _u2p0pt
283: _u2p0pt:
284: .space 1024 /*255 max pages for user #2 text */
285: .globl _u2p1pt
286: _u2p1pt:
287: .space 1024 /*255 max pages for user #2 data */
288: .globl _u2p2pt
289: _u2p2pt:
290: .space 1020 /*255 max pages for user #2 stack */
291: eu2p2pt:
292: .space 4
293:
294:
295: /*
296: *user #3 page tables -- P0PT, P1PT, P2PT
297: *physical memory -- page 19, 20 , & 21 respectively
298: */
299: .align 2
300: .globl _u3p0pt
301: _u3p0pt:
302: .space 1024 /*255 max pages for user #3 text */
303: .globl _u3p1pt
304: _u3p1pt:
305: .space 1024 /*255 max pages for user #3 data */
306: .globl _u3p2pt
307: _u3p2pt:
308: .space 1020 /*255 max pages for user #3 stack */
309: eu3p2pt:
310: .space 4
311:
312: /*
313: *user #4 thru 6 page tables
314: *physical memory -- pages 22 thru 30
315: */
316: .globl _u4p0pt
317: _u4p0pt:
318: .space (9*NBPG) - 4
319: eu6p2pt:
320: .space 4
321:
322: /*
323: *user #7 page tables -- P0PT, P1PT, P2PT
324: *physical memory -- page 31, 32 , & 33 respectively
325: */
326: .align 2
327: .globl _u7p0pt
328: _u7p0pt:
329: .space 1024 /*255 max pages for user #7 text */
330: .globl _u7p1pt
331: _u7p1pt:
332: .space 1024 /*255 max pages for user #7 data */
333: .globl _u7p2pt
334: _u7p2pt:
335: .space 1020 /*255 max pages for user #7 stack */
336: eu7p2pt:
337: .space 4
338:
339: .globl _iob0 /*io buffer 0 */
340: _iob0: .space 1024
341: .globl _iob1 /*io buffer 1 */
342: _iob1: .space 1024
343: .globl _iob2 /*io buffer 2 */
344: _iob2: .space 1024
345: .globl _iob3 /*io buffer 3 */
346: _iob3: .space 1024
347: .globl _iob4 /*io buffer 4 */
348: _iob4: .space 1024
349: .globl _iob5 /*io buffer 5 */
350: _iob5: .space 1024
351: .globl _iob6 /*io buffer 6 */
352: _iob6: .space 1024
353: esysdata:
354:
355: #include "scblock.s" /* SYSTEM CONTROL BLOCK */
356:
357:
358:
359:
360:
361:
362:
363: #include "evthandlers.s" /*event handlers */
364:
365: #define ACBL(_n1,_n2,_n3,_n4) \
366: addl2 _n2,_n3;\
367: cmpl _n3,_n1;\
368: bleq _n4;
369:
370:
371:
372: /*
373: *INITIALIZATION CODE
374: *
375: * MME off; mode = k; IPL = 31; IS = 1
376: *
377: */
378:
379: .globl start
380: start:
381: mtpr $0,$MME /* Disable MME */
382:
383: movl r0,_tno /* R0 : Test no to run; 0 run all tests */
384: movl r1,_option
385: movl r2,_Cycle /* R2 : Cycle count */
386:
387: clrl _cycle
388: clrl _lptest
389: movl $1,_Emsg /* Turn on messages sense switch */
390: andl3 _option,$0x8,_ss1 /* Heading message sense switch */
391:
392: tstl _tno /* Set lptest if tno = XX and loop forever */
393: beql 1f
394: cmpl _Cycle,$-1
395: bneq extest
396: incl _lptest
397: extest:
398: movab 1f,r0
399: andl2 $0xfffffff,r0
400: jmp (r0) /* Switch map S->U */
401: 1:
402: mtpr $0,$MME
403: movab _scb,r0
404: andl2 $0x3ffffc00,r0
405: mtpr r0,$SCBB /* Set SCBB */
406: mtpr $0x1f,$IPL /* Set IPL to HIGH */
407:
408: movpsl r1
409: andl2 $0xffffff00,r1 /* Mask out flags */
410: cmpl r1,$0x041f0000 /*IS on,modes =k & IPL = 31? */
411: beql 1f
412: 2: movl $1,r0
413: movl $0x041f0000,r2
414: halt /* PSL not initialized as expected */
415: /*
416: # Mask out bit 30,31 of SCB vectors
417: # Will turm them back on when ready to go virtual in
418: # system space
419: */
420: 1:
421: clrl _clk_cnt
422: movl $7,r0 /* R0 : Vector no. of clock int. */
423: movab _Hardclk,_scb[r0] /* New vector for clock */
424: movl $NBPG/4,r1 /* One page for SCB */
425: movab _scb,r0
426: andl2 $0x3ffffc00,r0
427: 1: andl2 $0x3fffffff,(r0)
428: addl2 $4,r0
429: decl r1 /* Last one yet ? */
430: bneq 1b
431:
432:
433: movl $_intstack+NISP*NBPG,r0
434: andl2 $0x3fffffff,r0 /* Mask out bit 30,31 */
435: mtpr r0,$ISP /* init. ISP */
436: movl r0,sp /* in case we get exception */
437: movab (sp),fp /* Initialize FP */
438:
439: /*
440: Clear system data area all the way upto system code
441: this includes dump buffer,interrupt stack,spt,iomap,pcbs,user
442: page tables, & io buffer area.
443: */
444: 3:
445: movab esysdata,r7
446: movab _restart,r6
447: 1: clrl (r6)
448: ACBL(r7,$4,r6,1b)
449: /*
450: Initialize System Page Table
451: */
452: 5:
453: clrl r2
454: movab esysdata,r1 /* R1 = Last address in system data area */
455: andl2 $0x3fffffff,r1 /* Mask out bit 30,31 */
456: shar $PGSHIFT,r1,r1 /* Get page no. of last system data addr */
457: /* Map systm data area 1 to 1,kernel writable */
458: 1:
459: movl r2,r11 /* Donot want to use orl3 */
460: orl2 $PG_V|PG_KW,r11
461: orl2 r11,_Sysmap[r2]
462: aoblss r1,r2,1b
463: /*
464: Map system text area 1 to 1, Kernel read/write.
465: For this to work, the label _etext must exist at the end
466: of system code; Add in 4 more pages for data area used in C
467: */
468: movab _edata + 4*(NBPG-1),r1 /* Map text+data 1 to 1; Kernel R/W */
469: /* movab _etext + 4*(NBPG-1), r1 */
470: andl2 $0x3fffffff,r1
471: shar $PGSHIFT,r1,r1
472: 1:
473: movl r2,r11
474: orl2 $PG_V|PG_KW,r11 /* Kernel Read/Write */
475: orl2 r11,_Sysmap[r2]
476: aoblss r1,r2,1b
477: /*
478: Map from here (1st unused page) to page 512 :
479: * invalid,no access, & virtual = physical
480: */
481: movl r2,_unused /* Save first unused physical page no */
482: movl $LSP+1,r1
483: 1: movl r2,_Sysmap[r2]
484: aoblss r1,r2,1b
485:
486: /*
487: Initialize SBR, SLR
488: *Following are some useful addresses for user 0 (in case you want
489: *to start user 0:
490: *
491: * p0br = $_u0p0pt (limit = 256 max)
492: * p1br = $_u0p1pt ( same limit)
493: * p2br = $0xbfc02c00 (funny)
494: * p2lr = $0x000ffff0 (funny)
495: *
496: *for other users, add NBPG*3 to above except for p2 area
497: *
498: * u0_user_sp = 0xbffffbfc
499: * u0_k_sp = 0xbfffe3fc
500: * u0_s_sp = 0xbfffcbfc
501: * u0_e_sp = 0xbfffcbfc
502: *
503: */
504:
505: sysrdy:
506: mtpr $(_Sysmap-0xc0000000),$SBR /* Set SYSTEM BASE REG */
507: mtpr $_Syssize,$SLR
508:
509: .globl _ready
510: _ready:
511: mtpr $64,$DCR /* Enable fault */
512: movab tfail,badrtn
513:
514: tstl _ss1
515: jeql 1f
516: pushab M0
517: callf $8,_writes /* Print heading */
518:
519: cmpl $0,_tno
520: beql t0
521: cmpl $1,_tno
522: bneq nxt1
523: t0:
524: tstl _ss1
525: jeql 1f
526: pushab M1
527: callf $8,_writes
528: 1:
529: clrl _Errmsg
530: callf $4,_prvreg /* Subtest1 : MTPR/MFPR from privilege regs */
531: tstl _lptest
532: bneq t0
533: nxt1:
534: cmpl $0,_tno
535: beql t1
536: cmpl $2,_tno
537: bneq nxt2
538: t1:
539: tstl _ss1
540: jeql 1f
541: pushab M2
542: callf $8,_writes
543: 1:
544: clrl _Errmsg
545: callf $4,_prvinstr /* Subtest2 : Test ldpctx, svpctx, rei */
546: tstl _lptest
547: bneq t1
548: nxt2:
549: cmpl $0,_tno
550: beql t2
551: cmpl $3,_tno
552: bneq nxt3
553: t2:
554: tstl _ss1
555: jeql 1f
556: pushab M3
557: callf $8,_writes
558: 1:
559: clrl _Errmsg
560: callf $4,_be_evt /* Subtest3 : Bus error interrupt */
561: tstl _lptest /* again on this test */
562: bneq t2
563: nxt3:
564: cmpl $0,_tno
565: beql t3
566: cmpl $4,_tno
567: bneq nxt4
568: t3:
569: tstl _ss1
570: jeql 1f
571: pushab M4
572: callf $8,_writes
573: 1:
574: clrl _Errmsg
575: callf $4,_roprnd_evt /* Subtest4 : Reserved operand fault */
576: tstl _lptest
577: bneq t3
578: nxt4:
579: cmpl $0,_tno
580: beql t4
581: cmpl $5,_tno
582: bneq nxt5
583: t4:
584: tstl _ss1
585: jeql 1f
586: pushab M5
587: callf $8,_writes
588: 1: clrl _Errmsg
589: callf $4,_prv_evt /* Subtest5 : Privilege inst. fault */
590: tstl _lptest
591: bneq t4
592: nxt5:
593: cmpl $0,_tno
594: beql t5
595: cmpl $6,_tno
596: bneq nxt6
597: t5:
598: tstl _ss1
599: jeql 1f
600: pushab M6
601: callf $8,_writes
602: 1: clrl _Errmsg
603: callf $4,_align_evt /* Subtest6 : Data alignment fault */
604: tstl _lptest
605: bneq t5
606: nxt6:
607: cmpl $0,_tno
608: beql t6
609: cmpl $7,_tno
610: bneq nxt7
611: t6:
612: tstl _ss1
613: jeql 1f
614: pushab M7
615: callf $8,_writes
616: 1: clrl _Errmsg
617: callf $4,_raddr_evt /* Subtest7 : Reserved addr. mode fault */
618: tstl _lptest
619: bneq t6
620: nxt7:
621: cmpl $0,_tno
622: beql t7
623: cmpl $8,_tno
624: bneq nxt8
625: t7:
626: tstl _ss1
627: jeql 1f
628: pushab M8
629: callf $8,_writes
630: 1: clrl _Errmsg
631: callf $4,_rsv_evt /* Subtest8 : Reserved instuction fault */
632: tstl _lptest
633: bneq t7
634: nxt8:
635: # 6/14/85 brw nxt9 /* SKIP THIS TEST because of backplane problem */
636: mtpr $0x400,$DCR /* Is there a floating point out there? */
637: tstl r1 /* -R1 will be non zero if there is. */
638: bneq 1f /* test the arithmetic fault w/ FPP's */
639: bitl $0x10,_option /* test the arithmetic fault anyway? */
640: beql nxt9 /* -don't run it (backplane problem )*/
641: 1:
642: cmpl $0,_tno
643: beql t8
644: cmpl $9,_tno
645: bneq nxt9
646: t8:
647: tstl _ss1
648: jeql 1f
649: pushab M9
650: callf $8,_writes
651: 1: clrl _Errmsg
652: callf $4,_arith_evt /* Subtest9 : Arithmetic fault */
653: tstl _lptest
654: bneq t8
655: nxt9:
656: cmpl $0,_tno
657: beql t9
658: cmpl $10,_tno
659: bneq nxt10
660: t9:
661: tstl _ss1
662: jeql 1f
663: pushab M10
664: callf $8,_writes
665: 1: clrl _Errmsg
666: callf $4,_bpt_evt /* subtest10 : Break point instruction test */
667: tstl _lptest
668: bneq t9
669: nxt10:
670: cmpl $0,_tno
671: beql t10
672: cmpl $11,_tno
673: bneq nxt11
674: t10:
675: tstl _ss1
676: jeql 1f
677: pushab M11
678: callf $8,_writes
679: 1: clrl _Errmsg
680: callf $0,_ttrap_evt /* Subtest11 : Trace trap test */
681: tstl _lptest
682: bneq t10
683: nxt11:
684: cmpl $0,_tno
685: beql t11
686: cmpl $12,_tno
687: jneq nxt12
688: t11:
689: tstl _ss1
690: jeql 1f
691: pushab M12
692: callf $8,_writes
693: 1: clrl _Errmsg
694: callf $4,_sftint_evt /* Subtest12 : Software interrupt test */
695: tstl _lptest
696: bneq t11
697:
698: /* GO TO VIRTUAL MODE
699: Double map the kernel into user addresses :
700: This will enable system to go to virtual mode the 1st time !!
701: */
702: nxt12:
703: mtpr $(_Sysmap-0xc0000000),$SBR /* Set SYSTEM BASE REG */
704: mtpr $_Syssize,$SLR
705: mtpr $_Sysmap,$P0BR
706: mtpr $_Syssize,$P0LR
707: mtpr $1,$PADC
708: mtpr $1,$TBIA
709: mtpr $1,$MME
710: jmp *$vmode
711: vmode:
712: mtpr $0,$P0LR
713:
714: movl $_intstack+NISP*NBPG,r0
715: mtpr r0,$ISP /* init. ISP,sp to virtual address */
716: movl r0,sp
717:
718: /*
719: Set bit 30,31 of SCB vectors on.
720: Now we are running virtual in system space
721: */
722: movl $NBPG/4,r1 /* One page for SCB */
723: movab _scb,r0
724: andl2 $0xfffffc00,r0
725: 1: orl2 $0xc0000000,(r0)
726: addl2 $4,r0
727: decl r1 /* Last one yet ? */
728: bneq 1b
729:
730: movab tfail,badrtn
731:
732: cmpl $0,_tno
733: beql t12
734: cmpl $13,_tno
735: bneq nxt13
736: t12:
737: tstl _ss1
738: jeql 1f
739: pushab M13
740: callf $8,_writes
741: 1: clrl _Errmsg
742: calls $4,_kcall_evt /* KCALL test */
743: tstl _lptest
744: bneq t12
745: nxt13:
746: cmpl $0,_tno
747: beql t13
748: cmpl $14,_tno
749: bneq nxt14
750: t13:
751: tstl _ss1
752: jeql 1f
753: pushab M14
754: callf $8,_writes
755: 1: clrl _Errmsg
756: calls $4,_trans_evt /* Translation fault */
757: tstl _lptest
758: bneq t13
759: nxt14:
760: cmpl $0,_tno
761: beql t14
762: cmpl $15,_tno
763: bneq nxt15
764: t14:
765: tstl _ss1
766: jeql 1f
767: pushab M15
768: callf $8,_writes
769: 1: clrl _Errmsg
770: calls $4,_probe_evt /* PROBER/PROBEW test */
771: tstl _lptest
772: bneq t14
773: nxt15:
774: cmpl $0,_tno
775: beql t15
776: cmpl $16,_tno
777: bneq nxt16
778: t15:
779: tstl _ss1
780: jeql 1f
781: pushab M16
782: callf $8,_writes
783: 1: clrl _Errmsg
784: calls $4,_ksnv_evt /* Kernel stack not valid test */
785: tstl _lptest
786: bneq t15
787: nxt16:
788: cmpl $0,_tno
789: beql t16
790: cmpl $17,_tno
791: bneq nxt17
792: t16:
793: tstl _ss1
794: jeql 1f
795: pushab M17
796: callf $8,_writes
797: 1: clrl _Errmsg
798: calls $4,_mulevt /* Multiple events test */
799: tstl _lptest
800: bneq t16
801: nxt17:
802: cmpl $0,_tno
803: jneq last
804: cmpl $-1,_Cycle /* If Cycle == -1; loop forever */
805: beql 1f /* and skip the last test */
806: subl3 _cycle,_Cycle,r0
807: cmpl $1,r0 /* Only (ALL tests and last cycle) */
808: jlss last /* turn on this test */
809: t17:
810: pushl $M18 /* Display msg */
811: callf $8,_writes
812: pushl $M19
813: callf $8,_writes
814: pushl $M20
815: callf $8,_writes
816: clrl _Errmsg
817: calls $4,_isnv_evt /* Interrupt stack not valid test */
818: /* NO RETURN FROM THIS TEST */
819: last:
820: cmpl $-1,_Cycle /* If Cycle == -1; loop forever */
821: beql 1f
822:
823: incl _cycle
824: cmpl _cycle,_Cycle
825: bgeq passed
826: 1:
827: mfpr $SBR,r0
828: mfpr $SLR,r1
829: orl2 $0xc0000000,r0
830: mtpr r0,$P0BR
831: mtpr r1,$P0LR /* Map user to system space */
832: jmp extest
833:
834: .globl passed
835: passed:
836: tstl _ss1
837: jeql 1f
838: pushab M21 /* Cycle count */
839: callf $4+4,_writes
840: pushl _Cycle
841: callf $4+4,_writeh
842: pushab M22
843: callf $4+4,_writes
844: 1:
845: movl $0xcafebabe,r0
846: halt
847: .space 20
848:
849: .globl tfail
850: tfail: /* enter here when test fail */
851: storer $0x1fff,Gregs /* save registers */
852: tstl _Emsg /* If set then donot print message */
853: beql nomsg
854: movl _Errmsg,r0
855: beql 1f
856: pushl r0 /* Print errror message if any */
857: callf $8,_writes
858: 1:
859: pushab Gregs
860: callf $8,_error /* Dump general registers */
861: nomsg:
862: loadr $0x1fff,Gregs /* load registers */
863: halt
864:
865:
866: .align 2
867: .globl _Hardclk
868: _Hardclk:
869: incl _clk_cnt
870: rei
871:
872:
873: .data 1
874: M0:
875: .ascii "\n\t** The Event Test **\12\0"
876: M1:
877: .ascii "** Subtest1 : MTPR/MFPR from privilege registers \12\0"
878: M2:
879: .ascii "** Subtest2 : Test LDPCTX, SVPCTX, REI \12\0"
880: M3:
881: .ascii "** Subtest3 : Bus error interrupt \12\0"
882: M4:
883: .ascii "** Subtest4 : Reserved operand fault\12\0"
884: M5:
885: .ascii "** Subtest5 : Privilege inst. fault \12\0"
886: M6:
887: .ascii "** Subtest6 : Data alignment fault \12\0"
888: M7:
889: .ascii "** Subtest7 : Reserved addr. mode fault \12\0"
890: M8:
891: .ascii "** Subtest8 : Reserved instruction fault \12\0"
892: M9:
893: .ascii "** Subtest9 : Arithmetic fault\12\0"
894: M10:
895: .ascii "** Subtest10 : Break point instruction test \12\0"
896: M11:
897: .ascii "** Subtest11 : Trace trap test \12\0"
898: M12:
899: .ascii "** Subtest12 : Software interrupt test \12\0"
900: M13:
901: .ascii "** Subtest13 : KCALL\12\0"
902: M14:
903: .ascii "** Subtest14 : Translation fault\12\0"
904: M15:
905: .ascii "** Subtest15 : PROBER/PROBEW\12\0"
906: M16:
907: .ascii "** Subtest16 : Kernel stack not valid test\12\0"
908: M17:
909: .ascii "** Subtest17 : Mutiple events test\12\0"
910: M18:
911: .ascii "** Subtest18 : Interrupt stack not valid test.\12\0"
912: M19:
913: .ascii "If TAHOE get a machine check after you see this message\12\0"
914: M20:
915: .ascii " then The EVENT test passed !\12\0"
916:
917: M21: .ascii "\n** Cycle count : \0"
918: M22: .ascii "\n\0"
919:
920: .globl err1
921: err1:
922: .ascii "\nRegisters : \0"
923: .globl err2
924: err2:
925: .ascii " \0"
926: .globl err3
927: err3:
928: .ascii "\n \0"
929: .globl err4
930: err4:
931: .ascii "\n\0"
932:
933: .globl e_type
934: e_type:
935: .ascii "\n** Unexpected exception type : \0"
936:
937: .globl par_0
938: par_0:
939: .ascii "** Par 0 : \0"
940:
941: .globl par_1
942: par_1:
943: .ascii "** Par 1 : \0"
944:
945: .globl par_pc
946: par_pc:
947: .ascii "** PC : \0"
948:
949: .globl par_psl
950: par_psl:
951: .ascii "** PSL : \0"
952:
953: .align 2
954: Gregs: .space 60 /* Space to save general registers */
955: .align 2
956: .globl _Errmsg
957: _Errmsg:
958: .long 0 /* Pointer to error message */
959: .globl _ss1
960: _ss1: .long 0 /* If 1 then donot print heading messages */
961: .globl _tno
962: _tno: .long 0 /* If -1 run ALL tests, else run test "tno" */
963: .globl _Cycle
964: _Cycle: .long 0 /* Cycle count */
965: .globl _cycle
966: _cycle: .long 0 /* Cycle count */
967: .globl _option
968: _option:
969: .long 0
970: .globl _lptest
971: _lptest:
972: .long 0 /* Loop on test specified by tno */
973: .globl _CPer
974: _CPer:
975: .long 0
976: .globl _Emsg
977: _Emsg:
978: .long 1
979:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.