rg-asm release notes
The assembler and linker for Atari ST, TT and Falcon. Newest release first.
0.7.13 — 2026-09-26
Fixes mis-assemblies of register aliases in addressing modes, branches to keyword-named symbols, and nondeterministic object output.
Bug fixes
- Register aliases in pre-decrement and post-increment addressing: Register equates used as address registers (
input EQUR a3, thenmove.b -(input),d6) resolve to the aliased register instead of reading as negative-displacement expressions. - Branch instructions targeting keyword-named symbols: Branch instructions with offsets targeting symbols named after directives (
bsr set+4,bra equ+8) assemble as branches rather than being parsed as equate definitions. - Deterministic object output: Symbol table ordering in DRI and Pure C object file generation is now deterministic across build runs.
0.7.12 — 2026-09-23
Strict literal MOVEM preservation under non-optimizing mode.
Improvements
- Strict literal MOVEM assembly: Gated the single-register
MOVEM -> MOVEpeephole optimization behind its own size-optimization switch (active by default in the standard optimization profiles). Under--no-opt-size(-O0), explicitMOVEM.L <ea>,Rninstructions assemble verbatim as0x4CDxwithout automatic folding toMOVE.L, enabling exact round-trip fidelity for disassembled source code.
0.7.11 — 2026-09-23
Fixes the glued Devpac define flag so the name keeps the case you typed.
Bug fixes
- Glued Devpac defines keep their spelling:
-eFOO=7now definesFOO, matching the separated-e FOO=7form. Previously the glued form lower-cased the name tofoo, so the two spellings of the same flag disagreed.
0.7.10 — 2026-09-20
Fixes memory indirect addressing parsing when PC is used as base with an index register.
Bug fixes
- Memory indirect PC-base addressing: Correctly parses
([0,PC,An])and related memory indirect forms withPCbase and an index register.
0.7.9 — 2026-09-20
Allows PC-relative destination operands on CMPI and clarifies the TST address register diagnostic.
Bug fixes
- CMPI with PC-relative destinations: Emits no warning on legal
CMPIinstructions reading PC-relative memory destinations (e.g.cmpi.b #$10,-4(PC)). - TST address register diagnostic: Clarified that only byte size (
TST.B An) is unencodable, while word and long sizes are supported on 68020+.
0.7.8 — 2026-09-17
Expands branch relaxation pass budget for large files and improves diagnostic messaging.
Bug fixes
- Branch relaxation budget: Increased default pass limit so large listings assemble without requiring
--opt-relax-passes. - Relaxation diagnostic: Clearly reports pass limits and the
--opt-relax-passes=<N>override flag upon exhaustion. - Zero-pass relaxation refusal: Refuses
--opt-relax-passes=0with a diagnostic rather than emitting unverified layouts.
0.7.7 — 2026-09-17
Refines TST address register checks against the declared target CPU architecture.
Bug fixes
- CPU-aware TST validation: Silences 68000-only warnings when assembling for 68020+ targets with
.cpu 68020.
0.7.6 — 2026-09-13
Rejects shift and rotate counts that have no immediate encoding instead of silently assembling the wrong bytes.
Bug fixes
- Shift and rotate immediate bounds: Immediate counts outside 1..8 are rejected with an error rather than silently truncated to 3 bits.
0.7.5 — 2026-09-12
Added --summary flag (summary tables now off by default), display control flags (--color, --ascii, --banner), and graceful broken pipe handling on stdout.
Features
- Summary tables off by default (
--summary): the section size and cycle total tables are now omitted unless--summaryis passed on interactive stderr;--functionsalso enables the per-function breakdown. - Display control flags:
--color <auto|always|never>(honoursNO_COLOR),--asciifor plain ASCII table borders, and--banner <logo|line|none>for masthead selection.--color=alwayskeeps ANSI colour and boxed listings when piped into a pager such asless -R.
Bug fixes
- Broken stdout pipe: exits 0 instead of panicking when stdout is piped into
headorless.
0.7.4 — 2026-09-09
Added .prgflags directive support for TOS executables.
Features
- PRG flags directive (
.prgflags): Added.prgflags <expr>directive support, allowing source assembly to set the PRG flags in the generated.prg/.tosheader.
0.7.3 — 2026-08-26
Test-infrastructure only: the shipped assembler is unchanged.
Improvements
- The test suite's scratch directories now remove themselves; the helper behind 44 tests never deleted them, leaving 177,488 on the build host.
- No assembler behaviour is affected — the change is confined to the test suite.
0.7.2 — 2026-08-25
Minor test suite hardening for deterministic non-terminal resolution.
Improvements
- Summary display precedence tests now resolve terminal capabilities explicitly.
0.7.1 — 2026-08-21
More floating-point coverage, a size-optimisation fix, and linker fixes for cases that could previously assemble or link to the wrong bytes. Default dialect output is unchanged.
New features
FScc,FDBcc, andFTRAPccnow recognise and encode all 32 condition predicates, completing the FPU condition-code surface.- Added a library option so callers that re-assemble their own listings can control instruction alignment independently of the selected dialect.
- Raw
#{$w0,$w1,$w2}FPU immediates now also accept the 12-byte packed (.p) form, matching the packed listings produced for round-trip verification.
Bug fixes
- Invalid raw
#{$...}floating-point immediates are now rejected instead of being silently dropped; previously the bytes after the instruction could be misaligned. --no-opt-sizenow keepsCMPA.L #n,Anlong as written; it was the one size transform that still fired with size optimisation disabled.- Same-section PC-relative references are now recomputed by the linker when
--relaxis used, fixing cases where a function could resolve to a point inside itself. - Expressions used as displacements now relocate correctly instead of turning into zero when they involve a symbol difference.
- A BSS section that references an external symbol now produces an error instead of silently dropping the reference.
- An unknown named section type is now reported as an error instead of being assembled into the current section.
- Named typed sections now keep their name where the output format supports it, so small-data sections can be placed by name.
Known issues
- With size optimisation enabled, an explicitly sized absolute address such as
move.l ($52).l,d0can still be shortened to word form; the explicit long form is currently treated as a size hint rather than a directive.
0.7.0 — 2026-07-29
Adds GenPC dialect support — Ziggy/OVR's PC cross-assembler (Overlanders).
Use --dialect=genpc for GenPC and as68 sources.
New features
--dialect=genpc: brace{/}macros,IF/WHILE/REPEAT,@octal, Devpac-styletext/end.- Flat binary output with
--raw; optional--relocreloc-table trailer and--strip-bsstail trim. LS/LSTsymbol-file load;.SY2overlay values when assembling with--reloc.
Improvements
- Default
--dialectrestored tovasmfor Motorola-syntax sources.
Bug fixes
- GenPC: SY2 overlay reloc values, WHILE/REPEAT parse depth, and sizing defaults (forward branches word-sized, unsized MOVE defaults to word).
0.6.0 — 2026-07-27
Much broader dialect coverage and byte-level checks against classic Atari
assemblers. Devpac, TurboAss, MADMAC, Alcyon and several other tools now have
committed goldens; --strict-dialect catches foreign syntax more reliably.
New features
- Full-syntax corpora for TurboAss and DevpacST 1.01 (STANDARD / GenST TOS programs).
- Expanded MADMAC, Alcyon AS68, Lattice, SEKA, GST-ASM and other dialect packs with host oracles.
- Dialects and smoke harnesses for additional vendored assemblers (Sozobon, Josy, Brainstorm, MWC, AssemPro, GFA).
- LLVM-flavoured GAS ingestion path and a
gas-llvmcorpus. - Aztec C Mot ingestion with a self-golden DRI pin (native ST
AS.TTPstill not available).
Improvements
- GenST / TurboAss
--prgoutput matches classic empty-DATA and reloc trailers more closely. --strict-dialectpromotes foreign-syntax heuristics to hard errors across dialects.- Rejection checklists and negatives across all 22 dialect coverage matrices.
Bug fixes
- Fixed empty-DATA padding when text length was 2 mod 4 (vlink-style pad) for GenST-family and TurboAss programs.
- GenST 1.01 treats
|as a line comment; ENDC handling matches the era.
0.5.6 — 2026-07-24
Added more vasm Mot and Pure C dialect coverage, and fixed a macro expansion crash. Building the macOS release no longer needs CoreFoundation.
New features
- Broader vasm Mot syntax: nested
\@!/\@@stacks,-allmpfor args 10–35, include / offset / section, data aliases and conditionals. - Pure C
MACRO name.sizesized-macro expansion, plus SET / EQU / MACRO / REPT / CPU coverage. - Pure C object names and FIX tables closer to PASM.
Bug fixes
- Macro
.sizeand\?0expansion no longer panics. - Dropped the
chronodependency so macOS cross-builds do not need CoreFoundation.
0.5.5 — 2026-07-22
Added support for additional dialects and improved the size optimiser. rg-asm now understands far more of RMAC's syntax, produces tighter code at the higher optimisation levels, and lays out Devpac-style object files more faithfully.
New features
- Much broader support for RMAC-style source, including its higher optimisation levels.
- Tighter code from the size optimiser: some absolute memory accesses become shorter PC-relative forms.
- Improved Devpac-compatible object output and listing formatting.
Bug fixes
- Fixed a false error on some forward references in indexed PC-relative addressing.
- More accurate instruction timing for immediate-to-register arithmetic.
- Corrected a few object-file layout details for better interoperability with other tools.
0.5.1 — 2026-07-20
Added a machine-readable JSON mode and an optional per-function size/timing table. Also fixed a pile of linker bugs — cases that used to emit subtly wrong programs now either work correctly or stop with a clear error.
New features
- A
--jsonmode that prints one structured document you can feed to other tools. - An optional
--functionstable showing the size and cycle cost of each function.
Bug fixes
- Fixed several linking bugs that could silently produce incorrect programs.
- Out-of-range jumps, bad relocations, and malformed flat images now stop with a clear error instead of emitting wrong bytes.
Breaking changes
- With no
-o, the output file is now named after the input (main.s→main.prg) instead of alwaysout.tos. Pass-o out.tosto keep the old name. - The
--summaryoptions were replaced by--functions(the per-function table),-q(quiet), and--json(machine-readable). - A few command-line flags were renamed for consistency; see the manual for the current names.
- The separate manual and man page were folded into the README that ships with the download.
0.1.0 — 2026-06-01
First public release. One self-contained assembler and linker for Atari ST and Falcon development — runs natively on Linux, macOS and Windows with nothing else to install. Free and open source (MIT or Apache-2.0).
New features
- Assembles Motorola syntax plus seven other classic assembler dialects, detected automatically per file.
- Links directly to ready-to-run Atari
.TOS/.PRGprograms. - Supports the full 680x0 line (68000–68060) and ColdFire instruction sets, floating-point targets, and a size optimiser.
- Reads and writes six common Atari object-file formats (DRI, GST, Pure C, SEKA, a.out, and ELF), so it mixes cleanly with other toolchains.
Known issues
- A handful of 68030 memory-management instructions are recognised but not yet assembled; rg-asm reports an error for them rather than risk emitting wrong code.