Annotation of cci/d/fpevent/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: 
                     10: #      INIT.X for the FPP Events Tests                         
                     11: 
                     12: #      This file is a diagnostic version of locore.s.                  
                     13: #      It contains the following:                                      
                     14: #      *system data area = scb, dump buffer, interrupt stack,          
                     15: #      *system page table,user page tables,pcbs,iomap, & io buffers.   
                     16: #                                                                      
                     17: #      *system code = interrupt vectors, initialization of system data,
                     18: #      *memory size calculation,initialization of SPT, zeroing of      
                     19: #      *unused memory, & loading of SBR & SLR.                         
                     20: #      *                                                               
                     21: #      *at the end of this code, you are ready to go to virtual mode.  
                     22: #      * --- GOOD LUCK!                                                
                     23: 
                     24: ##########################################################################
                     25: #
                     26: #  22-Mar-85 :  Stole the code from the Demand Paging Test directory
                     27: #  16-Jul-85 :  Added the test for the FPP WCS / NO-FPP WCS
                     28: #
                     29: ##########################################################################
                     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:        .set    TTRAP,0x32
                     64:        .set    TRANS,0x30
                     65:        .set    PRIVS,0x2c
                     66: 
                     67:        .text
                     68: 
                     69:                /* PROCESSOR STORAGE AREA               */
                     70: #include "pstorage.s"
                     71: 
                     72:        .globl  _Entry
                     73: _Entry:
                     74:        jmp     start
                     75:        .space  (1024-6)
                     76: 
                     77: /*             globl dump buffer to be used for communication          */
                     78: /*             between tests & interrupt handlers, & other misc.       */
                     79: /*             purposes.                                               */
                     80:                                
                     81: /*     Physical page 3 : Used for global variables             */
                     82: 
                     83:        .set    NLWU,35         /*no. of longwords already used         */
                     84:                                /*this must be changed when you define  */
                     85:                                /*additional variables below before     */
                     86:                                /*_dbuf                                 */
                     87:        .globl  _Codek
                     88: _Codek:        .long   0               /* Code cache key */
                     89: 
                     90:        .globl  _restart
                     91: _restart:
                     92:        .space  4               /*contains restart address for restarting*/
                     93:                                /*after power is restored (loaded by    */
                     94:                                /*power fail interrupt handler & used by*/
                     95:                                /*CPU 2                                 */      
                     96:        .globl  _maxmem
                     97: _maxmem:
                     98:        .space  4               /*memory size in no of bytes            */
                     99: 
                    100:        .globl  _maxpages
                    101: _maxpages:
                    102:        .space  4               /*memory size in no. of physical pages  */
                    103: 
                    104:        .globl  _lastadd
                    105: _lastadd:
                    106:        .space  4               /*address of the last long word         */
                    107: 
                    108:        .globl  _unused
                    109: _unused:
                    110:        .space  4               /*first unused page in system space     */
                    111: 
                    112:        .globl  _ctlblk
                    113: _ctlblk:
                    114:        .long   0               /* pointer to SCB */
                    115: 
                    116:        .globl  _savvec0        /*save vectors area                     */
                    117: _savvec0:
                    118:        .space  4
                    119: 
                    120:        .globl  _savvec1        /*save vectors area                     */
                    121: _savvec1:
                    122:        .space  4
                    123: 
                    124:        .globl  _savvec2        /*save vectors area                     */
                    125: _savvec2:
                    126:        .space  4
                    127: 
                    128:        .globl  _savvec3        /*save vectors area                     */
                    129: _savvec3:
                    130:        .space  4
                    131: 
                    132:        .globl  _savvec4        /*save vectors area                     */
                    133: _savvec4:
                    134:        .space  4
                    135: 
                    136:        .globl  _savvec5        /*save vectors area                     */
                    137: _savvec5:
                    138:        .space  4
                    139:        .globl  _savvec6        /*save vectors area                     */
                    140: _savvec6:
                    141:        .space  4
                    142:        .globl  _savvec7        /*save vectors area                     */
                    143: _savvec7:
                    144:        .space  4
                    145: 
                    146:        .globl  _savvec8        /*save vectors area                     */
                    147: _savvec8:
                    148:        .space  4
                    149: 
                    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  _ret_adr
                    166: _ret_adr:
                    167:        .long   0
                    168:        .globl  _exp_par0
                    169: _exp_par0:
                    170:        .long   0
                    171:        .globl  _exp_par1
                    172: _exp_par1:
                    173:        .long   0
                    174:        .globl  _f_vaddr
                    175: _f_vaddr:
                    176:        .long   0                       /* VA that caused fault */
                    177: 
                    178:        .globl  _f_ptr
                    179: _f_ptr:
                    180:        .long   0                       /* Pointer to fault parameters */
                    181:        .globl  _df_cnt
                    182: _df_cnt:
                    183:        .long   0                       /* Count of data fault */
                    184: 
                    185:        .globl  _if_cnt
                    186: _if_cnt:
                    187:        .long   0                       /* Count of Instruction fault */
                    188: 
                    189:        .globl  _newepc
                    190: _newepc:
                    191:        .long   0
                    192: 
                    193:        .globl  _errcnt
                    194: _errcnt:
                    195:        .long   0
                    196: 
                    197:        .globl  _clk_cnt
                    198: _clk_cnt:
                    199:        .long   0
                    200: 
                    201:        .globl  _ttcnt
                    202: _ttcnt:
                    203:        .long   0                       /* Count of Trap exception */
                    204:        .globl  _trcnt
                    205: _trcnt:
                    206:        .long   0                       /* Count of Translation fault */
                    207: 
                    208:        .globl  _Ufpte
                    209: _Ufpte: .long  0
                    210:        .globl  _Ulpte
                    211: _Ulpte: .long  0
                    212: 
                    213:        .globl  _dbuf           /*dump buffer left out of 1K            */
                    214: _dbuf:
                    215:        .space  NBPG - (NLWU *4)
                    216: edbuf:
                    217: 
                    218: 
                    219:        .globl  _intstack       /* Interrupt stack                      */
                    220: _intstack:                     /* Physical pages 4 & 5                 */
                    221:        .space  NISP*NBPG
                    222: eintstack:
                    223: 
                    224: 
                    225:        .set    SYSPTSIZE,512   /* No. of entries in SPT                */
                    226:  
                    227: /*
                    228:        System Page Table -- physical page 6 & 7
                    229: */ 
                    230:        .align  2
                    231:        .globl  _Sysmap
                    232: _Sysmap:
                    233:        .space  SYSPTSIZE*4     /* 512 max pages allowed for system     */
                    234: eSysmap:
                    235:        .globl  _Syssize
                    236:        .set    _Syssize,(eSysmap-_Sysmap)/4    /* should be SYSPTSIZE  */
                    237:        
                    238:        .globl  _iomap          /* Physical page 8      */
                    239: _iomap:        .space  1024            /* IOMAP - unused       */
                    240:        .globl  _eiomap
                    241: _eiomap:
                    242: 
                    243:        .globl  _pcb0           /* Physical page 9      */
                    244: _pcb0: .space  128             /*process control block 0               */
                    245:        .globl  _pcb1
                    246: _pcb1: .space 128              /*process control block 1               */
                    247:        .globl  _pcb2
                    248: _pcb2: .space 128              /*process control block 2               */
                    249:        .globl  _pcb3
                    250: _pcb3: .space 128              /*process control block 3               */
                    251:        .globl  _pcb4
                    252: _pcb4: .space 128              /*process control block 4               */
                    253:        .globl  _pcb5
                    254: _pcb5: .space 128              /*process control block 5               */
                    255:        .globl  _pcb6
                    256: _pcb6: .space 128              /*process control block 6               */
                    257:        .globl  _pcb7
                    258: _pcb7: .space 128              /*process control block 7               */
                    259: 
                    260: /*
                    261:        *user #0 page tables -- P0PT, P1PT, P2PT                        
                    262:        *physical memory     --  page10, 11, & 12  respectively
                    263: */
                    264:        .align  2
                    265:        .globl  _u0p0pt
                    266: _u0p0pt:
                    267:        .space  1024            /*255 max pages for user #0 text        */
                    268:        .globl  _u0p1pt
                    269: _u0p1pt:       
                    270:        .space  1024            /*255 max pages for user #0 data        */
                    271:        .globl  _u0p2pt
                    272: _u0p2pt:       
                    273:        .space  1020            /*255 max pages for user #0 stack       */
                    274: eu0p2pt:
                    275:        .space  4
                    276: 
                    277: /*
                    278:        *user #1 page tables -- P0PT, P1PT, P2PT                        
                    279:        *physical memory     --  page13 ,14, & 15  respectively
                    280: */
                    281:        .align  2
                    282:        .globl  _u1p0pt
                    283: _u1p0pt:
                    284:        .space  1024            /*255 max pages for user #1 text        */
                    285:        .globl  _u1p1pt
                    286: _u1p1pt:       
                    287:        .space  1024            /*255 max pages for user #1 data        */
                    288:        .globl  _u1p2pt
                    289: _u1p2pt:       
                    290:        .space  1020            /*255 max pages for user #1 stack       */
                    291: eu1p2pt:
                    292:        .space  4
                    293: 
                    294: 
                    295: /*
                    296:        *user #2 page tables -- P0PT, P1PT, P2PT                        
                    297:        *physical memory     --  page 16, 17 , & 18  respectively
                    298: */
                    299:        .align  2
                    300:        .globl  _u2p0pt
                    301: _u2p0pt:
                    302:        .space  1024            /*255 max pages for user #2 text        */
                    303:        .globl  _u2p1pt
                    304: _u2p1pt:       
                    305:        .space  1024            /*255 max pages for user #2 data        */
                    306:        .globl  _u2p2pt
                    307: _u2p2pt:       
                    308:        .space  1020            /*255 max pages for user #2 stack       */
                    309: eu2p2pt:
                    310:        .space  4
                    311: 
                    312: 
                    313: /*
                    314:        *user #3 page tables -- P0PT, P1PT, P2PT                        
                    315:        *physical memory     --  page 19, 20 , & 21  respectively
                    316: */
                    317:        .align  2
                    318:        .globl  _u3p0pt
                    319: _u3p0pt:
                    320:        .space  1024            /*255 max pages for user #3 text        */
                    321:        .globl  _u3p1pt
                    322: _u3p1pt:       
                    323:        .space  1024            /*255 max pages for user #3 data        */
                    324:        .globl  _u3p2pt
                    325: _u3p2pt:       
                    326:        .space  1020            /*255 max pages for user #3 stack       */
                    327: eu3p2pt:
                    328:        .space  4
                    329: 
                    330: /*
                    331:        *user #4 thru 6 page tables
                    332:        *physical memory -- pages 22 thru 30
                    333: */
                    334:        .globl  _u4p0pt
                    335: _u4p0pt:
                    336:        .space  (9*NBPG) - 4
                    337: eu6p2pt:
                    338:        .space  4
                    339: 
                    340: /*
                    341:        Area used for Kernel stack                      
                    342:        physical memory --  page 31, 32 , 33
                    343: */
                    344: 
                    345:        .align  2
                    346:        .globl  _Kstack         /* Kernel stack */
                    347: _Kstack:                       /* Physical pages 31,32,33 */
                    348:        .space  3*NBPG
                    349:        .globl  ekstack 
                    350: ekstack:
                    351: 
                    352: 
                    353:        .globl  _iob0           /*io buffer 0 */
                    354: _iob0: .space  1024
                    355:        .globl  _iob1           /*io buffer 1 */
                    356: _iob1: .space  1024
                    357:        .globl  _iob2           /*io buffer 2 */
                    358: _iob2: .space  1024
                    359:        .globl  _iob3           /*io buffer 3 */
                    360: _iob3: .space  1024
                    361:        .globl  _iob4           /*io buffer 4 */
                    362: _iob4: .space  1024
                    363:        .globl  _iob5           /*io buffer 5 */
                    364: _iob5: .space  1024
                    365:        .globl  _iob6           /*io buffer 6 */
                    366: _iob6: .space  1024
                    367: esysdata:
                    368: 
                    369: /*     SYSTEM CONTROL BLOCK            */
                    370: #include "scblock.s"
                    371: 
                    372: 
                    373: 
                    374: #include       "evthandlers.s"
                    375: 
                    376: #define        ACBL(_n1,_n2,_n3,_n4)   addl2 _n2,_n3;  cmpl _n3,_n1;  bleq _n4;
                    377: 
                    378: 
                    379: 
                    380: /*
                    381:        *INITIALIZATION CODE
                    382:        *
                    383:        * MME off; mode = k; IPL = 31; IS = 1
                    384:        *
                    385: */
                    386: 
                    387:        
                    388:        .globl  start
                    389: start:
                    390:        mtpr    $0,$MME         /* Disable MME */
                    391:        movl    r0,_run_list
                    392:        movl    r1,_OPTIONS
                    393:        movl    r3,_evt_inst    /* save a test inst's op-code    */
                    394:        clrl    _nonstop        /* clear the continuous run flag */
                    395:        movl    r2,_count       /* save the test count           */
                    396:        bneq    1f              /* is count = 0 ?                */
                    397:        movl    $1,_count       /*   yes -set cycle count = 1    */
                    398: 1:     bgeq    1f              /* is count < 0 ?                */
                    399:        movl    $1,_nonstop     /*   yes -set NONSTOP flag       */
                    400: 1:
                    401:        clrl    _no_fpp_wcs     /* clear the NO-FPP WCS flag     */
                    402:        mtpr    $0x400,$DCR     /* check for FPP WCS loaded      */
                    403:        tstl    r1              /* r1 = 0 if NO-FPP WCS loaded   */
                    404:        bneq    1f
                    405:        movl    $1,_no_fpp_wcs  /* set the NO-FPP WCS flag       */
                    406: 1:
                    407:        movab   _scb,r0
                    408:        andl2   $0x3ffffc00,r0
                    409:        mtpr    r0,$SCBB        /* Set SCBB  */
                    410:        mtpr    $0x1f,$IPL      /* Set IPL to HIGH */
                    411: 
                    412:        andl3   $4,r11,_ss1     /* messages sense switch         */
                    413: 
                    414: #
                    415: # clear the option flags
                    416: #
                    417:        clrl    _halt_flg       /* clear the halt on error flag             */
                    418:        clrl    _loop_on_err    /* clear the loop on error flag             */
                    419:        movl    $1,_prt_error   /* clear the print error messages flag      */
                    420:        movl    $1,_prt_hdrs    /* clear the print header messages flag     */
                    421:        movl    $1,_en_data_cache  /* clear the enable data cache flag      */
                    422: 
                    423: #
                    424: # set the option flags as needed
                    425: #
                    426:        bitl    $1,_OPTIONS     /* bit(0) = HALT ON ERROR */
                    427:        beql    1f
                    428:        movl    $1,_halt_flg    /* set the HALT ON ERROR flag */
                    429: 1:
                    430:        bitl    $2,_OPTIONS     /* bit(1) = LOOP ON ERROR */
                    431:        beql    1f
                    432:        movl    $1,_loop_on_err /* set the LOOP ON ERROR flag */
                    433: 1:
                    434:        bitl    $4,_OPTIONS     /* bit(2) = PRINT ERROR MESSAGES */
                    435:        beql    1f
                    436:        clrl    _prt_error      /* set the PRINT ERROR MESSAGES flag */
                    437: 1:
                    438:        bitl    $8,_OPTIONS     /* bit(3) = PRINT HEADER MESSAGES */
                    439:        beql    1f
                    440:        clrl    _prt_hdrs       /* set the PRINT HEADER MESSAGES flag */
                    441: 1:
                    442:        bitl    $16,_OPTIONS    /* bit(4) = ENABLE DATA CAHE flag */
                    443:        beql    1f
                    444:        clrl    _en_data_cache  /* set the ENABLE DATA CACHE flag */
                    445: 1:
                    446:        
                    447:        clrl    _exp_event      /* clear the fpp event expected flag        */
                    448:        movpsl  r1
                    449:        andl2   $0xffffff00,r1          /* Mask out flags               */
                    450:        cmpl    r1,$0x041f0000          /*IS on,modes =k & IPL = 31?    */
                    451:        beql    1f
                    452: 2:     movl    $1,r0
                    453:        movl    $0x041f0000,r2
                    454:        halt                    /* PSL not initialized as expected      */
                    455: 1:
                    456:        movl    $_intstack+NISP*NBPG,r0
                    457:        andl2   $0x3fffffff,r0          /* Mask out bit 30,31 */
                    458:        mtpr    r0,$ISP                 /* init. ISP            */
                    459:        movl    r0,sp                   /* in case we get exception     */
                    460:        movab   (sp),fp                 /* Initialize FP                */
                    461: #
                    462: #      Clear system data area all the way upto system code
                    463: #      this includes dump buffer,interrupt stack,spt,iomap,pcbs,user 
                    464: #      page tables, & io buffer area.
                    465: #
                    466: 3:     
                    467:        movab   esysdata,r7
                    468:        movab   _restart,r6
                    469: 1:     clrl    (r6)
                    470:        ACBL(r7,$4,r6,1b)
                    471: #
                    472: #      Initialize System Page Table
                    473: #
                    474: 5:
                    475:        clrl    r2
                    476:        movab   esysdata,r1     /* R1 = Last address in system data area */
                    477:        andl2   $0x3fffffff,r1  /* Mask out bit 30,31   */
                    478:        shar    $PGSHIFT,r1,r1  /* Get page no. of last system data addr  */
                    479:                                /* Map systm data area 1 to 1,kernel writable */
                    480: 1:
                    481:        orl3    $PG_V|PG_KW,r2,_Sysmap[r2]
                    482:        aoblss  r1,r2,1b
                    483: 
                    484: #
                    485: #      Map system text area 1 to 1, Kernel read/write.
                    486: #      For this to work, the label _etext must exist at the end 
                    487: #      of system code; Add in 4 more pages for data area used in C
                    488: #
                    489:        movab   _Esys,r1        /* Map System text 1 to 1; Kernel R/W */
                    490:        andl2   $0x3fffffff,r1
                    491:        shar    $PGSHIFT,r1,r1
                    492: 1:
                    493:        orl3    $PG_V|PG_KW,r2,_Sysmap[r2]
                    494:        aobleq  r1,r2,1b
                    495: #
                    496: #      Map from here to last page used by user :
                    497: #      invalid, User access, & virtual = physical
                    498: #
                    499:        movl    r2,_unused      /* Save first unused physical page no   */
                    500:        movl    r2,_Ufpte               /* First PTE of User */
                    501:        movl    $0x80000,r1             /* Allow this much memory for User */
                    502:        shar    $PGSHIFT,r1,r1
                    503:        movl    r1,_Ulpte               /* Last PTE of User */
                    504: 
                    505: 1:
                    506:        orl3    $PG_V|PG_UW,r2,_Sysmap[r2]      /* Valid / User Read/Write */
                    507:        aoblss  r1,r2,1b
                    508: 
                    509: #
                    510: #      Initialize SBR, SLR
                    511: #
                    512: sysrdy:
                    513:        mtpr    $_Sysmap,$SBR                   /* Set SYSTEM BASE REG */
                    514:        mtpr    $_Syssize,$SLR
                    515:        mtpr    $64,$DCR                        /* Enable fault */
                    516: 
                    517: #              GO TO VIRTUAL MODE
                    518: #      Double map the kernel into user addresses : 
                    519: #      This will enable system to go to virtual mode the 1st time !!
                    520: #
                    521: 
                    522:        orl3    $0xc0000000,$_Sysmap,r0 
                    523:        mtpr    r0,$P0BR                /* Double map P0BR to SBR */
                    524:        mtpr    $_Syssize,$P0LR
                    525:        mtpr    $1,$PADC                /* Purge all data cache */
                    526:        mtpr    $1,$PACC                /* Purge all code cache */
                    527:        mtpr    $1,$TBIA                /* Purge all Trans. buffer */
                    528:        
                    529:        mtpr    $_pcb0,$0xe             /* Init. PCBB to PCB_0 */
                    530:        
                    531:        movab   _pcb0,r0
                    532:        movab   ekstack,PCB_KSP(r0)     /* Init. PCB_KSP             */
                    533:        movab   eustack,PCB_USP(r0)     /* Init. PCB_USP             */
                    534:        mfpr    $P0BR,PCB_P0BR(r0)      /*  "    PCB_P0BR            */
                    535:        mfpr    $P0LR,PCB_P0LR(r0)      /*  "    PCB_P0LR            */
                    536:        movl    $0x0000000,PCB_PSL(r0)  /* Set PCB_PSL : Kernel Mode */
                    537: 
                    538:        mfpr    $SCBB,r0                /* get the SCB pointer        */
                    539:        movab   _Clock_handler,CLOCKVEC(r0)  /* Set new clock handler */
                    540:        
                    541:        movab   ekstack,sp              /* set the stack pointer     */
                    542:        movab   (sp),fp                 /* Initialize FP             */
                    543: 
                    544:        movl    $1,_Codek
                    545:        mtpr    _Codek,$CCK             /* Set code cache key */
                    546: 
                    547:        callf   $4,_monitor
                    548: 
                    549: 
                    550: 
                    551: 
                    552: # /****************************************************************************
                    553: # *            Real Time Clock Handler routine
                    554: # ****************************************************************************/
                    555:        .align 2
                    556:        .globl _Clock_handler
                    557: _Clock_handler:
                    558:        movl    $1,_rtc_occurred                /* set the clock event flag   */
                    559:        rei                                     /* return to the test routine */
                    560: 
                    561: 
                    562: 
                    563: # /****************************************************************************
                    564: # *                    STACK AREA
                    565: # ****************************************************************************/
                    566: 
                    567:        .globl  _Esys                   /* end of systems only code */
                    568: _Esys:
                    569:        .space  NBPG
                    570:        
                    571:        .globl  _Ustack                 /* basic stack space */
                    572: _Ustack:
                    573:        .space  (2*NBPG)-4              /* 2 pages */
                    574:        .globl  eustack
                    575: eustack:
                    576:        .long   0                       /* initial user stack ptr */
                    577: 
                    578:        .globl  U_area
                    579: U_area:
                    580: 

unix.superglobalmegacorp.com

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