head 1.1; branch 1.1.1; access ; symbols start:1.1.1.1 PAlibDoc:1.1.1; locks ; strict; comment @# @; 1.1 date 2005.11.02.08.30.32; author jandujar; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 2005.11.02.08.30.32; author jandujar; state Exp; branches ; next ; desc @@ 1.1 log @Initial revision @ text @
00001 #ifndef _PA_Interrupt 00002 #define _PA_Interrupt 00003 00004 00011 typedef void(*funcpointer)(void); 00012 00013 extern volatile bool PA_Newframe; 00014 00015 extern volatile bool PA_vblok; // Passe à 1 quand VBL activé... 00016 00017 00018 extern u32 PA_CPU; // Pourcentage CPU... 00019 extern u32 PA_MaxCPU; // Max CPU... 00020 extern u32 PA_lines; // Nombre de lignes, pour faire le calcul... 00021 extern u8 PA_VBLCount; // Compte le nombre de VBL avant qu'on en arrive à un tour 00022 extern u8 PA_nVBLs; 00023 00024 00025 //Interrupt Registers 00026 #ifndef REG_IME 00027 #define REG_IME *(u32*)0x04000208 00028 #endif 00029 #ifndef REG_IE 00030 #define REG_IE *(u32*)0x04000210 00031 #endif 00032 #ifndef REG_IF 00033 #define REG_IF *(u32*)0x04000214 00034 #endif 00035 00036 00037 #define REG_INTERRUPT IRQ_HANDLER //*(u32*)0x3007FFC 00038 #define REG_DISPSTAT DISP_SR //*(u16*)0x4000004 00039 00040 00041 #define REG_VCOUNT _REG16(0x04000006) 00042 00043 // Interrupts 00044 #define INTVBLANK 0x0001 00045 #define INTHBLANK 0x0002 00046 #define INTVCOUNT 0x0004 00047 #define INTTIMER0 0x0008 00048 #define INTTIMER1 0x0010 00049 #define INTTIMER2 0x0020 00050 #define INTTIMER3 0x0040 00051 #define INTCOM 0x0080 00052 #define INTDMA0 0x0100 00053 #define INTDMA1 0x0200 00054 #define INTDMA2 0x0400 00055 #define INTDMA3 0x0800 00056 #define INTBUTTON 0x1000 00057 #define INTCART 0x2000 00058 00059 #define INT_VBLANK 0 00060 #define INT_HBLANK 1 00061 #define INT_VCOUNT 2 00062 #define INT_TIMER0 3 00063 #define INT_TIMER1 4 00064 #define INT_TIMER2 5 00065 #define INT_TIMER3 6 00066 #define INT_COM 7 00067 #define INT_DMA0 8 00068 #define INT_DMA1 9 00069 #define INT_DMA2 10 00070 #define INT_DMA3 11 00071 #define INT_KEY 12 00072 #define INT_CART 13 00073 00074 #define ENABLE_VBLANK 8 00075 #define ENABLE_HBLANK 16 00076 #define ENABLE_VCOUNT 32 00077 00078 00079 // Pour activer les timers, que pour moi... 00080 // TIMER O 00081 #define TIMER0COUNT *(volatile u16 *)(0x04000100) 00082 #define TIMER0CNT *(volatile u16 *)(0x04000102) 00083 #define TIMER0CNT_TIMER_START (TIMER0CNT |= 0x0080) 00084 #define TIMER0CNT_IRQ_ENABLE (TIMER0CNT |= 0x0040) 00085 #define PA_EnableTimer0() {TIMER0CNT_TIMER_START; TIMER0CNT_IRQ_ENABLE;} 00086 00087 #define TIMER0CNT_TIMER_STOP (TIMER0CNT &= 0xFF7F) 00088 #define TIMER0CNT_IRQ_DISABLE (TIMER0CNT &= 0xFFBF) 00089 #define PA_DisableTimer0() {TIMER0CNT_TIMER_STOP; TIMER0CNT_IRQ_DISABLE;} 00090 00091 // TIMER 1 00092 #define TIMER1COUNT *(volatile u16 *)(0x04000104) 00093 #define TIMER1CNT *(volatile u16 *)(0x04000106) 00094 #define TIMER1CNT_TIMER_START (TIMER1CNT |= 0x0080) 00095 #define TIMER1CNT_IRQ_ENABLE (TIMER1CNT |= 0x0040) 00096 #define PA_EnableTimer1() {TIMER1CNT_TIMER_START; TIMER1CNT_IRQ_ENABLE;} 00097 00098 #define TIMER1CNT_TIMER_STOP (TIMER1CNT &= 0xFF7F) 00099 #define TIMER1CNT_IRQ_DISABLE (TIMER1CNT &= 0xFFBF) 00100 #define PA_DisableTimer1() {TIMER1CNT_TIMER_STOP; TIMER1CNT_IRQ_DISABLE;} 00101 00102 // TIMER 2 00103 #define TIMER2COUNT *(volatile u16 *)(0x04000108) 00104 #define TIMER2CNT *(volatile u16 *)(0x0400010A) 00105 #define TIMER2CNT_TIMER_START (TIMER2CNT |= 0x0080) 00106 #define TIMER2CNT_IRQ_ENABLE (TIMER2CNT |= 0x0040) 00107 #define PA_EnableTimer2() {TIMER2CNT_TIMER_START; TIMER2CNT_IRQ_ENABLE;} 00108 00109 #define TIMER2CNT_TIMER_STOP (TIMER2CNT &= 0xFF7F) 00110 #define TIMER2CNT_IRQ_DISABLE (TIMER2CNT &= 0xFFBF) 00111 #define PA_DisableTimer2() {TIMER2CNT_TIMER_STOP; TIMER2CNT_IRQ_DISABLE;} 00112 00113 // TIMER 3 00114 #define TIMER3COUNT *(volatile u16 *)(0x0400010C) 00115 #define TIMER3CNT *(volatile u16 *)(0x0400010E) 00116 #define TIMER3CNT_TIMER_START (TIMER3CNT |= 0x0080) 00117 #define TIMER3CNT_IRQ_ENABLE (TIMER3CNT |= 0x0040) 00118 #define PA_EnableTimer3() {TIMER3CNT_TIMER_START; TIMER3CNT_IRQ_ENABLE;} 00119 00120 #define TIMER3CNT_TIMER_STOP (TIMER3CNT &= 0xFF7F) 00121 #define TIMER3CNT_IRQ_DISABLE (TIMER3CNT &= 0xFFBF) 00122 #define PA_DisableTimer3() {TIMER3CNT_TIMER_STOP; TIMER3CNT_IRQ_DISABLE;} 00123 00124 00125 00126 00127 extern funcpointer interruptfunc[14]; 00128 00129 00130 void interruptfunction(void); 00131 00145 #define PA_InitVBL() PA_StartInt(INT_VBLANK, PA_vblFunc) 00146 00153 void PA_ResetInterrupts(void); 00154 00168 void PA_StartInt(u8 inter, funcpointer interfunc); 00169 00170 00179 void PA_StopInt(u8 inter); 00180 00181 00187 #define PA_GetVcount() (REG_VCOUNT&511) 00188 00194 void PA_vblFunc(void); 00195 // end of Interrupts 00197 00198 00199 #endif 00200 00201