diff options
| author | hachem <im@hachem.wtf> | 2026-10-04 02:02:15 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-10-04 02:02:15 +0200 |
| commit | 7c1bd03a71cccfcf48e79d241787021b0de98e73 (patch) | |
| tree | b7131a1f4eee60d24781d3f549d191e17793c282 /kernel/proc.rv | |
| parent | 627f05098785327744e666c9149375125499d2ff (diff) | |
feat: add more user programs
Diffstat (limited to 'kernel/proc.rv')
| -rw-r--r-- | kernel/proc.rv | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/kernel/proc.rv b/kernel/proc.rv index e2f451b..3303bc1 100644 --- a/kernel/proc.rv +++ b/kernel/proc.rv @@ -1,12 +1,11 @@ -# parse the embedded elf (physical address from elf_phys()) and run it in ring 3 +# load an embedded elf into a fresh address space and run it in ring 3 const PT_LOAD = 1 const PAGE_FLAGS = 6 # write | user -fn cmd_run() do - const base = elf_phys() +fn load_elf(base) do if mem_read(base, 4) != 0x464c457f do - puts("run: not an ELF\n") + puts("not an ELF\n") return :nil end const entry = mem_read(base + 24, 8) @@ -38,3 +37,18 @@ fn cmd_run() do as_map(space, stack_top - 4096, frame_alloc(), PAGE_FLAGS) proc_run(space, entry, stack_top) end + +# launch a program by name, :true if one matched +fn run_prog(name) do + for i in 0..prog_count() do + if prog_name(i) == name do load_elf(prog_phys(i)) return :true end + end + puts("no such program: " ~ name ~ "\n") + return :false +end + +fn list_progs() do + puts("programs:") + for i in 0..prog_count() do puts(" " ~ prog_name(i)) end + puts("\n") +end |
