Repository navigation
Releases: gbdev/rgbds
Release list
v1.0.4
Another bugfix update for the fall equinox 🍂, but the number of bugs fixed is anything but small (unfurl the collapsed lists below if you're curious)! No new features whatsoever, but we expect this should be the most stable version of RGBDS ever. (Hope that didn't jinx it?)
Note
Most of the bugs since v1.0.1 have been found by running various (free 🥒) LLMs to audit the codebase. However (to the best of our knowledge) none of RGBDS' code or documentation has been authored by an LLM. (See also GBDev's AI policy.)
RGBASM
add sp, <offset>andld hl, sp + <offset>will now also warn about offsets between 128 and 255 (caveat: offsets computed by RGBLINK cannot currently be warned about, but this should be implemented in v1.1.0)- NUL characters (
\0) are no longer allowed in section names and assertion messages
Minor fixes
STRFMTno longer stops processing format strings at the first NUL character- Some too-precise fixed-point literals would fail to round up to the next integer (e.g.
1.999999is now2.0instead of1.0) - High fixed-point magnitudes can no longer cause overflows
- Section fragments can no longer overflow a fixed address
ALIGN[16, offset]is now rejected if offset is lower than the section's size
RGBLINK
- Symbol and map files now get emitted as soon as a valid section layout is found, even if any assertions fail, which we hope will make some failing bank- or address-related assertions easier to debug (caveat: if any assertions do fail, any previous
.symand.mapfiles will have been overwritten but the previous ROM file will not!) - Overhauled the section placement algorithm, fixing several bugs (hangs, invalid placements, etc), and possibly improving performance; notably:
-S/--scramblenow enforces that sections fit within the specified number of banks, rather than silently falling back to the default packing- Correctly check sufficiently large alignment with non-zero offsets
- Honor zero-sized sections' alignment offsets, memory regions, etc.
-t/--tinynow accepts fixed-bankROMX, BANK[1]sections, and-w/--wramxnow accepts fixed-bankWRAMX, BANK[1]sections-S/--scramble sram=256is now accepted
Minor fixes
- Map files incorrectly reported
EMPTYspace around zero-size sections - Fixed defining two sections with the same name (regression introduced in 1.0.2)
- Fixed
ALIGN 16not being properly honored in linker scripts afterFLOATING - Fixed many ways to confuse or crash RGBLINK with invalid object files
- Fixed signed integer overflow with
+,-, and*operators, which could behave incorrectly
RGBGFX
- Fixed several crashes related to
-B/--background-colorand-x/--trim-end
💡 Note: we would like to deprecate-x/--trim-endin v1.1.0! Please let us know if this would be an issue for you. We believe-B/--backgroundcovers its use cases more cleanly: unlike trimmed tiles, background tiles are applied in the tilemap and attrmap too; they can be placed anywhere in the image, not just the end; and they do not require updating a hard-coded number if you edit the image. -C/--color-curveis now supported in-r/--reversemode- Tile or palette IDs that can't fit in the tile/attribute maps now raise a warning
- Fixed omitting a transparent color from explicitly-specified palettes if the image has transparency
Minor fixes
- Inline palette specs with too many colors are no longer silently truncated
- Fixed reversing images with fewer than 4 colors per palette, or that are 1bpp, or that use
-i/--input-tilesetand bank 1 - Color sorting now ignores any (rare) embedded palettes in non-indexed PNGs, avoiding a crash and inherently inconsistent behavior (but please use
-c embeddedrather than the implicit color sorting!) - Transparent pixels outside of the
-L/--slicearea are now fully ignored - Background tiles now always have consistent IDs and consistent bank 0
- Fixed transparent colors being sometimes emitted as $FFFF instead of $8000
- Ambiguously transparent nor opaque colors are handled more cleanly as errors
- An invalid
-s/--palette-sizewith corresponding invalid-c/--colorsno longer causes issues
All
- Many documentation mistakes have been corrected
- Several error and warning messages have been fixed and/or cleaned up
- Some performance optimizations have been made, though we have not measured any significant improvements on recent hardware (contact us if RGBDS is slow on your machine!)
- Fixed a dozen or so integer overflows throughout, which would cause silent invalid behavior (but no crashes)
Misc
contrib/view_palettes.shcan now output to standard output- Many internal fixes to the development setup; we hope that contributing to RGBDS is now easier than ever!
- General system stability improvements to enhance the user's experience 😜
Also, pour one out for the one program who's been absent from changelogs since v0.9.4, handling our thorough reviews like a champ... RGBFIX! 🫡
v1.0.3
Edited on 2026-08-06: fixed install.sh inside rgbds-macos.zip (see issue #2045)!
Another small bugfix update. The main thing is fixing backwards jr from ROM0 to HRAM, which had broken in v1.0.2. The v1.0.2+hotfix Git tag was also incompatible with rgbenv, so v1.0.3 fixes that.
RGBASM:
- Fix
INCBINon Windows to work with files larger than 2 GiB (no ROM can be that large but a partialINCBINcan still work) FMODandLOGexplicitly handle invalid inputs without any platform-specific behavior
RGBLINK:
- Fix the v1.0.2 regression that prevented backwards
jrfrom low ROM0 to high HRAM - Show
-Wtruncationwarnings for invalidjraddresses - Fix an SDAS object error message to refer to a section by its correct name
- Fix reading the value of "relocations" symbol/section index from SDAS objects
RGBGFX:
- Invalid
-B/--background-colorspecs will print one error message, not two redundant ones - Fix potential undefined behavior in the palette generation algorithm
All:
- Fix handling of at-files containing
--followed by positional arguments - Support
COLUMNSenvironment variable to control--helpwidth
v1.0.2
Edited on 2026-08-06: fixed install.sh inside rgbds-macos.zip (see issue #2045)!
Happy anniversary of the first lunar landing! 🌙🚀
This is simply a bugfix and optimization release. Most of the fixes, including the severe-sounding "crash"es, are really edge cases that we aren't aware of anyone ever running into; but some have affected real users (like rgbgfx -p/--palette generation, or SECTION UNION alignment, or faster .asm parsing).
(Please note the Git tag name is v1.0.2+hotfix, not v1.0.2. We needed to amend the initial release, but GitHub's immutable releases had made the v1.0.2 tag impossible to edit. The reported --version is still v1.0.2 by all tools.)
RGBASM:
- Modulo
$8000_0000 % -1warns with-Wdiv, like$8000_0000 / -1already did - Fix negative macro arguments (e.g.
\<-1>) whenSHIFTed by some amount - Improve some error messages, e.g. for invalid command-line options and for section creation errors
Minor fixes
- Fix some invalid parsing of fixed-point numeric literals (e.g.
42.is valid, and0.5q264is invalid) - Fix invalid minus sign before symbol name in bracketed macro arguments (e.g.
\<-idx>) to error instead of ignoring the- - Prevent incomplete interpolations (e.g.
{namewithout a closing}brace) from expanding anyway - Fix parsing of invalid characters in bracketed macro arguments (e.g.
\<idxwithout a closing>bracket) - Fix a parsing inconsistency involving line continuations inside untaken
IF/ELIF/ELSEblocks - Fix a parsing inconsistency involving (invalid) local labels after
ENDC/ENDR/ENDMkeywords - Fix
-s/--state, if passed more than once, to use the last option's value - Ignore the
SOURCE_DATE_EPOCHenvironment variable if it is not in base 10 - Optimize parsing of charmaps, identifiers/keywords, conditional/loop/macro blocks, and piped input files, for faster assembling
RGBLINK:
- Add
-Wlarge-constantwarning (about numbers in linker scripts) that's enabled by default (the same as RGBASM) - Modulo
$8000_0000 % -1warns with-Wdiv, like$8000_0000 / -1already did, and does not potentially crash SECTION UNIONalignment could be incorrect or fail to build depending on the order ofUNIONs from multiple object files (thanks to @vulcandth for the fix!)- Parse numeric literals in linker scripts the same way as RGBASM (handling hex/octal/binary base prefixes, and
_digit separators)
Minor fixes
- Fix off-by-one error with line numbers in error messages from
INCLUDEd linker scripts - Fix parsing of linker scripts without a newline at the end of the file (whether
INCLUDEd or not) - Fix large
dsin linker script overflowing the bank's address - Fix potential error (undefined behavior) if both .sym and .map file are written to standard output "
-" - Fix
-S/--scramblealgorithm to work for scrambling SRAM sections too - Fix potential out-of-memory error for too-small
-O/--overlayfiles in-t/--tinymode - Validate
DefandReflines in SDAS object input to avoid a potential crash when linking them - Add more fail-safe checks for invalid object files (e.g. invalid RPN commands, section banks, or patch offsets)
RGBGFX:
- Fix
-p/--palettegeneration being inconsistent and potentially failing depending on whether-Z/--columnswas passed (thanks to @ElectroDeoxys for reporting this and to @vulcandth for help fixing it!) - Report CGB colors in error/verbose messages formatted as
GB:rr,gg,bb, not$xxxx
Minor fixes
- Fix crash on fully-transparent input image
- Fix crash when deduplicating tiles where a tile is fully transparent
- Fix crash when trimming more tiles than exist after deduplication
- Fix non-deduplicated input image to ignore
-Bbackground tiles when counting whether there are too many tiles - Fix crash on non-deduplicated image that completely fills tile banks 0 and 1
- Fix reverse mode to work even when nonzero
-b/--base-tilesor-l/--base-paletteIDs wrapped around to 0 - Fix reverse mode with
-s/--palette-sizetoo small for the tile data (error message, not crash) - Fix reverse mode with invalid
-q/--palette-mapindexes (error message, not crash) - Add more fail-safe checks for invalid
-r/--reverseimage output (e.g. invalid palette IDs in attribute maps)
Build/Test:
- Rename
test/fetch-test-deps.shtotest/external/fetch-repos.sh - Refactor and tidy up the CTest-based testing system to use
LABELSinstead of ad-hoc-Ddefines (previously-DUSE_NONFREE_TESTSand-DUSE_EXTERNAL_TESTS) - Refactor and tidy up the CMake-based build system; note that the minimum required CMake version is now 3.24 from August 2022 (previously 3.9 from July 2017)
Minor changes
- macOS builds now support as early as Mac OS X 10.4 Tiger from 2005
- Parallelize CTest-based external repository tests, for faster testing
v1.0.1
Happy New Year! 🎊 🐎
As promised, we use semantic versioning now, so 1.0.1 being a "patch" release means that it's fully backwards compatble with 1.0.0. All that's changed is fixing various bugs (and typos, internal refactorings, etc).
(Many of these bugs were found with the "fuzzing" tool AFL++, so they involve unrealistic inputs which would be unlikely or impossible in normal usage of RGBDS. Still, even specifically-crafted garbage inputs should give sensible error messages and not crash, so we try to find and fix these.)
RGBASM:
- Symbol names of just three or more periods ("
...", "....", etc) were mistakenly allowed SECTION UNIONwas mistakenly allowed for ROM sections (when there was no secondSECTION UNIONof the same name)-MGand-MCwere not accounting for-P/--preincludefiles- Non-UTF-8 "garbage" characters at the end of a file could hang in an infinite loop
RGBLINK:
- Undefined symbols could cause extra warning messages about meaningless values in expressions
- Various invalid object files (which RGBASM would not output in the first place) could print misleading error messages or outright crash
RGBGFX:
- Input images with ambiguous alpha channel values (neither transparent nor opaque) could crash due to an assertion failure
- Clarify documentation of
rgbgfx -C/--color-curve - Improve some error messages
All programs:
- Some errors with command-line options could be incorrectly reported (due to inaccurate
errnovalues) - For RGBASM and RGBLINK, very long error location backtraces could crash with a stack overflow (only ever observed during fuzzing)
v1.0.0
Happy Halloween! 🎃
We've finally hit a big milestone: the first major version increment, from 0.x to 1.0.0! 🥳
From now on RGBDS will adhere to semantic versioning ("semver"), meaning that you can rely on meaningful version numbers. Breaking changes will be reserved for new major versions; new features will require a minor version update; and bugfixes, internal refactorings, or other small tweaks will be patch-level version updates.
Removed
- Treating multi-value strings as numbers, and the
rgbasm -Wnumeric-stringwarning about doing so ldio [c], a/ldio a, [c], andld [c], a/ld a, [c](useldh [c], a/ldh a, [c]instead)ldh [$xx], a/ldh a, [$xx](useldh [$FFxx], a/ldh a, [$FFxx]instead)
Deprecated
You can pass -Wno-obsolete to silence warnings about these deprecations for now, but they will eventually be removed.
- Treating single-value strings as numbers (use
'c'haracter constants or theCHARVALfunction instead) - 1-indexed string functions
STRIN,STRRIN,STRSUB, andCHARSUB(use 0-indexedSTRFIND,STRRFIND,STRSLICE, andSTRCHARinstead) rgbfix -O/--overwrite(use the-Wno-overwritediagnostic flag instead)
Added
- Error/warning output is
$\normalsize{\textsf{\color{#ff0000}c\color{#ff8000}o\color{#cccc00}l\color{#00aa00}o\color{#00aaaa}r\color{#4444ff}f\color{#6600cc}u\color{#ff00aa}l}}$ by default when sent to a terminal; control it with--color always/never/auto, or theNO_COLORorFORCE_COLORenvironment variables - Add a question mark after
macro?,rept?,for?,include?or macro invocations likemy_mac?, to "silence" them, excluding them from error/warning location backtraces -
===and!==operators for string comparison, as an alternative toSTRCMP -
::can joindb/dw/dl/dsdirectives as well as instructions onto one line -
__SCOPE__is an empty string "", ".", or "..", according to the current innermost label scope level -
CHARVAL(str), without an index argument, gets the numeric value of a single-character string -
OPTallows an optional dash before flags to be more like the CLI (e.g.OPT -Wno-obsolete) -
CHARMAPaccepts character literals as well as strings (there is no difference in effect) -
-B/--backtraceconfigures location backtraces for error/warning messages in RGBASM and RGBLINK -
-v/--verbosehas multiple levels for RGBASM and RGBLINK too, not just RGBGFX
(RGBFIX's functionality is too simple to need verbose debug output, and it uses the-vflag for something else already) -
rgbasm -Wexport-undefinedwarns when youEXPORTan undefined symbol (enabled by-Wall) -
rgblink -Wtruncationsupports warning levels=0,=1, or=2, same asrgbasm -Wtruncation -
rgbgfx -c autoexplicitly specifies to use the automatic palette generation algorithm -
rgbgfx -c dmgis short forrgbgfx -c dmg=e4 -
rgbgfx -Owithout-oor without any of-A -P -Q -Tprints a warning - Numeric command-line arguments and
OPTarguments can use any base prefix:0xor$for hex,0bor%for binary,0oor&for octal, or nothing for decimal -
rgbasm,rgblink, andrgbfix, as well asrgbgfxalready, support@args.flagsto read more CLI arguments from anargs.flags"at-file"
Changed
- Underscores in integer constants can go after the base prefix, between digits, or before the fixed-point
qsuffix, but cannot be multiple in a row or trailing - Too-large integer constants get evaluated as 0
OPT pargument is decimal by default, and requires0xprefix for hexadecimal (likeOPT Q,OPT r, and CLI-p/--pad-value)- Leading spaces are stripped from all
OPTarguments, not justOPT r - Spaces are consistently stripped from the beginning and end of macro arguments, even with a block comment in the middle of the spaces
rgbasm -Wlarge-constantis enabled by default instead of by-Wallrgbasm -Wpurgedefault level is increased from 1 to 2rgbasm -Wtruncationandrgblink -Wtruncationdefault level is reduced from 2 to 1- RGBLINK .map files will only print
; Next fragmentor; Next unioncomments when they also have subsequent labels to print - Reformatted and rephrased some error messages; in particular, location traces are now indented and have one file location per line
Fixed
bit/res/setwith an unknown bit index could segfault- Division and modulo were off by one for very large negative numbers
- Exporting an undefined symbol is now an error
- A local label after a keyword (e.g.
call.local) is now an error - Labels were allowed before
ENDC, which could lead to inconsistent lexing and parsing - Line numbers after using "nested" macros were incorrect
Macros can be "nested" by defining the inner macro within anEQUSand expanding it - Interpolation would fail after an empty string literal (
""{example}) qcould be repeated in fixed-point format specs (e.g.STRFMT("%qqq16f", 3.14q16))- Formatting very long fixed-point numbers could cut off the end (e.g.
STRFMT("%#.255q1f", 1073741823.5q1)) - Character literals would be misread after invalid "garbage" characters
- "while expanding symbol" error backtrace was printing the symbol's contents instead of its name
- Too-large integer constants would print a
-Wlarge-constanterror for every subsequent digit - Section-related error messages could be inaccurate/misleading after use of
[[ fragment literals ]] - RGBASM's Bash completion script supports
-MC - RGBLINK supports .rel object files generated by SDCC 4.4.0 and later (
XL4instead ofXL3) - RGBGFX could output incorrect attrmap data for bank 1 when bank 0 contained 256 duplicatable tiles (i.e.
-N 256,256without-u)
Thanks to @Rangi42, @ISSOtm, and @ReiquelApplegate for the work done for this release.
v1.0.0-rc2
RGBDS's major version number is finally going to increment from 0 to 1! As of this release, we'll stick to semantic versioning, so that any future breaking changes will require a major version update, new features will be a minor version, and bug fixes will be a patch version. That should make it easier to manage RGBDS version compatibility for assembly projects. (And if a "version 2.0" does eventually come after this one, it might be rewritten in Rust.)
This is a release candidate to help people test it out early, and make sure we won't need to release a 1.0.1 bugfix immediately afterwards.
What's different from v1.0.0-rc1?
- Added:
===and!==operators for string comparison, as an alternative toSTRCMP - Added:
CHARMAPaccepts character literals as well as strings (there is no difference in effect) - Changed:
rgbgfx -Owithout-oor without any of-A -P -Q -Tprints a warning - Changed: Numeric command-line arguments and
OPTarguments can use any base prefix:0xor$for hex,0bor%for binary,0oor&for octal, or nothing for decimal - Changed:
OPT pargument is decimal by default, and requires0xprefix for hexadecimal (likeOPT Q,OPT r, and CLI-p/--pad-value) - Changed: Leading spaces are stripped from all
OPTarguments, not justOPT r - Changed: Spaces are consistently stripped from the beginning and end of macro arguments, even with a block comment in the middle of the spaces
- Changed: RGBLINK .map files will only print
; Next fragmentor; Next unioncomments when they also have subsequent labels to print - Changed: RGBGFX accurately rounds 8-bit to 5-bit color conversion (and vice-versa for
-r/--reverse) - Fixed:
bit/res/setwith an unknown bit index could segfault - Fixed: Formatting very long fixed-point numbers could cut off the end (e.g.
STRFMT("%#.255q1f", 1073741823.5q1)) - Fixed: Section-related error messages could be inaccurate/misleading after use of
[[ fragment literals ]]
Thanks to @Rangi42, @ISSOtm, and @ReiquelApplegate for the work done for this release.
v1.0.0-rc1
RGBDS's major version number is finally going to increment from 0 to 1! As of this release, we'll stick to semantic versioning, so that any future breaking changes will require a major version update, new features will be a minor version, and bug fixes will be a patch version. That should make it easier to manage RGBDS version compatibility for assembly projects. (And if a "version 2.0" does eventually come after this one, it might be rewritten in Rust.)
This is a release candidate to help people test it out early, and make sure we won't need to release a 1.0.1 bugfix immediately afterwards.
Removed
- Treating multi-value strings as numbers, and the
rgbasm -Wnumeric-stringwarning about doing so ldio [c], a/ldio a, [c], andld [c], a/ld a, [c](useldh [c], a/ldh a, [c]instead)ldh [$xx], a/ldh a, [$xx](useldh [$FFxx], a/ldh a, [$FFxx]instead)
Deprecated
- Treating single-value strings as numbers (use
'c'haracter constants or theCHARVALfunction instead) - 1-indexed string functions
STRIN,STRRIN,STRSUB, andCHARSUB(use 0-indexedSTRFIND,STRRFIND,STRSLICE, andSTRCHARinstead) rgbfix -O/--overwrite(use the-Wno-overwritediagnostic flag instead)
Added
- Error/warning output is
$\normalsize{\textsf{\color{#ff0000}c\color{#ff8000}o\color{#cccc00}l\color{#00aa00}o\color{#00aaaa}r\color{#4444ff}f\color{#6600cc}u\color{#ff00aa}l}}$ by default when sent to a terminal; control it with--color always/never/auto, or theNO_COLORorFORCE_COLORenvironment variables - Add a question mark after
macro?,rept?,for?,include?or macro invocations likemy_mac?, to "silence" them, excluding them from error/warning location backtraces -
::can joindb/dw/dl/dsdirectives as well as instructions onto one line -
CHARVAL(str), without an index argument, gets the numeric value of a single-character string -
OPTallows an optional dash before flags to be more like the CLI (e.g.OPT -Wno-obsolete) -
-B/--backtraceconfigures location backtraces for error/warning messages in RGBASM and RGBLINK -
-v/--verbosehas multiple levels for RGBASM and RGBLINK too, not just RGBGFX
(RGBFIX's functionality is too simple to need verbose debug output, and it uses the-vflag for something else already) -
rgbasm -Wexport-undefinedwarns when youEXPORTan undefined symbol (enabled by-Wall) -
rgblink -Wtruncationsupports warning levels=0,=1, or=2, same asrgbasm -Wtruncation -
rgbgfx -c autoexplicitly specifies to use the automatic palette generation algorithm -
rgbgfx -c dmgis short forrgbgfx -c dmg=e4
Changed
- Underscores in integer constants can go after the base prefix, between digits, or before the fixed-point
qsuffix, but cannot be multiple in a row or trailing - Too-large integer constants get evaluated as 0
rgbasm -Wlarge-constantis enabled by default instead of by-Wall- Reformatted and rephrased some error messages; in particular, location traces are now indented and have one file location per line
Fixed
- Division and modulo were off by one for very large negative numbers
- Exporting an undefined symbol is now an error
- Line numbers after using "nested" macros were incorrect
Macros can be "nested" by defining the inner macro within anEQUSand expanding it - Interpolation would fail after an empty string literal (
""{example}) qcould be repeated in fixed-point format specs (e.g.STRFMT("%qqq16f", 3.14q16))- Character literals would be misread after invalid "garbage" characters
- "while expanding symbol" error backtrace was printing the symbol's contents instead of its name
- Too-large integer constants would print a
-Wlarge-constanterror for every subsequent digit - RGBASM's Bash completion script supports
-MC - RGBLINK supports .rel object files generated by SDCC 4.4.0 and later (
XL4instead ofXL3)
Thanks to @Rangi42 and @ISSOtm for the work done for this release.
v0.9.4
We're still not following SemVer yet, so this release has a lot in it even though it's "only" a patch-level update -- comparable to v0.3.9, v0.4.2, v0.5.2...
Added
- Inline
[[ fragment literals ]]can be used instead of labels for one-off data 'character'constants are now preferred to single-character"strings"for getting the numeric value of a characterREADFILE(name[, maxlen])returns the contents of a file as a stringBYTELEN(str)returns the number of bytes in a stringSTRBYTE(str, idx)returns the idxth byte in a stringSIZEOFapplies to 8-and 16-bit registers, evaluating to their 1- or 2-byte size-Wwarning diagnostics for RGBLINK, RGBFIX, and RGBGFXrgbasm -MCflag which continues assembling even after a missing dependency (unlike-MG, which exits to let the dependency be generated before continuing)rgbasm -Pcan be specified multiple times to pre-include multiple files- Linkerscripts support
0x/0b/0o/&numeric prefixes,_numeric separators, and"\0"characters, same as assembly rgbgfx -c/--colorssupportspng:for PNG images as palette spec inputsrgbgfx -l/--base-palettesets a base palette ID, like-b/--base-tilesdoes for tilemap IDsrgbfix -m listdoes the same thing asrgbfix -m help(lists supported MBCs)- Documented some more historical deprecations/removals which had been left out of rgbasm-old(5)
Changed
- Error message for
ALIGNfailure tells you what the actual alignment is - Invalid
rgblink -S/--scrambleorrgbfix -f/--fix-specarguments are a fatal error, not a warning
Fixed
- Aligning a section first to one size and then to a greater size could fail even when the new alignment is compatible
- Some string functions treated
\0characters in strings as the end of the string - Overflowing exponent operator
**could cause undefined behavior - Invalid warning flag parameters could be silently accepted, e.g.
rgbasm -Wtruncation=256acting like=0 - Unterminated strings in linkerscripts would break subsequent parsing
- Invalid
rgblink -S/--scramblespec could crash - Out-of-bounds
rgbgfx -L/--slicecoordinates could crash - RGBGFX was skipping a step of its palette generation algorithm
rgbfix -mwith unlisted numeric values could crash- The
rgbds:latestDocker tag is correctly updated
Thanks to @Rangi42 and @avivace for the work done for this release.
v0.9.3
Happy Pride month! 🏳️🌈
Added
CHARVALfunction gets individual values from a multi-value charmap entry++operator for string concatenation, as an alternative toSTRCATrgbgfx -ccan take admg=XXDMG grayscale palette specification (works likerBGP)
Changed
- Restrict custom binary and graphics digits to digits, letters,
.,#, or@ - Recover from syntax errors even inside
REPT/FORloops - Hint to
{interpolate}names whenEQUSexpanding does not occur - .sym file sorting accounts for local labels' parents' addresses and names
rgbgfx -rencodes reversed PNG images as grayscale or indexed colors when possible- Omit the version number from distributed release archive filenames
Fixed
STRSLICEwith two arguments assumed an off-by-one stop indexrgbasm -MPwould generate phony dependencies even for files that don't exist- Handle missing newline at EOF for linkerscript
INCLUDEd files - The Dockerfile was building but not installing RGBDS in its environment
- Building with Bison versions 3.x below 3.5 could fail over "
parse.lac=full" - A second
rgbgfx -cargument might not completely override the previous one
Thanks to @Rangi42 and @ISSOtm for the work done for this release.
v0.9.2
May the 4th be with you! ⭐ 👾
Added
- New 0-indexed string functions (we plan to eventually deprecate the old 1-indexed ones):
STRFINDandSTRRFIND: likeSTRINandSTRRINSTRCHAR: likeCHARSUBSTRSLICE: likeSTRSUB, but taking start and stop indexes, instead of a start position and length
CHARCMP: compares two strings by their charmap value sequencesCHARSIZE: counts how many charmap values a single character would map toREVCHAR: reverse-maps a value sequence to its charmap string (the values must have one unique corresponding charmap)- Allow macro
\<arg>to take negative values to count arguments from the end (e.g.\<-2>is the penultimate arg) - Allow the index of
bit/res/setinstructions to be determined at link time rgbgfx -B/--backgroundspecifies a "background" color; tiles entirely of that color will be skipped in the graphic outputrgbfix -o/--outputcan write its output to a different file than its input (must have one input file); thanks @jmillikin!
Changed
- Raw symbols do not undergo
EQUSexpansion (so#symbolcan be used instead of"{symbol}") - Some invalid instructions have more specific error messages than just "syntax error"
- Terser RGBASM output for sequences of unknown characters
- contrib/gbdiff.bash does not need a .sym file to be sorted
Fixed
- Macro names could be used as numeric symbols with value 0
- Map files were listing anonymous labels (as Unicode escape syntax)
- RGBGFX could segfault with transparent colors in
embeddedpalettes - RGBGFX could segfault or give incorrect output for grayscale images with transparent colors
- RGBFIX expects nonzero
-r/--ram-sizefor-m MBC6(the one game that uses MBC6 has-r 3) CMAKE_CXX_FLAGS_DEBUGcan be user-specified
Thanks to @Rangi42 and @ISSOtm for the work done for this release.