Rednex Game Boy Development System - An assembly toolchain for the Nintendo Game Boy and Game Boy Color
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
:
DEF <name> EQU/EQUS/SET/= ...
syntax for defining constants! The old syntax will still be supported, but may eventually be phased out.ALIGN[1]
being ignoredjr
in a LOAD FRAGMENT
ELIF
condition right after a taken IF
/ELIF
block still being evaluatedUSED
space at the end of a .map fileDeprecated:
_PI
wasn't useful, so it's deprecated nowPRINTT
, PRINTV
, PRINTF
and PRINTI
are obsoleted by the new PRINT
/PRINTLN
and STRFMT
Known issues:
recurse EQUS "recurse"
or recurse EQUS "\{recurse\}"
hangs rgbasm (#696)Added:
MACRO <name>
syntax for defining macros! The old syntax will still be supported for a couple versions, but may eventually be phased out.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!!)SOURCE_DATE_EPOCH
can be used for reproducible builds%1101_1110_1010_1101
)STRRIN
, STRRPL
and STRFMT
\#
to get all of a macro's arguments"""
Multi-line string literals"""
FOR
blocks!BREAK
exits REPT
and FOR
earlyPOW
and LOG
fixed-point functions**
exponent operator (for integers)REDEF
to redefine EQUS
much more convenientlyRL
has been reintroduced alongside RB
and RW
LOAD UNION
and LOAD FRAGMENT
Changed:
-m
now accepts MBC names.sym
and .map
files.map
filesds
can now repeat patterns, not just a single bytedb
STRCAT
can now concat any amount of stringsLOAD
blocks cannot create ROM sections anymore (#576)ROUND
, FLOOR
and CEIL
fixed-point builtins were present but undocumentedRemoved:
GLOBAL
and XDEF
keywords (deprecated aliases of EXPORT
)*
-commentsrgbasm -v
no longer prints the elapsed time (use time
for that)Fixed:
SECTION FRAGMENT
s now respect their constraints at their respective beginnings, not as a wholeREPT
/FOR
blocksMACRO
, ENDM
and ENDR
tokensPUSHS
'dds N, @
could produce incorrect resultsELIF
and ELSE
were allowed after ELSE
.
was treated as a labelgbdiff.bash
improved significantlyEQUS
after referencing it is now an error-t
and -O
to RGBLINK generated an output too largeThe 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.
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 nowPRINTT
, PRINTV
, PRINTF
and PRINTI
are obsoleted by the new PRINT
/PRINTLN
and STRFMT
Known issues:
ELIF
condition right after a taken IF
/ELIF
block is still evaluated (#764)recurse EQUS "recurse"
hangs rgbasm (#696)Added:
MACRO <name>
syntax for defining macros! The old syntax will still be supported for a couple versions, but will eventually be phased out.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!!)SOURCE_DATE_EPOCH
can be used for reproducible builds%1101_1110_1010_1101
)STRRIN
, STRRPL
and STRFMT
\#
to get all of a macro's arguments"""
Multi-line string literals"""
FOR
blocks!BREAK
exits REPT
and FOR
earlyPOW
and LOG
fixed-point functions**
exponent operator (for integers)REDEF
to redefine EQUS
much more convenientlyRL
has been reintroduced alongside RB
and RW
LOAD UNION
and LOAD FRAGMENT
Changed:
-m
now accepts MBC names.sym
and .map
files.map
filesds
can now repeat patterns, not just a single bytedb
STRCAT
can now concat any amount of stringsLOAD
blocks cannot create ROM sections anymore (#576)ROUND
, FLOOR
and CEIL
fixed-point builtins were present but undocumentedRemoved:
GLOBAL
and XDEF
keywords (deprecated aliases of EXPORT
)*
-commentsrgbasm -v
no longer prints the elapsed time (use time
for that)Fixed:
SECTION FRAGMENT
s now respect their constraints at their respective beginnings, not as a wholeREPT
/FOR
blocksMACRO
, ENDM
and ENDR
tokensPUSHS
'dds N, @
could produce incorrect resultsELIF
and ELSE
were allowed after ELSE
.
was treated as a labelgbdiff.bash
improved significantlyEQUS
after referencing it is now an error-t
and -O
to RGBLINK generated an output too largeThe 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.
New:
[bc]
, [de]
and [hl]
, also allowing [\1]
to work.INCBIN
can now be omitted, going up to the end of the filerb
and rw
is now optional, defaulting to 1stdin
as input, and stdout
as output (support yet to come to RGBFIX)zsh
completion scripts are available in the contrib/
folder. (If you want to make bash ones, apply in #620)Changes:
STRSUB
will no longer warn when taking 0 characters at the end of the stringjr
s without relying on RGBLINK, leading to smaller .o
files and faster linkingINCBIN
should produce a slightly more useful error messagecharmap
s now allocate memory as nodes are allocated, greatly reducing their size (by a factor of ~8)SHIFT
updates _NARG
Fixes:
LOAD
blocks could produce incorrect output when at the beginning or end of a section__FILE__
caused syntax errors if the file name contained a quotejr
in certain circumstances could crash RGBLINKSECTION FRAGMENT
align
outside of a SECTION
, or when using shift
outside of a macro... instead of crashing_NARG
outside of a macro crashing RGBASMRelease 0.4.1's binaries were compiled with MSVC instead of MinGW, giving apparently better results. Unfortunately, there is currently a problem with MSVC (not that we can do anything about it, yay!), so the binaries below are MinGW again. 0.4.3 should be compiled with MSVC again, though.
This is a pre-release! Do not expect this to be fully stable yet; please read the explanation at the end of the changelog.
New:
[bc]
, [de]
and [hl]
, also allowing [\1]
to work.INCBIN
can now be omitted, going to the end of the fileChanges:
STRSUB
will no longer warn when talking 0 characters at the end of the stringjr
s without relying on RGBLINK, leading to smaller .o
files and faster linkingINCBIN
should produce a slightly more useful error messageFixes:
LOAD
blocks could produce incorrect output when at the beginning or end of a section__FILE__
caused syntax errors if the file name contained a quotejr
in certain circumstances could crash RGBLINKSECTION FRAGMENT
The lexer, which is the core component of RGBASM, has been fully rewritten. Being also a very low-level piece of code, it's prone to crashing. The rewrite may also have changed some behavior (here is a known incompatibility). This pre-release is essentially to test the waters: see if anything breaks, assess how to handle it, and make 0.4.2 a good and stable release.
In short, the old lexer worked "fine" if you didn't look at it the wrong way. It was also hard to edit, and blocked a bunch of issues, 6 open at the time of writing. Further, the performance wasn't great, and we're hoping to improve it with this release.
Alright, we'd love to hear back about that. Check the "issues" tab near the top of the page for anything similar to your problem, otherwise open a new issue. We'd preferably need the code that you ran RGBASM on, so that we can see why it's slow.
RGBDS does not ship the Visual C++ runtime libraries anymore; if you don't have the 2019 ones (you should get an error message about some vcruntime
DLL missing), you can install them from Microsoft's website.
The version that brought GBDK support! I mean, brought them our support?
New:
ALIGN[]
to additionally specify an offsetalign
directivedb
/dw
/dl
in ROM sections-MG
, -MP
, -MT
and -MQ
Deprecations:
-Wobsolete
is now enabled by default! This is not a deprecation, but it should make it easier for you to notice deprecated changes*
-comments are now deprecated, please use ;
-comments insteadChanges:
Fixes:
BANK(@)
outside of sections crashing RGBASMBANK()
of a constant crashing RGBLINKINCLUDE
d linker scripts-MT
and -MQ
pop af
instruction!
-t
and -w
-fcommon
: RGBDS now builds with GCC 10's default configurationint
, making it more portable to e.g. DOSNote for Windows users: The binaries below have been compiled on Windows using MSVC, instead of cross-compiled. No difference has been found after some testing, but if something breaks, please open an issue!
Very big release! This includes a lot of bug fixes, large portions of the code rewritten, and some features deprecated or removed. We hope not to break anyone's code, but we won't keep bugs for compatibility's sake. If your code broke and the change isn't in the list below, please open an issue in our tracker.
New:
man rgbasm
for more infoLOAD
blocks" simplify writing code that should run in RAM; users of unofficial program rgbbin may want to look into thisUNION
-M
family for better automatic dependency managementSHIFT
can now shift multiple times at once--version
for -V
) have been added to all programs\r
in stringsINCBIN
now works with unseekable files as wellDeprecations and removals:
CODE
section typeOPT z
in favor of new and more consistent OPT p
GLOBAL
symbol (and its synonym XDEF
), as it has the same effect as EXPORT
Changes:
.sym
and .map
files are now output sortedrst
does not need to be known to RGBASM anymore (so labels can be used at all times)DEF()
now accepts labels as argumentsROMX
and WRAMX
sections can be used in RGBLINK's -t
and -w
modes, respectivelystop
can be specified without resorting to using db
For further information on new or changed features, please refer to our documentation.
Fixes:
sub
-i
have a /
implicitly appended if they don't end with one=
was treated as identical to set
, so = 7, [hl]
was valid; this has been fixedPURGE
d__ISO_8601_UTC__
and __ISO_8601_LOCAL__
symbols fixed on Windows (with a caveat for the latter)Notes:
make CFLAGS=-O0
. To compile in "debug mode", build using make develop
instead of make
; this requires a fairly specific configuration, though, and might not work for you.This release is merely a hotfix for 0.3.9 that undoes the mistake that __RGBDS_MAJOR__
etc. symbols were not being defined. Please upgrade from 0.3.9.
IMPORTANT
This version is missing definitions of the __RGBDS_MAJOR__
etc. symbols. Please use 0.3.10 instead, which rectifies this problem (and does not introduce additional changes).
rgbasm:
-
now allows assembling a file from stdin==
operatorif
constructsrgblink:
rgbgfx:
other:
Also fixed a lot more bugs and crashes in rgbasm and rgblink.
rgbasm
and rgblink
\
.rgbfix
Other
rgbasm
and rgblink
JR
to numeric constants.@
(including fixing the bug introduced in 0.3.6 related to JR
).Other