From c1ef7b75972fa4fbdf125bc85cc1a66f358151cd Mon Sep 17 00:00:00 2001 From: vulcandth Date: Mon, 6 Jun 2022 16:25:34 -0500 Subject: RGBDS syntax updates (#86) New MACRO and DEF syntax --- macros/asserts.asm | 172 ++++++++++++++++++++++++++--------------------------- 1 file changed, 86 insertions(+), 86 deletions(-) (limited to 'macros/asserts.asm') diff --git a/macros/asserts.asm b/macros/asserts.asm index df2cdcd4..b8498537 100644 --- a/macros/asserts.asm +++ b/macros/asserts.asm @@ -1,122 +1,122 @@ ; Macros to verify assumptions about the data or code -table_width: MACRO -CURRENT_TABLE_WIDTH = \1 -IF _NARG == 2 -REDEF CURRENT_TABLE_START EQUS "\2" -ELSE -REDEF CURRENT_TABLE_START EQUS "._table_width\@" -{CURRENT_TABLE_START}: -ENDC +MACRO table_width + DEF CURRENT_TABLE_WIDTH = \1 + IF _NARG == 2 + REDEF CURRENT_TABLE_START EQUS "\2" + ELSE + REDEF CURRENT_TABLE_START EQUS "._table_width\@" + {CURRENT_TABLE_START}: + ENDC ENDM -assert_table_length: MACRO -x = \1 +MACRO assert_table_length + DEF x = \1 ASSERT x * CURRENT_TABLE_WIDTH == @ - {CURRENT_TABLE_START}, \ "{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes" ENDM -list_start: MACRO -list_index = 0 -IF _NARG == 1 -REDEF CURRENT_LIST_START EQUS "\1" -ELSE -REDEF CURRENT_LIST_START EQUS "._list_start\@" -{CURRENT_LIST_START}: -ENDC +MACRO list_start + DEF list_index = 0 + IF _NARG == 1 + REDEF CURRENT_LIST_START EQUS "\1" + ELSE + REDEF CURRENT_LIST_START EQUS "._list_start\@" + {CURRENT_LIST_START}: + ENDC ENDM -li: MACRO +MACRO li ASSERT !STRIN(\1, "@"), STRCAT("String terminator \"@\" in list entry: ", \1) db \1, "@" -list_index += 1 + DEF list_index += 1 ENDM -assert_list_length: MACRO -x = \1 +MACRO assert_list_length + DEF x = \1 ASSERT x == list_index, \ "{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 +MACRO nybble_array + DEF CURRENT_NYBBLE_ARRAY_VALUE = 0 + DEF 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 +MACRO nybble ASSERT 0 <= (\1) && (\1) < $10, "nybbles must be 0-15" -CURRENT_NYBBLE_ARRAY_VALUE = (\1) | (CURRENT_NYBBLE_ARRAY_VALUE << 4) -CURRENT_NYBBLE_ARRAY_LENGTH += 1 -IF CURRENT_NYBBLE_ARRAY_LENGTH % 2 == 0 - db CURRENT_NYBBLE_ARRAY_VALUE -CURRENT_NYBBLE_ARRAY_VALUE = 0 -ENDC + DEF CURRENT_NYBBLE_ARRAY_VALUE = (\1) | (CURRENT_NYBBLE_ARRAY_VALUE << 4) + DEF CURRENT_NYBBLE_ARRAY_LENGTH += 1 + IF CURRENT_NYBBLE_ARRAY_LENGTH % 2 == 0 + db CURRENT_NYBBLE_ARRAY_VALUE + DEF 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 +MACRO end_nybble_array + IF CURRENT_NYBBLE_ARRAY_LENGTH % 2 + db CURRENT_NYBBLE_ARRAY_VALUE << 4 + ENDC + IF _NARG == 1 + DEF x = \1 + ASSERT x == CURRENT_NYBBLE_ARRAY_LENGTH, \ + "{CURRENT_NYBBLE_ARRAY_START}: expected {d:x} nybbles, got {d:CURRENT_NYBBLE_ARRAY_LENGTH}" + DEF 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 +MACRO bit_array + DEF CURRENT_BIT_ARRAY_VALUE = 0 + DEF 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 +MACRO dbit ASSERT (\1) == 0 || (\1) == 1, "bits must be 0 or 1" -CURRENT_BIT_ARRAY_VALUE |= (\1) << (CURRENT_BIT_ARRAY_LENGTH % 8) -CURRENT_BIT_ARRAY_LENGTH += 1 -IF CURRENT_BIT_ARRAY_LENGTH % 8 == 0 - db CURRENT_BIT_ARRAY_VALUE -CURRENT_BIT_ARRAY_VALUE = 0 -ENDC + DEF CURRENT_BIT_ARRAY_VALUE |= (\1) << (CURRENT_BIT_ARRAY_LENGTH % 8) + DEF CURRENT_BIT_ARRAY_LENGTH += 1 + IF CURRENT_BIT_ARRAY_LENGTH % 8 == 0 + db CURRENT_BIT_ARRAY_VALUE + DEF 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 +MACRO end_bit_array + IF CURRENT_BIT_ARRAY_LENGTH % 8 + db CURRENT_BIT_ARRAY_VALUE + ENDC + IF _NARG == 1 + DEF x = \1 + ASSERT x == CURRENT_BIT_ARRAY_LENGTH, \ + "{CURRENT_BIT_ARRAY_START}: expected {d:x} bits, got {d:CURRENT_BIT_ARRAY_LENGTH}" + DEF x = (x + 7) / 8 + ASSERT x == @ - {CURRENT_BIT_ARRAY_START}, \ + "{CURRENT_BIT_ARRAY_START}: expected {d:x} bytes" + ENDC ENDM -def_grass_wildmons: MACRO +MACRO def_grass_wildmons ;\1: encounter rate -CURRENT_GRASS_WILDMONS_RATE = \1 -REDEF CURRENT_GRASS_WILDMONS_LABEL EQUS "._def_grass_wildmons_\1" + DEF CURRENT_GRASS_WILDMONS_RATE = \1 + REDEF CURRENT_GRASS_WILDMONS_LABEL EQUS "._def_grass_wildmons_\1" {CURRENT_GRASS_WILDMONS_LABEL}: db \1 ENDM -end_grass_wildmons: MACRO +MACRO end_grass_wildmons IF CURRENT_GRASS_WILDMONS_RATE == 0 ASSERT 1 == @ - {CURRENT_GRASS_WILDMONS_LABEL}, \ "def_grass_wildmons {d:CURRENT_GRASS_WILDMONS_RATE}: expected 1 byte" @@ -126,15 +126,15 @@ end_grass_wildmons: MACRO ENDC ENDM -def_water_wildmons: MACRO +MACRO def_water_wildmons ;\1: encounter rate -CURRENT_WATER_WILDMONS_RATE = \1 -REDEF CURRENT_WATER_WILDMONS_LABEL EQUS "._def_water_wildmons_\1" + DEF CURRENT_WATER_WILDMONS_RATE = \1 + REDEF CURRENT_WATER_WILDMONS_LABEL EQUS "._def_water_wildmons_\1" {CURRENT_WATER_WILDMONS_LABEL}: db \1 ENDM -end_water_wildmons: MACRO +MACRO end_water_wildmons IF CURRENT_WATER_WILDMONS_RATE == 0 ASSERT 1 == @ - {CURRENT_WATER_WILDMONS_LABEL}, \ "def_water_wildmons {d:CURRENT_WATER_WILDMONS_RATE}: expected 1 byte" -- cgit v1.3.1-sl0p