1//Original:/proj/frio/dv/testcases/core/c_mode_supervisor/c_mode_supervisor.dsp 2// Spec Reference: mode_supervisor 3# mach: bfin 4# sim: --environment operating 5 6#include "test.h" 7.include "testutils.inc" 8start 9 10include(std.inc) 11include(selfcheck.inc) 12include(gen_int.inc) 13INIT_R_REGS(0); 14INIT_P_REGS(0); 15INIT_I_REGS(0); // initialize the dsp address regs 16INIT_M_REGS(0); 17INIT_L_REGS(0); 18INIT_B_REGS(0); 19//CHECK_INIT(p5, 0xe0000000); 20include(symtable.inc) 21CHECK_INIT_DEF(p5); 22 23#ifndef STACKSIZE 24#define STACKSIZE 0x10 25#endif 26#ifndef EVT 27#define EVT 0xFFE02000 28#endif 29#ifndef EVT15 30#define EVT15 0xFFE0203C 31#endif 32#ifndef EVT_OVERRIDE 33#define EVT_OVERRIDE 0xFFE02100 34#endif 35// 36 37////MY_GEN_INT_INIT(0xF0000000) // set location for interrupt table 38 39// 40// Reset/Bootstrap Code 41// (Here we should set the processor operating modes, initialize registers, 42// etc.) 43// 44 45BOOT: 46 47 // in reset mode now 48LD32_LABEL(sp, KSTACK); // setup the stack pointer 49FP = SP; // and frame pointer 50 51LD32(p0, EVT); // Setup Event Vectors and Handlers 52LD32_LABEL(r0, EHANDLE); // Emulation Handler (Int0) 53 [ P0 ++ ] = R0; 54 55LD32_LABEL(r0, RHANDLE); // Reset Handler (Int1) 56 [ P0 ++ ] = R0; 57 58LD32_LABEL(r0, NHANDLE); // NMI Handler (Int2) 59 [ P0 ++ ] = R0; 60 61LD32_LABEL(r0, XHANDLE); // Exception Handler (Int3) 62 [ P0 ++ ] = R0; 63 64 [ P0 ++ ] = R0; // IVT4 not used 65 66LD32_LABEL(r0, HWHANDLE); // HW Error Handler (Int5) 67 [ P0 ++ ] = R0; 68 69LD32_LABEL(r0, THANDLE); // Timer Handler (Int6) 70 [ P0 ++ ] = R0; 71 72LD32_LABEL(r0, I7HANDLE); // IVG7 Handler 73 [ P0 ++ ] = R0; 74 75LD32_LABEL(r0, I8HANDLE); // IVG8 Handler 76 [ P0 ++ ] = R0; 77 78LD32_LABEL(r0, I9HANDLE); // IVG9 Handler 79 [ P0 ++ ] = R0; 80 81LD32_LABEL(r0, I10HANDLE);// IVG10 Handler 82 [ P0 ++ ] = R0; 83 84LD32_LABEL(r0, I11HANDLE);// IVG11 Handler 85 [ P0 ++ ] = R0; 86 87LD32_LABEL(r0, I12HANDLE);// IVG12 Handler 88 [ P0 ++ ] = R0; 89 90LD32_LABEL(r0, I13HANDLE);// IVG13 Handler 91 [ P0 ++ ] = R0; 92 93LD32_LABEL(r0, I14HANDLE);// IVG14 Handler 94 [ P0 ++ ] = R0; 95 96LD32_LABEL(r0, I15HANDLE);// IVG15 Handler 97 [ P0 ++ ] = R0; 98 99LD32(p0, EVT_OVERRIDE); 100 R0 = 0; 101 [ P0 ++ ] = R0; 102 R0 = -1; // Change this to mask interrupts (*) 103 [ P0 ] = R0; // IMASK 104 105DUMMY: 106 107 R0 = 0 (Z); 108 109LT0 = r0; // set loop counters to something deterministic 110LB0 = r0; 111LC0 = r0; 112LT1 = r0; 113LB1 = r0; 114LC1 = r0; 115 116ASTAT = r0; // reset other internal regs 117 118// The following code sets up the test for running in USER mode 119 120LD32_LABEL(r0, STARTUSER);// One gets to user mode by doing a 121 // ReturnFromInterrupt (RTI) 122RETI = r0; // We need to load the return address 123 124// Comment the following line for a USER Mode test 125 126JUMP STARTSUP; // jump to code start for SUPERVISOR mode 127 128RTI; 129 130STARTSUP: 131LD32_LABEL(p1, BEGIN); 132 133LD32(p0, EVT15); 134 [ P0 ] = P1; // IVG15 (General) handler (Int 15) load with start 135 136RAISE 15; // after we RTI, INT 15 should be taken,& return to BEGIN in 137 // SUPERVISOR MODE & go to different RAISE in supervisor mode 138 // until the end of the test. 139 140NOP; // Workaround for Bug 217 141RTI; 142 143// 144// The Main Program 145// 146STARTUSER: 147LD32_LABEL(sp, USTACK); // setup the stack pointer 148FP = SP; // set frame pointer 149JUMP BEGIN; 150 151//********************************************************************* 152 153BEGIN: 154 155 // COMMENT the following line for USER MODE tests 156 [ -- SP ] = RETI; // enable interrupts in supervisor mode 157 158 // **** YOUR CODE GOES HERE **** 159 160 161 162 // PUT YOUR TEST HERE! 163 // Can't Raise 0, 3, or 4 164 // Raise 1 requires some intelligence so the test 165 // doesn't loop forever - use SFTRESET bit in SEQSTAT (TBD) 166RAISE 2; // RTN 167RAISE 5; // RTI 168RAISE 6; // RTI 169RAISE 7; // RTI 170RAISE 8; // RTI 171RAISE 9; // RTI 172RAISE 10; // RTI 173RAISE 11; // RTI 174RAISE 12; // RTI 175RAISE 13; // RTI 176RAISE 14; // RTI 177RAISE 15; // RTI 178 179CHECKREG(r0, 0x0000000B); 180CHECKREG(r1, 0x0000000C); 181CHECKREG(r2, 0x0000000D); 182CHECKREG(r3, 0x0000000E); 183CHECKREG(r4, 0x00000007); 184CHECKREG(r5, 0x00000008); 185CHECKREG(r6, 0x00000009); 186CHECKREG(r7, 0x0000000A); 187R0 = I0; 188R1 = I1; 189R2 = I2; 190R3 = I3; 191R4 = M0; 192CHECKREG(r0, 0x00000002); 193CHECKREG(r1, 0x00000000); 194CHECKREG(r2, 0x00000005); 195CHECKREG(r3, 0x00000006); 196CHECKREG(r4, 0x00000007); 197 198 199END: 200dbg_pass; // End the test 201 202//********************************************************************* 203 204// 205// Handlers for Events 206// 207 208EHANDLE: // Emulation Handler 0 209RTE; 210 211RHANDLE: // Reset Handler 1 212RTI; 213 214NHANDLE: // NMI Handler 2 215 R0 = 2; 216RTN; 217 218XHANDLE: // Exception Handler 3 219 R1 = 3; 220RTX; 221 222HWHANDLE: // HW Error Handler 5 223 R2 = 5; 224RTI; 225 226THANDLE: // Timer Handler 6 227 R3 = 6; 228RTI; 229 230I7HANDLE: // IVG 7 Handler 231 R4 = 7; 232RTI; 233 234I8HANDLE: // IVG 8 Handler 235 R5 = 8; 236RTI; 237 238I9HANDLE: // IVG 9 Handler 239 R6 = 9; 240RTI; 241 242I10HANDLE: // IVG 10 Handler 243 R7 = 10; 244RTI; 245 246I11HANDLE: // IVG 11 Handler 247 I0 = R0; 248 I1 = R1; 249 I2 = R2; 250 I3 = R3; 251 M0 = R4; 252 R0 = 11; 253RTI; 254 255I12HANDLE: // IVG 12 Handler 256 R1 = 12; 257RTI; 258 259I13HANDLE: // IVG 13 Handler 260 R2 = 13; 261RTI; 262 263I14HANDLE: // IVG 14 Handler 264 R3 = 14; 265RTI; 266 267I15HANDLE: // IVG 15 Handler 268 R4 = 15; 269RTI; 270 271NOP;NOP;NOP;NOP;NOP;NOP;NOP; // needed for icache bug 272 273// 274// Data Segment 275// 276 277.data 278DATA: 279 .space (0x10); 280 281// Stack Segments (Both Kernel and User) 282 283 .space (STACKSIZE); 284KSTACK: 285 286 .space (STACKSIZE); 287USTACK: 288