Annotation of xinu/sys/startup.s, revision 1.1.1.1

1.1       root        1: /* startup.s - start */
                      2: 
                      3: #include <procreg.h>
                      4: #include <conf.h>
                      5: #include <kernel.h>
                      6: #include <mach.h>
                      7: 
                      8: #define        PSLDISAB        0x001f0000      /* initial PSL -- interrupts    */
                      9:                                        /* disabled, on kernel stack,   */
                     10:                                        /* kernel mode                  */
                     11: 
                     12: /*----------------------------------------------------------------------------
                     13:  *  Xinu system entry point -- first location beyond interrupt vectors
                     14:  *  assumption: processor is in kernel mode on entry 
                     15:  *----------------------------------------------------------------------------
                     16: */
                     17:        .text
                     18:        .globl  start
                     19:        .globl  _restart
                     20: start:                                 /* boot utility entry pt        */
                     21: _restart:                              /* shell reboot cmd entry pt    */
                     22:        nop; nop                        /* == .word 0x0101; can jmp to  */
                     23:                                        /* start or calls $0, start     */
                     24:        mtpr    $DISABLE, $IPL          /* disable interrupts           */
                     25: #if defined(VAX750) || defined(VAX730) || defined(VAX725) || \
                     26:     defined(UVAX)
                     27:        mtpr    $IURSET, $IUR           /* reset the bus                */
                     28:        mtpr    $IURUNSET, $IUR         /* unreset the bus              */
                     29: #endif
                     30:        mtpr    $intstk, $ISP           /* interrupt stack given memory */
                     31:        mtpr    $NOMAP, $MAPEN          /* disable memory management    */
                     32:        movab   _end, r2                /* zero out bss (just in case)  */
                     33:        movab   _edata, r1
                     34: clrbss:
                     35:        clrb    (r1)+
                     36:        cmpl    r1, r2                  /* more bss to zero?            */
                     37:        jlssu   clrbss                  /* yes => back to clrbss        */
                     38:        mtpr    $lowcore, $SCBB         /* sys ctrl blck pts to vectors */
                     39:        mtpr    _nullpcb, $PCBB         /* PCBB points to null process' */
                     40:                                        /* process control block entry  */
                     41:                                        /* in proctab[]                 */
                     42:                                        /* set up nulluser's proc ctrl  */
                     43:        movl    _nullpcb, r1            /* block--init all general reg  */
                     44:        addl3   $72, r1, r0             /* clear fp first, then r12-r0  */
                     45: pcbloop:                               /* then 4 stack pointers        */
                     46:        clrl    -(r0)
                     47:        cmpl    r0, r1
                     48:        jgtru   pcbloop
                     49:        moval   kernstk, (r0)           /* stack pointer given memory-- */
                     50:                                        /* kernstk used for now         */
                     51:        movab   pcbcont, 72(r0)         /* PC points to pcbcont         */
                     52:        movl    $PSLDISAB, 76(r0)       /* initial psl, interrupts      */
                     53:                                        /* disabled, on kernel stack    */
                     54:        movl    $INITBR, 80(r0)         /* set P0BR                     */
                     55:        movl    $INITLR, 84(r0)         /* AST lvl set to none pending, */
                     56:                                        /* P0LR set to 0                */
                     57:        movl    $INITBR, 88(r0)         /* set P1BR                     */
                     58:        clrl    92(r0)                  /* set P1LR                     */
                     59:        ldpctx                          /* load new context             */
                     60:        rei                             /* resume at pcbcont            */
                     61: pcbcont:                               /* set all pertinent internal   */
                     62:                                        /* processor registers          */
                     63:                                        /*   (it may not be necessary   */
                     64:                                        /*    to set all of these)      */
                     65:                                        /* (r0 is now 0)                */
                     66:        mtpr    r0, $SISR               /* clear software intrpt summary*/
                     67:        mtpr    r0, $ICCS               /* clear interval clock csr     */
                     68:        mtpr    r0, $RXCS               /* clr cons recv intrrpt enable */
                     69:        mfpr    $SID, r1                /* get system id register value */
                     70:        bicl2   $SYSTYPE, r1            /* mask off system id           */
                     71:        movl    r1, _machinesid         /* move machine system id       */
                     72:        mfpr    $RXDB, r1               /* clear incoming byte if any   */
                     73:        mtpr    r0, $TXCS               /* clear cons trans int enable  */
                     74: #if    defined(VAX750) || defined(VAX730) || defined(VAX725) || \
                     75:        defined(UVAX)
                     76:        mtpr    $3, $TBDR               /* disable translation buffer   */
                     77:        mtpr    $MCESRCLR, $MCESR       /* clear machine check error reg*/
                     78:        mtpr    r0, $CAER               /* clear cache error register   */
                     79:        mtpr    r0, $CADR               /* enable cache                 */
                     80: #endif
                     81: #if    defined(VAX780) || defined(VAX785)
                     82:        mtpr    r0, $SBIFS              /* clear SBI fault and status   */
                     83:        mtpr    r0, $SBIER              /* clear SBI error register     */
                     84: #endif
                     85: #if defined(VAX8600)
                     86:        mtpr    $0, $EHSR               /* clear error handling status  */
                     87: #endif
                     88:        mtpr    r0, $TBIA               /* clear trans buffer inval all */
                     89:        calls   $0, sizmem              /* _maxaddr set to max address  */
                     90:        movl    _maxaddr, sp            /* switch stack to high memory  */
                     91:        calls   $0, _nulluser           /* Run C startup routine        */
                     92:                                        /* nulluser should never return */
                     93:        pushab  errmes                  /* trap return to startup       */
                     94:        calls   $1, _kprintf
                     95:        jmp     __halt
                     96: 
                     97:        .data   1
                     98: errmes:
                     99:        .ascii  "error--nulluser returned to startup\n\0"

unix.superglobalmegacorp.com

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