aboutsummaryrefslogtreecommitdiffstats
path: root/src/syscall.asm
diff options
context:
space:
mode:
authoruser <user@clank>2026-07-16 00:04:09 +0200
committeruser <user@clank>2026-07-16 00:04:09 +0200
commit0a77a11e17f697bf797655c4ae87b927432b1f88 (patch)
tree97cafaa103aec412f692daff9e068fc63f0496bf /src/syscall.asm
parentkernel: implement fork() (diff)
downloadgbos-0a77a11e17f697bf797655c4ae87b927432b1f88.tar.gz
gbos-0a77a11e17f697bf797655c4ae87b927432b1f88.tar.xz
gbos-0a77a11e17f697bf797655c4ae87b927432b1f88.zip
kernel: implement exec()
- sys_exec(B=program id): look up ProgramTable, point PROC_ROMB at the program's ROM text bank, map it into $4000-$7FFF, reset stack, jp to entry (no return) - programs.asm: two demo programs (ping/pong) ORG'd at the SAME $4000 in banks 2 and 3 - proves execution is driven purely by PROC_ROMB - demo: init forks; parent execs PROG_PING (bank2, '1'), child execs PROG_PONG (bank3, '2') -> '1212...', 2000/2000 balanced, zero garbage - README: document exec + text-in-ROM model
Diffstat (limited to 'src/syscall.asm')
-rw-r--r--src/syscall.asm2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/syscall.asm b/src/syscall.asm
index ca2857c..fd1b213 100644
--- a/src/syscall.asm
+++ b/src/syscall.asm
@@ -40,7 +40,7 @@ SyscallTable:
dw sys_write ; 3 WRITE
dw sys_nosys ; 4 OPEN (TODO)
dw sys_nosys ; 5 CLOSE (TODO)
- dw sys_nosys ; 6 EXEC (TODO)
+ dw sys_exec ; 6 EXEC
dw sys_nosys ; 7 WAIT (TODO)
dw sys_getpid ; 8 GETPID
dw sys_nosys ; 9 KILL (TODO)