c65gm/commands.md

6.7 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)

DEC

Decrements a variable or memory location by 1.

Syntax:

<var>--
DEC <target>
DECREMENT <target>

Examples:

counter--
lives--
index--
DEC $D020
DECREMENT screenColor

ELSE

Alternative branch in IF statement.

Syntax:

See IF

ENDIF

Terminates IF block.

Syntax:

See IF

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 status & $80
    errorFlag = 1
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.

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.

Syntax:

<dest> = PEEKW <address>[<offset>]

Examples:

addr = PEEKW $FFFE
value = PEEKW dataPtr[0]
word = PEEKW buffer[10]
address = PEEKW pointer

POINT

Sets pointer variable to address of target.

Syntax:

POINTER <ptrvar> TO <target>

Examples:

POINTER screenPtr TO $0400
POINTER dataPtr TO buffer
POINTER funcPtr TO myFunction

POKE

Writes byte to memory location.

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.

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

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