From a5c6776929cd51f3bf86a126856669a66012b030 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 25 Nov 2015 18:22:26 +0000 Subject: More examples --- examples/bf.s | 462 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ examples/e.s | 19 +++ examples/i.s | 33 ++++ examples/nops.s | 318 ++++++++++++++++++++++++++++++++++++++ examples/nops2.s | 318 ++++++++++++++++++++++++++++++++++++++ examples/o.s | 34 ++++ examples/x2.s | 12 ++ 7 files changed, 1196 insertions(+) create mode 100644 examples/bf.s create mode 100644 examples/e.s create mode 100644 examples/i.s create mode 100644 examples/nops.s create mode 100644 examples/nops2.s create mode 100644 examples/o.s create mode 100644 examples/x2.s 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 -- cgit v1.2.3