Skip to content

v0.4.0

Choose a tag to compare

@waitingforvsync waitingforvsync released this 23 Sep 11:27
· 43 commits to main since this release
  • ZA_INDEXEDBY values: declare the index values the register can hold at the indexed ZA_AUTO access just before it (var,X / var,Y / (var,X)). The access is then bounds-checked against the variable's width and assembles in silence; ranges and lists flatten like EQUB data.
  • The unchecked-indexed-access warning is now shown by default (it was opt-in): silent assembly requires the ZA_INDEXEDBY declaration.
  • ZA_WIPE: Placed directly after a zero-page wipe loop, it promises every pool byte has been freshly written: values may rely on the wipe for their zeroes, every earlier live range ends there, and the sweep's own stores are not warned about.
  • New opt-in warning: a store whose literal address or indexed base lies inside the ZA_POOL without naming a ZA_AUTO (the one stray pointer that is statically visible).
  • --warn <n>: choose the warning level (default 1; 2 adds the opt-in checks; 0 errors only).
  • --symbols <file>: dump every source file's resolved symbols to a JSON file - full dotted paths, sorted keys, one symbol per line, diffable.
  • -vv, and a reshaped -v listing: labels list with their address ( 1900 .install_irq), assignments show the value they became with the source expression bracketed (base = 18 [&12]), the byte field is wider, and -vv dumps every emitted byte and whole list values.
  • --pad: pad a .ssd image out to a full 80-track disc (200K).
  • Relaxed reserved names: labels, FOR variables, macro and FUNCTION parameters, ZA_AUTO names and -D defines may share a spelling with any keyword, mnemonic or macro. Assignments can use reserved names with the @ prefix: @next = 5 binds next. Only TRUE, FALSE and PI stay reserved outright.
  • ZA_DISCARD / ZA_WIPE placement is now path-accurate: a marker belongs to the path it is written on, with a label as the pivot - above the label it stays on the arm that falls in, below it it covers every arriving path.
  • A missing INCLUDE file is reported immediately as a fatal error, instead of surfacing as misleading parse errors downstream.
  • Fixed: ZA_AUTO variables reached with ,Y indexing (which has no zero-page encoding, so the access widens to absolute) were invisible to the allocator's analysis - a table read only that way could be classified unused or have its bytes reused while still live.
  • Fixed: FOR over a list literal could bind garbage to later iterations when the loop body's expressions were allocation-heavy.
  • Fixed: a string value with an embedded NUL byte cut the -v listing short. Unprintable bytes in a string now render as . in listings and diagnostics; the assembled bytes are untouched.
  • Numbers up to 32 bits now print exactly in listings and PRINT (&FFFF1900 no longer renders as 4.29484e+09).
  • Both zero-page allocation documents substantially reworked and expanded.