Evaluator in K65 is compile-time executed expression language very similar to C/C++ expressions.
Introduction
In every place where the compiler expects a single number, you can invoke the evaluator by simply using square brackets.
data NumberFour {
[2+2]
}
The evaluator can be also invoked freely outside any section body, e.g. to set variables:
[ FOUR = 4 ]
which can be later used freely as compiler constants and within further evaluator expressions:
data FourFiveSix {
FOUR // value of variable FOUR defined earlier
[FIVE = FOUR+1] // defines variable FIVE and returns its value
[FIVE+1] // uses recently set FIVE value
}
Operators
Available operators and their precedence levels are similar to operators in C and C++, operators are sorted by precedence from highest to lowest:
Precedence 2
Associativity: left-to-right
| Operator | Description |
|---|---|
++--()[]. |
suffix incremen suffix decrement function call array subscripting single argument function call |
Precedence 3
Associativity: right-to-left
| Operator | Description |
|---|---|
++--+-!~ |
prefix increment prefix decrement unary plus unary minus logical NOT bitwise NOT (One's Complement) |
Precedence 5
Associativity: left-to-right
| Operator | Description |
|---|---|
*/% |
multiplication division modulo (remainder) |
Precedence 6
Associativity: left-to-right
| Operator | Description |
|---|---|
+- |
addition subtraction |
Precedence 7
Associativity: left-to-right
| Operator | Description |
|---|---|
<<>> |
bitwise left shift bitwise right shift |
Precedence 8
Associativity: left-to-right
| Operator | Description |
|---|---|
<<=>>=?>?< |
less than less than or equal to greater than greater than or equal to select greater value (maximum) select smaller value (minimum) |
Precedence 9
Associativity: left-to-right
| Operator | Description |
|---|---|
==!= |
equal to not equal to |
Precedence 10
Associativity: left-to-right
| Operator | Descriptiont |
|---|---|
& |
bitwise AND |
Precedence 11
Associativity: left-to-right
| Operator | Description |
|---|---|
^ |
bitwise XOR (exclusive or) |
Precedence 12
Associativity: left-to-right
| Operator | Description |
|---|---|
| |
bitwise OR (inclusive or) |
Precedence 13
Associativity: left-to-right
| Operator | Description |
|---|---|
&& |
logical AND |
Precedence 14
Associativity: left-to-right
| Operator | Description |
|---|---|
|| |
logical OR |
Precedence 15
Associativity: right-to-left
| Operator | Description |
|---|---|
?: |
lternary conditional |
Precedence 16
Associativity: right-to-left
| Operator | Description |
|---|---|
=+=-=*=/=%=<<=>>=&=^=|= |
direct assignment assignment by sum assignment by difference assignment by product assignment by quotient assignment by remainder assignment by bitwise left shift assignment by bitwise right shift assignment by bitwise AND assignment by bitwise XOR assignment by bitwise OR |
Precedence 18
Associativity: left-to-right
| Operator | Description |
|---|---|
, |
expression list (executes in sequence, returns value of the last) |
Functions
acos( x )
Arcus cosinus
addbyte( sec, b )
Add byte b to section sec
asin( x )
Arcus sinus
ceil( x )
Round up to nearest integer
clamp( x, min, max )
Clamp x to range min to max
color( r, g, b )
Return palette index for nearest color to color (r,g,b)
color( x )
Return palette index for nearest color specified in format 0xRRGGBB
cos( x )
Cosinus
error( err )
Print error message err ane terminate compilation
floor( x )
Round down to nearest integer
frac( x )
Get fractional part ( x-floor(x) )
index( tab, x )
1-dimensional indexing operator ( same as tab[x] )
index( tab, x, y )
2-dimensional indexing operator ( same as tab[x,y] )
max( a, b )
Maximum
min( a, b )
Minimum
pow( x, y )
Power function
print( msg )
Print message msg
rnd( )
Random value 0 <= x < 1
round( x )
Round to nearest integer
sin( x )
Sinus
size( sec )
Current size of section sec
sqrt( x )
Square root