Skip to content

v1.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 01 Nov 00:48
· 1 commit to master since this release

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-string warning about doing so
  • ldio [c], a/ldio a, [c], and ld [c], a/ld a, [c] (use ldh [c], a/ldh a, [c] instead)
  • ldh [$xx], a/ldh a, [$xx] (use ldh [$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 the CHARVAL function instead)
  • 1-indexed string functions STRIN, STRRIN, STRSUB, and CHARSUB (use 0-indexed STRFIND, STRRFIND, STRSLICE, and STRCHAR instead)
  • rgbfix -O/--overwrite (use the -Wno-overwrite diagnostic 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 the NO_COLOR or FORCE_COLOR environment variables
  • Add a question mark after macro?, rept?, for?, include? or macro invocations like my_mac?, to "silence" them, excluding them from error/warning location backtraces
  • === and !== operators for string comparison, as an alternative to STRCMP
  • :: can join db/dw/dl/ds directives 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
  • OPT allows an optional dash before flags to be more like the CLI (e.g. OPT -Wno-obsolete)
  • CHARMAP accepts character literals as well as strings (there is no difference in effect)
  • -B/--backtrace configures location backtraces for error/warning messages in RGBASM and RGBLINK
  • -v/--verbose has 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 -v flag for something else already)
  • rgbasm -Wexport-undefined warns when you EXPORT an undefined symbol (enabled by -Wall)
  • rgblink -Wtruncation supports warning levels =0, =1, or =2, same as rgbasm -Wtruncation
  • rgbgfx -c auto explicitly specifies to use the automatic palette generation algorithm
  • rgbgfx -c dmg is short for rgbgfx -c dmg=e4
  • rgbgfx -O without -o or without any of -A -P -Q -T prints a warning
  • Numeric command-line arguments and OPT arguments can use any base prefix: 0x or $ for hex, 0b or % for binary, 0o or & for octal, or nothing for decimal
  • rgbasm, rgblink, and rgbfix, as well as rgbgfx already, support @args.flags to read more CLI arguments from an args.flags "at-file"

Changed

  • Underscores in integer constants can go after the base prefix, between digits, or before the fixed-point q suffix, but cannot be multiple in a row or trailing
  • Too-large integer constants get evaluated as 0
  • OPT p argument is decimal by default, and requires 0x prefix for hexadecimal (like OPT Q, OPT r, and CLI -p/--pad-value)
  • Leading spaces are stripped from all OPT arguments, not just OPT 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-constant is enabled by default instead of by -Wall
  • rgbasm -Wpurge default level is increased from 1 to 2
  • rgbasm -Wtruncation and rgblink -Wtruncation default level is reduced from 2 to 1
  • RGBLINK .map files will only print ; Next fragment or ; Next union comments 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/set with 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 an EQUS and expanding it
  • Interpolation would fail after an empty string literal (""{example})
  • q could 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-constant error 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 (XL4 instead of XL3)
  • RGBGFX could output incorrect attrmap data for bank 1 when bank 0 contained 256 duplicatable tiles (i.e. -N 256,256 without -u)

Thanks to @Rangi42, @ISSOtm, and @ReiquelApplegate for the work done for this release.