00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00031 #ifndef NDS_MEMORY_INCLUDE
00032 #define NDS_MEMORY_INCLUDE
00033
00034
00035 #include "ndstypes.h"
00036
00037
00038 #ifdef ARM9
00039 #define REG_EXMEMCNT (*(vu16*)0x04000204)
00040 #else
00041 #define REG_EXMEMSTAT (*(vu16*)0x04000204)
00042 #endif
00043
00044 #define ARM7_MAIN_RAM_PRIORITY BIT(15)
00045 #define ARM7_OWNS_CARD BIT(11)
00046 #define ARM7_OWNS_ROM BIT(7)
00047
00048
00049
00050 #ifdef ARM7
00051 #define PROTECTION (*(vu32*)0x04000308)
00052 #endif
00053
00054
00055 #define ALLRAM ((u8*)0x00000000)
00056
00058 #define MAINRAM8 ((u8*)0x02000000)
00059
00060 #define MAINRAM16 ((u16*)0x02000000)
00061
00062 #define MAINRAM32 ((u32*)0x02000000)
00063
00064
00065
00066
00068 #define GBA_BUS ((vu16 *)(0x08000000))
00069 #define GBAROM ((u16*)0x08000000)
00070
00072 #define SRAM ((u8*)0x0A000000)
00073
00074
00075
00076
00077 #ifdef ARM7
00078 #define VRAM ((u16*)0x06000000)
00079 #endif
00080
00084 typedef struct sGBAHeader {
00085 u32 entryPoint;
00086 u8 logo[156];
00087 char title[0xC];
00088 char gamecode[0x4];
00089 u16 makercode;
00090 u8 is96h;
00091 u8 unitcode;
00092 u8 devicecode;
00093 u8 unused[7];
00094 u8 version;
00095 u8 complement;
00096 u16 checksum;
00097 } __attribute__ ((__packed__)) tGBAHeader;
00098
00099 #define GBA_HEADER (*(tGBAHeader *)0x08000000)
00100
00104 typedef struct sNDSHeader {
00105 char gameTitle[12];
00106 char gameCode[4];
00107 char makercode[2];
00108 u8 unitCode;
00109 u8 deviceType;
00110 u8 deviceSize;
00111 u8 reserved1[9];
00112 u8 romversion;
00113 u8 flags;
00114
00115 u32 arm9romOffset;
00116 u32 arm9executeAddress;
00117 u32 arm9destination;
00118 u32 arm9binarySize;
00119
00120 u32 arm7romOffset;
00121 u32 arm7executeAddress;
00122 u32 arm7destination;
00123 u32 arm7binarySize;
00124
00125 u32 filenameOffset;
00126 u32 filenameSize;
00127 u32 fatOffset;
00128 u32 fatSize;
00129
00130 u32 arm9overlaySource;
00131 u32 arm9overlaySize;
00132 u32 arm7overlaySource;
00133 u32 arm7overlaySize;
00134
00135 u32 cardControl13;
00136 u32 cardControlBF;
00137 u32 bannerOffset;
00138
00139 u16 secureCRC16;
00140
00141 u16 readTimeout;
00142
00143 u32 unknownRAM1;
00144 u32 unknownRAM2;
00145
00146 u32 bfPrime1;
00147 u32 bfPrime2;
00148 u32 romSize;
00149
00150 u32 headerSize;
00151 u32 zeros88[14];
00152 u8 gbaLogo[156];
00153 u16 logoCRC16;
00154 u16 headerCRC16;
00155
00156 u32 debugRomSource;
00157 u32 debugRomSize;
00158 u32 debugRomDestination;
00159 u32 offset_0x16C;
00160
00161 u8 zero[0x90];
00162 } __attribute__ ((__packed__)) tNDSHeader;
00163
00164 #define __NDSHeader ((tNDSHeader *)0x02FFFE00)
00165
00169 typedef struct sNDSBanner {
00170 u16 version;
00171 u16 crc;
00172 u8 reserved[28];
00173 u8 icon[512];
00174 u16 palette[16];
00175 u16 titles[6][128];
00176 } __attribute__ ((__packed__)) tNDSBanner;
00177
00178
00179 #ifdef __cplusplus
00180 extern "C" {
00181 #endif
00182
00183 #ifdef ARM9
00184 #define BUS_OWNER_ARM9 true
00185 #define BUS_OWNER_ARM7 false
00186
00187
00188 static inline
00193 void sysSetCartOwner(bool arm9) {
00194 REG_EXMEMCNT = (REG_EXMEMCNT & ~ARM7_OWNS_ROM) | (arm9 ? 0 : ARM7_OWNS_ROM);
00195 }
00196
00197 static inline
00202 void sysSetCardOwner(bool arm9) {
00203 REG_EXMEMCNT = (REG_EXMEMCNT & ~ARM7_OWNS_CARD) | (arm9 ? 0 : ARM7_OWNS_CARD);
00204 }
00205
00206 static inline
00212 void sysSetBusOwners(bool arm9rom, bool arm9card) {
00213 REG_EXMEMCNT = (REG_EXMEMCNT & ~(ARM7_OWNS_CARD|ARM7_OWNS_ROM)) |
00214 (arm9card ? 0: ARM7_OWNS_CARD) |
00215 (arm9rom ? 0: ARM7_OWNS_ROM );
00216 }
00217 #endif
00218
00219
00220 #ifdef __cplusplus
00221 }
00222 #endif
00223
00224
00225 #endif
00226