summaryrefslogtreecommitdiff
path: root/include/gba/defines.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/gba/defines.h')
-rw-r--r--include/gba/defines.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/include/gba/defines.h b/include/gba/defines.h
new file mode 100644
index 000000000..005efb079
--- /dev/null
+++ b/include/gba/defines.h
@@ -0,0 +1,49 @@
+#ifndef GUARD_GBA_DEFINES
+#define GUARD_GBA_DEFINES
+
+#include <stddef.h>
+
+#define TRUE 1
+#define FALSE 0
+
+#define IWRAM_DATA __attribute__((section("iwram_data")))
+#define EWRAM_DATA __attribute__((section("ewram_data")))
+
+#define ALIGNED(n) __attribute__((aligned(n)))
+
+// The original build process placed COMMON data (i.e. uninitialized globals)
+// in IWRAM after the static variables.
+// When ld places COMMON variables in the output, it aligns the variable
+// according to the size of the variable, with a maximum alignment of 16. This
+// results in large alignment values.
+// Initialized variables are aligned according to the size of the largest
+// primitive type in the object, so their alignment will often be smaller.
+// However, we cannot use COMMON data in pokeruby because the order of COMMON
+// data in the output is not reliable. Instead, we need to initialize the
+// variables so that their order in the source file is preserved in the output.
+// But using initialized variables brings us into conflict with those large
+// alignment values.
+// These macros allow us to get around this by manually specifying what the
+// alignment would be if the variable were uninitialized.
+#define COMM(decl, n) IWRAM_DATA ALIGNED(1 << n) decl = {0};
+#define COMM_2(decl) COMM(decl, 2)
+#define COMM_4(decl) COMM(decl, 4)
+
+#define SOUND_INFO_PTR (*(struct SoundInfo **)0x3007FF0)
+#define INTR_CHECK (*(u16 *)0x3007FF8)
+#define INTR_VECTOR (*(void **)0x3007FFC)
+
+#define OBJ_VRAM0 0x6010000 // when BG is in tilemap mode
+#define OBJ_VRAM1 0x6014000 // when BG is in bitmap mode
+
+#define OAM 0x7000000
+
+#define DISPLAY_WIDTH 240
+#define DISPLAY_HEIGHT 160
+
+#define TILE_SIZE_4BPP 32
+#define TILE_SIZE_8BPP 64
+
+#define TOTAL_OBJ_TILE_COUNT 1024
+
+#endif // GUARD_GBA_DEFINES