← News

FantASM 2.2.0 is available

October 2, 2026FantASM

FantASM 2.2.0 is available to download. The linker grows up: fantasm link places sections by a link map, writes fxi version 3, and carries !test blocks from objects into a JSON file another host can run. A program embedding the crate can now assemble, link and write every output in memory, with no scratch files.

Breaking

  • fxi is version 3. A region-table entry is 7 bytes and carries its own address, so regions need not be adjacent. A version-2 reader cannot read a version-3 file.
  • For a program embedding the crate — FormatContext has a tests field. A program constructing one supplies tests: &[].

Added

  • A link map [fantasm link --map]: REGION places region= sections at a run address apart from where they load; _run, _load and _size read a region.
  • Brace blocks: MACRO, IF, REP, !virtual, !test, STRUCT, MODULE and INTERFACE close with } as well as their own closer.
  • !test in an object build, carried through the link into a test description file [fantasm link --tests], with a ready point to run the image to first [!tests_ready, --tests-ready, --tests-ready-limit].
  • Linked header fields [fantasm link --pc, --sp]; !nex pc and sp take a symbol name in an object.
  • In-memory linking and output for embedders: Assembler::write_to, LinkMap::parse, linker::write_to, write_sld_to, write_labels_to, and fantasm::fzobj re-exported.

Fixed

25 fixes, and the worst of each group:

  • 17 wrong output, silently — a constant reading $ beside a label took the wrong value; label + N in an object lost its N once linked; a page= section was left out of a linked .nex.
  • 4 sources that should have linked or assembled — _page() and SIZEOF() of a macro parameter were refused; two page= sections sharing a window= were refused as overlapping.
  • 4 in debug and artifact output — a linked SLD named the wrong page for a region’s and an fxi link’s records; --export-labels wrote a self-reference to the wrong file.

27 new diagnostic codes, 1201 to 1227. E1164 is withdrawn: a !test block in an object build is now assembled. Test coverage expanded from 1,762 to 2,015 tests.

Every change is in the full changelog under [2.2.0].

Get it from the Downloads page.