diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2023-11-11 23:13:43 +0200 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2023-11-12 00:40:00 +0200 |
| commit | 6f68c0febdbfd6138fa95f77bc09785bde8a8371 (patch) | |
| tree | 8f622e64ddbfa132e9fa991bb3e5961b72f826bb /asm | |
| parent | f7dd9705d44b9cee5103b267797c0449d42319df (diff) | |
Add function defs & calls
Diffstat (limited to 'asm')
| -rw-r--r-- | asm/atk16.py | 4 | ||||
| -rw-r--r-- | asm/test_py_src.atk16 | 266 | ||||
| -rw-r--r-- | asm/test_py_src.atk16_optimized | 161 | ||||
| -rw-r--r-- | asm/test_py_src.py | 20 |
4 files changed, 405 insertions, 46 deletions
diff --git a/asm/atk16.py b/asm/atk16.py index 6d9bc10..9a5921c 100644 --- a/asm/atk16.py +++ b/asm/atk16.py @@ -20,3 +20,7 @@ def call_inline(expr: T) -> T: def asm(asm: str): """Inject ATK16 assembly `asm` into the compiled output.""" return NotImplemented + +def ord(char: Char) -> int: + """Convert char to int""" + return NotImplemented diff --git a/asm/test_py_src.atk16 b/asm/test_py_src.atk16 index ca44267..02752ec 100644 --- a/asm/test_py_src.atk16 +++ b/asm/test_py_src.atk16 @@ -73,50 +73,256 @@ ;; END BOOTSTRAP +@label text_mode + 1 +@label graphics_mode_addr_p + 23 +@label text_mem_addr_p + 25 +@label int_1 + 104 +@label int_2 + 105 - -; <ast.FunctionDef object at 0x100c7b310> +; <ast.FunctionDef object at 0x1032fef50> @label func -; stack frame: ['arg1', 'arg2', 'a'] +; stack frame names: ['return_address_0', 'arg1', 'arg2', 'a'] addi SP 1 SP -; <ast.Name object at 0x100c7aef0> (arg1) - ldi ${SP - 3} RA +; <ast.Assign object at 0x1032fee30> +; assigning a to stack segment + offset 7 +; <ast.Name object at 0x1032fedd0> (arg1) + ldi vt_stack_addr RC + ldr RC RC + ldi 5 RD + add RC RD RC + ldr RC RC + spu RC + ldi vt_stack_addr RA + ldr RA RA + ldi 7 RB + add RA RB RA + spo RB + str RB RA +; <ast.Return object at 0x1032feda0> + ldi vt_stack_addr RA + ldr RA RA + ldi 4 RB + add RA RB RA +; <ast.Add object at 0x10301ab60> +; BinOp lhs <ast.BinOp object at 0x1032fed70> +; <ast.Name object at 0x1032fed40> (a) + ldi vt_stack_addr RC + ldr RC RC + ldi 7 RD + add RC RD RC + ldr RC RC + spu RC +; BinOp rhs <ast.BinOp object at 0x1032fed70> +; <ast.Name object at 0x1032fed10> (a) + ldi vt_stack_addr RC + ldr RC RC + ldi 7 RD + add RC RD RC + ldr RC RC + spu RC + spo RD + spo RC + add RC RD RC + spu RC + spo RB + mov RA SP + ldr RA RA + spu RB +; return from function + jpr RA + +@label main +; stack frame names: ['i', 'graphics_mode_addr', 'text_mem_addr', 'b'] + addi SP 4 SP +; <ast.Assign object at 0x103067b80> +; assigning graphics_mode_addr to stack segment + offset 1 +; <ast.Call object at 0x1030677f0> +; Builtin call load [<ast.Name object at 0x103067fa0>] +; <ast.Name object at 0x103067fa0> (GRAPHICS_MODE_ADDR_P) + ldi graphics_mode_addr_p RC + ldr RC RC + spu RC + spo RC + ldr RC RC + spu RC + ldi vt_stack_addr RA + ldr RA RA + ldi 1 RB + add RA RB RA + spo RB + str RB RA +; <ast.Assign object at 0x103067790> +; assigning text_mem_addr to stack segment + offset 2 +; <ast.Call object at 0x103067220> +; Builtin call load [<ast.Name object at 0x103067f40>] +; <ast.Name object at 0x103067f40> (TEXT_MEM_ADDR_P) + ldi text_mem_addr_p RC + ldr RC RC + spu RC + spo RC + ldr RC RC + spu RC + ldi vt_stack_addr RA + ldr RA RA + ldi 2 RB + add RA RB RA + spo RB + str RB RA +; <ast.Call object at 0x1030673d0> +; Builtin call store [<ast.Name object at 0x1032fefb0>, <ast.Name object at 0x1032fef80>] +; <ast.Name object at 0x1032fefb0> (graphics_mode_addr) + ldi vt_stack_addr RA + ldr RA RA + ldi 1 RB + add RA RB RA ldr RA RA spu RA +; <ast.Name object at 0x1032fef80> (TEXT_MODE) + ldi text_mode RA + ldr RA RA + spu RA + spo RB spo RA - ldi ${SP - 1} RB - str RA RB -; <ast.Return object at 0x100c7b0a0> -; <ast.BinOp object at 0x100c7b370> -; BinOp lhs <ast.BinOp object at 0x100c7b370> -; <ast.Name object at 0x100c7b3a0> (a) - ldi ${SP - 1} RA + str RB RA +; <ast.Assign object at 0x1032fecb0> +; assigning b to stack segment + offset 3 +; <ast.Call object at 0x1032fec50> +; Call function func + ldi 0 RC + spu RC +; <ast.Constant object at 0x1032febf0> + ldi 1 RC + spu RC +; <ast.Constant object at 0x1032febc0> + ldi 3 RC + spu RC +; set up return address and jump to subroutine + subi SP 3 RC + lpc RD + addi RD 3 RD + str RD RC + jpi func + ldi vt_stack_addr RA + ldr RA RA + ldi 3 RB + add RA RB RA + spo RB + str RB RA +; <ast.Assign object at 0x1032feb90> +; assigning i to stack segment + offset 0 +; <ast.Constant object at 0x1032feb30> + ldi 0 RC + spu RC + ldi vt_stack_addr RA + ldr RA RA + ldi 0 RB + add RA RB RA + spo RB + str RB RA +; <ast.Call object at 0x1032fead0> +; Builtin call store [<ast.BinOp object at 0x1032fea40>, <ast.Call object at 0x1032fe9b0>] +; <ast.Add object at 0x10301ab60> +; BinOp lhs <ast.BinOp object at 0x1032fea40> +; <ast.Name object at 0x1032fea10> (text_mem_addr) + ldi vt_stack_addr RA + ldr RA RA + ldi 2 RB + add RA RB RA ldr RA RA spu RA -; BinOp rhs <ast.BinOp object at 0x100c7b370> -; <ast.Name object at 0x100c7b3d0> (a) - ldi ${SP - 1} RA +; BinOp rhs <ast.BinOp object at 0x1032fea40> +; <ast.Name object at 0x1032fe9e0> (i) + ldi vt_stack_addr RA + ldr RA RA + ldi 0 RB + add RA RB RA ldr RA RA spu RA spo RB spo RA add RA RB RA spu RA - subi SP 1 SP - rsr - -@label main -; stack frame: ['b'] - addi SP 1 SP -; <ast.Call object at 0x100c7b520> -; <ast.Constant object at 0x100c7b580> - ldi 1 RA +; <ast.Call object at 0x1032fe9b0> +; Builtin call ord [<ast.Constant object at 0x1032fe920>] +; <ast.Constant object at 0x1032fe920> + ldi int_1 RA + ldr RA RA + spu RA + spo RB + spo RA + str RB RA +; <ast.Assign object at 0x1032fe8f0> +; assigning i to stack segment + offset 0 +; <ast.Add object at 0x10301ab60> +; BinOp lhs <ast.BinOp object at 0x1032fe890> +; <ast.Name object at 0x1032fe860> (i) + ldi vt_stack_addr RC + ldr RC RC + ldi 0 RD + add RC RD RC + ldr RC RC + spu RC +; BinOp rhs <ast.BinOp object at 0x1032fe890> +; <ast.Constant object at 0x1032fe830> + ldi 1 RC + spu RC + spo RD + spo RC + add RC RD RC + spu RC + ldi vt_stack_addr RA + ldr RA RA + ldi 0 RB + add RA RB RA + spo RB + str RB RA +; <ast.Call object at 0x1032fe7d0> +; Builtin call store [<ast.BinOp object at 0x1032fe740>, <ast.Call object at 0x1032fe6b0>] +; <ast.Add object at 0x10301ab60> +; BinOp lhs <ast.BinOp object at 0x1032fe740> +; <ast.Name object at 0x1032fe710> (text_mem_addr) + ldi vt_stack_addr RA + ldr RA RA + ldi 2 RB + add RA RB RA + ldr RA RA + spu RA +; BinOp rhs <ast.BinOp object at 0x1032fe740> +; <ast.Name object at 0x1032fe6e0> (i) + ldi vt_stack_addr RA + ldr RA RA + ldi 0 RB + add RA RB RA + ldr RA RA spu RA -; <ast.Constant object at 0x100c7b5b0> - ldi 3 RA + spo RB + spo RA + add RA RB RA + spu RA +; <ast.Call object at 0x1032fe6b0> +; Builtin call ord [<ast.Constant object at 0x1032fe620>] +; <ast.Constant object at 0x1032fe620> + ldi int_2 RA + ldr RA RA spu RA - csi func + spo RB spo RA - ldi ${SP - 1} RB - str RA RB - subi SP 1 SP + str RB RA +; <ast.While object at 0x1032fe5f0> +@label while_test_3 +; <ast.Constant object at 0x1032fe5c0> + ldi 1 RB + spu RB + spo RA + addi RA 0 RA + bri zero While_else_4 +; <ast.Pass object at 0x1032fe590> + jpi While_test_3 +@label while_else_4 +@label while_end_5 + subi SP 4 SP diff --git a/asm/test_py_src.atk16_optimized b/asm/test_py_src.atk16_optimized index 4a65ec4..601dfad 100644 --- a/asm/test_py_src.atk16_optimized +++ b/asm/test_py_src.atk16_optimized @@ -58,28 +58,157 @@ ldi gr_disabled_mode RB str RB RA jpi main +@label text_mode + 1 +@label graphics_mode_addr_p + 23 +@label text_mem_addr_p + 25 +@label int_1 + 104 +@label int_2 + 105 @label func addi SP 1 SP - ldi ${SP - 3} RA + ldi vt_stack_addr RC + ldr RC RC + ldi 5 RD + add RC RD RC + ldr RC RC + spu RC + ldi vt_stack_addr RA ldr RA RA - ldi ${SP - 1} RB - str RA RB - ldi ${SP - 1} RA + ldi 7 RB + add RA RB RA + spo RB + str RB RA + ldi vt_stack_addr RA ldr RA RA - ldi ${SP - 1} RB - ldr RB RB + ldi 4 RB add RA RB RA - spu RA - subi SP 1 SP - rsr + ldi vt_stack_addr RC + ldr RC RC + ldi 7 RD + add RC RD RC + ldr RC RC + spu RC + ldi vt_stack_addr RC + ldr RC RC + ldi 7 RD + add RC RD RC + ldr RC RD + spo RC + add RC RD RB + mov RA SP + ldr RA RA + spu RB + jpr RA @label main - addi SP 1 SP - ldi 1 RA + addi SP 4 SP + ldi graphics_mode_addr_p RC + ldr RC RC + ldr RC RC + spu RC + ldi vt_stack_addr RA + ldr RA RA + ldi 1 RB + add RA RB RA + spo RB + str RB RA + ldi text_mem_addr_p RC + ldr RC RC + ldr RC RC + spu RC + ldi vt_stack_addr RA + ldr RA RA + ldi 2 RB + add RA RB RA + spo RB + str RB RA + ldi vt_stack_addr RA + ldr RA RA + ldi 1 RB + add RA RB RA + ldr RA RA + ldi text_mode RB + ldr RB RB + str RB RA + ldi 0 RC + spu RC + ldi 1 RC + spu RC + ldi 3 RC + spu RC + subi SP 3 RC + lpc RD + addi RD 3 RD + str RD RC + jpi func + ldi vt_stack_addr RA + ldr RA RA + ldi 3 RB + add RA RB RA + spo RB + str RB RA + ldi 0 RC + spu RC + ldi vt_stack_addr RA + ldr RA RA + ldi 0 RB + add RA RB RA + spo RB + str RB RA + ldi vt_stack_addr RA + ldr RA RA + ldi 2 RB + add RA RB RA + ldr RA RA spu RA - ldi 3 RA + ldi vt_stack_addr RA + ldr RA RA + ldi 0 RB + add RA RB RA + ldr RA RB + spo RA + add RA RB RA + ldi int_1 RB + ldr RB RB + str RB RA + ldi vt_stack_addr RC + ldr RC RC + ldi 0 RD + add RC RD RC + ldr RC RC + ldi 1 RD + add RC RD RC + spu RC + ldi vt_stack_addr RA + ldr RA RA + ldi 0 RB + add RA RB RA + spo RB + str RB RA + ldi vt_stack_addr RA + ldr RA RA + ldi 2 RB + add RA RB RA + ldr RA RA spu RA - csi func + ldi vt_stack_addr RA + ldr RA RA + ldi 0 RB + add RA RB RA + ldr RA RB spo RA - ldi ${SP - 1} RB - str RA RB - subi SP 1 SP
\ No newline at end of file + add RA RB RA + ldi int_2 RB + ldr RB RB + str RB RA +@label while_test_3 + ldi 1 RA + addi RA 0 RA + bri zero While_else_4 + jpi While_test_3 +@label while_else_4 +@label while_end_5 + subi SP 4 SP
\ No newline at end of file diff --git a/asm/test_py_src.py b/asm/test_py_src.py index 9af944e..ca816de 100644 --- a/asm/test_py_src.py +++ b/asm/test_py_src.py @@ -1,11 +1,31 @@ import atk16 +TEXT_MODE: atk16.ConstInt = 1 +GRAPHICS_MODE_ADDR_P: atk16.ConstInt = 0x17 +graphics_mode_addr = atk16.load(GRAPHICS_MODE_ADDR_P) + +TEXT_MEM_ADDR_P: atk16.ConstInt = 0x19 +text_mem_addr = atk16.load(TEXT_MEM_ADDR_P) + +atk16.store(graphics_mode_addr, TEXT_MODE) + def func(arg1: int, arg2: int) -> int: a = arg1 return a + a b = func(1, 3) +i = 0 +atk16.store(text_mem_addr + i, atk16.ord("h")) +i = i + 1 +atk16.store(text_mem_addr + i, atk16.ord("i")) + +while True: + pass + +# atk16.asm("@label keepalive") +# atk16.asm(" jpi keepalive") + # TEXT_MODE: atk16.ConstInt = 1 # GRAPHICS_MODE_ADDR: atk16.ConstInt = 0x17 |
