sgdk
|
00001 00020 #ifndef _MEMORY_H_ 00021 #define _MEMORY_H_ 00022 00023 00028 #define ROM 0x00000000 00029 00033 #define RAM 0xE0FF0000 00034 00039 #define STACK_SIZE 0x0A00 00040 00044 #define MEMORY_HIGH (0xE1000000 - STACK_SIZE) 00045 00046 00051 #define GET_DWORDFROMPBYTE(src) ((src[0] << 24) | (src[1] << 16) | (src[2] << 8) | (src[3] << 0)) 00052 00056 #define GET_DWORDFROMPBYTE_LI(src) ((src[0] << 0) | (src[1] << 8) | (src[2] << 16) | (src[3] << 24)) 00057 00061 #define GET_WORDFROMPBYTE(src) ((src[0] << 8) | (src[1] << 0)) 00062 00066 #define GET_WORDFROMPBYTE_LI(src) ((src[0] << 0) | (src[1] << 8)) 00067 00071 #define GET_DWORDFROMPWORD(src) ((src[0] << 16) | (src[1] << 0)) 00072 00076 #define GET_DWORDFROMPWORD_LI(src) ((src[0] << 0) | (src[1] << 16)) 00077 00078 00083 #define SWAP_u8(x, y) \ 00084 { \ 00085 u8 swp; \ 00086 \ 00087 swp = x; \ 00088 x = y; \ 00089 y = swp; \ 00090 } 00091 00096 #define SWAP_s8(x, y) \ 00097 { \ 00098 s8 swp; \ 00099 \ 00100 swp = x; \ 00101 x = y; \ 00102 y = swp; \ 00103 } 00104 00109 #define SWAP_u16(x, y) \ 00110 { \ 00111 u16 swp; \ 00112 \ 00113 swp = x; \ 00114 x = y; \ 00115 y = swp; \ 00116 } 00117 00122 #define SWAP_s16(x, y) \ 00123 { \ 00124 s16 swp; \ 00125 \ 00126 swp = x; \ 00127 x = y; \ 00128 y = swp; \ 00129 } 00130 00135 #define SWAP_u32(x, y) \ 00136 { \ 00137 u32 swp; \ 00138 \ 00139 swp = x; \ 00140 x = y; \ 00141 y = swp; \ 00142 } 00143 00148 #define SWAP_s32(x, y) \ 00149 { \ 00150 s32 swp; \ 00151 \ 00152 swp = x; \ 00153 x = y; \ 00154 y = swp; \ 00155 } 00156 00157 00158 #if (ENABLE_NEWLIB == 0) 00159 // enable standard libc compatibility 00160 #define malloc(x) MEM_alloc(x) 00161 #define free(x) MEM_free(x) 00162 #endif // ENABLE_NEWLIB 00163 00164 00169 u16 MEM_getFree(); 00174 u16 MEM_getAllocated(); 00179 u16 MEM_getLargestFreeBlock(); 00180 00192 void MEM_free(void *ptr); 00207 void* MEM_alloc(u16 size); 00208 00214 void MEM_pack(); 00221 void MEM_dump(); 00222 00223 #if (ENABLE_NEWLIB == 0) 00224 00237 void memset(void *to, u8 value, u16 len); 00238 #endif // ENABLE_NEWLIB 00239 00253 void memsetU16(u16 *to, u16 value, u16 len); 00267 void memsetU32(u32 *to, u32 value, u16 len); 00268 00269 #if (ENABLE_NEWLIB == 0) 00270 00284 void memcpy(void *to, const void *from, u16 len); 00285 #endif // ENABLE_NEWLIB 00286 00290 void memcpyU16(u16 *to, const u16 *from, u16 len); 00294 void memcpyU32(u32 *to, const u32 *from, u16 len); 00295 00299 void fastMemset(void *to, u8 value, u16 len); 00303 void fastMemsetU16(u16 *to, u16 value, u16 len); 00307 void fastMemsetU32(u32 *to, u32 value, u16 len); 00311 void fastMemcpy(void *to, const void *from, u16 len); 00315 void fastMemcpyU16(u16 *to, const u16 *from, u16 len); 00319 void fastMemcpyU32(u32 *to, const u32 *from, u16 len); 00320 00321 00322 #endif // _MEMORY_H_