|
|
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.