Annotation of cci/d/event/mulevt.s, revision 1.1

1.1     ! root        1:  #
        !             2:  #     Multiple events tests :
        !             3:  #     Check out the order of servicing multiple events
        !             4:  #
        !             5: 
        !             6: 
        !             7:        .set    SFEVEC,0x36             /* Vector no. for SFE */
        !             8:        .set    TTVEC,0x32              /* Vector no. for Trace trap */
        !             9:        .set    SINT11,0x14             /* Vector no. for Soft int#11 */
        !            10: 
        !            11:        .globl  _mulevt
        !            12: _mulevt:
        !            13:        .word   0x1fff
        !            14: 
        !            15:        mtpr    $17,$IPL                /* allow clock interrupt */
        !            16:        mtpr    $_Sysmap,$P0BR
        !            17:        mtpr    $_Syssize,$P0LR
        !            18:        clrl    _Udata
        !            19:        movl    fp,_saved_fp            /* Save FP */
        !            20: 
        !            21:        movl    $SINT11,r1
        !            22:        movl    _scb[r1],_savvec5       /* Save SOFTINT#11  vector      */
        !            23:        movab   si11_hdr,_scb[r1]       /* Set new Soft int#11 vector   */
        !            24:                                        /* Make User area User accessible */
        !            25:        mfpr    $P0BR,r0
        !            26:        andl3   $0x3fffffff,$_Ucode,r1
        !            27:        shar    $PGSHIFT,r1,r1          /* Get Page no */
        !            28:        orl2    $0xf8000000,(r0)[r1]    /* Set User READ/WRITE */
        !            29:        mtpr    $1,$TBIA
        !            30:                                        
        !            31:        mtpr    $0xc,$IPL               /* Set IPL to 12                */
        !            32:        mtpr    $0xb,$SIRR              /* Request soft int#11          */
        !            33: 
        !            34:        andl3   $_pcb0,$0x3fffffff,r1   /* Initialize PCB slightly      */
        !            35:        mtpr    r1,$PCBB                /* Set PCBB                     */
        !            36:        orl2    $0xc0000000,r1
        !            37:        movab   (sp),r7 
        !            38:        subl3   $8,r7,_exp_isp          /* Set expected ISP             */
        !            39:        subl3   $40,r7,PCB_KSP(r1)      /* Set PCB_KSP to (SP-40)       */
        !            40:        movl    PCB_KSP(r1),_exp_ksp    /* Set expected SP after except. */
        !            41:        subl3   $80,r7,PCB_USP(r1)      /* Set PCB_USP to (SP-80)       */
        !            42:        mfpr    $P0BR,PCB_P0BR(r1)      /* Set PCB_P0BR                 */
        !            43:        mfpr    $P0LR,PCB_P0LR(r1)      /* Set PCB_P0BR                 */
        !            44:        movl    $0x41000110,_exp_psl    /* Set PCB_PSL  : U_mode,       */
        !            45:        movl    _exp_psl,PCB_PSL(r1)    /* SFE set, T_bit and TP_bit set */
        !            46: 
        !            47:        movab   _Ucode,_exp_pc
        !            48:        movl    _exp_pc,PCB_PC(r1)      /* Set PCB_PC */
        !            49:        ldpctx                          /* Switch to Kernel SP, push PSL,PC */
        !            50: mrei:
        !            51:        rei                             /* Should get soft int.#11 ! */
        !            52: 
        !            53: fini:
        !            54:        movl    _saved_fp,fp            /* Restore FP */
        !            55:        ret                             /* Done with this sucker !!     */
        !            56: #
        !            57: #      **************
        !            58: #      Event Handlers
        !            59: #      **************
        !            60: #                                      /* **************************** */
        !            61:        .align  2                       /* SFE exception handler        */
        !            62: sfehdlr:                               /* **************************** */
        !            63:        movpsl  r10                     /* R10 = PSL after exception    */
        !            64:        andl3   $0x101f0000,r10,r1      /* R1 = IS,IPL after exception  */
        !            65:        clrl    r2                      /* R2 = Expected IS,IPL         */
        !            66:        cmpl    r1,r2
        !            67:        jeql    1f
        !            68:        movl    $6,r0                   /* Error : IPL not correct after */
        !            69:        jmp     *badrtn                 /* SFE exception. R0 = error code */
        !            70: 1:
        !            71:        movab   (sp),r1                 /* R1 : KSP after exception     */
        !            72:        movl    _exp_ksp,r2             /* R2 : Expected KSP            */
        !            73:        cmpl    r1,r2
        !            74:        beql    1f
        !            75:        movl    $7,r0                   /* Error : SP not correct after */
        !            76:        jmp     *badrtn                 /* SFE exception                */
        !            77: 1:
        !            78:        movab   (sp),r9
        !            79:        movl    (r9),r1                 /* R1 : PC on SP after exception */
        !            80:        movl    _exp_pc,r2              /* R2 : expected PC             */
        !            81:        cmpl    r1,r2
        !            82:        beql    1f
        !            83:        movl    $8,r0                   /* Error : PC on SP not correct after */
        !            84:        jmp     *badrtn                 /* SFE exception                */
        !            85: 1:
        !            86:        movl    4(r9),r1                /* R1 : PSL on SP after exception */
        !            87:        movl    _exp_psl,r2             /* R2 : Expected PSL            */
        !            88:        cmpl    r1,r2
        !            89:        beql    1f
        !            90:        movl    $9,r0                   /* Error : PSL on SP incorrect after */
        !            91:        jmp     *badrtn                 /* SFE exception                */
        !            92: 1:
        !            93:        andl3   $0xbfffffff,_exp_psl,_exp_psl   /* Clear PSL_TP */
        !            94:        mfpr    $ISP,r1                 /* R1 : Expected ISP */
        !            95:        movl    _exp_isp,r2             /* R2 : Expected ISP            */
        !            96:        cmpl    r1,r2
        !            97:        beql    1f
        !            98:        movl    $10,r0                  /* Error : PSL on SP incorrect after */
        !            99:        jmp     *badrtn                 /* SFE exception                */
        !           100: 1:
        !           101:        movl    $TTVEC,r1
        !           102:        movl    _scb[r1],_savvec6       /* Save TRACE trap vector       */
        !           103:        movab   tt_hdlr,_scb[r1]        /* Set new TRACE vector : Just REI */
        !           104:        rei                             /* Should take Trace trap       */
        !           105: #
        !           106: #
        !           107: #                                      /* **************************** */
        !           108:        .align  2                       /* TRACE trap handler           */
        !           109: tt_hdlr:                               /* **************************** */
        !           110:        movl    _Udata,r1               /* Check if 1 inst. executed    */
        !           111:        clrl    r2                      /* when REI from SFE handler..  */
        !           112:        cmpl    r1,r2
        !           113:        jeql    1f
        !           114:        movl    $11,r0                  /* Error : did not get Trace trap */
        !           115:        jmp     *badrtn                 /* when PSL_TP and PSL_T were set */
        !           116: 1:
        !           117:        movpsl  r10                     /* R10 = PSL after exception    */
        !           118:        andl3   $0x101f0000,r10,r1      /* R1 = IS,IPL after exception  */
        !           119:        clrl    r2                      /* R2 = Expected IS,IPL         */
        !           120:        cmpl    r1,r2
        !           121:        jeql    1f
        !           122:        movl    $12,r0                  /* Error : IPL not correct after */
        !           123:        jmp     *badrtn                 /* SFE exception. R0 = error code */
        !           124: 1:
        !           125:        movab   (sp),r1                 /* R1 : KSP after exception     */
        !           126:        movl    _exp_ksp,r2             /* R2 : Expected KSP            */
        !           127:        cmpl    r1,r2
        !           128:        beql    1f
        !           129:        movl    $13,r0                  /* Error : SP not correct after */
        !           130:        jmp     *badrtn                 /* Trace trap exception         */
        !           131: 1:
        !           132:        movab   (sp),r9
        !           133:        movl    (r9),r1                 /* R1 : PC on SP after exception */
        !           134:        movl    _exp_pc,r2              /* R2 : expected PC             */
        !           135:        cmpl    r1,r2
        !           136:        beql    1f
        !           137:        movl    $14,r0                  /* Error : PC on SP not correct after */
        !           138:        jmp     *badrtn                 /* Trace trap exception         */
        !           139: 1:
        !           140:        movl    4(r9),r1                /* R1 : PSL on SP after exception */
        !           141:        movl    _exp_psl,r2             /* R2 : Expected PSL            */
        !           142:        cmpl    r1,r2
        !           143:        beql    1f
        !           144:        movl    $15,r0                  /* Error : PSL on SP incorrect after */
        !           145:        jmp     *badrtn                 /* Trace trap exception         */
        !           146: 1:
        !           147:        mfpr    $ISP,r1                 /* R1 : Expected ISP */
        !           148:        movl    _exp_isp,r2             /* R2 : Expected ISP            */
        !           149:        cmpl    r1,r2
        !           150:        beql    1f
        !           151:        movl    $16,r0                  /* Error : PSL on SP incorrect  */
        !           152:        jmp     *badrtn
        !           153: 1:
        !           154:        svpctx                          /* Switch to ISP */
        !           155:        mtpr    $0x1f,$IPL
        !           156:        jmp     fini
        !           157: #
        !           158: #
        !           159: #                                      /* **************************** */
        !           160:        .align  2                       /* Soft Int.#11 handler         */
        !           161: si11_hdr:                              /* **************************** */
        !           162:        movpsl  r10                     /* R10 : PSL after taken soft int */
        !           163:        andl3   $0x1f0000,r10,r1        /* R1 : Actual IPL after int.   */
        !           164:        movl    $0x0b0000,r2            /* R2 : Expected IPL            */
        !           165:        cmpl    r1,r2
        !           166:        beql    1f
        !           167:        movl    $1,r0                   /* Error : in IPL after taken int. */
        !           168:        jmp     *badrtn
        !           169: 1:
        !           170:        movab   (sp),r7                 /* R7 : current ISP             */
        !           171:        movl    r7,r1
        !           172:        movl    _exp_isp,r2             /* R2 : expected ISP            */
        !           173:        cmpl    r1,r2
        !           174:        beql    1f
        !           175:        movl    $2,r0                   /* Error : in ISP after taken int. */
        !           176:        jmp     *badrtn
        !           177: 1:
        !           178:        addl3   $8,r7,_exp_isp          /* Expected ISP after SFE exception */
        !           179:        movl    (r7),r1                 /* R1 : User PC on stack        */
        !           180:        movl    _exp_pc,r2              /* R2 : expected PC             */
        !           181:        cmpl    r1,r2
        !           182:        beql    1f
        !           183:        movl    $3,r0                   /* Error : PC on SP not correct after */
        !           184:        jmp     *badrtn                 /* taking software int.#11      */
        !           185: 1:
        !           186:        movl    4(r7),r1                /* R1 : User PSL on SP          */
        !           187:        movl    _exp_psl,r2             /* R2 : Expected PSL            */
        !           188:        cmpl    r1,r2
        !           189:        beql    1f
        !           190:        movl    $4,r0                   /* Error : PSL on SP incorrect after */
        !           191:        jmp     *badrtn                 /* taking software int.#11      */
        !           192: 1:
        !           193:        andl3   $0xfffffeff,_exp_psl,_exp_psl   /* Mask out SFE bit */
        !           194:        mfpr    $PCBB,r3
        !           195:        orl2    $0xc0000000,r3          /* VA of PCBB */
        !           196:        movl    (r3),r1                 /* R1 : Actual KSP              */
        !           197:        movl    _exp_ksp,r2             /* R2 : Expected KSP            */
        !           198:        cmpl    r1,r2
        !           199:        beql    1f
        !           200:        movl    $5,r0                   /* Error : PCBB_KSP incorrect after */
        !           201:        jmp     *badrtn                 /* taking software int.#11      */
        !           202: 1:
        !           203:        subl3   $8,r1,_exp_ksp          /* Expected KSP after SFE exception */
        !           204:        movl    $SFEVEC,r1
        !           205:        movl    _scb[r1],_savvec7       /* Save SFE original vector     */
        !           206:        movab   sfehdlr,_scb[r1]        /* Set new SFE handler          */
        !           207:        rei                             /* Should take SFE exception    */
        !           208:        halt
        !           209: 
        !           210: #
        !           211: #      Data area
        !           212: #
        !           213:        .align  2
        !           214: _exp_pc:
        !           215:        .long   0
        !           216: _exp_psl:
        !           217:        .long   0
        !           218: _exp_ksp:
        !           219:        .long   0
        !           220: _exp_isp:
        !           221:        .long   0
        !           222: #
        !           223: #      User code area
        !           224: #
        !           225:        .set    PATERN,0xabababab
        !           226: _Ucode:
        !           227:        movl    $PATERN,_Udata          /* Since the TP bit is on, this */
        !           228:        halt            /* instr. will not be executed, goto Trace handler */
        !           229:        .align  2
        !           230: _Udata :
        !           231:        .long   0

unix.superglobalmegacorp.com

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