|
|
1.1 ! root 1: /************************************************************************/ ! 2: /* Revision History */ ! 3: /* ---------- */ ! 4: /* Rev 1.0 1 Aug 85 */ ! 5: /* */ ! 6: /* Initial release of the diagnostic */ ! 7: /* */ ! 8: /* ---------- */ ! 9: /* Rev 1.1 17 Dec 85 */ ! 10: /* */ ! 11: /* Added a data pattern to subd.datal.c to check if ECNW0276 */ ! 12: /* is installed in the FS board */ ! 13: /* */ ! 14: /************************************************************************/ ! 15: ! 16: /* init.s for the MACRO4 floating point processor test */ ! 17: ! 18: ! 19: /* This file is a diagnostic version of locore.s. */ ! 20: /* It contains the following: */ ! 21: /* *system data area = scb, dump buffer, interrupt stack, */ ! 22: /* *system page table,user page tables,pcbs,iomap, & io buffers. */ ! 23: /* */ ! 24: /* *system code = interrupt vectors, initialization of system data,*/ ! 25: /* *memory size calculation,initialization of SPT, zeroing of */ ! 26: /* *unused memory, & loading of SBR & SLR. */ ! 27: /* * */ ! 28: /* *at the end of this code, you are ready to go to virtual mode. */ ! 29: /* * --- GOOD LUCK! */ ! 30: ! 31: ! 32: /* privileged registers addresses */ ! 33: #include "prvreg.h" ! 34: ! 35: /* program status long word definition */ ! 36: #include "psl.h" ! 37: ! 38: /* page table entry definition */ ! 39: #include "pte.h" ! 40: ! 41: /* process control block offsets */ ! 42: #include "pcboffset.h" ! 43: ! 44: /* fundamental constants for globl use */ ! 45: #include "const.h" ! 46: ! 47: /* system control block offsets*/ ! 48: #include "scboffset.h" ! 49: /* SPT offsets */ ! 50: #include "sptoffset.h" ! 51: ! 52: /* trap numbers*/ ! 53: #include "trap.h" ! 54: ! 55: ! 56: #define V_TRAP 0 ! 57: #define V_SYSCALL 4 ! 58: ! 59: .set HIGH,0x1f /*mask for disabling all interrupts */ ! 60: .set MCKVEC,4 /*scb offset for machinecheck vector */ ! 61: .set NISP,2 /*no. of interrupt stack pages */ ! 62: .set DONE,255 /*user process done code */ ! 63: ! 64: .text ! 65: ! 66: #include "pstorage.s" /* PROCESSOR STORAGE AREA */ ! 67: ! 68: .globl _Entry ! 69: _Entry: ! 70: jmp start ! 71: .space (1024-6) ! 72: ! 73: /* globl dump buffer to be used for communication */ ! 74: /* between tests & interrupt handlers, & other misc. */ ! 75: /* purposes. */ ! 76: ! 77: /* Physical page 3 : Used for global variables */ ! 78: ! 79: .set NLWU,35 /*no. of longwords already used */ ! 80: /*this must be changed when you define */ ! 81: /*additional variables below before */ ! 82: /*_dbuf */ ! 83: ! 84: ! 85: .globl _restart ! 86: _restart: ! 87: .space 4 /*contains restart address for restarting*/ ! 88: /*after power is restored (loaded by */ ! 89: /*power fail interrupt handler & used by*/ ! 90: /*CPU 2 */ ! 91: .globl _maxmem ! 92: _maxmem: ! 93: .space 4 /*memory size in no of bytes */ ! 94: ! 95: .globl _maxpages ! 96: _maxpages: ! 97: .space 4 /*memory size in no. of physical pages */ ! 98: ! 99: .globl _lastadd ! 100: _lastadd: ! 101: .space 4 /*address of the last long word */ ! 102: ! 103: .globl _unused ! 104: _unused: ! 105: .space 4 /*first unused page in system space */ ! 106: ! 107: .globl _ctlblk ! 108: _ctlblk: ! 109: .long 0 /* pointer to SCB */ ! 110: ! 111: .globl _savvec0 /*save vectors area */ ! 112: _savvec0: ! 113: .space 4 ! 114: ! 115: .globl _savvec1 /*save vectors area */ ! 116: _savvec1: ! 117: .space 4 ! 118: ! 119: .globl _savvec2 /*save vectors area */ ! 120: _savvec2: ! 121: .space 4 ! 122: ! 123: .globl _savvec3 /*save vectors area */ ! 124: _savvec3: ! 125: .space 4 ! 126: ! 127: .globl _savvec4 /*save vectors area */ ! 128: _savvec4: ! 129: .space 4 ! 130: ! 131: .globl _savvec5 /*save vectors area */ ! 132: _savvec5: ! 133: .space 4 ! 134: .globl _savvec6 /*save vectors area */ ! 135: _savvec6: ! 136: .space 4 ! 137: .globl _savvec7 /*save vectors area */ ! 138: _savvec7: ! 139: .space 4 ! 140: ! 141: .globl _savvec8 /*save vectors area */ ! 142: _savvec8: ! 143: .space 4 ! 144: ! 145: .globl badrtn ! 146: badrtn: ! 147: .long 0 ! 148: ! 149: .globl _dbuf /*dump buffer left out of 1K */ ! 150: .globl _r_no ! 151: _r_no: ! 152: .long 0 ! 153: .globl _pt_base ! 154: _pt_base: ! 155: .long 0 ! 156: .globl _saved_psl ! 157: _saved_psl: ! 158: .long 0 ! 159: .globl _saved_sp ! 160: _saved_sp: ! 161: .long 0 ! 162: .globl _saved_fp ! 163: _saved_fp: ! 164: .long 0 ! 165: .globl _p_ptr ! 166: _p_ptr: ! 167: .long 0 ! 168: .globl _ret_adr ! 169: _ret_adr: ! 170: .long 0 ! 171: .globl _exp_par0 ! 172: _exp_par0: ! 173: .long 0 ! 174: .globl _exp_par1 ! 175: _exp_par1: ! 176: .long 0 ! 177: .globl _exp_par2 ! 178: _exp_par2: ! 179: .long 0 ! 180: .globl _exp_par3 ! 181: _exp_par3: ! 182: .long 0 ! 183: .globl _act_par0 ! 184: _act_par0: ! 185: .long 0 ! 186: .globl _act_par1 ! 187: _act_par1: ! 188: .long 0 ! 189: .globl _act_par2 ! 190: _act_par2: ! 191: .long 0 ! 192: .globl _act_par3 ! 193: _act_par3: ! 194: .long 0 ! 195: .globl _clk_cnt ! 196: _clk_cnt: ! 197: .long 0 /* Clock int. count */ ! 198: .globl _errcnt ! 199: _errcnt: ! 200: .long 0 ! 201: .globl _hlt_flg ! 202: _hlt_flg: ! 203: .long 0 ! 204: .globl _endprog ! 205: _endprog: ! 206: .long 0 ! 207: _dbuf: ! 208: .space NBPG - (NLWU *4) ! 209: edbuf: ! 210: ! 211: ! 212: .globl _intstack /* Interrupt stack */ ! 213: _intstack: /* Physical pages 4 & 5 */ ! 214: .space NISP*NBPG ! 215: eintstack: ! 216: ! 217: ! 218: .set SYSPTSIZE,512 /* No. of entries in SPT */ ! 219: ! 220: /* ! 221: System Page Table -- physical page 6 & 7 ! 222: */ ! 223: .align 2 ! 224: .globl _Sysmap ! 225: _Sysmap: ! 226: .space SYSPTSIZE*4 /* 512 max pages allowed for system */ ! 227: eSysmap: ! 228: .globl _Syssize ! 229: .set _Syssize,(eSysmap-_Sysmap)/4 /* should be SYSPTSIZE */ ! 230: ! 231: .globl _iomap /* Physical page 8 */ ! 232: _iomap: .space 1024 /* IOMAP - unused */ ! 233: .globl _eiomap ! 234: _eiomap: ! 235: ! 236: .globl _pcb0 /* Physical page 9 */ ! 237: _pcb0: .space 128 /*process control block 0 */ ! 238: .globl _pcb1 ! 239: _pcb1: .space 128 /*process control block 1 */ ! 240: .globl _pcb2 ! 241: _pcb2: .space 128 /*process control block 2 */ ! 242: .globl _pcb3 ! 243: _pcb3: .space 128 /*process control block 3 */ ! 244: .globl _pcb4 ! 245: _pcb4: .space 128 /*process control block 4 */ ! 246: .globl _pcb5 ! 247: _pcb5: .space 128 /*process control block 5 */ ! 248: .globl _pcb6 ! 249: _pcb6: .space 128 /*process control block 6 */ ! 250: .globl _pcb7 ! 251: _pcb7: .space 128 /*process control block 7 */ ! 252: ! 253: /* ! 254: *user #0 page tables -- P0PT, P1PT, P2PT ! 255: *physical memory -- page10, 11, & 12 respectively ! 256: */ ! 257: .align 2 ! 258: .globl _u0p0pt ! 259: _u0p0pt: ! 260: .space 1024 /*255 max pages for user #0 text */ ! 261: .globl _u0p1pt ! 262: _u0p1pt: ! 263: .space 1024 /*255 max pages for user #0 data */ ! 264: .globl _u0p2pt ! 265: _u0p2pt: ! 266: .space 1020 /*255 max pages for user #0 stack */ ! 267: eu0p2pt: ! 268: .space 4 ! 269: ! 270: /* ! 271: *user #1 page tables -- P0PT, P1PT, P2PT ! 272: *physical memory -- page13 ,14, & 15 respectively ! 273: */ ! 274: .align 2 ! 275: .globl _u1p0pt ! 276: _u1p0pt: ! 277: .space 1024 /*255 max pages for user #1 text */ ! 278: .globl _u1p1pt ! 279: _u1p1pt: ! 280: .space 1024 /*255 max pages for user #1 data */ ! 281: .globl _u1p2pt ! 282: _u1p2pt: ! 283: .space 1020 /*255 max pages for user #1 stack */ ! 284: eu1p2pt: ! 285: .space 4 ! 286: ! 287: ! 288: /* ! 289: *user #2 page tables -- P0PT, P1PT, P2PT ! 290: *physical memory -- page 16, 17 , & 18 respectively ! 291: */ ! 292: .align 2 ! 293: .globl _u2p0pt ! 294: _u2p0pt: ! 295: .space 1024 /*255 max pages for user #2 text */ ! 296: .globl _u2p1pt ! 297: _u2p1pt: ! 298: .space 1024 /*255 max pages for user #2 data */ ! 299: .globl _u2p2pt ! 300: _u2p2pt: ! 301: .space 1020 /*255 max pages for user #2 stack */ ! 302: eu2p2pt: ! 303: .space 4 ! 304: ! 305: ! 306: /* ! 307: *user #3 page tables -- P0PT, P1PT, P2PT ! 308: *physical memory -- page 19, 20 , & 21 respectively ! 309: */ ! 310: .align 2 ! 311: .globl _u3p0pt ! 312: _u3p0pt: ! 313: .space 1024 /*255 max pages for user #3 text */ ! 314: .globl _u3p1pt ! 315: _u3p1pt: ! 316: .space 1024 /*255 max pages for user #3 data */ ! 317: .globl _u3p2pt ! 318: _u3p2pt: ! 319: .space 1020 /*255 max pages for user #3 stack */ ! 320: eu3p2pt: ! 321: .space 4 ! 322: ! 323: /* ! 324: *user #4 thru 6 page tables ! 325: *physical memory -- pages 22 thru 30 ! 326: */ ! 327: .globl _u4p0pt ! 328: _u4p0pt: ! 329: .space (9*NBPG) - 4 ! 330: eu6p2pt: ! 331: .space 4 ! 332: ! 333: ! 334: /* ! 335: Area used for Kernel stack ! 336: physical memory -- page 31, 32 , 33 ! 337: */ ! 338: ! 339: .align 2 ! 340: .globl _Kstack /* Kernel stack */ ! 341: _Kstack: /* Physical pages 31,32,33 */ ! 342: .space 3*NBPG ! 343: .globl ekstack ! 344: ekstack: ! 345: ! 346: .globl _iob0 /*io buffer 0 */ ! 347: _iob0: .space 1024 ! 348: .globl _iob1 /*io buffer 1 */ ! 349: _iob1: .space 1024 ! 350: .globl _iob2 /*io buffer 2 */ ! 351: _iob2: .space 1024 ! 352: .globl _iob3 /*io buffer 3 */ ! 353: _iob3: .space 1024 ! 354: .globl _iob4 /*io buffer 4 */ ! 355: _iob4: .space 1024 ! 356: .globl _iob5 /*io buffer 5 */ ! 357: _iob5: .space 1024 ! 358: .globl _iob6 /*io buffer 6 */ ! 359: _iob6: .space 1024 ! 360: esysdata: ! 361: ! 362: #include "scblock.s" /* SYSTEM CONTROL BLOCK (SCB) AREA */ ! 363: ! 364: #include "evthandlers.s" /*event handlers */ ! 365: ! 366: #define ACBL(_n1,_n2,_n3,_n4) \ ! 367: addl2 _n2,_n3;\ ! 368: cmpl _n3,_n1;\ ! 369: bleq _n4; ! 370: ! 371: .set MEMUNIT,64*1024 ! 372: .set MAXPHYSMEM,8*1024*1024-1 ! 373: .set ERRCD,0x7 ! 374: .set APE,0x1 ! 375: .set DCE,0x3 ! 376: .set VTO,0x4 ! 377: ! 378: ! 379: ! 380: /* ! 381: *INITIALIZATION CODE ! 382: * ! 383: * MME off; mode = k; IPL = 31; IS = 1 ! 384: * ! 385: */ ! 386: ! 387: .globl start ! 388: start: ! 389: mtpr $0,$MME /* Disable MME */ ! 390: movl r0,_run_list ! 391: movl r1,_OPTIONS ! 392: clrl _nonstop /* clear the continuous run flag */ ! 393: movl r2,_count /* save the test count */ ! 394: bneq 1f /* is count = 0 ? */ ! 395: movl $1,_count /* yes -set cycle count = 1 */ ! 396: 1: bgeq 1f /* is count < 0 ? */ ! 397: movl $1,_nonstop /* yes -set NONSTOP flag */ ! 398: 1: ! 399: clrl _no_fpp_wcs /* clear the NO-FPP WCS flag */ ! 400: mtpr $0x400,$DCR /* check for FPP WCS loaded */ ! 401: tstl r1 /* r1 = 0 if NO-FPP WCS loaded */ ! 402: bneq 1f ! 403: movl $1,_no_fpp_wcs /* set the NO-FPP WCS flag */ ! 404: 1: ! 405: movab _scb,r0 ! 406: andl2 $0x3ffffc00,r0 ! 407: mtpr r0,$SCBB /* Set SCBB */ ! 408: mtpr $0x1f,$IPL /* Set IPL to HIGH */ ! 409: ! 410: # ! 411: # clear the option flags ! 412: # ! 413: clrl _halt_flg /* clear the halt on error flag */ ! 414: clrl _loop_on_err /* clear the loop on error flag */ ! 415: movl $1,_prt_error /* clear the print error messages flag */ ! 416: movl $1,_prt_hdrs /* clear the print header messages flag */ ! 417: movl $1,_en_data_cache /* clear the enable data cache flag */ ! 418: ! 419: # ! 420: # set the option flags as needed ! 421: # ! 422: bitl $1,_OPTIONS /* bit(0) = HALT ON ERROR */ ! 423: beql 1f ! 424: movl $1,_halt_flg /* set the HALT ON ERROR flag */ ! 425: 1: ! 426: bitl $2,_OPTIONS /* bit(1) = LOOP ON ERROR */ ! 427: beql 1f ! 428: movl $1,_loop_on_err /* set the LOOP ON ERROR flag */ ! 429: 1: ! 430: bitl $4,_OPTIONS /* bit(2) = PRINT ERROR MESSAGES */ ! 431: beql 1f ! 432: clrl _prt_error /* clear the PRINT ERROR MESSAGES flag */ ! 433: 1: ! 434: bitl $8,_OPTIONS /* bit(3) = PRINT HEADER MESSAGES */ ! 435: beql 1f ! 436: clrl _prt_hdrs /* clear the PRINT HEADER MESSAGES flag */ ! 437: 1: ! 438: bitl $16,_OPTIONS /* bit(4) = ENABLE DATA CACHE flag */ ! 439: beql 1f ! 440: clrl _en_data_cache /* clear the ENABLE DATA CACHE flag */ ! 441: 1: ! 442: ! 443: movpsl r1 ! 444: andl2 $0xffffff00,r1 /* Mask out flags */ ! 445: cmpl r1,$0x041f0000 /*IS on,modes =k & IPL = 31? */ ! 446: beql 1f ! 447: 2: movl $1,r0 ! 448: movl $0x041f0000,r2 ! 449: halt /* PSL not initialized as expected */ ! 450: /* ! 451: # Mask out bit 30,31 of SCB vectors ! 452: # Will turm them back on when ready to go virtual in ! 453: # system space ! 454: */ ! 455: 1: ! 456: clrl _clk_cnt ! 457: movl $7,r0 /* R0 : Vector no. of clock int. */ ! 458: movab _Hardclk,_scb[r0] /* New vector for clock */ ! 459: ! 460: movl $_intstack+NISP*NBPG,r0 ! 461: andl2 $0x3fffffff,r0 /* Mask out bit 30,31 */ ! 462: mtpr r0,$ISP /* init. ISP */ ! 463: movl r0,sp /* in case we get exception */ ! 464: movab (sp),fp /* Initialize FP */ ! 465: /* ! 466: Clear system data area all the way upto system code ! 467: this includes dump buffer,interrupt stack,spt,iomap,pcbs,user ! 468: page tables, & io buffer area. ! 469: */ ! 470: 3: ! 471: movab esysdata,r7 ! 472: movab _restart,r6 ! 473: 1: clrl (r6) ! 474: ACBL(r7,$4,r6,1b) ! 475: ! 476: .globl _ready ! 477: _ready: ! 478: mtpr $64,$DCR /* Enable fault */ ! 479: andl3 $0x3ffffc00,$_end+NBPG-1,_endprog ! 480: ! 481: mtpr $_pcb0,$0xe /* Init. PCBB to PCB_0 */ ! 482: movab _pcb0,r0 ! 483: movab ekstack,PCB_KSP(r0) /* Init. PCB_KSP */ ! 484: movab eustack,PCB_USP(r0) /* Init. PCB_USP */ ! 485: mfpr $P0BR,PCB_P0BR(r0) /* " PCB_P0BR */ ! 486: mfpr $P0LR,PCB_P0LR(r0) /* " PCB_P0LR */ ! 487: movl $0x001f000,PCB_PSL(r0) /* Set PCB_PSL : Kernel Mode */ ! 488: ldpctx /* load the process context */ ! 489: ! 490: mtpr $1,$PACC /* purge the code cache */ ! 491: mtpr $1,$CCK /* Set code cache key to 1 */ ! 492: mtpr $2,$27 /* Disable Data cache */ ! 493: clrl _cycle ! 494: clrl _errcnt ! 495: clrl _error ! 496: callf $4,_monitor /* start the test monitor */ ! 497: ! 498: ! 499: ! 500: # /**************************************************************************** ! 501: # * USER STACK AREA ! 502: # ****************************************************************************/ ! 503: ! 504: .globl _Esys /* end of systems only code */ ! 505: _Esys: ! 506: .space NBPG ! 507: ! 508: .globl _Ustack /* basic stack space */ ! 509: _Ustack: ! 510: .space (2*NBPG)-4 /* 2 pages */ ! 511: .globl eustack ! 512: eustack: ! 513: .long 0 /* initial user stack ptr */ ! 514: ! 515: .globl U_area ! 516: U_area: ! 517:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.