909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
|
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
|
+
+
+
-
+
+
+
+
+
+
+
+
+
+
-
-
-
|
=== Instructions ===
For some instructions, a comma prefix means to operate on another object,
while the lack of the comma means to operate on itself; for some other
instructions, a comma prefix means to use signed instead of unsigned
arithmetic. An equal sign prefix usually means to write instead of read.
Anywhere an instruction is allowed, it may be one of these instructions, or
it may be a constant value, or reading/writing a variable (see the above
section about variables specific to objects), or a block instruction (see
Some instructions are block instructions; see the next section.
the next section for block instructions).
Many instructions are state-changing instructions; these instructions are
marked with ** in the summary line. Such instructions are not allowed to be
used on the same turn as the IgnoreKey instruction.
<function>
Call a user-defined function (the name starts with a ampersand).
<global> ( -- any )
Read a global variable.
=<global> ( any -- ) **
Write a global variable.
<label>
Define a label. Labels are local to the current class. (Label names
always start with a colon.)
=<label>
Go to a label. (Put the colon after the equal sign; this instruction,
and the one below, are using a double sigil.)
,<label>
Call a label as a subroutine; when it returns, comes back to here.
<function>
Call a user-defined function.
. ( x -- )
+ ( in1 in2 -- out )
Add two numbers together.
- ( in1 in2 -- out )
Subtract in2 from in1.
|
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
|
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
|
-
+
+
|
is no popup quiz. (Not implemented yet. Details described here might be
changed when it is implemented.)
ret ( -- )
Exit the current subroutine. If this is a message block, it must either
leave the stack as it is, or leave it but with one extra value pushed
which will be the return value from the message call. (This is implied
at the end of a code block.)
at the end of a code block.) For a user defined function call, or a
subroutine call, these restrictions are not applicable.
rot ( x y z -- y z x )
-rot ( x y z -- z x y )
rsh ( in shift -- out )
Logical right shift. If the shift amount is out of the range 0-31,
|