diff --git a/boot/kernel.asm b/boot/kernel.asm index 424c8d1..a7e7b21 100644 --- a/boot/kernel.asm +++ b/boot/kernel.asm @@ -24,17 +24,15 @@ init: cli call dinit pop dx - cmp dl, 0x80 - jc .k - sub dl, (0x80-2) -.k: mov [defdrv], dl - - call logdrv - mov word [0x21*4], int21 mov word [0x21*4+2], cs mov word [curpsp], 0x1000 + cmp dl, 0x80 + jc .k + sub dl, (0x80-2) +.k: call setdd + mov dl, 0x37 mov ah, 2 int 0x21 diff --git a/kernel/fcb.asm b/kernel/fcb.asm index d4c2a51..87b8131 100644 --- a/kernel/fcb.asm +++ b/kernel/fcb.asm @@ -1,22 +1,20 @@ -section .bss - - ; default drive if field in FCB = 0 -defdrv: resb 1 - section .text - ; Helper function: read the drive number from FCB, - ; apply default if necessary, - ; and make it current I/O drive -_setdrv: mov dl, [es:bx] ; A=1 - test dl, dl - jnz .nofix - mov dl, [defdrv] ; A=0 - inc dl - mov [es:bx], dl ; A=1 - ; now set as current i/o drive -.nofix: dec dl ; A=0 for dsksel - jmp logdrv + ; set default drive for current process + ; IN dl drive number +setdd: push ds + mov ds, [ss:curpsp] + mov [PSPDD], dl + pop ds + ret + + ; get default drive for current process + ; OUT al drive number +getdd: push ds + mov ds, [ss:curpsp] + mov al, [PSPDD] + pop ds + ret ; Load root directory entry ; IN ax number of directory entry diff --git a/kernel/syscall.asm b/kernel/syscall.asm index 49a708b..d82868d 100644 --- a/kernel/syscall.asm +++ b/kernel/syscall.asm @@ -31,8 +31,8 @@ stab: ; syscall table dw err, sret ; console status dw err, sret ; return version num dw err, sret ; reset disks - dw err, sret ; select disk - dw err, sret ; open file + dw setdd, sret ; select disk + dw err, sretb ; open file .end: section .text @@ -56,6 +56,9 @@ PSPDS: resw 1 PSPBX: resw 1 PSPES: resw 1 + ; default drive +PSPDD: resb 1 + section .text ; Load current PSP segment into DS