diff options
Diffstat (limited to 'include/types.h')
-rw-r--r-- | include/types.h | 120 |
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__ |