Skip to content

Releases: gbdev/rgbds

v0.7.0

31 Dec 23:59
Compare
Choose a tag to compare

Starting with this release, we now publish statically-linked Linux binaries! We also provide a Dockerfile to build RGBDS.

Deprecated:

  • Defining symbols without using DEF (use {interpolation} if you relied on EQUS expansion for defined symbol names)
  • RGBASM -H/--nop-after-halt and -l/-auto-ldh options (which are now off by default)

Added:

  • Multiple instructions can go on one line, separated by ::
  • #"raw strings" don't process any escapes (not even interpolation or macro args!)
  • DS ALIGN[size, offset] to insert padding until the next alignment boundary within the same section
  • RGBASM allows defining local labels for scopes that aren't active
  • INCHARMAP function to check if a string matches a charmap value
  • SIZEOF and STARTOF can now take section types like WRAM0 as argument
  • ENDSECTION explicitly ends a section
  • DS in RGBLINK linker scripts
  • OPTIONAL sections in RGBLINK linker scripts
  • FLOATING addresses in RGBLINK linker scripts (should improve SDCC interop)
  • RGBASM -X/--max-errors stops after too many errors, with a default of 100
  • Linker scripts support ALIGN alignment, offset
  • RGBFIX warns when SGB compatibility is set with the wrong "old licensee", even if not setting it via RGBFIX itself
  • RGBGFX can generate a palette from a spec, without an input image
  • RGBGFX forces transparent colors to take slot #0 in all palettes
  • RGBGFX -O/--group-outputs bases automatic output filenames on the output path, instead of the input path

Removed:

  • name: MACRO syntax (use MACRO name instead)
  • Escaped commas "\," inside strings (not necessary in macro arguments)
  • __FILE__ and __LINE__
  • Exported labels cannot have a space between their two colons (Label: : is invalid)

Changed:

  • RGBASM -Wtruncation=1 will not warn about 8-bit ~$FF or 16-bit ~$FFFF values
  • The memory usage summary in .map files is now placed at the top of the file
  • Alignment offsets in RGBASM can now be negative (ALIGN 8, -1 is equivalent to ALIGN 8, 255)
  • RGBGFX's --output-* options have been renamed to --auto-* for clarity
  • RGBLINK .sym files sort symbols at the same address by their locality
  • RGBLINK -S/--scramble prioritizes higher banks
  • RGBGFX's long --output-* flags are renamed to --auto-*
  • All programs show usage help when given missing or incorrect command-line arguments
  • Add --only-free and --help options to test scripts
  • PURGE arguments can go in any order
Fixed:
  • RGBASM preserves the value of \@ through INCLUDEd files
  • FOR loops, in some edge cases, could loop with unexpected values
  • PUSHO and POPO now save and restore the r option
  • ENDL now restores the label scope from before LOAD
  • Anonymous labels are never exported anymore, as doing so could cause link errors
  • -1 >>> 32 now equals 0, not -1
  • Document ATAN2 to have argument order (y, x)
  • RGBLINK's -w flag properly coerces WRAMX sections to WRAM0
  • Fix off-by-one error in RGBLINK -S/--scramble argument validation
  • RGBGFX could crash on some images with alpha transparency
  • RGBGFX --color-curve now works as it always should have
  • RGBGFX properly detects tiles with more than 4 colors
  • RGBGFX -r/--reverse gave incorrect output with -d/--depth 1
  • RGBGFX ignored -L/--slice if -u/--unique-tiles wasn't also passed
  • RGBGFX ignored -c/--colors with -r/--reverse
  • RGBGFX outputs a palette map to the right filename
  • Fix formatting errors in documentation
  • Fix incorrect options in RGBGFX zsh completions
  • Made testing scripts a little more robust

v0.6.1

03 Dec 09:50
Compare
Choose a tag to compare

Starting with this release, we now publish macOS binaries!

Added:

  • RGBASM prints a specific error message for leftover diff marks (+ and -)
  • RGBLINK has improved .map file output:
    • EMPTY blocks have address ranges, and fixed indentation and duplicates
    • ; Next union/fragment comments have fixed indentation and placement
  • RGBGFX supports - for stdin and stdout

