Adds the --legacy=off command-line option, which makes all built-in names require a $ prefix (such as $le, $assert, $incbin, and so on) to prepare for a possible future breaking-change. The default is --legacy=on for now, which keeps current behavior, and setting it off lets you opt in to the new behavior early (#230).
Errors out if you try to declare new symbols with reserved built-in names.
Adds the #assert directive outside of expression contexts.
Fixes the intelhex output format to not ignore output zeroes (#210).
Fixes the #align directive to take into account the current bank's start address (#213).
Improves the #include directive's relative file navigation algorithm (#215).
Fixes empty subrule patterns not being recognized at the end of an instruction (#216).
v0.13.7 - 2024 Jun 30
Fixes a regression in the instruction matcher (#204).
Improves the intelhex output format to ignore blank space. (#206).
v0.13.6 - 2024 May 31
Makes it so instruction arguments are parsed both with and without the "lookahead character" to increase flexibility and enable more instructions to parse without conflict. (See for example #203)
v0.13.5 - 2024 Jan 20
Reimplements the token-walker lexical analyzer to allow tokens to be split and reinterpreted, mostly useful in asm blocks, when an argument is passed down "verbatim" to a sub-rule.
Adds the strlen() function to get the UTF-8 byte count of a string.
Adds optional range arguments to the incbin(), inchexstr(), and incbinstr() functions.
Adds the tcgame output format, compatible with the "Turing Complete" game.
Adds the addr_unit parameter to the intelhex output format.
v0.13.4
Fixes the optimized instruction matcher algorithm, used by default, which was incorrectly rejecting short instructions with "glued" parameters.
v0.13.3
Fixes a bad interaction between #include and #once, where the resulting AST would be incorrect.
v0.13.2
Fixes certain errors not being caught by the assembler, one related to ruledef-typed parameters, and another one to asm blocks.
v0.13.1
Adds the conditional compilation directives #if, #elif, and #else.
Adds constant overwriting via the command-line with -d.
Makes it possible again to reference constants in #bankdef arguments.
v0.13.0
A complete internal overhaul, this version enables speed-ups of up to 7x for big projects.
You can now use alternative-style number literals anywhere, such as %0110 for binary literals, and $12abcd for hexadecimal literals.
You can specify multiple output formats for a single execution of the assembler, separated by --, such as customasm main.asm -f binary -o main.bin -- -f symbols -o symbols.txt.
Some format options have been extended with parameters, such as -f annotated,base:8,group:3.
You can now specify --color=off to disable colored output.
Breaking change: The usage of some directives has changed. #bits and #labelalign should now only appear inside a #bankdef definition. #noemit on should be replaced by something like #const(noemit) x = 0 at each affected constant declaration.
v0.12.0
Breaking change: Whitespace is now respected within rule patterns.
Adds the decspace and hexspace output formats.
Removed the old sized-literal syntax with a standard quotation mark 'X.
New code should use backquote slices `X.
Makes it so the assembler will select the rule with the fewest amount of
output bits in the case of multiple matches.
Adds the mesen-mlb symbol output format, for use with the Mesen NES emulator.
v0.11.8
Adds the built-in function le(), which reverses the bytes of an integer,
essentially performing little-endian encoding. It's important that the
argument be sized with a multiple of 8 bits. For example: le(0x1234)
or le(65000`16). Details here.
Makes it so assembly won't stop at the first resolve error, which allows
more errors to be caught in a single execution.