summaryrefslogtreecommitdiff
path: root/include/types.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/types.h')
-rw-r--r--include/types.h120
1 files changed, 120 insertions, 0 deletions
diff --git a/include/types.h b/include/types.h
new file mode 100644
index 0000000..5ad8121
--- /dev/null
+++ b/include/types.h
@@ -0,0 +1,120 @@
+//
+// Basic structs and typedefs
+//
+//! \file tonc_types.h
+//! \author J Vijn
+//! \date 20060508 - 20060508
+//
+// === NOTES ===
+// * This is a _small_ set of typedefs, #defines and inlines that can
+// be found in tonclib, and might not represent the
+// final forms.
+
+
+#ifndef __TYPES__
+#define __TYPES__
+
+
+// === GCC ATTRIBUTES =================================================
+
+// alignment boundary
+#define ALIGN(_n) __attribute__((aligned(_n)))
+#define ALIGN4 __attribute__((aligned(4)))
+
+// pack aggregate members
+#define PACKED __attribute__((packed))
+
+
+// === TYPES: =========================================================
+
+// --- primary typedefs -----------------------------------------------
+typedef unsigned char u8, byte;
+typedef unsigned short u16, hword;
+typedef unsigned int u32, word;
+typedef unsigned long long u64;
+
+typedef signed char s8;
+typedef signed short s16;
+typedef signed int s32;
+typedef signed long long s64;
+
+// and volatiles for registers 'n stuff
+typedef volatile u8 vu8;
+typedef volatile u16 vu16;
+typedef volatile u32 vu32;
+typedef volatile u64 vu64;
+
+typedef volatile s8 vs8;
+typedef volatile s16 vs16;
+typedef volatile s32 vs32;
+typedef volatile s64 vs64;
+
+// and consts too for parameters *sigh*
+typedef const u8 cu8;
+typedef const u16 cu16;
+typedef const u32 cu32;
+typedef const u64 cu64;
+
+typedef const s8 cs8;
+typedef const s16 cs16;
+typedef const s32 cs32;
+typedef const s64 cs64;
+
+typedef struct { u32 data[8]; } BLOCK;
+
+// --- secondary typedefs ---------------------------------------------
+
+typedef u16 COLOR;
+
+// NOTE, u32[]!
+typedef struct { u32 data[8]; } TILE, TILE4;
+typedef struct { u32 data[16]; } TILE8;
+
+
+// --- memory map structs --------------------------------------------
+
+// --- PAL types ---
+typedef COLOR PALBANK[16];
+
+// --- VRAM types ---
+
+typedef COLOR M3LINE[240];
+typedef u8 M4LINE[240]; // NOTE u8, not u16!!
+typedef COLOR M5LINE[160];
+
+typedef TILE CHARBLOCK[512];
+typedef TILE8 CHARBLOCK8[256];
+
+// --- OAM structs ---
+// NOTE: OATR and OAFF are interlaced; when using affine objs,
+// struct/DMA/mem copies will give bad results
+typedef struct OBJ_ATTR
+{
+ u16 attr0;
+ u16 attr1;
+ u16 attr2;
+ s16 fill;
+} ALIGN4 OBJ_ATTR;
+
+typedef struct OBJ_AFFINE
+{
+ u16 fill0[3]; s16 pa;
+ u16 fill1[3]; s16 pb;
+ u16 fill2[3]; s16 pc;
+ u16 fill3[3]; s16 pd;
+} ALIGN4 OBJ_AFFINE;
+
+
+// === DEFINES ========================================================
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+// `inline' inlines the function when -O > 0 when called,
+// but also creates a body for the function itself
+// `static' removes the body as well
+#define INLINE static inline
+
+
+#endif // __TYPES__