Skip to content

v0.5.0-rc2

Pre-release
Pre-release
Compare
Choose a tag to compare
@github-actions github-actions released this 28 Mar 21:25
· 1078 commits to master since this release

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!

Changes since v0.5.0-rc1:

  • New DEF <name> EQU/EQUS/SET/= ... syntax for defining constants! The old syntax will still be supported, but may eventually be phased out.
  • Fix ALIGN[1] being ignored
  • Fix jr in a LOAD FRAGMENT
  • Fix an ELIF condition right after a taken IF/ELIF block still being evaluated
  • Improve some error messages and documentation
  • RGBLINK outputs USED space at the end of a .map file

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

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.