summaryrefslogtreecommitdiff
path: root/arm9/lib/include
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/lib/include')
-rw-r--r--arm9/lib/include/MI_memory.h10
-rw-r--r--arm9/lib/include/NNS_SND_arc.h38
-rw-r--r--arm9/lib/include/NNS_SND_arc_loader.h12
-rw-r--r--arm9/lib/include/NNS_SND_heap.h11
-rw-r--r--arm9/lib/include/NNS_g2d.h212
-rw-r--r--arm9/lib/include/RTC_api.h83
-rw-r--r--arm9/lib/include/RTC_internal.h11
-rw-r--r--arm9/lib/include/gx.h15
-rw-r--r--arm9/lib/include/registers.h142
9 files changed, 531 insertions, 3 deletions
diff --git a/arm9/lib/include/MI_memory.h b/arm9/lib/include/MI_memory.h
index 339ff9b8..4e5722bb 100644
--- a/arm9/lib/include/MI_memory.h
+++ b/arm9/lib/include/MI_memory.h
@@ -25,6 +25,11 @@ static inline void MI_CpuClear8(void *dest, u32 size) {
MI_CpuFill8(dest, 0, size);
}
+static inline void MI_CpuFill16(void *dest, u16 data, u32 size)
+{
+ MIi_CpuClear16(data, dest, size);
+}
+
static inline void MI_CpuClear16(void * destp, u32 size)
{
MIi_CpuClear16(0, destp, size);
@@ -55,4 +60,9 @@ static inline void MI_CpuFillFast(void *dest, u32 data, u32 size)
MIi_CpuClearFast(data, dest, size);
}
+static inline void MI_CpuCopyFast(const void *src, void *dest, u32 size)
+{
+ MIi_CpuCopyFast(src, dest, size);
+}
+
#endif //POKEDIAMOND_ARM9_MI_MEMORY_H
diff --git a/arm9/lib/include/NNS_SND_arc.h b/arm9/lib/include/NNS_SND_arc.h
new file mode 100644
index 00000000..95b33141
--- /dev/null
+++ b/arm9/lib/include/NNS_SND_arc.h
@@ -0,0 +1,38 @@
+#ifndef GUARD_NNS_SND_ARC_H
+#define GUARD_NNS_SND_ARC_H
+
+#include "SND_main.h"
+
+typedef struct NNSSndArcHeader
+{
+ struct SNDBinaryFileHeader fileHeader;
+ u32 symbolDataOffset;
+ u32 symbolDataSize;
+ u32 infoOffset;
+ u32 infoSize;
+ u32 fatOffset;
+ u32 fatSize;
+ u32 fileImageOffset;
+ u32 fileImageSize;
+} NNSSndArcHeader;
+
+typedef struct NNSSndArc
+{
+ NNSSndArcHeader header;
+ BOOL file_open;
+ FSFile file;
+ FSFileID fileId;
+ struct NNSSndArcFat* fat;
+ struct NNSSndArcSymbol* symbol;
+ struct NNSSndArcInfo* info;
+} NNSSndArc;
+
+void NNS_SndInit(void);
+void NNS_SndArcInit(NNSSndArc *, const char *, void *, u32);
+void NNS_SndArcPlayerSetup(void *);
+void NNS_SndMain(void);
+void NNS_SndHandleInit(u32 *);
+void NNS_SndPlayerStopSeqByPlayerNo(int playerNo, int fadeFrame);
+void NNS_SndHandleReleaseSeq(void);
+
+#endif //GUARD_NNS_SND_ARC_H
diff --git a/arm9/lib/include/NNS_SND_arc_loader.h b/arm9/lib/include/NNS_SND_arc_loader.h
new file mode 100644
index 00000000..851c08ab
--- /dev/null
+++ b/arm9/lib/include/NNS_SND_arc_loader.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_NNS_SND_ARC_LOADER_H
+#define GUARD_NNS_SND_ARC_LOADER_H
+
+#include "NNS_SND_heap.h"
+
+BOOL NNS_SndArcLoadGroup(int groupNo, NNSSndHeapHandle * heap);
+BOOL NNS_SndArcLoadSeq(int seqNo, NNSSndHeapHandle * heap);
+BOOL NNS_SndArcLoadSeqEx(int seqNo, u32 loadFlag, NNSSndHeapHandle * heap);
+BOOL NNS_SndArcLoadWaveArc(int waveArcNo, NNSSndHeapHandle * heap);
+BOOL NNS_SndArcLoadBank(int bankNo, NNSSndHeapHandle * heap);
+
+#endif //GUARD_NNS_SND_ARC_LOADER_H
diff --git a/arm9/lib/include/NNS_SND_heap.h b/arm9/lib/include/NNS_SND_heap.h
new file mode 100644
index 00000000..2929d1bb
--- /dev/null
+++ b/arm9/lib/include/NNS_SND_heap.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_NNS_SND_HEAP_H
+#define GUARD_NNS_SND_HEAP_H
+
+struct NNSSndHeap;
+typedef struct NNSSndHeap* NNSSndHeapHandle;
+
+NNSSndHeapHandle * NNS_SndHeapCreate(void * start, u32 size);
+int NNS_SndHeapSaveState(NNSSndHeapHandle * heap);
+void NNS_SndHeapLoadState(NNSSndHeapHandle * heap, int level);
+
+#endif //GUARD_NNS_SND_HEAP_H
diff --git a/arm9/lib/include/NNS_g2d.h b/arm9/lib/include/NNS_g2d.h
new file mode 100644
index 00000000..483f254a
--- /dev/null
+++ b/arm9/lib/include/NNS_g2d.h
@@ -0,0 +1,212 @@
+#ifndef NNSYS_NNS_G2D_H
+#define NNSYS_NNS_G2D_H
+
+#include "gx.h"
+
+typedef struct NNSG2dCharacterData
+{
+ u16 H;
+ u16 W;
+ GXTexFmt pixelFmt;
+ GXOBJVRamModeChar mapingType;
+ u32 characterFmt;
+ u32 szByte;
+ void * pRawData;
+} NNSG2dCharacterData;
+
+typedef struct NNSG2dScreenData
+{
+ u16 screenWidth;
+ u16 screenHeight;
+ u16 colorMode;
+ u16 screenFormat;
+ u32 szByte;
+ u32 rawData[1];
+} NNSG2dScreenData;
+
+typedef struct NNSG2dPaletteData
+{
+ GXTexFmt fmt;
+ BOOL bExtendedPlt;
+ u32 szByte;
+ void * pRawData;
+
+} NNSG2dPaletteData;
+
+typedef enum NNS_G2D_VRAM_TYPE
+{
+ NNS_G2D_VRAM_TYPE_3DMAIN = 0,
+ NNS_G2D_VRAM_TYPE_2DMAIN = 1,
+ NNS_G2D_VRAM_TYPE_2DSUB = 2,
+ NNS_G2D_VRAM_TYPE_MAX = 3
+} NNS_G2D_VRAM_TYPE;
+
+typedef enum NNSG2dCharacterDataMapingType
+{
+ NNS_G2D_CHARACTERMAPING_1D_32,
+ NNS_G2D_CHARACTERMAPING_1D_64,
+ NNS_G2D_CHARACTERMAPING_1D_128,
+ NNS_G2D_CHARACTERMAPING_1D_256,
+ NNS_G2D_CHARACTERMAPING_2D,
+ NNS_G2D_CHARACTERMAPING_MAX
+
+} NNSG2dCharacterDataMapingType;
+
+typedef struct NNSG2dImageAttr
+{
+ GXTexSizeS sizeS;
+ GXTexSizeT sizeT;
+ GXTexFmt fmt;
+ BOOL bExtendedPlt;
+ GXTexPlttColor0 plttUse;
+ GXOBJVRamModeChar mappingType;
+} NNSG2dImageAttr;
+
+typedef struct NNSG2dVRamLocation
+{
+ u32 baseAddrOfVram[ NNS_G2D_VRAM_TYPE_MAX ];
+} NNSG2dVRamLocation;
+
+typedef struct NNSG2dImageProxy
+{
+ NNSG2dVRamLocation vramLocation;
+ NNSG2dImageAttr attr;
+} NNSG2dImageProxy;
+
+typedef struct NNSG2dPaletteCompressInfo
+{
+ u16 numPalette;
+ u16 pad16;
+ void * pPlttIdxTbl;
+
+} NNSG2dPaletteCompressInfo;
+
+void NNS_G2dLoadImage1DMapping
+(
+ const NNSG2dCharacterData * pSrcData,
+ u32 baseAddr,
+ NNS_G2D_VRAM_TYPE type,
+ NNSG2dImageProxy * pImgProxy
+);
+
+void NNS_G2dLoadImage2DMapping
+(
+ const NNSG2dCharacterData * pSrcData,
+ u32 baseAddr,
+ NNS_G2D_VRAM_TYPE type,
+ NNSG2dImageProxy * pImgProxy
+);
+
+typedef struct NNSG2dImagePaletteProxy
+{
+ GXTexFmt fmt;
+ BOOL bExtendedPlt;
+ NNSG2dVRamLocation vramLocation;
+} NNSG2dImagePaletteProxy;
+
+void NNS_G2dLoadPalette
+(
+ const NNSG2dPaletteData * pSrcData,
+ u32 addr,
+ NNS_G2D_VRAM_TYPE type,
+ NNSG2dImagePaletteProxy * pPltProxy
+);
+
+void NNS_G2dLoadPaletteEx
+(
+ const NNSG2dPaletteData * pSrcData,
+ const NNSG2dPaletteCompressInfo * pCmpInfo,
+ u32 addr,
+ NNS_G2D_VRAM_TYPE type,
+ NNSG2dImagePaletteProxy * pPltProxy
+);
+
+typedef struct NNSG2dCellVramTransferData
+{
+ u32 srcDataOffset;
+ u32 szByte;
+} NNSG2dCellVramTransferData;
+
+typedef struct NNSG2dVramTransferData
+{
+ u32 szByteMax;
+ NNSG2dCellVramTransferData * pCellTransferDataArray;
+} NNSG2dVramTransferData;
+
+typedef struct NNSG2dCellOAMAttrData
+{
+ u16 attr0;
+ u16 attr1;
+ u16 attr2;
+} NNSG2dCellOAMAttrData;
+
+typedef struct NNSG2dCellData
+{
+ u16 numOAMAttrs;
+ u16 cellAttr;
+ NNSG2dCellOAMAttrData * pOamAttrArray;
+
+} NNSG2dCellData;
+
+typedef struct NNSG2dCellDataBank
+{
+ u16 numCells;
+ u16 cellBankAttr;
+ NNSG2dCellData * pCellDataArrayHead;
+ NNSG2dCharacterDataMapingType mappingMode;
+ NNSG2dVramTransferData * pVramTransferData;
+ void * pStringBank;
+ void * pExtendedData;
+
+} NNSG2dCellDataBank;
+
+typedef enum NNSG2dAnimationPlayMode
+{
+ NNS_G2D_ANIMATIONPLAYMODE_INVALID = 0x0,
+ NNS_G2D_ANIMATIONPLAYMODE_FORWARD,
+ NNS_G2D_ANIMATIONPLAYMODE_FORWARD_LOOP,
+ NNS_G2D_ANIMATIONPLAYMODE_REVERSE,
+ NNS_G2D_ANIMATIONPLAYMODE_REVERSE_LOOP,
+ NNS_G2D_ANIMATIONPLAYMODE_MAX
+} NNSG2dAnimationPlayMode;
+
+typedef struct NNSG2dAnimFrameData
+{
+ void * pContent;
+ u16 frames;
+ u16 pad16;
+} NNSG2dAnimFrameData;
+
+typedef struct NNSG2dAnimSequenceData
+{
+ u16 numFrames;
+ u16 loopStartFrameIdx;
+ u32 animType;
+ NNSG2dAnimationPlayMode playMode;
+ NNSG2dAnimFrameData * pAnmFrameArray;
+
+} NNSG2dAnimSequenceData;
+
+typedef struct NNSG2dAnimBankData
+{
+
+ u16 numSequences;
+ u16 numTotalFrames;
+ NNSG2dAnimSequenceData * pSequenceArrayHead;
+ NNSG2dAnimFrameData * pFrameArrayHead;
+ void * pAnimContents;
+ void * pStringBank;
+ void * pExtendedData;
+
+} NNSG2dAnimBankData;
+
+BOOL NNS_G2dGetUnpackedBGCharacterData(void * pNcgrFile, NNSG2dCharacterData ** ppCharData);
+BOOL NNS_G2dGetUnpackedCharacterData(void * pNcgrFile, NNSG2dCharacterData ** ppCharData);
+BOOL NNS_G2dGetUnpackedScreenData(void * pNscrFile, NNSG2dScreenData ** ppScrData);
+BOOL NNS_G2dGetUnpackedPaletteData(void * pNclrFile, NNSG2dPaletteData ** ppPltData);
+BOOL NNS_G2dGetUnpackedPaletteData(void * pNclrFile, NNSG2dPaletteData ** ppPltData);
+BOOL NNS_G2dGetUnpackedPaletteCompressInfo(void * pNclrFile, NNSG2dPaletteCompressInfo ** ppPltCmpInfo);
+BOOL NNS_G2dGetUnpackedCellBank(void * pNcerFile, NNSG2dCellDataBank ** ppCellBank);
+BOOL NNS_G2dGetUnpackedAnimBank(void * pNanrFile, NNSG2dAnimBankData ** ppAnimBank);
+
+#endif //NNSYS_NNS_G2D_H
diff --git a/arm9/lib/include/RTC_api.h b/arm9/lib/include/RTC_api.h
index d2577cdf..09efde7e 100644
--- a/arm9/lib/include/RTC_api.h
+++ b/arm9/lib/include/RTC_api.h
@@ -1,6 +1,29 @@
#ifndef NITRO_RTC_API_H_
#define NITRO_RTC_API_H_
+typedef enum RTCAlarmChan
+{
+ RTC_ALARM_CHAN_1 = 0,
+ RTC_ALARM_CHAN_2,
+ RTC_ALARM_CHAN_MAX
+}
+RTCAlarmChan;
+
+// Alarm status definitions
+typedef enum RTCAlarmStatus
+{
+ RTC_ALARM_STATUS_OFF = 0,
+ RTC_ALARM_STATUS_ON,
+ RTC_ALARM_STATUS_MAX
+}
+RTCAlarmStatus;
+
+#define RTC_ALARM_ENABLE_NONE 0x0000
+#define RTC_ALARM_ENABLE_WEEK 0x0001
+#define RTC_ALARM_ENABLE_HOUR 0x0002
+#define RTC_ALARM_ENABLE_MINUTE 0x0004
+#define RTC_ALARM_ENABLE_ALL ( RTC_ALARM_ENABLE_WEEK | RTC_ALARM_ENABLE_HOUR | RTC_ALARM_ENABLE_MINUTE )
+
typedef enum RTCWeek
{
RTC_WEEK_SUNDAY = 0,
@@ -12,7 +35,7 @@ typedef enum RTCWeek
RTC_WEEK_SATURDAY,
RTC_WEEK_MAX
}
- RTCWeek;
+RTCWeek;
typedef struct RTCDate
{
@@ -21,7 +44,7 @@ typedef struct RTCDate
u32 day;
RTCWeek week;
}
- RTCDate;
+RTCDate;
typedef struct RTCTime
{
@@ -29,6 +52,60 @@ typedef struct RTCTime
u32 minute;
u32 second;
}
- RTCTime;
+RTCTime;
+
+typedef struct RTCAlarmParam
+{
+ RTCWeek week; // Day of the week
+ u32 hour; // Hour ( 0 ~ 23 )
+ u32 minute; // Minute ( 0 ~ 59 )
+ u32 enable; // Alarm enable flag ( RTC_ALARM_ENABLE_* )
+
+}
+RTCAlarmParam;
+
+typedef enum RTCResult
+{
+ RTC_RESULT_SUCCESS = 0,
+ RTC_RESULT_BUSY,
+ RTC_RESULT_ILLEGAL_PARAMETER,
+ RTC_RESULT_SEND_ERROR,
+ RTC_RESULT_INVALID_COMMAND,
+ RTC_RESULT_ILLEGAL_STATUS,
+ RTC_RESULT_FATAL_ERROR,
+ RTC_RESULT_MAX
+}
+RTCResult;
+
+typedef void (*RTCCallback) (RTCResult result, void *arg);
+typedef void (*RTCInterrupt) (void);
+
+void RTC_Init(void);
+RTCResult RTC_GetDate(RTCDate *date);
+RTCResult RTC_GetTime(RTCTime *time);
+RTCResult RTC_GetDateTime(RTCDate *date, RTCTime *time);
+RTCResult RTC_SetDate(const RTCDate *date);
+RTCResult RTC_SetTime(const RTCTime *time);
+RTCResult RTC_SetDateTime(const RTCDate *date, const RTCTime *time);
+RTCResult RTC_GetAlarmStatus(RTCAlarmChan chan, RTCAlarmStatus *status);
+RTCResult RTC_GetAlarmParam(RTCAlarmChan chan, RTCAlarmParam *param);
+RTCResult RTC_SetAlarmStatus(RTCAlarmChan chan, const RTCAlarmStatus *status);
+RTCResult RTC_SetAlarmParam(RTCAlarmChan chan, const RTCAlarmParam *param);
+RTCResult RTC_GetDateAsync(RTCDate *date, RTCCallback callback, void *arg);
+RTCResult RTC_GetTimeAsync(RTCTime *time, RTCCallback callback, void *arg);
+RTCResult RTC_GetDateTimeAsync(RTCDate *date, RTCTime *time, RTCCallback callback, void *arg);
+RTCResult RTC_SetDateAsync(const RTCDate *date, RTCCallback callback, void *arg);
+RTCResult RTC_SetTimeAsync(const RTCTime *time, RTCCallback callback, void *arg);
+RTCResult RTC_SetDateTimeAsync(const RTCDate *date, const RTCTime *time, RTCCallback callback,
+ void *arg);
+RTCResult RTC_GetAlarmStatusAsync(RTCAlarmChan chan, RTCAlarmStatus *status, RTCCallback callback,
+ void *arg);
+RTCResult RTC_GetAlarmParamAsync(RTCAlarmChan chan, RTCAlarmParam *param, RTCCallback callback,
+ void *arg);
+void RTC_SetAlarmInterrupt(RTCInterrupt interrupt);
+RTCResult RTC_SetAlarmStatusAsync(RTCAlarmChan chan, const RTCAlarmStatus *status,
+ RTCCallback callback, void *arg);
+RTCResult RTC_SetAlarmParamAsync(RTCAlarmChan chan, const RTCAlarmParam *param,
+ RTCCallback callback, void *arg);
#endif //NITRO_RTC_API_H_
diff --git a/arm9/lib/include/RTC_internal.h b/arm9/lib/include/RTC_internal.h
new file mode 100644
index 00000000..440d8b95
--- /dev/null
+++ b/arm9/lib/include/RTC_internal.h
@@ -0,0 +1,11 @@
+#ifndef NITRO_RTC_INTERNAL_H_
+#define NITRO_RTC_INTERNAL_H_
+
+#include "nitro/types.h"
+
+BOOL RTCi_WriteRawStatus2Async(void);
+BOOL RTCi_ReadRawTimeAsync(void);
+BOOL RTCi_ReadRawDateAsync(void);
+BOOL RTCi_ReadRawDateTimeAsync(void);
+
+#endif //NITRO_RTC_INTERNAL_H_
diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h
index 26f6cfaf..11081942 100644
--- a/arm9/lib/include/gx.h
+++ b/arm9/lib/include/gx.h
@@ -5,6 +5,7 @@
#include "MI_memory.h"
#include "MI_dma.h"
#include "OS_vramExclusive.h"
+#include "registers.h"
//temporary while other files aren't decompiled
@@ -166,4 +167,18 @@ typedef enum
}
GXDispSelect;
+typedef enum
+{
+ GX_OBJVRAMMODE_CHAR_2D = (0 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (0 << REG_GX_DISPCNT_EXOBJ_SHIFT),
+ GX_OBJVRAMMODE_CHAR_1D_32K =
+ (1 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (0 << REG_GX_DISPCNT_EXOBJ_SHIFT),
+ GX_OBJVRAMMODE_CHAR_1D_64K =
+ (1 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (1 << REG_GX_DISPCNT_EXOBJ_SHIFT),
+ GX_OBJVRAMMODE_CHAR_1D_128K =
+ (1 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (2 << REG_GX_DISPCNT_EXOBJ_SHIFT),
+ GX_OBJVRAMMODE_CHAR_1D_256K =
+ (1 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (3 << REG_GX_DISPCNT_EXOBJ_SHIFT)
+}
+ GXOBJVRamModeChar;
+
#endif //GUARD_GX_H
diff --git a/arm9/lib/include/registers.h b/arm9/lib/include/registers.h
index d55347d5..7a0155da 100644
--- a/arm9/lib/include/registers.h
+++ b/arm9/lib/include/registers.h
@@ -517,4 +517,146 @@
#define REG_GX_POWCNT_DSEL_SIZE 1
#define REG_GX_POWCNT_DSEL_MASK 0x8000
+// GX_DISPCNT
+#define REG_GX_DISPCNT_O_SHIFT 31
+#define REG_GX_DISPCNT_O_SIZE 1
+#define REG_GX_DISPCNT_O_MASK 0x80000000
+
+#define REG_GX_DISPCNT_BG_SHIFT 30
+#define REG_GX_DISPCNT_BG_SIZE 1
+#define REG_GX_DISPCNT_BG_MASK 0x40000000
+
+#define REG_GX_DISPCNT_BGSCREENOFFSET_SHIFT 27
+#define REG_GX_DISPCNT_BGSCREENOFFSET_SIZE 3
+#define REG_GX_DISPCNT_BGSCREENOFFSET_MASK 0x38000000
+
+#define REG_GX_DISPCNT_BGCHAROFFSET_SHIFT 24
+#define REG_GX_DISPCNT_BGCHAROFFSET_SIZE 3
+#define REG_GX_DISPCNT_BGCHAROFFSET_MASK 0x07000000
+
+#define REG_GX_DISPCNT_OH_SHIFT 23
+#define REG_GX_DISPCNT_OH_SIZE 1
+#define REG_GX_DISPCNT_OH_MASK 0x00800000
+
+#define REG_GX_DISPCNT_EXOBJ_SHIFT 20
+#define REG_GX_DISPCNT_EXOBJ_SIZE 3
+#define REG_GX_DISPCNT_EXOBJ_MASK 0x00700000
+
+#define REG_GX_DISPCNT_VRAM_SHIFT 18
+#define REG_GX_DISPCNT_VRAM_SIZE 2
+#define REG_GX_DISPCNT_VRAM_MASK 0x000c0000
+
+#define REG_GX_DISPCNT_MODE_SHIFT 16
+#define REG_GX_DISPCNT_MODE_SIZE 2
+#define REG_GX_DISPCNT_MODE_MASK 0x00030000
+
+#define REG_GX_DISPCNT_OW_SHIFT 15
+#define REG_GX_DISPCNT_OW_SIZE 1
+#define REG_GX_DISPCNT_OW_MASK 0x00008000
+
+#define REG_GX_DISPCNT_W1_SHIFT 14
+#define REG_GX_DISPCNT_W1_SIZE 1
+#define REG_GX_DISPCNT_W1_MASK 0x00004000
+
+#define REG_GX_DISPCNT_W0_SHIFT 13
+#define REG_GX_DISPCNT_W0_SIZE 1
+#define REG_GX_DISPCNT_W0_MASK 0x00002000
+
+#define REG_GX_DISPCNT_DISPLAY_SHIFT 8
+#define REG_GX_DISPCNT_DISPLAY_SIZE 5
+#define REG_GX_DISPCNT_DISPLAY_MASK 0x00001f00
+
+#define REG_GX_DISPCNT_BLANK_SHIFT 7
+#define REG_GX_DISPCNT_BLANK_SIZE 1
+#define REG_GX_DISPCNT_BLANK_MASK 0x00000080
+
+#define REG_GX_DISPCNT_OBJMAP_SHIFT 4
+#define REG_GX_DISPCNT_OBJMAP_SIZE 3
+#define REG_GX_DISPCNT_OBJMAP_MASK 0x00000070
+
+#define REG_GX_DISPCNT_BG02D3D_SHIFT 3
+#define REG_GX_DISPCNT_BG02D3D_SIZE 1
+#define REG_GX_DISPCNT_BG02D3D_MASK 0x00000008
+
+#define REG_GX_DISPCNT_BGMODE_SHIFT 0
+#define REG_GX_DISPCNT_BGMODE_SIZE 3
+#define REG_GX_DISPCNT_BGMODE_MASK 0x00000007
+
+#define REG_GX_DISPCNT_OBJMAP_CH_SHIFT 4
+#define REG_GX_DISPCNT_OBJMAP_CH_SIZE 1
+#define REG_GX_DISPCNT_OBJMAP_CH_MASK 0x00000010
+
+#define REG_GX_DISPCNT_OBJMAP_BM_SHIFT 5
+#define REG_GX_DISPCNT_OBJMAP_BM_SIZE 2
+#define REG_GX_DISPCNT_OBJMAP_BM_MASK 0x00000060
+
+#define REG_GX_DISPCNT_EXOBJ_CH_SHIFT 20
+#define REG_GX_DISPCNT_EXOBJ_CH_SIZE 2
+#define REG_GX_DISPCNT_EXOBJ_CH_MASK 0x00300000
+
+#define REG_GX_DISPCNT_EXOBJ_BM_SHIFT 22
+#define REG_GX_DISPCNT_EXOBJ_BM_SIZE 1
+#define REG_GX_DISPCNT_EXOBJ_BM_MASK 0x00400000
+
+// GXS_DB_DISPCNT
+#define REG_GXS_DB_DISPCNT_O_SHIFT 31
+#define REG_GXS_DB_DISPCNT_O_SIZE 1
+#define REG_GXS_DB_DISPCNT_O_MASK 0x80000000
+
+#define REG_GXS_DB_DISPCNT_BG_SHIFT 30
+#define REG_GXS_DB_DISPCNT_BG_SIZE 1
+#define REG_GXS_DB_DISPCNT_BG_MASK 0x40000000
+
+#define REG_GXS_DB_DISPCNT_OH_SHIFT 23
+#define REG_GXS_DB_DISPCNT_OH_SIZE 1
+#define REG_GXS_DB_DISPCNT_OH_MASK 0x00800000
+
+#define REG_GXS_DB_DISPCNT_EXOBJ_SHIFT 20
+#define REG_GXS_DB_DISPCNT_EXOBJ_SIZE 2
+#define REG_GXS_DB_DISPCNT_EXOBJ_MASK 0x00300000
+
+#define REG_GXS_DB_DISPCNT_MODE_SHIFT 16
+#define REG_GXS_DB_DISPCNT_MODE_SIZE 1
+#define REG_GXS_DB_DISPCNT_MODE_MASK 0x00010000
+
+#define REG_GXS_DB_DISPCNT_OW_SHIFT 15
+#define REG_GXS_DB_DISPCNT_OW_SIZE 1
+#define REG_GXS_DB_DISPCNT_OW_MASK 0x00008000
+
+#define REG_GXS_DB_DISPCNT_W1_SHIFT 14
+#define REG_GXS_DB_DISPCNT_W1_SIZE 1
+#define REG_GXS_DB_DISPCNT_W1_MASK 0x00004000
+
+#define REG_GXS_DB_DISPCNT_W0_SHIFT 13
+#define REG_GXS_DB_DISPCNT_W0_SIZE 1
+#define REG_GXS_DB_DISPCNT_W0_MASK 0x00002000
+
+#define REG_GXS_DB_DISPCNT_DISPLAY_SHIFT 8
+#define REG_GXS_DB_DISPCNT_DISPLAY_SIZE 5
+#define REG_GXS_DB_DISPCNT_DISPLAY_MASK 0x00001f00
+
+#define REG_GXS_DB_DISPCNT_BLANK_SHIFT 7
+#define REG_GXS_DB_DISPCNT_BLANK_SIZE 1
+#define REG_GXS_DB_DISPCNT_BLANK_MASK 0x00000080
+
+#define REG_GXS_DB_DISPCNT_OBJMAP_SHIFT 4
+#define REG_GXS_DB_DISPCNT_OBJMAP_SIZE 3
+#define REG_GXS_DB_DISPCNT_OBJMAP_MASK 0x00000070
+
+#define REG_GXS_DB_DISPCNT_BGMODE_SHIFT 0
+#define REG_GXS_DB_DISPCNT_BGMODE_SIZE 3
+#define REG_GXS_DB_DISPCNT_BGMODE_MASK 0x00000007
+
+#define REG_GXS_DB_DISPCNT_OBJMAP_CH_SHIFT 4
+#define REG_GXS_DB_DISPCNT_OBJMAP_CH_SIZE 1
+#define REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK 0x00000010
+
+#define REG_GXS_DB_DISPCNT_OBJMAP_BM_SHIFT 5
+#define REG_GXS_DB_DISPCNT_OBJMAP_BM_SIZE 2
+#define REG_GXS_DB_DISPCNT_OBJMAP_BM_MASK 0x00000060
+
+#define REG_GXS_DB_DISPCNT_EXOBJ_CH_SHIFT 20
+#define REG_GXS_DB_DISPCNT_EXOBJ_CH_SIZE 2
+#define REG_GXS_DB_DISPCNT_EXOBJ_CH_MASK 0x00300000
+
#endif //POKEDIAMOND_ARM9_REGISTERS_H