Fixed:

  • RGBGFX terminates if opening a file fails
  • Fix some possible build errors on some systems
  • RGBLINK could crash when merging SECTION FRAGMENTs that aren't in ROM
  • RGBLINK mangles absolute SECTION names to support SDCC "areas"
  • RGBGFX could crash on empty palette slots with "Assertion 'this->_M_is_engaged()' failed."; we hardened our test configuration to catch more bugs like this

A big thank you to @eievui5 and @pinobatch for additional testing during the development of this version, as well as @rlewicki for some improvements to the codebase!

v0.6.0

03 Oct 17:28
Compare
Choose a tag to compare

Our website received a big facelift, please check it out at https://rgbds.gbdev.io! Thanks to @ISSOtm and @avivace for the work on this.
While some pages have been moved around, all URLs under /docs have been preserved.

Deprecated:

  • m: MACRO syntax; use MACRO m.
  • __FILE__ and __LINE__.
  • rgbasm -h and -L will soon become the default behavior; please use rgbasm -H and -l respectively to opt into the current behavior.
  • rgbgfx -h has been renamed to the less confusing rgbgfx -Z.

Added:

  • RGBGFX has been massively overhauled! Please check out the new docs for full details, but notably:
    • The alpha channel is now handled in a sensible and useful way.
    • Palettes can be manually specified without having to muck with PNG embedded palettes using -c!
    • rgbgfx -r can also "reverse" the process and generate a PNG from the binary data.
    • "At-files" allow storing the flags e.g. next to the image, instead of centralized within your Makefile/build script.
    • State-of-the-art packing algorithm ensures optimal palette generation 😎
    • Special thanks to @aaaaaa123456789 for randtilegen, used for testing; @eievui5, @MarkSixtyFour, and @Rangi42 for review and testing!
    • There's an egg somewhere in there?
  • Unsigned right shift operator >>>!
  • Binary AND & can now be constant if applied to a symbol with the right alignment.
  • rgbasm -Q or OPT Q configures the fixed-point precision, which is still 16 by default (e.g. -Q8 uses Q24.8).
  • FMOD function for fixed-point modulo.
  • Precise fixed-point literals like 12.34q8 override the current Q option value.
  • Fixed-point functions take an optional final argument to specify their precision, overriding the current -Q option.
  • @ and _NARG are considered undefined (e.g. by DEF) when they have no value.
  • rgbasm -P allows automatically pre-including a file before the source file; for example, to define constants used throughout the codebase.
  • SECTION(symbol) evaluates to the name of symbol's section.
  • rgbasm -r sets the maximum recursion depth, not the minimum failure depth (off by one).
  • OPT r.
  • -Wunmapped-char=0/1/2 warning for characters not in the charmap. Level 1 ignores unmapped characters in a non-default charmap if it's empty, level 2 does not.
  • \@ only increments its expanded value when used, so merely adding or removing MACRO, REPT, or FOR blocks will not affect generated symbols.
  • RGBASM will warn if a command-line argument overrides a previous one, for example -o.
  • RGBLINK is able to link SDCC object files.
  • RGBLINK will now report floating sections' names when using -O.
  • RGBLINK will omit symbol names from the .map file when using -M.
  • RGBLINK will not output anonymous labels in the .sym file, to comply with the spec.
  • RGBLINK will report EMPTY space between sections in the .map file, and total used+empty space at the end.
  • A .clang-format, though it it only applied to C++ files; we are gradually transitioning away from checkpatch style.

Removed:

  • PRINTT, PRINTI, PRINTV, PRINTF (use PRINT/PRINTLN instead)
  • _PI
  • SET as an assignment operator (use = instead)
  • rgbgfx -D, -f, and -F were not useful anymore

