PA_Interrupt.h

Go to the documentation of this file.
00001 #ifndef _PA_Interrupt
00002 #define _PA_Interrupt
00003 
00004 #ifdef __cplusplus
00005 extern "C" {
00006 #endif
00007 
00014 typedef void(*funcpointer)(void);
00015 
00016 extern volatile u8 PA_Newframe;
00017 
00018 extern volatile u8 PA_vblok; // Passe à 1 quand VBL activé...
00019 
00020 
00021 extern u32 PA_CPU; // Pourcentage CPU...
00022 extern u32 PA_MaxCPU; // Max CPU...
00023 extern u32 PA_lines; // Nombre de lignes, pour faire le calcul...
00024 extern u8 PA_VBLCount; // Compte le nombre de VBL avant qu'on en arrive à un tour
00025 extern u8 PA_nVBLs;
00026 extern s32 PA_VBLCounter[16];  // VBL counters available
00027 extern bool PA_VBLCounterOn[16];  // On or off
00028 
00029 extern funcpointer CustomVBL;
00030 
00031 extern volatile s32 PA_TestVBLs;
00032 
00033 /*
00034 //Interrupt Registers
00035 #ifndef REG_IME
00036        #define REG_IME *(u32*)0x04000208
00037 #endif
00038 #ifndef REG_IE
00039 #define REG_IE *(u32*)0x04000210
00040 #endif
00041 #ifndef REG_IF
00042 #define REG_IF *(u32*)0x04000214
00043 #endif*/
00044 
00045 /*
00046 #define REG_INTERRUPT IRQ_HANDLE
00047 #define REG_DISPSTAT DISP_SR
00048 */
00049 
00050 //#define REG_VCOUNT _REG16(0x04000006)
00051 /*
00052 // Interrupts
00053 #define INTVBLANK 0x0001
00054 #define INTHBLANK 0x0002
00055 #define INTVCOUNT 0x0004
00056 #define INTTIMER0 0x0008
00057 #define INTTIMER1 0x0010
00058 #define INTTIMER2 0x0020
00059 #define INTTIMER3 0x0040
00060 #define INTCOM 0x0080
00061 #define INTDMA0 0x0100
00062 #define INTDMA1 0x0200
00063 #define INTDMA2 0x0400
00064 #define INTDMA3 0x0800
00065 #define INTBUTTON 0x1000
00066 #define INTCART 0x2000
00067 
00068 #define INT_VBLANK 0
00069 #define INT_HBLANK 1
00070 #define INT_VCOUNT 2
00071 #define INT_TIMER0 3
00072 #define INT_TIMER1 4
00073 #define INT_TIMER2 5
00074 #define INT_TIMER3 6
00075 #define INT_COM 7
00076 #define INT_DMA0 8
00077 #define INT_DMA1 9
00078 #define INT_DMA2 10
00079 #define INT_DMA3 11
00080 #define INT_KEY 12
00081 #define INT_CART 13*/
00082 
00083 #define ENABLE_VBLANK 8
00084 #define ENABLE_HBLANK 16
00085 #define ENABLE_VCOUNT 32
00086 
00087 /*
00088 // Pour activer les timers, que pour moi...
00089 // TIMER O
00090 #define TIMER0COUNT         *(volatile u16 *)(0x04000100)
00091 #define TIMER0CNT           *(volatile u16 *)(0x04000102)
00092 #define TIMER0CNT_TIMER_START               (TIMER0CNT |= 0x0080)
00093 #define TIMER0CNT_IRQ_ENABLE                (TIMER0CNT |= 0x0040)
00094 #define PA_EnableTimer0() {TIMER0CNT_TIMER_START; TIMER0CNT_IRQ_ENABLE;}
00095 
00096 #define TIMER0CNT_TIMER_STOP                (TIMER0CNT &= 0xFF7F)
00097 #define TIMER0CNT_IRQ_DISABLE               (TIMER0CNT &= 0xFFBF)
00098 #define PA_DisableTimer0() {TIMER0CNT_TIMER_STOP; TIMER0CNT_IRQ_DISABLE;}
00099 
00100 // TIMER 1
00101 #define TIMER1COUNT         *(volatile u16 *)(0x04000104)
00102 #define TIMER1CNT           *(volatile u16 *)(0x04000106)
00103 #define TIMER1CNT_TIMER_START               (TIMER1CNT |= 0x0080)
00104 #define TIMER1CNT_IRQ_ENABLE                (TIMER1CNT |= 0x0040)
00105 #define PA_EnableTimer1() {TIMER1CNT_TIMER_START; TIMER1CNT_IRQ_ENABLE;}
00106 
00107 #define TIMER1CNT_TIMER_STOP                (TIMER1CNT &= 0xFF7F)
00108 #define TIMER1CNT_IRQ_DISABLE               (TIMER1CNT &= 0xFFBF)
00109 #define PA_DisableTimer1() {TIMER1CNT_TIMER_STOP; TIMER1CNT_IRQ_DISABLE;}
00110 
00111 // TIMER 2
00112 #define TIMER2COUNT         *(volatile u16 *)(0x04000108)
00113 #define TIMER2CNT           *(volatile u16 *)(0x0400010A)
00114 #define TIMER2CNT_TIMER_START               (TIMER2CNT |= 0x0080)
00115 #define TIMER2CNT_IRQ_ENABLE                (TIMER2CNT |= 0x0040)
00116 #define PA_EnableTimer2() {TIMER2CNT_TIMER_START; TIMER2CNT_IRQ_ENABLE;}
00117 
00118 #define TIMER2CNT_TIMER_STOP                (TIMER2CNT &= 0xFF7F)
00119 #define TIMER2CNT_IRQ_DISABLE               (TIMER2CNT &= 0xFFBF)
00120 #define PA_DisableTimer2() {TIMER2CNT_TIMER_STOP; TIMER2CNT_IRQ_DISABLE;}
00121 
00122 // TIMER 3
00123 #define TIMER3COUNT         *(volatile u16 *)(0x0400010C)
00124 #define TIMER3CNT           *(volatile u16 *)(0x0400010E)
00125 #define TIMER3CNT_TIMER_START               (TIMER3CNT |= 0x0080)
00126 #define TIMER3CNT_IRQ_ENABLE                (TIMER3CNT |= 0x0040)
00127 #define PA_EnableTimer3() {TIMER3CNT_TIMER_START; TIMER3CNT_IRQ_ENABLE;}
00128 
00129 #define TIMER3CNT_TIMER_STOP                (TIMER3CNT &= 0xFF7F)
00130 #define TIMER3CNT_IRQ_DISABLE               (TIMER3CNT &= 0xFFBF)
00131 #define PA_DisableTimer3() {TIMER3CNT_TIMER_STOP; TIMER3CNT_IRQ_DISABLE;}
00132 
00133 */
00134 
00135 
00136 //extern funcpointer interruptfunc[14];
00137 
00138 
00139 void interruptfunction(void);
00140 
00152 void PA_vblFunc(void);
00153 
00154 
00163 extern inline void PA_InitVBL(void) {
00164        //irqInit();
00165        irqSet(IRQ_VBLANK, PA_vblFunc);
00166        irqEnable(IRQ_VBLANK);
00167 }
00168 
00169 //PA_StartInt(INT_VBLANK, PA_vblFunc)
00170 
00171 
00178 //void PA_ResetInterrupts(void);
00179 
00193 //void PA_StartInt(u8 inter, funcpointer interfunc);
00194 /*extern inline void PA_StartInt(u8 inter, funcpointer interfunc){
00195        irqSet(inter, interfunc);
00196        irqEnable(inter);
00197 }*/
00198 
00207 /*extern inline void PA_StopInt(u8 inter){
00208        irqDisable(inter);
00209 }*/
00210 
00211 
00217 #define PA_GetVcount() (REG_VCOUNT&511)
00218 
00224 void PA_VBLCountersReset(void);
00225 
00234 extern inline void PA_VBLCounterStart(u8 nCounter){
00235        PA_VBLCounter[nCounter] = 0;
00236        PA_VBLCounterOn[nCounter] = 1;
00237 }
00238 
00247 extern inline void PA_VBLCounterPause(u8 nCounter){
00248        PA_VBLCounterOn[nCounter] = 0;
00249 }
00250 
00251 
00260 extern inline void PA_VBLCounterUnpause(u8 nCounter){
00261        PA_VBLCounterOn[nCounter] = 1;
00262 }
00263 
00264 
00265 extern inline void PA_VBLFunctionInit(funcpointer VBLFunc){
00266        CustomVBL = VBLFunc;
00267 }
00268 
00269 extern inline void PA_VBLFunctionReset(void){
00270        PA_VBLFunctionInit(PA_Nothing);
00271 }
00272 
00273 
00274 
00275 
00276 
00277 
00278 
00279  // end of Interrupts
00281 
00282 #ifdef __cplusplus
00283 }
00284 #endif
00285 #endif
00286 
00287 

Generated on Tue Jan 30 23:00:22 2007 for PAlib by  doxygen 1.5.1-p1