From 233421295254dd723f5ee7e3a9a71a2096a7cae8 Mon Sep 17 00:00:00 2001 From: zongor Date: Wed, 7 Jan 2026 18:42:16 -0800 Subject: [PATCH] wip recursive test --- arch/linux/tui/main.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/arch/linux/tui/main.c b/arch/linux/tui/main.c index 8ee30bf..d42cd6f 100644 --- a/arch/linux/tui/main.c +++ b/arch/linux/tui/main.c @@ -33,18 +33,34 @@ u32 syscall(u32 id, u32 args, u32 mem_ptr) { i32 main() { init_vm(); - // hardcoded add 2 numbers and print debug - int a = mp; mp+=4; - int b = mp; mp+=4; - int c = mp; mp+=4; - code[cp++] = ENCODE_B(OP_LOAD_IMM, a, 1); - code[cp++] = ENCODE_B(OP_LOAD_IMM, b, 2); - code[cp++] = ENCODE_A(OP_ADD_INT, c, b, a); - code[cp++] = ENCODE_A(OP_SYSCALL, SYSCALL_DBG_PRINT, 1, c); + code[cp++] = ENCODE_B(OP_LOAD_IMM, 0, 35); + code[cp++] = ENCODE_B(OP_PUSH, 0, 0); + int fib = cp + 3; + code[cp++] = ENCODE_A(OP_CALL, fib, 7, 1); + code[cp++] = ENCODE_A(OP_SYSCALL, SYSCALL_DBG_PRINT, 1, 0); code[cp++] = ENCODE_A(OP_HALT, 0, 0, 0); + int base_case_if_false = cp + 2; + code[cp++] = ENCODE_B(OP_LOAD_IMM, 1, 2); + code[cp++] = ENCODE_A(OP_JLT_INT, base_case_if_false, 0, 1); + code[cp++] = ENCODE_B(OP_RETURN, 0, 0); + code[cp++] = ENCODE_B(OP_LOAD_IMM, 3, 2); + code[cp++] = ENCODE_A(OP_SUB_INT, 4, 0, 3); + code[cp++] = ENCODE_B(OP_PUSH, 4, 0); + code[cp++] = ENCODE_A(OP_CALL, fib, 7, 5); + + code[cp++] = ENCODE_B(OP_LOAD_IMM, 3, 1); + code[cp++] = ENCODE_A(OP_SUB_INT, 4, 0, 3); + code[cp++] = ENCODE_B(OP_PUSH, 4, 0); + code[cp++] = ENCODE_A(OP_CALL, fib, 7, 6); + + code[cp++] = ENCODE_A(OP_ADD_INT, 7, 6, 5); + code[cp++] = ENCODE_B(OP_RETURN, 7, 0); + while(step_vm()) { // do stuff } return 0; } + +