aboutsummaryrefslogtreecommitdiff
path: root/arm9/source/bang.h
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/source/bang.h')
-rw-r--r--arm9/source/bang.h52
1 files changed, 30 insertions, 22 deletions
diff --git a/arm9/source/bang.h b/arm9/source/bang.h
index 110e243..b85e9cd 100644
--- a/arm9/source/bang.h
+++ b/arm9/source/bang.h
@@ -1,31 +1,39 @@
#ifndef BANG_H_
#define BANG_H_
- #define SET_HIGH(v,high) v = high << 8 | (v & 0x00ff)
- #define SET_LOW(v,low) v = (v & 0xff00) | low
- #define HIGH(v) (u8)((v) >> 8)
- #define LOW(v) (u8)((v) )
+ #include <nds.h>
- #define SET_H_HIGH(v,high) v = high << 24 | (v & 0x00ffffff)
- #define SET_H_LOW(v,low) v = low << 16 | (v & 0xff00ffff)
- #define SET_L_HIGH(v,high) v = high << 8 | (v & 0xffff00ff)
- #define SET_L_LOW(v,low) v = low | (v & 0xffffff00)
- #define H_HIGH(v) (u8)((v) >> 24)
- #define H_LOW(v) (u8)((v) >> 16)
- #define L_HIGH(v) (u8)((v) >> 8)
- #define L_LOW(v) (u8)((v) )
- #define LEFT(x) ((x) >> 4)
- #define RIGHT(x) ((x) & 0xf)
-
- #define SHF(x,y) (x >> RIGHT(y) << LEFT(y))
- #define TAL(x) __builtin_popcount(x)
-
- #define TEST(x,m) ((x & m) == m)
+ // Read and write individual bytes from a 32-bit value.
+ #define SETHH(v,h) v = h << 24 | (v & 0x00ffffff)
+ #define SETHL(v,l) v = l << 16 | (v & 0xff00ffff)
+ #define SETLH(v,h) v = h << 8 | (v & 0xffff00ff)
+ #define SETLL(v,l) v = l | (v & 0xffffff00)
+ #define GETHH(v) (u8)((v) >> 24)
+ #define GETHL(v) (u8)((v) >> 16)
+ #define GETLH(v) (u8)((v) >> 8)
+ #define GETLL(v) (u8)((v) )
+ // Aliases for use on 16-bit values.
+ #define SETH(v,h) SETLH(v,h)
+ #define SETL(v,l) SETLL(v,l)
+ #define GETH(v) GETLH(v)
+ #define GETL(v) GETLL(v)
+ // Test if all bits of a mask are set in a value.
+ #define TEST(v,m) ((v & m) == m)
+ // Convert a C-style boolean to a Bedrock-style boolean.
#define BOOL(v) ((u8)-(v))
+ // Merge two bytes together as a double.
#define DOUBLE(h,l) ((u16)(h) << 8 | (u16)(l))
+ // Extract the high and low bytes of a double.
+ #define HIGH(v) (u8)(v >> 8)
+ #define LOW(v) (u8)(v)
+ // Find the highest or lowest value of a pair.
+ #define MAX(x,y) (x>y ? x : y)
+ #define MIN(x,y) (x<y ? x : y)
- u8 rev(u8 x);
- u8 shc(u8 x, u8 y);
- u16 shcd(u16 x, u8 y);
+ // Functions.
+ u8 ROL1(u8 v, u8 d);
+ u16 ROLD(u16 v, u8 d);
+ u8 ROR1(u8 v, u8 d);
+ u16 RORD(u16 v, u8 d);
#endif