Annotation of researchv10no/sys/ml/trapdw780.s, revision 1.1

1.1     ! root        1: #
        !             2: # trap code specific to DW780 --
        !             3: # SBI UNIBUS adapter
        !             4: #
        !             5: # pull the appropriate vector register out of the air
        !             6: # if the high bit is set or the number is 0, call the driver
        !             7: # else call the proper interrupt routine
        !             8: #
        !             9: # must supply an entry point for each unibus adapter,
        !            10: # by hand; never mind why, for now.
        !            11: #
        !            12: 
        !            13:        .set    PSIZE,2         # sizeof(pushl $SAVREG)
        !            14:        .set    LOCREG,0x7      # registers needed locally -- r0 r1 r2
        !            15: 
        !            16: #
        !            17: # entry points; up to 3 DWs for now
        !            18: #
        !            19:        .globl  Xuba30
        !            20:        .globl  Xuba20
        !            21:        .globl  Xuba10
        !            22:        .globl  Xuba00
        !            23:        .align  2
        !            24: Xuba30:        pushr   $SAVREG
        !            25:        movl    $3,r0
        !            26:        brb     ubint
        !            27:        .align  2
        !            28: Xuba20:        pushr   $SAVREG
        !            29:        movl    $2,r0
        !            30:        brb     ubint
        !            31:        .align  2
        !            32: Xuba10:        pushr   $SAVREG
        !            33:        movl    $1,r0
        !            34:        brb     ubint
        !            35:        .align  2
        !            36: Xuba00:        pushr   $SAVREG
        !            37:        clrl    r0
        !            38: # fall in ...
        !            39: ubint:
        !            40:        movl    _ubavreg[r0],r1 # pick up address of BRRVRs
        !            41:        beql    2f
        !            42:        mfpr    $IPL,r2
        !            43:        extzv   $0,$2,r2,r2
        !            44:        movl    (r1)[r2],r1     # grab the appropriate BRRVR
        !            45:        bleq    1f              # br if adapter intr
        !            46: 0:     addl3   $scb,_ubavoff[r0],r0    # addr of first vector for this adapter
        !            47:        addl2   r1,r0           # addr of addr of interrupt routine
        !            48:        bicl3   $3,(r0),r0      # pick up addr, clear stack bits
        !            49:        jmp     PSIZE(r0)       # skip initial pushr and go there
        !            50: 
        !            51: #
        !            52: # here for an adapter interrupt
        !            53: #
        !            54: 1:     pushr   $LOCREG
        !            55:        movq    r0,-(sp)        # pushl r1; pushl r0
        !            56:        calls   $2,_uba0int     # service interrupt
        !            57:        popr    $LOCREG
        !            58:        bbcc    $31,r1,2f       # clear `need service' bit
        !            59: 2:     tstl    r1              # anything left?
        !            60:        bgtr    0b              # yes, go do intr
        !            61: 8:     popr    $SAVREG
        !            62:        rei
        !            63: 
        !            64: #
        !            65: # here if the adapter hasn't been initialized,
        !            66: # but interrupted anyway
        !            67: # perhaps a disaster -- will it just keep interrupting?
        !            68: #
        !            69: ubstray:
        !            70:        mfpr    $IPL,-(sp)
        !            71:        pushl   r0
        !            72:        pushab  9f
        !            73:        calls   $3,_printf
        !            74:        brb     8b
        !            75: 
        !            76: 9:     .asciz  "ub%d: intr without init, ipl%x\n"

unix.superglobalmegacorp.com

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