1 /*---------------------------------------------------------------------------* 2 Project: TwlSDK - OS - include 3 File: context.h 4 5 Copyright 2003-2008 Nintendo. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Date:: 2008-09-17#$ 14 $Rev: 8556 $ 15 $Author: okubata_ryoma $ 16 *---------------------------------------------------------------------------*/ 17 18 #ifndef NITRO_OS_CONTEXT_H_ 19 #define NITRO_OS_CONTEXT_H_ 20 21 #ifdef SDK_ARM9 22 #include <nitro/cp/context.h> 23 #endif 24 25 #ifdef __cplusplus 26 extern "C" { 27 #endif 28 29 //---------------------------------------------------------------------------- 30 #define SDK_CONTEXT_HAS_SP_SVC 31 32 //---------------------------------------------------------------------------- 33 34 #define OS_CONTEXT_CPSR 0 35 #define OS_CONTEXT_R0 4 36 #define OS_CONTEXT_R1 8 37 #define OS_CONTEXT_R2 12 38 #define OS_CONTEXT_R3 16 39 #define OS_CONTEXT_R4 20 40 #define OS_CONTEXT_R5 24 41 #define OS_CONTEXT_R6 28 42 #define OS_CONTEXT_R7 32 43 #define OS_CONTEXT_R8 36 44 #define OS_CONTEXT_R9 40 45 #define OS_CONTEXT_R10 44 46 #define OS_CONTEXT_R11 48 47 #define OS_CONTEXT_R12 52 48 #define OS_CONTEXT_R13 56 49 #define OS_CONTEXT_R14 60 50 #define OS_CONTEXT_PC_PLUS4 64 // Should be set to PC+4 for interrupt handling 51 52 #define OS_CONTEXT_SP OS_CONTEXT_R13 53 #define OS_CONTEXT_LR OS_CONTEXT_R14 54 55 #ifdef SDK_CONTEXT_HAS_SP_SVC 56 #define OS_CONTEXT_R13_SVC 68 57 #define OS_CONTEXT_SP_SVC OS_CONTEXT_R13_SVC 58 #endif 59 60 #ifdef SDK_ARM9 61 #ifdef SDK_CONTEXT_HAS_SP_SVC 62 #define OS_CONTEXT_CP_CONTEXT 72 63 #else 64 #define OS_CONTEXT_CP_CONTEXT 68 65 #endif 66 #endif 67 68 69 typedef struct OSContext 70 { 71 u32 cpsr; 72 u32 r[13]; 73 u32 sp; 74 u32 lr; 75 u32 pc_plus4; 76 #ifdef SDK_CONTEXT_HAS_SP_SVC 77 u32 sp_svc; 78 #endif 79 #ifdef SDK_ARM9 80 CPContext cp_context; 81 #endif 82 } 83 OSContext; 84 85 86 //---------------------------------------------------------------------------- 87 88 void OS_InitContext(OSContext *context, u32 newpc, u32 newsp); 89 BOOL OS_SaveContext(OSContext *context); 90 void OS_LoadContext(OSContext *context); 91 void OS_DumpContext(OSContext *context); 92 93 #ifdef __cplusplus 94 } /* extern "C" */ 95 #endif 96 97 /* NITRO_OS_CONTEXT_H_ */ 98 #endif 99