|
|
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: ! 18: #include "conf.h" ! 19: /* privileged registers addresses */ ! 20: #include "prvreg.h" ! 21: ! 22: /* program status long word definition */ ! 23: #include "psl.h" ! 24: ! 25: /* page table entry definition */ ! 26: #include "pte.h" ! 27: ! 28: /* process control block offsets */ ! 29: #include "pcboffset.h" ! 30: ! 31: /* fundamental constants for globl use */ ! 32: #include "const.h" ! 33: ! 34: /* system control block offsets*/ ! 35: #include "scboffset.h" ! 36: /* SPT offsets */ ! 37: #include "sptoffset.h" ! 38: ! 39: /* trap numbers*/ ! 40: #include "trap.h" ! 41: ! 42: ! 43: #define V_TRAP 0 ! 44: #define V_SYSCALL 4 ! 45: ! 46: .set HIGH,0x1f /*mask for disabling all interrupts */ ! 47: .set MCKVEC,4 /*scb offset for machinecheck vector */ ! 48: .set NISP,2 /*no. of interrupt stack pages */ ! 49: .set DONE,255 /*user process done code */ ! 50: ! 51: .text ! 52: ! 53: #include "pstorage.s" /* PROCESSOR STORAGE AREA */ ! 54: ! 55: .globl _Entry ! 56: _Entry: ! 57: mtpr $0x1f,$IPL ! 58: jmp start ! 59: .space (1024-9) ! 60: ! 61: ! 62: ! 63: /* globl dump buffer to be used for communication */ ! 64: /* between tests & interrupt handlers, & other misc. */ ! 65: /* purposes. */ ! 66: ! 67: /*physical page 3 */ ! 68: ! 69: .set NLWU,32 /*no. of longwords already used */ ! 70: /*this must be changed when you define */ ! 71: /*additional variables below before */ ! 72: /*_dbuf */ ! 73: .globl _restart ! 74: _restart: ! 75: .space 4 /*contains restart address for restarting*/ ! 76: /*after power is restored (loaded by */ ! 77: /*power fail interrupt handler & used by*/ ! 78: /*CPU 2 */ ! 79: /* ****************** */ ! 80: .globl _cyconf /* address : 0xc04 */ ! 81: _cyconf: /* Cypher configuration pointer : 0xc06 */ ! 82: .space 4 ! 83: .space 4 ! 84: /* ****************** */ ! 85: ! 86: .globl _Unused ! 87: _Unused: ! 88: .space 4 /* Just a copy of variable 'unused' */ ! 89: ! 90: .globl _unused ! 91: _unused: ! 92: .space 4 /*first unused page in system space */ ! 93: ! 94: .globl _ctlblk ! 95: _ctlblk: ! 96: .long 0 /* pointer to SCB */ ! 97: ! 98: .globl _savvec0 /*save vectors area */ ! 99: _savvec0: ! 100: .space 4 ! 101: ! 102: .globl _savvec1 /*save vectors area */ ! 103: _savvec1: ! 104: .space 4 ! 105: ! 106: .globl _savvec2 /*save vectors area */ ! 107: _savvec2: ! 108: .space 4 ! 109: ! 110: .globl _savvec3 /*save vectors area */ ! 111: _savvec3: ! 112: .space 4 ! 113: ! 114: .globl _savvec4 /*save vectors area */ ! 115: _savvec4: ! 116: .space 4 ! 117: ! 118: .globl _savvec5 /*save vectors area */ ! 119: _savvec5: ! 120: .space 4 ! 121: .globl _savvec6 /*save vectors area */ ! 122: _savvec6: ! 123: .space 4 ! 124: .globl _savvec7 /*save vectors area */ ! 125: _savvec7: ! 126: .space 4 ! 127: ! 128: .globl _savvec8 /*save vectors area */ ! 129: _savvec8: ! 130: .space 4 ! 131: ! 132: testno: .long 0 ! 133: ! 134: .globl _dbuf /*dump buffer left out of 1K */ ! 135: .globl _r_no ! 136: _r_no: ! 137: .long 0 ! 138: .globl _pt_base ! 139: _pt_base: ! 140: .long 0 ! 141: .globl _saved_psl ! 142: _saved_psl: ! 143: .long 0 ! 144: .globl _saved_sp ! 145: _saved_sp: ! 146: .long 0 ! 147: .globl _saved_fp ! 148: _saved_fp: ! 149: .long 0 ! 150: .globl _p_ptr ! 151: _p_ptr: ! 152: .long 0 ! 153: .globl _ret_adr ! 154: _ret_adr: ! 155: .long 0 ! 156: .globl _exp_par0 ! 157: _exp_par0: ! 158: .long 0 ! 159: .globl _exp_par1 ! 160: _exp_par1: ! 161: .long 0 ! 162: .globl _exp_par2 ! 163: _exp_par2: ! 164: .long 0 ! 165: .globl _exp_par3 ! 166: _exp_par3: ! 167: .long 0 ! 168: .globl _act_par0 ! 169: _act_par0: ! 170: .long 0 ! 171: .globl _act_par1 ! 172: _act_par1: ! 173: .long 0 ! 174: ! 175: .globl _IOpage ! 176: _IOpage: ! 177: .long 0 /* Pointer 64K I/O pages */ ! 178: # ! 179: # ! 180: # ! 181: .globl _proc_no ! 182: _proc_no: ! 183: .long 0 ! 184: ! 185: .globl _clk_cnt ! 186: _clk_cnt: ! 187: .long 0 ! 188: _dbuf: ! 189: .space NBPG - (NLWU *4) ! 190: edbuf: ! 191: ! 192: ! 193: .globl _intstack /* Interrupt stack */ ! 194: _intstack: /* Physical pages 4 & 5 */ ! 195: .space NISP*NBPG ! 196: eintstack: ! 197: ! 198: ! 199: .set SYSPTSIZE,512 /* No. of entries in SPT */ ! 200: ! 201: /* ! 202: System Page Table -- physical page 6 & 7 ! 203: */ ! 204: .align 2 ! 205: .globl _Sysmap ! 206: _Sysmap: ! 207: .space SYSPTSIZE*4 /* 512 max pages allowed for system */ ! 208: eSysmap: ! 209: .globl _Syssize ! 210: .set _Syssize,(eSysmap-_Sysmap)/4 /* should be SYSPTSIZE */ ! 211: ! 212: .globl _iomap /* Physical page 8 */ ! 213: _iomap: .space 1024 /* IOMAP - unused */ ! 214: .globl _eiomap ! 215: _eiomap: ! 216: ! 217: .globl _pcb0 /* Physical page 9 */ ! 218: _pcb0: .space 128 /*process control block 0 */ ! 219: .globl _pcb1 ! 220: _pcb1: .space 128 /*process control block 1 */ ! 221: .globl _pcb2 ! 222: _pcb2: .space 128 /*process control block 2 */ ! 223: .globl _pcb3 ! 224: _pcb3: .space 128 /*process control block 3 */ ! 225: .globl _pcb4 ! 226: _pcb4: .space 128 /*process control block 4 */ ! 227: .globl _pcb5 ! 228: _pcb5: .space 128 /*process control block 5 */ ! 229: .globl _pcb6 ! 230: _pcb6: .space 128 /*process control block 6 */ ! 231: .globl _pcb7 ! 232: _pcb7: .space 128 /*process control block 7 */ ! 233: ! 234: /* ! 235: *user #0 page tables -- P0PT, P1PT, P2PT ! 236: *physical memory -- page10, 11, & 12 respectively ! 237: */ ! 238: .align 2 ! 239: .globl _u0p0pt ! 240: _u0p0pt: ! 241: .space 1024 /*255 max pages for user #0 text */ ! 242: .globl _u0p1pt ! 243: _u0p1pt: ! 244: .space 1024 /*255 max pages for user #0 data */ ! 245: .globl _u0p2pt ! 246: _u0p2pt: ! 247: .space 1020 /*255 max pages for user #0 stack */ ! 248: eu0p2pt: ! 249: .space 4 ! 250: ! 251: /* ! 252: *user #1 page tables -- P0PT, P1PT, P2PT ! 253: *physical memory -- page13 ,14, & 15 respectively ! 254: */ ! 255: .align 2 ! 256: .globl _u1p0pt ! 257: _u1p0pt: ! 258: .space 1024 /*255 max pages for user #1 text */ ! 259: .globl _u1p1pt ! 260: _u1p1pt: ! 261: .space 1024 /*255 max pages for user #1 data */ ! 262: .globl _u1p2pt ! 263: _u1p2pt: ! 264: .space 1020 /*255 max pages for user #1 stack */ ! 265: eu1p2pt: ! 266: .space 4 ! 267: ! 268: ! 269: /* ! 270: *user #2 page tables -- P0PT, P1PT, P2PT ! 271: *physical memory -- page 16, 17 , & 18 respectively ! 272: */ ! 273: .align 2 ! 274: .globl _u2p0pt ! 275: _u2p0pt: ! 276: .space 1024 /*255 max pages for user #2 text */ ! 277: .globl _u2p1pt ! 278: _u2p1pt: ! 279: .space 1024 /*255 max pages for user #2 data */ ! 280: .globl _u2p2pt ! 281: _u2p2pt: ! 282: .space 1020 /*255 max pages for user #2 stack */ ! 283: eu2p2pt: ! 284: .space 4 ! 285: ! 286: ! 287: /* ! 288: *user #3 page tables -- P0PT, P1PT, P2PT ! 289: *physical memory -- page 19, 20 , & 21 respectively ! 290: */ ! 291: .align 2 ! 292: .globl _u3p0pt ! 293: _u3p0pt: ! 294: .space 1024 /*255 max pages for user #3 text */ ! 295: .globl _u3p1pt ! 296: _u3p1pt: ! 297: .space 1024 /*255 max pages for user #3 data */ ! 298: .globl _u3p2pt ! 299: _u3p2pt: ! 300: .space 1020 /*255 max pages for user #3 stack */ ! 301: eu3p2pt: ! 302: .space 4 ! 303: ! 304: /* ! 305: *user #4 thru 6 page tables ! 306: *physical memory -- pages 22 thru 30 ! 307: */ ! 308: .globl _u4p0pt ! 309: _u4p0pt: ! 310: .space (9*NBPG) - 4 ! 311: eu6p2pt: ! 312: .space 4 ! 313: ! 314: /* ! 315: *user #7 page tables -- P0PT, P1PT, P2PT ! 316: *physical memory -- page 31, 32 , & 33 respectively ! 317: */ ! 318: .align 2 ! 319: .globl _u7p0pt ! 320: _u7p0pt: ! 321: .space 1024 /*255 max pages for user #7 text */ ! 322: .globl _u7p1pt ! 323: _u7p1pt: ! 324: .space 1024 /*255 max pages for user #7 data */ ! 325: .globl _u7p2pt ! 326: _u7p2pt: ! 327: .space 1020 /*255 max pages for user #7 stack */ ! 328: eu7p2pt: ! 329: .space 4 ! 330: ! 331: .globl _Ksp0 /* Page used for Kernel stack of user0 */ ! 332: _Ksp0: .space 1020 ! 333: _Eksp0: .long 0 ! 334: ! 335: .globl _Ksp1 /* Page used for Kernel stack of user1 */ ! 336: _Ksp1: .space 1020 ! 337: _Eksp1: .long 0 ! 338: ! 339: .globl _Ksp2 /* Page used for Kernel stack of user2 */ ! 340: _Ksp2: .space 1020 ! 341: _Eksp2: .long 0 ! 342: ! 343: .globl _Ksp3 /* Page used for Kernel stack of user3 */ ! 344: _Ksp3: .space 1020 ! 345: _Eksp3: .long 0 ! 346: ! 347: .globl _Ksp4 /* Page used for Kernel stack of user4 */ ! 348: _Ksp4: .space 1020 ! 349: _Eksp4: .long 0 ! 350: ! 351: .globl _Ksp5 /* Page used for Kernel stack of user5 */ ! 352: _Ksp5: .space 1020 ! 353: _Eksp5: .long 0 ! 354: ! 355: .globl _Ksp6 /* Page used for Kernel stack of user6 */ ! 356: _Ksp6: .space 1020 ! 357: _Eksp6: .long 0 ! 358: # ! 359: # I/O buffers ! 360: # ! 361: .globl _iob0 ! 362: _iob0: .space 1024 ! 363: .globl _iob1 ! 364: _iob1: .space 1024 ! 365: .globl _iob2 ! 366: _iob2: .space 1024 ! 367: .globl _iob3 ! 368: _iob3: .space 1024 ! 369: .globl _iob4 ! 370: _iob4: .space 1024 ! 371: .globl _iob5 ! 372: _iob5: .space 16384 ! 373: ! 374: esysdata: ! 375: ! 376: #include "scblock.s" /* SYSTEM CONTROL BLOCK */ ! 377: ! 378: ! 379: ! 380: ! 381: ! 382: ! 383: #include "evthandlers.s" /*event handlers */ ! 384: ! 385: #define ACBL(_n1,_n2,_n3,_n4) \ ! 386: addl2 _n2,_n3;\ ! 387: cmpl _n3,_n1;\ ! 388: bleq _n4; ! 389: ! 390: ! 391: ! 392: /* ! 393: *INITIALIZATION CODE ! 394: * ! 395: * MME off; mode = k; IPL = 31; IS = 1 ! 396: * ! 397: */ ! 398: ! 399: .globl start ! 400: start: ! 401: mtpr $0x1f,$IPL /* Set IPL to HIGH */ ! 402: mtpr $0,$MME /* Disable MME */ ! 403: movab _scb,r0 ! 404: andl2 $0x3ffffc00,r0 ! 405: mtpr r0,$SCBB /* Set SCBB */ ! 406: ! 407: movpsl r1 ! 408: andl2 $0x001f0000,r1 /* Mask out flags */ ! 409: cmpl r1,$0x001f0000 /* modes = K & IPL = 31? */ ! 410: beql 1f ! 411: 2: movl $1,r0 ! 412: movl $0x041f0000,r2 ! 413: halt /* PSL not initialized as expected */ ! 414: 1: ! 415: movl $_intstack+NISP*NBPG,r0 ! 416: andl2 $0x3fffffff,r0 /* Mask out bit 30,31 */ ! 417: mtpr r0,$ISP /* init. ISP */ ! 418: movl r0,sp /* in case we get exception */ ! 419: movab (sp),fp /* Initialize FP */ ! 420: # ! 421: # Clear system data area all the way upto system code ! 422: # this includes dump buffer,interrupt stack,spt,iomap,pcbs,user ! 423: # page tables, & io buffer area. ! 424: # ! 425: 3: ! 426: movab esysdata,r7 ! 427: movab _restart,r6 ! 428: 1: clrl (r6) ! 429: ACBL(r7,$4,r6,1b) ! 430: # ! 431: # Initialize System Page Table ! 432: # ! 433: 5: ! 434: clrl r2 ! 435: movab _Ksp6,r1 /* R1 = Last address in Kernel stack area */ ! 436: andl2 $0x3fffffff,r1 /* Mask out bit 30,31 */ ! 437: shar $PGSHIFT,r1,r1 /* Get page no. of last page of Kstacks */ ! 438: 1: ! 439: movl r2,r11 /* Donot want to use orl3 */ ! 440: orl2 $PG_V|PG_KW,r11 ! 441: orl2 r11,_Sysmap[r2] ! 442: aobleq r1,r2,1b ! 443: ! 444: movab esysdata,r1 /* R1 = Last address in system data area */ ! 445: andl2 $0x3fffffff,r1 /* Mask out bit 30,31 */ ! 446: shar $PGSHIFT,r1,r1 /* Get page no. of last system data addr */ ! 447: 1: ! 448: movl r2,r11 /* Donot want to use orl3 */ ! 449: orl2 $PG_V|PG_KW|PG_NC,r11 /* Set I/O buffers non cachable */ ! 450: orl2 r11,_Sysmap[r2] ! 451: aoblss r1,r2,1b ! 452: # ! 453: # Map system text area 1 to 1, Kernel read/write. ! 454: # For this to work, the label _etext must exist at the end ! 455: # of system code; Add in 4 more pages for data area used in C ! 456: # ! 457: movab _end + (NBPG-1),r1 /* Map text+data 1 to 1; Kernel R/W */ ! 458: andl3 $0x3ffffc00,r1,_IOpage ! 459: addl2 $64*(1024),r1 ! 460: andl2 $0x3fffffff,r1 ! 461: shar $PGSHIFT,r1,r1 ! 462: 1: ! 463: movl r2,r11 ! 464: orl2 $PG_V|PG_KW|PG_NC,r11 /* Kernel Read/Write, non_cachable */ ! 465: orl2 r11,_Sysmap[r2] ! 466: aoblss r1,r2,1b ! 467: # ! 468: # Map from here (1st unused page) to page 512 : ! 469: # * invalid,no access, & virtual = physical ! 470: # ! 471: movl r2,_unused /* Save first unused physical page no */ ! 472: movl $LSP+1,r1 ! 473: 1: movl r2,_Sysmap[r2] ! 474: aoblss r1,r2,1b ! 475: ! 476: sysrdy: ! 477: movab _Sysmap,r0 ! 478: mtpr r0,$SBR /* Set SYSTEM BASE REG */ ! 479: mtpr $_Syssize,$SLR ! 480: orl2 $0xc0000000,r0 ! 481: mtpr r0,$P0BR /* Set P0BR */ ! 482: mtpr $_Syssize,$P0LR ! 483: ! 484: movl $CLOCK,r0 ! 485: movab _Xclock,_scb[r0] /* Set clock handler */ ! 486: ! 487: movl $BUSER,r0 ! 488: movab _Buser,_scb[r0] /* Set bus error handler */ ! 489: ! 490: clrl _bturn ! 491: clrl _bell ! 492: clrl _btime ! 493: mtpr $1,$IPL /* Allow clock interrupt */ ! 494: incl _IOinit /* Set flag so bus err don't print */ ! 495: # ! 496: # Probe for VIOCs ! 497: # ! 498: clrl _viocs ! 499: callf $4,_chk_vadr ! 500: movl r0,_viocs ! 501: # ! 502: # Probe for VDDCs ! 503: # ! 504: clrl _vddcs ! 505: callf $4,_chk_vdadr ! 506: movl r0,_vddcs ! 507: .globl _ready ! 508: _ready: ! 509: clrl _proc_no ! 510: mtpr $1,$PACC ! 511: mtpr $1,$PADC ! 512: mtpr $1,$TBIA ! 513: mtpr $1,$CCK /* Set Code Cache Key = 1 */ ! 514: mtpr $1,$DCK /* Set Data Cache Key = 1 */ ! 515: mtpr $1,$MME /* Enable MME */ ! 516: jmp *$1f ! 517: 1: ! 518: movab _pcb0,r0 ! 519: movab _Eksp0,(r0) /* Set PCB0_KSP */ ! 520: mfpr $P0BR,PCB_P0BR(r0) /* Set PCB0_P0BR */ ! 521: mfpr $P0LR,PCB_P0LR(r0) /* Set PCB0_P0LR */ ! 522: mtpr r0,$PCBB /* Init PCBB to PCB_0 */ ! 523: ldpctx /* Just to switch to Kernel stack */ ! 524: mtpr $1,$IPL /* Drop IPL to 1 */ ! 525: movl (sp)+,r12 /* Pop unnecessary PC,PSL */ ! 526: movl (sp)+,r11 ! 527: # ! 528: # The following tests are included : Tape, Vioc, Vddc. ! 529: # Bit 0-2 of R0 correspond to Tape, Vioc, Vddc test. To disable ! 530: # a particular test just set the corresponding bit to 1 before ! 531: # start. For example, if only VIOC test to be run, set R0=5. ! 532: # To run all, set R0 = 0. This process is now done by the ! 533: # routine 'echo'. ! 534: # ! 535: # Now that MME, probe for magtape ! 536: # ! 537: 1: clrl _tapes ! 538: callf $4,_chk_tape ! 539: movl r0,_tapes ! 540: mfpr $SLR,_Sslr /* Save original SLR */ ! 541: movl _unused,_Unused /* Save 1st unused page */ ! 542: go: ! 543: mtpr _Sslr,$SLR /* Reinit. SLR with original value */ ! 544: movl _Unused,_unused /* always restore it !! */ ! 545: pushab imsg /* Select users options */ ! 546: callf $8,_writes /* Print message */ ! 547: callf $8,_echo /* Get user response */ ! 548: movl r0,tst_mask /* Save user option */ ! 549: # ! 550: # Tape Master Test ! 551: # ! 552: andl3 $0x1,tst_mask,r0 /* Is Tape test selected */ ! 553: jneq 1f /* Skip to next test if not */ ! 554: callf $4,_tape /* set up to test tape */ ! 555: cmpl $0,r0 /* See if there was a controller */ ! 556: jeql 2f ! 557: callf $4,_tm_ex /* Test magtape */ ! 558: 2: ! 559: clrl _tape_ON /* next test */ ! 560: brw 1f ! 561: # ! 562: # VIOCs Test ! 563: # ! 564: 1: ! 565: andl3 $0x2,tst_mask,r0 ! 566: bneq 1f ! 567: tstl _viocs /* Any VIOCs to test ? */ ! 568: beql 2f ! 569: callf $4,_init_vec /* Set up interrupt handlers for VIOCs */ ! 570: callf $4,_vioc /* VIOC test */ ! 571: clrl _vioc_ON /* next test */ ! 572: brw 1f ! 573: 2: ! 574: pushab nmsg /* print no VIOCs message */ ! 575: callf $4,_writes ! 576: # ! 577: # VDDC Controller Test ! 578: # ! 579: 1: ! 580: andl3 $0x4,tst_mask,r0 ! 581: jneq 1f ! 582: tstl _vddcs /* Any VDDCs to test ? */ ! 583: beql 1f ! 584: callf $4,_vddc /* Set up to test VDDCs */ ! 585: cmpl $0,r0 /* See if there were any controllers */ ! 586: jeql 2f ! 587: callf $4,_vddc_ex /* Test VDDCs */ ! 588: 2: ! 589: clrl _vddc_ON /* Print Done msg */ ! 590: brw 1f ! 591: # ! 592: # ! 593: # ! 594: 1: ! 595: clrl _Berr /* Clear the bus error flag */ ! 596: clrl _IOinit ! 597: clrl _Multi ! 598: movl tst_mask,r0 ! 599: jmp go /* Restart the test */ ! 600: # ! 601: # Real time clock Handler ! 602: # ! 603: .align 2 ! 604: .globl _Xclock ! 605: _Xclock: ! 606: rei ! 607: ! 608: # ! 609: # Bus error handler ! 610: # ! 611: .align 2 ! 612: .globl _Buser ! 613: _Buser: ! 614: movab (sp),-(sp) /* Push pointer to error parameter */ ! 615: callf $8,_buserror ! 616: incl _Berr ! 617: movl (sp)+,r0 ! 618: movl (sp)+,r0 ! 619: rei ! 620: ! 621: # ! 622: # badaddr(addr, len) ! 623: # see if access addr with a len type instruction causes a machine check ! 624: # len is length of access (1=byte, 2=short, 4=long) ! 625: # r0 = 0 means good(exists); r0 =1 means does not exist. ! 626: # ! 627: .globl _badaddr ! 628: _badaddr: ! 629: .word 0x1c # Keep r4,r3,r2 ! 630: mfpr $IPL,r1 ! 631: mtpr $HIGH,$IPL ! 632: movl _scb+BEVEC,r2 ! 633: movl 4(fp),r3 ! 634: movl 8(fp),r4 ! 635: movab 9f,_scb+BEVEC ! 636: bbc $0,r4,1f; tstb (r3) ! 637: 1: bbc $1,r4,1f; tstw (r3) ! 638: 1: bbc $2,r4,1f; tstl (r3) ! 639: 1: clrl r0 # made it w/o machine checks ! 640: 2: movl r2,_scb+BEVEC ! 641: mtpr r1,$IPL ! 642: ret ! 643: ! 644: .align 2 ! 645: 9: # Here we catch buss error (if it comes) ! 646: andl3 4(sp),$0x7,r0 # check ERRCD ! 647: cmpl r0,$1 # check APE ! 648: jneq 1f ! 649: halt # Address parity error !!! ! 650: 1: cmpl r0,$5 # check VBE ! 651: jneq 1f ! 652: halt # Versabus error ! 653: 1: ! 654: movl $1,r0 # Anything else = bad address ! 655: movab 8(sp),sp # discard buss error trash ! 656: movab 2b,(sp) # new program counter on stack. ! 657: rei ! 658: # ! 659: # ! 660: # ! 661: .data ! 662: .align 2 ! 663: _Sslr: ! 664: .long 0 ! 665: tst_mask: ! 666: .long 0 ! 667: _bell: .long 0 ! 668: _bturn: .long 0 ! 669: _btime: .long 0 ! 670: .globl _Multi ! 671: _Multi: .long 0 ! 672: .globl _Berr ! 673: _Berr: .long 0 ! 674: .globl _IOinit ! 675: _IOinit: .long 0 ! 676: .globl _tape_ON ! 677: _tape_ON: ! 678: .long 1 ! 679: .globl _vioc_ON ! 680: _vioc_ON: ! 681: .long 1 ! 682: .globl _vddc_ON ! 683: _vddc_ON: ! 684: .long 1 ! 685: .globl _tapes ! 686: _tapes: ! 687: .long 0 ! 688: .globl _viocs ! 689: _viocs: ! 690: .long 0 ! 691: .globl _vddcs ! 692: _vddcs: ! 693: .long 0 ! 694: .align 1 ! 695: imsg: .ascii "\n\nPeripherial Integrated Test System r1.2\n", ! 696: .ascii "\nSelect one of the following :\n", ! 697: .ascii "\n 0 - Run all test", ! 698: .ascii "\n 1 - Tape Master test", ! 699: .ascii "\n 2 - VIOC test", ! 700: .ascii "\n 3 - VDDC test\n", ! 701: .ascii "\nEnter the appropriate test number : \0" ! 702: nmsg: .ascii "\n\nNo VIOCs are installed\n\0"
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.