Skip to content

v0.9.0

Latest
Compare
Choose a tag to compare
@github-actions github-actions released this 25 Dec 15:59

Merry Christmas everyone! 🎅 🎄

Tip

Starting with this release, we publish universal ("fat") binaries for macOS, so they'll support x86-64 and newer ARM (“Apple Silicon”) CPUs!

⚠️ Deprecated

  • Treating multi-character strings as numbers (you can use a single 32-bit character mapping instead)
  • ldio (use ldh instead)
  • ld [c] (use ldh instead)
  • ldh [$xx] (use ldh [$FFxx] instead)

We now document RGBDS's history of deprecated and removed/replaced features in rgbasm-old.5.

Added

  • The contrib/view_palettes.sh script lets you render a GBC .pal file as an image
  • RGBASM -s outputs a "state file", listing the values of (non-label) symbols when finished assembling
  • RGBASM -Wpurge warns when purging exported symbols or labels
  • RGBASM -Wunmatched-directive warns when PUSHC, PUSHO, or PUSHS lacks a POPC, POPO, or POPS
  • Symbols can have non-leading $ characters (so an interpolated prefix{numeric} symbol works)
  • Symbols can have the same names as reserved keywords by prefixing them with a #
  • CHARMAP can map characters to sequences of multiple values, with values not limited to 8 bits
  • A string constant . (period) which expands to the current global label scope
  • A string constant .. (two periods) which expands to the current fully-qualified local label scope (e.g. Global.local)
  • 0x, 0b, and 0o prefixes for hex, binary, and octal numbers (in addition to $, %, and &)
  • LOAD FRAGMENT (removed in 0.5.1 due to bugs; we're not totally certain that all bugs are fixed, testing is appreciated!)
  • BITWIDTH(n) returns the number of bits necessary to represent n
  • TZCOUNT(n) returns the count of trailing zero bits of n
  • EXPORT DEF defines and exports a numeric symbol in a single line
  • PUSHC name acts like PUSHC followed by SETCHARMAP name
  • PUSHS ... acts like PUSHS followed by SECTION ...
  • PUSHO ... acts like PUSHO followed by OPT ...
  • ENDL is explicitly optional, but with an opt-in -Wunterminated-load warning about it
  • cpl can also be written as cpl a
  • Allow a no- prefix to negate "meta" warnings (-Wno-all, -Wno-extra, -Wno-everything)
  • Allow -Wno-error=... to override -Werror (including for "meta" warnings)
  • RGBLINK supports e.g. ROMX FLOATING in linker scripts, which allows assigning a section to no particular bank (this is generally only useful with SDCC object files)
  • RGBLINK's .sym file now includes exported numeric constants (if this breaks your tools, please check the .sym specification!)
  • RGBGFX -i/--input-tileset uses a given tileset instead of generating all the tiles itself
  • RGBGFX -r 0 infers a valid width for the reversed image
  • RGBGFX -X or -Y only mirror tiles horizontally or vertically (-X -Y acts like -m)

Changed

  • Macro invocations can be at column 1, the very start of a line
  • ** exponent operator is right-associative (so p ** q ** r == p ** (q ** r))
  • LOW(Label) can be constant if Label is aligned to 8 or more bits
  • !expr can be constant 0 if expr has any non-zero bits
  • Error messages for undefined symbols mention if the symbol was previously purged
  • Sections that grew too big are reported after the whole assembly file has been processed
  • When RGBLINK encounters an unknown symbol, it lists the potential un-exported symbols by that name
  • RGBLINK reports source locations for conflicts between object files
  • Escape characters in section names in map files, and format empty sections more consistently too
  • RGBGFX -r gives a detailed warning if -c and -p mismatch; improved several other error messages too
  • LOW() and HIGH() have their own RPN operators in the object file (this should lead to nicer output from rgbobj)
  • Clarified a lot of documentation, including for fixed-point numbers, macros, and DAA
  • Explicitly document that FMOD behaves differently than %
  • Increment object file revision number to 11
  • Tests can be run with CTest if you use CMake

Fixed

  • Label & CONSTANT was not actually doing the & operation!
  • Some nonsensical uses of empty local labels (Global.) were ignored
  • Many bugs prevented SDCC object files from being processed correctly (special thanks to @RubenZwietering for helping with bugfixing and testing!)
  • Crash when assembling a nonexistent file
  • Crash when INCLUDEing an unbounded-size file (e.g. /dev/urandom)
  • Crash when passing an object file with invalid patch offsets to RGBLINK
  • Crash when specifying palette files within RGBGFX at-files
  • Crash when reversing an image if the tilemap referred to nonexistent tiles
  • Multiple bugs with parsing text palette files (GPL, HEX, and PSP)
  • Reversing a 1bpp image had incorrect tile data
  • Palette generation was suboptimal, potentially failing to fit within 8 palettes
  • Palette generation was also inconsistent between platforms
  • Tiles with too many colors were being detected incorrectly
  • Maximum number of palettes wrapped around after 255
  • Allow text palette files to have the maximum number of colors
  • Allow tab character after backslash for line continuation
  • Syntax errors at the beginning of a line do not abort assembly
  • -Wall did not enable -Wcharmap-redef
  • -Wnested-comment was undocumented
  • Building works on BSD systems
  • Building works on systems with bison 3.8.0

Thanks to @Rangi42 and @ISSOtm , @JL2210 , @avivace , @sukus21 for the work done for this release.