aboutsummaryrefslogtreecommitdiffstats
path: root/resources/asm/test_py_src.atk16
diff options
context:
space:
mode:
Diffstat (limited to 'resources/asm/test_py_src.atk16')
-rw-r--r--resources/asm/test_py_src.atk16301
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