Annotation of cci/d/macro4/init.x, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.