FantASM 2.3.0 is available
November 1, 2026
FantASM
FantASM 2.3.0 is available to download. A .nex carries a loading screen of any kind, a generic device builds for a 64 KiB machine with no ROM, and !static_assert fails a build on a condition settled once every label is final. 59 faults are fixed, 29 of them wrong output given in silence.
Breaking
- A constant or define named after a directive is case-sensitive.
MESSAGE equ 7is reached byMESSAGEonly. Spell the reference as the definition is spelled. - A bit number past 7 in
bit,setorresis an error (E1023), no longer configurable in[lint]. It warned and then encoded bit 0. - A macro’s arguments must match its parameters (
E1033). A call with an extra or a missing argument used to assemble. - A source given on the command line is built in place of the project’s targets. Use
--onlyto build a target. - Recipes run in the project file’s directory, in
[tasks]and[target.tasks]. Write their paths relative tofantasm.toml. _pageof a label onzx128is the 8 KiB page in a linked build, as in a direct one: 10 for$4000, where a link gave 5.- An
IFmust close in the file that opened it (E1074).
Added
- Loading screens in a
.nex[!nex screen,!nex palette,!nex copper]: every kind, from a file —.nxiand.sl2included — or from display memory, with a palette. A screen survives an object build andfantasm link -f nexwrites it. A program bank loaded over the screen is warned of (W1233). - A
genericdevice [-d generic]: 64 KiB of RAM, no ROM, no paging. !static_assertfails the build when its expression is zero once every label is final.- An
fxiregion kindBANKED, one region per page thatpage=andwindow=sections fill. in f,(c), the same instruction asin (c).
Fixed
59 fixes, and the worst of each group:
- 17 wrong output, silently —
--gc-modulesswept a routine called just afterENDMODULE; invalid instructions such asld (c),aandjp (ix+1)assembled as valid ones; a value defined further down and too big for its operand was truncated. - 12 wrong output from a link, silently — label arithmetic and
$in an object linked to the wrong value; apage=section overwrote code placed at an address; a constant from another object was cut to 16 bits. - 10 in the language server — a request was answered from the last file assembled; other open files were assembled from disk, not from their unsaved text; renaming
countalso renamedGfx.count. - 7 sources that should have assembled, or should not have —
!=with no space before it;ld (ix+d),nwith a name as the value; extra.nexbanks counted toward-M. - 4 in builds and projects —
fantasm initwrote projects that did not build; apre_buildrecipe could not generate its own target’smain. - 4 in diagnostics — the caret was misaligned on lines with tabs;
F1072andE1036printed twice. - 3 links that should have succeeded — an archive with no index was not searched;
--gc-sectionsswept a region reached only through_run,_loador_size. - 2 crashes — an
assert_memspan past 64K aborted the process; linking an empty section at$0000panicked.
13 new diagnostic codes: 1228 to 1237, 1240, 1252 and 1253. An object carrying a loading screen or a difference of labels in two sections is refused by an older linker. Test coverage expanded from 2,015 to 2,189 tests.
Every change is in the full changelog under [2.3.0].
Get it from the Downloads page.