aboutsummaryrefslogtreecommitdiffstats
path: root/src/syscall.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/syscall.asm')
-rw-r--r--src/syscall.asm20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/syscall.asm b/src/syscall.asm
index cb2c996..c602097 100644
--- a/src/syscall.asm
+++ b/src/syscall.asm
@@ -62,6 +62,7 @@ SyscallTable:
dw sys_mkdir ; 25 MKDIR
dw sys_chdir ; 26 CHDIR
dw sys_opendir ; 27 OPENDIR
+ dw sys_pipe ; 28 PIPE
; -----------------------------------------------------------------------------
sys_nosys:
@@ -256,7 +257,24 @@ sys_yield:
; - wake our parent if it is blocked in wait()
; - schedule away forever (RAM bank + PCB slot are freed by the reaper)
; -----------------------------------------------------------------------------
-sys_exit:
+sys_exit::
+ ; release any pipe ends held as stdin/stdout (so EOF/free fire)
+ ld a, [wCurProc]
+ add PROC_STDIN
+ ld l, a
+ ld a, [wCurProc+1]
+ adc 0
+ ld h, a
+ ld a, [hl]
+ call pipe_close
+ ld a, [wCurProc]
+ add PROC_STDOUT
+ ld l, a
+ ld a, [wCurProc+1]
+ adc 0
+ ld h, a
+ ld a, [hl]
+ call pipe_close
; PROC_STATE = PS_ZOMBIE
ld a, [wCurProc]
ld l, a