aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authoruser <user@clank>2026-07-15 23:54:13 +0200
committeruser <user@clank>2026-07-15 23:54:13 +0200
commitab3ebbe227c72b745a46f9233fbfbb27477586b8 (patch)
treed71f87605d17c5653f34ebcdef3941f898cd5b91 /include
parentgbos scaffold: working cooperative microkernel (verified ABAB in emulator) (diff)
downloadgbos-ab3ebbe227c72b745a46f9233fbfbb27477586b8.tar.gz
gbos-ab3ebbe227c72b745a46f9233fbfbb27477586b8.tar.xz
gbos-ab3ebbe227c72b745a46f9233fbfbb27477586b8.zip
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
Diffstat (limited to 'include')
-rw-r--r--include/gbos.inc2
1 files changed, 2 insertions, 0 deletions
diff --git a/include/gbos.inc b/include/gbos.inc
index c22344a..0727b02 100644
--- a/include/gbos.inc
+++ b/include/gbos.inc
@@ -46,6 +46,8 @@ DEF KSTACK_TOP EQU $D000 ; kernel stack top (grows down into WRAM0)
; Process table
; -----------------------------------------------------------------------------
DEF MAX_PROCS EQU 8
+DEF NUM_RAM_BANKS EQU 4 ; MBC5 cart RAM banks available (-r 3 = 32 KiB)
+DEF KSTACK_TOP2 EQU $D000 ; kernel stack top reused for syscalls (fork)
; process states
DEF PS_FREE EQU 0