Gameboy Development Forum

Discussion about software development for the old-school Gameboys, ranging from the "Gray brick" to Gameboy Color
(Launched in 2008)

You are not logged in.

Ads

#1 2025-11-02 08:02:38

Rangi
Member
Registered: 2019-11-02
Posts: 20
Website

RGBDS 1.0.0 released (assembler, linker, header fixer, gfx converter)

The RGBDS Game Boy assembler+linker package has hit a big milestone: it's reached version 1.0.0 after years of 0.x releases!

What does this mean? For one thing, we'll now adhere to SemVer guarantees. If you develop a project using RGBDS 1.0, then it will still be compatible with any 1.x version.

This release also marks what I hope will be a decrease in release churn, no matter what the version numbers are. Low-hanging fruit of small feature requests, known bugs, and awkward past language features have all been handled by now. There are many big ideas left (hardware layout description files! assemble Z80 as well as SM83 instructions! convert 4bpp SNES graphics! etc etc etc), but I don't plan to be implementing them any time soon.

What about what's in RGBDS v1.0.0 itself that makes it worth updating your projects to? You can read all the version history changelogs, but I'll highlight a few features (from 1.0.0 and from other recent 0.9.x releases).

- Numbers can be written with 0x, 0b, and 0o base prefixes, in addition to the usual $, %, and & ones. This will make it easier to copy data to/from most other programming languages which use 0-based prefixes.
- New string functions like STRSLICE and STRFIND are 0-indexed, instead of the old fencepost-error 1-indexed ones. There are also some operators for making common string operations more terse and readable: ++ concatenation, and === and !== comparison.
- READFILE can read a file into an EQUS constant -- sort of like INCBIN except it doesn't go straight into ROM, so you can do all kinds of preprocessing on the data beforehand. You might prefer this to writing separate data-processing tools in C, Python, Rust, etc. (For example, some projects do Huffman compression for text, entirely in asm macros like text "Hello world!".)
- Instead of doing ld hl, SomeSingleUseText in the middle of a routine, and then doing SomeSingleUseText: db "my message\0" far away at the end of it, you can use a "fragment literal": ld hl, [[ db "my message\0" ]]. This is comparable to the ASMotor feature of "code/data literals", except using double brackets instead of curly braces.
- Lots of features convenient for doing advanced metaprogramming with macros. The ., .., and __SCOPE__ symbols expand to the current label scope, local label scope, and deepest current scope. You can get the Nth macro argument with \<N>, and the Nth-last macro argument with \<-N>.
- More consistency across programs. They all support -h/--help, -V/--version, -W warning diagnostics, --color, and -v/--verbose (except RGBFIX doesn't have any --verbose output).
- RGBGFX can be given a premade tileset to use when converting some tilemap graphic.
- Lots of bugfixes in RGBDS itself, but also new/changed features that make bugs in your own code easier to find. Really; some of them may have been quietly affecting you for a long time. We test RGBDS on some real-world projects, and have found and fixed multiple bugs in their code just in the past year.
- This may be quickly obvious the first time you run into an error, but: colorful terminal output! Yellow warnings, red errors, magenta verbose messages, green and blue in help messages. Configurable with the --color flag or the NO_COLOR and FORCE_COLOR environment variables.
- Plenty of other updates, if you want to read the changelog and see them all. smile

Relevant links:

- RGBDS v1.0.0 release on GitHub
- RGBDS documentation manual


My projects:
Tilemap Studio: GB+GBC+GBA+NDS+SNES tilemap editor
Polished Map: Pokémon map+tileset editor
• Pokémon Polished Crystal and Red★/Blue★

Offline

 

Board footer

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson