aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-11-25 18:22:26 +0000
committerDimitri Sokolyuk <demon@dim13.org>2015-11-25 18:22:26 +0000
commita5c6776929cd51f3bf86a126856669a66012b030 (patch)
tree9494f24340583b39e9256fe60ec7771495175bbe
parent76369877147e77c24e6b56f4a166922959c2f149 (diff)
More examples
-rw-r--r--examples/bf.s462
-rw-r--r--examples/e.s19
-rw-r--r--examples/i.s33
-rw-r--r--examples/nops.s318
-rw-r--r--examples/nops2.s318
-rw-r--r--examples/o.s34
-rw-r--r--examples/x2.s12
7 files changed, 1196 insertions, 0 deletions
diff --git a/examples/bf.s b/examples/bf.s
new file mode 100644
index 0000000..9a0de0f
--- /dev/null
+++ b/examples/bf.s
@@ -0,0 +1,462 @@
+SET PC, init
+:code_start
+dat ">++++++++++>+>+["
+dat "[+++++[>++++++++<-]>.<++++++[>--------<-]+<<<]>.>>["
+dat "[-]<[>+<-]>>[<<+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-"
+dat "[>+<-[>+<-[>+<-[>[-]>+>+<<<-[>+<-]]]]]]]]]]]+>>>"
+dat "]<<<"
+dat "]"
+:code_end
+
+:screen_hwi dat 0
+:kb_hwi dat 1
+:screen_start dat 0x8000
+
+:screen_cursor dat 0
+
+:inst_dec_pointer dat 60
+:inst_dec_value dat 45
+:inst_inc_pointer dat 62
+:inst_inc_value dat 43
+:inst_input dat 44
+:inst_jump_backward dat 93
+:inst_jump_forward dat 91
+:inst_output dat 46
+
+:init
+
+SET A, 0
+SET B, [screen_start]
+HWI [screen_hwi]
+
+SET A,0
+HWI [kb_hwi]
+
+SET PC, start
+
+:start
+
+JSR build_jump_map
+
+SET A, code_start
+SET C, mem_start
+
+:emu_loop
+ IFE A, code_end
+ SET PC, emu_loop_exit
+ JSR emu_step
+
+ ADD A, 1
+ SET PC, emu_loop
+
+ :emu_loop_exit
+ SUB PC, 1
+
+:emu_step
+ IFN [A], [inst_dec_pointer]
+ SET PC, end_inst_dec_pointer
+ JSR emu_handle_inst_dec_pointer
+ SET PC, emu_step_exit
+ :end_inst_dec_pointer
+
+ IFN [A], [inst_dec_value]
+ SET PC, end_inst_dec_value
+ JSR emu_handle_inst_dec_value
+ SET PC, emu_step_exit
+ :end_inst_dec_value
+
+ IFN [A], [inst_inc_pointer]
+ SET PC, end_inst_inc_pointer
+ JSR emu_handle_inst_inc_pointer
+ SET PC, emu_step_exit
+ :end_inst_inc_pointer
+
+ IFN [A], [inst_inc_value]
+ SET PC, end_inst_inc_value
+ JSR emu_handle_inst_inc_value
+ SET PC, emu_step_exit
+ :end_inst_inc_value
+
+ IFN [A], [inst_output]
+ SET PC, end_inst_output
+ JSR emu_handle_inst_output
+ SET PC, emu_step_exit
+ :end_inst_output
+
+ IFN [A], [inst_input]
+ SET PC, end_inst_input
+ JSR emu_handle_inst_input
+ SET PC, emu_step_exit
+ :end_inst_input
+
+ IFN [A], [inst_jump_forward]
+ SET PC, end_inst_jump_forward
+ JSR emu_handle_inst_jump_forward
+ SET PC, emu_step_exit
+ :end_inst_jump_forward
+
+ IFN [A], [inst_jump_backward]
+ SET PC, end_inst_jump_backward
+ JSR emu_handle_inst_jump_backward
+ SET PC, emu_step_exit
+ :end_inst_jump_backward
+
+ :emu_step_exit
+ SET PC, POP
+
+:emu_handle_inst_dec_pointer
+ SUB C, 1
+ IFL C, mem_start
+ SET C, mem_end
+ SET PC, POP
+
+:emu_handle_inst_dec_value
+ SET X, [C]
+ SUB X, 1
+ SET [C], x
+ SET PC, POP
+
+:emu_handle_inst_inc_pointer
+ ADD C, 1
+ IFG C, mem_end
+ SET C, mem_start
+ SET PC, POP
+
+:emu_handle_inst_inc_value
+ SET X, [C]
+ ADD X, 1
+ SET [C], x
+ SET PC, POP
+
+:emu_handle_inst_output
+ SET PUSH, A
+ SET A, [C]
+ SET B, [screen_cursor]
+
+ IFL B, 384
+ SET PC, inst_output_func_start
+ ;;scroll screen
+ JSR scroll
+ SUB B, 0x20
+
+ :inst_output_func_start
+
+ IFE A, 10 ;;new line
+ SET PC, inst_output_newline
+
+ SET PC, inst_output_draw
+
+ :inst_output_newline
+ ;; is a new line
+ SET PUSH, X
+ SET PUSH, Y
+ SET X, B
+ SET Y, 32
+ MOD X, Y
+ SET Y, 31
+ SUB Y, X
+ ADD B, Y
+ SET Y, POP
+ SET X, POP
+ SET PC, inst_output_func_end
+
+ :inst_output_draw
+ JSR print_char
+
+ :inst_output_func_end
+ SET A, POP
+ ADD B, 1
+ SET [screen_cursor], B
+ SET PC, POP
+
+:emu_handle_inst_input
+ JSR getc
+ SET [C], X
+ SET PC, POP
+
+:emu_handle_inst_jump_forward
+ IFN [C], 0
+ SET PC, POP
+
+ SUB A, code_start
+ JSR get_forward_jump
+ ADD A, code_start
+ SET PC, POP
+
+:emu_handle_inst_jump_backward
+ IFE [C], 0
+ SET PC, POP
+
+ SUB A, code_start
+ JSR get_backwards_jump
+ ADD A, code_start
+ SET PC, POP
+
+;A - jump bracket relative location
+:get_forward_jump
+ SET PUSH, B
+ SET B, A
+ SET A, rel_map_start
+ :get_forward_jump_loop
+ IFE A, rel_map_end
+ SET PC, get_forward_jump_end
+ IFE [A], B
+ SET PC, get_forward_jump_found
+
+ ADD A, 1
+ SET PC, get_forward_jump_loop
+
+ :get_forward_jump_found
+ SET A, [A + 1]
+
+ :get_forward_jump_end
+ SET B, POP
+ SET PC, POP
+
+;A - jump bracket relative location
+:get_backwards_jump
+ SET PUSH, B
+ SET B, A
+ SET A, rel_map_start
+ :get_backwards_jump_loop
+ IFE A, rel_map_end
+ SET PC, get_backwards_jump_end
+ IFE [A], B
+ SET PC, get_backwards_jump_found
+
+ ADD A, 1
+ SET PC, get_backwards_jump_loop
+
+ :get_backwards_jump_found
+ SET B, A
+ SUB B, 1
+ SET A, [B]
+
+ :get_backwards_jump_end
+ SET B, POP
+ SET PC, POP
+
+:build_jump_map
+ SET PUSH, A
+ SET PUSH, B
+ SET A, code_start
+ SET B, rel_map_start
+ :build_jump_map_loop
+ IFE A, code_end
+ SET PC, end_build_jump_map_loop
+ IFE [A], [inst_jump_forward]
+ SET PUSH, A
+ IFN [A], [inst_jump_backward]
+ SET PC, end_build_jump_map_inst_jump_backward ;flipped
+ ; A - end c - start
+ SET C, POP
+
+ SUB C, code_start
+ ;got relative start
+ SET X, C
+
+ SET C, A
+ SUB C, code_start
+ ;got relative end
+ SET Y, C
+
+ SET [B], X
+ SET [B + 1], Y
+
+ ADD B, 2
+ :end_build_jump_map_inst_jump_backward
+
+ ADD A, 1
+ SET PC, build_jump_map_loop
+ :end_build_jump_map_loop
+ SET B, POP
+ SET A, POP
+ SET PC, POP
+
+:getc
+ ;Parameters
+ ;None.
+ ;Returns
+ ;X - Char value
+
+ ;Don't clobber our environment...
+ SET PUSH, A
+ SET PUSH, C
+
+ :getc_loop
+ SET A, 1
+ HWI [kb_hwi]
+
+ IFE C, 0x0000
+ SET PC, getc_loop
+
+ SET X, C
+ SET C, POP
+ SET A, POP
+ SET PC, POP
+
+;A - char
+;B - location
+:print_char
+ SET PUSH, B
+ SET PUSH, C
+ ADD B, [screen_start]
+ SET C, 0xf000
+ ADD C, A
+ SET [B], C
+ SET C, POP
+ SET B, POP
+ SET PC, POP
+
+:scroll
+ SET PUSH, A
+ SET PUSH, B
+ SET A, [screen_start]
+ SET B, A
+ ADD B, 384
+
+ :scroll_loop
+ IFE A, B
+ SET PC, scroll_end
+ SET [A], [A + 32]
+ ADD A, 1
+ SET PC, scroll_loop
+ :scroll_end
+ ;blank last line
+ SET A, 11
+ MUL A, 32
+ ADD A, [screen_start]
+ :scroll_end_loop
+ IFE A, B
+ SET PC, scroll_end_loop_end
+ SET [A], 0
+ ADD A, 1
+ SET PC, scroll_end_loop
+ :scroll_end_loop_end
+ SET B, POP
+ SET A, POP
+ SET PC, POP
+
+:mem_start
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+:mem_end
+
+:rel_map_start
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dat 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+:rel_map_end
diff --git a/examples/e.s b/examples/e.s
new file mode 100644
index 0000000..ee8a35c
--- /dev/null
+++ b/examples/e.s
@@ -0,0 +1,19 @@
+;list of errors that all compilers should check
+;all lines up to :start will be skipped by the test program
+
+:start
+ sit a, 3 ;instruction name incorrect
+ set d, 4 ;wrong register name
+ set a, 70000 ;integer too big
+ set a, 0xfffff ;hex value too large
+ set a a ;no comma to seperate
+ set a ;missing operand
+ set ;no operands
+label set a, 0 ;label has no colon
+loop: set a, 0 ;label is at wrong end
+ set a, [x ;missing right square bracket
+ set a, x] ;missing left square bracket
+ jsr a, a ;too many operands on a jsr
+ set a, aaa ;no label exists
+ set a, [aaa] ;no indexed label exists
+ div a, 0 ;catch compiler divide by zero errors
diff --git a/examples/i.s b/examples/i.s
new file mode 100644
index 0000000..dc4a2d8
--- /dev/null
+++ b/examples/i.s
@@ -0,0 +1,33 @@
+;Test of all compiler instructions. Should be fine in both upper and lower case
+
+:start jsr start
+ set a, b
+ sub a, b
+ mul a, b
+ div a, b
+ mod a, b
+ shl a, b
+ shr a, b
+ and a, b
+ bor a, b
+ xor a, b
+ ife a, b
+ ifn a, b
+ ifg a, b
+ ifb a, b
+
+ JSR start
+ SET a, b
+ SUB a, b
+ MUL a, b
+ DIV a, b
+ MOD a, b
+ SHL a, b
+ SHR a, b
+ AND a, b
+ BOR a, b
+ XOR a, b
+ IFE a, b
+ IFN a, b
+ IFG a, b
+ IFB a, b
diff --git a/examples/nops.s b/examples/nops.s
new file mode 100644
index 0000000..dae736f
--- /dev/null
+++ b/examples/nops.s
@@ -0,0 +1,318 @@
+SET A, A
+AND A, A
+BOR A, A
+IFE A, A
+IFC PUSH, A
+SET B, B
+AND B, B
+BOR B, B
+IFE B, B
+IFC PUSH, B
+SET C, C
+AND C, C
+BOR C, C
+IFE C, C
+IFC PUSH, C
+SET X, X
+AND X, X
+BOR X, X
+IFE X, X
+IFC PUSH, X
+SET Y, Y
+AND Y, Y
+BOR Y, Y
+IFE Y, Y
+IFC PUSH, Y
+SET Z, Z
+AND Z, Z
+BOR Z, Z
+IFE Z, Z
+IFC PUSH, Z
+SET I, I
+AND I, I
+BOR I, I
+IFE I, I
+IFC PUSH, I
+SET J, J
+AND J, J
+BOR J, J
+IFE J, J
+IFC PUSH, J
+SET [A], [A]
+AND [A], [A]
+BOR [A], [A]
+IFE [A], [A]
+IFC PUSH, [A]
+SET [B], [B]
+AND [B], [B]
+BOR [B], [B]
+IFE [B], [B]
+IFC PUSH, [B]
+SET [C], [C]
+AND [C], [C]
+BOR [C], [C]
+IFE [C], [C]
+IFC PUSH, [C]
+SET [X], [X]
+AND [X], [X]
+BOR [X], [X]
+IFE [X], [X]
+IFC PUSH, [X]
+SET [Y], [Y]
+AND [Y], [Y]
+BOR [Y], [Y]
+IFE [Y], [Y]
+IFC PUSH, [Y]
+SET [Z], [Z]
+AND [Z], [Z]
+BOR [Z], [Z]
+IFE [Z], [Z]
+IFC PUSH, [Z]
+SET [I], [I]
+AND [I], [I]
+BOR [I], [I]
+IFE [I], [I]
+IFC PUSH, [I]
+SET [J], [J]
+AND [J], [J]
+BOR [J], [J]
+IFE [J], [J]
+IFC PUSH, [J]
+SET PUSH, POP
+BOR PUSH, POP
+XOR PUSH, POP
+IFC PUSH, [SP]
+SET [SP], [SP]
+AND [SP], [SP]
+BOR [SP], [SP]
+IFE [SP], [SP]
+IFC PUSH, SP
+SET SP, SP
+AND SP, SP
+BOR SP, SP
+IFE SP, SP
+IFC PUSH, PC
+SET PC, PC
+AND PC, PC
+BOR PC, PC
+IFE PC, PC
+IFC PUSH, EX
+SET EX, EX
+AND EX, EX
+BOR EX, EX
+IFE EX, EX
+SBX EX, EX
+AND A, 0xffff
+AND B, 0xffff
+AND C, 0xffff
+AND X, 0xffff
+AND Y, 0xffff
+AND Z, 0xffff
+AND I, 0xffff
+AND J, 0xffff
+AND [A], 0xffff
+AND [B], 0xffff
+AND [C], 0xffff
+AND [X], 0xffff
+AND [Y], 0xffff
+AND [Z], 0xffff
+AND [I], 0xffff
+AND [J], 0xffff
+IFC PUSH, 0xffff
+IFA PUSH, 0xffff
+IFL PUSH, 0xffff
+AND [SP], 0xffff
+AND SP, 0xffff
+AND PC, 0xffff
+AND EX, 0xffff
+BOR A, 0x0000
+XOR A, 0x0000
+IFC A, 0x0000
+BOR B, 0x0000
+XOR B, 0x0000
+IFC B, 0x0000
+BOR C, 0x0000
+XOR C, 0x0000
+IFC C, 0x0000
+BOR X, 0x0000
+XOR X, 0x0000
+IFC X, 0x0000
+BOR Y, 0x0000
+XOR Y, 0x0000
+IFC Y, 0x0000
+BOR Z, 0x0000
+XOR Z, 0x0000
+IFC Z, 0x0000
+BOR I, 0x0000
+XOR I, 0x0000
+IFC I, 0x0000
+BOR J, 0x0000
+XOR J, 0x0000
+IFC J, 0x0000
+BOR [A], 0x0000
+XOR [A], 0x0000
+IFC [A], 0x0000
+BOR [B], 0x0000
+XOR [B], 0x0000
+IFC [B], 0x0000
+BOR [C], 0x0000
+XOR [C], 0x0000
+IFC [C], 0x0000
+BOR [X], 0x0000
+XOR [X], 0x0000
+IFC [X], 0x0000
+BOR [Y], 0x0000
+XOR [Y], 0x0000
+IFC [Y], 0x0000
+BOR [Z], 0x0000
+XOR [Z], 0x0000
+IFC [Z], 0x0000
+BOR [I], 0x0000
+XOR [I], 0x0000
+IFC [I], 0x0000
+BOR [J], 0x0000
+XOR [J], 0x0000
+IFC [J], 0x0000
+IFC PUSH, 0x0000
+IFE PUSH, 0x0000
+BOR [SP], 0x0000
+XOR [SP], 0x0000
+IFC [SP], 0x0000
+BOR SP, 0x0000
+XOR SP, 0x0000
+IFC SP, 0x0000
+BOR PC, 0x0000
+XOR PC, 0x0000
+IFC PC, 0x0000
+ADD EX, 0x0000
+SUB EX, 0x0000
+BOR EX, 0x0000
+XOR EX, 0x0000
+SHR EX, 0x0000
+ASR EX, 0x0000
+SHL EX, 0x0000
+IFC EX, 0x0000
+IFC PUSH, 0x0001
+IFN PUSH, 0x0001
+IFL PUSH, 0x0001
+IFU PUSH, 0x0001
+MUL EX, 0x0001
+MLI EX, 0x0001
+DIV EX, 0x0001
+DVI EX, 0x0001
+IFC PUSH, 0x0002
+IFN PUSH, 0x0002
+IFL PUSH, 0x0002
+IFU PUSH, 0x0002
+IFC PUSH, 0x0003
+IFN PUSH, 0x0003
+IFL PUSH, 0x0003
+IFU PUSH, 0x0003
+IFC PUSH, 0x0004
+IFN PUSH, 0x0004
+IFL PUSH, 0x0004
+IFU PUSH, 0x0004
+IFC PUSH, 0x0005
+IFN PUSH, 0x0005
+IFL PUSH, 0x0005
+IFU PUSH, 0x0005
+IFC PUSH, 0x0006
+IFN PUSH, 0x0006
+IFL PUSH, 0x0006
+IFU PUSH, 0x0006
+IFC PUSH, 0x0007
+IFN PUSH, 0x0007
+IFL PUSH, 0x0007
+IFU PUSH, 0x0007
+IFC PUSH, 0x0008
+IFN PUSH, 0x0008
+IFL PUSH, 0x0008
+IFU PUSH, 0x0008
+IFC PUSH, 0x0009
+IFN PUSH, 0x0009
+IFL PUSH, 0x0009
+IFU PUSH, 0x0009
+IFC PUSH, 0x000a
+IFN PUSH, 0x000a
+IFL PUSH, 0x000a
+IFU PUSH, 0x000a
+IFC PUSH, 0x000b
+IFN PUSH, 0x000b
+IFL PUSH, 0x000b
+IFU PUSH, 0x000b
+IFC PUSH, 0x000c
+IFN PUSH, 0x000c
+IFL PUSH, 0x000c
+IFU PUSH, 0x000c
+IFC PUSH, 0x000d
+IFN PUSH, 0x000d
+IFL PUSH, 0x000d
+IFU PUSH, 0x000d
+IFC PUSH, 0x000e
+IFN PUSH, 0x000e
+IFL PUSH, 0x000e
+IFU PUSH, 0x000e
+IFC PUSH, 0x000f
+IFN PUSH, 0x000f
+IFL PUSH, 0x000f
+IFU PUSH, 0x000f
+IFC PUSH, 0x0010
+IFN PUSH, 0x0010
+IFL PUSH, 0x0010
+IFU PUSH, 0x0010
+IFC PUSH, 0x0011
+IFN PUSH, 0x0011
+IFL PUSH, 0x0011
+IFU PUSH, 0x0011
+IFC PUSH, 0x0012
+IFN PUSH, 0x0012
+IFL PUSH, 0x0012
+IFU PUSH, 0x0012
+IFC PUSH, 0x0013
+IFN PUSH, 0x0013
+IFL PUSH, 0x0013
+IFU PUSH, 0x0013
+IFC PUSH, 0x0014
+IFN PUSH, 0x0014
+IFL PUSH, 0x0014
+IFU PUSH, 0x0014
+IFC PUSH, 0x0015
+IFN PUSH, 0x0015
+IFL PUSH, 0x0015
+IFU PUSH, 0x0015
+IFC PUSH, 0x0016
+IFN PUSH, 0x0016
+IFL PUSH, 0x0016
+IFU PUSH, 0x0016
+IFC PUSH, 0x0017
+IFN PUSH, 0x0017
+IFL PUSH, 0x0017
+IFU PUSH, 0x0017
+IFC PUSH, 0x0018
+IFN PUSH, 0x0018
+IFL PUSH, 0x0018
+IFU PUSH, 0x0018
+IFC PUSH, 0x0019
+IFN PUSH, 0x0019
+IFL PUSH, 0x0019
+IFU PUSH, 0x0019
+IFC PUSH, 0x001a
+IFN PUSH, 0x001a
+IFL PUSH, 0x001a
+IFU PUSH, 0x001a
+IFC PUSH, 0x001b
+IFN PUSH, 0x001b
+IFL PUSH, 0x001b
+IFU PUSH, 0x001b
+IFC PUSH, 0x001c
+IFN PUSH, 0x001c
+IFL PUSH, 0x001c
+IFU PUSH, 0x001c
+IFC PUSH, 0x001d
+IFN PUSH, 0x001d
+IFL PUSH, 0x001d
+IFU PUSH, 0x001d
+IFC PUSH, 0x001e
+IFN PUSH, 0x001e
+IFL PUSH, 0x001e
+IFU PUSH, 0x001e
diff --git a/examples/nops2.s b/examples/nops2.s
new file mode 100644
index 0000000..a291e8b
--- /dev/null
+++ b/examples/nops2.s
@@ -0,0 +1,318 @@
+SET A, A
+AND A, A
+BOR A, A
+IFE A, A
+IFC [--SP], A
+SET B, B
+AND B, B
+BOR B, B
+IFE B, B
+IFC [--SP], B
+SET C, C
+AND C, C
+BOR C, C
+IFE C, C
+IFC [--SP], C
+SET X, X
+AND X, X
+BOR X, X
+IFE X, X
+IFC [--SP], X
+SET Y, Y
+AND Y, Y
+BOR Y, Y
+IFE Y, Y
+IFC [--SP], Y
+SET Z, Z
+AND Z, Z
+BOR Z, Z
+IFE Z, Z
+IFC [--SP], Z
+SET I, I
+AND I, I
+BOR I, I
+IFE I, I
+IFC [--SP], I
+SET J, J
+AND J, J
+BOR J, J
+IFE J, J
+IFC [--SP], J
+SET [A], [A]
+AND [A], [A]
+BOR [A], [A]
+IFE [A], [A]
+IFC [--SP], [A]
+SET [B], [B]
+AND [B], [B]
+BOR [B], [B]
+IFE [B], [B]
+IFC [--SP], [B]
+SET [C], [C]
+AND [C], [C]
+BOR [C], [C]
+IFE [C], [C]
+IFC [--SP], [C]
+SET [X], [X]
+AND [X], [X]
+BOR [X], [X]
+IFE [X], [X]
+IFC [--SP], [X]
+SET [Y], [Y]
+AND [Y], [Y]
+BOR [Y], [Y]
+IFE [Y], [Y]
+IFC [--SP], [Y]
+SET [Z], [Z]
+AND [Z], [Z]
+BOR [Z], [Z]
+IFE [Z], [Z]
+IFC [--SP], [Z]
+SET [I], [I]
+AND [I], [I]
+BOR [I], [I]
+IFE [I], [I]
+IFC [--SP], [I]
+SET [J], [J]
+AND [J], [J]
+BOR [J], [J]
+IFE [J], [J]
+IFC [--SP], [J]
+SET [--SP], [SP++]
+BOR [--SP], [SP++]
+XOR [--SP], [SP++]
+IFC [--SP], [SP]
+SET [SP], [SP]
+AND [SP], [SP]
+BOR [SP], [SP]
+IFE [SP], [SP]
+IFC [--SP], SP
+SET SP, SP
+AND SP, SP
+BOR SP, SP
+IFE SP, SP
+IFC [--SP], PC
+SET PC, PC
+AND PC, PC
+BOR PC, PC
+IFE PC, PC
+IFC [--SP], EX
+SET EX, EX
+AND EX, EX
+BOR EX, EX
+IFE EX, EX
+SBX EX, EX
+AND A, 0xffff
+AND B, 0xffff
+AND C, 0xffff
+AND X, 0xffff
+AND Y, 0xffff
+AND Z, 0xffff
+AND I, 0xffff
+AND J, 0xffff
+AND [A], 0xffff
+AND [B], 0xffff
+AND [C], 0xffff
+AND [X], 0xffff
+AND [Y], 0xffff
+AND [Z], 0xffff
+AND [I], 0xffff
+AND [J], 0xffff
+IFC [--SP], 0xffff
+IFA [--SP], 0xffff
+IFL [--SP], 0xffff
+AND [SP], 0xffff
+AND SP, 0xffff
+AND PC, 0xffff
+AND EX, 0xffff
+BOR A, 0x0000
+XOR A, 0x0000
+IFC A, 0x0000
+BOR B, 0x0000
+XOR B, 0x0000
+IFC B, 0x0000
+BOR C, 0x0000
+XOR C, 0x0000
+IFC C, 0x0000
+BOR X, 0x0000
+XOR X, 0x0000
+IFC X, 0x0000
+BOR Y, 0x0000
+XOR Y, 0x0000
+IFC Y, 0x0000
+BOR Z, 0x0000
+XOR Z, 0x0000
+IFC Z, 0x0000
+BOR I, 0x0000
+XOR I, 0x0000
+IFC I, 0x0000
+BOR J, 0x0000
+XOR J, 0x0000
+IFC J, 0x0000
+BOR [A], 0x0000
+XOR [A], 0x0000
+IFC [A], 0x0000
+BOR [B], 0x0000
+XOR [B], 0x0000
+IFC [B], 0x0000
+BOR [C], 0x0000
+XOR [C], 0x0000
+IFC [C], 0x0000
+BOR [X], 0x0000
+XOR [X], 0x0000
+IFC [X], 0x0000
+BOR [Y], 0x0000
+XOR [Y], 0x0000
+IFC [Y], 0x0000
+BOR [Z], 0x0000
+XOR [Z], 0x0000
+IFC [Z], 0x0000
+BOR [I], 0x0000
+XOR [I], 0x0000
+IFC [I], 0x0000
+BOR [J], 0x0000
+XOR [J], 0x0000
+IFC [J], 0x0000
+IFC [--SP], 0x0000
+IFE [--SP], 0x0000
+BOR [SP], 0x0000
+XOR [SP], 0x0000
+IFC [SP], 0x0000
+BOR SP, 0x0000
+XOR SP, 0x0000
+IFC SP, 0x0000
+BOR PC, 0x0000
+XOR PC, 0x0000
+IFC PC, 0x0000
+ADD EX, 0x0000
+SUB EX, 0x0000
+BOR EX, 0x0000
+XOR EX, 0x0000
+SHR EX, 0x0000
+ASR EX, 0x0000
+SHL EX, 0x0000
+IFC EX, 0x0000
+IFC [--SP], 0x0001
+IFN [--SP], 0x0001
+IFL [--SP], 0x0001
+IFU [--SP], 0x0001
+MUL EX, 0x0001
+MLI EX, 0x0001
+DIV EX, 0x0001
+DVI EX, 0x0001
+IFC [--SP], 0x0002
+IFN [--SP], 0x0002
+IFL [--SP], 0x0002
+IFU [--SP], 0x0002
+IFC [--SP], 0x0003
+IFN [--SP], 0x0003
+IFL [--SP], 0x0003
+IFU [--SP], 0x0003
+IFC [--SP], 0x0004
+IFN [--SP], 0x0004
+IFL [--SP], 0x0004
+IFU [--SP], 0x0004
+IFC [--SP], 0x0005
+IFN [--SP], 0x0005
+IFL [--SP], 0x0005
+IFU [--SP], 0x0005
+IFC [--SP], 0x0006
+IFN [--SP], 0x0006
+IFL [--SP], 0x0006
+IFU [--SP], 0x0006
+IFC [--SP], 0x0007
+IFN [--SP], 0x0007
+IFL [--SP], 0x0007
+IFU [--SP], 0x0007
+IFC [--SP], 0x0008
+IFN [--SP], 0x0008
+IFL [--SP], 0x0008
+IFU [--SP], 0x0008
+IFC [--SP], 0x0009
+IFN [--SP], 0x0009
+IFL [--SP], 0x0009
+IFU [--SP], 0x0009
+IFC [--SP], 0x000a
+IFN [--SP], 0x000a
+IFL [--SP], 0x000a
+IFU [--SP], 0x000a
+IFC [--SP], 0x000b
+IFN [--SP], 0x000b
+IFL [--SP], 0x000b
+IFU [--SP], 0x000b
+IFC [--SP], 0x000c
+IFN [--SP], 0x000c
+IFL [--SP], 0x000c
+IFU [--SP], 0x000c
+IFC [--SP], 0x000d
+IFN [--SP], 0x000d
+IFL [--SP], 0x000d
+IFU [--SP], 0x000d
+IFC [--SP], 0x000e
+IFN [--SP], 0x000e
+IFL [--SP], 0x000e
+IFU [--SP], 0x000e
+IFC [--SP], 0x000f
+IFN [--SP], 0x000f
+IFL [--SP], 0x000f
+IFU [--SP], 0x000f
+IFC [--SP], 0x0010
+IFN [--SP], 0x0010
+IFL [--SP], 0x0010
+IFU [--SP], 0x0010
+IFC [--SP], 0x0011
+IFN [--SP], 0x0011
+IFL [--SP], 0x0011
+IFU [--SP], 0x0011
+IFC [--SP], 0x0012
+IFN [--SP], 0x0012
+IFL [--SP], 0x0012
+IFU [--SP], 0x0012
+IFC [--SP], 0x0013
+IFN [--SP], 0x0013
+IFL [--SP], 0x0013
+IFU [--SP], 0x0013
+IFC [--SP], 0x0014
+IFN [--SP], 0x0014
+IFL [--SP], 0x0014
+IFU [--SP], 0x0014
+IFC [--SP], 0x0015
+IFN [--SP], 0x0015
+IFL [--SP], 0x0015
+IFU [--SP], 0x0015
+IFC [--SP], 0x0016
+IFN [--SP], 0x0016
+IFL [--SP], 0x0016
+IFU [--SP], 0x0016
+IFC [--SP], 0x0017
+IFN [--SP], 0x0017
+IFL [--SP], 0x0017
+IFU [--SP], 0x0017
+IFC [--SP], 0x0018
+IFN [--SP], 0x0018
+IFL [--SP], 0x0018
+IFU [--SP], 0x0018
+IFC [--SP], 0x0019
+IFN [--SP], 0x0019
+IFL [--SP], 0x0019
+IFU [--SP], 0x0019
+IFC [--SP], 0x001a
+IFN [--SP], 0x001a
+IFL [--SP], 0x001a
+IFU [--SP], 0x001a
+IFC [--SP], 0x001b
+IFN [--SP], 0x001b
+IFL [--SP], 0x001b
+IFU [--SP], 0x001b
+IFC [--SP], 0x001c
+IFN [--SP], 0x001c
+IFL [--SP], 0x001c
+IFU [--SP], 0x001c
+IFC [--SP], 0x001d
+IFN [--SP], 0x001d
+IFL [--SP], 0x001d
+IFU [--SP], 0x001d
+IFC [--SP], 0x001e
+IFN [--SP], 0x001e
+IFL [--SP], 0x001e
+IFU [--SP], 0x001e
diff --git a/examples/o.s b/examples/o.s
new file mode 100644
index 0000000..5246a41
--- /dev/null
+++ b/examples/o.s
@@ -0,0 +1,34 @@
+;All operand types, presented in various ways
+
+:start set a, 5
+ set a, b
+ set a, [b]
+ set a, [b + 3]
+ set a, [3 + b] ;both ways should be acceptable
+ set a, [b+3] ;spaces should not be forced
+ set a, POP
+ set a, PEEK
+ set PUSH, a
+ set a, start
+ set a, [start]
+ set a, PC
+ set a, SP
+ set a, O
+
+ ;reverse these
+
+ ;set 5, a ;allowable in the spec though
+
+ set b, a
+ set [b], a
+ set [b + 3], a
+ set [3 + b], a
+ set [b+3], a
+ set POP, a
+ set PEEK, a
+ set a, PUSH
+ set start, a
+ set [start], a
+ set PC, a
+ set SP, a
+ set O, a
diff --git a/examples/x2.s b/examples/x2.s
new file mode 100644
index 0000000..6fd1010
--- /dev/null
+++ b/examples/x2.s
@@ -0,0 +1,12 @@
+set pc, testA
+:testA
+set a, 0x10
+set a, b
+set b, a
+set pc, testB
+set c, 0x20
+set x, x
+set y, y
+set z, z
+:testB
+set pc, testA