.include "$lib/core.asm" .include "$lib/std.asm" .include "$lib/main.asm" .define MEM_LOOP_I, CORE_MEM_MEM .define MEM_LOOP_J, (MEM_LOOP_I + 1) .define MEM_CALL_STACK_LEN, 16 .define MEM_CALL_STACK_PTR, (MEM_LOOP_J + 1) .define MEM_CALL_STACK_END, (MEM_CALL_STACK_PTR + MEM_CALL_STACK_LEN) .define MEM_ALLOC_PTR, MEM_CALL_STACK_END .std_rset CORE_REG_A, MEM_CALL_STACK_PTR .std_set MEM_CALL_STACK_PTR .std_rset CORE_REG_A, (MEM_ALLOC_PTR + 1) .std_set MEM_ALLOC_PTR .jump_main call_stack_jump: .std_get MEM_CALL_STACK_PTR tlr CORE_REG_A .std_rset CORE_REG_B, 1 .std_alu CORE_ALU_ADD tlr CORE_REG_A tlr CORE_REG_B .std_set MEM_CALL_STACK_PTR tsr CORE_REG_D tlr CORE_REG_A tsr CORE_REG_B set tsr CORE_REG_C tlr CORE_REG_PC return_call_stack_jump: .std_get MEM_CALL_STACK_PTR tlr CORE_REG_A tlr CORE_REG_C .std_rset CORE_REG_B, 1 .std_alu CORE_ALU_SUB tlr CORE_REG_A .std_set MEM_CALL_STACK_PTR tsr CORE_REG_C get tlr CORE_REG_PC .macro stack_transfer_alu .std_ld tlr CORE_REG_B .std_ld tlr CORE_REG_A .endmacro .macro call_stack_jump, call_stack_jump_arg_0_label, call_stack_jump_arg_1_offset .std_rset CORE_REG_C, call_stack_jump_arg_0_label .std_rset CORE_REG_D, (call_stack_jump_arg_1_offset + 7) ts call_stack_jump tlr CORE_REG_PC .endmacro .macro return_call_stack_jump .std_jump return_call_stack_jump .endmacro ; data ; strings data_strings_0: ; original : "test\n" ; size : 5 .bytes 0x74 .bytes 0x65 .bytes 0x73 .bytes 0x74 .bytes 0x0a data_strings_end_0: data_strings_1: ; original : "jdsafhjfnjfn\n" ; size : 13 .bytes 0x6a .bytes 0x64 .bytes 0x73 .bytes 0x61 .bytes 0x66 .bytes 0x68 .bytes 0x6a .bytes 0x66 .bytes 0x6e .bytes 0x6a .bytes 0x66 .bytes 0x6e .bytes 0x0a data_strings_end_1: ; conditions ; words ; main .def_main ts NULL ; reset tmp .std_rset CORE_REG_B, data_strings_0 loop_strings_0: tsr CORE_REG_B get tlr CORE_REG_A .std_set CORE_MEM_CHR .std_rset CORE_REG_A, 1 .std_alu CORE_ALU_ADD tlr CORE_REG_B .std_rset CORE_REG_A, data_strings_end_0 .std_alu CORE_ALU_GT tlr CORE_REG_A .std_cond_jump loop_strings_0 .std_rset CORE_REG_B, data_strings_1 loop_strings_1: tsr CORE_REG_B get tlr CORE_REG_A .std_set CORE_MEM_CHR .std_rset CORE_REG_A, 1 .std_alu CORE_ALU_ADD tlr CORE_REG_B .std_rset CORE_REG_A, data_strings_end_1 .std_alu CORE_ALU_GT tlr CORE_REG_A .std_cond_jump loop_strings_1 .std_stop