9 KiB
Compiler Commands Reference
ADD
Adds two values and stores result in destination.
Syntax:
<dest> = <param1> + <param2>
Examples:
result = 10 + 5
total = count + offset
sum = var1 + 100
AND
Bitwise AND operation between two values.
Syntax:
<dest> = <param1> & <param2>
Examples:
mask = value & $FF
result = byte1 & byte2
flags = status & $80
BREAK
Exits current loop immediately.
Syntax:
BREAK
Examples:
FOR i = 0 TO 100
IF i = 50
BREAK
ENDIF
NEXT
WHILE counter < 1000
counter++
IF error
BREAK
ENDIF
WEND
BYTE
Declares an 8-bit variable or constant.
Syntax:
BYTE <varname>
BYTE <varname> = <value>
BYTE <varname> @ <address>
BYTE CONST <varname> = <value>
Examples:
BYTE counter
BYTE speed = 5
BYTE screen @ $D020
BYTE CONST MAX_SPEED = 10
CALL
Calls a function with optional arguments.
Syntax:
<funcname>
<funcname>()
<funcname>(<param1>[,<param2>,...])
Examples:
initialize
initialize()
setColor(1,14)
drawSprite(xpos,ypos,@spriteData)
process("hello",42,myvar)
CASE
Defines a case branch within SWITCH statement.
Syntax:
See SWITCH
DEC
Decrements a variable or memory location by 1.
Syntax:
<var>--
DEC <target>
DECREMENT <target>
Examples:
counter--
lives--
index--
DEC $D020
DECREMENT screenColor
DEFAULT
Defines the default branch in SWITCH statement.
Syntax:
See SWITCH
ELSE
Alternative branch in IF statement.
Syntax:
See IF
ENDIF
Terminates IF block.
Syntax:
See IF
ENDSWITCH
Terminates SWITCH block.
Syntax:
See SWITCH
FEND
Ends a function definition.
Syntax:
See FUNC
FOR
Loop with automatic counter increment.
Syntax:
FOR <iterator> = <start_value> TO <end_value> [STEP <increment>]
Examples:
FOR i = 0 TO 10
screen = i
NEXT
FOR x = 0 TO 255 STEP 2
result = result + x
NEXT
FOR counter = start TO finish
process(counter)
NEXT
FUNC
Defines a function with optional parameters.
Parameter passing modes: in: (default, read-only), out: (write-only), io: (read-write)
Syntax:
FUNC <n>
FUNC <n>(<param1>[,<param2>,...])
Examples:
FUNC initialize
BYTE temp = 0
screen = temp
FEND
FUNC add(in:a,in:b,out:result)
result = a + b
FEND
FUNC process(value,{BYTE temp})
temp = value + 1
FEND
FUNC swap(io:x,io:y)
BYTE temp = x
x = y
y = temp
FEND
GOSUB
Calls subroutine with optional register passing.
Syntax:
GOSUB <target>
GOSUB <target> PASSING <var> AS ACC|XREG|YREG [<var> AS XREG|YREG [<var> AS YREG]]
Examples:
GOSUB myRoutine
GOSUB clearScreen
GOSUB processData PASSING value AS ACC
GOSUB multiply PASSING a AS ACC b AS XREG result AS ACC
GOTO
Unconditional jump to label or address.
Syntax:
GOTO <target>
Examples:
GOTO mainLoop
GOTO error
GOTO endProgram
GOTO $9000
GOTO (startAddress+$100)
IF
Conditional execution based on comparison.
When single parameter: 0 = false, non-zero = true
Syntax:
IF <param1> [<operator> <param2>]
Operators: = == <> != > < >= <=
Examples:
IF count == 10
result = 1
ENDIF
IF value > threshold
process(value)
ELSE
skip(value)
ENDIF
IF x < 100
x++
ELSE
x = 0
ENDIF
INC
Increments a variable or memory location by 1.
Syntax:
<var>++
INC <target>
INCREMENT <target>
Examples:
counter++
index++
frameCount++
INC $D020
INCREMENT screenColor
LABEL
Creates a named assembly label.
Syntax:
LABEL <n>
Examples:
LABEL mainLoop
LABEL skipSection
LABEL errorHandler
LET
Assigns value to variable.
Note: expressions not allowed (except constant expressions without spaces)
Syntax:
<dest> = <source>
Examples:
counter = 0
speed = maxSpeed
result = temp
value = 100+50
NEXT
Loop terminator for FOR.
Syntax:
See FOR
OR
Bitwise OR operation between two values.
Syntax:
<dest> = <param1> | <param2>
Examples:
flags = flags | $01
result = byte1 | byte2
status = status | errorBit
ORIGIN
Sets assembly origin address.
Syntax:
ORIGIN <address>
Examples:
ORIGIN $0801
ORIGIN $C000
ORIGIN startAddress
PEEK
Reads byte from memory location.
For operating with offsets the address parameter must be an absolute WORD variable in the zero page.
Syntax:
<dest> = PEEK <address>[<offset>]
Examples:
value = PEEK $D020
char = PEEK screenPtr[index]
data = PEEK buffer[5]
byte = PEEK pointer
PEEKW
Reads word (16-bit) from memory location at address.
For operating with offsets the address parameter must be an absolute WORD variable in the zero page.
Syntax:
<dest> = PEEKW <address>[<offset>]
Examples:
reset_addr = PEEKW $FFFE
WORD buffer @ $fd
offset_val = PEEKW buff_ptr[10]
WORD pointer
val = PEEKW pointer
POINT
Sets pointer variable to address of target.
Syntax:
POINTER <ptrvar> TO <target>
Examples:
POINTER screenPtr TO $0400
POINTER buff_ptr TO buffer // buffer might be a label to some data
POINTER funcPtr TO myFunction
POKE
Writes byte to memory location.
For operating with offsets the address parameter must be an absolute WORD variable in the zero page.
Syntax:
POKE <address>[<offset>] WITH <value>
Examples:
POKE $D020 WITH 0
POKE screenPtr[index] WITH char
POKE buffer[5] WITH data
POKE pointer WITH value
POKEW
Writes word (16-bit) to memory location.
For operating with offsets the address parameter must be an absolute WORD variable in the zero page.
Syntax:
POKEW <address>[<offset>] WITH <value>
Examples:
POKEW $0314 WITH handler
POKEW dataPtr[0] WITH value
POKEW buffer[10] WITH address
SUBEND
Returns from subroutine.
Syntax:
SUBEND
or
EXIT
Examples:
LABEL subroutine
counter = counter + 1
SUBEND
LABEL checkValue
IF value = 0
EXIT
ENDIF
process(value)
SUBEND
SUBTR
Subtracts second value from first.
Syntax:
<dest> = <param1> - <param2>
Examples:
result = 100 - 5
difference = end - start
remaining = total - used
SWITCH
Multi-way branching based on variable value comparison.
Features implicit breaks (automatic jump to ENDSWITCH after each case), supports nesting, and works with BYTE and WORD types.
Syntax:
SWITCH <variable>
CASE <value>
[statements]
[CASE <value>
[statements]]
[DEFAULT
[statements]]
ENDSWITCH
Notes:
- Each CASE automatically breaks (jumps to ENDSWITCH) after execution
- CASE values can be literals, constants, or variables
- DEFAULT branch is optional and executes when no CASE matches
- DEFAULT must come after all CASE statements
- Only one DEFAULT per SWITCH
- BYTE variables can only be compared with values 0-255
- Can use
#PRAGMA _P_USE_LONG_JUMP 1for large switch statements - Nested SWITCH statements are supported
Examples:
// Basic switch with default
SWITCH status
CASE 1
result = 10
CASE 2
result = 20
DEFAULT
result = 0
ENDSWITCH
// Switch with constants
BYTE CONST MAX = 100
SWITCH value
CASE MAX
overflow = 1
CASE 50
halfway = 1
ENDSWITCH
// WORD switch
WORD big_val
SWITCH big_val
CASE 1000
mode = 1
CASE 5000
mode = 2
DEFAULT
mode = 0
ENDSWITCH
// Nested switch
SWITCH outer
CASE 1
result = 1
CASE 2
SWITCH inner
CASE 10
result = 20
CASE 20
result = 40
ENDSWITCH
DEFAULT
result = 0
ENDSWITCH
// Using variables in CASE
BYTE threshold1
BYTE threshold2
LET threshold1 = 50
LET threshold2 = 100
SWITCH temperature
CASE threshold1
fan_speed = 1
CASE threshold2
fan_speed = 2
DEFAULT
fan_speed = 0
ENDSWITCH
WEND
Terminates WHILE loop.
Syntax:
See WHILE
WHILE
Loop that continues while condition is true.
When single parameter: 0 = false, non-zero = true
Syntax:
WHILE <param1> [<operator> <param2>]
Operators: = == <> != > < >= <=
Examples:
WHILE counter < 100
counter++
result = result + counter
WEND
WHILE running
processFrame
checkInput
WEND
WHILE x != y
x++
WEND
WORD
Declares a 16-bit variable or constant.
Syntax:
WORD <varname>
WORD <varname> = <value>
WORD <varname> = "<string>"
WORD <varname> @ <address>
WORD CONST <varname> = <value>
Examples:
WORD counter
WORD address = $C000
WORD message = "Hello"
WORD irqVector @ $0314
WORD CONST SCREEN = $0400
XOR
Bitwise XOR operation between two values.
Syntax:
<dest> = <param1> ^ <param2>
Examples:
result = value ^ $FF
output = byte1 ^ byte2
toggleBits = flags ^ mask