Expressions
Number Formats
Binary
Binary numbers in AZ65 use standard 6502 binary number syntax. They are prefixed
with a modulus (%
). For example:
%00001111
%1010
%0
Hexadecimal
Like binary numbers, standard syntax is used. They are prefixed with a
dollar-sign ($
) and are case-insensitive. For example:
$1234
$DADcafe
$0
Decimal
Numbers without a %
or $
prefix are assumed to be decimal (base 10) numbers.
Operators
All expressions in AZ65 operate on 32-bit signed integers with wrapping over/underflow semantics. All operators and their precedence match that of the C language with a few notable modifications:
- There is no C binary comma (
,
) operator. It is mostly an anachronism that many C programmers aren't even aware exists. - The unary
<
and>
operators, common in 6502 assembly, are present. They are used to get the low and high byte of a 16-bit word. For example:< $1234
evaluates to$34
.> $1234
evaluates to$12
.
- There is a unary
+
operator. This is mainly used to disambiguate between expressions and memory locations in some assembly languages. For example, in z80 assembly the instructionld a, ($42)
is ambiguous. A programmer may intend for this to load the value$42
intoa
, but AZ65 will interpret this is loading a byte at address$0042
intoa
. To add clarity, you can use a unary+
to indicate that you are passing a numeric expression rather than an address:ld a, +($42)
- Unsigned (logical) shift operators are provided. Use the
<<<
and>>>
symbols to shift left and right respectively:$ffffffff >>> 1
evaluates to$7fffffff
$ffffffff <<< 1
evaluates to$fffffffe