Annotation of cci/d/event/mulevt.s, revision 1.1.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.