summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authortheo <arisstephenson2@gmail.com>2020-06-13 17:02:27 -0700
committertheo <arisstephenson2@gmail.com>2020-06-13 17:02:27 -0700
commit66fcdf618665694fb5f5c2d3788561f4e638f167 (patch)
tree106b704cf63fa68f2c714247958b013fcf38b0d0 /include
parent8e1ca1936b4066fa252a14576cb5e4e79aff92b8 (diff)
clang-format
Diffstat (limited to 'include')
-rw-r--r--include/area.h14
-rw-r--r--include/createEnemy.h2
-rw-r--r--include/cutscene.h14
-rw-r--r--include/entity.h98
-rw-r--r--include/entityData.h16
-rw-r--r--include/gba/defines.h52
-rw-r--r--include/gba/flash_internal.h20
-rw-r--r--include/gba/io_reg.h1355
-rw-r--r--include/gba/isagbprint.h24
-rw-r--r--include/gba/m4a_internal.h256
-rw-r--r--include/gba/macro.h238
-rw-r--r--include/gba/multi_boot.h107
-rw-r--r--include/gba/syscall.h38
-rw-r--r--include/gba/types.h324
-rw-r--r--include/global.h25
-rw-r--r--include/greatFairy.h30
-rw-r--r--include/item.h26
-rw-r--r--include/link.h104
-rw-r--r--include/main.h24
-rw-r--r--include/menu.h8
-rw-r--r--include/readKeyInput.h12
-rw-r--r--include/room.h48
-rw-r--r--include/screen.h98
-rw-r--r--include/textbox.h20
24 files changed, 1457 insertions, 1496 deletions
diff --git a/include/area.h b/include/area.h
index dfcc90df..75ca58b7 100644
--- a/include/area.h
+++ b/include/area.h
@@ -4,13 +4,13 @@
#include "global.h"
typedef struct {
- u8 areaMetadata;
- u32 locationIndex;
- u8 unk;
- u16 localFlagOffset;
- u8 filler[19];
- u8 fadeOut;
- u8 filler[14];
+ u8 areaMetadata;
+ u32 locationIndex;
+ u8 unk;
+ u16 localFlagOffset;
+ u8 filler[19];
+ u8 fadeOut;
+ u8 filler[14];
} Area;
extern Area gArea;
diff --git a/include/createEnemy.h b/include/createEnemy.h
index 5812baa5..1667ec24 100644
--- a/include/createEnemy.h
+++ b/include/createEnemy.h
@@ -1 +1 @@
-Entity * CreateEnemy(u8, u8); \ No newline at end of file
+Entity* CreateEnemy(u8, u8); \ No newline at end of file
diff --git a/include/cutscene.h b/include/cutscene.h
index eb1d03d8..d86c06b3 100644
--- a/include/cutscene.h
+++ b/include/cutscene.h
@@ -4,13 +4,13 @@
#include "global.h"
typedef struct {
- u32 *cutsceneData;
- u8 textIndex;
- u8 filler[11];
- u16 pauseTime;
- u8 filler[2];
- s32 targetX;
- s32 targetY;
+ u32* cutsceneData;
+ u8 textIndex;
+ u8 filler[11];
+ u16 pauseTime;
+ u8 filler[2];
+ s32 targetX;
+ s32 targetY;
} CutsceneBehavior;
#endif \ No newline at end of file
diff --git a/include/entity.h b/include/entity.h
index 6b519725..7a6618e2 100644
--- a/include/entity.h
+++ b/include/entity.h
@@ -1,17 +1,16 @@
#include "global.h"
-
#ifndef ENTITY_H
#define ENTITY_H
typedef struct {
- void *entity1;
- void *entity2;
- u8 filler[14];
+ void* entity1;
+ void* entity2;
+ u8 filler[14];
} UnkStruct;
typedef struct {
- u8 type;
+ u8 type;
u8 subtype;
u8 parameter1;
u8 parameter2;
@@ -20,29 +19,28 @@ typedef struct {
union SplitWord {
s32 WORD;
struct {
- s16 LO, HI;
+ s16 LO, HI;
} HALF;
};
union SplitHWord {
u16 HWORD;
struct {
- u8 LO, HI;
+ u8 LO, HI;
} PACKED HALF;
};
-typedef struct Entity
-{
- u32 *field_0x0;
- u32 * field_0x4;
- EntityType entityType;
+typedef struct Entity {
+ u32* field_0x0;
+ u32* field_0x4;
+ EntityType entityType;
u8 action;
u8 previousActionFlag;
u8 parameter3;
u8 field_0xf;
u8 flags;
- u8 scriptedScene:4;
- u8 scriptedScene2:4;
+ u8 scriptedScene : 4;
+ u8 scriptedScene2 : 4;
s16 spriteTileSize;
u8 animationState;
u8 direction;
@@ -51,28 +49,28 @@ typedef struct Entity
union {
u8 raw;
struct {
- u8 ss0:2;
- u8 ss2:1;
- u8 ss3:1;
- u8 ss4:1;
- u8 ss5:1;
- u8 ss6:1;
- u8 ss7:1;
+ u8 ss0 : 2;
+ u8 ss2 : 1;
+ u8 ss3 : 1;
+ u8 ss4 : 1;
+ u8 ss5 : 1;
+ u8 ss6 : 1;
+ u8 ss7 : 1;
} PACKED b;
} PACKED spriteSettings;
-
+
struct {
- u8 b0:2;
- u8 b1:2;
- u8 b2:2;
- u8 b3:2;
+ u8 b0 : 2;
+ u8 b1 : 2;
+ u8 b2 : 2;
+ u8 b3 : 2;
} PACKED spriteOrder;
u8 palette;
struct {
- u8 b0:4;
- u8 b1:1;
- u8 b2:3;
+ u8 b0 : 4;
+ u8 b1 : 1;
+ u8 b2 : 3;
} PACKED spriteOrientation;
u8 filler[2];
u8 animationList;
@@ -81,13 +79,13 @@ typedef struct Entity
s16 nonPlanarMovement;
u8 spriteAnimation[3];
struct {
- u8 b0:3;
- u8 b1:5;
+ u8 b0 : 3;
+ u8 b1 : 5;
} PACKED ticks;
u16 collisions;
- union SplitWord x;
- union SplitWord y;
- union SplitWord height; // todo
+ union SplitWord x;
+ union SplitWord y;
+ union SplitWord height; // todo
u8 collisionLayer;
s8 interactType;
u8 field_0x3a;
@@ -103,22 +101,22 @@ typedef struct Entity
u8 field_0x44;
u8 currentHealth;
s16 field_0x46;
- u32 * boundingBox;
+ u32* boundingBox;
u8 field_0x4c;
u8 field_0x4d;
u8 field_0x4e;
u8 field_0x4f;
- struct Entity * parent;
- struct Entity * attachedEntity;
+ struct Entity* parent;
+ struct Entity* attachedEntity;
u8 field_0x58;
u8 field_0x59;
union {
u8 all;
struct {
- u8 f0:1;
- u8 f1:5;
- u8 f2:1;
- u8 f3:1;
+ u8 f0 : 1;
+ u8 f1 : 5;
+ u8 f2 : 1;
+ u8 f3 : 1;
} PACKED b;
} PACKED frames;
u8 gfx;
@@ -129,22 +127,22 @@ typedef struct Entity
u16 spriteVramOffset;
u8 spriteOffsetX;
u8 spriteOffsetY;
- u32 * otherEntity;
- u8 field_0x68;
+ u32* otherEntity;
+ u8 field_0x68;
u8 field_0x69;
u16 field_0x6a;
u8 field_0x6c;
u8 field_0x6d;
u8 filler4[6];
- u32 * heldObjectPtr;
- u8 filler3[2];
- u16 itemCooldown;
- u32 field_0x7c;
- u16 field_0x80;
+ u32* heldObjectPtr;
+ u8 filler3[2];
+ u16 itemCooldown;
+ u32 field_0x7c;
+ u16 field_0x80;
u16 field_0x82;
- union SplitHWord cutsceneBeh;
+ union SplitHWord cutsceneBeh;
u16 field_0x86;
-
+
} Entity;
#endif
diff --git a/include/entityData.h b/include/entityData.h
index 086c489c..6bf62edd 100644
--- a/include/entityData.h
+++ b/include/entityData.h
@@ -2,13 +2,13 @@
#define ENTITYDATA_H
#include "global.h"
typedef struct {
- u8 entityType;
- u8 field_0x1;
- u8 entitySubtype;
- u8 entityParameter1;
- u32 entityParameter2;
- u16 xPos;
- u16 yPos;
- u32 spritePtr;
+ u8 entityType;
+ u8 field_0x1;
+ u8 entitySubtype;
+ u8 entityParameter1;
+ u32 entityParameter2;
+ u16 xPos;
+ u16 yPos;
+ u32 spritePtr;
} EntityData;
#endif \ No newline at end of file
diff --git a/include/gba/defines.h b/include/gba/defines.h
index 765f0065..09f9b07b 100644
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
@@ -3,7 +3,7 @@
#include <stddef.h>
-#define TRUE 1
+#define TRUE 1
#define FALSE 0
#if defined(__APPLE__)
@@ -20,65 +20,65 @@
#define ALIGNED(n) __attribute__((aligned(n)))
-#define SOUND_INFO_PTR (*(struct SoundInfo **)0x3007FF0)
-#define INTR_CHECK (*(u16 *)0x3007FF8)
-#define INTR_VECTOR (*(void **)0x3007FFC)
+#define SOUND_INFO_PTR (*(struct SoundInfo**)0x3007FF0)
+#define INTR_CHECK (*(u16*)0x3007FF8)
+#define INTR_VECTOR (*(void**)0x3007FFC)
#define EWRAM_START 0x02000000
-#define EWRAM_END (EWRAM_START + 0x40000)
+#define EWRAM_END (EWRAM_START + 0x40000)
#define IWRAM_START 0x03000000
-#define IWRAM_END (IWRAM_START + 0x8000)
+#define IWRAM_END (IWRAM_START + 0x8000)
-#define PLTT 0x5000000
+#define PLTT 0x5000000
#define PLTT_SIZE 0x400
-#define BG_PLTT PLTT
+#define BG_PLTT PLTT
#define BG_PLTT_SIZE 0x200
-#define OBJ_PLTT (PLTT + 0x200)
+#define OBJ_PLTT (PLTT + 0x200)
#define OBJ_PLTT_SIZE 0x200
-#define VRAM 0x6000000
+#define VRAM 0x6000000
#define VRAM_SIZE 0x18000
-#define BG_VRAM VRAM
-#define BG_VRAM_SIZE 0x10000
-#define BG_CHAR_SIZE 0x4000
-#define BG_SCREEN_SIZE 0x800
-#define BG_CHAR_ADDR(n) (void *)(BG_VRAM + (BG_CHAR_SIZE * (n)))
-#define BG_SCREEN_ADDR(n) (void *)(BG_VRAM + (BG_SCREEN_SIZE * (n)))
-#define BG_TILE_ADDR(n) (void *)(BG_VRAM + (0x80 * (n)))
+#define BG_VRAM VRAM
+#define BG_VRAM_SIZE 0x10000
+#define BG_CHAR_SIZE 0x4000
+#define BG_SCREEN_SIZE 0x800
+#define BG_CHAR_ADDR(n) (void*)(BG_VRAM + (BG_CHAR_SIZE * (n)))
+#define BG_SCREEN_ADDR(n) (void*)(BG_VRAM + (BG_SCREEN_SIZE * (n)))
+#define BG_TILE_ADDR(n) (void*)(BG_VRAM + (0x80 * (n)))
#define BG_TILE_H_FLIP(n) (0x400 + (n))
#define BG_TILE_V_FLIP(n) (0x800 + (n))
// text-mode BG
-#define OBJ_VRAM0 (void *)(VRAM + 0x10000)
+#define OBJ_VRAM0 (void*)(VRAM + 0x10000)
#define OBJ_VRAM0_SIZE 0x8000
// bitmap-mode BG
-#define OBJ_VRAM1 (void *)(VRAM + 0x14000)
+#define OBJ_VRAM1 (void*)(VRAM + 0x14000)
#define OBJ_VRAM1_SIZE 0x4000
-#define OAM 0x7000000
+#define OAM 0x7000000
#define OAM_SIZE 0x400
-#define ROM_HEADER_SIZE 0xC0
+#define ROM_HEADER_SIZE 0xC0
-#define DISPLAY_WIDTH 240
+#define DISPLAY_WIDTH 240
#define DISPLAY_HEIGHT 160
#define TILE_SIZE_4BPP 32
#define TILE_SIZE_8BPP 64
-#define TILE_OFFSET_4BPP(n) ((n) * TILE_SIZE_4BPP)
-#define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP)
+#define TILE_OFFSET_4BPP(n) ((n)*TILE_SIZE_4BPP)
+#define TILE_OFFSET_8BPP(n) ((n)*TILE_SIZE_8BPP)
#define TOTAL_OBJ_TILE_COUNT 1024
#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r))
-#define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F))
+#define _RGB(r, g, b) ((((b)&0x1F) << 10) + (((g)&0x1F) << 5) + ((r)&0x1F))
#define RGB_BLACK RGB(0, 0, 0)
#define RGB_WHITE RGB(31, 31, 31)
@@ -90,6 +90,6 @@
#define RGB_CYAN RGB(0, 31, 31)
#define RGB_WHITEALPHA (RGB_WHITE | 0x8000)
-#define SYSTEM_CLOCK (16 * 1024 * 1024) // System Clock
+#define SYSTEM_CLOCK (16 * 1024 * 1024) // System Clock
#endif // GUARD_GBA_DEFINES
diff --git a/include/gba/flash_internal.h b/include/gba/flash_internal.h
index a4770882..09f3f79c 100644
--- a/include/gba/flash_internal.h
+++ b/include/gba/flash_internal.h
@@ -1,16 +1,15 @@
#ifndef GUARD_GBA_FLASH_INTERNAL_H
#define GUARD_GBA_FLASH_INTERNAL_H
-#define FLASH_BASE ((u8 *)0xE000000)
+#define FLASH_BASE ((u8*)0xE000000)
-#define FLASH_WRITE(addr, data) ((*(vu8 *)(FLASH_BASE + (addr))) = (data))
+#define FLASH_WRITE(addr, data) ((*(vu8*)(FLASH_BASE + (addr))) = (data))
#define FLASH_ROM_SIZE_1M 131072 // 1 megabit ROM
#define SECTORS_PER_BANK 16
-struct FlashSector
-{
+struct FlashSector {
u32 size;
u8 shift;
u16 count;
@@ -25,21 +24,20 @@ struct FlashType {
// TODO: add support for anonymous unions/structs if possible
union {
struct {
- u8 makerId;
- u8 deviceId;
+ u8 makerId;
+ u8 deviceId;
} separate;
u16 joined;
} ids;
};
-struct FlashSetupInfo
-{
+struct FlashSetupInfo {
u16 (*programFlashByte)(u16, u32, u8);
- u16 (*programFlashSector)(u16, void *);
+ u16 (*programFlashSector)(u16, void*);
u16 (*eraseFlashChip)(void);
u16 (*eraseFlashSector)(u16);
- u16 (*WaitForFlashWrite)(u8, u8 *, u8);
- const u16 *maxTime;
+ u16 (*WaitForFlashWrite)(u8, u8*, u8);
+ const u16* maxTime;
struct FlashType type;
};
diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h
index e331da40..a66467f0 100644
--- a/include/gba/io_reg.h
+++ b/include/gba/io_reg.h
@@ -5,600 +5,601 @@
// I/O register offsets
-#define REG_OFFSET_DISPCNT 0x0
-#define REG_OFFSET_DISPSTAT 0x4
-#define REG_OFFSET_VCOUNT 0x6
-#define REG_OFFSET_BG0CNT 0x8
-#define REG_OFFSET_BG1CNT 0xa
-#define REG_OFFSET_BG2CNT 0xc
-#define REG_OFFSET_BG3CNT 0xe
-#define REG_OFFSET_BG0HOFS 0x10
-#define REG_OFFSET_BG0VOFS 0x12
-#define REG_OFFSET_BG1HOFS 0x14
-#define REG_OFFSET_BG1VOFS 0x16
-#define REG_OFFSET_BG2HOFS 0x18
-#define REG_OFFSET_BG2VOFS 0x1a
-#define REG_OFFSET_BG3HOFS 0x1c
-#define REG_OFFSET_BG3VOFS 0x1e
-#define REG_OFFSET_BG2PA 0x20
-#define REG_OFFSET_BG2PB 0x22
-#define REG_OFFSET_BG2PC 0x24
-#define REG_OFFSET_BG2PD 0x26
-#define REG_OFFSET_BG2X 0x28
-#define REG_OFFSET_BG2X_L 0x28
-#define REG_OFFSET_BG2X_H 0x2a
-#define REG_OFFSET_BG2Y 0x2c
-#define REG_OFFSET_BG2Y_L 0x2c
-#define REG_OFFSET_BG2Y_H 0x2e
-#define REG_OFFSET_BG3PA 0x30
-#define REG_OFFSET_BG3PB 0x32
-#define REG_OFFSET_BG3PC 0x34
-#define REG_OFFSET_BG3PD 0x36
-#define REG_OFFSET_BG3X 0x38
-#define REG_OFFSET_BG3X_L 0x38
-#define REG_OFFSET_BG3X_H 0x3a
-#define REG_OFFSET_BG3Y 0x3c
-#define REG_OFFSET_BG3Y_L 0x3c
-#define REG_OFFSET_BG3Y_H 0x3e
-#define REG_OFFSET_WIN0H 0x40
-#define REG_OFFSET_WIN1H 0x42
-#define REG_OFFSET_WIN0V 0x44
-#define REG_OFFSET_WIN1V 0x46
-#define REG_OFFSET_WININ 0x48
-#define REG_OFFSET_WINOUT 0x4a
-#define REG_OFFSET_MOSAIC 0x4c
-#define REG_OFFSET_BLDCNT 0x50
-#define REG_OFFSET_BLDALPHA 0x52
-#define REG_OFFSET_BLDY 0x54
+#define REG_OFFSET_DISPCNT 0x0
+#define REG_OFFSET_DISPSTAT 0x4
+#define REG_OFFSET_VCOUNT 0x6
+#define REG_OFFSET_BG0CNT 0x8
+#define REG_OFFSET_BG1CNT 0xa
+#define REG_OFFSET_BG2CNT 0xc
+#define REG_OFFSET_BG3CNT 0xe
+#define REG_OFFSET_BG0HOFS 0x10
+#define REG_OFFSET_BG0VOFS 0x12
+#define REG_OFFSET_BG1HOFS 0x14
+#define REG_OFFSET_BG1VOFS 0x16
+#define REG_OFFSET_BG2HOFS 0x18
+#define REG_OFFSET_BG2VOFS 0x1a
+#define REG_OFFSET_BG3HOFS 0x1c
+#define REG_OFFSET_BG3VOFS 0x1e
+#define REG_OFFSET_BG2PA 0x20
+#define REG_OFFSET_BG2PB 0x22
+#define REG_OFFSET_BG2PC 0x24
+#define REG_OFFSET_BG2PD 0x26
+#define REG_OFFSET_BG2X 0x28
+#define REG_OFFSET_BG2X_L 0x28
+#define REG_OFFSET_BG2X_H 0x2a
+#define REG_OFFSET_BG2Y 0x2c
+#define REG_OFFSET_BG2Y_L 0x2c
+#define REG_OFFSET_BG2Y_H 0x2e
+#define REG_OFFSET_BG3PA 0x30
+#define REG_OFFSET_BG3PB 0x32
+#define REG_OFFSET_BG3PC 0x34
+#define REG_OFFSET_BG3PD 0x36
+#define REG_OFFSET_BG3X 0x38
+#define REG_OFFSET_BG3X_L 0x38
+#define REG_OFFSET_BG3X_H 0x3a
+#define REG_OFFSET_BG3Y 0x3c
+#define REG_OFFSET_BG3Y_L 0x3c
+#define REG_OFFSET_BG3Y_H 0x3e
+#define REG_OFFSET_WIN0H 0x40
+#define REG_OFFSET_WIN1H 0x42
+#define REG_OFFSET_WIN0V 0x44
+#define REG_OFFSET_WIN1V 0x46
+#define REG_OFFSET_WININ 0x48
+#define REG_OFFSET_WINOUT 0x4a
+#define REG_OFFSET_MOSAIC 0x4c
+#define REG_OFFSET_BLDCNT 0x50
+#define REG_OFFSET_BLDALPHA 0x52
+#define REG_OFFSET_BLDY 0x54
#define REG_OFFSET_SOUND1CNT_L 0x60
-#define REG_OFFSET_NR10 0x60
+#define REG_OFFSET_NR10 0x60
#define REG_OFFSET_SOUND1CNT_H 0x62
-#define REG_OFFSET_NR11 0x62
-#define REG_OFFSET_NR12 0x63
+#define REG_OFFSET_NR11 0x62
+#define REG_OFFSET_NR12 0x63
#define REG_OFFSET_SOUND1CNT_X 0x64
-#define REG_OFFSET_NR13 0x64
-#define REG_OFFSET_NR14 0x65
+#define REG_OFFSET_NR13 0x64
+#define REG_OFFSET_NR14 0x65
#define REG_OFFSET_SOUND2CNT_L 0x68
-#define REG_OFFSET_NR21 0x68
-#define REG_OFFSET_NR22 0x69
+#define REG_OFFSET_NR21 0x68
+#define REG_OFFSET_NR22 0x69
#define REG_OFFSET_SOUND2CNT_H 0x6c
-#define REG_OFFSET_NR23 0x6c
-#define REG_OFFSET_NR24 0x6d
+#define REG_OFFSET_NR23 0x6c
+#define REG_OFFSET_NR24 0x6d
#define REG_OFFSET_SOUND3CNT_L 0x70
-#define REG_OFFSET_NR30 0x70
+#define REG_OFFSET_NR30 0x70
#define REG_OFFSET_SOUND3CNT_H 0x72
-#define REG_OFFSET_NR31 0x72
-#define REG_OFFSET_NR32 0x73
+#define REG_OFFSET_NR31 0x72
+#define REG_OFFSET_NR32 0x73
#define REG_OFFSET_SOUND3CNT_X 0x74
-#define REG_OFFSET_NR33 0x74
-#define REG_OFFSET_NR34 0x75
+#define REG_OFFSET_NR33 0x74
+#define REG_OFFSET_NR34 0x75
#define REG_OFFSET_SOUND4CNT_L 0x78
-#define REG_OFFSET_NR41 0x78
-#define REG_OFFSET_NR42 0x79
+#define REG_OFFSET_NR41 0x78
+#define REG_OFFSET_NR42 0x79
#define REG_OFFSET_SOUND4CNT_H 0x7c
-#define REG_OFFSET_NR43 0x7c
-#define REG_OFFSET_NR44 0x7d
-#define REG_OFFSET_SOUNDCNT_L 0x80
-#define REG_OFFSET_NR50 0x80
-#define REG_OFFSET_NR51 0x81
-#define REG_OFFSET_SOUNDCNT_H 0x82
-#define REG_OFFSET_SOUNDCNT_X 0x84
-#define REG_OFFSET_NR52 0x84
-#define REG_OFFSET_SOUNDBIAS 0x88
+#define REG_OFFSET_NR43 0x7c
+#define REG_OFFSET_NR44 0x7d
+#define REG_OFFSET_SOUNDCNT_L 0x80
+#define REG_OFFSET_NR50 0x80
+#define REG_OFFSET_NR51 0x81
+#define REG_OFFSET_SOUNDCNT_H 0x82
+#define REG_OFFSET_SOUNDCNT_X 0x84
+#define REG_OFFSET_NR52 0x84
+#define REG_OFFSET_SOUNDBIAS 0x88
#define REG_OFFSET_SOUNDBIAS_L 0x88
#define REG_OFFSET_SOUNDBIAS_H 0x89
-#define REG_OFFSET_WAVE_RAM0 0x90
-#define REG_OFFSET_WAVE_RAM1 0x94
-#define REG_OFFSET_WAVE_RAM2 0x98
-#define REG_OFFSET_WAVE_RAM3 0x9c
-#define REG_OFFSET_FIFO_A 0xa0
-#define REG_OFFSET_FIFO_B 0xa4
-
-#define REG_OFFSET_DMA0 0xb0
-#define REG_OFFSET_DMA0SAD 0xb0
-#define REG_OFFSET_DMA0SAD_L 0xb0
-#define REG_OFFSET_DMA0SAD_H 0xb2
-#define REG_OFFSET_DMA0DAD 0xb4
-#define REG_OFFSET_DMA0DAD_L 0xb4
-#define REG_OFFSET_DMA0DAD_H 0xb6
-#define REG_OFFSET_DMA0CNT 0xb8
-#define REG_OFFSET_DMA0CNT_L 0xb8
-#define REG_OFFSET_DMA0CNT_H 0xba
-#define REG_OFFSET_DMA1 0xbc
-#define REG_OFFSET_DMA1SAD 0xbc
-#define REG_OFFSET_DMA1SAD_L 0xbc
-#define REG_OFFSET_DMA1SAD_H 0xbe
-#define REG_OFFSET_DMA1DAD 0xc0
-#define REG_OFFSET_DMA1DAD_L 0xc0
-#define REG_OFFSET_DMA1DAD_H 0xc2
-#define REG_OFFSET_DMA1CNT 0xc4
-#define REG_OFFSET_DMA1CNT_L 0xc4
-#define REG_OFFSET_DMA1CNT_H 0xc6
-#define REG_OFFSET_DMA2 0xc8
-#define REG_OFFSET_DMA2SAD 0xc8
-#define REG_OFFSET_DMA2SAD_L 0xc8
-#define REG_OFFSET_DMA2SAD_H 0xca
-#define REG_OFFSET_DMA2DAD 0xcc
-#define REG_OFFSET_DMA2DAD_L 0xcc
-#define REG_OFFSET_DMA2DAD_H 0xce
-#define REG_OFFSET_DMA2CNT 0xd0
-#define REG_OFFSET_DMA2CNT_L 0xd0
-#define REG_OFFSET_DMA2CNT_H 0xd2
-#define REG_OFFSET_DMA3 0xd4
-#define REG_OFFSET_DMA3SAD 0xd4
-#define REG_OFFSET_DMA3SAD_L 0xd4
-#define REG_OFFSET_DMA3SAD_H 0xd6
-#define REG_OFFSET_DMA3DAD 0xd8
-#define REG_OFFSET_DMA3DAD_L 0xd8
-#define REG_OFFSET_DMA3DAD_H 0xda
-#define REG_OFFSET_DMA3CNT 0xdc
-#define REG_OFFSET_DMA3CNT_L 0xdc
-#define REG_OFFSET_DMA3CNT_H 0xde
-
-#define REG_OFFSET_TMCNT 0x100
-#define REG_OFFSET_TMCNT_L 0x100
-#define REG_OFFSET_TMCNT_H 0x102
-#define REG_OFFSET_TM0CNT 0x100
-#define REG_OFFSET_TM0CNT_L 0x100
-#define REG_OFFSET_TM0CNT_H 0x102
-#define REG_OFFSET_TM1CNT 0x104
-#define REG_OFFSET_TM1CNT_L 0x104
-#define REG_OFFSET_TM1CNT_H 0x106
-#define REG_OFFSET_TM2CNT 0x108
-#define REG_OFFSET_TM2CNT_L 0x108
-#define REG_OFFSET_TM2CNT_H 0x10a
-#define REG_OFFSET_TM3CNT 0x10c
-#define REG_OFFSET_TM3CNT_L 0x10c
-#define REG_OFFSET_TM3CNT_H 0x10e
-
-#define REG_OFFSET_SIOCNT 0x128
-#define REG_OFFSET_SIODATA8 0x12a
-#define REG_OFFSET_SIODATA32 0x120
+#define REG_OFFSET_WAVE_RAM0 0x90
+#define REG_OFFSET_WAVE_RAM1 0x94
+#define REG_OFFSET_WAVE_RAM2 0x98
+#define REG_OFFSET_WAVE_RAM3 0x9c
+#define REG_OFFSET_FIFO_A 0xa0
+#define REG_OFFSET_FIFO_B 0xa4
+
+#define REG_OFFSET_DMA0 0xb0
+#define REG_OFFSET_DMA0SAD 0xb0
+#define REG_OFFSET_DMA0SAD_L 0xb0
+#define REG_OFFSET_DMA0SAD_H 0xb2
+#define REG_OFFSET_DMA0DAD 0xb4
+#define REG_OFFSET_DMA0DAD_L 0xb4
+#define REG_OFFSET_DMA0DAD_H 0xb6
+#define REG_OFFSET_DMA0CNT 0xb8
+#define REG_OFFSET_DMA0CNT_L 0xb8
+#define REG_OFFSET_DMA0CNT_H 0xba
+#define REG_OFFSET_DMA1 0xbc
+#define REG_OFFSET_DMA1SAD 0xbc
+#define REG_OFFSET_DMA1SAD_L 0xbc
+#define REG_OFFSET_DMA1SAD_H 0xbe
+#define REG_OFFSET_DMA1DAD 0xc0
+#define REG_OFFSET_DMA1DAD_L 0xc0
+#define REG_OFFSET_DMA1DAD_H 0xc2
+#define REG_OFFSET_DMA1CNT 0xc4
+#define REG_OFFSET_DMA1CNT_L 0xc4
+#define REG_OFFSET_DMA1CNT_H 0xc6
+#define REG_OFFSET_DMA2 0xc8
+#define REG_OFFSET_DMA2SAD 0xc8
+#define REG_OFFSET_DMA2SAD_L 0xc8
+#define REG_OFFSET_DMA2SAD_H 0xca
+#define REG_OFFSET_DMA2DAD 0xcc
+#define REG_OFFSET_DMA2DAD_L 0xcc
+#define REG_OFFSET_DMA2DAD_H 0xce
+#define REG_OFFSET_DMA2CNT 0xd0
+#define REG_OFFSET_DMA2CNT_L 0xd0
+#define REG_OFFSET_DMA2CNT_H 0xd2
+#define REG_OFFSET_DMA3 0xd4
+#define REG_OFFSET_DMA3SAD 0xd4
+#define REG_OFFSET_DMA3SAD_L 0xd4
+#define REG_OFFSET_DMA3SAD_H 0xd6
+#define REG_OFFSET_DMA3DAD 0xd8
+#define REG_OFFSET_DMA3DAD_L 0xd8
+#define REG_OFFSET_DMA3DAD_H 0xda
+#define REG_OFFSET_DMA3CNT 0xdc
+#define REG_OFFSET_DMA3CNT_L 0xdc
+#define REG_OFFSET_DMA3CNT_H 0xde
+
+#define REG_OFFSET_TMCNT 0x100
+#define REG_OFFSET_TMCNT_L 0x100
+#define REG_OFFSET_TMCNT_H 0x102
+#define REG_OFFSET_TM0CNT 0x100
+#define REG_OFFSET_TM0CNT_L 0x100
+#define REG_OFFSET_TM0CNT_H 0x102
+#define REG_OFFSET_TM1CNT 0x104
+#define REG_OFFSET_TM1CNT_L 0x104
+#define REG_OFFSET_TM1CNT_H 0x106
+#define REG_OFFSET_TM2CNT 0x108
+#define REG_OFFSET_TM2CNT_L 0x108
+#define REG_OFFSET_TM2CNT_H 0x10a
+#define REG_OFFSET_TM3CNT 0x10c
+#define REG_OFFSET_TM3CNT_L 0x10c
+#define REG_OFFSET_TM3CNT_H 0x10e
+
+#define REG_OFFSET_SIOCNT 0x128
+#define REG_OFFSET_SIODATA8 0x12a
+#define REG_OFFSET_SIODATA32 0x120
#define REG_OFFSET_SIOMLT_SEND 0x12a
#define REG_OFFSET_SIOMLT_RECV 0x120
-#define REG_OFFSET_SIOMULTI0 0x120
-#define REG_OFFSET_SIOMULTI1 0x122
-#define REG_OFFSET_SIOMULTI2 0x124
-#define REG_OFFSET_SIOMULTI3 0x126
-
-#define REG_OFFSET_KEYINPUT 0x130
-#define REG_OFFSET_KEYCNT 0x132
-
-#define REG_OFFSET_RCNT 0x134
-
-#define REG_OFFSET_JOYCNT 0x140
-#define REG_OFFSET_JOYSTAT 0x158
-#define REG_OFFSET_JOY_RECV 0x150
-#define REG_OFFSET_JOY_RECV_L 0x150
-#define REG_OFFSET_JOY_RECV_H 0x152
-#define REG_OFFSET_JOY_TRANS 0x154
+#define REG_OFFSET_SIOMULTI0 0x120
+#define REG_OFFSET_SIOMULTI1 0x122
+#define REG_OFFSET_SIOMULTI2 0x124
+#define REG_OFFSET_SIOMULTI3 0x126
+
+#define REG_OFFSET_KEYINPUT 0x130
+#define REG_OFFSET_KEYCNT 0x132
+
+#define REG_OFFSET_RCNT 0x134
+
+#define REG_OFFSET_JOYCNT 0x140
+#define REG_OFFSET_JOYSTAT 0x158
+#define REG_OFFSET_JOY_RECV 0x150
+#define REG_OFFSET_JOY_RECV_L 0x150
+#define REG_OFFSET_JOY_RECV_H 0x152
+#define REG_OFFSET_JOY_TRANS 0x154
#define REG_OFFSET_JOY_TRANS_L 0x154
#define REG_OFFSET_JOY_TRANS_H 0x156
-#define REG_OFFSET_IME 0x208
-#define REG_OFFSET_IE 0x200
-#define REG_OFFSET_IF 0x202
+#define REG_OFFSET_IME 0x208
+#define REG_OFFSET_IE 0x200
+#define REG_OFFSET_IF 0x202
-#define REG_OFFSET_WAITCNT 0x204
+#define REG_OFFSET_WAITCNT 0x204
// I/O register addresses
-#define REG_ADDR_DISPCNT (REG_BASE + REG_OFFSET_DISPCNT)
-#define REG_ADDR_DISPSTAT (REG_BASE + REG_OFFSET_DISPSTAT)
-#define REG_ADDR_VCOUNT (REG_BASE + REG_OFFSET_VCOUNT)
-#define REG_ADDR_BG0CNT (REG_BASE + REG_OFFSET_BG0CNT)
-#define REG_ADDR_BG1CNT (REG_BASE + REG_OFFSET_BG1CNT)
-#define REG_ADDR_BG2CNT (REG_BASE + REG_OFFSET_BG2CNT)
-#define REG_ADDR_BG3CNT (REG_BASE + REG_OFFSET_BG3CNT)
-#define REG_ADDR_BG0HOFS (REG_BASE + REG_OFFSET_BG0HOFS)
-#define REG_ADDR_BG0VOFS (REG_BASE + REG_OFFSET_BG0VOFS)
-#define REG_ADDR_BG1HOFS (REG_BASE + REG_OFFSET_BG1HOFS)
-#define REG_ADDR_BG1VOFS (REG_BASE + REG_OFFSET_BG1VOFS)
-#define REG_ADDR_BG2HOFS (REG_BASE + REG_OFFSET_BG2HOFS)
-#define REG_ADDR_BG2VOFS (REG_BASE + REG_OFFSET_BG2VOFS)
-#define REG_ADDR_BG3HOFS (REG_BASE + REG_OFFSET_BG3HOFS)
-#define REG_ADDR_BG3VOFS (REG_BASE + REG_OFFSET_BG3VOFS)
-#define REG_ADDR_BG2PA (REG_BASE + REG_OFFSET_BG2PA)
-#define REG_ADDR_BG2PB (REG_BASE + REG_OFFSET_BG2PB)
-#define REG_ADDR_BG2PC (REG_BASE + REG_OFFSET_BG2PC)
-#define REG_ADDR_BG2PD (REG_BASE + REG_OFFSET_BG2PD)
-#define REG_ADDR_BG2X (REG_BASE + REG_OFFSET_BG2X)
-#define REG_ADDR_BG2X_L (REG_BASE + REG_OFFSET_BG2X_L)
-#define REG_ADDR_BG2X_H (REG_BASE + REG_OFFSET_BG2X_H)
-#define REG_ADDR_BG2Y (REG_BASE + REG_OFFSET_BG2Y)
-#define REG_ADDR_BG2Y_L (REG_BASE + REG_OFFSET_BG2Y_L)
-#define REG_ADDR_BG2Y_H (REG_BASE + REG_OFFSET_BG2Y_H)
-#define REG_ADDR_BG3PA (REG_BASE + REG_OFFSET_BG3PA)
-#define REG_ADDR_BG3PB (REG_BASE + REG_OFFSET_BG3PB)
-#define REG_ADDR_BG3PC (REG_BASE + REG_OFFSET_BG3PC)
-#define REG_ADDR_BG3PD (REG_BASE + REG_OFFSET_BG3PD)
-#define REG_ADDR_BG3X (REG_BASE + REG_OFFSET_BG3X)
-#define REG_ADDR_BG3X_L (REG_BASE + REG_OFFSET_BG3X_L)
-#define REG_ADDR_BG3X_H (REG_BASE + REG_OFFSET_BG3X_H)
-#define REG_ADDR_BG3Y (REG_BASE + REG_OFFSET_BG3Y)
-#define REG_ADDR_BG3Y_L (REG_BASE + REG_OFFSET_BG3Y_L)
-#define REG_ADDR_BG3Y_H (REG_BASE + REG_OFFSET_BG3Y_H)
-#define REG_ADDR_WIN0H (REG_BASE + REG_OFFSET_WIN0H)
-#define REG_ADDR_WIN1H (REG_BASE + REG_OFFSET_WIN1H)
-#define REG_ADDR_WIN0V (REG_BASE + REG_OFFSET_WIN0V)
-#define REG_ADDR_WIN1V (REG_BASE + REG_OFFSET_WIN1V)
-#define REG_ADDR_WININ (REG_BASE + REG_OFFSET_WININ)
-#define REG_ADDR_WINOUT (REG_BASE + REG_OFFSET_WINOUT)
-#define REG_ADDR_MOSAIC (REG_BASE + REG_OFFSET_MOSAIC)
-#define REG_ADDR_BLDCNT (REG_BASE + REG_OFFSET_BLDCNT)
-#define REG_ADDR_BLDALPHA (REG_BASE + REG_OFFSET_BLDALPHA)
-#define REG_ADDR_BLDY (REG_BASE + REG_OFFSET_BLDY)
+#define REG_ADDR_DISPCNT (REG_BASE + REG_OFFSET_DISPCNT)
+#define REG_ADDR_DISPSTAT (REG_BASE + REG_OFFSET_DISPSTAT)
+#define REG_ADDR_VCOUNT (REG_BASE + REG_OFFSET_VCOUNT)
+#define REG_ADDR_BG0CNT (REG_BASE + REG_OFFSET_BG0CNT)
+#define REG_ADDR_BG1CNT (REG_BASE + REG_OFFSET_BG1CNT)
+#define REG_ADDR_BG2CNT (REG_BASE + REG_OFFSET_BG2CNT)
+#define REG_ADDR_BG3CNT (REG_BASE + REG_OFFSET_BG3CNT)
+#define REG_ADDR_BG0HOFS (REG_BASE + REG_OFFSET_BG0HOFS)
+#define REG_ADDR_BG0VOFS (REG_BASE + REG_OFFSET_BG0VOFS)
+#define REG_ADDR_BG1HOFS (REG_BASE + REG_OFFSET_BG1HOFS)
+#define REG_ADDR_BG1VOFS (REG_BASE + REG_OFFSET_BG1VOFS)
+#define REG_ADDR_BG2HOFS (REG_BASE + REG_OFFSET_BG2HOFS)
+#define REG_ADDR_BG2VOFS (REG_BASE + REG_OFFSET_BG2VOFS)
+#define REG_ADDR_BG3HOFS (REG_BASE + REG_OFFSET_BG3HOFS)
+#define REG_ADDR_BG3VOFS (REG_BASE + REG_OFFSET_BG3VOFS)
+#define REG_ADDR_BG2PA (REG_BASE + REG_OFFSET_BG2PA)
+#define REG_ADDR_BG2PB (REG_BASE + REG_OFFSET_BG2PB)
+#define REG_ADDR_BG2PC (REG_BASE + REG_OFFSET_BG2PC)
+#define REG_ADDR_BG2PD (REG_BASE + REG_OFFSET_BG2PD)
+#define REG_ADDR_BG2X (REG_BASE + REG_OFFSET_BG2X)
+#define REG_ADDR_BG2X_L (REG_BASE + REG_OFFSET_BG2X_L)
+#define REG_ADDR_BG2X_H (REG_BASE + REG_OFFSET_BG2X_H)
+#define REG_ADDR_BG2Y (REG_BASE + REG_OFFSET_BG2Y)
+#define REG_ADDR_BG2Y_L (REG_BASE + REG_OFFSET_BG2Y_L)
+#define REG_ADDR_BG2Y_H (REG_BASE + REG_OFFSET_BG2Y_H)
+#define REG_ADDR_BG3PA (REG_BASE + REG_OFFSET_BG3PA)
+#define REG_ADDR_BG3PB (REG_BASE + REG_OFFSET_BG3PB)
+#define REG_ADDR_BG3PC (REG_BASE + REG_OFFSET_BG3PC)
+#define REG_ADDR_BG3PD (REG_BASE + REG_OFFSET_BG3PD)
+#define REG_ADDR_BG3X (REG_BASE + REG_OFFSET_BG3X)
+#define REG_ADDR_BG3X_L (REG_BASE + REG_OFFSET_BG3X_L)
+#define REG_ADDR_BG3X_H (REG_BASE + REG_OFFSET_BG3X_H)
+#define REG_ADDR_BG3Y (REG_BASE + REG_OFFSET_BG3Y)
+#define REG_ADDR_BG3Y_L (REG_BASE + REG_OFFSET_BG3Y_L)
+#define REG_ADDR_BG3Y_H (REG_BASE + REG_OFFSET_BG3Y_H)
+#define REG_ADDR_WIN0H (REG_BASE + REG_OFFSET_WIN0H)
+#define REG_ADDR_WIN1H (REG_BASE + REG_OFFSET_WIN1H)
+#define REG_ADDR_WIN0V (REG_BASE + REG_OFFSET_WIN0V)
+#define REG_ADDR_WIN1V (REG_BASE + REG_OFFSET_WIN1V)
+#define REG_ADDR_WININ (REG_BASE + REG_OFFSET_WININ)
+#define REG_ADDR_WINOUT (REG_BASE + REG_OFFSET_WINOUT)
+#define REG_ADDR_MOSAIC (REG_BASE + REG_OFFSET_MOSAIC)
+#define REG_ADDR_BLDCNT (REG_BASE + REG_OFFSET_BLDCNT)
+#define REG_ADDR_BLDALPHA (REG_BASE + REG_OFFSET_BLDALPHA)
+#define REG_ADDR_BLDY (REG_BASE + REG_OFFSET_BLDY)
#define REG_ADDR_SOUND1CNT_L (REG_BASE + REG_OFFSET_SOUND1CNT_L)
-#define REG_ADDR_NR10 (REG_BASE + REG_OFFSET_NR10)
+#define REG_ADDR_NR10 (REG_BASE + REG_OFFSET_NR10)
#define REG_ADDR_SOUND1CNT_H (REG_BASE + REG_OFFSET_SOUND1CNT_H)
-#define REG_ADDR_NR11 (REG_BASE + REG_OFFSET_NR11)
-#define REG_ADDR_NR12 (REG_BASE + REG_OFFSET_NR12)
+#define REG_ADDR_NR11 (REG_BASE + REG_OFFSET_NR11)
+#define REG_ADDR_NR12 (REG_BASE + REG_OFFSET_NR12)
#define REG_ADDR_SOUND1CNT_X (REG_BASE + REG_OFFSET_SOUND1CNT_X)
-#define REG_ADDR_NR13 (REG_BASE + REG_OFFSET_NR13)
-#define REG_ADDR_NR14 (REG_BASE + REG_OFFSET_NR14)
+#define REG_ADDR_NR13 (REG_BASE + REG_OFFSET_NR13)
+#define REG_ADDR_NR14 (REG_BASE + REG_OFFSET_NR14)
#define REG_ADDR_SOUND2CNT_L (REG_BASE + REG_OFFSET_SOUND2CNT_L)
-#define REG_ADDR_NR21 (REG_BASE + REG_OFFSET_NR21)
-#define REG_ADDR_NR22 (REG_BASE + REG_OFFSET_NR22)
+#define REG_ADDR_NR21 (REG_BASE + REG_OFFSET_NR21)
+#define REG_ADDR_NR22 (REG_BASE + REG_OFFSET_NR22)
#define REG_ADDR_SOUND2CNT_H (REG_BASE + REG_OFFSET_SOUND2CNT_H)
-#define REG_ADDR_NR23 (REG_BASE + REG_OFFSET_NR23)
-#define REG_ADDR_NR24 (REG_BASE + REG_OFFSET_NR24)
+#define REG_ADDR_NR23 (REG_BASE + REG_OFFSET_NR23)
+#define REG_ADDR_NR24 (REG_BASE + REG_OFFSET_NR24)
#define REG_ADDR_SOUND3CNT_L (REG_BASE + REG_OFFSET_SOUND3CNT_L)
-#define REG_ADDR_NR30 (REG_BASE + REG_OFFSET_NR30)
+#define REG_ADDR_NR30 (REG_BASE + REG_OFFSET_NR30)
#define REG_ADDR_SOUND3CNT_H (REG_BASE + REG_OFFSET_SOUND3CNT_H)
-#define REG_ADDR_NR31 (REG_BASE + REG_OFFSET_NR31)
-#define REG_ADDR_NR32 (REG_BASE + REG_OFFSET_NR32)
+#define REG_ADDR_NR31 (REG_BASE + REG_OFFSET_NR31)
+#define REG_ADDR_NR32 (REG_BASE + REG_OFFSET_NR32)
#define REG_ADDR_SOUND3CNT_X (REG_BASE + REG_OFFSET_SOUND3CNT_X)
-#define REG_ADDR_NR33 (REG_BASE + REG_OFFSET_NR33)
-#define REG_ADDR_NR34 (REG_BASE + REG_OFFSET_NR34)
+#define REG_ADDR_NR33 (REG_BASE + REG_OFFSET_NR33)
+#define REG_ADDR_NR34 (REG_BASE + REG_OFFSET_NR34)
#define REG_ADDR_SOUND4CNT_L (REG_BASE + REG_OFFSET_SOUND4CNT_L)
-#define REG_ADDR_NR41 (REG_BASE + REG_OFFSET_NR41)
-#define REG_ADDR_NR42 (REG_BASE + REG_OFFSET_NR42)
+#define REG_ADDR_NR41 (REG_BASE + REG_OFFSET_NR41)
+#define REG_ADDR_NR42 (REG_BASE + REG_OFFSET_NR42)
#define REG_ADDR_SOUND4CNT_H (REG_BASE + REG_OFFSET_SOUND4CNT_H)
-#define REG_ADDR_NR43 (REG_BASE + REG_OFFSET_NR43)
-#define REG_ADDR_NR44 (REG_BASE + REG_OFFSET_NR44)
-#define REG_ADDR_SOUNDCNT_L (REG_BASE + REG_OFFSET_SOUNDCNT_L)
-#define REG_ADDR_NR50 (REG_BASE + REG_OFFSET_NR50)
-#define REG_ADDR_NR51 (REG_BASE + REG_OFFSET_NR51)
-#define REG_ADDR_SOUNDCNT_H (REG_BASE + REG_OFFSET_SOUNDCNT_H)
-#define REG_ADDR_SOUNDCNT_X (REG_BASE + REG_OFFSET_SOUNDCNT_X)
-#define REG_ADDR_NR52 (REG_BASE + REG_OFFSET_NR52)
-#define REG_ADDR_SOUNDBIAS (REG_BASE + REG_OFFSET_SOUNDBIAS)
+#define REG_ADDR_NR43 (REG_BASE + REG_OFFSET_NR43)
+#define REG_ADDR_NR44 (REG_BASE + REG_OFFSET_NR44)
+#define REG_ADDR_SOUNDCNT_L (REG_BASE + REG_OFFSET_SOUNDCNT_L)
+#define REG_ADDR_NR50 (REG_BASE + REG_OFFSET_NR50)
+#define REG_ADDR_NR51 (REG_BASE + REG_OFFSET_NR51)
+#define REG_ADDR_SOUNDCNT_H (REG_BASE + REG_OFFSET_SOUNDCNT_H)
+#define REG_ADDR_SOUNDCNT_X (REG_BASE + REG_OFFSET_SOUNDCNT_X)
+#define REG_ADDR_NR52 (REG_BASE + REG_OFFSET_NR52)
+#define REG_ADDR_SOUNDBIAS (REG_BASE + REG_OFFSET_SOUNDBIAS)
#define REG_ADDR_SOUNDBIAS_L (REG_BASE + REG_OFFSET_SOUNDBIAS_L)
#define REG_ADDR_SOUNDBIAS_H (REG_BASE + REG_OFFSET_SOUNDBIAS_H)
-#define REG_ADDR_WAVE_RAM0 (REG_BASE + REG_OFFSET_WAVE_RAM0)
-#define REG_ADDR_WAVE_RAM1 (REG_BASE + REG_OFFSET_WAVE_RAM1)
-#define REG_ADDR_WAVE_RAM2 (REG_BASE + REG_OFFSET_WAVE_RAM2)
-#define REG_ADDR_WAVE_RAM3 (REG_BASE + REG_OFFSET_WAVE_RAM3)
-#define REG_ADDR_FIFO_A (REG_BASE + REG_OFFSET_FIFO_A)
-#define REG_ADDR_FIFO_B (REG_BASE + REG_OFFSET_FIFO_B)
-
-#define REG_ADDR_DMA0 (REG_BASE + REG_OFFSET_DMA0)
-#define REG_ADDR_DMA0SAD (REG_BASE + REG_OFFSET_DMA0SAD)
-#define REG_ADDR_DMA0DAD (REG_BASE + REG_OFFSET_DMA0DAD)
-#define REG_ADDR_DMA0CNT (REG_BASE + REG_OFFSET_DMA0CNT)
-#define REG_ADDR_DMA0CNT_L (REG_BASE + REG_OFFSET_DMA0CNT_L)
-#define REG_ADDR_DMA0CNT_H (REG_BASE + REG_OFFSET_DMA0CNT_H)
-#define REG_ADDR_DMA1 (REG_BASE + REG_OFFSET_DMA1)
-#define REG_ADDR_DMA1SAD (REG_BASE + REG_OFFSET_DMA1SAD)
-#define REG_ADDR_DMA1DAD (REG_BASE + REG_OFFSET_DMA1DAD)
-#define REG_ADDR_DMA1CNT (REG_BASE + REG_OFFSET_DMA1CNT)
-#define REG_ADDR_DMA1CNT_L (REG_BASE + REG_OFFSET_DMA1CNT_L)
-#define REG_ADDR_DMA1CNT_H (REG_BASE + REG_OFFSET_DMA1CNT_H)
-#define REG_ADDR_DMA2 (REG_BASE + REG_OFFSET_DMA2)
-#define REG_ADDR_DMA2SAD (REG_BASE + REG_OFFSET_DMA2SAD)
-#define REG_ADDR_DMA2DAD (REG_BASE + REG_OFFSET_DMA2DAD)
-#define REG_ADDR_DMA2CNT (REG_BASE + REG_OFFSET_DMA2CNT)
-#define REG_ADDR_DMA2CNT_L (REG_BASE + REG_OFFSET_DMA2CNT_L)
-#define REG_ADDR_DMA2CNT_H (REG_BASE + REG_OFFSET_DMA2CNT_H)
-#define REG_ADDR_DMA3 (REG_BASE + REG_OFFSET_DMA3)
-#define REG_ADDR_DMA3SAD (REG_BASE + REG_OFFSET_DMA3SAD)
-#define REG_ADDR_DMA3DAD (REG_BASE + REG_OFFSET_DMA3DAD)
-#define REG_ADDR_DMA3CNT (REG_BASE + REG_OFFSET_DMA3CNT)
-#define REG_ADDR_DMA3CNT_L (REG_BASE + REG_OFFSET_DMA3CNT_L)
-#define REG_ADDR_DMA3CNT_H (REG_BASE + REG_OFFSET_DMA3CNT_H)
-
-#define REG_ADDR_TMCNT (REG_BASE + REG_OFFSET_TMCNT)
-#define REG_ADDR_TMCNT_L (REG_BASE + REG_OFFSET_TMCNT_L)
-#define REG_ADDR_TMCNT_H (REG_BASE + REG_OFFSET_TMCNT_H)
-#define REG_ADDR_TM0CNT (REG_BASE + REG_OFFSET_TM0CNT)
-#define REG_ADDR_TM0CNT_L (REG_BASE + REG_OFFSET_TM0CNT_L)
-#define REG_ADDR_TM0CNT_H (REG_BASE + REG_OFFSET_TM0CNT_H)
-#define REG_ADDR_TM1CNT (REG_BASE + REG_OFFSET_TM1CNT)
-#define REG_ADDR_TM1CNT_L (REG_BASE + REG_OFFSET_TM1CNT_L)
-#define REG_ADDR_TM1CNT_H (REG_BASE + REG_OFFSET_TM1CNT_H)
-#define REG_ADDR_TM2CNT (REG_BASE + REG_OFFSET_TM2CNT)
-#define REG_ADDR_TM2CNT_L (REG_BASE + REG_OFFSET_TM2CNT_L)
-#define REG_ADDR_TM2CNT_H (REG_BASE + REG_OFFSET_TM2CNT_H)
-#define REG_ADDR_TM3CNT (REG_BASE + REG_OFFSET_TM3CNT)
-#define REG_ADDR_TM3CNT_L (REG_BASE + REG_OFFSET_TM3CNT_L)
-#define REG_ADDR_TM3CNT_H (REG_BASE + REG_OFFSET_TM3CNT_H)
-
-#define REG_ADDR_SIOCNT (REG_BASE + REG_OFFSET_SIOCNT)
-#define REG_ADDR_SIODATA8 (REG_BASE + REG_OFFSET_SIODATA8)
-#define REG_ADDR_SIODATA32 (REG_BASE + REG_OFFSET_SIODATA32)
+#define REG_ADDR_WAVE_RAM0 (REG_BASE + REG_OFFSET_WAVE_RAM0)
+#define REG_ADDR_WAVE_RAM1 (REG_BASE + REG_OFFSET_WAVE_RAM1)
+#define REG_ADDR_WAVE_RAM2 (REG_BASE + REG_OFFSET_WAVE_RAM2)
+#define REG_ADDR_WAVE_RAM3 (REG_BASE + REG_OFFSET_WAVE_RAM3)
+#define REG_ADDR_FIFO_A (REG_BASE + REG_OFFSET_FIFO_A)
+#define REG_ADDR_FIFO_B (REG_BASE + REG_OFFSET_FIFO_B)
+
+#define REG_ADDR_DMA0 (REG_BASE + REG_OFFSET_DMA0)
+#define REG_ADDR_DMA0SAD (REG_BASE + REG_OFFSET_DMA0SAD)
+#define REG_ADDR_DMA0DAD (REG_BASE + REG_OFFSET_DMA0DAD)
+#define REG_ADDR_DMA0CNT (REG_BASE + REG_OFFSET_DMA0CNT)
+#define REG_ADDR_DMA0CNT_L (REG_BASE + REG_OFFSET_DMA0CNT_L)
+#define REG_ADDR_DMA0CNT_H (REG_BASE + REG_OFFSET_DMA0CNT_H)
+#define REG_ADDR_DMA1 (REG_BASE + REG_OFFSET_DMA1)
+#define REG_ADDR_DMA1SAD (REG_BASE + REG_OFFSET_DMA1SAD)
+#define REG_ADDR_DMA1DAD (REG_BASE + REG_OFFSET_DMA1DAD)
+#define REG_ADDR_DMA1CNT (REG_BASE + REG_OFFSET_DMA1CNT)
+#define REG_ADDR_DMA1CNT_L (REG_BASE + REG_OFFSET_DMA1CNT_L)
+#define REG_ADDR_DMA1CNT_H (REG_BASE + REG_OFFSET_DMA1CNT_H)
+#define REG_ADDR_DMA2 (REG_BASE + REG_OFFSET_DMA2)
+#define REG_ADDR_DMA2SAD (REG_BASE + REG_OFFSET_DMA2SAD)
+#define REG_ADDR_DMA2DAD (REG_BASE + REG_OFFSET_DMA2DAD)
+#define REG_ADDR_DMA2CNT (REG_BASE + REG_OFFSET_DMA2CNT)
+#define REG_ADDR_DMA2CNT_L (REG_BASE + REG_OFFSET_DMA2CNT_L)
+#define REG_ADDR_DMA2CNT_H (REG_BASE + REG_OFFSET_DMA2CNT_H)
+#define REG_ADDR_DMA3 (REG_BASE + REG_OFFSET_DMA3)
+#define REG_ADDR_DMA3SAD (REG_BASE + REG_OFFSET_DMA3SAD)
+#define REG_ADDR_DMA3DAD (REG_BASE + REG_OFFSET_DMA3DAD)
+#define REG_ADDR_DMA3CNT (REG_BASE + REG_OFFSET_DMA3CNT)
+#define REG_ADDR_DMA3CNT_L (REG_BASE + REG_OFFSET_DMA3CNT_L)
+#define REG_ADDR_DMA3CNT_H (REG_BASE + REG_OFFSET_DMA3CNT_H)
+
+#define REG_ADDR_TMCNT (REG_BASE + REG_OFFSET_TMCNT)
+#define REG_ADDR_TMCNT_L (REG_BASE + REG_OFFSET_TMCNT_L)
+#define REG_ADDR_TMCNT_H (REG_BASE + REG_OFFSET_TMCNT_H)
+#define REG_ADDR_TM0CNT (REG_BASE + REG_OFFSET_TM0CNT)
+#define REG_ADDR_TM0CNT_L (REG_BASE + REG_OFFSET_TM0CNT_L)
+#define REG_ADDR_TM0CNT_H (REG_BASE + REG_OFFSET_TM0CNT_H)
+#define REG_ADDR_TM1CNT (REG_BASE + REG_OFFSET_TM1CNT)
+#define REG_ADDR_TM1CNT_L (REG_BASE + REG_OFFSET_TM1CNT_L)
+#define REG_ADDR_TM1CNT_H (REG_BASE + REG_OFFSET_TM1CNT_H)
+#define REG_ADDR_TM2CNT (REG_BASE + REG_OFFSET_TM2CNT)
+#define REG_ADDR_TM2CNT_L (REG_BASE + REG_OFFSET_TM2CNT_L)
+#define REG_ADDR_TM2CNT_H (REG_BASE + REG_OFFSET_TM2CNT_H)
+#define REG_ADDR_TM3CNT (REG_BASE + REG_OFFSET_TM3CNT)
+#define REG_ADDR_TM3CNT_L (REG_BASE + REG_OFFSET_TM3CNT_L)
+#define REG_ADDR_TM3CNT_H (REG_BASE + REG_OFFSET_TM3CNT_H)
+
+#define REG_ADDR_SIOCNT (REG_BASE + REG_OFFSET_SIOCNT)
+#define REG_ADDR_SIODATA8 (REG_BASE + REG_OFFSET_SIODATA8)
+#define REG_ADDR_SIODATA32 (REG_BASE + REG_OFFSET_SIODATA32)
#define REG_ADDR_SIOMLT_SEND (REG_BASE + REG_OFFSET_SIOMLT_SEND)
#define REG_ADDR_SIOMLT_RECV (REG_BASE + REG_OFFSET_SIOMLT_RECV)
-#define REG_ADDR_SIOMULTI0 (REG_BASE + REG_OFFSET_SIOMULTI0)
-#define REG_ADDR_SIOMULTI1 (REG_BASE + REG_OFFSET_SIOMULTI1)
-#define REG_ADDR_SIOMULTI2 (REG_BASE + REG_OFFSET_SIOMULTI2)
-#define REG_ADDR_SIOMULTI3 (REG_BASE + REG_OFFSET_SIOMULTI3)
-
-#define REG_ADDR_KEYINPUT (REG_BASE + REG_OFFSET_KEYINPUT)
-#define REG_ADDR_KEYCNT (REG_BASE + REG_OFFSET_KEYCNT)
-
-#define REG_ADDR_RCNT (REG_BASE + REG_OFFSET_RCNT)
-
-#define REG_ADDR_JOYCNT (REG_BASE + REG_OFFSET_JOYCNT)
-#define REG_ADDR_JOYSTAT (REG_BASE + REG_OFFSET_JOYSTAT)
-#define REG_ADDR_JOY_RECV (REG_BASE + REG_OFFSET_JOY_RECV)
-#define REG_ADDR_JOY_RECV_L (REG_BASE + REG_OFFSET_JOY_RECV_L)
-#define REG_ADDR_JOY_RECV_H (REG_BASE + REG_OFFSET_JOY_RECV_H)
-#define REG_ADDR_JOY_TRANS (REG_BASE + REG_OFFSET_JOY_TRANS)
+#define REG_ADDR_SIOMULTI0 (REG_BASE + REG_OFFSET_SIOMULTI0)
+#define REG_ADDR_SIOMULTI1 (REG_BASE + REG_OFFSET_SIOMULTI1)
+#define REG_ADDR_SIOMULTI2 (REG_BASE + REG_OFFSET_SIOMULTI2)
+#define REG_ADDR_SIOMULTI3 (REG_BASE + REG_OFFSET_SIOMULTI3)
+
+#define REG_ADDR_KEYINPUT (REG_BASE + REG_OFFSET_KEYINPUT)
+#define REG_ADDR_KEYCNT (REG_BASE + REG_OFFSET_KEYCNT)
+
+#define REG_ADDR_RCNT (REG_BASE + REG_OFFSET_RCNT)
+
+#define REG_ADDR_JOYCNT (REG_BASE + REG_OFFSET_JOYCNT)
+#define REG_ADDR_JOYSTAT (REG_BASE + REG_OFFSET_JOYSTAT)
+#define REG_ADDR_JOY_RECV (REG_BASE + REG_OFFSET_JOY_RECV)
+#define REG_ADDR_JOY_RECV_L (REG_BASE + REG_OFFSET_JOY_RECV_L)
+#define REG_ADDR_JOY_RECV_H (REG_BASE + REG_OFFSET_JOY_RECV_H)
+#define REG_ADDR_JOY_TRANS (REG_BASE + REG_OFFSET_JOY_TRANS)
#define REG_ADDR_JOY_TRANS_L (REG_BASE + REG_OFFSET_JOY_TRANS_L)
#define REG_ADDR_JOY_TRANS_H (REG_BASE + REG_OFFSET_JOY_TRANS_H)
-#define REG_ADDR_IME (REG_BASE + REG_OFFSET_IME)
-#define REG_ADDR_IE (REG_BASE + REG_OFFSET_IE)
-#define REG_ADDR_IF (REG_BASE + REG_OFFSET_IF)
+#define REG_ADDR_IME (REG_BASE + REG_OFFSET_IME)
+#define REG_ADDR_IE (REG_BASE + REG_OFFSET_IE)
+#define REG_ADDR_IF (REG_BASE + REG_OFFSET_IF)
-#define REG_ADDR_WAITCNT (REG_BASE + REG_OFFSET_WAITCNT)
+#define REG_ADDR_WAITCNT (REG_BASE + REG_OFFSET_WAITCNT)
// I/O registers
-#define REG_DISPCNT (*(vu16 *)REG_ADDR_DISPCNT)
-#define REG_DISPSTAT (*(vu16 *)REG_ADDR_DISPSTAT)
-#define REG_VCOUNT (*(vu16 *)REG_ADDR_VCOUNT)
-#define REG_BG0CNT (*(vu16 *)REG_ADDR_BG0CNT)
-#define REG_BG1CNT (*(vu16 *)REG_ADDR_BG1CNT)
-#define REG_BG2CNT (*(vu16 *)REG_ADDR_BG2CNT)
-#define REG_BG3CNT (*(vu16 *)REG_ADDR_BG3CNT)
-#define REG_BG0HOFS (*(vu16 *)REG_ADDR_BG0HOFS)
-#define REG_BG0VOFS (*(vu16 *)REG_ADDR_BG0VOFS)
-#define REG_BG1HOFS (*(vu16 *)REG_ADDR_BG1HOFS)
-#define REG_BG1VOFS (*(vu16 *)REG_ADDR_BG1VOFS)
-#define REG_BG2HOFS (*(vu16 *)REG_ADDR_BG2HOFS)
-#define REG_BG2VOFS (*(vu16 *)REG_ADDR_BG2VOFS)
-#define REG_BG3HOFS (*(vu16 *)REG_ADDR_BG3HOFS)
-#define REG_BG3VOFS (*(vu16 *)REG_ADDR_BG3VOFS)
-#define REG_BG2PA (*(vu16 *)REG_ADDR_BG2PA)
-#define REG_BG2PB (*(vu16 *)REG_ADDR_BG2PB)
-#define REG_BG2PC (*(vu16 *)REG_ADDR_BG2PC)
-#define REG_BG2PD (*(vu16 *)REG_ADDR_BG2PD)
-#define REG_BG2X (*(vu32 *)REG_ADDR_BG2X)
-#define REG_BG2X_L (*(vu16 *)REG_ADDR_BG2X_L)
-#define REG_BG2X_H (*(vu16 *)REG_ADDR_BG2X_H)
-#define REG_BG2Y (*(vu32 *)REG_ADDR_BG2Y)
-#define REG_BG2Y_L (*(vu16 *)REG_ADDR_BG2Y_L)
-#define REG_BG2Y_H (*(vu16 *)REG_ADDR_BG2Y_H)
-#define REG_BG3PA (*(vu16 *)REG_ADDR_BG3PA)
-#define REG_BG3PB (*(vu16 *)REG_ADDR_BG3PB)
-#define REG_BG3PC (*(vu16 *)REG_ADDR_BG3PC)
-#define REG_BG3PD (*(vu16 *)REG_ADDR_BG3PD)
-#define REG_BG3X (*(vu32 *)REG_ADDR_BG3X)
-#define REG_BG3X_L (*(vu16 *)REG_ADDR_BG3X_L)
-#define REG_BG3X_H (*(vu16 *)REG_ADDR_BG3X_H)
-#define REG_BG3Y (*(vu32 *)REG_ADDR_BG3Y)
-#define REG_BG3Y_L (*(vu16 *)REG_ADDR_BG3Y_L)
-#define REG_BG3Y_H (*(vu16 *)REG_ADDR_BG3Y_H)
-#define REG_WIN0H (*(vu16 *)REG_ADDR_WIN0H)
-#define REG_WIN1H (*(vu16 *)REG_ADDR_WIN1H)
-#define REG_WIN0V (*(vu16 *)REG_ADDR_WIN0V)
-#define REG_WIN1V (*(vu16 *)REG_ADDR_WIN1V)
-#define REG_WININ (*(vu16 *)REG_ADDR_WININ)
-#define REG_WINOUT (*(vu16 *)REG_ADDR_WINOUT)
-#define REG_MOSAIC (*(vu16 *)REG_ADDR_MOSAIC)
-#define REG_BLDCNT (*(vu16 *)REG_ADDR_BLDCNT)
-#define REG_BLDALPHA (*(vu16 *)REG_ADDR_BLDALPHA)
-#define REG_BLDY (*(vu16 *)REG_ADDR_BLDY)
-
-#define REG_SOUND1CNT_L (*(vu16 *)REG_ADDR_SOUND1CNT_L)
-#define REG_NR10 (*(vu8 *)REG_ADDR_NR10)
-#define REG_SOUND1CNT_H (*(vu16 *)REG_ADDR_SOUND1CNT_H)
-#define REG_NR11 (*(vu8 *)REG_ADDR_NR11)
-#define REG_NR12 (*(vu8 *)REG_ADDR_NR12)
-#define REG_SOUND1CNT_X (*(vu16 *)REG_ADDR_SOUND1CNT_X)
-#define REG_NR13 (*(vu8 *)REG_ADDR_NR13)
-#define REG_NR14 (*(vu8 *)REG_ADDR_NR14)
-#define REG_SOUND2CNT_L (*(vu16 *)REG_ADDR_SOUND2CNT_L)
-#define REG_NR21 (*(vu8 *)REG_ADDR_NR21)
-#define REG_NR22 (*(vu8 *)REG_ADDR_NR22)
-#define REG_SOUND2CNT_H (*(vu16 *)REG_ADDR_SOUND2CNT_H)
-#define REG_NR23 (*(vu8 *)REG_ADDR_NR23)
-#define REG_NR24 (*(vu8 *)REG_ADDR_NR24)
-#define REG_SOUND3CNT_L (*(vu16 *)REG_ADDR_SOUND3CNT_L)
-#define REG_NR30 (*(vu8 *)REG_ADDR_NR30)
-#define REG_SOUND3CNT_H (*(vu16 *)REG_ADDR_SOUND3CNT_H)
-#define REG_NR31 (*(vu8 *)REG_ADDR_NR31)
-#define REG_NR32 (*(vu8 *)REG_ADDR_NR32)
-#define REG_SOUND3CNT_X (*(vu16 *)REG_ADDR_SOUND3CNT_X)
-#define REG_NR33 (*(vu8 *)REG_ADDR_NR33)
-#define REG_NR34 (*(vu8 *)REG_ADDR_NR34)
-#define REG_SOUND4CNT_L (*(vu16 *)REG_ADDR_SOUND4CNT_L)
-#define REG_NR41 (*(vu8 *)REG_ADDR_NR41)
-#define REG_NR42 (*(vu8 *)REG_ADDR_NR42)
-#define REG_SOUND4CNT_H (*(vu16 *)REG_ADDR_SOUND4CNT_H)
-#define REG_NR43 (*(vu8 *)REG_ADDR_NR43)
-#define REG_NR44 (*(vu8 *)REG_ADDR_NR44)
-#define REG_SOUNDCNT_L (*(vu16 *)REG_ADDR_SOUNDCNT_L)
-#define REG_NR50 (*(vu8 *)REG_ADDR_NR50)
-#define REG_NR51 (*(vu8 *)REG_ADDR_NR51)
-#define REG_SOUNDCNT_H (*(vu16 *)REG_ADDR_SOUNDCNT_H)
-#define REG_SOUNDCNT_X (*(vu16 *)REG_ADDR_SOUNDCNT_X)
-#define REG_NR52 (*(vu8 *)REG_ADDR_NR52)
-#define REG_SOUNDBIAS (*(vu16 *)REG_ADDR_SOUNDBIAS)
-#define REG_SOUNDBIAS_L (*(vu8 *)REG_ADDR_SOUNDBIAS_L)
-#define REG_SOUNDBIAS_H (*(vu8 *)REG_ADDR_SOUNDBIAS_H)
-#define REG_WAVE_RAM0 (*(vu32 *)REG_ADDR_WAVE_RAM0)
-#define REG_WAVE_RAM1 (*(vu32 *)REG_ADDR_WAVE_RAM1)
-#define REG_WAVE_RAM2 (*(vu32 *)REG_ADDR_WAVE_RAM2)
-#define REG_WAVE_RAM3 (*(vu32 *)REG_ADDR_WAVE_RAM3)
-#define REG_FIFO_A (*(vu32 *)REG_ADDR_FIFO_A)
-#define REG_FIFO_B (*(vu32 *)REG_ADDR_FIFO_B)
-
-#define REG_DMA0SAD (*(vu32 *)REG_ADDR_DMA0SAD)
-#define REG_DMA0DAD (*(vu32 *)REG_ADDR_DMA0DAD)
-#define REG_DMA0CNT (*(vu32 *)REG_ADDR_DMA0CNT)
-#define REG_DMA0CNT_L (*(vu16 *)REG_ADDR_DMA0CNT_L)
-#define REG_DMA0CNT_H (*(vu16 *)REG_ADDR_DMA0CNT_H)
-
-#define REG_DMA1SAD (*(vu32 *)REG_ADDR_DMA1SAD)
-#define REG_DMA1DAD (*(vu32 *)REG_ADDR_DMA1DAD)
-#define REG_DMA1CNT (*(vu32 *)REG_ADDR_DMA1CNT)
-#define REG_DMA1CNT_L (*(vu16 *)REG_ADDR_DMA1CNT_L)
-#define REG_DMA1CNT_H (*(vu16 *)REG_ADDR_DMA1CNT_H)
-
-#define REG_DMA2SAD (*(vu32 *)REG_ADDR_DMA2SAD)
-#define REG_DMA2DAD (*(vu32 *)REG_ADDR_DMA2DAD)
-#define REG_DMA2CNT (*(vu32 *)REG_ADDR_DMA2CNT)
-#define REG_DMA2CNT_L (*(vu16 *)REG_ADDR_DMA2CNT_L)
-#define REG_DMA2CNT_H (*(vu16 *)REG_ADDR_DMA2CNT_H)
-
-#define REG_DMA3SAD (*(vu32 *)REG_ADDR_DMA3SAD)
-#define REG_DMA3DAD (*(vu32 *)REG_ADDR_DMA3DAD)
-#define REG_DMA3CNT (*(vu32 *)REG_ADDR_DMA3CNT)
-#define REG_DMA3CNT_L (*(vu16 *)REG_ADDR_DMA3CNT_L)
-#define REG_DMA3CNT_H (*(vu16 *)REG_ADDR_DMA3CNT_H)
-
-#define REG_TMCNT(n) (*(vu32 *)(REG_ADDR_TMCNT + ((n) * 4)))
-#define REG_TMCNT_L(n) (*(vu16 *)(REG_ADDR_TMCNT_L + ((n) * 4)))
-#define REG_TMCNT_H(n) (*(vu16 *)(REG_ADDR_TMCNT_H + ((n) * 4)))
-#define REG_TM0CNT (*(vu32 *)REG_ADDR_TM0CNT)
-#define REG_TM0CNT_L (*(vu16 *)REG_ADDR_TM0CNT_L)
-#define REG_TM0CNT_H (*(vu16 *)REG_ADDR_TM0CNT_H)
-#define REG_TM1CNT (*(vu32 *)REG_ADDR_TM1CNT)
-#define REG_TM1CNT_L (*(vu16 *)REG_ADDR_TM1CNT_L)
-#define REG_TM1CNT_H (*(vu16 *)REG_ADDR_TM1CNT_H)
-#define REG_TM2CNT (*(vu32 *)REG_ADDR_TM2CNT)
-#define REG_TM2CNT_L (*(vu16 *)REG_ADDR_TM2CNT_L)
-#define REG_TM2CNT_H (*(vu16 *)REG_ADDR_TM2CNT_H)
-#define REG_TM3CNT (*(vu32 *)REG_ADDR_TM3CNT)
-#define REG_TM3CNT_L (*(vu16 *)REG_ADDR_TM3CNT_L)
-#define REG_TM3CNT_H (*(vu16 *)REG_ADDR_TM3CNT_H)
-
-#define REG_SIOCNT (*(vu16 *)REG_ADDR_SIOCNT)
-#define REG_SIODATA8 (*(vu16 *)REG_ADDR_SIODATA8)
-#define REG_SIODATA32 (*(vu32 *)REG_ADDR_SIODATA32)
-#define REG_SIOMLT_SEND (*(vu16 *)REG_ADDR_SIOMLT_SEND)
-#define REG_SIOMLT_RECV (*(vu64 *)REG_ADDR_SIOMLT_RECV)
-#define REG_SIOMULTI0 (*(vu16 *)REG_ADDR_SIOMULTI0)
-#define REG_SIOMULTI1 (*(vu16 *)REG_ADDR_SIOMULTI1)
-#define REG_SIOMULTI2 (*(vu16 *)REG_ADDR_SIOMULTI2)
-#define REG_SIOMULTI3 (*(vu16 *)REG_ADDR_SIOMULTI3)
-
-#define REG_KEYINPUT (*(vu16 *)REG_ADDR_KEYINPUT)
-#define REG_KEYCNT (*(vu16 *)REG_ADDR_KEYCNT)
-
-#define REG_RCNT (*(vu16 *)REG_ADDR_RCNT)
-
-#define REG_IME (*(vu16 *)REG_ADDR_IME)
-#define REG_IE (*(vu16 *)REG_ADDR_IE)
-#define REG_IF (*(vu16 *)REG_ADDR_IF)
-
-#define REG_WAITCNT (*(vu16 *)REG_ADDR_WAITCNT)
+#define REG_DISPCNT (*(vu16*)REG_ADDR_DISPCNT)
+#define REG_DISPSTAT (*(vu16*)REG_ADDR_DISPSTAT)
+#define REG_VCOUNT (*(vu16*)REG_ADDR_VCOUNT)
+#define REG_BG0CNT (*(vu16*)REG_ADDR_BG0CNT)
+#define REG_BG1CNT (*(vu16*)REG_ADDR_BG1CNT)
+#define REG_BG2CNT (*(vu16*)REG_ADDR_BG2CNT)
+#define REG_BG3CNT (*(vu16*)REG_ADDR_BG3CNT)
+#define REG_BG0HOFS (*(vu16*)REG_ADDR_BG0HOFS)
+#define REG_BG0VOFS (*(vu16*)REG_ADDR_BG0VOFS)
+#define REG_BG1HOFS (*(vu16*)REG_ADDR_BG1HOFS)
+#define REG_BG1VOFS (*(vu16*)REG_ADDR_BG1VOFS)
+#define REG_BG2HOFS (*(vu16*)REG_ADDR_BG2HOFS)
+#define REG_BG2VOFS (*(vu16*)REG_ADDR_BG2VOFS)
+#define REG_BG3HOFS (*(vu16*)REG_ADDR_BG3HOFS)
+#define REG_BG3VOFS (*(vu16*)REG_ADDR_BG3VOFS)
+#define REG_BG2PA (*(vu16*)REG_ADDR_BG2PA)
+#define REG_BG2PB (*(vu16*)REG_ADDR_BG2PB)
+#define REG_BG2PC (*(vu16*)REG_ADDR_BG2PC)
+#define REG_BG2PD (*(vu16*)REG_ADDR_BG2PD)
+#define REG_BG2X (*(vu32*)REG_ADDR_BG2X)
+#define REG_BG2X_L (*(vu16*)REG_ADDR_BG2X_L)
+#define REG_BG2X_H (*(vu16*)REG_ADDR_BG2X_H)
+#define REG_BG2Y (*(vu32*)REG_ADDR_BG2Y)
+#define REG_BG2Y_L (*(vu16*)REG_ADDR_BG2Y_L)
+#define REG_BG2Y_H (*(vu16*)REG_ADDR_BG2Y_H)
+#define REG_BG3PA (*(vu16*)REG_ADDR_BG3PA)
+#define REG_BG3PB (*(vu16*)REG_ADDR_BG3PB)
+#define REG_BG3PC (*(vu16*)REG_ADDR_BG3PC)
+#define REG_BG3PD (*(vu16*)REG_ADDR_BG3PD)
+#define REG_BG3X (*(vu32*)REG_ADDR_BG3X)
+#define REG_BG3X_L (*(vu16*)REG_ADDR_BG3X_L)
+#define REG_BG3X_H (*(vu16*)REG_ADDR_BG3X_H)
+#define REG_BG3Y (*(vu32*)REG_ADDR_BG3Y)
+#define REG_BG3Y_L (*(vu16*)REG_ADDR_BG3Y_L)
+#define REG_BG3Y_H (*(vu16*)REG_ADDR_BG3Y_H)
+#define REG_WIN0H (*(vu16*)REG_ADDR_WIN0H)
+#define REG_WIN1H (*(vu16*)REG_ADDR_WIN1H)
+#define REG_WIN0V (*(vu16*)REG_ADDR_WIN0V)
+#define REG_WIN1V (*(vu16*)REG_ADDR_WIN1V)
+#define REG_WININ (*(vu16*)REG_ADDR_WININ)
+#define REG_WINOUT (*(vu16*)REG_ADDR_WINOUT)
+#define REG_MOSAIC (*(vu16*)REG_ADDR_MOSAIC)
+#define REG_BLDCNT (*(vu16*)REG_ADDR_BLDCNT)
+#define REG_BLDALPHA (*(vu16*)REG_ADDR_BLDALPHA)
+#define REG_BLDY (*(vu16*)REG_ADDR_BLDY)
+
+#define REG_SOUND1CNT_L (*(vu16*)REG_ADDR_SOUND1CNT_L)
+#define REG_NR10 (*(vu8*)REG_ADDR_NR10)
+#define REG_SOUND1CNT_H (*(vu16*)REG_ADDR_SOUND1CNT_H)
+#define REG_NR11 (*(vu8*)REG_ADDR_NR11)
+#define REG_NR12 (*(vu8*)REG_ADDR_NR12)
+#define REG_SOUND1CNT_X (*(vu16*)REG_ADDR_SOUND1CNT_X)
+#define REG_NR13 (*(vu8*)REG_ADDR_NR13)
+#define REG_NR14 (*(vu8*)REG_ADDR_NR14)
+#define REG_SOUND2CNT_L (*(vu16*)REG_ADDR_SOUND2CNT_L)
+#define REG_NR21 (*(vu8*)REG_ADDR_NR21)
+#define REG_NR22 (*(vu8*)REG_ADDR_NR22)
+#define REG_SOUND2CNT_H (*(vu16*)REG_ADDR_SOUND2CNT_H)
+#define REG_NR23 (*(vu8*)REG_ADDR_NR23)
+#define REG_NR24 (*(vu8*)REG_ADDR_NR24)
+#define REG_SOUND3CNT_L (*(vu16*)REG_ADDR_SOUND3CNT_L)
+#define REG_NR30 (*(vu8*)REG_ADDR_NR30)
+#define REG_SOUND3CNT_H (*(vu16*)REG_ADDR_SOUND3CNT_H)
+#define REG_NR31 (*(vu8*)REG_ADDR_NR31)
+#define REG_NR32 (*(vu8*)REG_ADDR_NR32)
+#define REG_SOUND3CNT_X (*(vu16*)REG_ADDR_SOUND3CNT_X)
+#define REG_NR33 (*(vu8*)REG_ADDR_NR33)
+#define REG_NR34 (*(vu8*)REG_ADDR_NR34)
+#define REG_SOUND4CNT_L (*(vu16*)REG_ADDR_SOUND4CNT_L)
+#define REG_NR41 (*(vu8*)REG_ADDR_NR41)
+#define REG_NR42 (*(vu8*)REG_ADDR_NR42)
+#define REG_SOUND4CNT_H (*(vu16*)REG_ADDR_SOUND4CNT_H)
+#define REG_NR43 (*(vu8*)REG_ADDR_NR43)
+#define REG_NR44 (*(vu8*)REG_ADDR_NR44)
+#define REG_SOUNDCNT_L (*(vu16*)REG_ADDR_SOUNDCNT_L)
+#define REG_NR50 (*(vu8*)REG_ADDR_NR50)
+#define REG_NR51 (*(vu8*)REG_ADDR_NR51)
+#define REG_SOUNDCNT_H (*(vu16*)REG_ADDR_SOUNDCNT_H)
+#define REG_SOUNDCNT_X (*(vu16*)REG_ADDR_SOUNDCNT_X)
+#define REG_NR52 (*(vu8*)REG_ADDR_NR52)
+#define REG_SOUNDBIAS (*(vu16*)REG_ADDR_SOUNDBIAS)
+#define REG_SOUNDBIAS_L (*(vu8*)REG_ADDR_SOUNDBIAS_L)
+#define REG_SOUNDBIAS_H (*(vu8*)REG_ADDR_SOUNDBIAS_H)
+#define REG_WAVE_RAM0 (*(vu32*)REG_ADDR_WAVE_RAM0)
+#define REG_WAVE_RAM1 (*(vu32*)REG_ADDR_WAVE_RAM1)
+#define REG_WAVE_RAM2 (*(vu32*)REG_ADDR_WAVE_RAM2)
+#define REG_WAVE_RAM3 (*(vu32*)REG_ADDR_WAVE_RAM3)
+#define REG_FIFO_A (*(vu32*)REG_ADDR_FIFO_A)
+#define REG_FIFO_B (*(vu32*)REG_ADDR_FIFO_B)
+
+#define REG_DMA0SAD (*(vu32*)REG_ADDR_DMA0SAD)
+#define REG_DMA0DAD (*(vu32*)REG_ADDR_DMA0DAD)
+#define REG_DMA0CNT (*(vu32*)REG_ADDR_DMA0CNT)
+#define REG_DMA0CNT_L (*(vu16*)REG_ADDR_DMA0CNT_L)
+#define REG_DMA0CNT_H (*(vu16*)REG_ADDR_DMA0CNT_H)
+
+#define REG_DMA1SAD (*(vu32*)REG_ADDR_DMA1SAD)
+#define REG_DMA1DAD (*(vu32*)REG_ADDR_DMA1DAD)
+#define REG_DMA1CNT (*(vu32*)REG_ADDR_DMA1CNT)
+#define REG_DMA1CNT_L (*(vu16*)REG_ADDR_DMA1CNT_L)
+#define REG_DMA1CNT_H (*(vu16*)REG_ADDR_DMA1CNT_H)
+
+#define REG_DMA2SAD (*(vu32*)REG_ADDR_DMA2SAD)
+#define REG_DMA2DAD (*(vu32*)REG_ADDR_DMA2DAD)
+#define REG_DMA2CNT (*(vu32*)REG_ADDR_DMA2CNT)
+#define REG_DMA2CNT_L (*(vu16*)REG_ADDR_DMA2CNT_L)
+#define REG_DMA2CNT_H (*(vu16*)REG_ADDR_DMA2CNT_H)
+
+#define REG_DMA3SAD (*(vu32*)REG_ADDR_DMA3SAD)
+#define REG_DMA3DAD (*(vu32*)REG_ADDR_DMA3DAD)
+#define REG_DMA3CNT (*(vu32*)REG_ADDR_DMA3CNT)
+#define REG_DMA3CNT_L (*(vu16*)REG_ADDR_DMA3CNT_L)
+#define REG_DMA3CNT_H (*(vu16*)REG_ADDR_DMA3CNT_H)
+
+#define REG_TMCNT(n) (*(vu32*)(REG_ADDR_TMCNT + ((n)*4)))
+#define REG_TMCNT_L(n) (*(vu16*)(REG_ADDR_TMCNT_L + ((n)*4)))
+#define REG_TMCNT_H(n) (*(vu16*)(REG_ADDR_TMCNT_H + ((n)*4)))
+#define REG_TM0CNT (*(vu32*)REG_ADDR_TM0CNT)
+#define REG_TM0CNT_L (*(vu16*)REG_ADDR_TM0CNT_L)
+#define REG_TM0CNT_H (*(vu16*)REG_ADDR_TM0CNT_H)
+#define REG_TM1CNT (*(vu32*)REG_ADDR_TM1CNT)
+#define REG_TM1CNT_L (*(vu16*)REG_ADDR_TM1CNT_L)
+#define REG_TM1CNT_H (*(vu16*)REG_ADDR_TM1CNT_H)
+#define REG_TM2CNT (*(vu32*)REG_ADDR_TM2CNT)
+#define REG_TM2CNT_L (*(vu16*)REG_ADDR_TM2CNT_L)
+#define REG_TM2CNT_H (*(vu16*)REG_ADDR_TM2CNT_H)
+#define REG_TM3CNT (*(vu32*)REG_ADDR_TM3CNT)
+#define REG_TM3CNT_L (*(vu16*)REG_ADDR_TM3CNT_L)
+#define REG_TM3CNT_H (*(vu16*)REG_ADDR_TM3CNT_H)
+
+#define REG_SIOCNT (*(vu16*)REG_ADDR_SIOCNT)
+#define REG_SIODATA8 (*(vu16*)REG_ADDR_SIODATA8)
+#define REG_SIODATA32 (*(vu32*)REG_ADDR_SIODATA32)
+#define REG_SIOMLT_SEND (*(vu16*)REG_ADDR_SIOMLT_SEND)
+#define REG_SIOMLT_RECV (*(vu64*)REG_ADDR_SIOMLT_RECV)
+#define REG_SIOMULTI0 (*(vu16*)REG_ADDR_SIOMULTI0)
+#define REG_SIOMULTI1 (*(vu16*)REG_ADDR_SIOMULTI1)
+#define REG_SIOMULTI2 (*(vu16*)REG_ADDR_SIOMULTI2)
+#define REG_SIOMULTI3 (*(vu16*)REG_ADDR_SIOMULTI3)
+
+#define REG_KEYINPUT (*(vu16*)REG_ADDR_KEYINPUT)
+#define REG_KEYCNT (*(vu16*)REG_ADDR_KEYCNT)
+
+#define REG_RCNT (*(vu16*)REG_ADDR_RCNT)
+
+#define REG_IME (*(vu16*)REG_ADDR_IME)
+#define REG_IE (*(vu16*)REG_ADDR_IE)
+#define REG_IF (*(vu16*)REG_ADDR_IF)
+
+#define REG_WAITCNT (*(vu16*)REG_ADDR_WAITCNT)
// I/O register fields
// DISPCNT
-#define DISPCNT_MODE_0 0x0000 // BG0: text, BG1: text, BG2: text, BG3: text
-#define DISPCNT_MODE_1 0x0001 // BG0: text, BG1: text, BG2: affine, BG3: off
-#define DISPCNT_MODE_2 0x0002 // BG0: off, BG1: off, BG2: affine, BG3: affine
-#define DISPCNT_MODE_3 0x0003 // Bitmap mode, 240x160, BGR555 color
-#define DISPCNT_MODE_4 0x0004 // Bitmap mode, 240x160, 256 color palette
-#define DISPCNT_MODE_5 0x0005 // Bitmap mode, 160x128, BGR555 color
-#define DISPCNT_OBJ_1D_MAP 0x0040
+#define DISPCNT_MODE_0 0x0000 // BG0: text, BG1: text, BG2: text, BG3: text
+#define DISPCNT_MODE_1 0x0001 // BG0: text, BG1: text, BG2: affine, BG3: off
+#define DISPCNT_MODE_2 0x0002 // BG0: off, BG1: off, BG2: affine, BG3: affine
+#define DISPCNT_MODE_3 0x0003 // Bitmap mode, 240x160, BGR555 color
+#define DISPCNT_MODE_4 0x0004 // Bitmap mode, 240x160, 256 color palette
+#define DISPCNT_MODE_5 0x0005 // Bitmap mode, 160x128, BGR555 color
+#define DISPCNT_OBJ_1D_MAP 0x0040
#define DISPCNT_FORCED_BLANK 0x0080
-#define DISPCNT_BG0_ON 0x0100
-#define DISPCNT_BG1_ON 0x0200
-#define DISPCNT_BG2_ON 0x0400
-#define DISPCNT_BG3_ON 0x0800
-#define DISPCNT_BG_ALL_ON 0x0F00
-#define DISPCNT_OBJ_ON 0x1000
-#define DISPCNT_WIN0_ON 0x2000
-#define DISPCNT_WIN1_ON 0x4000
-#define DISPCNT_OBJWIN_ON 0x8000
+#define DISPCNT_BG0_ON 0x0100
+#define DISPCNT_BG1_ON 0x0200
+#define DISPCNT_BG2_ON 0x0400
+#define DISPCNT_BG3_ON 0x0800
+#define DISPCNT_BG_ALL_ON 0x0F00
+#define DISPCNT_OBJ_ON 0x1000
+#define DISPCNT_WIN0_ON 0x2000
+#define DISPCNT_WIN1_ON 0x4000
+#define DISPCNT_OBJWIN_ON 0x8000
// DISPSTAT
-#define DISPSTAT_VBLANK 0x0001 // in V-Blank
-#define DISPSTAT_HBLANK 0x0002 // in H-Blank
-#define DISPSTAT_VCOUNT 0x0004 // V-Count match
+#define DISPSTAT_VBLANK 0x0001 // in V-Blank
+#define DISPSTAT_HBLANK 0x0002 // in H-Blank
+#define DISPSTAT_VCOUNT 0x0004 // V-Count match
#define DISPSTAT_VBLANK_INTR 0x0008 // V-Blank interrupt enabled
#define DISPSTAT_HBLANK_INTR 0x0010 // H-Blank interrupt enabled
#define DISPSTAT_VCOUNT_INTR 0x0020 // V-Count interrupt enabled
// BGCNT
-#define BGCNT_PRIORITY(n) (n) // Values 0 - 3. Lower priority BGs will be drawn on top of higher priority BGs.
-#define BGCNT_CHARBASE(n) ((n) << 2) // Values 0 - 3. Base block for tile pixel data.
-#define BGCNT_MOSAIC 0x0040
-#define BGCNT_16COLOR 0x0000 // 4 bits per pixel
-#define BGCNT_256COLOR 0x0080 // 8 bits per pixel
+#define BGCNT_PRIORITY(n) (n) // Values 0 - 3. Lower priority BGs will be drawn on top of higher priority BGs.
+#define BGCNT_CHARBASE(n) ((n) << 2) // Values 0 - 3. Base block for tile pixel data.
+#define BGCNT_MOSAIC 0x0040
+#define BGCNT_16COLOR 0x0000 // 4 bits per pixel
+#define BGCNT_256COLOR 0x0080 // 8 bits per pixel
#define BGCNT_SCREENBASE(n) ((n) << 8) // Values 0 - 31. Base block for tile map.
-#define BGCNT_WRAP 0x2000 // Only affects affine BGs. Text BGs wrap by default.
-#define BGCNT_TXT256x256 0x0000 // Internal screen size size of text mode BG in pixels.
-#define BGCNT_TXT512x256 0x4000
-#define BGCNT_TXT256x512 0x8000
-#define BGCNT_TXT512x512 0xC000
-#define BGCNT_AFF128x128 0x0000 // Internal screen size size of affine mode BG in pixels.
-#define BGCNT_AFF256x256 0x4000
-#define BGCNT_AFF512x512 0x8000
-#define BGCNT_AFF1024x1024 0xC000
+#define BGCNT_WRAP 0x2000 // Only affects affine BGs. Text BGs wrap by default.
+#define BGCNT_TXT256x256 0x0000 // Internal screen size size of text mode BG in pixels.
+#define BGCNT_TXT512x256 0x4000
+#define BGCNT_TXT256x512 0x8000
+#define BGCNT_TXT512x512 0xC000
+#define BGCNT_AFF128x128 0x0000 // Internal screen size size of affine mode BG in pixels.
+#define BGCNT_AFF256x256 0x4000
+#define BGCNT_AFF512x512 0x8000
+#define BGCNT_AFF1024x1024 0xC000
// WININ/OUT
-#define WININ_WIN0_BG0 (1 << 0)
-#define WININ_WIN0_BG1 (1 << 1)
-#define WININ_WIN0_BG2 (1 << 2)
-#define WININ_WIN0_BG3 (1 << 3)
-#define WININ_WIN0_BG_ALL (WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3)
-#define WININ_WIN0_OBJ (1 << 4)
-#define WININ_WIN0_CLR (1 << 5)
-#define WININ_WIN1_BG0 (1 << 8)
-#define WININ_WIN1_BG1 (1 << 9)
-#define WININ_WIN1_BG2 (1 << 10)
-#define WININ_WIN1_BG3 (1 << 11)
-#define WININ_WIN1_BG_ALL (WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3)
-#define WININ_WIN1_OBJ (1 << 12)
-#define WININ_WIN1_CLR (1 << 13)
-
-#define WINOUT_WIN01_BG0 (1 << 0)
-#define WINOUT_WIN01_BG1 (1 << 1)
-#define WINOUT_WIN01_BG2 (1 << 2)
-#define WINOUT_WIN01_BG3 (1 << 3)
+#define WININ_WIN0_BG0 (1 << 0)
+#define WININ_WIN0_BG1 (1 << 1)
+#define WININ_WIN0_BG2 (1 << 2)
+#define WININ_WIN0_BG3 (1 << 3)
+#define WININ_WIN0_BG_ALL (WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3)
+#define WININ_WIN0_OBJ (1 << 4)
+#define WININ_WIN0_CLR (1 << 5)
+#define WININ_WIN1_BG0 (1 << 8)
+#define WININ_WIN1_BG1 (1 << 9)
+#define WININ_WIN1_BG2 (1 << 10)
+#define WININ_WIN1_BG3 (1 << 11)
+#define WININ_WIN1_BG_ALL (WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3)
+#define WININ_WIN1_OBJ (1 << 12)
+#define WININ_WIN1_CLR (1 << 13)
+
+#define WINOUT_WIN01_BG0 (1 << 0)
+#define WINOUT_WIN01_BG1 (1 << 1)
+#define WINOUT_WIN01_BG2 (1 << 2)
+#define WINOUT_WIN01_BG3 (1 << 3)
#define WINOUT_WIN01_BG_ALL (WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3)
-#define WINOUT_WIN01_OBJ (1 << 4)
-#define WINOUT_WIN01_CLR (1 << 5)
-#define WINOUT_WINOBJ_BG0 (1 << 8)
-#define WINOUT_WINOBJ_BG1 (1 << 9)
-#define WINOUT_WINOBJ_BG2 (1 << 10)
-#define WINOUT_WINOBJ_BG3 (1 << 11)
+#define WINOUT_WIN01_OBJ (1 << 4)
+#define WINOUT_WIN01_CLR (1 << 5)
+#define WINOUT_WINOBJ_BG0 (1 << 8)
+#define WINOUT_WINOBJ_BG1 (1 << 9)
+#define WINOUT_WINOBJ_BG2 (1 << 10)
+#define WINOUT_WINOBJ_BG3 (1 << 11)
#define WINOUT_WINOBJ_BG_ALL (WINOUT_WINOBJ_BG0 | WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_BG3)
-#define WINOUT_WINOBJ_OBJ (1 << 12)
-#define WINOUT_WINOBJ_CLR (1 << 13)
+#define WINOUT_WINOBJ_OBJ (1 << 12)
+#define WINOUT_WINOBJ_CLR (1 << 13)
#define WIN_RANGE(a, b) (((a) << 8) | (b))
#define WIN_RANGE2(a, b) ((b) | ((a) << 8))
// BLDCNT
// Bits 0-5 select layers for the 1st target
-#define BLDCNT_TGT1_BG0 (1 << 0)
-#define BLDCNT_TGT1_BG1 (1 << 1)
-#define BLDCNT_TGT1_BG2 (1 << 2)
-#define BLDCNT_TGT1_BG3 (1 << 3)
-#define BLDCNT_TGT1_OBJ (1 << 4)
-#define BLDCNT_TGT1_BD (1 << 5)
+#define BLDCNT_TGT1_BG0 (1 << 0)
+#define BLDCNT_TGT1_BG1 (1 << 1)
+#define BLDCNT_TGT1_BG2 (1 << 2)
+#define BLDCNT_TGT1_BG3 (1 << 3)
+#define BLDCNT_TGT1_OBJ (1 << 4)
+#define BLDCNT_TGT1_BD (1 << 5)
// Bits 6-7 select the special effect
-#define BLDCNT_EFFECT_NONE (0 << 6) // no special effect
-#define BLDCNT_EFFECT_BLEND (1 << 6) // 1st+2nd targets mixed (controlled by BLDALPHA)
-#define BLDCNT_EFFECT_LIGHTEN (2 << 6) // 1st target becomes whiter (controlled by BLDY)
-#define BLDCNT_EFFECT_DARKEN (3 << 6) // 1st target becomes blacker (controlled by BLDY)
+#define BLDCNT_EFFECT_NONE (0 << 6) // no special effect
+#define BLDCNT_EFFECT_BLEND (1 << 6) // 1st+2nd targets mixed (controlled by BLDALPHA)
+#define BLDCNT_EFFECT_LIGHTEN (2 << 6) // 1st target becomes whiter (controlled by BLDY)
+#define BLDCNT_EFFECT_DARKEN (3 << 6) // 1st target becomes blacker (controlled by BLDY)
// Bits 8-13 select layers for the 2nd target
-#define BLDCNT_TGT2_BG0 (1 << 8)
-#define BLDCNT_TGT2_BG1 (1 << 9)
-#define BLDCNT_TGT2_BG2 (1 << 10)
-#define BLDCNT_TGT2_BG3 (1 << 11)
-#define BLDCNT_TGT2_OBJ (1 << 12)
-#define BLDCNT_TGT2_BD (1 << 13)
-#define BLDCNT_TGT2_ALL (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD)
+#define BLDCNT_TGT2_BG0 (1 << 8)
+#define BLDCNT_TGT2_BG1 (1 << 9)
+#define BLDCNT_TGT2_BG2 (1 << 10)
+#define BLDCNT_TGT2_BG3 (1 << 11)
+#define BLDCNT_TGT2_OBJ (1 << 12)
+#define BLDCNT_TGT2_BD (1 << 13)
+#define BLDCNT_TGT2_ALL \
+ (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD)
// BLDALPHA
#define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1))
@@ -606,180 +607,180 @@
// SOUNDCNT_H
#define SOUND_CGB_MIX_QUARTER 0x0000
-#define SOUND_CGB_MIX_HALF 0x0001
-#define SOUND_CGB_MIX_FULL 0x0002
-#define SOUND_A_MIX_HALF 0x0000
-#define SOUND_A_MIX_FULL 0x0004
-#define SOUND_B_MIX_HALF 0x0000
-#define SOUND_B_MIX_FULL 0x0008
-#define SOUND_ALL_MIX_FULL 0x000E
-#define SOUND_A_RIGHT_OUTPUT 0x0100
-#define SOUND_A_LEFT_OUTPUT 0x0200
-#define SOUND_A_TIMER_0 0x0000
-#define SOUND_A_TIMER_1 0x0400
-#define SOUND_A_FIFO_RESET 0x0800
-#define SOUND_B_RIGHT_OUTPUT 0x1000
-#define SOUND_B_LEFT_OUTPUT 0x2000
-#define SOUND_B_TIMER_0 0x0000
-#define SOUND_B_TIMER_1 0x4000
-#define SOUND_B_FIFO_RESET 0x8000
+#define SOUND_CGB_MIX_HALF 0x0001
+#define SOUND_CGB_MIX_FULL 0x0002
+#define SOUND_A_MIX_HALF 0x0000
+#define SOUND_A_MIX_FULL 0x0004
+#define SOUND_B_MIX_HALF 0x0000
+#define SOUND_B_MIX_FULL 0x0008
+#define SOUND_ALL_MIX_FULL 0x000E
+#define SOUND_A_RIGHT_OUTPUT 0x0100
+#define SOUND_A_LEFT_OUTPUT 0x0200
+#define SOUND_A_TIMER_0 0x0000
+#define SOUND_A_TIMER_1 0x0400
+#define SOUND_A_FIFO_RESET 0x0800
+#define SOUND_B_RIGHT_OUTPUT 0x1000
+#define SOUND_B_LEFT_OUTPUT 0x2000
+#define SOUND_B_TIMER_0 0x0000
+#define SOUND_B_TIMER_1 0x4000
+#define SOUND_B_FIFO_RESET 0x8000
// SOUNDCNT_X
-#define SOUND_1_ON 0x0001
-#define SOUND_2_ON 0x0002
-#define SOUND_3_ON 0x0004
-#define SOUND_4_ON 0x0008
+#define SOUND_1_ON 0x0001
+#define SOUND_2_ON 0x0002
+#define SOUND_3_ON 0x0004
+#define SOUND_4_ON 0x0008
#define SOUND_MASTER_ENABLE 0x0080
// DMA
-#define DMA_DEST_INC 0x0000
-#define DMA_DEST_DEC 0x0020
-#define DMA_DEST_FIXED 0x0040
-#define DMA_DEST_RELOAD 0x0060
-#define DMA_SRC_INC 0x0000
-#define DMA_SRC_DEC 0x0080
-#define DMA_SRC_FIXED 0x0100
-#define DMA_REPEAT 0x0200
-#define DMA_16BIT 0x0000
-#define DMA_32BIT 0x0400
-#define DMA_DREQ_ON 0x0800
-#define DMA_START_NOW 0x0000
-#define DMA_START_VBLANK 0x1000
-#define DMA_START_HBLANK 0x2000
+#define DMA_DEST_INC 0x0000
+#define DMA_DEST_DEC 0x0020
+#define DMA_DEST_FIXED 0x0040
+#define DMA_DEST_RELOAD 0x0060
+#define DMA_SRC_INC 0x0000
+#define DMA_SRC_DEC 0x0080
+#define DMA_SRC_FIXED 0x0100
+#define DMA_REPEAT 0x0200
+#define DMA_16BIT 0x0000
+#define DMA_32BIT 0x0400
+#define DMA_DREQ_ON 0x0800
+#define DMA_START_NOW 0x0000
+#define DMA_START_VBLANK 0x1000
+#define DMA_START_HBLANK 0x2000
#define DMA_START_SPECIAL 0x3000
-#define DMA_START_MASK 0x3000
-#define DMA_INTR_ENABLE 0x4000
-#define DMA_ENABLE 0x8000
+#define DMA_START_MASK 0x3000
+#define DMA_INTR_ENABLE 0x4000
+#define DMA_ENABLE 0x8000
// timer
-#define TIMER_1CLK 0x00
-#define TIMER_64CLK 0x01
-#define TIMER_256CLK 0x02
-#define TIMER_1024CLK 0x03
+#define TIMER_1CLK 0x00
+#define TIMER_64CLK 0x01
+#define TIMER_256CLK 0x02
+#define TIMER_1024CLK 0x03
#define TIMER_INTR_ENABLE 0x40
-#define TIMER_ENABLE 0x80
+#define TIMER_ENABLE 0x80
// serial
-#define SIO_ID 0x0030 // Communication ID
-
-#define SIO_8BIT_MODE 0x0000 // Normal 8-bit communication mode
-#define SIO_32BIT_MODE 0x1000 // Normal 32-bit communication mode
-#define SIO_MULTI_MODE 0x2000 // Multi-player communication mode
-#define SIO_UART_MODE 0x3000 // UART communication mode
-
-#define SIO_SCK_OUT 0x0000 // Select external clock
-#define SIO_SCK_IN 0x0001 // Select internal clock
-#define SIO_IN_SCK_256K 0x0000 // Select internal clock 256KHz
-#define SIO_IN_SCK_2M 0x0002 // Select 2MHz
-#define SIO_ACK_RECV 0x0004 // Request transfer
-#define SIO_ACK_SEND 0x0008 // Enable transfer
-#define SIO_9600_BPS 0x0000 // baud rate 9600 bps
-#define SIO_38400_BPS 0x0001 // 38400 bps
-#define SIO_57600_BPS 0x0002 // 57600 bps
-#define SIO_115200_BPS 0x0003 // 115200 bps
-
-#define SIO_MULTI_CONNECT 0x0004 // Connecting multi-play communication
-#define SIO_MULTI_DISCONNECT 0x0000 // Disconnect
-#define SIO_MULTI_PARENT 0x0008 // Multi-play communication Connect master
-#define SIO_MULTI_CHILD 0x0000 // Connect slave
-#define SIO_MULTI_SI 0x0004 // Multi-play communication SI terminal
-#define SIO_MULTI_SD 0x0008 // SD terminal
-#define SIO_MULTI_BUSY 0x0080 // Multi-play communicating
-#define SIO_CTS_ENABLE 0x0004 // Enable UART send enable signal
-#define SIO_UART_7BIT 0x0000 // UART communication data length 7 bit
-#define SIO_UART_8BIT 0x0080 // 8 bit
-
-#define SIO_ERROR 0x0040 // Detect error
-#define SIO_START 0x0080 // Start transfer
-#define SIO_ENABLE 0x0080 // Enable SIO
-
-#define SIO_PARITY_ENABLE 0x0200 // Enable parity
-#define SIO_PARITY_EVEN 0x0000 // Even parity
-#define SIO_PARITY_ODD 0x0008 // Odd parity
-#define SIO_TRANS_ENABLE 0x0400 // Enable transmitter
-#define SIO_TRANS_DATA_FULL 0x0010 // Transmitted data full
-#define SIO_RECV_ENABLE 0x0800 // Enable receiver
-#define SIO_RECV_DATA_EMPTY 0x0020 // No data received
-#define SIO_INTR_ENABLE 0x4000 // Enable interrupt request
+#define SIO_ID 0x0030 // Communication ID
+
+#define SIO_8BIT_MODE 0x0000 // Normal 8-bit communication mode
+#define SIO_32BIT_MODE 0x1000 // Normal 32-bit communication mode
+#define SIO_MULTI_MODE 0x2000 // Multi-player communication mode
+#define SIO_UART_MODE 0x3000 // UART communication mode
+
+#define SIO_SCK_OUT 0x0000 // Select external clock
+#define SIO_SCK_IN 0x0001 // Select internal clock
+#define SIO_IN_SCK_256K 0x0000 // Select internal clock 256KHz
+#define SIO_IN_SCK_2M 0x0002 // Select 2MHz
+#define SIO_ACK_RECV 0x0004 // Request transfer
+#define SIO_ACK_SEND 0x0008 // Enable transfer
+#define SIO_9600_BPS 0x0000 // baud rate 9600 bps
+#define SIO_38400_BPS 0x0001 // 38400 bps
+#define SIO_57600_BPS 0x0002 // 57600 bps
+#define SIO_115200_BPS 0x0003 // 115200 bps
+
+#define SIO_MULTI_CONNECT 0x0004 // Connecting multi-play communication
+#define SIO_MULTI_DISCONNECT 0x0000 // Disconnect
+#define SIO_MULTI_PARENT 0x0008 // Multi-play communication Connect master
+#define SIO_MULTI_CHILD 0x0000 // Connect slave
+#define SIO_MULTI_SI 0x0004 // Multi-play communication SI terminal
+#define SIO_MULTI_SD 0x0008 // SD terminal
+#define SIO_MULTI_BUSY 0x0080 // Multi-play communicating
+#define SIO_CTS_ENABLE 0x0004 // Enable UART send enable signal
+#define SIO_UART_7BIT 0x0000 // UART communication data length 7 bit
+#define SIO_UART_8BIT 0x0080 // 8 bit
+
+#define SIO_ERROR 0x0040 // Detect error
+#define SIO_START 0x0080 // Start transfer
+#define SIO_ENABLE 0x0080 // Enable SIO
+
+#define SIO_PARITY_ENABLE 0x0200 // Enable parity
+#define SIO_PARITY_EVEN 0x0000 // Even parity
+#define SIO_PARITY_ODD 0x0008 // Odd parity
+#define SIO_TRANS_ENABLE 0x0400 // Enable transmitter
+#define SIO_TRANS_DATA_FULL 0x0010 // Transmitted data full
+#define SIO_RECV_ENABLE 0x0800 // Enable receiver
+#define SIO_RECV_DATA_EMPTY 0x0020 // No data received
+#define SIO_INTR_ENABLE 0x4000 // Enable interrupt request
#define SIO_MULTI_SI_SHIFT 2
-#define SIO_MULTI_SI_MASK 0x1
+#define SIO_MULTI_SI_MASK 0x1
#define SIO_MULTI_DI_SHIFT 3
-#define SIO_MULTI_DI_MASK 0x1
+#define SIO_MULTI_DI_MASK 0x1
// keys
-#define A_BUTTON 0x0001
-#define B_BUTTON 0x0002
-#define SELECT_BUTTON 0x0004
-#define START_BUTTON 0x0008
-#define DPAD_RIGHT 0x0010
-#define DPAD_LEFT 0x0020
-#define DPAD_UP 0x0040
-#define DPAD_DOWN 0x0080
-#define R_BUTTON 0x0100
-#define L_BUTTON 0x0200
-#define KEYS_MASK 0x03FF
+#define A_BUTTON 0x0001
+#define B_BUTTON 0x0002
+#define SELECT_BUTTON 0x0004
+#define START_BUTTON 0x0008
+#define DPAD_RIGHT 0x0010
+#define DPAD_LEFT 0x0020
+#define DPAD_UP 0x0040
+#define DPAD_DOWN 0x0080
+#define R_BUTTON 0x0100
+#define L_BUTTON 0x0200
+#define KEYS_MASK 0x03FF
#define KEY_INTR_ENABLE 0x0400
-#define KEY_OR_INTR 0x0000
-#define KEY_AND_INTR 0x8000
-#define DPAD_ANY 0x00F0
-#define JOY_EXCL_DPAD 0x030F
+#define KEY_OR_INTR 0x0000
+#define KEY_AND_INTR 0x8000
+#define DPAD_ANY 0x00F0
+#define JOY_EXCL_DPAD 0x030F
// interrupt flags
-#define INTR_FLAG_VBLANK (1 << 0)
-#define INTR_FLAG_HBLANK (1 << 1)
-#define INTR_FLAG_VCOUNT (1 << 2)
-#define INTR_FLAG_TIMER0 (1 << 3)
-#define INTR_FLAG_TIMER1 (1 << 4)
-#define INTR_FLAG_TIMER2 (1 << 5)
-#define INTR_FLAG_TIMER3 (1 << 6)
-#define INTR_FLAG_SERIAL (1 << 7)
-#define INTR_FLAG_DMA0 (1 << 8)
-#define INTR_FLAG_DMA1 (1 << 9)
-#define INTR_FLAG_DMA2 (1 << 10)
-#define INTR_FLAG_DMA3 (1 << 11)
-#define INTR_FLAG_KEYPAD (1 << 12)
+#define INTR_FLAG_VBLANK (1 << 0)
+#define INTR_FLAG_HBLANK (1 << 1)
+#define INTR_FLAG_VCOUNT (1 << 2)
+#define INTR_FLAG_TIMER0 (1 << 3)
+#define INTR_FLAG_TIMER1 (1 << 4)
+#define INTR_FLAG_TIMER2 (1 << 5)
+#define INTR_FLAG_TIMER3 (1 << 6)
+#define INTR_FLAG_SERIAL (1 << 7)
+#define INTR_FLAG_DMA0 (1 << 8)
+#define INTR_FLAG_DMA1 (1 << 9)
+#define INTR_FLAG_DMA2 (1 << 10)
+#define INTR_FLAG_DMA3 (1 << 11)
+#define INTR_FLAG_KEYPAD (1 << 12)
#define INTR_FLAG_GAMEPAK (1 << 13)
// WAITCNT
-#define WAITCNT_SRAM_4 (0 << 0)
-#define WAITCNT_SRAM_3 (1 << 0)
-#define WAITCNT_SRAM_2 (2 << 0)
-#define WAITCNT_SRAM_8 (3 << 0)
-#define WAITCNT_SRAM_MASK (3 << 0)
-
-#define WAITCNT_WS0_N_4 (0 << 2)
-#define WAITCNT_WS0_N_3 (1 << 2)
-#define WAITCNT_WS0_N_2 (2 << 2)
-#define WAITCNT_WS0_N_8 (3 << 2)
-#define WAITCNT_WS0_N_MASK (3 << 2)
-
-#define WAITCNT_WS0_S_2 (0 << 4)
-#define WAITCNT_WS0_S_1 (1 << 4)
-
-#define WAITCNT_WS1_N_4 (0 << 5)
-#define WAITCNT_WS1_N_3 (1 << 5)
-#define WAITCNT_WS1_N_2 (2 << 5)
-#define WAITCNT_WS1_N_8 (3 << 5)
-#define WAITCNT_WS1_N_MASK (3 << 5)
-
-#define WAITCNT_WS1_S_4 (0 << 7)
-#define WAITCNT_WS1_S_1 (1 << 7)
-
-#define WAITCNT_WS2_N_4 (0 << 8)
-#define WAITCNT_WS2_N_3 (1 << 8)
-#define WAITCNT_WS2_N_2 (2 << 8)
-#define WAITCNT_WS2_N_8 (3 << 8)
-#define WAITCNT_WS2_N_MASK (3 << 8)
-
-#define WAITCNT_WS2_S_8 (0 << 10)
-#define WAITCNT_WS2_S_1 (1 << 10)
-
-#define WAITCNT_PHI_OUT_NONE (0 << 11)
-#define WAITCNT_PHI_OUT_4MHZ (1 << 11)
-#define WAITCNT_PHI_OUT_8MHZ (2 << 11)
-#define WAITCNT_PHI_OUT_16MHZ (3 << 11)
-#define WAITCNT_PHI_OUT_MASK (3 << 11)
+#define WAITCNT_SRAM_4 (0 << 0)
+#define WAITCNT_SRAM_3 (1 << 0)
+#define WAITCNT_SRAM_2 (2 << 0)
+#define WAITCNT_SRAM_8 (3 << 0)
+#define WAITCNT_SRAM_MASK (3 << 0)
+
+#define WAITCNT_WS0_N_4 (0 << 2)
+#define WAITCNT_WS0_N_3 (1 << 2)
+#define WAITCNT_WS0_N_2 (2 << 2)
+#define WAITCNT_WS0_N_8 (3 << 2)
+#define WAITCNT_WS0_N_MASK (3 << 2)
+
+#define WAITCNT_WS0_S_2 (0 << 4)
+#define WAITCNT_WS0_S_1 (1 << 4)
+
+#define WAITCNT_WS1_N_4 (0 << 5)
+#define WAITCNT_WS1_N_3 (1 << 5)
+#define WAITCNT_WS1_N_2 (2 << 5)
+#define WAITCNT_WS1_N_8 (3 << 5)
+#define WAITCNT_WS1_N_MASK (3 << 5)
+
+#define WAITCNT_WS1_S_4 (0 << 7)
+#define WAITCNT_WS1_S_1 (1 << 7)
+
+#define WAITCNT_WS2_N_4 (0 << 8)
+#define WAITCNT_WS2_N_3 (1 << 8)
+#define WAITCNT_WS2_N_2 (2 << 8)
+#define WAITCNT_WS2_N_8 (3 << 8)
+#define WAITCNT_WS2_N_MASK (3 << 8)
+
+#define WAITCNT_WS2_S_8 (0 << 10)
+#define WAITCNT_WS2_S_1 (1 << 10)
+
+#define WAITCNT_PHI_OUT_NONE (0 << 11)
+#define WAITCNT_PHI_OUT_4MHZ (1 << 11)
+#define WAITCNT_PHI_OUT_8MHZ (2 << 11)
+#define WAITCNT_PHI_OUT_16MHZ (3 << 11)
+#define WAITCNT_PHI_OUT_MASK (3 << 11)
#define WAITCNT_PREFETCH_ENABLE (1 << 14)
diff --git a/include/gba/isagbprint.h b/include/gba/isagbprint.h
index af207657..ea5f2a2b 100644
--- a/include/gba/isagbprint.h
+++ b/include/gba/isagbprint.h
@@ -5,46 +5,46 @@
#define AGBPrintInit()
#define AGBPutc(cChr)
#define AGBPrint(pBuf)
-#define AGBPrintf(pBuf, ...)
+#define AGBPrintf(pBuf, ...)
#define AGBPrintFlush1Block()
#define AGBPrintFlush()
#define AGBAssert(pFile, nLine, pExpression, nStopProgram)
#else
void AGBPrintInit(void);
void AGBPutc(const char cChr);
-void AGBPrint(const char *pBuf);
-void AGBPrintf(const char *pBuf, ...);
+void AGBPrint(const char* pBuf);
+void AGBPrintf(const char* pBuf, ...);
void AGBPrintFlush1Block(void);
void AGBPrintFlush(void);
-void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopProgram);
+void AGBAssert(const char* pFile, int nLine, const char* pExpression, int nStopProgram);
#endif
#undef AGB_ASSERT
#ifdef NDEBUG
-#define AGB_ASSERT(exp)
+#define AGB_ASSERT(exp)
#else
-#define AGB_ASSERT(exp) (exp) ? ((void *)0) : AGBAssert(__FILE__, __LINE__, #exp, 1);
+#define AGB_ASSERT(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 1);
#endif
#undef AGB_WARNING
#ifdef NDEBUG
-#define AGB_WARNING(exp)
+#define AGB_WARNING(exp)
#else
-#define AGB_WARNING(exp) (exp) ? ((void *)0) : AGBAssert(__FILE__, __LINE__, #exp, 0);
+#define AGB_WARNING(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 0);
#endif
// for matching purposes
#ifdef NDEBUG
-#define AGB_ASSERT_EX(exp, file, line)
+#define AGB_ASSERT_EX(exp, file, line)
#else
-#define AGB_ASSERT_EX(exp, file, line) (exp) ? ((void *)0) : AGBAssert(file, line, #exp, 1);
+#define AGB_ASSERT_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 1);
#endif
#ifdef NDEBUG
-#define AGB_WARNING_EX(exp, file, line)
+#define AGB_WARNING_EX(exp, file, line)
#else
-#define AGB_WARNING_EX(exp, file, line) (exp) ? ((void *)0) : AGBAssert(file, line, #exp, 0);
+#define AGB_WARNING_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 0);
#endif
#endif // GUARD_GBA_ISAGBPRINT_H
diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h
index d8e9bed0..05a47859 100644
--- a/include/gba/m4a_internal.h
+++ b/include/gba/m4a_internal.h
@@ -9,66 +9,63 @@
#define C_V 0x40 // center value for PAN, BEND, and TUNE
-#define SOUND_MODE_REVERB_VAL 0x0000007F
-#define SOUND_MODE_REVERB_SET 0x00000080
-#define SOUND_MODE_MAXCHN 0x00000F00
+#define SOUND_MODE_REVERB_VAL 0x0000007F
+#define SOUND_MODE_REVERB_SET 0x00000080
+#define SOUND_MODE_MAXCHN 0x00000F00
#define SOUND_MODE_MAXCHN_SHIFT 8
-#define SOUND_MODE_MASVOL 0x0000F000
+#define SOUND_MODE_MASVOL 0x0000F000
#define SOUND_MODE_MASVOL_SHIFT 12
-#define SOUND_MODE_FREQ_05734 0x00010000
-#define SOUND_MODE_FREQ_07884 0x00020000
-#define SOUND_MODE_FREQ_10512 0x00030000
-#define SOUND_MODE_FREQ_13379 0x00040000
-#define SOUND_MODE_FREQ_15768 0x00050000
-#define SOUND_MODE_FREQ_18157 0x00060000
-#define SOUND_MODE_FREQ_21024 0x00070000
-#define SOUND_MODE_FREQ_26758 0x00080000
-#define SOUND_MODE_FREQ_31536 0x00090000
-#define SOUND_MODE_FREQ_36314 0x000A0000
-#define SOUND_MODE_FREQ_40137 0x000B0000
-#define SOUND_MODE_FREQ_42048 0x000C0000
-#define SOUND_MODE_FREQ 0x000F0000
-#define SOUND_MODE_FREQ_SHIFT 16
-#define SOUND_MODE_DA_BIT_9 0x00800000
-#define SOUND_MODE_DA_BIT_8 0x00900000
-#define SOUND_MODE_DA_BIT_7 0x00A00000
-#define SOUND_MODE_DA_BIT_6 0x00B00000
-#define SOUND_MODE_DA_BIT 0x00B00000
+#define SOUND_MODE_FREQ_05734 0x00010000
+#define SOUND_MODE_FREQ_07884 0x00020000
+#define SOUND_MODE_FREQ_10512 0x00030000
+#define SOUND_MODE_FREQ_13379 0x00040000
+#define SOUND_MODE_FREQ_15768 0x00050000
+#define SOUND_MODE_FREQ_18157 0x00060000
+#define SOUND_MODE_FREQ_21024 0x00070000
+#define SOUND_MODE_FREQ_26758 0x00080000
+#define SOUND_MODE_FREQ_31536 0x00090000
+#define SOUND_MODE_FREQ_36314 0x000A0000
+#define SOUND_MODE_FREQ_40137 0x000B0000
+#define SOUND_MODE_FREQ_42048 0x000C0000
+#define SOUND_MODE_FREQ 0x000F0000
+#define SOUND_MODE_FREQ_SHIFT 16
+#define SOUND_MODE_DA_BIT_9 0x00800000
+#define SOUND_MODE_DA_BIT_8 0x00900000
+#define SOUND_MODE_DA_BIT_7 0x00A00000
+#define SOUND_MODE_DA_BIT_6 0x00B00000
+#define SOUND_MODE_DA_BIT 0x00B00000
#define SOUND_MODE_DA_BIT_SHIFT 20
-struct WaveData
-{
+struct WaveData {
u16 type;
u16 status;
u32 freq;
u32 loopStart;
- u32 size; // number of samples
+ u32 size; // number of samples
s8 data[1]; // samples
};
-#define TONEDATA_TYPE_CGB 0x07
-#define TONEDATA_TYPE_FIX 0x08
-#define TONEDATA_TYPE_SPL 0x40 // key split
-#define TONEDATA_TYPE_RHY 0x80 // rhythm
+#define TONEDATA_TYPE_CGB 0x07
+#define TONEDATA_TYPE_FIX 0x08
+#define TONEDATA_TYPE_SPL 0x40 // key split
+#define TONEDATA_TYPE_RHY 0x80 // rhythm
-#define TONEDATA_P_S_PAN 0xc0
-#define TONEDATA_P_S_PAM TONEDATA_P_S_PAN
+#define TONEDATA_P_S_PAN 0xc0
+#define TONEDATA_P_S_PAM TONEDATA_P_S_PAN
-struct ToneData
-{
+struct ToneData {
u8 type;
u8 key;
- u8 length; // sound length (compatible sound)
+ u8 length; // sound length (compatible sound)
u8 pan_sweep; // pan or sweep (compatible sound ch. 1)
- struct WaveData *wav;
+ struct WaveData* wav;
u8 attack;
u8 decay;
u8 sustain;
u8 release;
};
-struct CgbChannel
-{
+struct CgbChannel {
u8 sf;
u8 ty;
u8 rightVolume;
@@ -100,7 +97,7 @@ struct CgbChannel
u8 le;
u8 sw;
u32 fr;
- u32 *wp;
+ u32* wp;
u32 cp;
u32 tp;
u32 pp;
@@ -110,8 +107,7 @@ struct CgbChannel
struct MusicPlayerTrack;
-struct SoundChannel
-{
+struct SoundChannel {
u8 status;
u8 type;
u8 rightVolume;
@@ -137,9 +133,9 @@ struct SoundChannel
u32 ct;
u32 fw;
u32 freq;
- struct WaveData *wav;
+ struct WaveData* wav;
u32 cp;
- struct MusicPlayerTrack *track;
+ struct MusicPlayerTrack* track;
u32 pp;
u32 np;
u32 d4;
@@ -151,8 +147,7 @@ struct SoundChannel
#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer
-struct SoundInfo
-{
+struct SoundInfo {
// This field is normally equal to ID_NUMBER but it is set to other
// values during sensitive operations for locking purposes.
// This field should be volatile but isn't. This could potentially cause
@@ -175,39 +170,37 @@ struct SoundInfo
s32 pcmSamplesPerVBlank;
s32 pcmFreq;
s32 divFreq;
- struct CgbChannel *cgbChans;
+ struct CgbChannel* cgbChans;
u32 func;
u32 intp;
void (*CgbSound)(void);
void (*CgbOscOff)(u8);
u32 (*MidiKeyToCgbFreq)(u8, u8, u8);
u32 MPlayJumpTable;
- void *plynote;
+ void* plynote;
void (*ExtVolPit)(void);
u8 gap2[16];
struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS];
s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2];
};
-struct SongHeader
-{
+struct SongHeader {
u8 trackCount;
u8 blockCount;
u8 priority;
u8 reverb;
- struct ToneData *tone;
- u8 *part[1];
+ struct ToneData* tone;
+ u8* part[1];
};
#define MPT_FLG_VOLSET 0x01
#define MPT_FLG_VOLCHG 0x03
#define MPT_FLG_PITSET 0x04
#define MPT_FLG_PITCHG 0x0C
-#define MPT_FLG_START 0x40
-#define MPT_FLG_EXIST 0x80
+#define MPT_FLG_START 0x40
+#define MPT_FLG_EXIST 0x80
-struct MusicPlayerTrack
-{
+struct MusicPlayerTrack {
u8 flags;
u8 wait;
u8 patternLevel;
@@ -240,13 +233,13 @@ struct MusicPlayerTrack
u8 priority;
u8 echoVolume;
u8 echoLength;
- struct SoundChannel *chan;
+ struct SoundChannel* chan;
struct ToneData tone;
u8 gap[10];
u16 unk_3A;
u32 unk_3C;
- u8 *cmdPtr;
- u8 *patternStack[3];
+ u8* cmdPtr;
+ u8* patternStack[3];
};
#define MUSICPLAYER_STATUS_TRACK 0x0000ffff
@@ -254,14 +247,13 @@ struct MusicPlayerTrack
#define MAX_MUSICPLAYER_TRACKS 16
-#define TEMPORARY_FADE 0x0001
-#define FADE_IN 0x0002
-#define FADE_VOL_MAX 64
-#define FADE_VOL_SHIFT 2
+#define TEMPORARY_FADE 0x0001
+#define FADE_IN 0x0002
+#define FADE_VOL_MAX 64
+#define FADE_VOL_SHIFT 2
-struct MusicPlayerInfo
-{
- struct SongHeader *songHeader;
+struct MusicPlayerInfo {
+ struct SongHeader* songHeader;
u32 status;
u8 trackCount;
u8 priority;
@@ -269,7 +261,7 @@ struct MusicPlayerInfo
u8 unk_B;
u32 clock;
u8 gap[8];
- u8 *memAccArea;
+ u8* memAccArea;
u16 tempoD;
u16 tempoU;
u16 tempoI;
@@ -277,24 +269,22 @@ struct MusicPlayerInfo
u16 fadeOI;
u16 fadeOC;
u16 fadeOV;
- struct MusicPlayerTrack *tracks;
- struct ToneData *tone;
+ struct MusicPlayerTrack* tracks;
+ struct ToneData* tone;
u32 ident;
u32 func;
u32 intp;
};
-struct MusicPlayer
-{
- struct MusicPlayerInfo *info;
- struct MusicPlayerTrack *track;
+struct MusicPlayer {
+ struct MusicPlayerInfo* info;
+ struct MusicPlayerTrack* track;
u8 unk_8;
u16 unk_A;
};
-struct Song
-{
- struct SongHeader *header;
+struct Song {
+ struct SongHeader* header;
u16 ms;
u16 me;
};
@@ -308,9 +298,9 @@ extern u8 gMPlayMemAccArea[];
extern char SoundMainRAM[];
-extern void *gMPlayJumpTable[];
+extern void* gMPlayJumpTable[];
-typedef void (*XcmdFunc)(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+typedef void (*XcmdFunc)(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
extern const XcmdFunc gXcmdTable[];
extern struct CgbChannel gCgbChans[];
@@ -333,75 +323,75 @@ extern char gMaxLines[];
u32 umul3232H32(u32 multiplier, u32 multiplicand);
void SoundMain(void);
void SoundMainBTM(void);
-void TrackStop(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track);
+void TrackStop(struct MusicPlayerInfo* mplayInfo, struct MusicPlayerTrack* track);
void MPlayMain(void);
-void RealClearChain(void *x);
-
-void MPlayContinue(struct MusicPlayerInfo *mplayInfo);
-void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader);
-void MPlayStop(struct MusicPlayerInfo *mplayInfo);
-void FadeOutBody(struct MusicPlayerInfo *mplayInfo);
-void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track);
-void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed);
-void ClearChain(void *x);
-void Clear64byte(void *addr);
-void SoundInit(struct SoundInfo *soundInfo);
-void MPlayExtender(struct CgbChannel *cgbChans);
+void RealClearChain(void* x);
+
+void MPlayContinue(struct MusicPlayerInfo* mplayInfo);
+void MPlayStart(struct MusicPlayerInfo* mplayInfo, struct SongHeader* songHeader);
+void MPlayStop(struct MusicPlayerInfo* mplayInfo);
+void FadeOutBody(struct MusicPlayerInfo* mplayInfo);
+void TrkVolPitSet(struct MusicPlayerInfo* mplayInfo, struct MusicPlayerTrack* track);
+void MPlayFadeOut(struct MusicPlayerInfo* mplayInfo, u16 speed);
+void ClearChain(void* x);
+void Clear64byte(void* addr);
+void SoundInit(struct SoundInfo* soundInfo);
+void MPlayExtender(struct CgbChannel* cgbChans);
void m4aSoundMode(u32 mode);
-void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track, u8 a3);
+void MPlayOpen(struct MusicPlayerInfo* mplayInfo, struct MusicPlayerTrack* track, u8 a3);
void CgbSound(void);
void CgbOscOff(u8);
u32 MidiKeyToCgbFreq(u8, u8, u8);
void nullsub_141(void);
-void MPlayJumpTableCopy(void **mplayJumpTable);
+void MPlayJumpTableCopy(void** mplayJumpTable);
void SampleFreqSet(u32 freq);
void m4aSoundVSyncOn(void);
void m4aSoundVSyncOff(void);
-void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo);
-void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
-void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch);
-void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan);
-void ClearModM(struct MusicPlayerTrack *track);
-void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth);
-void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed);
+void m4aMPlayTempoControl(struct MusicPlayerInfo* mplayInfo, u16 tempo);
+void m4aMPlayVolumeControl(struct MusicPlayerInfo* mplayInfo, u16 trackBits, u16 volume);
+void m4aMPlayPitchControl(struct MusicPlayerInfo* mplayInfo, u16 trackBits, s16 pitch);
+void m4aMPlayPanpotControl(struct MusicPlayerInfo* mplayInfo, u16 trackBits, s8 pan);
+void ClearModM(struct MusicPlayerTrack* track);
+void m4aMPlayModDepthSet(struct MusicPlayerInfo* mplayInfo, u16 trackBits, u8 modDepth);
+void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo* mplayInfo, u16 trackBits, u8 lfoSpeed);
// sound command handler functions
-void ply_fine(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_goto(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_patt(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_pend(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_rept(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_memacc(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_prio(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_tempo(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_keysh(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_voice(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_vol(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_pan(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_bend(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_bendr(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_lfos(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_lfodl(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_mod(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_modt(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_fine(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_goto(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_patt(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_pend(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_rept(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_memacc(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_prio(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_tempo(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_keysh(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_voice(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_vol(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_pan(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_bend(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_bendr(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_lfos(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_lfodl(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_mod(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_modt(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_tune(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_port(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_xcmd(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_endtie(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_note(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
// extended sound command handler functions
-void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_xwave(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_xtype(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_xatta(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_xdeca(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_xsust(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_xrele(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_xiecv(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_xiecl(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_xleng(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_xswee(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xxx(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_xwave(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_xtype(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_xatta(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_xdeca(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_xsust(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_xrele(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_xiecv(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_xiecl(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_xleng(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
+void ply_xswee(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
#endif // GUARD_M4A_INTERNAL_H
diff --git a/include/gba/macro.h b/include/gba/macro.h
index cc853530..63043ebb 100644
--- a/include/gba/macro.h
+++ b/include/gba/macro.h
@@ -1,54 +1,49 @@
#ifndef GUARD_GBA_MACRO_H
#define GUARD_GBA_MACRO_H
-#define CPU_FILL(value, dest, size, bit) \
-{ \
- vu##bit tmp = (vu##bit)(value); \
- CpuSet((void *)&tmp, \
- dest, \
- CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size)/(bit/8) & 0x1FFFFF)); \
-}
+#define CPU_FILL(value, dest, size, bit) \
+ { \
+ vu##bit tmp = (vu##bit)(value); \
+ CpuSet((void*)&tmp, dest, CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size) / (bit / 8) & 0x1FFFFF)); \
+ }
#define CpuFill16(value, dest, size) CPU_FILL(value, dest, size, 16)
#define CpuFill32(value, dest, size) CPU_FILL(value, dest, size, 32)
-#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size)/(bit/8) & 0x1FFFFF))
+#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size) / (bit / 8) & 0x1FFFFF))
#define CpuCopy16(src, dest, size) CPU_COPY(src, dest, size, 16)
#define CpuCopy32(src, dest, size) CPU_COPY(src, dest, size, 32)
-#define CpuFastFill(value, dest, size) \
-{ \
- vu32 tmp = (vu32)(value); \
- CpuFastSet((void *)&tmp, \
- dest, \
- CPU_FAST_SET_SRC_FIXED | ((size)/(32/8) & 0x1FFFFF)); \
-}
+#define CpuFastFill(value, dest, size) \
+ { \
+ vu32 tmp = (vu32)(value); \
+ CpuFastSet((void*)&tmp, dest, CPU_FAST_SET_SRC_FIXED | ((size) / (32 / 8) & 0x1FFFFF)); \
+ }
#define CpuFastFill16(value, dest, size) CpuFastFill(((value) << 16) | (value), (dest), (size))
-#define CpuFastFill8(value, dest, size) CpuFastFill(((value) << 24) | ((value) << 16) | ((value) << 8) | (value), (dest), (size))
-
-#define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size)/(32/8) & 0x1FFFFF))
-
-#define DmaSet(dmaNum, src, dest, control) \
-{ \
- vu32 *dmaRegs = (vu32 *)REG_ADDR_DMA##dmaNum; \
- dmaRegs[0] = (vu32)(src); \
- dmaRegs[1] = (vu32)(dest); \
- dmaRegs[2] = (vu32)(control); \
- dmaRegs[2]; \
-}
-
-#define DMA_FILL(dmaNum, value, dest, size, bit) \
-{ \
- vu##bit tmp = (vu##bit)(value); \
- DmaSet(dmaNum, \
- &tmp, \
- dest, \
- (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_FIXED | DMA_DEST_INC) << 16 \
- | ((size)/(bit/8))); \
-}
+#define CpuFastFill8(value, dest, size) \
+ CpuFastFill(((value) << 24) | ((value) << 16) | ((value) << 8) | (value), (dest), (size))
+
+#define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size) / (32 / 8) & 0x1FFFFF))
+
+#define DmaSet(dmaNum, src, dest, control) \
+ { \
+ vu32* dmaRegs = (vu32*)REG_ADDR_DMA##dmaNum; \
+ dmaRegs[0] = (vu32)(src); \
+ dmaRegs[1] = (vu32)(dest); \
+ dmaRegs[2] = (vu32)(control); \
+ dmaRegs[2]; \
+ }
+
+#define DMA_FILL(dmaNum, value, dest, size, bit) \
+ { \
+ vu##bit tmp = (vu##bit)(value); \
+ DmaSet(dmaNum, &tmp, dest, \
+ (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_FIXED | DMA_DEST_INC) << 16 | \
+ ((size) / (bit / 8))); \
+ }
#define DmaFill16(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 16)
#define DmaFill32(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 32)
@@ -58,86 +53,77 @@
// unit size (2 or 4 bytes) and then combined with the DMA control flags using a
// bitwise OR operation.
-#define DMA_CLEAR(dmaNum, dest, size, bit) \
-{ \
- vu##bit *_dest = (vu##bit *)(dest); \
- u32 _size = size; \
- DmaFill##bit(dmaNum, 0, _dest, _size); \
-}
+#define DMA_CLEAR(dmaNum, dest, size, bit) \
+ { \
+ vu##bit* _dest = (vu##bit*)(dest); \
+ u32 _size = size; \
+ DmaFill##bit(dmaNum, 0, _dest, _size); \
+ }
#define DmaClear16(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 16)
#define DmaClear32(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 32)
-#define DMA_COPY(dmaNum, src, dest, size, bit) \
- DmaSet(dmaNum, \
- src, \
- dest, \
- (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 \
- | ((size)/(bit/8)))
+#define DMA_COPY(dmaNum, src, dest, size, bit) \
+ DmaSet(dmaNum, src, dest, \
+ (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 | ((size) / (bit / 8)))
#define DmaCopy16(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 16)
#define DmaCopy32(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 32)
-#define DmaStop(dmaNum) \
-{ \
- vu16 *dmaRegs = (vu16 *)REG_ADDR_DMA##dmaNum; \
- dmaRegs[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); \
- dmaRegs[5] &= ~DMA_ENABLE; \
- dmaRegs[5]; \
-}
+#define DmaStop(dmaNum) \
+ { \
+ vu16* dmaRegs = (vu16*)REG_ADDR_DMA##dmaNum; \
+ dmaRegs[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); \
+ dmaRegs[5] &= ~DMA_ENABLE; \
+ dmaRegs[5]; \
+ }
#define DmaCopyLarge(dmaNum, src, dest, size, block, bit) \
-{ \
- const void *_src = src; \
- void *_dest = dest; \
- u32 _size = size; \
- while (1) \
{ \
- DmaCopy##bit(dmaNum, _src, _dest, (block)); \
- _src += (block); \
- _dest += (block); \
- _size -= (block); \
- if (_size <= (block)) \
- { \
- DmaCopy##bit(dmaNum, _src, _dest, _size); \
- break; \
+ const void* _src = src; \
+ void* _dest = dest; \
+ u32 _size = size; \
+ while (1) { \
+ DmaCopy##bit(dmaNum, _src, _dest, (block)); \
+ _src += (block); \
+ _dest += (block); \
+ _size -= (block); \
+ if (_size <= (block)) { \
+ DmaCopy##bit(dmaNum, _src, _dest, _size); \
+ break; \
+ } \
} \
- } \
-}
-
-#define DmaClearLarge(dmaNum, dest, size, block, bit) \
-{ \
- void *_dest = dest; \
- u32 _size = size; \
- while (1) \
- { \
- DmaFill##bit(dmaNum, 0, _dest, (block)); \
- _dest += (block); \
- _size -= (block); \
- if (_size <= (block)) \
- { \
- DmaFill##bit(dmaNum, 0, _dest, _size); \
- break; \
- } \
- } \
-}
+ }
+
+#define DmaClearLarge(dmaNum, dest, size, block, bit) \
+ { \
+ void* _dest = dest; \
+ u32 _size = size; \
+ while (1) { \
+ DmaFill##bit(dmaNum, 0, _dest, (block)); \
+ _dest += (block); \
+ _size -= (block); \
+ if (_size <= (block)) { \
+ DmaFill##bit(dmaNum, 0, _dest, _size); \
+ break; \
+ } \
+ } \
+ }
#define DmaFillLarge(dmaNum, value, dest, size, block, bit) \
-{ \
- void *_dest = (void *)dest; \
- u32 _size = size; \
- while (1) \
{ \
- DmaFill##bit(dmaNum, value, _dest, (block)); \
- _dest += (block); \
- _size -= (block); \
- if (_size <= (block)) \
- { \
- DmaFill##bit(dmaNum, value, _dest, _size); \
- break; \
+ void* _dest = (void*)dest; \
+ u32 _size = size; \
+ while (1) { \
+ DmaFill##bit(dmaNum, value, _dest, (block)); \
+ _dest += (block); \
+ _size -= (block); \
+ if (_size <= (block)) { \
+ DmaFill##bit(dmaNum, value, _dest, _size); \
+ break; \
+ } \
} \
- } \
-}
+ }
#define DmaCopyLarge16(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 16)
@@ -151,44 +137,44 @@
#define DmaClearLarge32(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 32)
#define DmaCopyDefvars(dmaNum, src, dest, size, bit) \
-{ \
- const void *_src = src; \
- void *_dest = dest; \
- u32 _size = size; \
- DmaCopy##bit(dmaNum, _src, _dest, _size); \
-}
+ { \
+ const void* _src = src; \
+ void* _dest = dest; \
+ u32 _size = size; \
+ DmaCopy##bit(dmaNum, _src, _dest, _size); \
+ }
#define DmaCopy16Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 16)
#define DmaCopy32Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 32)
#define DmaFillDefvars(dmaNum, value, dest, size, bit) \
-{ \
- void *_dest = (void *)dest; \
- u32 _size = size; \
- DmaFill##bit(dmaNum, value, _dest, _size); \
-}
+ { \
+ void* _dest = (void*)dest; \
+ u32 _size = size; \
+ DmaFill##bit(dmaNum, value, _dest, _size); \
+ }
#define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16)
#define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32)
#define DmaClearDefvars(dmaNum, dest, size, bit) \
-{ \
- void *_dest = dest; \
- u32 _size = size; \
- DmaClear##bit(dmaNum, _dest, _size); \
-}
+ { \
+ void* _dest = dest; \
+ u32 _size = size; \
+ DmaClear##bit(dmaNum, _dest, _size); \
+ }
#define DmaClear16Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 16)
#define DmaClear32Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 32)
-#define IntrEnable(flags) \
-{ \
- u16 imeTemp; \
- \
- imeTemp = REG_IME; \
- REG_IME = 0; \
- REG_IE |= flags; \
- REG_IME = imeTemp; \
-}
+#define IntrEnable(flags) \
+ { \
+ u16 imeTemp; \
+ \
+ imeTemp = REG_IME; \
+ REG_IME = 0; \
+ REG_IE |= flags; \
+ REG_IME = imeTemp; \
+ }
#endif // GUARD_GBA_MACRO_H
diff --git a/include/gba/multi_boot.h b/include/gba/multi_boot.h
index 0f825e71..6aa5a2f6 100644
--- a/include/gba/multi_boot.h
+++ b/include/gba/multi_boot.h
@@ -1,40 +1,39 @@
#ifndef GUARD_GBA_MULTI_BOOT_H
#define GUARD_GBA_MULTI_BOOT_H
-#define MULTIBOOT_NCHILD 3 // Maximum number of slaves
-#define MULTIBOOT_HEADER_SIZE 0xc0 // Header size
+#define MULTIBOOT_NCHILD 3 // Maximum number of slaves
+#define MULTIBOOT_HEADER_SIZE 0xc0 // Header size
#define MULTIBOOT_SEND_SIZE_MIN 0x100 // Minimum transmission size
#define MULTIBOOT_SEND_SIZE_MAX 0x40000 // Maximum transmission size
-struct MultiBootParam
-{
- u32 system_work[5]; // Can be rewritten within system call.
- // Used with library also.
- u8 handshake_data; // Handshake data from client
+struct MultiBootParam {
+ u32 system_work[5]; // Can be rewritten within system call.
+ // Used with library also.
+ u8 handshake_data; // Handshake data from client
u8 padding;
- u16 handshake_timeout; // Handshake timeout check counter
- u8 probe_count; // If not 0, during client recognition or
- // boot program transfer
- u8 client_data[MULTIBOOT_NCHILD]; // Handshake data from client
- u8 palette_data; // Palette's flashing parameter during load
- // for client
- u8 response_bit; // When high probability that slave
- // connected, 4P-2P: d3-d1 is 1.
- u8 client_bit; // For slave distinguished as client,
- // 4P-2P: d3-d1 is 1.
- u8 reserved1; // Reserved
- const u8 *boot_srcp; // Boot program start (after header)
- const u8 *boot_endp; // Boot program end pointer
- const u8 *masterp; // Pointer to header referenced and output
- // by master
- u8 *reserved2[MULTIBOOT_NCHILD]; // Reserved
- u32 system_work2[4]; // Can be rewritten within system call.
- u8 sendflag; // If SC7=1 and during send, not 0
- u8 probe_target_bit; // If target recognized with client,
- // 4P-2P: d3-d1 is 1.
- u8 check_wait; // Wait frame until recoginition with client
- u8 server_type; // client recognize method 0= Low Speed
- // 1= High Speed
+ u16 handshake_timeout; // Handshake timeout check counter
+ u8 probe_count; // If not 0, during client recognition or
+ // boot program transfer
+ u8 client_data[MULTIBOOT_NCHILD]; // Handshake data from client
+ u8 palette_data; // Palette's flashing parameter during load
+ // for client
+ u8 response_bit; // When high probability that slave
+ // connected, 4P-2P: d3-d1 is 1.
+ u8 client_bit; // For slave distinguished as client,
+ // 4P-2P: d3-d1 is 1.
+ u8 reserved1; // Reserved
+ const u8* boot_srcp; // Boot program start (after header)
+ const u8* boot_endp; // Boot program end pointer
+ const u8* masterp; // Pointer to header referenced and output
+ // by master
+ u8* reserved2[MULTIBOOT_NCHILD]; // Reserved
+ u32 system_work2[4]; // Can be rewritten within system call.
+ u8 sendflag; // If SC7=1 and during send, not 0
+ u8 probe_target_bit; // If target recognized with client,
+ // 4P-2P: d3-d1 is 1.
+ u8 check_wait; // Wait frame until recoginition with client
+ u8 server_type; // client recognize method 0= Low Speed
+ // 1= High Speed
};
/* Error Code
@@ -46,30 +45,30 @@ struct MultiBootParam
* "Slave is not connected."
* "Cannot recognize the slave."
* ,etc. Messages easy for the player to understand are good.
- * NO_PROBE_TARGET: When recognizing client all machines returned
+ * NO_PROBE_TARGET: When recognizing client all machines returned
* abnormal data and there is no target.
- * NO_DLREADY: client did not return a download preparations
+ * NO_DLREADY: client did not return a download preparations
* possible message.
* BOOT_FAILURE: MultiBoot() system call returned an error.
- * HANDSHAKE_FAILURE: Failed to do handshake with master which should
+ * HANDSHAKE_FAILURE: Failed to do handshake with master which should
* occur immediately after boot of slave.
- * (Slave may be in infinite loop, request that power be turned off
+ * (Slave may be in infinite loop, request that power be turned off
* and on again.)
*/
-#define MULTIBOOT_ERROR_04 0x04
-#define MULTIBOOT_ERROR_08 0x08
-#define MULTIBOOT_ERROR_0c 0x0c
-#define MULTIBOOT_ERROR_40 0x40
-#define MULTIBOOT_ERROR_44 0x44
-#define MULTIBOOT_ERROR_48 0x48
-#define MULTIBOOT_ERROR_4c 0x4c
-#define MULTIBOOT_ERROR_80 0x80
-#define MULTIBOOT_ERROR_84 0x84
-#define MULTIBOOT_ERROR_88 0x88
-#define MULTIBOOT_ERROR_8c 0x8c
-#define MULTIBOOT_ERROR_NO_PROBE_TARGET 0x50
-#define MULTIBOOT_ERROR_NO_DLREADY 0x60
-#define MULTIBOOT_ERROR_BOOT_FAILURE 0x70
+#define MULTIBOOT_ERROR_04 0x04
+#define MULTIBOOT_ERROR_08 0x08
+#define MULTIBOOT_ERROR_0c 0x0c
+#define MULTIBOOT_ERROR_40 0x40
+#define MULTIBOOT_ERROR_44 0x44
+#define MULTIBOOT_ERROR_48 0x48
+#define MULTIBOOT_ERROR_4c 0x4c
+#define MULTIBOOT_ERROR_80 0x80
+#define MULTIBOOT_ERROR_84 0x84
+#define MULTIBOOT_ERROR_88 0x88
+#define MULTIBOOT_ERROR_8c 0x8c
+#define MULTIBOOT_ERROR_NO_PROBE_TARGET 0x50
+#define MULTIBOOT_ERROR_NO_DLREADY 0x60
+#define MULTIBOOT_ERROR_BOOT_FAILURE 0x70
#define MULTIBOOT_ERROR_HANDSHAKE_FAILURE 0x71
/* After an error, or when a value other than 0xffff is returned,
@@ -83,22 +82,22 @@ struct MultiBootParam
#define MULTIBOOT_CONNECTION_CHECK_WAIT 15
/* Recognition of Slave
- * Value set in MultiBootParam structure member server_type
+ * Value set in MultiBootParam structure member server_type
* MULTIBOOT_SERVER_TYPE_NORMAL: Slow speed recognition mode
* The MultiBootMain() function communicates 2 bytes with one call.
- * Therefore, processing returns from MultiBootMain() function
+ * Therefore, processing returns from MultiBootMain() function
* in short time.
* MULTIBOOT_SERVER_TYPE_QUICK: High speed recognition mode
* In MultiBootMain() function as many consecutive communications
* are done as possible.
- * Therefore, processing may not return from MultiBootMain() for
+ * Therefore, processing may not return from MultiBootMain() for
* several dozen frames.
- * During this time, there is no problem if processing for sound and
- * display cannot be done. If processing for sound and display is
+ * During this time, there is no problem if processing for sound and
+ * display cannot be done. If processing for sound and display is
* done with timer interrupt processing, you can use.
*/
#define MULTIBOOT_SERVER_TYPE_NORMAL 0
-#define MULTIBOOT_SERVER_TYPE_QUICK 1
+#define MULTIBOOT_SERVER_TYPE_QUICK 1
/* Timeout for slave's final start up check 400 frames */
#define MULTIBOOT_HANDSHAKE_TIMEOUT 400
diff --git a/include/gba/syscall.h b/include/gba/syscall.h
index 22fdf09f..dc528ffe 100644
--- a/include/gba/syscall.h
+++ b/include/gba/syscall.h
@@ -1,15 +1,15 @@
#ifndef GUARD_GBA_SYSCALL_H
#define GUARD_GBA_SYSCALL_H
-#define RESET_EWRAM 0x01
-#define RESET_IWRAM 0x02
-#define RESET_PALETTE 0x04
-#define RESET_VRAM 0x08
-#define RESET_OAM 0x10
-#define RESET_SIO_REGS 0x20
+#define RESET_EWRAM 0x01
+#define RESET_IWRAM 0x02
+#define RESET_PALETTE 0x04
+#define RESET_VRAM 0x08
+#define RESET_OAM 0x10
+#define RESET_SIO_REGS 0x20
#define RESET_SOUND_REGS 0x40
-#define RESET_REGS 0x80
-#define RESET_ALL 0xFF
+#define RESET_REGS 0x80
+#define RESET_ALL 0xFF
void SoftReset(u32 resetFlags);
@@ -22,28 +22,28 @@ u16 Sqrt(u32 num);
u16 ArcTan2(s16 x, s16 y);
#define CPU_SET_SRC_FIXED 0x01000000
-#define CPU_SET_16BIT 0x00000000
-#define CPU_SET_32BIT 0x04000000
+#define CPU_SET_16BIT 0x00000000
+#define CPU_SET_32BIT 0x04000000
-void CpuSet(const void *src, void *dest, u32 control);
+void CpuSet(const void* src, void* dest, u32 control);
#define CPU_FAST_SET_SRC_FIXED 0x01000000
-void CpuFastSet(const void *src, void *dest, u32 control);
+void CpuFastSet(const void* src, void* dest, u32 control);
-void BgAffineSet(struct BgAffineSrcData *src, struct BgAffineDstData *dest, s32 count);
+void BgAffineSet(struct BgAffineSrcData* src, struct BgAffineDstData* dest, s32 count);
-void ObjAffineSet(struct ObjAffineSrcData *src, void *dest, s32 count, s32 offset);
+void ObjAffineSet(struct ObjAffineSrcData* src, void* dest, s32 count, s32 offset);
-void LZ77UnCompWram(const void *src, void *dest);
+void LZ77UnCompWram(const void* src, void* dest);
-void LZ77UnCompVram(const void *src, void *dest);
+void LZ77UnCompVram(const void* src, void* dest);
-void RLUnCompWram(const void *src, void *dest);
+void RLUnCompWram(const void* src, void* dest);
-void RLUnCompVram(const void *src, void *dest);
+void RLUnCompVram(const void* src, void* dest);
-int MultiBoot(struct MultiBootParam *mp);
+int MultiBoot(struct MultiBootParam* mp);
s32 Div(s32 num, s32 denom);
diff --git a/include/gba/types.h b/include/gba/types.h
index 2ed9aa63..4f4136ed 100644
--- a/include/gba/types.h
+++ b/include/gba/types.h
@@ -3,119 +3,115 @@
#include <stdint.h>
-typedef uint8_t u8;
+typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;
typedef uint64_t u64;
-typedef int8_t s8;
-typedef int16_t s16;
-typedef int32_t s32;
-typedef int64_t s64;
+typedef int8_t s8;
+typedef int16_t s16;
+typedef int32_t s32;
+typedef int64_t s64;
-typedef volatile u8 vu8;
+typedef volatile u8 vu8;
typedef volatile u16 vu16;
typedef volatile u32 vu32;
typedef volatile u64 vu64;
-typedef volatile s8 vs8;
+typedef volatile s8 vs8;
typedef volatile s16 vs16;
typedef volatile s32 vs32;
typedef volatile s64 vs64;
-typedef float f32;
+typedef float f32;
typedef double f64;
-typedef u8 bool8;
+typedef u8 bool8;
typedef u16 bool16;
typedef u32 bool32;
-struct BgCnt
-{
- u16 priority:2;
- u16 charBaseBlock:2;
- u16 dummy:2;
- u16 mosaic:1;
- u16 palettes:1;
- u16 screenBaseBlock:5;
- u16 areaOverflowMode:1;
- u16 screenSize:2;
+struct BgCnt {
+ u16 priority : 2;
+ u16 charBaseBlock : 2;
+ u16 dummy : 2;
+ u16 mosaic : 1;
+ u16 palettes : 1;
+ u16 screenBaseBlock : 5;
+ u16 areaOverflowMode : 1;
+ u16 screenSize : 2;
};
typedef volatile struct BgCnt vBgCnt;
-struct PlttData
-{
- u16 r:5; // red
- u16 g:5; // green
- u16 b:5; // blue
- u16 unused_15:1;
+struct PlttData {
+ u16 r : 5; // red
+ u16 g : 5; // green
+ u16 b : 5; // blue
+ u16 unused_15 : 1;
};
-struct OamData
-{
- /*0x00*/ u32 y:8;
- /*0x01*/ u32 affineMode:2; // 0x1, 0x2 -> 0x4
- u32 objMode:2; // 0x4, 0x8 -> 0xC
- u32 mosaic:1; // 0x10
- u32 bpp:1; // 0x20
- u32 shape:2; // 0x40, 0x80 -> 0xC0
-
- /*0x02*/ u32 x:9;
- u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode
- u32 size:2; // 0x4000, 0x8000 -> 0xC000
-
- /*0x04*/ u16 tileNum:10; // 0x3FF
- u16 priority:2; // 0x400, 0x800 -> 0xC00
- u16 paletteNum:4;
+struct OamData {
+ /*0x00*/ u32 y : 8;
+ /*0x01*/ u32 affineMode : 2; // 0x1, 0x2 -> 0x4
+ u32 objMode : 2; // 0x4, 0x8 -> 0xC
+ u32 mosaic : 1; // 0x10
+ u32 bpp : 1; // 0x20
+ u32 shape : 2; // 0x40, 0x80 -> 0xC0
+
+ /*0x02*/ u32 x : 9;
+ u32 matrixNum : 5; // bits 3/4 are h-flip/v-flip if not in affine mode
+ u32 size : 2; // 0x4000, 0x8000 -> 0xC000
+
+ /*0x04*/ u16 tileNum : 10; // 0x3FF
+ u16 priority : 2; // 0x400, 0x800 -> 0xC00
+ u16 paletteNum : 4;
/*0x06*/ u16 affineParam;
};
-#define ST_OAM_HFLIP 0x08
-#define ST_OAM_VFLIP 0x10
+#define ST_OAM_HFLIP 0x08
+#define ST_OAM_VFLIP 0x10
#define ST_OAM_MNUM_FLIP_MASK 0x18
#define ST_OAM_OBJ_NORMAL 0
-#define ST_OAM_OBJ_BLEND 1
+#define ST_OAM_OBJ_BLEND 1
#define ST_OAM_OBJ_WINDOW 2
-#define ST_OAM_AFFINE_OFF 0
+#define ST_OAM_AFFINE_OFF 0
#define ST_OAM_AFFINE_NORMAL 1
-#define ST_OAM_AFFINE_ERASE 2
+#define ST_OAM_AFFINE_ERASE 2
#define ST_OAM_AFFINE_DOUBLE 3
-#define ST_OAM_AFFINE_ON_MASK 1
+#define ST_OAM_AFFINE_ON_MASK 1
#define ST_OAM_AFFINE_DOUBLE_MASK 2
#define ST_OAM_4BPP 0
#define ST_OAM_8BPP 1
-#define ST_OAM_SQUARE 0
+#define ST_OAM_SQUARE 0
#define ST_OAM_H_RECTANGLE 1
#define ST_OAM_V_RECTANGLE 2
-#define ST_OAM_SIZE_0 0
-#define ST_OAM_SIZE_1 1
-#define ST_OAM_SIZE_2 2
-#define ST_OAM_SIZE_3 3
+#define ST_OAM_SIZE_0 0
+#define ST_OAM_SIZE_1 1
+#define ST_OAM_SIZE_2 2
+#define ST_OAM_SIZE_3 3
-#define SPRITE_SIZE_8x8 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_SQUARE))
-#define SPRITE_SIZE_16x16 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_SQUARE))
-#define SPRITE_SIZE_32x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_SQUARE))
-#define SPRITE_SIZE_64x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_SQUARE))
+#define SPRITE_SIZE_8x8 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_SQUARE))
+#define SPRITE_SIZE_16x16 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_SQUARE))
+#define SPRITE_SIZE_32x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_SQUARE))
+#define SPRITE_SIZE_64x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_SQUARE))
-#define SPRITE_SIZE_16x8 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_H_RECTANGLE))
-#define SPRITE_SIZE_32x8 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_H_RECTANGLE))
-#define SPRITE_SIZE_32x16 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_H_RECTANGLE))
-#define SPRITE_SIZE_64x32 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_H_RECTANGLE))
+#define SPRITE_SIZE_16x8 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_H_RECTANGLE))
+#define SPRITE_SIZE_32x8 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_H_RECTANGLE))
+#define SPRITE_SIZE_32x16 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_H_RECTANGLE))
+#define SPRITE_SIZE_64x32 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_H_RECTANGLE))
-#define SPRITE_SIZE_8x16 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_V_RECTANGLE))
-#define SPRITE_SIZE_8x32 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_V_RECTANGLE))
-#define SPRITE_SIZE_16x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_V_RECTANGLE))
-#define SPRITE_SIZE_32x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_V_RECTANGLE))
+#define SPRITE_SIZE_8x16 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_V_RECTANGLE))
+#define SPRITE_SIZE_8x32 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_V_RECTANGLE))
+#define SPRITE_SIZE_16x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_V_RECTANGLE))
+#define SPRITE_SIZE_32x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_V_RECTANGLE))
-#define SPRITE_SIZE(dim) ((SPRITE_SIZE_##dim >> 2) & 0x03)
+#define SPRITE_SIZE(dim) ((SPRITE_SIZE_##dim >> 2) & 0x03)
#define SPRITE_SHAPE(dim) (SPRITE_SIZE_##dim & 0x03)
-struct BgAffineSrcData
-{
+struct BgAffineSrcData {
s32 texX;
s32 texY;
s16 scrX;
@@ -125,8 +121,7 @@ struct BgAffineSrcData
u16 alpha;
};
-struct BgAffineDstData
-{
+struct BgAffineDstData {
s16 pa;
s16 pb;
s16 pc;
@@ -135,134 +130,127 @@ struct BgAffineDstData
s32 dy;
};
-struct ObjAffineSrcData
-{
+struct ObjAffineSrcData {
s16 xScale;
s16 yScale;
u16 rotation;
};
// Normal SIO Control Structure
-struct SioNormalCnt
-{
- u16 sck_I_O:1; // Clock I/O Select
- u16 sck:1; // Internal Clock Select
- u16 ackRecv:1; // Transfer Enable Flag Receive
- u16 ackSend:1; // Transfer Enable Flag Send
- u16 unused_6_4:3;
- u16 enable:1; // SIO Enable
- u16 unused_11_8:4;
- u16 mode:2; // Communication Mode Select
- u16 ifEnable:1; // Interrupt Request Enable
- u16 unused_15:1;
- u8 data; // Data
- u8 unused_31_24;
+struct SioNormalCnt {
+ u16 sck_I_O : 1; // Clock I/O Select
+ u16 sck : 1; // Internal Clock Select
+ u16 ackRecv : 1; // Transfer Enable Flag Receive
+ u16 ackSend : 1; // Transfer Enable Flag Send
+ u16 unused_6_4 : 3;
+ u16 enable : 1; // SIO Enable
+ u16 unused_11_8 : 4;
+ u16 mode : 2; // Communication Mode Select
+ u16 ifEnable : 1; // Interrupt Request Enable
+ u16 unused_15 : 1;
+ u8 data; // Data
+ u8 unused_31_24;
};
-#define ST_SIO_8BIT_MODE 0 // Normal 8-bit communication mode
-#define ST_SIO_32BIT_MODE 1 // Normal 32-bit communication mode
+#define ST_SIO_8BIT_MODE 0 // Normal 8-bit communication mode
+#define ST_SIO_32BIT_MODE 1 // Normal 32-bit communication mode
-#define ST_SIO_SCK_OUT 0 // Select external clock
-#define ST_SIO_SCK_IN 1 // Select internal clock
-#define ST_SIO_IN_SCK_256K 0 // Select internal clock 256KHz
-#define ST_SIO_IN_SCK_2M 1 // Select 2MHz
+#define ST_SIO_SCK_OUT 0 // Select external clock
+#define ST_SIO_SCK_IN 1 // Select internal clock
+#define ST_SIO_IN_SCK_256K 0 // Select internal clock 256KHz
+#define ST_SIO_IN_SCK_2M 1 // Select 2MHz
// Multi-player SIO Control Structure
-struct SioMultiCnt
-{
- u16 baudRate:2; // baud rate
- u16 si:1; // SI terminal
- u16 sd:1; // SD terminal
- u16 id:2; // ID
- u16 error:1; // error flag
- u16 enable:1; // SIO enable
- u16 unused_11_8:4;
- u16 mode:2; // communication mode (should equal 2)
- u16 ifEnable:1; // IRQ enable
- u16 unused_15:1;
- u16 data; // data
+struct SioMultiCnt {
+ u16 baudRate : 2; // baud rate
+ u16 si : 1; // SI terminal
+ u16 sd : 1; // SD terminal
+ u16 id : 2; // ID
+ u16 error : 1; // error flag
+ u16 enable : 1; // SIO enable
+ u16 unused_11_8 : 4;
+ u16 mode : 2; // communication mode (should equal 2)
+ u16 ifEnable : 1; // IRQ enable
+ u16 unused_15 : 1;
+ u16 data; // data
};
-#define ST_SIO_MULTI_MODE 2 // Multi-play communication mode
+#define ST_SIO_MULTI_MODE 2 // Multi-play communication mode
-#define ST_SIO_9600_BPS 0 // Baud rate 9600 bps
-#define ST_SIO_38400_BPS 1 // 38400 bps
-#define ST_SIO_57600_BPS 2 // 57600 bps
-#define ST_SIO_115200_BPS 3 // 115200 bps
-#define ST_SIO_MULTI_PARENT 1 // Multi-play communication Connect master
-#define ST_SIO_MULTI_CHILD 0 // Connect slave
+#define ST_SIO_9600_BPS 0 // Baud rate 9600 bps
+#define ST_SIO_38400_BPS 1 // 38400 bps
+#define ST_SIO_57600_BPS 2 // 57600 bps
+#define ST_SIO_115200_BPS 3 // 115200 bps
+#define ST_SIO_MULTI_PARENT 1 // Multi-play communication Connect master
+#define ST_SIO_MULTI_CHILD 0 // Connect slave
// UART - SIO Control Structure
-struct SioUartCnt
-{
- u16 baudRate:2; // Baud Rate
- u16 ctsEnable:1; // Send Signal Enable
- u16 paritySelect:1; // Parity Even/Odd
- u16 transDataFull:1; // Transmit Data Full
- u16 recvDataEmpty:1; // Receive Data Empty
- u16 error:1; // Error Detect
- u16 length:1; // Data Length
- u16 fifoEnable:1; // FIFO Enable
- u16 parityEnable:1; // Parity Enable
- u16 transEnable:1; // Transmitter Enable
- u16 recvEnable:1; // Receiver Enable
- u16 mode:2; // Communication Mode Select
- u16 ifEnable:1; // Interrupt Request Enable
- u16 unused_15:1;
- u8 data; // Data
- u8 unused_31_24;
+struct SioUartCnt {
+ u16 baudRate : 2; // Baud Rate
+ u16 ctsEnable : 1; // Send Signal Enable
+ u16 paritySelect : 1; // Parity Even/Odd
+ u16 transDataFull : 1; // Transmit Data Full
+ u16 recvDataEmpty : 1; // Receive Data Empty
+ u16 error : 1; // Error Detect
+ u16 length : 1; // Data Length
+ u16 fifoEnable : 1; // FIFO Enable
+ u16 parityEnable : 1; // Parity Enable
+ u16 transEnable : 1; // Transmitter Enable
+ u16 recvEnable : 1; // Receiver Enable
+ u16 mode : 2; // Communication Mode Select
+ u16 ifEnable : 1; // Interrupt Request Enable
+ u16 unused_15 : 1;
+ u8 data; // Data
+ u8 unused_31_24;
};
-#define ST_SIO_UART_MODE 3 // UART communication mode
+#define ST_SIO_UART_MODE 3 // UART communication mode
-#define ST_SIO_UART_7BIT 0 // UART communication data length 7 bits
-#define ST_SIO_UART_8BIT 1 // 8 bits
-#define ST_SIO_PARITY_EVEN 0 // Even parity
-#define ST_SIO_PARITY_ODD 1 // Odd parity
+#define ST_SIO_UART_7BIT 0 // UART communication data length 7 bits
+#define ST_SIO_UART_8BIT 1 // 8 bits
+#define ST_SIO_PARITY_EVEN 0 // Even parity
+#define ST_SIO_PARITY_ODD 1 // Odd parity
// JOY Bus Communication Control Structure
-struct JoyCnt
-{
- u8 ifReset:1; // JOY Bus Reset Interrupt Request
- u8 ifRecv:1; // JOY Bus Received Interrupt Request
- u8 ifSend:1; // JOY Bus Sent Interrupt Request
- u8 unused_5_3:3;
- u8 ifEnable:1; // Interrupt Request Enable
- u8 unused_7:1;
+struct JoyCnt {
+ u8 ifReset : 1; // JOY Bus Reset Interrupt Request
+ u8 ifRecv : 1; // JOY Bus Received Interrupt Request
+ u8 ifSend : 1; // JOY Bus Sent Interrupt Request
+ u8 unused_5_3 : 3;
+ u8 ifEnable : 1; // Interrupt Request Enable
+ u8 unused_7 : 1;
};
// JOY Bus Communication Status Structure
-struct JoyStat
-{
- u8 unused_0:1;
- u8 recv:1; // Receive Status
- u8 unused_2:1;
- u8 send:1; // Send Status
- u8 flags:2; // General Flag
- u8 unused_7_6:2;
+struct JoyStat {
+ u8 unused_0 : 1;
+ u8 recv : 1; // Receive Status
+ u8 unused_2 : 1;
+ u8 send : 1; // Send Status
+ u8 flags : 2; // General Flag
+ u8 unused_7_6 : 2;
};
// General Input/Output Control Structure
-struct RCnt
-{
- u8 sc:1; // Data
- u8 sd:1;
- u8 si:1;
- u8 so:1;
- u8 sc_i_o:1; // I/O Select
- u8 sd_i_o:1;
- u8 si_i_o:1;
- u8 so_i_o:1;
- u8 ifEnable:1; // Interrupt Request Enable
- u8 unused_13_9:5;
- u8 sioModeMaster:2; // SIO Mode Master
+struct RCnt {
+ u8 sc : 1; // Data
+ u8 sd : 1;
+ u8 si : 1;
+ u8 so : 1;
+ u8 sc_i_o : 1; // I/O Select
+ u8 sd_i_o : 1;
+ u8 si_i_o : 1;
+ u8 so_i_o : 1;
+ u8 ifEnable : 1; // Interrupt Request Enable
+ u8 unused_13_9 : 5;
+ u8 sioModeMaster : 2; // SIO Mode Master
};
-#define ST_R_SIO_MASTER_MODE 0 // SIO master mode
-#define ST_R_DIRECT_MODE 2 // General input/output communication mode
-#define ST_R_JOY_MODE 3 // JOY communication mode
+#define ST_R_SIO_MASTER_MODE 0 // SIO master mode
+#define ST_R_DIRECT_MODE 2 // General input/output communication mode
+#define ST_R_JOY_MODE 3 // JOY communication mode
-#define ST_R_IN 0 // Select input
-#define ST_R_OUT 1 // Select output
+#define ST_R_IN 0 // Select input
+#define ST_R_OUT 1 // Select output
#endif // GUARD_GBA_TYPES_H
diff --git a/include/global.h b/include/global.h
index 5e1677ca..13f67e6e 100644
--- a/include/global.h
+++ b/include/global.h
@@ -11,15 +11,16 @@
#define asm_comment(x) asm volatile("@ -- " x " -- ")
#define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided")
-#if defined (__APPLE__) || defined (__CYGWIN__)
+#if defined(__APPLE__) || defined(__CYGWIN__)
// Get the IDE to stfu
// We define it this way to fool preproc.
-#define INCBIN(...) {0}
-#define INCBIN_U8 INCBIN
+#define INCBIN(...) \
+ { 0 }
+#define INCBIN_U8 INCBIN
#define INCBIN_U16 INCBIN
#define INCBIN_U32 INCBIN
-#define INCBIN_S8 INCBIN
+#define INCBIN_S8 INCBIN
#define INCBIN_S16 INCBIN
#define INCBIN_S32 INCBIN
#define _(x) (x)
@@ -28,20 +29,20 @@
#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0]))
-#define SWAP(a, b, temp) \
-{ \
- temp = a; \
- a = b; \
- b = temp; \
-}
+#define SWAP(a, b, temp) \
+ { \
+ temp = a; \
+ a = b; \
+ b = temp; \
+ }
// useful math macros
// Converts a number to Q8.8 fixed-point format
-#define Q_8_8(n) ((s16)((n) * 256))
+#define Q_8_8(n) ((s16)((n)*256))
// Converts a number to Q4.12 fixed-point format
-#define Q_4_12(n) ((s16)((n) * 4096))
+#define Q_4_12(n) ((s16)((n)*4096))
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) >= (b) ? (a) : (b))
diff --git a/include/greatFairy.h b/include/greatFairy.h
index 77762242..073f6a37 100644
--- a/include/greatFairy.h
+++ b/include/greatFairy.h
@@ -2,10 +2,10 @@
#define GREATFAIRY_H
extern u32 __modsi3(u32, u32);
-extern void InitializeAnimation(Entity *, u32);
+extern void InitializeAnimation(Entity*, u32);
extern void sub_08087380();
extern u32 CheckRoomFlag();
-extern Entity *sub_080873AC(Entity*, u32, u32);
+extern Entity* sub_080873AC(Entity*, u32, u32);
extern void PositionRelative();
extern void CopyPosition();
extern void DoFade();
@@ -19,19 +19,19 @@ extern void sub_080045D4();
extern void sub_0806F69C();
extern u32 Random();
-extern void (*gGreatFairy[11])(Entity *);
-extern void (*gGreatFairyBehaviors[6])(Entity *);
-extern void (*gGreatFairyWings[3])(Entity *);
-extern void (*gGreatFairyWake[2])(Entity *);
-extern void (*gGreatFairyMini[3])(Entity *);
-extern void (*gGreatFairyMiniAnim[3])(Entity *);
-extern void (*gGreatFairyDrip[2])(Entity *);
-extern void (*gGreatFairyRipple[2])(Entity *);
-extern void (*gGreatFairyBigRipple[2])(Entity *);
-extern void (*gGreatFairyEnergy[2])(Entity *);
-extern void (*gGreatFairyInteract1[4])(Entity *);
-extern void (*gGreatFairyInteract2[5])(Entity *);
-extern void (*gUnk_081207A4[2])(Entity *);
+extern void (*gGreatFairy[11])(Entity*);
+extern void (*gGreatFairyBehaviors[6])(Entity*);
+extern void (*gGreatFairyWings[3])(Entity*);
+extern void (*gGreatFairyWake[2])(Entity*);
+extern void (*gGreatFairyMini[3])(Entity*);
+extern void (*gGreatFairyMiniAnim[3])(Entity*);
+extern void (*gGreatFairyDrip[2])(Entity*);
+extern void (*gGreatFairyRipple[2])(Entity*);
+extern void (*gGreatFairyBigRipple[2])(Entity*);
+extern void (*gGreatFairyEnergy[2])(Entity*);
+extern void (*gGreatFairyInteract1[4])(Entity*);
+extern void (*gGreatFairyInteract2[5])(Entity*);
+extern void (*gUnk_081207A4[2])(Entity*);
extern u32 gUnk_0810C2E4;
extern RoomControls gRoomControls;
diff --git a/include/item.h b/include/item.h
index 4ef90ee3..74e207c3 100644
--- a/include/item.h
+++ b/include/item.h
@@ -4,8 +4,8 @@
#define ITEM_H
/* On hold until naming conflicts are resolved */
-/*
- enum
+/*
+ enum
{
Untyped,
SmithSword = 0x01,
@@ -127,15 +127,15 @@
LongSpin = 0x75
} ItemType;
*/
- typedef struct {
- u8 unk;
- u8 behaviorID;
- u8 unk2;
- u8 unk3;
- u8 stateID;
- u8 filler[4];
- u8 unk4;
- u8 filler2[4];
- u8 unk5;
- } ItemBehavior;
+typedef struct {
+ u8 unk;
+ u8 behaviorID;
+ u8 unk2;
+ u8 unk3;
+ u8 stateID;
+ u8 filler[4];
+ u8 unk4;
+ u8 filler2[4];
+ u8 unk5;
+} ItemBehavior;
#endif \ No newline at end of file
diff --git a/include/link.h b/include/link.h
index 3050756a..a8a02bdf 100644
--- a/include/link.h
+++ b/include/link.h
@@ -5,64 +5,64 @@
#include "entity.h"
typedef struct {
- u8 filler[2];
- u8 jumpStatus;
- u8 filler2[2];
- u8 heldObject;
- u8 pushedObject;
- u8 unk;
- u16 unk2;
- u8 unk3;
- u8 keepFacing;
- u8 linkAction;
- u8 filler3[2];
- u8 hurtBlinkSpeed;
- u8 filler4[4];
- u16 filler5[3];
- u8 filler6[8];
- u16 filler7[2];
- u8 swimState;
- u8 filler8[5];
- u8 *unk4;
+ u8 filler[2];
+ u8 jumpStatus;
+ u8 filler2[2];
+ u8 heldObject;
+ u8 pushedObject;
+ u8 unk;
+ u16 unk2;
+ u8 unk3;
+ u8 keepFacing;
+ u8 linkAction;
+ u8 filler3[2];
+ u8 hurtBlinkSpeed;
+ u8 filler4[4];
+ u16 filler5[3];
+ u8 filler6[8];
+ u16 filler7[2];
+ u8 swimState;
+ u8 filler8[5];
+ u8* unk4;
union {
u32 all;
- struct {
- u32 filler9:3;
- u32 noMinishCap:1;
- u32 pullingState:1;
- u32 windyState:1;
- u32 filler10:4;
- u32 slipperyState:1;
- u32 filler11:5;
- u32 filler11b:16;
- } PACKED b;
+ struct {
+ u32 filler9 : 3;
+ u32 noMinishCap : 1;
+ u32 pullingState : 1;
+ u32 windyState : 1;
+ u32 filler10 : 4;
+ u32 slipperyState : 1;
+ u32 filler11 : 5;
+ u32 filler11b : 16;
+ } PACKED b;
} flags;
- u8 filler12[6];
- u16 unk5;
- u8 filler13[2];
- u8 swordGoldParticle:1;
- u8 swordBlueParticle:1;
- u8 filler14:6;
- u8 unk6;
- u8 filler15[75];
- u8 unk7;
+ u8 filler12[6];
+ u16 unk5;
+ u8 filler13[2];
+ u8 swordGoldParticle : 1;
+ u8 swordBlueParticle : 1;
+ u8 filler14 : 6;
+ u8 unk6;
+ u8 filler15[75];
+ u8 unk7;
} LinkState;
typedef struct {
- u8 walletType;
- u8 heartPieces;
- u8 health;
- u8 maxHealth;
- u8 bombCount;
- u8 arrowCount;
- u8 bombBagType;
- u8 quiverType;
- u8 filler[4];
- u8 itemOnA;
- u8 itemonB;
- u8 filler2[10];
- u16 rupees;
- u8 filler3[12];
+ u8 walletType;
+ u8 heartPieces;
+ u8 health;
+ u8 maxHealth;
+ u8 bombCount;
+ u8 arrowCount;
+ u8 bombBagType;
+ u8 quiverType;
+ u8 filler[4];
+ u8 itemOnA;
+ u8 itemonB;
+ u8 filler2[10];
+ u16 rupees;
+ u8 filler3[12];
} Stats;
extern LinkState gLinkState;
diff --git a/include/main.h b/include/main.h
index 3414c9c3..61c3f6ae 100644
--- a/include/main.h
+++ b/include/main.h
@@ -1,17 +1,17 @@
#ifndef MAIN_H
#define MAIN_H
-typedef struct { //0x03001000
- u8 field_0x0;
- u8 field_0x1;
- u8 field_0x2;
- u8 field_0x3;
- u8 field_0x4;
- u16 field_0x6;
- u8 field_0x8;
- u8 field_0x9;
- u8 field_0xa;
- u8 field_0xb;
- u32 ticks;
+typedef struct { // 0x03001000
+ u8 field_0x0;
+ u8 field_0x1;
+ u8 field_0x2;
+ u8 field_0x3;
+ u8 field_0x4;
+ u16 field_0x6;
+ u8 field_0x8;
+ u8 field_0x9;
+ u8 field_0xa;
+ u8 field_0xb;
+ u32 ticks;
} MainStruct;
extern s32 sub_08055F70();
diff --git a/include/menu.h b/include/menu.h
index b1f799b7..5ff44751 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -8,12 +8,12 @@ typedef struct {
u8 transitionType;
u8 unk4;
u8 state;
- u8 unk6;
- u8 unk7;
- u8 unk8;
+ u8 unk6;
+ u8 unk7;
+ u8 unk8;
u16 unk2;
u16 fadeInTime;
- u8 filler2 [4];
+ u8 filler2[4];
u32 filler3[3];
} Menu;
diff --git a/include/readKeyInput.h b/include/readKeyInput.h
index 3fe77ce6..27114243 100644
--- a/include/readKeyInput.h
+++ b/include/readKeyInput.h
@@ -1,9 +1,9 @@
struct Input {
- u16 unk0;
- u16 unk1;
- u16 unk2;
- u8 unk3;
- u8 unk4;
+ u16 unk0;
+ u16 unk1;
+ u16 unk2;
+ u8 unk3;
+ u8 unk4;
};
-//void ReadKeyInput(void);
+// void ReadKeyInput(void);
diff --git a/include/room.h b/include/room.h
index ed8fc8ff..6345e352 100644
--- a/include/room.h
+++ b/include/room.h
@@ -6,8 +6,8 @@
/*
typedef struct {
- u8 areaID;
- u8 roomID;
+ u8 areaID;
+ u8 roomID;
} RoomID;
*/
@@ -15,34 +15,34 @@ typedef struct {
u16 unk2;
u8 unk3;
u8 unk4;
- u8 areaID;
- u8 roomID;
+ u8 areaID;
+ u8 roomID;
u16 roomOriginX;
- u16 roomOriginY;
- s16 roomScrollX;
- s16 roomScrollY;
- u8 unk5;
+ u16 roomOriginY;
+ s16 roomScrollX;
+ s16 roomScrollY;
+ u8 unk5;
u8 unk6;
u8 filler[4];
- u8 screenShakeMagnitude;
- u8 unk7;
- u16 screenShakeTime;
- u16 filler2[6];
- u8 filler3[4];
- u16 filler4[4];
- Entity * cameraTarget;
+ u8 screenShakeMagnitude;
+ u8 unk7;
+ u16 screenShakeTime;
+ u16 filler2[6];
+ u8 filler3[4];
+ u16 filler4[4];
+ Entity* cameraTarget;
} RoomControls;
typedef struct {
- u8 filler[6];
- u8 itemForSaleIndex;
- u16 unk;
- u8 unk2;
- u16 filler2[3];
- u8 filler3[4];
- u8 filler4[52];
- u8 filler5[28];
- u32 greatFairyState;
+ u8 filler[6];
+ u8 itemForSaleIndex;
+ u16 unk;
+ u8 unk2;
+ u16 filler2[3];
+ u8 filler3[4];
+ u8 filler4[52];
+ u8 filler5[28];
+ u32 greatFairyState;
} RoomVars;
extern RoomControls gRoomControls;
diff --git a/include/screen.h b/include/screen.h
index a2c0ba5f..3c732093 100644
--- a/include/screen.h
+++ b/include/screen.h
@@ -4,67 +4,67 @@
#include "global.h"
typedef struct {
- u16 lcdControl2;
- u32 unk;
- u16 lcdControl1;
+ u16 lcdControl2;
+ u32 unk;
+ u16 lcdControl1;
} LcdControls;
typedef struct {
- u16 bg0Control;
- u16 bg0xOffset;
- u16 bg0yOffset;
- u16 bg0Updated;
- u32 unk;
+ u16 bg0Control;
+ u16 bg0xOffset;
+ u16 bg0yOffset;
+ u16 bg0Updated;
+ u32 unk;
} BgSettings;
typedef struct {
- u16 bg2Control;
- u16 bg2xOffset;
- u16 bg2yOffset;
- u16 unk;
- u32 unk2;
- u16 bg3Control;
- u16 bg3xOffset;
- u16 bg3yOffset;
- u16 unk4;
- u32 unk5;
+ u16 bg2Control;
+ u16 bg2xOffset;
+ u16 bg2yOffset;
+ u16 unk;
+ u32 unk2;
+ u16 bg3Control;
+ u16 bg3xOffset;
+ u16 bg3yOffset;
+ u16 unk4;
+ u32 unk5;
} BgAffSettings;
typedef struct {
- u16 bg2dx;
- u16 bg2dmx;
- u16 bg2dy;
- u16 bg2dmy;
- u16 bg2xPointLeastSig;
- u16 bg2xPointMostSig;
- u16 bg2yPointLeastSig;
- u16 bg2yPointMostSig;
- u16 bg3dx;
- u16 bg3dmx;
- u16 bg3dy;
- u16 bg3dmy;
- u16 bg3xPointLeastSig;
- u16 bg3xPointMostSig;
- u16 bg3yPointLeastSig;
- u16 bg3yPointMostSig;
- u16 window0HorizontalDimensions;
- u16 window1HorizontalDimensions;
- u16 window0VerticalDimensions;
- u16 window1VerticalDimensions;
- u16 windowInsideControl;
- u16 windowOutsideControl;
- u16 mosaicSize;
- u16 layerFXControl;
- u16 alphaBlend;
- u16 layerBrightness;
+ u16 bg2dx;
+ u16 bg2dmx;
+ u16 bg2dy;
+ u16 bg2dmy;
+ u16 bg2xPointLeastSig;
+ u16 bg2xPointMostSig;
+ u16 bg2yPointLeastSig;
+ u16 bg2yPointMostSig;
+ u16 bg3dx;
+ u16 bg3dmx;
+ u16 bg3dy;
+ u16 bg3dmy;
+ u16 bg3xPointLeastSig;
+ u16 bg3xPointMostSig;
+ u16 bg3yPointLeastSig;
+ u16 bg3yPointMostSig;
+ u16 window0HorizontalDimensions;
+ u16 window1HorizontalDimensions;
+ u16 window0VerticalDimensions;
+ u16 window1VerticalDimensions;
+ u16 windowInsideControl;
+ u16 windowOutsideControl;
+ u16 mosaicSize;
+ u16 layerFXControl;
+ u16 alphaBlend;
+ u16 layerBrightness;
} BgControls;
typedef struct {
- LcdControls lcd;
- BgSettings bg1;
- BgSettings bg2;
- BgAffSettings affine;
- BgControls controls;
+ LcdControls lcd;
+ BgSettings bg1;
+ BgSettings bg2;
+ BgAffSettings affine;
+ BgControls controls;
} Screen;
#endif \ No newline at end of file
diff --git a/include/textbox.h b/include/textbox.h
index dbc11020..a25e0723 100644
--- a/include/textbox.h
+++ b/include/textbox.h
@@ -4,16 +4,16 @@
#include "global.h"
typedef struct {
- u8 doTextBox;
- u8 unk;
- u8 textSpeed;
- u8 unk3; //HI?
- u8 textWindowWidth;
- u8 textWindowHeight;
- u8 textWindowPosX;
- u8 textWindowPosY;
- u16 textIndex;
- u16 unk2; //HI?
+ u8 doTextBox;
+ u8 unk;
+ u8 textSpeed;
+ u8 unk3; // HI?
+ u8 textWindowWidth;
+ u8 textWindowHeight;
+ u8 textWindowPosX;
+ u8 textWindowPosY;
+ u16 textIndex;
+ u16 unk2; // HI?
} TextBox;
extern TextBox gTextBox;