forked from snesrev/zelda3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
types.h
95 lines (77 loc) · 2.19 KB
/
types.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#ifndef ZELDA3_TYPES_H_
#define ZELDA3_TYPES_H_
#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>
// Build time config options
enum {
kEnableLargeScreen = 1,
// How much extra spacing to add on the sides
kPpuExtraLeftRight = kEnableLargeScreen ? 96 : 0,
};
typedef uint8_t uint8;
typedef int8_t int8;
typedef uint16_t uint16;
typedef int16_t int16;
typedef uint32_t uint32;
typedef int32_t int32;
typedef uint64_t uint64;
typedef int64_t int64;
typedef unsigned int uint;
#define arraysize(x) sizeof(x)/sizeof(x[0])
#define sign8(x) ((x) & 0x80)
#define sign16(x) ((x) & 0x8000)
#define load24(x) ((*(uint32*)&(x))&0xffffff)
#ifdef _MSC_VER
#define countof _countof
#define NORETURN __declspec(noreturn)
#define FORCEINLINE __forceinline
#define NOINLINE __declspec(noinline)
#else
#define countof(a) (sizeof(a)/sizeof(*(a)))
#define NORETURN
#define FORCEINLINE inline
#define NOINLINE
#endif
#ifdef _DEBUG
#define kDebugFlag 1
#else
#define kDebugFlag 0
#endif
static FORCEINLINE uint16 abs16(uint16 t) { return sign16(t) ? -t : t; }
static FORCEINLINE uint8 abs8(uint8 t) { return sign8(t) ? -t : t; }
static FORCEINLINE int IntMin(int a, int b) { return a < b ? a : b; }
static FORCEINLINE int IntMax(int a, int b) { return a > b ? a : b; }
static FORCEINLINE uint UintMin(uint a, uint b) { return a < b ? a : b; }
static FORCEINLINE uint UintMax(uint a, uint b) { return a > b ? a : b; }
// windows.h defines this too
#ifdef HIBYTE
#undef HIBYTE
#endif
#define BYTE(x) (*(uint8*)&(x))
#define HIBYTE(x) (((uint8*)&(x))[1])
#define WORD(x) (*(uint16*)&(x))
#define DWORD(x) (*(uint32*)&(x))
#define XY(x, y) ((y)*64+(x))
static inline uint16 swap16(uint16 v) { return (v << 8) | (v >> 8); }
typedef struct Point16U {
uint16 x, y;
} Point16U;
typedef struct PointU8 {
uint8 x, y;
} PointU8;
typedef struct Pair16U {
uint16 a, b;
} Pair16U;
typedef struct PairU8 {
uint8 a, b;
} PairU8;
typedef struct ProjectSpeedRet {
uint8 x, y;
uint8 xdiff, ydiff;
} ProjectSpeedRet;
typedef struct OamEnt {
uint8 x, y, charnum, flags;
} OamEnt;
void NORETURN Die(const char *error);
#endif // ZELDA3_TYPES_H_