diff options
Diffstat (limited to 'src/syscall.asm')
| -rw-r--r-- | src/syscall.asm | 20 |
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 |
