From ab3ebbe227c72b745a46f9233fbfbb27477586b8 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 15 Jul 2026 23:54:13 +0200 Subject: kernel: implement fork() - sys_fork: switch to a kernel stack, bump-allocate a cart-RAM bank, copy the parent's 8 KiB bank via a WRAM bounce buffer, plant a switch-in frame so the child returns 0 to the post-fork PC, fill the child PCB (shared ROM text) - add AllocRamBank (bump allocator) + FindFreeSlot helpers - demo: init forks; parent prints P, child prints C (PCPC...); nested fork gives three distinct pids (123...) - README: document the fork mechanism, mark syscall status --- src/syscall.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/syscall.asm') diff --git a/src/syscall.asm b/src/syscall.asm index 71e1f2b..ca2857c 100644 --- a/src/syscall.asm +++ b/src/syscall.asm @@ -35,7 +35,7 @@ SyscallTrap:: ; ----------------------------------------------------------------------------- SyscallTable: dw sys_exit ; 0 - dw sys_nosys ; 1 FORK (TODO) + dw sys_fork ; 1 FORK dw sys_nosys ; 2 READ (TODO) dw sys_write ; 3 WRITE dw sys_nosys ; 4 OPEN (TODO) -- cgit v1.3.1-sl0p