v0.5.0-rc2
Pre-release
Pre-release
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 aLOAD FRAGMENT
- Fix an
ELIF
condition right after a takenIF
/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 nowPRINTT
,PRINTV
,PRINTF
andPRINTI
are obsoleted by the newPRINT
/PRINTLN
andSTRFMT
Known issues:
- Regression: Expanding
recurse EQUS "recurse"
orrecurse 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
andSTRFMT
\#
to get all of a macro's arguments"""
Multi-line string literals"""
FOR
blocks!BREAK
exitsREPT
andFOR
earlyPOW
andLOG
fixed-point functions**
exponent operator (for integers)REDEF
to redefineEQUS
much more convenientlyRL
has been reintroduced alongsideRB
andRW
LOAD UNION
andLOAD 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 stringsLOAD
blocks cannot create ROM sections anymore (#576)ROUND
,FLOOR
andCEIL
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
andXDEF
keywords (deprecated aliases ofEXPORT
)- Colon-less global labels
*
-commentsrgbasm -v
no longer prints the elapsed time (usetime
for that)
Fixed:
- Enabled several optimizations that should improve performance, especially RGBASM
SECTION FRAGMENT
s 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
andENDR
tokens - Can't start a new section if another with the same name has been
PUSHS
'd ds N, @
could produce incorrect resultsELIF
andELSE
were allowed afterELSE
.
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.