A .Net-based Cross-Assembler for Several 8-Bit Microprocessors
"{CLR}{HOME}"
for Commodore-specific encodings.This release mostly focused on improved error messages.
Support for the Sharp LR35902, the z80-flavored CPU powering the Nintendo Game Boy.
Minor bugfix release
toString()
. Previously standalone functions for arrays and strings are now implemented as methods on instances of those types. See the documentation on expressions for more details.u
, U
and u8
.$"3+2={3+2}"
, including value formatting support.--vice-labels
used with -L
can output label listings as VICE format.^^
prefix operator extracts the high word of a numeric expression.--disassemble
option. The --disassembly-start
and --dissembly-offset
options control disassembly. See the documentation for more details.range
function generates an integer array from given arguments.-E
and --ignore-colons
has been removed.--createconfig
option is now a flag that will generate a config file called 'config.json' from the passed options.@"{macro_param}"
has been removed. String interpolation is now supported as a replacement capable of full stringifying full expressions.concat
, filter
, len
, map
, reduce
, and sort
.poke
function now returns the value of the poked value..macro
, .binclude
and .include
are now affected by the -C
option.Sixty502DotNet.Shared
.cwai
and certain indexed instructions.--config
option had a defect that occasionally prevented the JSON schema from validating.cbmflt
and cbmfltp
functionality (both the pseudo-op directives and related functions)New functional support for array, with the following functions:
concat
: Concatenate two arrays or stringsfilter
: Filter array or string elements according to the specified predicatemap
: Map array elements to new values according to the specified transform functionreduce
: Reduce array elements to a new value according to the specified reducer functionsort
: Sort the array or stringThe function, or arrow, expression idiom has been added to the assembler syntax to support many of the above built-in functions. Function expressions work like callbacks and lambdas in other programming languages. See the wiki for usage and examples.
.stringify
directiveTo generate string byte output from non-string values, ordinarily the format
function would be used. A new directive .stringify
allows the same in a compact format.
.bankbytes
extracts the bank byte values of expressions in the list.hibytes
and .lobytes
extract upper and lower byte values of expressions in the list.hiwords
and .lowords
extract upper and lower word values of expressions in the list.ifconst
, .ifnconst
and their corresponding .else
directives allow for conditional assembly based on the constness of the expression.import
allows to use symbols defined in a separate scope without referring to them by their fully qualified name.-E
completes source preprocessing and exits after outputting to the output stream--no-highlighting
suppresses highlighting of causes of errors and warnings--Wall
enables all other warning options--Wambiguous-zp
warns when an argument could be zero-page or absolute--Wjump-bug
warns whenever the indirect JMP bug is encountered when in 6502 mode--Wtext-in-non-text-pseudo-ops
warns whenever string data is used in non-string pseudo-ops--Wsimplify-call-return
warns whenever a subroutine call and subsequent return can be simplified to a jump--Wunreferenced-symbols
issues a warning for every symbol that is defined but never referenced+
operator>>>
and its complement assignment >>>=
shift an integer to the right while preserving its sign===
and !==
test if two identifiers refer to the same object++
and --
) for numeric variables\
followed by a line feed/carriage escapes the newline character_
variable is available for operations where the result of an expression is not neededsizeof
function returns the size (in bytes) of the argument. This is distinct from the existing len
function that merely reports the length of the string or array expressionint
and float
functions convert the number argument into an integer or float, respectivelyMATH_TAU
represents τ
, which is the count of radians in a turn (2*π
)typeof
function returns the expression type in the argument.label
directive is unnecessary for .goto
statements to the label that occur past the label's definition.include
directive has bene invoked--errors
to output errors to the text file in the specified path is now -e
, since -E
is repurposed for preprocessed output.\
in a string can only follow a valid escape character..let
directive now accepts multiple assignment expressions--ignore-colons
deprecated.cpu
, .end
, .macro
/.endmacro
and .include
/.binclude
preprocessor directives are always case insensitive, and are not affected by the -C
optionf
/full
of the command-line option --createconfig
will enumerate the entire options, whether or not the were specified, instead of generating a sample.break
(or similar control directive) is now strictly optional in switch .case
statements, and fallthroughs will not be reported to the user.poke()
function was not behaving according to its documentation for addresses outside the bounds of the generated code<=>
.a?b:c
..relocate
directive..let
keyword, the :=
operator can be used to define and assign values to variables.+=
and &=
..label
directive for labels back-referenced from .goto
directives, which avoids label redefinition errors..do ... .whiletrue
..enum
keyword..target
directive is no longer supported..switch
directive had some errors..goto
destinations were not being recognized..page
directive to throw errors incorrectly has been fixed..map
keyword is did not behave correctly with string literal arguments.