Annotation of cci/d/ioex/udcinit.x, revision 1.1.1.1

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:        jmp     start
                     58:        .space  (1024-6)
                     59: 
                     60: 
                     61: 
                     62: /*             globl dump buffer to be used for communication          */
                     63: /*             between tests & interrupt handlers, & other misc.       */
                     64: /*             purposes.                                               */
                     65:                                
                     66:                                /*physical page 3                       */
                     67: 
                     68:        .set    NLWU,32         /*no. of longwords already used         */
                     69:                                /*this must be changed when you define  */
                     70:                                /*additional variables below before     */
                     71:                                /*_dbuf                                 */
                     72:        .globl  _restart
                     73: _restart:
                     74:        .space  4               /*contains restart address for restarting*/
                     75:                                /*after power is restored (loaded by    */
                     76:                                /*power fail interrupt handler & used by*/
                     77:                                /*CPU 2                                 */      
                     78: /*     ******************      */
                     79:        .globl  _cyconf         /*  address : 0xc04                     */
                     80: _cyconf:                       /*  Cypher configuration pointer : 0xc06  */
                     81:        .space  4
                     82:        .space  4
                     83: /*     ******************      */
                     84: 
                     85:        .globl  _lastadd
                     86: _lastadd:
                     87:        .space  4               /*address of the last long word         */
                     88: 
                     89:        .globl  _unused
                     90: _unused:
                     91:        .space  4               /*first unused page in system space     */
                     92: 
                     93:        .globl  _ctlblk
                     94: _ctlblk:
                     95:        .long   0               /* pointer to SCB */
                     96: 
                     97:        .globl  _savvec0        /*save vectors area                     */
                     98: _savvec0:
                     99:        .space  4
                    100: 
                    101:        .globl  _savvec1        /*save vectors area                     */
                    102: _savvec1:
                    103:        .space  4
                    104: 
                    105:        .globl  _savvec2        /*save vectors area                     */
                    106: _savvec2:
                    107:        .space  4
                    108: 
                    109:        .globl  _savvec3        /*save vectors area                     */
                    110: _savvec3:
                    111:        .space  4
                    112: 
                    113:        .globl  _savvec4        /*save vectors area                     */
                    114: _savvec4:
                    115:        .space  4
                    116: 
                    117:        .globl  _savvec5        /*save vectors area                     */
                    118: _savvec5:
                    119:        .space  4
                    120:        .globl  _savvec6        /*save vectors area                     */
                    121: _savvec6:
                    122:        .space  4
                    123:        .globl  _savvec7        /*save vectors area                     */
                    124: _savvec7:
                    125:        .space  4
                    126: 
                    127:        .globl  _savvec8        /*save vectors area                     */
                    128: _savvec8:
                    129:        .space  4
                    130: 
                    131: testno: .long  0
                    132: 
                    133:        .globl  _dbuf           /*dump buffer left out of 1K            */
                    134:        .globl  _r_no
                    135: _r_no:
                    136:        .long   0
                    137:        .globl  _pt_base
                    138: _pt_base:
                    139:        .long   0
                    140:        .globl  _saved_psl
                    141: _saved_psl:
                    142:        .long   0
                    143:        .globl  _saved_sp
                    144: _saved_sp:
                    145:        .long   0
                    146:        .globl  _saved_fp
                    147: _saved_fp:
                    148:        .long   0
                    149:        .globl  _p_ptr
                    150: _p_ptr:
                    151:        .long   0
                    152:        .globl  _ret_adr
                    153: _ret_adr:
                    154:        .long   0
                    155:        .globl  _exp_par0
                    156: _exp_par0:
                    157:        .long   0
                    158:        .globl  _exp_par1
                    159: _exp_par1:
                    160:        .long   0
                    161:        .globl  _exp_par2
                    162: _exp_par2:
                    163:        .long   0
                    164:        .globl  _exp_par3
                    165: _exp_par3:
                    166:        .long   0
                    167:        .globl  _act_par0
                    168: _act_par0:
                    169:        .long   0
                    170:        .globl  _act_par1
                    171: _act_par1:
                    172:        .long   0
                    173: 
                    174:        .globl  _IOpage
                    175: _IOpage:
                    176:        .long   0               /* Pointer 64K I/O pages */
                    177: #
                    178: #
                    179: #
                    180:        .globl  _proc_no
                    181: _proc_no:
                    182:        .long   0
                    183: 
                    184:        .globl  _clk_cnt
                    185: _clk_cnt:
                    186:        .long   0
                    187: _dbuf:
                    188:        .space  NBPG - (NLWU *4)
                    189: edbuf:
                    190: 
                    191: 
                    192:        .globl  _intstack       /* Interrupt stack                      */
                    193: _intstack:                     /* Physical pages 4 & 5                 */
                    194:        .space  NISP*NBPG
                    195: eintstack:
                    196: 
                    197: 
                    198:        .set    SYSPTSIZE,512   /* No. of entries in SPT                */
                    199:  
                    200: /*
                    201:        System Page Table -- physical page 6 & 7
                    202: */ 
                    203:        .align  2
                    204:        .globl  _Sysmap
                    205: _Sysmap:
                    206:        .space  SYSPTSIZE*4     /* 512 max pages allowed for system     */
                    207: eSysmap:
                    208:        .globl  _Syssize
                    209:        .set    _Syssize,(eSysmap-_Sysmap)/4    /* should be SYSPTSIZE  */
                    210:        
                    211:        .globl  _iomap          /* Physical page 8      */
                    212: _iomap:        .space  1024            /* IOMAP - unused       */
                    213:        .globl  _eiomap
                    214: _eiomap:
                    215: 
                    216:        .globl  _pcb0           /* Physical page 9      */
                    217: _pcb0: .space  128             /*process control block 0               */
                    218:        .globl  _pcb1
                    219: _pcb1: .space 128              /*process control block 1               */
                    220:        .globl  _pcb2
                    221: _pcb2: .space 128              /*process control block 2               */
                    222:        .globl  _pcb3
                    223: _pcb3: .space 128              /*process control block 3               */
                    224:        .globl  _pcb4
                    225: _pcb4: .space 128              /*process control block 4               */
                    226:        .globl  _pcb5
                    227: _pcb5: .space 128              /*process control block 5               */
                    228:        .globl  _pcb6
                    229: _pcb6: .space 128              /*process control block 6               */
                    230:        .globl  _pcb7
                    231: _pcb7: .space 128              /*process control block 7               */
                    232: 
                    233: /*
                    234:        *user #0 page tables -- P0PT, P1PT, P2PT                        
                    235:        *physical memory     --  page10, 11, & 12  respectively
                    236: */
                    237:        .align  2
                    238:        .globl  _u0p0pt
                    239: _u0p0pt:
                    240:        .space  1024            /*255 max pages for user #0 text        */
                    241:        .globl  _u0p1pt
                    242: _u0p1pt:       
                    243:        .space  1024            /*255 max pages for user #0 data        */
                    244:        .globl  _u0p2pt
                    245: _u0p2pt:       
                    246:        .space  1020            /*255 max pages for user #0 stack       */
                    247: eu0p2pt:
                    248:        .space  4
                    249: 
                    250: /*
                    251:        *user #1 page tables -- P0PT, P1PT, P2PT                        
                    252:        *physical memory     --  page13 ,14, & 15  respectively
                    253: */
                    254:        .align  2
                    255:        .globl  _u1p0pt
                    256: _u1p0pt:
                    257:        .space  1024            /*255 max pages for user #1 text        */
                    258:        .globl  _u1p1pt
                    259: _u1p1pt:       
                    260:        .space  1024            /*255 max pages for user #1 data        */
                    261:        .globl  _u1p2pt
                    262: _u1p2pt:       
                    263:        .space  1020            /*255 max pages for user #1 stack       */
                    264: eu1p2pt:
                    265:        .space  4
                    266: 
                    267: 
                    268: /*
                    269:        *user #2 page tables -- P0PT, P1PT, P2PT                        
                    270:        *physical memory     --  page 16, 17 , & 18  respectively
                    271: */
                    272:        .align  2
                    273:        .globl  _u2p0pt
                    274: _u2p0pt:
                    275:        .space  1024            /*255 max pages for user #2 text        */
                    276:        .globl  _u2p1pt
                    277: _u2p1pt:       
                    278:        .space  1024            /*255 max pages for user #2 data        */
                    279:        .globl  _u2p2pt
                    280: _u2p2pt:       
                    281:        .space  1020            /*255 max pages for user #2 stack       */
                    282: eu2p2pt:
                    283:        .space  4
                    284: 
                    285: 
                    286: /*
                    287:        *user #3 page tables -- P0PT, P1PT, P2PT                        
                    288:        *physical memory     --  page 19, 20 , & 21  respectively
                    289: */
                    290:        .align  2
                    291:        .globl  _u3p0pt
                    292: _u3p0pt:
                    293:        .space  1024            /*255 max pages for user #3 text        */
                    294:        .globl  _u3p1pt
                    295: _u3p1pt:       
                    296:        .space  1024            /*255 max pages for user #3 data        */
                    297:        .globl  _u3p2pt
                    298: _u3p2pt:       
                    299:        .space  1020            /*255 max pages for user #3 stack       */
                    300: eu3p2pt:
                    301:        .space  4
                    302: 
                    303: /*
                    304:        *user #4 thru 6 page tables
                    305:        *physical memory -- pages 22 thru 30
                    306: */
                    307:        .globl  _u4p0pt
                    308: _u4p0pt:
                    309:        .space  (9*NBPG) - 4
                    310: eu6p2pt:
                    311:        .space  4
                    312: 
                    313: /*
                    314:        *user #7 page tables -- P0PT, P1PT, P2PT                        
                    315:        *physical memory     --  page 31, 32 , & 33  respectively
                    316: */
                    317:        .align  2
                    318:        .globl  _u7p0pt
                    319: _u7p0pt:
                    320:        .space  1024            /*255 max pages for user #7 text        */
                    321:        .globl  _u7p1pt
                    322: _u7p1pt:       
                    323:        .space  1024            /*255 max pages for user #7 data        */
                    324:        .globl  _u7p2pt
                    325: _u7p2pt:       
                    326:        .space  1020            /*255 max pages for user #7 stack       */
                    327: eu7p2pt:
                    328:        .space  4
                    329: 
                    330:        .globl  _Ksp0           /* Page used for Kernel stack of user0 */
                    331: _Ksp0: .space  1020
                    332: _Eksp0:        .long   0
                    333: 
                    334:        .globl  _Ksp1           /* Page used for Kernel stack of user1 */
                    335: _Ksp1: .space  1020
                    336: _Eksp1:        .long   0
                    337: 
                    338:        .globl  _Ksp2           /* Page used for Kernel stack of user2 */
                    339: _Ksp2: .space  1020
                    340: _Eksp2:        .long   0
                    341: 
                    342:        .globl  _Ksp3           /* Page used for Kernel stack of user3 */
                    343: _Ksp3: .space  1020
                    344: _Eksp3:        .long   0
                    345: 
                    346:        .globl  _Ksp4           /* Page used for Kernel stack of user4 */
                    347: _Ksp4: .space  1020
                    348: _Eksp4:        .long   0
                    349: 
                    350:        .globl  _Ksp5           /* Page used for Kernel stack of user5 */
                    351: _Ksp5: .space  1020
                    352: _Eksp5:        .long   0
                    353: 
                    354:        .globl  _Ksp6           /* Page used for Kernel stack of user6 */
                    355: _Ksp6: .space  1020
                    356: _Eksp6:        .long   0
                    357: #
                    358: #      I/O buffers
                    359: #
                    360:        .globl  _iob0
                    361: _iob0: .space  1024
                    362:        .globl  _iob1
                    363: _iob1: .space  1024
                    364:        .globl  _iob2
                    365: _iob2: .space  1024
                    366:        .globl  _iob3
                    367: _iob3: .space  1024
                    368:        .globl  _iob4
                    369: _iob4: .space  1024
                    370:        .globl  _iob5
                    371: _iob5: .space  1024
                    372: 
                    373: esysdata:
                    374: 
                    375: #include "scblock.s"           /* SYSTEM CONTROL BLOCK                 */
                    376: 
                    377: 
                    378: 
                    379: 
                    380: 
                    381: 
                    382: #include       "evthandlers.s" /*event handlers                        */
                    383: 
                    384: #define        ACBL(_n1,_n2,_n3,_n4) \
                    385: addl2  _n2,_n3;\
                    386: cmpl   _n3,_n1;\
                    387: bleq   _n4;
                    388: 
                    389: 
                    390: 
                    391: /*
                    392:        *INITIALIZATION CODE
                    393:        *
                    394:        * MME off; mode = k; IPL = 31; IS = 1
                    395:        *
                    396: */
                    397: 
                    398:        .globl  start
                    399: start:
                    400:        mtpr    $0,$MME         /* Disable MME */
                    401:        movl    r0,tst_mask
                    402:        movab   _scb,r0
                    403:        andl2   $0x3ffffc00,r0
                    404:        mtpr    r0,$SCBB        /* Set SCBB  */
                    405:        mtpr    $0x1f,$IPL      /* Set IPL to HIGH */
                    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: _bmore:
                    495:        cmpl    _btime,$0x5
                    496:        jeql    1f
                    497:        jmp     _bmore
                    498: 1:     incl    _bell                   /* No more bell */
                    499: 
                    500:        .globl  _ready
                    501: _ready:
                    502:        clrl    _proc_no
                    503:        mtpr    $1,$PACC
                    504:        mtpr    $1,$PADC
                    505:        mtpr    $1,$TBIA
                    506:        mtpr    $1,$CCK                 /* Set Code Cache Key = 1 */
                    507:        mtpr    $1,$DCK                 /* Set Data Cache Key = 1 */
                    508:        mtpr    $1,$MME                 /* Enable MME */
                    509:        jmp     *$1f
                    510: 1:
                    511:        movab   _pcb0,r0
                    512:        movab   _Eksp0,(r0)             /* Set PCB0_KSP */
                    513:        mfpr    $P0BR,PCB_P0BR(r0)      /* Set PCB0_P0BR */
                    514:        mfpr    $P0LR,PCB_P0LR(r0)      /* Set PCB0_P0LR */
                    515:        mtpr    r0,$PCBB                /* Init PCBB to PCB_0 */
                    516:        ldpctx                          /* Just to switch to Kernel stack */
                    517:        mtpr    $1,$IPL                 /* Drop IPL to 0 */
                    518:        movl    (sp)+,r12               /* Pop unnecessary PC,PSL */
                    519:        movl    (sp)+,r11
                    520: 
                    521:        callf   $4,_udc         /* Test UDC */
                    522:        movl    $0xcafebabe,r0
                    523:        halt
                    524: #
                    525: #      Real time clock Handler
                    526: #
                    527:        .align  2
                    528:        .globl  _Xclock
                    529: _Xclock:
                    530:        tstl    _bell                   /* If set then just return */
                    531:        jneq    2f
                    532:        incl    _bturn
                    533:        cmpl    _bturn,$0x20
                    534:        jneq    2f
                    535:        pushl   $7
                    536:        callf   $8,_writec              /* Ring bell */
                    537:        incl    _btime
                    538:        clrl    _bturn
                    539: 2:     rei
                    540: 
                    541: #
                    542: #      Bus error handler
                    543: #
                    544:        .align  2
                    545:        .globl  _Buser
                    546: _Buser:
                    547:        movab   (sp),-(sp)              /* Push pointer to error parameter */
                    548:        callf   $8,_buserror
                    549:        incl    _Berr
                    550:        movl    (sp)+,r0
                    551:        movl    (sp)+,r0
                    552:        rei
                    553: 
                    554: 
                    555:        .align  2
                    556: tst_mask:
                    557:        .long   0
                    558: _bell: .long   0
                    559: _bturn: .long  0
                    560: _btime: .long  0
                    561:        .globl  _Berr
                    562: _Berr: .long   0
                    563:        .globl  _IOinit
                    564: _IOinit: .long 0
                    565:        .globl  _tape_ON
                    566: _tape_ON:
                    567:        .long   1
                    568: 
                    569:        .align  1
                    570: tmsg:  .ascii  "\nTape controller not found !\12\0"

unix.superglobalmegacorp.com

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