diff options
Diffstat (limited to 'macros/asserts.asm')
-rw-r--r-- | macros/asserts.asm | 78 |
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 |