Annotation of xinu/sys/startup.s, revision 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.