find root directory for fcb opening
This commit is contained in:
parent
b164c79f42
commit
8b30a6c5e2
@ -6,10 +6,10 @@ ORG BDOS
|
||||
|
||||
DISKBUF: EQU (BDOS-0x200) ; deblocking
|
||||
DISKBPB: EQU (DISKBUF-21) ; BPB of the current driv
|
||||
DISKDRV: EQU (DISKBPB-1) ; BYTE denoting drive of current fcb
|
||||
DISKDRV: EQU (DISKBPB-1) ; BYTE denoting drive of current fcb (1=A, ...)
|
||||
STACK: EQU (DISKDRV & 0xFFFE) ; even address, grows down
|
||||
|
||||
DEFDRV: EQU 4 ; default drive when opening a FCB
|
||||
DEFDRV: EQU 4 ; default drive when opening a FCB (1=A, ...)
|
||||
|
||||
SYSCALL:
|
||||
TEST CL, CL
|
||||
@ -32,12 +32,9 @@ SETUP:
|
||||
MOV CX, DISKBUF
|
||||
CALL SETDMA
|
||||
|
||||
MOV CL, 0x00
|
||||
CALL LOADBPB
|
||||
|
||||
MOV AX, [DISKBPB]
|
||||
|
||||
INT3
|
||||
SUB SP, 0x20
|
||||
MOV BX, SP
|
||||
CALL FCBOPEN
|
||||
|
||||
CLI
|
||||
HALT:
|
||||
@ -135,6 +132,8 @@ SYSCALL2:
|
||||
CMP CL, 14
|
||||
JE SETDEFDSK
|
||||
CMP CL, 15
|
||||
JE FCBOPEN
|
||||
RET:
|
||||
RET
|
||||
|
||||
DISKRST:
|
||||
@ -145,9 +144,63 @@ SETDEFDSK:
|
||||
MOV BYTE [DEFDRV], DL
|
||||
RET
|
||||
|
||||
; IN CL drive num
|
||||
LOADBPB:
|
||||
FCBOPEN:
|
||||
MOV CL, BYTE [BX]
|
||||
TEST CL, CL
|
||||
JNZ NODEFDRV
|
||||
MOV CL, BYTE [DEFDRV]
|
||||
MOV BYTE [BX], CL
|
||||
NODEFDRV:
|
||||
CALL LOADBPB
|
||||
|
||||
CALL FATSIZE
|
||||
ADD DX, WORD [DISKBPB+BPB_RSC]
|
||||
CALL SETLSEC
|
||||
CALL READ
|
||||
|
||||
MOV AX, [DISKBUF]
|
||||
|
||||
INT3
|
||||
; TODO: search for file in rootdir
|
||||
; TODO: init cluster number
|
||||
RET
|
||||
|
||||
; Set logical sector number
|
||||
; IN DX sector number
|
||||
SETLSEC:
|
||||
PUSH AX
|
||||
PUSH CX
|
||||
PUSH DX
|
||||
XOR AX, AX
|
||||
XCHG AX, DX
|
||||
DIV WORD [DISKBPB+BPB_SPT]
|
||||
MOV CX, AX
|
||||
CALL SETTRK
|
||||
MOV CX, DX
|
||||
INC CX
|
||||
CALL SETSEC
|
||||
POP DX
|
||||
POP CX
|
||||
POP AX
|
||||
RET
|
||||
|
||||
; OUT DX number of sectors by all FATs
|
||||
FATSIZE:
|
||||
PUSH AX
|
||||
MOV DL, BYTE [DISKBPB+BPB_FN]
|
||||
MOV AL, BYTE [DISKBPB+BPB_SF]
|
||||
MUL DL
|
||||
XCHG AX, DX
|
||||
POP AX
|
||||
RET
|
||||
|
||||
; IN CL drive num, 1=A, 2=B, 3=C
|
||||
LOADBPB:
|
||||
CMP BYTE [DISKDRV], CL
|
||||
JE RET
|
||||
|
||||
PUSH CX
|
||||
DEC CL
|
||||
CALL SELDSK
|
||||
; first track
|
||||
MOV CX, 0
|
||||
@ -158,8 +211,13 @@ LOADBPB:
|
||||
; into default diskbuf
|
||||
MOV CX, DISKBUF
|
||||
CALL SETDMA
|
||||
POP CX
|
||||
|
||||
CALL READ
|
||||
JC DISKRST
|
||||
|
||||
; copy BPB
|
||||
PUSH CX
|
||||
PUSH SI
|
||||
PUSH DI
|
||||
MOV CX, 21
|
||||
@ -168,10 +226,8 @@ LOADBPB:
|
||||
REP MOVSB
|
||||
POP DI
|
||||
POP SI
|
||||
; store drive number
|
||||
POP CX
|
||||
|
||||
; store drive number
|
||||
MOV BYTE [DISKDRV], CL
|
||||
RET
|
||||
|
||||
FCBOPEN:
|
||||
RET
|
||||
|
Loading…
Reference in New Issue
Block a user