diff options
Diffstat (limited to 'resources/asm/test_py_src.atk16')
| -rw-r--r-- | resources/asm/test_py_src.atk16 | 301 |
1 files changed, 301 insertions, 0 deletions
diff --git a/resources/asm/test_py_src.atk16 b/resources/asm/test_py_src.atk16 new file mode 100644 index 0000000..c38d1ca --- /dev/null +++ b/resources/asm/test_py_src.atk16 @@ -0,0 +1,301 @@ +;; BEGIN BOOTSTRAP + +@use ext_std:* + +@let sp RH ; stack pointer (points to empty slot at top of stack) +@let fp RG ; frame pointer (points to base of currently active frame) + +@let vector_table 0x10 +@let vt_ISR0 0x10 ; ISR0 +@let vt_ISR1 0x11 ; ISR1 +@let vt_ISR2 0x12 ; ISR2 +@let vt_ISR3 0x13 ; ISR3 +@let vt_stack_addr 0x14 ; Stack address +@let vt_term_pp_addr 0x15 ; Terminal peripheral address +@let vt_kb_pp_addr 0x16 ; Keyboard peripheral address +@let vt_gr_mode_addr 0x17 ; Graphics mode setting address +@let vt_sprite_mem 0x18 ; Sprite memory address +@let vt_text_mem 0x19 ; Text memory buffer address + +@let stack_segment 0x8000 +@let mmio_segment 0xE000 +@let terminal_addr 0xE000 +@let keyboard_addr 0xE001 +@let gr_mode_addr 0xE002 +@let sprite_mem 0xE800 +@let text_mem 0xF800 + +@let gr_disabled_mode 0b00 +@let gr_text_mode 0b01 +@let gr_sprite_mode 0b10 + +@address 0x0 + ldi vt_stack_addr RA + ldr RA SP + mov SP FP + jpi program_segment + +@address vector_table + keyboard_isr ; 0x10 + hlt_isr ; 0x11 + hlt_isr ; 0x12 + hlt_isr ; 0x13 + stack_segment ; 0x14 + terminal_addr ; 0x15 + keyboard_addr ; 0x16 + gr_mode_addr ; 0x17 + sprite_mem ; 0x18 + text_mem ; 0x19 + +@label hlt_isr + ldi 0x55 RE + hlt + +@label keyboard_isr + spu RA + spu RB + ldi vt_kb_pp_addr RA + ldr RA RA + ldr RA RA + ldi vt_term_pp_addr RB + ldr RB RB + str RA RB + spo RB + spo RA + rti + +@label program_segment + ldi vt_gr_mode_addr RA + ldr RA RA + ldi gr_disabled_mode RB + str RB RA + + jpi main + +;; END BOOTSTRAP + +@label text_mode + 1 +@label graphics_mode_addr_p + 23 +@label text_mem_addr_p + 25 +@label int_0 + 65 +@label int_6 + 26 + +; <ast.FunctionDef object at 0x104969570> +@label nth_letter +; stack frame with offsets +; n 0 +; <ast.Return object at 0x1049694b0> +; <ast.Add object at 0x104686bf0> +; BinOp lhs <ast.BinOp object at 0x104969480> +; <ast.Call object at 0x104969450> +; Builtin call ord [<ast.Constant object at 0x1049693c0>] +; <ast.Constant object at 0x1049693c0> + ldi int_0 RC + ldr RC RC ; int_0 = 65 + spu RC +; BinOp rhs <ast.BinOp object at 0x104969480> +; <ast.Name object at 0x104969390> (n) + ldi 0 RC + add FP RC RC + ldr RC RC + spu RC + spo RD + spo RC + add RC RD RC + spu RC +; return value is on top of stack +; return from function + subi FP 1 FP + ldr FP RB + jpr RB + +@label main +; stack frame with offsets +; graphics_mode_addr 0 +; text_mem_addr 1 +; i 2 + addi SP 3 SP +; <ast.Assign object at 0x1049698d0> +; assigning graphics_mode_addr at FP + 0 +; evaluating value to be assigned +; <ast.Call object at 0x104969870> +; Builtin call load [<ast.Name object at 0x1049697e0>] +; <ast.Name object at 0x1049697e0> (GRAPHICS_MODE_ADDR_P) + ldi graphics_mode_addr_p RC + ldr RC RC + spu RC +; (load) dereferencing top of stack + spo RC + ldr RC RC + spu RC +; assigning stack address (FP + 0) := top of stack + spo RA + ldi 0 RB + add RB FP RB + str RA RB +; <ast.Assign object at 0x1049697b0> +; assigning text_mem_addr at FP + 1 +; evaluating value to be assigned +; <ast.Call object at 0x104969750> +; Builtin call load [<ast.Name object at 0x1049696c0>] +; <ast.Name object at 0x1049696c0> (TEXT_MEM_ADDR_P) + ldi text_mem_addr_p RC + ldr RC RC + spu RC +; (load) dereferencing top of stack + spo RC + ldr RC RC + spu RC +; assigning stack address (FP + 1) := top of stack + spo RA + ldi 1 RB + add RB FP RB + str RA RB +; <ast.Call object at 0x104969660> +; Builtin call store [<ast.Name object at 0x1049695d0>, <ast.Name object at 0x1049695a0>] +; <ast.Name object at 0x1049695d0> (graphics_mode_addr) + ldi 0 RA + add FP RA RA + ldr RA RA + spu RA +; <ast.Name object at 0x1049695a0> (TEXT_MODE) + ldi text_mode RA + ldr RA RA + spu RA + spo RB + spo RA + str RB RA + ldi 0 RA + spu RA +; popping free-standing Expr result from stack + spo RA +; <ast.Assign object at 0x104969330> +; assigning i at FP + 2 +; evaluating value to be assigned +; <ast.Constant object at 0x1049692d0> + ldi 0 RC + spu RC +; assigning stack address (FP + 2) := top of stack + spo RA + ldi 2 RB + add RB FP RB + str RA RB +; <ast.While object at 0x1049692a0> +@label while_test_1 +; <ast.Compare object at 0x104969270> +; <ast.Name object at 0x104969240> (i) + ldi 2 RB + add FP RB RB + ldr RB RB + spu RB +; <ast.Constant object at 0x104969210> + ldi int_6 RB + ldr RB RB ; int_6 = 26 + spu RB +; Comparing <ast.Name object at 0x104969240> <ast.Lt object at 0x104686440> <ast.Constant object at 0x104969210> + spo RC + spo RB + sub RB RC RB + bri carry Compare_true_4 + ldi 0 RB + spu RB + jpi Compare_end_5 +@label compare_true_4 + ldi 1 RB + spu RB +@label compare_end_5 + spo RA + addi RA 0 RA + bri zero While_else_2 +; <ast.Call object at 0x1049691b0> +; Builtin call store [<ast.BinOp object at 0x104969120>, <ast.Call object at 0x104969090>] +; <ast.Add object at 0x104686bf0> +; BinOp lhs <ast.BinOp object at 0x104969120> +; <ast.Name object at 0x1049690f0> (text_mem_addr) + ldi 1 RA + add FP RA RA + ldr RA RA + spu RA +; BinOp rhs <ast.BinOp object at 0x104969120> +; <ast.Name object at 0x1049690c0> (i) + ldi 2 RA + add FP RA RA + ldr RA RA + spu RA + spo RB + spo RA + add RA RB RA + spu RA +; <ast.Call object at 0x104969090> +; Call function nth_letter + spu FP + ldi 0 RA + spu RA +; <ast.Name object at 0x104969030> (i) + ldi 2 RA + add FP RA RA + ldr RA RA + spu RA + subi SP 2 FP +; set up return address and jump to subroutine + lpc RA + addi RA 4 RA + str RA FP + addi FP 1 FP + jpi nth_letter + spo RA + mov FP SP + spo FP + spu RA + spo RB + spo RA + str RB RA + ldi 0 RA + spu RA +; popping free-standing Expr result from stack + spo RA +; <ast.Assign object at 0x104968580> +; assigning i at FP + 2 +; evaluating value to be assigned +; <ast.Add object at 0x104686bf0> +; BinOp lhs <ast.BinOp object at 0x104968550> +; <ast.Name object at 0x104968fd0> (i) + ldi 2 RC + add FP RC RC + ldr RC RC + spu RC +; BinOp rhs <ast.BinOp object at 0x104968550> +; <ast.Constant object at 0x104968fa0> + ldi 1 RC + spu RC + spo RD + spo RC + add RC RD RC + spu RC +; assigning stack address (FP + 2) := top of stack + spo RA + ldi 2 RB + add RB FP RB + str RA RB + jpi While_test_1 +@label while_else_2 +@label while_end_3 +; <ast.While object at 0x104968f70> +@label while_test_7 +; <ast.Constant object at 0x104968f40> + ldi 1 RB + spu RB + spo RA + addi RA 0 RA + bri zero While_else_8 +; <ast.Pass object at 0x104968f10> + jpi While_test_7 +@label while_else_8 +@label while_end_9 + mov FP SP + hlt |
