From e0a6199f83439b3653958f4939134f0e68ba3e81 Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Tue, 16 Sep 2025 06:51:07 -0400 Subject: [PATCH] Allow `charmap` to map `'characters'` as well as `"strings"` (#1830) --- man/rgbasm.5 | 6 +++--- src/asm/parser.y | 3 +++ test/asm/character-literals.asm | 14 +++++++------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/man/rgbasm.5 b/man/rgbasm.5 index 780e29de..ce519daf 100644 --- a/man/rgbasm.5 +++ b/man/rgbasm.5 @@ -638,12 +638,12 @@ and the values of a charmap entry are counted by When writing text strings that are meant to be displayed on the Game Boy, the character encoding in the ROM may need to be different than the source file encoding. For example, the tiles used for uppercase letters may be placed starting at tile index 128, which differs from ASCII starting at 65. .Pp -Character maps allow mapping strings to arbitrary sequences of numbers: +Character maps allow mapping strings or character literals to arbitrary sequences of numbers: .Bd -literal -offset indent CHARMAP "A", 42 -CHARMAP ":)", 39 +CHARMAP ':)', 39 CHARMAP "
", 13, 10 -CHARMAP "€", $20ac +CHARMAP '€', $20ac .Ed .Pp This would result in diff --git a/src/asm/parser.y b/src/asm/parser.y index d3d654e5..ac4bf819 100644 --- a/src/asm/parser.y +++ b/src/asm/parser.y @@ -1049,6 +1049,9 @@ charmap: POP_CHARMAP string COMMA charmap_args trailing_comma { charmap_Add($2, std::move($4)); } + | POP_CHARMAP CHARACTER COMMA charmap_args trailing_comma { + charmap_Add($2, std::move($4)); + } ; charmap_args: diff --git a/test/asm/character-literals.asm b/test/asm/character-literals.asm index ee99ef0e..91c036d6 100644 --- a/test/asm/character-literals.asm +++ b/test/asm/character-literals.asm @@ -1,13 +1,13 @@ def s equs "d" -charmap "A", 1 -charmap "B", 2 -charmap "c{s}e", 3 -charmap "F", 4, 5, 6 +charmap 'A', 1 +charmap 'B', 2 +charmap 'c{s}e', 3 +charmap 'F', 4, 5, 6 charmap "'", 42 -charmap "\"", 1234 -charmap "\n\r\t\0", 1337 -charmap "',\",\\", 99 +charmap '"', 1234 +charmap '\n\r\t\0', 1337 +charmap '\',\",\\', 99 MACRO char assert (\1) == (\2)