Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Miscellaneous

Now that we have introduced many of the aspects of KASM and inner workings of kOS, this page will serve as a quick reference for implementing various things.

If statements

Let’s say we had the variable $x, and wanted to basically do:

IF X > 1 {
    PRINT "IF".
} ELSE {
    PRINT "ELSE".
}

The KASM implementation would be:

	push "$x"
	push 1
	cgt         ; x > 1
	bfa .else
	push @
	push "IF"
	call #, "print()"
	pop
	jmp .if_end
    .else:
	push @
	push "ELSE"
	call #, "print()"
	pop
    .if_end:
	...

While loop

Let’s say we wanted to implement the following while loop (the inverse of an UNITL loop):

while SHIP:ALTITUDE < 70000 {
    wait 0.
}

This would be implemented in KASM as:

.loop:
    push 0
    wait
    push "$ship"
    gmb "altitude"
    push 70000
    clt            ; SHIP:ALTITUDE < 70000
    btr .loop

For loop

Example code in C style:

for (int i = 0; i < 10; i++) {
    PRINT i.
}

In KerboScript:

FROM {local i is 0.} UNTIL !(i < 10) STEP {SET i to i + 1.} DO {
    PRINT i.
}

KASM (using the stack):

push 0
.loop:
    dup
    push 10
    clt
    bfa .loop_end
    dup
    push @
    swap
    call #, "print()"
    pop
    push 1
    add
    jmp .loop
.loop_end:
    ...

KASM (using a kOS variable $i):

bscp 1, 0
push 0
stol "$i"
.loop:
    push "$i"
    push 10
    clt
    bfa .loop_end
    push @
    push "$i"
    call #, "print()"
    pop
    push "$i"
    push 1
    add
    sto "$i"
    jmp .loop
.loop_end:
    escp 1