|
|
1.1 ! root 1: ! 2: # ! 3: # *bus error event test ! 4: # ! 5: # ! 6: # *non_existent memory (done) ! 7: # *versabus timeout (done) ! 8: # *uncorrectable memory error (not done) ! 9: # *versabus error (not done) ! 10: # *versabus parity error (not done) ! 11: # ! 12: # R4 : PC that failed ! 13: # R5 : type of fault is testing ! 14: # 1 - Non existence memory ! 15: # 2 - Versabus time out ! 16: # R0 : error code ! 17: # 1 - expected fault didnot happen ! 18: # R1 : memory address ! 19: # 2 - error in SP after taking fault ! 20: # R1 : actual , R2 : expected ! 21: # 3 - error in PSL after taking fault ! 22: # R1 : actual , R2 : expected ! 23: # 4 - error in Versabus type pushed on stack ! 24: # R1 : actual , R2 : expected ! 25: # 5 - error in error code pushed on stack ! 26: # R1 : actual , R2 : expected ! 27: # 6 - error in PC pushed on stack ! 28: # R1 : actual , R2 : expected ! 29: # 7 - error in PSL pushed on stack ! 30: # R1 : actual , R2 : expected ! 31: # ! 32: # constants -- errorcodes from versabus (not final yet) ! 33: ! 34: .set NON_EXIST_MEM,6 ! 35: .set VB_TOUT,4 ! 36: ! 37: .globl _be_evt ! 38: _be_evt: ! 39: .word 0x1fff ! 40: mtpr $0x1c,$IPL ! 41: movl $0,*$HSR /* Clear HISR, SISR */ ! 42: movl $0,*$SSR ! 43: movab (sp),_savvec0 /* Save current SP */ ! 44: mtpr _savvec0,$ISP /* Init. ISP */ ! 45: movpsl _savvec1 /* Save current PSL */ ! 46: movl _scb+BEVEC,_savvec2 /* Save bus error vector */ ! 47: movab 9f,_scb+BEVEC /* Set new vector for Bus error */ ! 48: movl $1,bloop ! 49: _b2: ! 50: movl $2,r11 /* R11 = counter */ ! 51: ! 52: # Non_existent memory error ! 53: ! 54: berr: ! 55: movl $1,r5 /* R5 = 1; Non_existence memory */ ! 56: movl $0x03fffff0,r1 /* R1 = Non_existence memory address */ ! 57: movpsl r6 /* R6 = saved expected PSL */ ! 58: cmpl $1,r11 ! 59: jeql exp_pc2 ! 60: exp_pc1: ! 61: movab epc1,r4 ! 62: epc1: tstl (r1) /* Should cause Non_existence memory fault */ ! 63: movl $1,r0 /* R0 = 1; error code : Expected fault did */ ! 64: jmp *badrtn /* not happen. R1 = memory address */ ! 65: exp_pc2: ! 66: movab epc2,r4 ! 67: epc2: clrl (r1) /* Should cause Non_existence memory fault */ ! 68: movl $1,r0 /* R0 = 1; error code : Expected fault did */ ! 69: jmp *badrtn /* not happen. R1 = memory address */ ! 70: # ! 71: # Bus error event handler ! 72: # ! 73: .align 2 ! 74: 9: movab (sp),r1 ! 75: movl _savvec0,r2 /* Check current SP = ISP - 16 */ ! 76: subl2 $16,r2 /* PC,PSL and 2 params should be on stack */ ! 77: cmpl r1,r2 ! 78: beql 1f ! 79: 2: movl $2,r0 /* R0 = 2; error in SP after taking fault */ ! 80: jmp *badrtn /* SP not decremented by 16 after Bus error */ ! 81: 1: ! 82: movpsl r1 /* Check current PSL_MODE */ ! 83: andl3 $0x04000000,r1,r3 /* Expected PSL_MODE = Kernel */ ! 84: bneq 1f ! 85: 2: movl $3,r0 /* R0 = 3; PSL not set correct */ ! 86: movl $0x041d0000,r2 /* after taking Bus error exception */ ! 87: jmp *badrtn ! 88: 1: andl3 $0x01000000,r1,r3 /* Check current PSL_IS */ ! 89: bneq 2b /* Expected PSL_IS = 1 */ ! 90: andl3 $0x001d0000,r1,r3 /* Check PSL_IPL = 0x1d */ ! 91: cmpl $0x001d0000,r3 ! 92: bneq 2b ! 93: # ! 94: # Check parameters pushed on SP ! 95: # ! 96: movl (sp)+,r3 /* R3 = Versabus type pushed on stack */ ! 97: andl3 $0,r3,r1 /* For now , don't care */ ! 98: movl $0,r2 /* R2 = expected type (don't care) */ ! 99: cmpl r1,r2 ! 100: beql 1f ! 101: movl $4,r0 /* R0 = 4; incorrect error code */ ! 102: jmp *badrtn /* pushed on the stack */ ! 103: ! 104: 1: movl (sp)+,r1 /* R1 = error code pushed on stack */ ! 105: andl2 $0x7,r1 /* Only check the last byte */ ! 106: movl $NON_EXIST_MEM,r2 /* R2 = expected error code */ ! 107: cmpl r1,r2 ! 108: beql 1f ! 109: movl $5,r0 /* R0 = 4; incorrect error code */ ! 110: jmp *badrtn /* pushed on the stack */ ! 111: ! 112: 1: movl (sp)+,r1 /* Check PC pushed on the stack */ ! 113: movl exp_pc,r2 ! 114: cmpl r1,r2 ! 115: beql 1f ! 116: jmp 1f /* For now, PC is not checked !! */ ! 117: movl $6,r0 /* R0 = 6; error in PC on stack */ ! 118: jmp *badrtn /* R1 = actual; R2 = expected */ ! 119: ! 120: 1: movl (sp)+,r1 /* Check PSL pushed on the stack */ ! 121: andl2 $0xfffffff0,r1 ! 122: movl r6,r2 /* R6 = saved PSL before exception */ ! 123: andl2 $0xfffffff0,r2 ! 124: cmpl r1,r2 ! 125: beql 1f ! 126: movl $7,r0 /* R0 = 7; error in PSL pushed on stack */ ! 127: jmp *badrtn /* R1 = actual; R2 = expected */ ! 128: ! 129: 1: ! 130: decl r11 ! 131: jneq berr /* do again */ ! 132: # ! 133: # VERSABUS timeout error ! 134: # ! 135: movl $2,r5 /* R5 = 2; Versabus time out */ ! 136: movab exp_pc3,r4 ! 137: mtpr $0x1c,$IPL /* Set IPL = 0x1c */ ! 138: movab 9f,_scb+BEVEC /* Set new vector to handle Bus error */ ! 139: movl $0xffff8ff0,r1 /* R1 = Vesrabus non_existence address */ ! 140: movab (sp),_savvec0 ! 141: bispsw $15 /* Set PSW flags */ ! 142: movpsl r6 /* Save PSL in R6 */ ! 143: exp_pc3: ! 144: movb $255,(r1) /* Should cause Versabus time out exception */ ! 145: ! 146: movl $1,r0 /* R0 = 8; Expected Versabus time out */ ! 147: jmp *badrtn /* exception did not occur. R1 = Versabus adr */ ! 148: ! 149: .align 2 /* New handler for Versabus time out exception */ ! 150: 9: movab (sp),r1 /* Check current SP = ISP - 16 */ ! 151: movl _savvec0,r2 /* R1 = actual SP */ ! 152: subl2 $16,r2 /* R2 = expected SP */ ! 153: cmpl r1,r2 ! 154: beql 1f ! 155: movl $2,r0 /* R0 = 9; error in SP after taking Versabus */ ! 156: jmp *badrtn /* timeout exception. */ ! 157: 1: ! 158: movpsl r1 /* Check current PSL_IS */ ! 159: andl3 $0x04000000,r1,r3 /* Expected PSL_IS = 1 */ ! 160: bneq 1f ! 161: 2: movl $3,r0 /* R0 = 10; error in current PSL */ ! 162: movl $0x041f0000,r2 /* R1 = actual; R2 = expected */ ! 163: jmp *badrtn ! 164: ! 165: 1: andl3 $0x01000000,r1,r3 /* Check PSL_MODE */ ! 166: bneq 2b /* Expected PSL_MODE = Kernel */ ! 167: ! 168: andl3 $0x001f0000,r1,r3 /* Check PSL_IPL */ ! 169: cmpl $0x001d0000,r3 /* Expected PSL_IPL = 0x1d */ ! 170: bneq 2b ! 171: # ! 172: # Check paramters pushed on the stack ! 173: # ! 174: movl (sp)+,r3 /* R3 = Versabus type pushed on stack */ ! 175: andl2 $0,r1 /* Don't care for now */ ! 176: movl $0,r2 /* R2 = expected type */ ! 177: cmpl r1,r2 ! 178: beql 1f ! 179: movl $4,r0 /* R0 = 4; incorrect error code */ ! 180: jmp *badrtn /* pushed on the stack */ ! 181: ! 182: 1: ! 183: movl (sp)+,r3 /* R3 = error code pushed on SP */ ! 184: andl3 $0x7,r3,r1 /* Only check the last 3 bits */ ! 185: movl $VB_TOUT,r2 /* R2 = expected error code */ ! 186: cmpl r1,r2 ! 187: beql 1f ! 188: movl $5,r0 /* R0 = 5; incorrect error code pushed on SP */ ! 189: jmp *badrtn ! 190: 1: ! 191: movl (sp)+,r1 /* R1 = PC pushed on stack */ ! 192: movab exp_pc3,r2 /* R2 = expected PC */ ! 193: cmpl r1,r2 ! 194: beql 1f ! 195: jmp 1f /* For now, PC is not checked !! */ ! 196: movl $6,r0 /* R0 = 6; incorrect PC pushed on SP */ ! 197: jmp *badrtn ! 198: 1: ! 199: movl (sp)+,r1 /* R1 = PSL pushed on SP */ ! 200: andl2 $0xfffffff0,r1 ! 201: movl r6,r2 /* R2 = expected PSL */ ! 202: andl2 $0xfffffff0,r2 ! 203: cmpl r1,r2 ! 204: beql 1f ! 205: movl $7,r0 /* R0 = 7; incorrect PSL pushed on SP */ ! 206: jmp *badrtn ! 207: 1: ! 208: decl bloop ! 209: jeql 1f ! 210: jmp _b2 /* Try again this time code is in */ ! 211: /* instruction cache */ ! 212: 1: ! 213: movl _savvec2,_scb+BEVEC /* Restore original bus error vector */ ! 214: movl _savvec0,sp /* Restore current SP */ ! 215: mtpr $31,$IPL /* Set IPL = HIGH */ ! 216: mtpr $1,$PADC /* Slow it down to loop */ ! 217: ret ! 218: ! 219: .align 2 ! 220: exp_pc: .long 0 ! 221: bloop: .long 1
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.