summaryrefslogtreecommitdiff
path: root/macros/asserts.asm
diff options
context:
space:
mode:
Diffstat (limited to 'macros/asserts.asm')
-rw-r--r--macros/asserts.asm78
1 files changed, 74 insertions, 4 deletions
diff --git a/macros/asserts.asm b/macros/asserts.asm
index a07bc553..946add28 100644
--- a/macros/asserts.asm
+++ b/macros/asserts.asm
@@ -38,6 +38,76 @@ x = \1
"{CURRENT_LIST_START}: expected {d:x} entries, got {d:list_index}"
ENDM
+nybble_array: MACRO
+CURRENT_NYBBLE_ARRAY_VALUE = 0
+CURRENT_NYBBLE_ARRAY_LENGTH = 0
+IF _NARG == 1
+REDEF CURRENT_NYBBLE_ARRAY_START EQUS "\1"
+ELSE
+REDEF CURRENT_NYBBLE_ARRAY_START EQUS "._nybble_array\@"
+{CURRENT_NYBBLE_ARRAY_START}:
+ENDC
+ENDM
+
+nybble: MACRO
+ ASSERT 0 <= (\1) && (\1) < $10, "nybbles must be 0-15"
+CURRENT_NYBBLE_ARRAY_VALUE = (\1) | (CURRENT_NYBBLE_ARRAY_VALUE << 4)
+CURRENT_NYBBLE_ARRAY_LENGTH = CURRENT_NYBBLE_ARRAY_LENGTH + 1
+IF CURRENT_NYBBLE_ARRAY_LENGTH % 2 == 0
+ db CURRENT_NYBBLE_ARRAY_VALUE
+CURRENT_NYBBLE_ARRAY_VALUE = 0
+ENDC
+ENDM
+
+end_nybble_array: MACRO
+IF CURRENT_NYBBLE_ARRAY_LENGTH % 2
+ db CURRENT_NYBBLE_ARRAY_VALUE << 4
+ENDC
+IF _NARG == 1
+x = \1
+ ASSERT x == CURRENT_NYBBLE_ARRAY_LENGTH, \
+ "{CURRENT_NYBBLE_ARRAY_START}: expected {d:x} nybbles, got {d:CURRENT_NYBBLE_ARRAY_LENGTH}"
+x = (x + 1) / 2
+ ASSERT x == @ - {CURRENT_NYBBLE_ARRAY_START}, \
+ "{CURRENT_NYBBLE_ARRAY_START}: expected {d:x} bytes"
+ENDC
+ENDM
+
+bit_array: MACRO
+CURRENT_BIT_ARRAY_VALUE = 0
+CURRENT_BIT_ARRAY_LENGTH = 0
+IF _NARG == 1
+REDEF CURRENT_BIT_ARRAY_START EQUS "\1"
+ELSE
+REDEF CURRENT_BIT_ARRAY_START EQUS "._bit_array\@"
+{CURRENT_BIT_ARRAY_START}:
+ENDC
+ENDM
+
+dbit: MACRO
+ ASSERT (\1) == 0 || (\1) == 1, "bits must be 0 or 1"
+CURRENT_BIT_ARRAY_VALUE = CURRENT_BIT_ARRAY_VALUE | ((\1) << (CURRENT_BIT_ARRAY_LENGTH % 8))
+CURRENT_BIT_ARRAY_LENGTH = CURRENT_BIT_ARRAY_LENGTH + 1
+IF CURRENT_BIT_ARRAY_LENGTH % 8 == 0
+ db CURRENT_BIT_ARRAY_VALUE
+CURRENT_BIT_ARRAY_VALUE = 0
+ENDC
+ENDM
+
+end_bit_array: MACRO
+IF CURRENT_BIT_ARRAY_LENGTH % 8
+ db CURRENT_BIT_ARRAY_VALUE
+ENDC
+IF _NARG == 1
+x = \1
+ ASSERT x == CURRENT_BIT_ARRAY_LENGTH, \
+ "{CURRENT_BIT_ARRAY_START}: expected {d:x} bits, got {d:CURRENT_BIT_ARRAY_LENGTH}"
+x = (x + 7) / 8
+ ASSERT x == @ - {CURRENT_BIT_ARRAY_START}, \
+ "{CURRENT_BIT_ARRAY_START}: expected {d:x} bytes"
+ENDC
+ENDM
+
def_grass_wildmons: MACRO
;\1: encounter rate
CURRENT_GRASS_WILDMONS_RATE = \1
@@ -48,10 +118,10 @@ ENDM
end_grass_wildmons: MACRO
IF CURRENT_GRASS_WILDMONS_RATE == 0
- assert 1 == @ - {CURRENT_GRASS_WILDMONS_LABEL}, \
+ ASSERT 1 == @ - {CURRENT_GRASS_WILDMONS_LABEL}, \
"def_grass_wildmons {d:CURRENT_GRASS_WILDMONS_RATE}: expected 1 byte"
ELSE
- assert WILDDATA_LENGTH == @ - {CURRENT_GRASS_WILDMONS_LABEL}, \
+ ASSERT WILDDATA_LENGTH == @ - {CURRENT_GRASS_WILDMONS_LABEL}, \
"def_grass_wildmons {d:CURRENT_GRASS_WILDMONS_RATE}: expected {d:WILDDATA_LENGTH} bytes"
ENDC
ENDM
@@ -66,10 +136,10 @@ ENDM
end_water_wildmons: MACRO
IF CURRENT_WATER_WILDMONS_RATE == 0
- assert 1 == @ - {CURRENT_WATER_WILDMONS_LABEL}, \
+ ASSERT 1 == @ - {CURRENT_WATER_WILDMONS_LABEL}, \
"def_water_wildmons {d:CURRENT_WATER_WILDMONS_RATE}: expected 1 byte"
ELSE
- assert WILDDATA_LENGTH == @ - {CURRENT_WATER_WILDMONS_LABEL}, \
+ ASSERT WILDDATA_LENGTH == @ - {CURRENT_WATER_WILDMONS_LABEL}, \
"def_water_wildmons {d:CURRENT_WATER_WILDMONS_RATE}: expected {d:WILDDATA_LENGTH} bytes"
ENDC
ENDM