Changed:

  • RGBASM trigonometry functions now divide a circle into 1.0 turns, not 65536.0 so-called "binary degrees".
  • Please prefer rgbasm -I over rgbasm -i, for consistency with other tools (mainly C compilers); -i will be phased out in a future release.
  • man pages are now all in a single directory; this affects the release tarballs!
  • .map files now have a more useful free/used space summary at the end
  • .map files are now indented using tabs (requested in #1012)

Fixed:

  • rgblink -S rejected a lot of valid arguments.
  • rgblink -O could "forget" ROM0 if no such sections were defined, offsetting the entire file.
  • Whitespace is now trimmed in macro arguments, even after line continuations.
  • All *UTC* symbols could contain local time instead on some systems.
  • contrib/gbdiff.bash correctly handles spaces in its arguments (oops)
  • Version number will always be properly updated when building with CMake.
  • RGBASM now warns when specifying options that override eachother.
  • rgbasm -b and -g were broken.
  • Tests did not pass on the release tarballs.
  • Math symbols could render incorrectly in rgbasm(5).
  • RGBDS should be portable to more systems now.
  • RGBASM has been optimized slightly yet again.
  • Rephrased some documentation for clarity.

v0.6.0-rc2

08 Sep 21:24
Compare
Choose a tag to compare
v0.6.0-rc2 Pre-release
Pre-release

Our website received a big facelift, please check it out at https://rgbds.gbdev.io! Thanks to @ISSOtm and @avivace for the work on this.
While some pages have been moved around, all URLs under /docs have been preserved.

Deprecated:

  • m: MACRO syntax; use MACRO m.
  • rgbasm -h and -L will soon become the default behavior; please use rgbasm -H and -l respectively to opt into the current behavior.
  • rgbgfx -h has been renamed to the less confusing rgbgfx -Z.

Added:

  • RGBGFX has been massively overhauled! Please check out the new docs for full details, but notably:
    • The alpha channel is now handled in a sensible and useful way.
    • Palettes can be manually specified without having to muck with PNG embedded palettes using -c!
    • rgbgfx -r can also "reverse" the process and generate a PNG from the binary data.
    • "At-files" allow storing the flags e.g. next to the image, instead of centralized within your Makefile/build script.
    • State-of-the-art packing algorithm ensures optimal palette generation 😎
    • Special thanks to @aaaaaa123456789 for randtilegen, used for testing; @eievui5, @MarkSixtyFour, and @Rangi42 for review and testing!
    • There's an egg somewhere in there?
  • Unsigned right shift operator >>>!
  • Binary AND & can now be constant if applied to a symbol with the right alignment.
  • rgbasm -Q or OPT Q configures the fixed-point precision, which is still 16 by default (e.g. -Q8 uses Q24.8).
  • Precise fixed-point literals like 12.34q8 override the current Q option value.
  • FMOD function for fixed-point modulo.
  • rgbasm -r sets the maximum recursion depth, not the minimum failure depth (off by one).
  • OPT r.
  • -Wunmapped-char warning for characters not in the charmap.
  • \@ only increments its expanded value when used, so merely adding or removing MACRO, REPT, or FOR blocks will not affect generated symbols.
  • RGBLINK is able to link SDCC object files.
  • RGBLINK will now report floating sections' names when using -O.
  • RGBLINK will omit symbol names from the .map file when using -M.
  • RGBLINK will report EMPTY space between sections in the .map file.
  • A .clang-format, though it it only applied to C++ files; we are gradually transitioning away from checkpatch style.

Removed:

  • PRINTT, PRINTI, PRINTV, PRINTF (use PRINT/PRINTLN instead)
  • _PI
  • SET as an assignment operator (use = instead)
  • rgbgfx -D, -f, and -F were not useful anymore

Changed:

  • man pages are now all in a single directory; this affects the release tarballs!

Fixed:

  • rgblink -S rejected a lot of valid arguments.
  • rgblink -O could "forget" ROM0 if no such sections were defined, offsetting the entire file.
  • Whitespace is now trimmed in macro arguments, even after line continuations.
  • All *UTC* symbols could contain local time instead on some systems.
  • contrib/gbdiff.bash correctly handles spaces in its arguments (oops)
  • Version number will always be properly updated when building with CMake.
  • Math equations could render incorrectly in rgbasm(5).
  • RGBDS should be portable to more systems now.
  • RGBASM has been optimized slightly yet again.
  • Rephrased some documentation for clarity.

v0.6.0-rc1

02 Jul 16:17
Compare
Choose a tag to compare
v0.6.0-rc1 Pre-release
Pre-release

Our website received a big facelift, please check it out at https://rgbds.gbdev.io! Thanks to @ISSOtm and @avivace for the work on this.
While some pages have been moved around, all URLs under /docs have been preserved.

Deprecated:

  • rgbasm -h and -L will soon become the default behavior; please use rgbasm -H and -l respectively to opt into the current behavior.
  • rgbgfx -h has been renamed to the less confusing rgbgfx -Z.

Added:

  • RGBGFX has been massively overhauled! Please check out the new docs for full details, but notably:
    • The alpha channel is now handled in a sensible and useful way.
    • Palettes can be manually specified without having to muck with PNG embedded palettes using -c!
    • rgbgfx -r can also "reverse" the process and generate a PNG from the binary data.
    • "At-files" allow storing the flags e.g. next to the image, instead of centralized within your Makefile/build script.
    • State-of-the-art packing algorithm ensures optimal palette generation 😎
    • Special thanks to @aaaaaa123456789 for randtilegen, used for testing; @eievui5, @MarkSixtyFour, and @Rangi42 for review and testing!
    • There's an egg somewhere in there?
  • Unsigned right shift operator >>>!
  • Binary AND & can now be constant if applied to a symbol with the right alignment.
  • RGBLINK will now report floating sections' names when using -O.
  • OPT r
  • A .clang-format, though it it only applied to C++ files; we are gradually transitioning away from checkpatch style.

Removed:

  • PRINTT, PRINTI, PRINTV, PRINTF (use PRINT/PRINTLN instead)
  • _PI
  • SET as an assignment operator (use = instead)
  • rgbgfx -D, -f, and -F were not useful anymore

Changed:

  • man pages are now all in a single directory; this affects the release tarballs!

Fixed:

  • rgblink -S rejected a lot of valid arguments.
  • rgblink -O could "forget" ROM0 if no such sections were defined, offsetting the entire file.
  • Whitespace is now trimmed in macro arguments, even after line continuations.
  • All *UTC* symbols could contain local time instead on some systems.
  • contrib/gbdiff.bash correctly handles spaces in its arguments (oops)
  • Version number will always be properly updated when building with CMake.
  • Math equations could render incorrectly in rgbasm(5).
  • RGBDS should be portable to more systems now.
  • RGBASM has been optimized slightly yet again.

v0.6.0-welease-cnyandidayte

01 Apr 11:10
Compare
Choose a tag to compare
Pre-release

April Fools! Please do not use this release for anything serious, it's wildly incompatible—just a joke..!

We understand that assembly is a fairly dry and old-school language. We understand that it does not necessarily appeal to the modern programmer (and their socks) anymore.

Therefore, we have decided to experiment and shake up the instruction syntax a little bit. UTF-8 characters are now accepted as input, a handful of instructions have been renamed—as have been the registers, and more! 👀 We invite you to check out the new documentation for the full list of changes~

Pwease be warned that the new syntax is a teeny tiny bit expewimental, and so any ewwows should be wepowted to youw neawest /dev/null! ^w^

🐈

v0.5.2

23 Nov 22:17
Compare
Choose a tag to compare

Deprecated:

  • SET for mutable definitions is deprecated; use =

Added:

  • Bash completion scripts for rgbasm, rgblink, rgbfix, and rgbgfx!
  • RGBFIX won't warn when overwriting a byte with the same value
  • rgbfix -O to silence all "overwriting non-zero byte" warnings
  • rgblink -S "scrambles" bank assignments to help find broken assumptions in your code
  • Unindented macro invocations will be hinted at when encountered
  • -Wnumeric-string=0|1|2 warns about use of strings as numbers
  • Compound assignment for variables (e.g. DEF x += 1 for DEF x = x + 1)
  • ! negates condition codes z/nz/c/nc
  • Allow _ in gfx literals, e.g. `0123_3210

Updated:

  • Zsh completions synced with RGBDS changes
  • rgbfix -m MBC3+TIMER implies BATTERY, warning if not specified
  • Symbol interpolation is now more prominently described
  • -Wtruncation can be made less strict; use -Wtruncation=1 for more lax behavior

Fixed:

  • rgbfix -m MBC3+TIMER+BATTERY didn't work
  • LOAD offset wasn't reset when switching sections
  • PUSHS inside UNION should work as expected
  • Syntax errors after the first one were silenced
  • Some syntax errors could break parsing
  • Some invalid local labels could be defined
  • Incorrect error text when merging misaligned sections
  • Fixed-point formatting was slightly imprecise
  • STRFMT documentation was cut in the middle
  • Wrong rgbfix -m help text
  • Man page formatting and grammar blunders
  • Internal code cleanup

v0.5.1

09 May 03:34
Compare
Choose a tag to compare

Don't forget to check out our docs for more details on the updated functionality!

Added:

  • RGBFIX now supports the homebrew TPP1 mapper! (The emulators BGB 1.5.9 and SameBoy 0.14.3 do too)
  • New \<10> and \<num_sym> macro arg syntaxes
  • SIZEOF("section") and STARTOF("section")
  • CHARLEN and CHARSUB for working with charmap output units
  • OPT L, OPT W, and OPT h
  • REDEF EQU
  • Linker scripts can use character escapes in section names ("\n \r \t \" \\")
  • RGBFIX now reports when it's overwriting non-zero header bytes, helpful for spotting mistakes (thanks @GreenAndEievui!)
  • rgbfix -m help will list the accepted MBC names
  • rgbfix -m accepts $-prefixed hex literals

Changed:

  • Parentheses in macro args implicitly escape commas now, like C. For example, macro STRCAT("foo", "bar") used to be 2 arguments, now it's only one!
  • STRSUB and CHARSUB allow negative start positions, relative to the end of the string
  • STRSUB's second parameter can be omitted to read until the end of the string
  • A lot more errors are non-fatal now
  • Any constant expression equal for $FF00 can be substituted to $ff00 in ld [$ff00 + c], a and ld a, [$ff00 + c]; and arbitrary whitespace, line continuations, and block comments are allowed

Removed:

  • LOAD FRAGMENT had buggy behavior, and its use cases can be done differently

Fixed:

  • Symbols in some SECTION UNION/FRAGMENT could be missing from the .sym file
  • Interpolations could recurse infinitely outside of strings
  • ld hl, sp - <expr> was broken in 0.5.0 (workaround: ld hl, sp + -<expr>)
  • $ff00 + constant (or any symbol name starting with "c") would cause a syntax error since 0.4.2 (workarounds: ($ff00) + constant, constant + $ff00, or $ff00 + /**/ constant)
  • Fixed a lexer bug that could crash RGBASM on "piped" input files
  • jr could be incorrect within SECTION FRAGMENT
  • PUSHS didn't reset the section scope correctly (regression), and didn't save the LOAD state
  • REDEF EQUS had a few bugs
  • RGBFIX incorrectly parsed options on some platforms
  • RGBLINK should no longer leak memory
  • Fixed some compiler warnings, notably on 32-bit platforms and macOS
  • The source now uses _ISO_C11_SOURCE; this notably fixes building on FreeBSD (see #789 for more info)

Attention downstream packagers

An "annex" program, rgbobj, has been developed as an equivalent of objdump for RGBDS. It's not integrated with the rest of the codebase, as it's written in Rust. If you are distributing pre-built binaries, you may want to bundle it with RGBDS regardless.

v0.5.0

17 Apr 21:21
Compare
Choose a tag to compare

Don't forget to check out our docs for more details on the updated functionality!

Please welcome two new contributors, @Rangi42 and @dannye! Rangi did more than half of the work on this release—our biggest one yet!

Deprecated:

  • _PI wasn't useful, so it's deprecated now
  • PRINTT, PRINTV, PRINTF and PRINTI are obsoleted by the new PRINT/PRINTLN and STRFMT

Known issues:

  • .sym files miss some symbols from multiple SECTION UNIONs/FRAGMENTs (#809)

Added:

  • New MACRO <name> syntax for defining macros! The old syntax will still be supported for a couple versions, but may eventually be phased out.
  • New DEF <name> EQU/EQUS/SET/= ... syntax for defining constants! The old syntax will still be supported, but may eventually be phased out.
  • RGBFIX can now be used in pipelines! Example: rgblink -o - obj/header.o obj/game.o | rgbfix -v -p0xFF >bin/dinos_with_lasers.gb
  • {symbol} interpolation outside of strings, similar to macro args (differs from the pre-0.4.2 behavior!!)
  • __RGBDS_VERSION__ provides a complete version string
  • More complex format specifiers are now allowed in symbol interpolations
  • Anonymous labels
  • Environment var SOURCE_DATE_EPOCH can be used for reproducible builds
  • Underscores can be used in numeric literals (e.g. %1101_1110_1010_1101)
  • New string functions STRRIN, STRRPL and STRFMT
  • \# to get all of a macro's arguments
  • """Multi-line string literals"""
  • FOR blocks!
  • BREAK exits REPT and FOR early
  • POW and LOG fixed-point functions
  • ** exponent operator (for integers)
  • REDEF to redefine EQUS much more conveniently
  • RL has been reintroduced alongside RB and RW
  • LOAD UNION and LOAD FRAGMENT
  • Symbol interpolations now have their recursion depth capped as well

Changed:

  • Syntax errors will now be more verbose! Be careful that YMMV depending on the Bison version that RGBASM was compiled with.
  • Syntax errors are no longer fatal! If a line contains a syntax error, RGBASM will discard it and attempt to continue with the next line.
  • RGBFIX's -m now accepts MBC names
  • More symbols will be available in the .sym and .map files
  • ROM usgae stats are now included in the .map files
  • Interaction of quotes and macro args should be more intuitive
  • ds can now repeat patterns, not just a single byte
  • Global labels can now be indented, not just local ones
  • Trailing commas are allowed for most "list" directives, such as db
  • STRCAT can now concat any amount of strings
  • LOAD blocks cannot create ROM sections anymore (#576)
  • ROUND, FLOOR and CEIL fixed-point builtins were present but undocumented
  • Macro arguments can now be shifted by a negative amount, "un-shifting" them
  • Macro args can now be empty, though this causes a warning
  • Garbage characters in input will no longer attempt to be reported as UTF-8, instead reporting bytes
  • The lexer has been cleaned up somewhat, this should hopefully result in slightly improved performance

Removed:

  • GLOBAL and XDEF keywords (deprecated aliases of EXPORT)
  • Colon-less global labels
  • *-comments
  • rgbasm -v no longer prints the elapsed time (use time for that)
  • RGBASM incorrectly allowed omitting hl as the destination of ld hl, r16 and add hl, r16
  • RGBASM incorrectly allowed omitting the + in ld hl, sp + N

Fixed:

  • Enabled several optimizations that should improve performance, especially RGBASM
  • SECTION FRAGMENTs now respect their constraints at their respective beginnings, not as a whole
  • Line numbers could be incorrect on Windows
  • RGBASM will explicitly reject more than one input file, rather than silently ignore them
  • Macro args weren't ignored in block comments
  • Fixed a rare crash with unterminated REPT/FOR blocks
  • Fixed incorrect handling of text after MACRO, ENDM and ENDR tokens
  • Fixed several bugs in the lexer that tripped assertions (special thanks to @NieDzejkob for fuzzing RGBASM!)
  • Can't start a new section if another with the same name has been PUSHS'd
  • ds N, @ could produce incorrect results
  • ELIF and ELSE were allowed after ELSE
  • . was treated as a label
  • Performance of gbdiff.bash improved significantly
  • Defining an EQUS after referencing it is now an error
  • Passing -t and -O to RGBLINK generated an output too large
  • RGBASM will correctly report errors encountered when opening a file
  • There was actually still a way to overwrite builtin symbols, it's there no more
  • INCBIN "file",<start>[,<stop>] could leak memory in case of a certain error
  • __UTC_*__ were incorrectly declared as EQU instead of EQUS
  • gbz80(7) failed to mention alternatives to [hli] and [hld]
  • Fixed a crash that could occur when modifying a charmap that was on the pushc stack
  • Fixed expanding recurse EQUS "recurse" infinitely hanging RGBASM, no matter the max recursion depth (fixes a regression introduced by 0.4.2's new lexer)

Attention downstream packagers

The yacc dependency has been changed to GNU Bison! Our Makefile relies on bison -V to conditionally enable some features (src/check_bison_ver.sh) and our CMakeLists on the Bison CMake package, so both should be compatible with many versions, at least 3.0 (3.0.4 successfully tested). Please report breakage in our issue tracker.

v0.5.0-rcCar

01 Apr 09:50
Compare
Choose a tag to compare
v0.5.0-rcCar Pre-release
Pre-release

April Fools! Please don't actually use this version for anything serious, it's 99% incompatible...

Don't forget to check out our docs (particularly gbz80.7) for more details on the updated functionality!

Please welcome two new contributors, @Rangi42 and @dannye! Rangi did more than half of the work on this release—our biggest one yet!

Changes since v0.5.0-rc2:

  • New revised syntax solves the long-standing debate of whether to align instruction operands or not

Deprecated:

  • _PI wasn't useful, so it's deprecated now
  • PRINTT, PRINTV, PRINTF and PRINTI are obsoleted by the new PRINT/PRINTLN and STRFMT

Known issues:

  • Regression: Expanding recurse EQUS "recurse" or recurse EQUS "\{recurse\}" hangs rgbasm (#696)
  • .sym files miss some symbols from multiple SECTION UNIONs/FRAGMENTs (#809)

Added:

  • New MACRO <name> syntax for defining macros! The old syntax will still be supported for a couple versions, but may eventually be phased out.
  • RGBFIX can now be used in pipelines! Example: rgblink -o - obj/header.o obj/game.o | rgbfix -v -p0xFF >bin/dinos_with_lasers.gb
  • {symbol} interpolation outside of strings, similar to macro args (differs from the pre-0.4.2 behavior!!)
  • More complex format specifiers are now allowed in symbol interpolations
  • Anonymous labels
  • Environment var SOURCE_DATE_EPOCH can be used for reproducible builds
  • Underscores can be used in numeric literals (e.g. %1101_1110_1010_1101)
  • New string functions STRRIN, STRRPL and STRFMT
  • \# to get all of a macro's arguments
  • """Multi-line string literals"""
  • FOR blocks!
  • BREAK exits REPT and FOR early
  • POW and LOG fixed-point functions
  • ** exponent operator (for integers)
  • REDEF to redefine EQUS much more conveniently
  • RL has been reintroduced alongside RB and RW
  • LOAD UNION and LOAD FRAGMENT

Changed:

  • Syntax errors will now be more verbose! Be careful that YMMV depending on the Bison version that RGBASM was compiled with.
  • Syntax errors are no longer fatal! If a line contains a syntax error, RGBASM will discard it and attempt to continue with the next line.
  • RGBFIX's -m now accepts MBC names
  • More symbols will be available in the .sym and .map files
  • Slack totals are now included in the .map files
  • Interaction of quotes and macro args should be more intuitive
  • ds can now repeat patterns, not just a single byte
  • Global labels can now be indented, not just local ones
  • Trailing commas are allowed for most "list" directives, such as db
  • STRCAT can now concat any amount of strings
  • LOAD blocks cannot create ROM sections anymore (#576)
  • ROUND, FLOOR and CEIL fixed-point builtins were present but undocumented
  • Macro arguments can now be shifted by a negative amount, "un-shifting" them
  • Macro args can now be empty, though this causes a warning

Removed:

  • GLOBAL and XDEF keywords (deprecated aliases of EXPORT)
  • Colon-less global labels
  • *-comments
  • rgbasm -v no longer prints the elapsed time (use time for that)

Fixed:

  • Enabled several optimizations that should improve performance, especially RGBASM
  • SECTION FRAGMENTs now respect their constraints at their respective beginnings, not as a whole
  • Line numbers could be incorrect on Windows
  • RGBASM will explicitly reject more than one input file, rather than silently ignore them
  • Macro args weren't ignored in block comments
  • Fixed a rare crash with unterminated REPT/FOR blocks
  • Fixed incorrect handling of text after MACRO, ENDM and ENDR tokens
  • Can't start a new section if another with the same name has been PUSHS'd
  • ds N, @ could produce incorrect results
  • ELIF and ELSE were allowed after ELSE
  • . was treated as a label
  • Performance of gbdiff.bash improved significantly
  • Defining an EQUS after referencing it is now an error
  • Passing -t and -O to RGBLINK generated an output too large

Attention downstream packagers

Don't package this release, lol