Global G0;
Array arr -> 256;
!Global g2;
[ Main i j;
! i = 1;
! @print_num 1;
! arithmetic
@add 1 2 -> i; @print_num i; @print_char ' ';
@add 1 65533 -> i; @print_num i; @print_char ' ';
@add 65535 65534 -> i; @print_num i; @print_char ' ';
@add 32767 2 -> i; @print_num i; @print_char ' ';
@add i 2 -> i; @print_num i; @print_char ' ';
@sub 3 2 -> i; @print_num i; @print_char ' ';
@mul 3 4 -> i; @print_num i; @print_char ' ';
@new_line;
! Non-local vars
@add 25 22 -> G0;
@print_num G0; @print_char ' ';
i = 3;
@add 25 i -> G0;
@print_num G0; @print_char ' ';
@add 36 1 -> sp;
@print_num sp; @print_char ' ';
@add G0 i -> sp;
@print_num sp; @print_char ' ';
@push 20;
@push 21;
@push 22;
@add sp sp -> sp;
@print_num sp; @print_char ' ';
@pull i;
@print_num i; @print_char ' ';
@sub 1 3 -> sp;
@print_num sp; @print_char ' ';
@new_line;
! Indirect variable opcodes
j = i; @print_num j; @print_char ' ';
! Memory
@storeb arr 2 1;
@storeb arr 3 5;
j = 1;
@loadw arr j -> i; @print_num i; @print_char ' ';
@storew arr 2 519; ! 2*0x100 + 7
@loadb arr 4 -> i; @print_num i; @print_char ' ';
@loadb arr 5 -> j; @print_num j; @print_char ' ';
@push 17; @push 18; @push 19;
! @pop; # v3
@pull i;
@print_num i; @print_char ' ';
@print " aha ";
! prints
@add 65 3 -> i;
@print_char i; ! prints 'D'
@new_line;
! bit ops
@or 3 6 -> i; ! 7
@print_num i;
@and 3 7 -> i;
@print_num i;
! i is 3 again for comparisons below
! jumps
jump foo;
@print_num 0;
.foo;
@jz 1 ?foo1;
@print_num 1; ! should print
.foo1;
@jz 1 ?~foo2;
@print_num 1; ! shouldn't print
.foo2;
@jg i 1 ?foo3;
@print_num 0;
.foo3;
@jg i 1 ?~foo4;
@print_num 1;
.foo4;
@jl i 1 ?foo5;
@print_num 1;
.foo5;
@jl i 1 ?~foo6;
@print_num 0;
.foo6;
@new_line;
! subs
@call_2n test_call 3;
@call_2s test_call 3 -> j;
@call_vn2 test_call 3 4 5 6 7 8;
@call_vs2 test_call 3 4 5 6 7 8 -> j;
! quit
@quit;
];
[ test_call a b c d e f g h i j k;
@print_num a;
@print_num d;
b = c; e = f; g = h; i = j; k = 1;
@print_char ' ';
@ret 7;
];