diff options
author | WlodekM <[email protected]> | 2025-03-31 19:47:54 +0300 |
---|---|---|
committer | WlodekM <[email protected]> | 2025-03-31 19:47:54 +0300 |
commit | cccb99226d3951fd9dfe1c4cf1c43126a1309d51 (patch) | |
tree | 518d3e965558ba313f103cee6161cd2b6aedb3b9 /pc-thing/code/memman.a | |
parent | ef4e8c20719822eebd6318a878cc37902c2b85a5 (diff) |
move to pc-thing/
Diffstat (limited to 'pc-thing/code/memman.a')
-rw-r--r-- | pc-thing/code/memman.a | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/pc-thing/code/memman.a b/pc-thing/code/memman.a new file mode 100644 index 0000000..2398cd6 --- /dev/null +++ b/pc-thing/code/memman.a @@ -0,0 +1,154 @@ +; MEMMAN - memory manager + +jmp start + +#using code/printer.a + +; code from calc.a +; call with length in A +str_to_num: + ; pointer to current character + ; ld a len + ld b [stm_start] + add + str c [ptr] + mov a 1 + str a [mult] + mov a 0 + str a [num] + .label zero 48 + stm_loop: + ;load char, subtract zero, multiply by 10 + ld b [ptr] + ldr a b + mov b zero + sub + swp c a + ld b [mult] + mul + + ; add to num + swp c b + ld a [num] + add + str c [num] + + ld a [mult] + mov b 10 + mul + str c [mult] + + ; move pointer + ld a [ptr] + mov b 1 + sub + str c [ptr] + ld b [stm_start] + cmr c b + jz stm_loop + ret + +get_input: + mov a 0 + mov b 0 + mov c [input] + sys + str a [len] + ret + +parse_input: + mov a 0 + str a [inp_ptr] + + .macro case(addr, val, ln) \ + ld a @addr\ + cmp a @val\ + jnz @ln + .macro break() jmp default + + case [input] 'g' case_g + break + + case_g: + ; get pointer to number + mov a [input] + mov b 1 + add + str c [stm_start] + ; get new length + ld a [len] + mov b 2 ; subtract 2 for command + \n at the end + sub + swp c a + jmr str_to_num + ld a [num] + dbg 3 + str a 16 + jmr print_num + ; print the output + mov a 1 ; write + mov b 1 ; stdout + mov c 32 ; address + sys ; syscall + mov a 1 + mov b 1 + mov c [colon_space] + sys + ldm a [num] + str a 16 + jmr print_num + ; print the output + mov a 1 ; write + mov b 1 ; stdout + mov c 32 ; address + sys ; syscall + break + + default: + ret + + +start: + mov a 2 + mov b 0 + sys + jmr get_input + jmr parse_input + halt + +startup_message: +.str "welcome to mem man the memory manager of the memory of managing the memory" +.hex 0xa +.str "yeah" +.hex 0xa +.hex 0xa +.hex 0 +err: +.str "what the fuck is this" +.hex 0xa +.hex 0 +ptr: +.hex 0 +mult: +.hex 0 +num: +.hex 0 +; 256 bytes of input +input: +.str "0000000000000000000000000000000000000000000000000000000000000000" +.str "0000000000000000000000000000000000000000000000000000000000000000" +.str "0000000000000000000000000000000000000000000000000000000000000000" +.str "0000000000000000000000000000000000000000000000000000000000000000" +.str "0000000000000000000000000000000000000000000000000000000000000000" +.str "0000000000000000000000000000000000000000000000000000000000000000" +.str "0000000000000000000000000000000000000000000000000000000000000000" +.str "0000000000000000000000000000000000000000000000000000000000000000" +len: +.hex 0 +inp_ptr: +.hex 0 +stm_start: +.hex 0 +colon_space: +.str ": " +.hex 0 \ No newline at end of file |