Releases: gbdev/rgbds
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.
v0.9.1
Happy (belated) New Year! 🎊 🐍
Our GitHub Actions CI now tests RGBDS in Cygwin x64 and FreeBSD 15.0, verifying that it can build and run correctly on those platforms.
Added
- All programs now support
-hor--helparguments to print usage information
Changed
ld [$ff00+c], aandld a, [$ff00+c]instruction syntax is not deprecated any more!- The 0.9.0 release deprecated
ld [c], aandld a, [c](sinceldh [c], aandldh a, [c]are more appropriate), but also deprecated the[$ff00+c]syntax, which this release undoes
- The 0.9.0 release deprecated
- The undocumented 99,999-argument limit for macros was removed
- Floating sections may be output in a different order
Fixed
- Fix undefined behavior with backslash at EOF in macro arguments
- Avoid errors after missing
INCLUDEwith-MG - Object files used the
MACROnode type forFILEnodes since 0.8.0 STRLENandSTRSUBwould cut off early on incomplete UTF-8 stringsCHARLENandCHARSUBwould cut off early on invalid UTF-8 strings- RGBGFX
-udeduplication would fail without an input or output tileset (e.g. only an output tilemap+attrmap) - RGBFIX could output an incorrect ROM if a
writesyscall did not write all the bytes given to it - Correct the gbz80(7) documentation for the
DAAinstruction
Thanks to @Rangi42 and @ISSOtm , @robbi-blechdose , @avivace for the work done for this release.
v0.9.0
Merry Christmas everyone! 🎅 🎄
Tip
Starting with this release, we publish universal ("fat") binaries for macOS, so they'll support x86-64 and newer ARM (“Apple Silicon”) CPUs!
⚠️ Deprecated
- Treating multi-character strings as numbers (you can use a single 32-bit character mapping instead)
ldio(useldhinstead)ld [c](useldhinstead)ldh [$xx](useldh [$FFxx]instead)
We now document RGBDS's history of deprecated and removed/replaced features in rgbasm-old.5.
Added
- The contrib/view_palettes.sh script lets you render a GBC
.palfile as an image - RGBASM
-soutputs a "state file", listing the values of (non-label) symbols when finished assembling - RGBASM
-Wpurgewarns when purging exported symbols or labels - RGBASM
-Wunmatched-directivewarns whenPUSHC,PUSHO, orPUSHSlacks aPOPC,POPO, orPOPS - Symbols can have non-leading
$characters (so an interpolatedprefix{numeric}symbol works) - Symbols can have the same names as reserved keywords by prefixing them with a
# CHARMAPcan map characters to sequences of multiple values, with values not limited to 8 bits- A string constant
.(period) which expands to the current global label scope - A string constant
..(two periods) which expands to the current fully-qualified local label scope (e.g.Global.local) 0x,0b, and0oprefixes for hex, binary, and octal numbers (in addition to$,%, and&)LOAD FRAGMENT(removed in 0.5.1 due to bugs; we're not totally certain that all bugs are fixed, testing is appreciated!)BITWIDTH(n)returns the number of bits necessary to represent nTZCOUNT(n)returns the count of trailing zero bits of nEXPORT DEFdefines and exports a numeric symbol in a single linePUSHC nameacts likePUSHCfollowed bySETCHARMAP namePUSHS ...acts likePUSHSfollowed bySECTION ...PUSHO ...acts likePUSHOfollowed byOPT ...ENDLis explicitly optional, but with an opt-in-Wunterminated-loadwarning about itcplcan also be written ascpl a- Allow a
no-prefix to negate "meta" warnings (-Wno-all,-Wno-extra,-Wno-everything) - Allow
-Wno-error=...to override-Werror(including for "meta" warnings) - RGBLINK supports e.g.
ROMX FLOATINGin linker scripts, which allows assigning a section to no particular bank (this is generally only useful with SDCC object files) - RGBLINK's
.symfile now includes exported numeric constants (if this breaks your tools, please check the.symspecification!) - RGBGFX
-i/--input-tilesetuses a given tileset instead of generating all the tiles itself - RGBGFX
-r 0infers a valid width for the reversed image - RGBGFX
-Xor-Yonly mirror tiles horizontally or vertically (-X -Yacts like-m)
Changed
- Macro invocations can be at column 1, the very start of a line
**exponent operator is right-associative (sop ** q ** r == p ** (q ** r))LOW(Label)can be constant ifLabelis aligned to 8 or more bits!exprcan be constant 0 ifexprhas any non-zero bits- Error messages for undefined symbols mention if the symbol was previously purged
- Sections that grew too big are reported after the whole assembly file has been processed
- When RGBLINK encounters an unknown symbol, it lists the potential un-exported symbols by that name
- RGBLINK reports source locations for conflicts between object files
- Escape characters in section names in map files, and format empty sections more consistently too
- RGBGFX
-rgives a detailed warning if-cand-pmismatch; improved several other error messages too LOW()andHIGH()have their own RPN operators in the object file (this should lead to nicer output fromrgbobj)- Clarified a lot of documentation, including for fixed-point numbers, macros, and
DAA - Explicitly document that
FMODbehaves differently than% - Increment object file revision number to 11
- Tests can be run with CTest if you use CMake
Fixed
Label & CONSTANTwas not actually doing the&operation!- Some nonsensical uses of empty local labels (
Global.) were ignored - Many bugs prevented SDCC object files from being processed correctly (special thanks to @RubenZwietering for helping with bugfixing and testing!)
- Crash when assembling a nonexistent file
- Crash when
INCLUDEing an unbounded-size file (e.g./dev/urandom) - Crash when passing an object file with invalid patch offsets to RGBLINK
- Crash when specifying palette files within RGBGFX at-files
- Crash when reversing an image if the tilemap referred to nonexistent tiles
- Multiple bugs with parsing text palette files (GPL, HEX, and PSP)
- Reversing a 1bpp image had incorrect tile data
- Palette generation was suboptimal, potentially failing to fit within 8 palettes
- Palette generation was also inconsistent between platforms
- Tiles with too many colors were being detected incorrectly
- Maximum number of palettes wrapped around after 255
- Allow text palette files to have the maximum number of colors
- Allow tab character after backslash for line continuation
- Syntax errors at the beginning of a line do not abort assembly
-Walldid not enable-Wcharmap-redef-Wnested-commentwas undocumented- Building works on BSD systems
- Building works on systems with bison 3.8.0
Thanks to @Rangi42 and @ISSOtm , @JL2210 , @avivace , @sukus21 for the work done for this release.
v0.9.0-rc2
Tip
Starting with this release, we publish universal ("fat") binaries for macOS, so they'll support x86-64 and newer ARM (“Apple Silicon”) CPUs!
⚠️ Deprecated
- Treating multi-character strings as numbers (you can use a single 32-bit character mapping instead)
Added
- RGBASM
-soutputs a "state file", listing the values of (non-label) symbols when finished assembling - RGBASM
-Wpurgewarns when purging exported symbols or labels - Symbols can have non-leading
$characters (so an interpolatedprefix{numeric}symbol works) - Symbols can have the same names as reserved keywords by prefixing them with a
# CHARMAPcan map characters to sequences of multiple values, with values not limited to 8 bits- A string constant
.(period) which expands to the current global label scope - A string constant
..(two periods) which expands to the current fully-qualified local label scope (e.g.Global.local) 0x,0b, and0oprefixes for hex, binary, and octal numbers (in addition to$,%, and&)BITWIDTH(n)returns the number of bits necessary to represent nTZCOUNT(n)returns the count of trailing zero bits of nEXPORT DEFdefines and exports a numeric symbol in a single linePUSHC nameacts likePUSHCfollowed bySETCHARMAP namePUSHS ...acts likePUSHSfollowed bySECTION ...PUSHO ...acts likePUSHOfollowed byOPT ...ENDLis explicitly optional, but with an opt-in-Wunterminated-loadwarning about itcplcan also be written ascpl a- Allow a
no-prefix to negate "meta" warnings (-Wno-all,-Wno-extra,-Wno-everything) - Allow
-Wno-error=...to override-Werror(including for "meta" warnings) - RGBLINK supports e.g.
ROMX FLOATINGin linker scripts, which allows assigning a section to no particular bank (this is generally only useful with SDCC object files) - RGBLINK's
.symfile now includes exported numeric constants (if this breaks your tools, please check the.symspecification!) - RGBGFX
-i/--input-tilesetuses a given tileset instead of generating all the tiles itself - RGBGFX
-r 0infers a valid width for the reversed image - RGBGFX
-Xor-Yonly mirror tiles horizontally or vertically (-X -Yacts like-m) - The contrib/view_palettes.sh script lets you render a GBC
.palfile as an image
Changed
- Macro invocations can be at column 1, the very start of a line
LOW(Label)can be constant ifLabelis aligned to 8 or more bits!exprcan be constant 0 ifexprhas any non-zero bits- Error messages for undefined symbols mention if the symbol was previously purged
- Sections that grew too big are reported after the whole assembly file has been processed
- When RGBLINK encounters an unknown symbol, it lists the potential un-exported symbols by that name
- RGBLINK reports source locations for conflicts between object files
- RGBGFX
-rgives a detailed warning if-cand-pmismatch; improved several other error messages too LOW()andHIGH()have their own RPN operators in the object file (this should lead to nicer output fromrgbobj)- Clarified a lot of documentation, including for fixed-point numbers and macros
- Explicitly document that
FMODbehaves differently than% - Increment object file revision number to 11
- Tests can be run with CTest if you use CMake
Fixed
Label & CONSTANTwas not actually doing the&operation!- Some nonsensical uses of empty local labels (
Global.) were ignored - Many bugs prevented SDCC object files from being processed correctly (special thanks to @RubenZwietering for helping with bugfixing and testing!)
- Crash when assembling a nonexistent file
- Crash when
INCLUDEing an unbounded-size file (e.g./dev/urandom) - Crash when passing an object file with invalid patch offsets to RGBLINK
- Crash when specifying palette files within RGBGFX at-files
- Crash when reversing an image if the tilemap referred to nonexistent tiles
- Multiple bugs with parsing text palette files (GPL, HEX, and PSP)
- Palette generation was suboptimal, potentially failing to fit within 8 palettes
- Tiles with too many colors were being detected incorrectly
- Maximum number of palettes wrapped around after 255
- Allow text palette files to have the maximum number of colors
- Allow tab character after backslash for line continuation
-Walldid not enable-Wcharmap-redef-Wnested-commentwas undocumented- Building works on BSD systems
- Building works on systems with bison 3.8.0
v0.9.0-rc1
Tip
Starting with this release, we publish universal ("fat") binaries for macOS, so they'll support x86-64 and newer ARM (“Apple Silicon”) CPUs!
⚠️ Deprecated
- Treating multi-character strings as numbers (you can use a single 32-bit character mapping instead)
Added
- RGBASM
-soutputs a "state file", listing the values of (non-label) symbols when finished assembling - RGBASM
-Wpurgewarns when purging exported symbols or labels - Symbols can have non-leading
$characters (so an interpolatedprefix{numeric}symbol works) - Symbols can have the same names as reserved keywords by prefixing them with a
# CHARMAPcan map characters to sequences of multiple values, with values not limited to 8 bits- A string constant
.(period) which expands to the current global label scope - A string constant
..(two periods) which expands to the current fully-qualified local label scope (e.g.Global.local) BITWIDTH(n)returns the number of bits necessary to represent nTZCOUNT(n)returns the count of trailing zero bits of nEXPORT DEFdefines and exports a numeric symbol in a single linePUSHC nameacts likePUSHCfollowed bySETCHARMAP namePUSHS ...acts likePUSHSfollowed bySECTION ...PUSHO ...acts likePUSHOfollowed byOPT ...cplcan also be written ascpl a- RGBLINK supports e.g.
ROMX FLOATINGin linker scripts, which allows assigning a section to no particular bank (this is generally only useful with SDCC object files) - RGBLINK's
.symfile now includes exported numeric constants (if this breaks your tools, please check the.symspecification!) - RGBGFX
-i/--input-tilesetuses a given tileset instead of generating all the tiles itself - RGBGFX
-r 0infers a valid width for the reversed image - RGBGFX
-Xor-Yonly mirror tiles horizontally or vertically (-X -Yacts like-m) - The contrib/view_palettes.sh script lets you render a GBC
.palfile as an image
Changed
LOW(Label)can be constant ifLabelis aligned to 8 or more bits!exprcan be constant 0 ifexprhas any non-zero bits- Error messages for undefined symbols mention if the symbol was previously purged
- Sections that grew too big are reported after the whole assembly file has been processed
- When RGBLINK encounters an unknown symbol, it lists the potential un-exported symbols by that name
- RGBLINK reports source locations for conflicts between object files
- RGBGFX
-rgives a detailed warning if-cand-pmismatch; improved several other error messages too LOW()andHIGH()have their own RPN operators in the object file (this should lead to nicer output fromrgbobj)- Clarified a lot of documentation, including for fixed-point numbers and macros
- Explicitly document that
FMODbehaves differently than% - Increment object file revision number to 11
Fixed
Label & CONSTANTwas not actually doing the&operation!- Some nonsensical uses of empty local labels (
Global.) were ignored - Many bugs prevented SDCC object files from being processed correctly (special thanks to @RubenZwietering for helping with bugfixing and testing!)
- Crash when assembling a nonexistent file
- Crash when
INCLUDEing an unbounded-size file (e.g./dev/urandom) - Crash when passing an object file with invalid patch offsets to RGBLINK
- Crash when specifying palette files within RGBGFX at-files
- Crash when reversing an image if the tilemap referred to nonexistent tiles
- Multiple bugs with parsing text palette files (GPL, HEX, and PSP)
- Palette generation was suboptimal, potentially failing to fit within 8 palettes
- Maximum number of palettes wrapped around after 255
- Allow text palette files to have the maximum number of colors
- Building works on systems with bison 3.8.0