mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 08:24:18 +00:00
11350 lines
232 KiB
Plaintext
11350 lines
232 KiB
Plaintext
|
||
include equates.a86
|
||
include system.a86
|
||
|
||
|
||
if PCPM204E
|
||
DONTWRITE_PATCH EQU YES
|
||
ROD_ERROR_PATCH EQU YES
|
||
else
|
||
DONTWRITE_PATCH EQU NO
|
||
ROD_ERROR_PATCH EQU NO
|
||
endif
|
||
|
||
|
||
dseg
|
||
extrn rlr:word
|
||
extrn bdos_conowner:word
|
||
extrn date_days:word
|
||
extrn free_dirnames:word
|
||
extrn sysvar_144:byte
|
||
extrn lp_xios_entry:dword
|
||
extrn free_dirdata:word
|
||
extrn pq_filesystem:word
|
||
extrn pq_error:word
|
||
|
||
cseg
|
||
public bdos_init
|
||
public bdos_main
|
||
public cwd_for_drive
|
||
|
||
extrn bdos_callback:near
|
||
|
||
bdos_init: ; DATA XREF: dseg:001Ao
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
bdos_functions dw offset DRV_ALLRESET ; DATA XREF: bdos_main+2o bdos:25F7o
|
||
db 1
|
||
dw offset DRV_SET
|
||
db 1
|
||
dw offset F_OPEN
|
||
db 35h
|
||
dw offset F_CLOSE
|
||
db 35h
|
||
dw offset F_SFIRST
|
||
db 25h
|
||
dw offset F_SNEXT
|
||
db 21h
|
||
dw offset F_DELETE
|
||
db 35h
|
||
dw offset F_READ
|
||
db 17h
|
||
dw offset F_WRITE
|
||
db 17h
|
||
dw offset F_MAKE
|
||
db 25h
|
||
dw offset F_RENAME
|
||
db 15h
|
||
dw offset DRV_ALLOCVEC
|
||
db 1
|
||
dw offset DRV_SETRO
|
||
db 1
|
||
dw offset F_ATTRIB
|
||
db 5
|
||
dw offset DRV_DPB
|
||
db 1
|
||
dw offset F_READRAND
|
||
db 1Bh
|
||
dw offset F_WRITERAND
|
||
db 1Bh
|
||
dw offset F_SIZE
|
||
db 19h
|
||
dw offset F_RANDREC
|
||
db 9
|
||
dw offset DRV_RESET
|
||
db 1
|
||
dw offset F_nop
|
||
db 1
|
||
dw offset F_nop
|
||
db 1
|
||
dw offset F_WRITEZF
|
||
db 1Bh
|
||
dw offset F_nop
|
||
db 19h
|
||
dw offset F_nop
|
||
db 19h
|
||
dw offset DRV_SPACE
|
||
db 1
|
||
dw offset DRV_FLUSH
|
||
db 1
|
||
dw offset flush0 ; Function 98 entry point
|
||
db 1
|
||
dw offset F_TRUNCATE
|
||
db 9
|
||
dw offset DRV_SETLABEL
|
||
db 5
|
||
dw offset DRV_GETLABEL
|
||
db 1
|
||
dw offset F_TIMEDATE
|
||
db 5
|
||
dw offset F_WRITEXFCB
|
||
db 5
|
||
dw offset F_PASSWD
|
||
db 1
|
||
dw offset F_BDOS_74
|
||
db 15h
|
||
dw offset flush0 ; Function 98 entry point
|
||
db 1
|
||
dw offset F_BDOS_75
|
||
db 1
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
f_interrupt: ; CODE XREF: copy$alv+16p delete11+21p
|
||
; ...
|
||
nop
|
||
iret
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
bdos_main: ; DATA XREF: dseg:0018o
|
||
add si, cx
|
||
add si, offset bdos_functions
|
||
call bdos_switch
|
||
mov ax, bx
|
||
retn
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fs_altentry: ; CODE XREF: tst$relog+Dj
|
||
mov cl, fs_function
|
||
xor ch, ch
|
||
mov si, cx
|
||
shl si, 1
|
||
add si, cx
|
||
add si, offset bdos_functions
|
||
mov es, rlr
|
||
mov dx, fs_param_low
|
||
pushf
|
||
pop ax
|
||
cli
|
||
jmps bdos_main_alt
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
bdos_switch: ; CODE XREF: bdos_main+6p
|
||
inc es:proc_indisk
|
||
push cx
|
||
push dx
|
||
push si
|
||
mov bx, offset pq_filesystem
|
||
mov cx, 204h
|
||
call bdos_callback
|
||
pop si
|
||
pop dx
|
||
pop cx
|
||
mov fs_function, cl
|
||
pushf
|
||
pop ax
|
||
cli
|
||
mov F_old_ss, ss
|
||
mov F_old_sp, sp
|
||
|
||
bdos_main_alt: ; CODE XREF: bdos:2606j
|
||
mov bx, ds
|
||
mov ss, bx
|
||
|
||
mov sp, offset F_entry_sp
|
||
push ax
|
||
popf
|
||
mov ax, es:word ptr proc_drive
|
||
mov word ptr fs_fcbdrive, ax
|
||
mov ax, es:userDS
|
||
mov fs_param_ds, ax
|
||
mov ax, es:userES
|
||
mov f_ret_es, ax
|
||
push es
|
||
push si
|
||
mov ax, ds
|
||
mov bx, es
|
||
mov ds, bx
|
||
|
||
mov es, ax
|
||
|
||
mov si, offset proc_dma
|
||
mov di, offset userdma
|
||
mov cx, 18h
|
||
rep movsb
|
||
mov ds, ax
|
||
|
||
mov ax, userdma
|
||
mov cl, 4
|
||
shr ax, cl
|
||
add userdmaseg, ax
|
||
and userdma, 0Fh
|
||
mov cx, 14h
|
||
xor ax, ax
|
||
mov di, offset fcbdsk
|
||
rep stosb
|
||
mov fs_param_low, dx
|
||
mov linfo, dl
|
||
pop si
|
||
push si
|
||
mov ah, cs:2[si] ; Flags for this call
|
||
test ah, 4 ; Bit 2: 33-byte FCB present
|
||
jz no_33_fcb
|
||
call copy_fcb_33
|
||
jmps no_36_fcb
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
no_33_fcb: ; CODE XREF: bdos_switch+84j
|
||
test ah, 8
|
||
jz no_36_fcb ; Bit 3: 36-byte FCB present
|
||
call copy_fcb_36
|
||
call get_record_coun
|
||
|
||
no_36_fcb: ; CODE XREF: bdos_switch+89j
|
||
; bdos_switch+8Ej
|
||
pop si
|
||
cmp fs_sectorcount, 1
|
||
jz single_call
|
||
test cs:byte ptr 2[si], 2; Bit 1: Call once for each sector
|
||
; specified by BDOS sector count
|
||
jz single_call
|
||
call F_repeat_call
|
||
jmps post_multicall
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
single_call: ; CODE XREF: bdos_switch+9Cj
|
||
; bdos_switch+A3j
|
||
call F_do_call
|
||
|
||
post_multicall: ; CODE XREF: bdos_switch+A8j
|
||
mov cl, cur_fcb_len
|
||
xor ch, ch
|
||
jcxz fcb_len_0
|
||
mov si, offset user_fcb
|
||
mov di, fs_param_low
|
||
mov es, fs_param_ds
|
||
|
||
rep movsb
|
||
test fcb_is_for_dir, 0FFh
|
||
jz fcb_len_0
|
||
mov di, fs_param_low
|
||
or es:byte ptr [di], 80h
|
||
|
||
fcb_len_0: ; CODE XREF: bdos_switch+B3j
|
||
; bdos_switch+C7j
|
||
pop es
|
||
mov al, fs_function
|
||
cmp al, 4
|
||
jz f_to_proc
|
||
cmp al, 5
|
||
jz f_to_proc
|
||
cmp al, 21h
|
||
jnz f_switchout
|
||
|
||
f_to_proc: ; CODE XREF: bdos_switch+D7j
|
||
; bdos_switch+DBj
|
||
mov si, offset sys_fx
|
||
mov di, offset proc_fx
|
||
mov cx, 14h
|
||
rep movsb
|
||
|
||
f_switchout: ; CODE XREF: bdos_switch+DFj
|
||
mov ax, f_ret_es
|
||
mov es:userES, ax
|
||
mov bx, aret
|
||
pushf
|
||
pop ax
|
||
cli
|
||
mov ss, F_old_ss
|
||
|
||
mov sp, F_old_sp
|
||
push ax
|
||
popf
|
||
mov al, err_major
|
||
push bx
|
||
test al, 0FFh
|
||
jz fs_release
|
||
push fs_param_ds
|
||
mov bx, 0FFFFh
|
||
test set_if_attrs, 0FFh
|
||
jz fs_ret_error
|
||
mov bx, fs_param_low
|
||
|
||
fs_ret_error: ; CODE XREF: bdos_switch+118j
|
||
push bx
|
||
mov ah, error_drive
|
||
|
||
fs_release: ; CODE XREF: bdos_switch+10Aj
|
||
push ax
|
||
mov bx, offset pq_filesystem
|
||
mov cx, 205h
|
||
call bdos_callback
|
||
pop ax
|
||
test al, 0FFh
|
||
jnz f_abort
|
||
jmp f_noabort
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_abort: ; CODE XREF: bdos_switch+130j
|
||
push ax
|
||
mov bx, offset pq_error
|
||
mov cx, 204h
|
||
call bdos_callback
|
||
mov dx, addr_cpm_error
|
||
call f_printstring
|
||
pop ax
|
||
push ax
|
||
add ah, 'A'
|
||
mov byte ptr strColonSpace, ah
|
||
mov dx, offset strColonSpace
|
||
call f_printstring
|
||
pop ax
|
||
push ax
|
||
mov bl, al
|
||
xor bh, bh
|
||
shl bx, 1
|
||
mov bx, error_strings[bx]
|
||
mov dx, [bx]
|
||
call f_printstring
|
||
mov dx, addr_bdos_fn
|
||
call f_printstring
|
||
pop ax
|
||
mov al, es:proc_fx
|
||
mov ah, '0'
|
||
cmp al, 100
|
||
jb f_printdec
|
||
push ax
|
||
mov dl, '1'
|
||
call f_printchar
|
||
pop ax
|
||
sub al, 100
|
||
|
||
f_printdec: ; CODE XREF: bdos_switch+176j
|
||
; bdos_switch+187j
|
||
sub al, 0Ah
|
||
jb f_printfile
|
||
inc ah
|
||
jmps f_printdec
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_printfile: ; CODE XREF: bdos_switch+183j
|
||
push ax
|
||
mov dl, ah
|
||
call f_printchar
|
||
pop dx
|
||
add dl, ':'
|
||
call f_printchar
|
||
pop si
|
||
pop dx
|
||
inc si
|
||
jz f_filedone
|
||
mov di, offset errFilename
|
||
push ds
|
||
push es
|
||
push ds
|
||
pop es
|
||
|
||
mov ds, dx
|
||
mov cx, 8
|
||
|
||
print_filename: ; CODE XREF: bdos_switch+1ABj
|
||
lodsb
|
||
and al, 7Fh
|
||
stosb
|
||
loop print_filename
|
||
mov al, '.'
|
||
stosb
|
||
mov cl, 3
|
||
|
||
print_filetype: ; CODE XREF: bdos_switch+1B6j
|
||
lodsb
|
||
and al, 7Fh
|
||
stosb
|
||
loop print_filetype
|
||
pop es
|
||
|
||
pop ds
|
||
mov dx, addr_file
|
||
call f_printstring
|
||
mov dx, offset errFilename
|
||
call f_printstring
|
||
|
||
f_filedone: ; CODE XREF: bdos_switch+199j
|
||
mov bx, offset pq_error
|
||
mov cx, 205h
|
||
call bdos_callback
|
||
|
||
f_noabort: ; CODE XREF: bdos_switch+132j
|
||
pop bx
|
||
push bx
|
||
mov cx, 206h
|
||
call bdos_callback
|
||
pop bx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_do_call: ; CODE XREF: bdos_switch+AAp
|
||
; F_repeat_call+17p
|
||
mov F_entry_sp, sp
|
||
test cs:byte ptr 2[si], 20h; Can affect dirs?
|
||
jz not_for_dir
|
||
test user_fcb, 80h
|
||
jz not_for_dir
|
||
and user_fcb, 1Fh
|
||
mov fcb_is_for_dir, 0FFh
|
||
|
||
not_for_dir: ; CODE XREF: F_do_call+9j F_do_call+10j
|
||
test cs:byte ptr 2[si], 10h
|
||
jz fs_notfilefcb
|
||
push si
|
||
call reselect
|
||
pop si
|
||
|
||
fs_notfilefcb: ; CODE XREF: F_do_call+21j
|
||
call cs:word ptr [si]
|
||
|
||
F_return: ; CODE XREF: sel$error+27j
|
||
cmp set_if_attrs, 0
|
||
jz dont_set_attrs
|
||
mov al, xfcb_rdonly
|
||
mov bx, offset user_fcb
|
||
or 7[bx], al
|
||
mov al, high$ext
|
||
cmp al, 60h
|
||
jnz set_F12
|
||
or byte ptr 8[bx], 80h
|
||
jmps dont_set_ifattr
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
set_F12: ; CODE XREF: F_do_call+40j
|
||
or 12[bx], al
|
||
|
||
dont_set_ifattr: ; CODE XREF: F_do_call+46j
|
||
mov al, result_F0F
|
||
or 15[bx], al
|
||
mov al, fcbdsk
|
||
mov [bx], al
|
||
|
||
dont_set_attrs: ; CODE XREF: F_do_call+30j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_repeat_call: ; CODE XREF: bdos_switch+A5p
|
||
mov call_flags, si
|
||
mov ah, cs:2[si]
|
||
mov al, fs_sectorcount
|
||
|
||
frc_loop: ; CODE XREF: F_repeat_call+40j
|
||
mov last_sec_count, al
|
||
push ax
|
||
mov si, call_flags
|
||
mov dx, fs_param_low
|
||
call F_do_call
|
||
mov bl, byte ptr aret
|
||
or bl, bl
|
||
pop ax
|
||
jz frc_inc
|
||
cmp bl, 0FFh
|
||
jz frc_abandon
|
||
mov bh, fs_sectorcount
|
||
sub bh, al
|
||
jmps frc_okay
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
frc_inc: ; CODE XREF: F_repeat_call+21j
|
||
test ah, 8
|
||
jz frc_notinc
|
||
call inc_fcb_record
|
||
|
||
frc_notinc: ; CODE XREF: F_repeat_call+33j
|
||
add userdma, 80h
|
||
dec al
|
||
jnz frc_loop
|
||
xor bx, bx
|
||
|
||
frc_okay: ; CODE XREF: F_repeat_call+2Ej
|
||
mov aret, bx
|
||
|
||
frc_abandon: ; CODE XREF: F_repeat_call+26j
|
||
test ah, 8
|
||
jz frc_return
|
||
call fcb_recno_addr
|
||
jmps put_record_coun
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
get_record_coun: ; CODE XREF: bdos_switch+93p
|
||
call fcb_recno_addr
|
||
xchg bx, dx
|
||
|
||
put_record_coun: ; CODE XREF: F_repeat_call+50j
|
||
mov cl, 3
|
||
jmp move ; Copy CL bytes from DX to BX
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fcb_recno_addr: ; CODE XREF: F_repeat_call+4Dp
|
||
; get_record_counp
|
||
mov bx, offset user_fcb+21h
|
||
mov dx, offset fcb_randrec_num
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
copy_fcb_33: ; CODE XREF: bdos_switch+86p
|
||
; bdos:462Ep
|
||
mov cl, 21h
|
||
jmps copy_fcb
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
copy_fcb_36: ; CODE XREF: bdos_switch+90p
|
||
mov cl, 24h
|
||
|
||
copy_fcb: ; CODE XREF: copy_fcb_33+2j
|
||
; F_PASSWD+2p
|
||
mov cur_fcb_len, cl
|
||
xor ch, ch
|
||
mov si, fs_param_low
|
||
mov di, offset user_fcb
|
||
push ds
|
||
mov ds, fs_param_ds
|
||
rep movsb
|
||
pop ds
|
||
|
||
frc_return: ; CODE XREF: F_repeat_call+4Bj
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
inc_fcb_record: ; CODE XREF: F_repeat_call+35p
|
||
mov bx, offset user_fcb+21h
|
||
inc word ptr [bx]
|
||
jnz ifr_ret
|
||
inc byte ptr 2[bx]
|
||
|
||
ifr_ret: ; CODE XREF: inc_fcb_record+5j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
f_printchar: ; CODE XREF: bdos_switch+17Bp
|
||
; bdos_switch+18Cp ...
|
||
mov cx, 419h
|
||
jmp bdos_callback
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
f_printstring: ; CODE XREF: bdos_switch+143p
|
||
; bdos_switch+152p ...
|
||
mov bx, dx
|
||
|
||
f_prstr_loop: ; CODE XREF: f_printstring+Fj
|
||
mov dl, [bx]
|
||
cmp dl, '$'
|
||
jz f_prstr_end
|
||
push bx
|
||
call f_printchar
|
||
pop bx
|
||
inc bx
|
||
jmps f_prstr_loop
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_prstr_end: ; CODE XREF: f_printstring+7j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fs_call_xios: ; CODE XREF: drive_login+5p
|
||
; DRV_FLUSH+9p ...
|
||
push es
|
||
mov es, rlr
|
||
callf dword ptr lp_xios_entry
|
||
cld
|
||
pop es
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
xios_rdwr: ; CODE XREF: wrbuff+2p rdbuff+2p
|
||
; ...
|
||
mov dx, bcb_record
|
||
mov ch, bcb_record_h
|
||
mov bl, curdsk
|
||
mov bh, 1
|
||
xchg bh, fs_rdwrcount
|
||
push bx
|
||
push fs_track
|
||
push fs_sector
|
||
push word ptr fs_buffer
|
||
push word ptr fs_buffer+2
|
||
mov es, rlr
|
||
callf dword ptr lp_xios_entry
|
||
add sp, 0Ah
|
||
cld
|
||
push ds
|
||
pop es
|
||
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fs_abort1: ; CODE XREF: rdbuff+74j
|
||
mov ah, 1
|
||
jmps goerr
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
;
|
||
|
||
rod$error:
|
||
call discard$dir ; Report read/only disk error
|
||
if ROD_ERROR_PATCH
|
||
jmp rod_err_patch
|
||
nop
|
||
else
|
||
mov ah, 2
|
||
jmps goerr
|
||
endif
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
rof$error: ; CODE XREF: check$rodir+8j
|
||
; fat_delete+34j ...
|
||
mov ah, 3
|
||
jmps goerr
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Report select error
|
||
|
||
sel$error: ; CODE XREF: cwd_for_drive+2Bj
|
||
mov curdsk, 0FFh ; Invalidate curdsk to force select
|
||
; call at next curselect call
|
||
mov ah, 4
|
||
|
||
goerr: ; CODE XREF: fs_abort1+2j rof$error+2j
|
||
; ...
|
||
mov al, 0FFh
|
||
mov aret, ax
|
||
cmp fs_errormode, al
|
||
jnz error
|
||
|
||
rtn$phy$errs: ; CODE XREF: error+Fj error+23j
|
||
mov al, fs_function
|
||
cmp al, 0Bh ; Return 0ffffh if function 27 or 31
|
||
jz fs_abort_ffff
|
||
cmp al, 0Eh
|
||
jnz goback
|
||
|
||
fs_abort_ffff: ; CODE XREF: sel$error+17j
|
||
mov aret, 0FFFFh
|
||
|
||
goback: ; CODE XREF: sel$error+1Bj
|
||
; disk_error+10j ...
|
||
mov sp, F_entry_sp
|
||
jmp F_return
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
f_ret_1: ; CODE XREF: open$reel+79j
|
||
; open$reel+97j ...
|
||
mov al, 1
|
||
|
||
sta$ret: ; CODE XREF: check_changed+11j
|
||
; tst$inv$fcb+8j ...
|
||
mov byte ptr aret, al
|
||
|
||
F_nop: ; DATA XREF: bdos:25AAo bdos:25ADo
|
||
; ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
disk_error: ; CODE XREF: valid_dl_f_fcb+Aj
|
||
; cpm_writerec+17j ...
|
||
mov al, 0FFh
|
||
mov aret, ax
|
||
cmp ah, 3 ; Error 3 -> Error 12
|
||
jnz diskerr_not3
|
||
mov ah, 0Ch
|
||
|
||
diskerr_not3: ; CODE XREF: disk_error+8j
|
||
cmp fs_errormode, al
|
||
jz goback
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
error: ; CODE XREF: sel$error+10j
|
||
mov err_major, ah
|
||
mov al, fs_fcbdrive
|
||
mov error_drive, al
|
||
cmp fs_errormode, 0FEh
|
||
jz rtn$phy$errs
|
||
push ds
|
||
mov ds, rlr
|
||
|
||
or proc_flags, 1
|
||
mov proc_errcode, 0FFFDh
|
||
pop ds
|
||
|
||
jmps rtn$phy$errs
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Copy CL bytes from DX to BX
|
||
|
||
move: ; CODE XREF: get_record_coun+7j
|
||
; deblock+100p ...
|
||
xor ch, ch
|
||
mov si, dx
|
||
mov di, bx
|
||
rep movsb
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Compare CL bytes at DX and BX
|
||
|
||
compare: ; CODE XREF: discard$data+Cp
|
||
; get$bcba+5Bp ...
|
||
xor ch, ch
|
||
mov si, bx
|
||
mov di, dx
|
||
rep cmpsb
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
seek: ; CODE XREF: bdos:2C5Dp deblock$io+1p
|
||
; ...
|
||
mov ax, bcb_record
|
||
xor dx, dx
|
||
mov dl, bcb_record_h
|
||
mov cl, dpb_psh
|
||
xor ch, ch
|
||
jcxz lookup_p128
|
||
|
||
lookup_shift: ; CODE XREF: seek+15j
|
||
shr dx, 1
|
||
rcr ax, 1
|
||
loop lookup_shift
|
||
|
||
lookup_p128: ; CODE XREF: seek+Fj
|
||
cmp F_isfatfs, 0
|
||
jz lookup_cpm
|
||
add ax, dpb_firstfat
|
||
adc dx, 0
|
||
xchg ax, bx
|
||
mov al, byte ptr dpb_fatcount
|
||
mul byte ptr dpb_secperfat
|
||
add ax, bx
|
||
adc dx, 0
|
||
div dpb_spt
|
||
jmps lookup_haveoffs
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
lookup_cpm: ; CODE XREF: seek+1Cj
|
||
div dpb_spt
|
||
add ax, dpb_off
|
||
|
||
lookup_haveoffs: ; CODE XREF: seek+36j
|
||
mov fs_track, ax
|
||
mov fs_sector, dx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
atran: ; CODE XREF: bdos:3D15p cpm_writerec+96p
|
||
mov cl, dpb_bsh
|
||
mov ax, bcb_record
|
||
mov arecord1, ax
|
||
xor bh, bh
|
||
mov bl, ah
|
||
shl ax, cl
|
||
shl bx, cl
|
||
mov bcb_dirty, ax
|
||
xchg ax, bx
|
||
mov al, vrecord
|
||
and al, dpb_blm
|
||
mov blk$off, al
|
||
or bl, al
|
||
mov bcb_record, bx
|
||
mov bcb_record_h, ah
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
dm$position: ; CODE XREF: indexp check$nprs+77p
|
||
; ...
|
||
mov cl, dpb_bsh
|
||
mov ch, vrecord
|
||
shr ch, cl
|
||
neg cl
|
||
add cl, 7
|
||
mov al, extval
|
||
shl al, cl
|
||
add al, ch
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Get block CX from FCB; returns in BX
|
||
|
||
get$dm: ; CODE XREF: index+Ap check$nprs+8Ap
|
||
; ...
|
||
mov bx, offset user_fcb+10h
|
||
add bx, cx
|
||
cmp single, 0 ; Nonzero if using 8-bit blocks
|
||
jz bffcb_16bit
|
||
mov bl, [bx]
|
||
xor bh, bh
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
bffcb_16bit: ; CODE XREF: get$dm+Aj
|
||
add bx, cx
|
||
mov bx, [bx]
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Compute disk block number from current FCB
|
||
|
||
index: ; CODE XREF: bdos:3D10p cpm_writerec+42p
|
||
call dm$position
|
||
mov dminx, al
|
||
mov cl, al
|
||
xor ch, ch
|
||
call get$dm ; Get block CX from FCB; returns in BX
|
||
mov bcb_record, bx
|
||
or bx, bx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
get$atts: ; CODE XREF: cpm_deletep F_MAKE+31p
|
||
; ...
|
||
mov di, offset user_fcb+8
|
||
mov cx, 4
|
||
xor dl, dl
|
||
std
|
||
|
||
get_attrs0: ; CODE XREF: get$atts+12j
|
||
mov al, [di]
|
||
shl al, 1
|
||
rcr dl, 1
|
||
shr al, 1
|
||
stosb
|
||
loop get_attrs0
|
||
cld
|
||
mov al, dl
|
||
mov attributes, al ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Compute directory extent from FCB
|
||
|
||
get$dir$ext: ; CODE XREF: getfcb+Dp open$copy+16p
|
||
; ...
|
||
mov bx, offset user_fcb+20h
|
||
mov dx, 1001h ; Scan FCB disk map backwards
|
||
|
||
get$de0: ; CODE XREF: get$dir$ext+10j
|
||
; get$dir$ext+31j
|
||
dec dh
|
||
dec bx
|
||
cmp byte ptr [bx], 0
|
||
jnz get$de2 ; fcb(dskmap(bx)) ~= 0
|
||
or dh, dh
|
||
jnz get$de0
|
||
dec dl ; DL=0 if all blocks are 0 in fcb
|
||
; disk map
|
||
|
||
get$de2: ; CODE XREF: get$dir$ext+Cj
|
||
mov dminx, dl
|
||
cmp single, 0FFh ; Nonzero if using 8-bit blocks
|
||
mov al, dh
|
||
jz get$de3
|
||
shr al, 1 ; not single, divide blk idx by 2
|
||
;
|
||
; Compute ext offset from last non-zero block index
|
||
; by shifting blk idx right by (7 - block shift)
|
||
;
|
||
|
||
get$de3: ; CODE XREF: get$dir$ext+1Fj
|
||
mov cl, 7
|
||
sub cl, dpb_bsh
|
||
shr al, cl
|
||
mov ah, dpb_exm
|
||
cmp ah, al ; Verify computed extent <= ext mask
|
||
jb get$de0
|
||
mov bx, offset user_fcb+0Ch
|
||
mov cl, [bx] ; Extent
|
||
not ah
|
||
and ah, 1Fh ; dir ext = (fcb ext & (~extmsk) & maxext) | ext offset
|
||
and ah, cl
|
||
or al, ah ; AL = directory extent
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Compare extent nos in AL and CL
|
||
; Return nonzero if they do not match
|
||
|
||
compext: ; CODE XREF: bdos:3702p open$reel+Fp
|
||
; ...
|
||
push cx
|
||
mov ch, dpb_exm
|
||
not ch ; CH = mask for physical extent no#
|
||
and cl, ch
|
||
and al, ch
|
||
sub al, cl
|
||
and al, 1Fh ; Difference between 2 phys extents
|
||
pop cx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Set variables from currently addressed FCB
|
||
|
||
getfcb: ; CODE XREF: open$reel+58p
|
||
; bdos:3CF6p ...
|
||
mov al, user_fcb+20h
|
||
mov vrecord, al
|
||
cmp user_fcb+0Fh, 0
|
||
jnz getfcb0
|
||
call get$dir$ext ; Compute directory extent from FCB
|
||
mov cl, al
|
||
call set$rc
|
||
|
||
getfcb0: ; CODE XREF: getfcb+Bj
|
||
mov al, user_fcb+0Fh
|
||
cmp al, 81h
|
||
jb getfcb1
|
||
mov al, 80h
|
||
|
||
getfcb1: ; CODE XREF: getfcb+1Aj
|
||
mov rcount, al
|
||
mov al, dpb_exm
|
||
and al, user_fcb+0Ch
|
||
mov extval, al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Place values back into current FCB
|
||
|
||
setfcb: ; CODE XREF: bdos:2F06j bdos:3D2Bj
|
||
; ...
|
||
xor al, al ; Don't change if random
|
||
cmp fs_function, 9 ; Is function < 9? (sequential read/write)
|
||
jnb setfcb1
|
||
inc al ; Increase current record
|
||
|
||
setfcb1: ; CODE XREF: setfcb+7j
|
||
add al, vrecord
|
||
mov user_fcb+20h, al
|
||
cmp user_fcb+0Fh, 80h; Don't reset RC if > 7Fh
|
||
jnb setfcb2
|
||
mov al, rcount
|
||
mov user_fcb+0Fh, al
|
||
|
||
setfcb2: ; CODE XREF: setfcb+17j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
cksum_cl_bytes: ; CODE XREF: compute$cs+Ep
|
||
xor ch, ch
|
||
|
||
cksum8_loop: ; CODE XREF: cksum_cl_bytes+5j
|
||
add al, [bx]
|
||
inc bx
|
||
loop cksum8_loop
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Compute checksum for current directory buffer
|
||
|
||
compute$cs: ; CODE XREF: r$dir+49p
|
||
mov bx, buffa
|
||
mov cx, 4
|
||
xor ah, ah ; AH=0,CX=4
|
||
|
||
compute$cs0: ; CODE XREF: compute$cs+14j
|
||
push cx
|
||
xor al, al
|
||
mov cl, 20h
|
||
call cksum_cl_bytes
|
||
xor ah, al
|
||
pop cx
|
||
loop compute$cs0
|
||
xchg al, ah ; Return with checksum in AL
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
chek$fcb: ; CODE XREF: check_changedp
|
||
; F_CLOSE+2Cp
|
||
cmp high$ext, 60h
|
||
jnz chek$fcb1
|
||
xor al, al
|
||
mov user_fcb, al
|
||
|
||
chek$fcb1: ; CODE XREF: chek$fcb+5j
|
||
mov bx, lsn$add
|
||
mov al, user_fcb+0Dh
|
||
cmp 2[bx], al
|
||
|
||
d_notchanged: ; CODE XREF: check_changed+3j
|
||
; check_changed+Cj
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
check_changed: ; CODE XREF: F_READp F_WRITEp
|
||
; ...
|
||
call chek$fcb
|
||
jz d_notchanged
|
||
mov dx, removable_drive
|
||
call test$vector ; Return bit curdsk of vector DX
|
||
jz d_notchanged
|
||
pop bx
|
||
|
||
chk$media2: ; CODE XREF: chk$exit$fxs+Cj
|
||
mov al, 0Ah
|
||
jmp sta$ret
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
set$lsn: ; CODE XREF: open$reel+55p
|
||
; cpm_rwrand+ABp ...
|
||
mov bx, lsn$add
|
||
mov cl, 2[bx]
|
||
mov user_fcb+0Dh, cl
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
set$cdisk: ; CODE XREF: media$change+12p
|
||
; curselect+2Cp ...
|
||
mov cl, curdsk
|
||
|
||
set$cdisk1: ; CODE XREF: get$block+3Bp
|
||
mov ax, 1
|
||
shl ax, cl
|
||
or [bx], ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Return true if drive is software R/O
|
||
|
||
nowrite: ; CODE XREF: check$writep r$dir+63p
|
||
; ...
|
||
mov dx, readonly_vector
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Return bit curdsk of vector DX
|
||
|
||
test$vector: ; CODE XREF: check_changed+9p
|
||
; rdbuff+2Cp ...
|
||
mov cl, curdsk
|
||
shr dx, cl
|
||
and dx, 1
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
getdptra: ; CODE XREF: check$rodirp read$subdir+33p
|
||
; ...
|
||
mov bl, dptr
|
||
xor bh, bh
|
||
add bx, buffa
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
cpm_getrdonly: ; CODE XREF: check$rodir+3p
|
||
add bx, 9
|
||
mov al, [bx]
|
||
rcl al, 1
|
||
|
||
can_write: ; CODE XREF: check$rodir+6j
|
||
; check$write+3j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
check$rodir: ; CODE XREF: cpm_delete+1Dp
|
||
; bdos:47E5p ...
|
||
call getdptra
|
||
|
||
check$rofile: ; CODE XREF: cpm_writerec+24p
|
||
; fat_rdwr+22p
|
||
call cpm_getrdonly
|
||
jnb can_write
|
||
jmp rof$error
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
check$write: ; CODE XREF: seek$copyp cpm_writerec+5p
|
||
; ...
|
||
call nowrite ; Return true if drive is software R/O
|
||
jz can_write
|
||
jmp rod$error ; Report read/only disk error
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
getmodnum: ; CODE XREF: setfwfp cpm_writerec+136p
|
||
mov bx, offset user_fcb+0Eh
|
||
mov al, [bx]
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Clear S2 byte of FCB
|
||
|
||
clrmodnum: ; CODE XREF: F_OPEN+3p F_SFIRST+30p
|
||
; ...
|
||
mov user_fcb+0Eh, 0
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
clr$ext: ; CODE XREF: reselect+24p F_SFIRST+2Dp
|
||
; ...
|
||
and user_fcb+0Ch, 1Fh
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
setfwf: ; CODE XREF: open$copyp close$fcb+9Bp
|
||
; ...
|
||
call getmodnum
|
||
or al, 80h
|
||
mov [bx], al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
cp_fcb10_ffff: ; CODE XREF: tst$inv$fcbp close+11p
|
||
; ...
|
||
mov bx, offset user_fcb+10h
|
||
jmps cp_pbx_ffff
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
tst$inv$fcb: ; CODE XREF: bdos:3CEEp cpm_writerec+27p
|
||
call cp_fcb10_ffff
|
||
jnz eod_ret
|
||
pop bx
|
||
mov al, 9
|
||
jmp sta$ret
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
end$of$dir: ; CODE XREF: read$subdir+2Bp
|
||
; cpm_login+4Bp ...
|
||
mov bx, offset dcnt
|
||
|
||
cp_pbx_ffff: ; CODE XREF: cp_fcb10_ffff+3j
|
||
cmp word ptr [bx], 0FFFFh
|
||
|
||
eod_ret: ; CODE XREF: tst$inv$fcb+3j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
set$end$dir: ; CODE XREF: rd$subdir1+3Bj
|
||
; r$dir+11j ...
|
||
mov dcnt, 0FFFFh
|
||
mov dname_cluster, 0
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
set_dcnt_dblk: ; CODE XREF: does$xfcb$exist+7p
|
||
; restore_dir_fcbp ...
|
||
mov ax, xdcnt
|
||
and al, 0FCh
|
||
dec ax
|
||
mov dcnt, ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
compcdr: ; CODE XREF: setcdrp searchn+20p
|
||
; ...
|
||
mov dx, dcnt
|
||
mov bx, cdrmaxa
|
||
cmp dx, [bx]
|
||
|
||
tst$relog_ret: ; CODE XREF: setcdr+3j tst$log$fxs+5j
|
||
; ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
setcdr: ; CODE XREF: cpm_login+72p
|
||
; fat_login+4Cp ...
|
||
call compcdr
|
||
jb tst$relog_ret
|
||
inc dx
|
||
mov [bx], dx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
tst$log$fxs: ; CODE XREF: search$h_sub+23p
|
||
; reselect+46p
|
||
test byte ptr dpb_cks+1, 80h
|
||
jnz tst$relog_ret
|
||
mov di, offset log$fxs
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
tst$log0: ; CODE XREF: chk$exit$fxs+7p
|
||
; chk$exit$fxs+12p
|
||
mov cl, cs:[di]
|
||
inc di
|
||
xor ch, ch
|
||
mov al, fs_function
|
||
push cs
|
||
pop es
|
||
|
||
repne scasb
|
||
push ds
|
||
pop es
|
||
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
chk$exit$fxs: ; CODE XREF: rdbuff+4Cp read$dir+Ap
|
||
; ...
|
||
mov bx, offset goback
|
||
push bx
|
||
mov di, offset rw$fxs; Read or write functions
|
||
call tst$log0
|
||
jnz chk_exit_fxs1
|
||
jmp chk$media2
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
chk_exit_fxs1: ; CODE XREF: chk$exit$fxs+Aj
|
||
mov di, offset sc$fxs; Close or search functions
|
||
call tst$log0
|
||
jnz chk_exit_fxs2
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
chk_exit_fxs2: ; CODE XREF: chk$exit$fxs+15j
|
||
pop bx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
tst$relog: ; CODE XREF: read$dir+Dp rd$parentdir+64j
|
||
xor al, al
|
||
xchg al, relog
|
||
test al, al
|
||
jz tst$relog_ret
|
||
call curselect
|
||
jmp fs_altentry
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
drv$relog: ; CODE XREF: check$media+3Ap
|
||
call curselect
|
||
xor ax, ax
|
||
mov dcnt, ax
|
||
mov dptr, al
|
||
retn
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
recordok1: ; CODE XREF: fat_rdwr_ckd+16j
|
||
mov fs_rdwrcount, al
|
||
push cx
|
||
call setdata
|
||
call seek
|
||
pop cx
|
||
or cl, cl
|
||
jz wrbuff
|
||
jmps rdbuff
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
wrbuff: ; CODE XREF: bdos:2C63j deblock$io+Dj
|
||
; ...
|
||
mov al, 0Bh
|
||
call xios_rdwr
|
||
mov ah, 0FFh
|
||
jmps diocomp1
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
rdbuff: ; CODE XREF: bdos:2C65j deblock$io+10p
|
||
; ...
|
||
mov al, 0Ah
|
||
call xios_rdwr
|
||
|
||
diocomp: ; CODE XREF: DRV_FLUSH+Cp call_xios_flush+5p
|
||
mov ah, 0
|
||
|
||
diocomp1: ; CODE XREF: wrbuff+7j write_FAT+3Fj
|
||
or al, al
|
||
jnz diocomp2
|
||
mov readf$sw, 0FFh
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
diocomp2: ; CODE XREF: rdbuff+9j
|
||
push ax
|
||
push bx
|
||
cmp al, 0FFh ; AL = 0FFh => media changed
|
||
jz diocomp_chg
|
||
mov al, bcb_drive
|
||
cmp al, fs_fcbdrive
|
||
jz diocomp_nochang
|
||
|
||
diocomp_chg: ; CODE XREF: rdbuff+15j
|
||
cmp dpb_cks, 8000h
|
||
jz diocomp_nochang
|
||
mov dx, login_vector
|
||
call test$vector ; Return bit curdsk of vector DX
|
||
jz diocomp_nochang
|
||
call media$change
|
||
cmp fs_function, 1Ah; Was this a flush operation?
|
||
jz wasflush
|
||
mov al, bcb_drive
|
||
cmp al, fs_fcbdrive
|
||
jz diocomp_notrelg ; To another drive?
|
||
mov relog, 0
|
||
|
||
wasflush: ; CODE XREF: rdbuff+39j
|
||
pop bx
|
||
pop ax
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
diocomp_notrelg: ; CODE XREF: rdbuff+42j
|
||
call chk$exit$fxs
|
||
test readf$sw, 0FFh ; Was this a directory read?
|
||
jz diocomp9
|
||
call lret$eq$ff
|
||
jmp goback
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
diocomp9: ; CODE XREF: rdbuff+54j
|
||
pop bx
|
||
pop ax
|
||
or ah, ah
|
||
jnz j_rod$error
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
diocomp_nochang: ; CODE XREF: rdbuff+1Ej rdbuff+26j
|
||
; ...
|
||
pop bx
|
||
pop ax
|
||
push es
|
||
mov es, rlr
|
||
|
||
mov es:byte ptr proc_countdown, bh
|
||
pop es
|
||
cmp al, 2
|
||
jz j_rod$error
|
||
jmp fs_abort1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
j_rod$error: ; CODE XREF: rdbuff+60j rdbuff+72j
|
||
jmp rod$error ; Report read/only disk error
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Release the BCB for bcb_drive, record bcb_record
|
||
|
||
discard$databcb: ; CODE XREF: cpm_writerec+C4p
|
||
; cpm_writerec+F8p ...
|
||
mov bx, dph_dtabcb
|
||
mov cl, 4
|
||
jmps bcb_rel_cl
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Release all directory BCBs for a drive
|
||
|
||
discard$dir: ; CODE XREF: bdos:291Dp cpm_login+19p
|
||
; ...
|
||
mov bx, dph_dirbcb
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Called with BX->BCB chain head. Release all BCBs for a drive
|
||
|
||
discard$data: ; CODE XREF: media$change+4p
|
||
; cpm_login+16p ...
|
||
mov cl, 1
|
||
|
||
bcb_rel_cl: ; CODE XREF: discard$databcb+6j
|
||
or bx, bx
|
||
jz no_bcb_chain
|
||
mov bx, [bx] ; BX -> first BCB
|
||
|
||
bcbrel_loop: ; CODE XREF: discard$data+1Aj
|
||
push cx
|
||
mov dx, offset bcb_drive
|
||
call compare ; Compare CL bytes at DX and BX
|
||
pop cx
|
||
jnz bcbrel_next
|
||
mov byte ptr [bx], 0FFh
|
||
|
||
bcbrel_next: ; CODE XREF: discard$data+10j
|
||
mov bx, 12[bx] ; Next BCB
|
||
or bx, bx
|
||
jnz bcbrel_loop
|
||
|
||
no_bcb_chain: ; CODE XREF: discard$data+4j
|
||
; proc$discard+2j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Free BCBs on bcb_drive used by current process
|
||
|
||
proc$discard: ; CODE XREF: DRV_FLUSH+6Fp
|
||
or bx, bx
|
||
jz no_bcb_chain
|
||
mov bx, [bx]
|
||
|
||
fpbcb_loop: ; CODE XREF: proc$discard+2Fj
|
||
mov al, [bx]
|
||
cmp al, bcb_drive
|
||
jnz fpbcb_next
|
||
mov ax, 14[bx] ; Owned by current process?
|
||
cmp ax, rlr
|
||
jnz fpbcb_next
|
||
mov word ptr 14[bx], 0
|
||
mov al, fs_function
|
||
cmp al, 1Ah ; Set DMA
|
||
jz fpbcb_freeit
|
||
cmp al, 15h ; F_WRITE
|
||
jnz fpbcb_next
|
||
|
||
fpbcb_freeit: ; CODE XREF: proc$discard+21j
|
||
mov byte ptr [bx], 0FFh
|
||
|
||
fpbcb_next: ; CODE XREF: proc$discard+Cj
|
||
; proc$discard+15j ...
|
||
mov bx, 12[bx]
|
||
or bx, bx
|
||
jnz fpbcb_loop
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
get$bcba: ; CODE XREF: deblock+90p
|
||
mov rootbcba, bx
|
||
mov di, bx
|
||
sub di, 0Ch
|
||
mov bx, [bx] ; BX->BCB. DI->prev BCB
|
||
cmp word ptr 12[bx], 0
|
||
jnz get$bcb05
|
||
jmp gcbca_end ; No BCB follows
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
get$bcb05: ; CODE XREF: get$bcba+Fj
|
||
xor ax, ax
|
||
mov emptybcba, ax
|
||
mov seqbcba, ax
|
||
mov my_bcbs, al ; BCBs owned by this process
|
||
|
||
get$bcb1: ; CODE XREF: get$bcba+CEj
|
||
cmp byte ptr [bx], 0FFh
|
||
jz got_free_bcb
|
||
mov ax, 14[bx]
|
||
or ax, ax
|
||
jnz has_owner
|
||
mov si, emptybcba
|
||
or si, si
|
||
jz got_free_bcb
|
||
mov si, 12[si]
|
||
cmp byte ptr [si], 0FFh
|
||
jz get$bcb14
|
||
|
||
got_free_bcb: ; CODE XREF: get$bcba+22j get$bcba+31j
|
||
mov emptybcba, di
|
||
mov byte ptr 5[bx], 0
|
||
jmps get$bcb14
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
has_owner: ; CODE XREF: get$bcba+29j
|
||
cmp ax, rlr
|
||
jnz get$bcb14
|
||
inc my_bcbs ; BCBs owned by this process
|
||
mov seqbcba, di
|
||
|
||
get$bcb14: ; CODE XREF: get$bcba+39j get$bcba+43j
|
||
; ...
|
||
mov curbcba, bx
|
||
push di
|
||
call set$arecord
|
||
call compare ; Compare CL bytes at DX and BX
|
||
pop di
|
||
mov bx, curbcba
|
||
jnz get$bcb17
|
||
mov al, 5[bx]
|
||
cmp al, 0FFh
|
||
jz get$bcb16
|
||
mov ah, phy$off
|
||
cmp al, ah
|
||
jz get$bcb16
|
||
inc al
|
||
cmp al, ah
|
||
jz get$bcb15
|
||
mov al, 0FFh
|
||
|
||
get$bcb15: ; CODE XREF: get$bcba+78j
|
||
mov 5[bx], al
|
||
|
||
get$bcb16: ; CODE XREF: get$bcba+6Aj get$bcba+72j
|
||
jmp get$bcb5
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
get$bcb17: ; CODE XREF: get$bcba+63j
|
||
mov ax, 14[bx]
|
||
cmp ax, rlr
|
||
jnz get$bcb19
|
||
mov al, bcb_drive
|
||
cmp al, [bx]
|
||
jnz get$bcb19
|
||
mov al, dpb_phm
|
||
or al, al
|
||
jz get$bcb19
|
||
cmp al, 5[bx]
|
||
jnz get$bcb19
|
||
mov byte ptr 5[bx], 0
|
||
cmp word ptr 12[bx], 0
|
||
jz get$bcb21
|
||
dec my_bcbs ; BCBs owned by this process
|
||
xor ax, ax
|
||
xchg ax, 12[bx]
|
||
mov 12[di], ax
|
||
xchg ax, bx
|
||
|
||
get$bcb18: ; CODE XREF: get$bcba+BCj
|
||
mov si, bx
|
||
mov bx, 12[si]
|
||
or bx, bx
|
||
jnz get$bcb18
|
||
mov 12[si], ax
|
||
jmps get$bcb20
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
get$bcb19: ; CODE XREF: get$bcba+89j get$bcba+90j
|
||
; ...
|
||
cmp word ptr 12[bx], 0
|
||
jz get$bcb21
|
||
mov di, bx
|
||
|
||
get$bcb20: ; CODE XREF: get$bcba+C1j
|
||
mov bx, 12[di]
|
||
jmp get$bcb1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
get$bcb21: ; CODE XREF: get$bcba+A6j get$bcba+C7j
|
||
mov si, emptybcba
|
||
or si, si
|
||
jz get$bcb22
|
||
mov di, si
|
||
|
||
get$bcb22: ; CODE XREF: get$bcba+D7j
|
||
mov si, rootbcba
|
||
mov al, my_bcbs ; BCBs owned by this process
|
||
cmp al, 2[si]
|
||
jb get$bcb23
|
||
mov di, seqbcba
|
||
|
||
get$bcb23: ; CODE XREF: get$bcba+E5j
|
||
mov bx, 12[di]
|
||
mov al, phy$off
|
||
mov 5[bx], al
|
||
|
||
get$bcb5: ; CODE XREF: get$bcba+7Fj
|
||
mov si, rootbcba
|
||
mov ax, [si]
|
||
cmp ax, bx
|
||
jz gcbca_end
|
||
xchg ax, 12[bx]
|
||
mov 12[di], ax
|
||
mov [si], bx
|
||
|
||
gcbca_end: ; CODE XREF: get$bcba+11j get$bcba+FCj
|
||
mov ax, rlr
|
||
mov 14[bx], ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Take the last LRU buffer, move to head of chain,
|
||
; allocate to drive bcb_drive block DX
|
||
|
||
lru_touch: ; CODE XREF: cpm_writerec+71p
|
||
mov bx, offset p_lru_first
|
||
|
||
lru_goto_end: ; CODE XREF: lru_touch+Aj
|
||
mov di, bx ; DI->previous entry
|
||
mov bx, [bx]
|
||
cmp word ptr [bx], 0
|
||
jnz lru_goto_end
|
||
;
|
||
; BX->last entry in LRU chain
|
||
; DI->the one pointing to it
|
||
;
|
||
mov al, bcb_drive
|
||
mov 4[bx], al
|
||
mov 2[bx], dx
|
||
xor ax, ax
|
||
mov 5[bx], al
|
||
mov [di], ax ; Detach from chain
|
||
mov ax, bx
|
||
xchg ax, p_lru_first ; Move to head of chain
|
||
mov [bx], ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Free all LRU buffers for drive bcb_drive
|
||
|
||
lru_free: ; CODE XREF: copy$alv+1Fp cpm_writerec+FFp
|
||
mov al, bcb_drive
|
||
mov bx, offset p_lru_first
|
||
|
||
lru_free_loop: ; CODE XREF: lru_free+14j
|
||
mov bx, [bx]
|
||
cmp 4[bx], al
|
||
jnz lru_free_next
|
||
mov byte ptr 4[bx], 0FFh
|
||
|
||
lru_free_next: ; CODE XREF: lru_free+Bj
|
||
cmp word ptr [bx], 0
|
||
jnz lru_free_loop
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Returns Carry set if buffer dirty?
|
||
|
||
lru_ckdirty: ; CODE XREF: deblock+11Ep deblock+133p
|
||
; ...
|
||
test F_isfatfs, 0FFh
|
||
jz cpm_lrufind
|
||
cmp fat_buf_dirty?, 0FFh
|
||
cmc
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_lrufind: ; CODE XREF: lru_ckdirty+5j
|
||
mov al, bcb_drive
|
||
mov bx, offset p_lru_first
|
||
mov dx, arecord1
|
||
|
||
lrufind_loop: ; CODE XREF: lru_ckdirty+3Dj
|
||
mov bx, [bx]
|
||
cmp 4[bx], al ; Drive match?
|
||
jnz lrufind_next
|
||
cmp 2[bx], dx ; Record match?
|
||
jnz lrufind_next
|
||
cmp cl, 5[bx]
|
||
jb lrufind_end
|
||
mov al, dpb_phm
|
||
mov ah, al
|
||
not ah
|
||
and cl, ah
|
||
inc al
|
||
add al, cl
|
||
mov 5[bx], al
|
||
|
||
lrufind_end: ; CODE XREF: lru_ckdirty+27j
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
lrufind_next: ; CODE XREF: lru_ckdirty+1Dj
|
||
; lru_ckdirty+22j
|
||
cmp word ptr [bx], 0
|
||
jnz lrufind_loop
|
||
stc
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Read/write a sector and/or update the current BCB with its address
|
||
; AL=0: Update BCB
|
||
; AL=1: Read and update
|
||
; AL=2: Write and update
|
||
|
||
deblock$io: ; CODE XREF: deblock+F6p deblock+125p
|
||
; ...
|
||
push ax
|
||
call seek
|
||
pop ax
|
||
dec al
|
||
js rwb_fn0
|
||
jnz rwb_fn1
|
||
mov cl, 1
|
||
jmp wrbuff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
rwb_fn1: ; CODE XREF: deblock$io+9j
|
||
call rdbuff
|
||
|
||
rwb_fn0: ; CODE XREF: deblock$io+7j
|
||
mov si, offset fs_track
|
||
mov di, curbcba
|
||
add di, 6
|
||
mov cx, 2
|
||
rep movsw
|
||
retn
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
ddta_1: ; CODE XREF: fat_rdwr_ckd+1Dj
|
||
mov ah, 1
|
||
test cl, cl
|
||
jnz ddta_2
|
||
inc ah
|
||
|
||
ddta_2: ; CODE XREF: bdos:2EF6j
|
||
mov fat_buf_dirty?, ch
|
||
jmp deblock$dta
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
go_rdbuff: ; CODE XREF: bdos:3D1Fj
|
||
mov ah, 1
|
||
call deblock$dta
|
||
jmp setfcb ; Place values back into current FCB
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
deblock: ; CODE XREF: bdos:3207p
|
||
mov word ptr fs_buffer, ds
|
||
mov bx, dph_dirbcb
|
||
cmp ah, 5
|
||
jnz deblock1a
|
||
mov bx, curbcba
|
||
jmps deblock1a
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
deblock$dta: ; CODE XREF: bdos:2EFEj bdos:2F03p
|
||
; ...
|
||
mov bx, dph_dtabcb
|
||
mov word ptr fs_buffer, 0
|
||
cmp ah, 4
|
||
jnz deblock1a
|
||
|
||
deblock$flush: ; CODE XREF: deblock+74j
|
||
mov bx, [bx]
|
||
mov fs_track, 0FFFFh
|
||
; Search for dirty BCB with lowest track number
|
||
|
||
deblock$flush1: ; CODE XREF: deblock+55j
|
||
mov al, bcb_drive ; Does current drive own BCB?
|
||
cmp al, [bx]
|
||
jnz deblock$flush2
|
||
test byte ptr 4[bx], 0FFh; Is buffer dirty?
|
||
jz deblock$flush2 ; No
|
||
mov ax, 14[bx] ; Owned by current process?
|
||
cmp ax, rlr
|
||
jnz deblock$flush2 ; No
|
||
mov ax, 6[bx] ; Is bcb(6) < track?
|
||
cmp ax, fs_track
|
||
jnb deblock$flush2
|
||
mov fs_track, ax
|
||
mov fs_sector, bx
|
||
|
||
deblock$flush2: ; CODE XREF: deblock+2Fj deblock+35j
|
||
; ...
|
||
mov bx, 12[bx]
|
||
or bx, bx ; Got to end yet?
|
||
jnz deblock$flush1
|
||
cmp fs_track, 0FFFFh
|
||
jnz deblock$flush3
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
deblock$flush3: ; CODE XREF: deblock+5Cj
|
||
mov bx, fs_sector
|
||
xor al, al
|
||
mov ah, 4
|
||
mov word ptr fs_buffer, 0
|
||
call deblock1a ; Flush BCB
|
||
mov bx, dph_dtabcb
|
||
jmps deblock$flush
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
deblock1a: ; CODE XREF: deblock+Bj deblock+11j
|
||
; ...
|
||
mov deblock_command, ah
|
||
lahf
|
||
mov cl, dpb_phm
|
||
mov al, byte ptr bcb_record
|
||
and al, cl
|
||
mov phy$off, al ; phy$off = low(arecord) & phymsk
|
||
not cl ; arecord &= ~phymsk
|
||
and byte ptr bcb_record, cl
|
||
sahf
|
||
jz deblock1b
|
||
call get$bcba
|
||
|
||
deblock1b: ; CODE XREF: deblock+8Ej
|
||
mov curbcba, bx
|
||
mov ax, 10[bx]
|
||
cmp word ptr fs_buffer, 0
|
||
jnz deblock1c
|
||
mov word ptr fs_buffer, ax
|
||
xor ax, ax
|
||
|
||
deblock1c: ; CODE XREF: deblock+9Fj
|
||
mov word ptr fs_buffer+2, ax
|
||
mov al, deblock_command
|
||
cmp al, 3
|
||
jnz deblock1d
|
||
xor ah, ah
|
||
xchg ah, dir_check_flag
|
||
test ah, 0F0h
|
||
jnz deblock25
|
||
|
||
deblock1d: ; CODE XREF: deblock+AEj
|
||
call set$arecord
|
||
cmp byte ptr [bx], 0FFh
|
||
jz deblock2
|
||
cmp al, 4
|
||
jnb deblock1e
|
||
call compare ; Compare CL bytes at DX and BX
|
||
jz deblock2b
|
||
|
||
deblock1e: ; CODE XREF: deblock+C5j
|
||
cmp al, 5
|
||
jz deblock15
|
||
test byte ptr 4[bx], 0FFh
|
||
jz deblock2
|
||
|
||
deblock15: ; CODE XREF: deblock+CEj
|
||
push word ptr bcb_drive
|
||
push bcb_record+1
|
||
mov ax, 2[bx]
|
||
mov bcb_record+1, ax
|
||
mov ax, [bx]
|
||
mov word ptr bcb_drive, ax
|
||
cmp curdsk, al
|
||
jz deblock15a
|
||
call disk$select1
|
||
|
||
deblock15a: ; CODE XREF: deblock+EDj
|
||
mov al, 1
|
||
jnz deblock15b
|
||
call deblock$io ; Read/write a sector and/or update the current BCB with its address
|
||
; AL=0: Update BCB
|
||
; AL=1: Read and update
|
||
; AL=2: Write and update
|
||
|
||
deblock15b: ; CODE XREF: deblock+F4j
|
||
call set$arecord
|
||
mov byte ptr 4[bx], 0
|
||
call move ; Copy CL bytes from DX to BX
|
||
pop bcb_record+1
|
||
pop word ptr bcb_drive
|
||
call curselect
|
||
|
||
deblock2: ; CODE XREF: deblock+C1j deblock+D4j
|
||
mov al, deblock_command
|
||
cmp al, 4
|
||
jb deblock2a
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
deblock2a: ; CODE XREF: deblock+113j
|
||
cmp al, 2
|
||
jnz deblock25
|
||
mov cl, blk$off
|
||
call lru_ckdirty ; Returns Carry set if buffer dirty?
|
||
jb deblock25
|
||
xor al, al ; Clean. Just update BCB trk/sec
|
||
call deblock$io ; Read/write a sector and/or update the current BCB with its address
|
||
; AL=0: Update BCB
|
||
; AL=1: Read and update
|
||
; AL=2: Write and update
|
||
jmps deblock4
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
deblock2b: ; CODE XREF: deblock+CAj
|
||
cmp al, 2
|
||
jnz deblock45
|
||
mov cl, blk$off
|
||
push bx
|
||
call lru_ckdirty ; Returns Carry set if buffer dirty?
|
||
pop bx
|
||
jmps deblock45
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
deblock25: ; CODE XREF: deblock+B9j deblock+118j
|
||
; ...
|
||
mov bx, curbcba
|
||
mov byte ptr [bx], 0FFh
|
||
mov al, 2
|
||
call deblock$io ; Read/write a sector and/or update the current BCB with its address
|
||
; AL=0: Update BCB
|
||
; AL=1: Read and update
|
||
; AL=2: Write and update
|
||
|
||
deblock4: ; CODE XREF: deblock+128j
|
||
call set$arecord
|
||
call move ; Copy CL bytes from DX to BX
|
||
mov byte ptr [di], 0
|
||
|
||
deblock45: ; CODE XREF: deblock+12Cj deblock+137j
|
||
xor al, al
|
||
mov ah, phy$off
|
||
shr ax, 1
|
||
mov si, word ptr fs_buffer+2
|
||
add si, ax
|
||
mov al, deblock_command
|
||
cmp al, 3
|
||
jnz deblock6
|
||
mov buffa, si
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
deblock6: ; CODE XREF: deblock+161j
|
||
mov cx, 40h
|
||
mov di, userdma
|
||
cmp al, 1
|
||
mov ax, userdmaseg
|
||
mov dx, word ptr fs_buffer
|
||
push ds
|
||
push es
|
||
jz deblock7
|
||
mov byte ptr 4[bx], 0FFh
|
||
xchg di, si
|
||
xchg ax, dx
|
||
|
||
deblock7: ; CODE XREF: deblock+17Aj
|
||
mov ds, dx
|
||
mov es, ax
|
||
rep movsw
|
||
pop es
|
||
pop ds
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
set$arecord: ; CODE XREF: get$bcba+58p deblock+BBp
|
||
; ...
|
||
mov bx, curbcba
|
||
mov dx, offset bcb_drive
|
||
mov cl, 4
|
||
|
||
read$dir_ret: ; CODE XREF: read$dir+8j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
read$dir: ; CODE XREF: read$subdir+28p
|
||
; cpm_login+48p ...
|
||
call r$dir
|
||
test relog, 0FFh ; Inlined r$dir1
|
||
jz read$dir_ret
|
||
call chk$exit$fxs
|
||
call tst$relog
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
rd$dir: ; CODE XREF: r$dir+2Ep
|
||
mov ax, dcnt
|
||
mov cl, 2
|
||
shr ax, cl
|
||
mov drec, ax
|
||
mov bcb_record, ax
|
||
mov bcb_record_h, 0
|
||
mov ah, 3
|
||
jmp wrdir0
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
read$subdir: ; CODE XREF: rd$parentdir+35p
|
||
; rd$parentdir+67j ...
|
||
mov bx, cur_drvdir
|
||
or bx, bx
|
||
jz read$subdir2
|
||
mov si, lsn$add
|
||
mov al, 2[si]
|
||
cmp al, 1[bx]
|
||
jz read$subdir1
|
||
mov 1[bx], al
|
||
mov word ptr 6[bx], 0
|
||
|
||
read$subdir1: ; CODE XREF: read$subdir+12j
|
||
test word ptr 6[bx], 0FFFFh
|
||
jz read$subdir2
|
||
call rd$subdir1
|
||
jmps read$subdir3
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
read$subdir2: ; CODE XREF: read$subdir+6j
|
||
; read$subdir+21j
|
||
call read$dir
|
||
|
||
read$subdir3: ; CODE XREF: read$subdir+26j
|
||
call end$of$dir
|
||
jnz read$subdir4
|
||
xor ax, ax
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
read$subdir4: ; CODE XREF: read$subdir+2Ej
|
||
call getdptra
|
||
mov ax, bx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
rd$subdir1: ; CODE XREF: read$subdir+23p
|
||
mov dx, dcnt
|
||
inc dx
|
||
mov dcnt, dx
|
||
mov ax, dname_cluster
|
||
or ax, ax
|
||
jnz rd$subdir2
|
||
mov ax, 20h
|
||
mul dx
|
||
div dpb_clustersize
|
||
mov dx, ax
|
||
mov ax, 6[bx]
|
||
jmps rd$subdir3
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
rd$subdir2: ; CODE XREF: rd$subdir1+Ej
|
||
and dx, names_per_block
|
||
or dx, dx
|
||
jnz rd$subdir4
|
||
mov dx, 1
|
||
|
||
rd$subdir3: ; CODE XREF: rd$subdir1+1Ej
|
||
; rd$subdir1+39j
|
||
or dx, dx
|
||
jz rd$subdir4
|
||
dec dx
|
||
push dx
|
||
call fat_set_eof ; If FAT entry AX is unused, set it to EOF
|
||
pop dx
|
||
cmp ax, dpb_clusters
|
||
jb rd$subdir3
|
||
jmp set$end$dir
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
rd$subdir4: ; CODE XREF: rd$subdir1+26j
|
||
; rd$subdir1+2Dj
|
||
mov dname_cluster, ax
|
||
mov dl, byte ptr dcnt
|
||
and dl, 3
|
||
mov cl, 5
|
||
shl dl, cl
|
||
mov dptr, dl
|
||
mov dh, dir_check_flag
|
||
or dh, dh
|
||
jnz rd$subdir5
|
||
or dl, dl
|
||
jnz rd$subdir6
|
||
|
||
rd$subdir5: ; CODE XREF: rd$subdir1+56j
|
||
push dx
|
||
mov bx, dcnt
|
||
and bx, names_per_block
|
||
mov cl, 5
|
||
shl bx, cl
|
||
call clus_to_sec
|
||
mov ah, 3
|
||
call wrdir0
|
||
pop dx
|
||
test dh, 0F0h
|
||
jz rd$subdir6
|
||
call rd$parentdir
|
||
|
||
rd$subdir6: ; CODE XREF: rd$subdir1+5Aj
|
||
; rd$subdir1+75j ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
rd$parentdir: ; CODE XREF: rd$subdir1+77p
|
||
mov dname_cluster, 0
|
||
mov bx, cur_drvdir
|
||
mov ax, 2[bx] ; Parent dir
|
||
cmp ax, 6[bx] ; This dir
|
||
jz rd$subdir6
|
||
push dcnt
|
||
push word ptr 6[bx] ; Cluster of this dir
|
||
push bx ; Structure
|
||
or ax, ax
|
||
jnz rd$parentdir1
|
||
mov cur_drvdir, 0
|
||
jmps rd$parentdir2
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
rd$parentdir1: ; CODE XREF: rd$parentdir+1Cj
|
||
mov 6[bx], ax ; CWD is now parent
|
||
|
||
rd$parentdir2: ; CODE XREF: rd$parentdir+24j
|
||
mov ax, 4[bx] ; Dir entry number in previous parent
|
||
dec ax
|
||
mov dcnt, ax
|
||
mov dir_check_flag, 0F0h
|
||
call read$subdir
|
||
pop si
|
||
mov cur_drvdir, si
|
||
pop ax
|
||
mov 6[si], ax ; Cluster of CWD
|
||
pop dcnt
|
||
dec dcnt
|
||
mov dname_cluster, 0
|
||
or bx, bx
|
||
jz rd$parentdir3
|
||
test byte ptr 11[bx], 10h
|
||
jz rd$parentdir3
|
||
cmp ax, 26[bx]
|
||
jz rd$parentdir4
|
||
|
||
rd$parentdir3: ; CODE XREF: rd$parentdir+51j
|
||
; rd$parentdir+57j
|
||
call media$change
|
||
call chk$exit$fxs
|
||
jmp tst$relog
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
rd$parentdir4: ; CODE XREF: rd$parentdir+5Cj
|
||
jmp read$subdir
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
seek$copy: ; CODE XREF: delete11+1Dp copy$dir0+9j
|
||
; ...
|
||
call check$write
|
||
mov ah, 5
|
||
call wrdir0
|
||
cmp F_isfatfs, 0
|
||
jz wr_root_dirent
|
||
mov bx, cur_drvdir ; No CWD?
|
||
or bx, bx
|
||
jz wr_root_dirent
|
||
cmp word ptr 6[bx], 0; Or CWD is root?
|
||
jz wr_root_dirent
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
wr_root_dirent: ; CODE XREF: seek$copy+Dj seek$copy+15j
|
||
; ...
|
||
mov cl, 0FDh
|
||
jmp checksum
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
wrdir0: ; CODE XREF: rd$dir+14j rd$subdir1+6Ep
|
||
; ...
|
||
call deblock
|
||
|
||
setdata: ; CODE XREF: bdos:2C5Ap bdos:3D22p
|
||
; ...
|
||
mov ax, userdmaseg
|
||
mov word ptr fs_buffer, ax
|
||
mov ax, userdma
|
||
mov word ptr fs_buffer+2, ax
|
||
retn
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
r$dir: ; CODE XREF: read$dirp check$media+19p
|
||
mov dx, dpb_drm
|
||
mov bx, dcnt
|
||
inc bx
|
||
mov dcnt, bx
|
||
sub dx, bx
|
||
jnb read$dir0
|
||
jmp set$end$dir
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
read$dir0: ; CODE XREF: r$dir+Fj
|
||
mov al, byte ptr dcnt
|
||
and al, 3 ; low(dcnt) and dskmsk
|
||
push cx
|
||
mov cl, 5
|
||
shl al, cl ; Multiply by FCB size
|
||
pop cx
|
||
mov dptr, al
|
||
test dir_check_flag, 0FFh
|
||
jnz read$dir2
|
||
or al, al ; Return if not a new record
|
||
jnz read_dir_ret
|
||
|
||
read$dir2: ; CODE XREF: r$dir+27j
|
||
push cx
|
||
call rd$dir
|
||
pop cx
|
||
test relog, 0FFh
|
||
jnz read_dir_ret
|
||
|
||
checksum: ; CODE XREF: seek$copy+20j
|
||
mov dx, drec
|
||
mov bx, dpb_cks
|
||
and bh, 7Fh ; Mask off fixed disk bit
|
||
sub dx, bx
|
||
jnb read_dir_ret ; Skip if > CSV size
|
||
push cx
|
||
call compute$cs ; Compute checksum for current directory buffer
|
||
mov bx, drec
|
||
add bx, dph_csv
|
||
pop cx
|
||
inc cl
|
||
jz initial$cs
|
||
inc cl
|
||
inc cl
|
||
jz update$cs
|
||
cmp al, [bx]
|
||
jz read_dir_ret
|
||
call nowrite ; Return true if drive is software R/O
|
||
jnz read_dir_ret
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
media$change: ; CODE XREF: rdbuff+31p rd$parentdir+5Ep
|
||
mov bx, dph_dtabcb
|
||
call discard$data ; Called with BX->BCB chain head. Release all BCBs for a drive
|
||
mov al, 0FFh
|
||
mov relog, al
|
||
mov hashl, al
|
||
mov bx, offset removable_drive
|
||
call set$cdisk
|
||
jmp reset37x
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
initial$cs: ; CODE XREF: r$dir+57j
|
||
cmp al, [bx]
|
||
mov [bx], al
|
||
jz read_dir_ret
|
||
mov bx, lsn$add
|
||
or byte ptr 2[bx], 1
|
||
|
||
read_dir_ret: ; CODE XREF: r$dir+2Bj r$dir+37j
|
||
; ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
update$cs: ; CODE XREF: r$dir+5Dj
|
||
mov [bx], al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
getallocbit: ; CODE XREF: set$alloc$bit+1p
|
||
; get$block+Dp ...
|
||
mov bx, cx
|
||
and cl, 7
|
||
inc cl
|
||
mov ch, cl
|
||
mov cl, 3
|
||
shr bx, cl
|
||
add bx, dph_alv
|
||
mov al, [bx]
|
||
mov cl, ch
|
||
rol al, cl
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
set$alloc$bit: ; CODE XREF: scandm$a+3Fp
|
||
push dx
|
||
call getallocbit
|
||
and al, 0FEh
|
||
pop dx
|
||
or al, dl
|
||
|
||
rotr: ; CODE XREF: get$block+2Cp
|
||
ror al, cl
|
||
mov [bx], al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Return ALV size in bytes
|
||
|
||
get$nalbs: ; CODE XREF: copy$alv+8p scandm$ab+6p
|
||
; ...
|
||
mov bx, dpb_dsm
|
||
mov cl, 3
|
||
shr bx, cl
|
||
inc bx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
copy$alv: ; CODE XREF: cpm_login+52j
|
||
; DRV_FLUSH+31p ...
|
||
cmp F_isfatfs, 0
|
||
jnz dont_copy_alv
|
||
pushf
|
||
call get$nalbs ; Return ALV size in bytes
|
||
mov si, dph_alv
|
||
mov di, si
|
||
add di, bx
|
||
mov cx, bx
|
||
push cs
|
||
call f_interrupt ; Z should still be set from above
|
||
jz do_copy_alv
|
||
xchg si, di
|
||
|
||
do_copy_alv: ; CODE XREF: copy$alv+19j
|
||
rep movsb
|
||
|
||
dont_copy_alv: ; CODE XREF: copy$alv+5j
|
||
call lru_free ; Free all LRU buffers for drive bcb_drive
|
||
|
||
scandm_ret: ; CODE XREF: scandm$a+10j
|
||
retn
|
||
|
||
|
||
;
|
||
; Set/Reset first ALV
|
||
;
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
scandm$a: ; CODE XREF: scandm$ab+1p scandm$ab+13p
|
||
; ...
|
||
call getdptra
|
||
add bx, 10h
|
||
push cx
|
||
mov cl, 11h
|
||
|
||
scandm0: ; CODE XREF: scandm$a+45j
|
||
pop dx
|
||
dec cl
|
||
jnz scandm0a
|
||
or dl, dl
|
||
jnz scandm_ret
|
||
mov bx, dph_alv
|
||
mov ax, dpb_al0_al1
|
||
or [bx], ax
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
scandm0a: ; CODE XREF: scandm$a+Cj
|
||
push dx
|
||
cmp single, 0 ; Nonzero if using 8-bit blocks
|
||
jz scandm1
|
||
push cx
|
||
push bx
|
||
mov cl, [bx]
|
||
mov ch, 0
|
||
jmps scandm2
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
scandm1: ; CODE XREF: scandm$a+22j
|
||
dec cl
|
||
push cx
|
||
mov cx, [bx]
|
||
inc bx
|
||
push bx
|
||
|
||
scandm2: ; CODE XREF: scandm$a+2Aj
|
||
or cx, cx
|
||
jz scandm3
|
||
mov bx, dpb_dsm
|
||
cmp bx, cx
|
||
jb scandm3
|
||
call set$alloc$bit
|
||
|
||
scandm3: ; CODE XREF: scandm$a+35j scandm$a+3Dj
|
||
pop bx
|
||
inc bx
|
||
pop cx
|
||
jmps scandm0
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
scandm$ab: ; CODE XREF: delete11+28p F_TRUNCATE+70p
|
||
; ...
|
||
push cx
|
||
call scandm$a
|
||
pop cx
|
||
|
||
scandm$b: ; CODE XREF: close$fcb+A0p
|
||
push cx
|
||
call get$nalbs ; Return ALV size in bytes
|
||
pop cx
|
||
mov ax, dph_alv
|
||
push ax
|
||
add ax, bx
|
||
mov dph_alv, ax
|
||
call scandm$a
|
||
pop dph_alv
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
cpm_login: ; CODE XREF: curselect+15p
|
||
cmp dpb_cks, 8000h
|
||
jnz cpm_loginfixed
|
||
mov bx, lsn$add
|
||
test byte ptr 2[bx], 0FFh
|
||
jnz initial2a
|
||
|
||
cpm_loginfixed: ; CODE XREF: cpm_login+6j
|
||
mov bx, dph_dtabcb
|
||
call discard$data ; Called with BX->BCB chain head. Release all BCBs for a drive
|
||
call discard$dir ; Release all directory BCBs for a drive
|
||
call get$nalbs ; Return ALV size in bytes
|
||
mov cx, bx
|
||
mov di, dph_alv
|
||
mov ax, dpb_al0_al1
|
||
stosw ; Reserve directory blocks
|
||
dec cx
|
||
dec cx
|
||
xor ax, ax
|
||
rep stosb ; Rest of ALV to zero
|
||
mov bx, lsn$add
|
||
mov [bx], al
|
||
mov 1[bx], al ; Home the disk
|
||
mov bcb_dirty, ax
|
||
mov bx, cdrmaxa
|
||
mov word ptr [bx], 4
|
||
call set$end$dir
|
||
|
||
initial2: ; CODE XREF: cpm_login+5Fj
|
||
; cpm_login+63j ...
|
||
mov cl, 0FFh
|
||
call read$dir
|
||
call end$of$dir
|
||
jnz initial2b
|
||
xor al, al
|
||
|
||
initial2a: ; CODE XREF: cpm_login+10j
|
||
jmp copy$alv
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
initial2b: ; CODE XREF: cpm_login+4Ej
|
||
call fix$hash
|
||
call getdptra
|
||
mov al, [bx]
|
||
cmp al, 21h ; Skip date/time records
|
||
jz initial2
|
||
cmp al, 0E5h ; Skip deleted files
|
||
jz initial2
|
||
cmp al, 20h ; Skip labels
|
||
jz drv$lbl
|
||
test al, 10h
|
||
jnz initial3
|
||
mov cl, 1 ; Scan for allocated blocks
|
||
call scandm$a
|
||
|
||
initial3: ; CODE XREF: cpm_login+6Bj
|
||
; cpm_login+80j
|
||
call setcdr
|
||
jmps initial2
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
drv$lbl: ; CODE XREF: cpm_login+67j
|
||
mov al, 12[bx]
|
||
mov bx, lsn$add
|
||
mov [bx], al
|
||
jmps initial3
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_login: ; CODE XREF: curselect+1Ap
|
||
cmp dpb_cks, 8000h
|
||
jnz fat_log_hd
|
||
mov bx, lsn$add
|
||
test byte ptr 2[bx], 0FFh
|
||
jnz fat_initial2a
|
||
|
||
fat_log_hd: ; CODE XREF: fat_login+6j
|
||
mov bx, dph_dtabcb
|
||
call discard$data ; Called with BX->BCB chain head. Release all BCBs for a drive
|
||
call discard$dir ; Release all directory BCBs for a drive
|
||
xor al, al
|
||
mov bx, lsn$add
|
||
mov [bx], al
|
||
mov 1[bx], al
|
||
mov bx, cdrmaxa
|
||
mov word ptr [bx], 4
|
||
call set$end$dir
|
||
|
||
fat_initial2: ; CODE XREF: fat_login+46j
|
||
; fat_login+4Aj ...
|
||
mov cl, 0FFh
|
||
call read$dir
|
||
call end$of$dir
|
||
jnz fat_initial3
|
||
xor al, al
|
||
|
||
fat_initial2a: ; CODE XREF: fat_login+10j
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_initial3: ; CODE XREF: fat_login+3Aj
|
||
call getdptra
|
||
mov al, [bx]
|
||
or al, al ; End of dir
|
||
jz fat_initial2
|
||
cmp al, 0E5h ; Deleted
|
||
jz fat_initial2
|
||
call setcdr
|
||
jmps fat_initial2
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
copy$dir$loc: ; CODE XREF: delete10+2j bdos:47FCj
|
||
; ...
|
||
mov al, dirloc
|
||
jmp sta$ret
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
chk$wild_cpm: ; CODE XREF: set$hash+2Dp cpm_delete+2Ap
|
||
; ...
|
||
xor dl, dl
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
check$wild0: ; CODE XREF: valid_dl_f_fcb+3p
|
||
; bdos:47B1p ...
|
||
mov cx, 0Bh
|
||
mov si, bx
|
||
inc si
|
||
|
||
chk_fcb_char: ; CODE XREF: check$wild0+19j
|
||
lodsb
|
||
and al, 7Fh
|
||
cmp al, '?'
|
||
jz set$hashret
|
||
or dl, dl
|
||
jz chk_fcb_dl0
|
||
cmp al, '['
|
||
jz set$hashret
|
||
cmp al, ']'
|
||
jz set$hashret
|
||
|
||
chk_fcb_dl0: ; CODE XREF: check$wild0+Fj
|
||
loop chk_fcb_char
|
||
or al, 1
|
||
|
||
set$hashret: ; CODE XREF: check$wild0+Bj
|
||
; check$wild0+13j ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
check$wild: ; CODE XREF: F_OPEN+29p bdos:4790p
|
||
; ...
|
||
xor dl, dl
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
valid_dl_f_fcb: ; CODE XREF: F_MAKE+10p
|
||
mov bx, offset user_fcb
|
||
call check$wild0
|
||
jnz set$hashret
|
||
mov ah, 9
|
||
jmp disk_error
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
set$hash: ; CODE XREF: searchi+10p
|
||
cmp dph_hash, 0
|
||
jz set$hashret
|
||
or cl, cl
|
||
jz set$hashret
|
||
cmp cl, 0Ch
|
||
jb set$hash2
|
||
mov al, 2
|
||
jz set$hash1
|
||
mov al, 3
|
||
|
||
set$hash1: ; CODE XREF: set$hash+12j
|
||
mov hashl, al
|
||
mov al, fs_function
|
||
cmp al, 3
|
||
jz get$hash
|
||
cmp al, 11h
|
||
jz set$hash15
|
||
cmp al, 7
|
||
jnb get$hash
|
||
|
||
set$hash15: ; CODE XREF: set$hash+22j
|
||
mov hashl, 2
|
||
call chk$wild_cpm
|
||
jnz get$hash
|
||
|
||
set$hash2: ; CODE XREF: set$hash+Ej
|
||
mov hashl, 0
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
get$hash: ; CODE XREF: set$hash+1Ej set$hash+26j
|
||
; ...
|
||
mov si, bx
|
||
lodsb
|
||
mov hash, al
|
||
xor bx, bx
|
||
and al, 20h
|
||
jz get$hash0
|
||
or hash, 10h
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
get$hash0: ; CODE XREF: get$hash+Aj
|
||
mov dl, al
|
||
mov cx, 0Bh
|
||
|
||
get$hash1: ; CODE XREF: get$hash+40j
|
||
cmp cl, 6
|
||
jz get$hash3
|
||
cmp cl, 4
|
||
jz get$hash3
|
||
shl bx, 1
|
||
rcl dl, 1
|
||
test cl, 1
|
||
jnz get$hash3
|
||
shl bx, 1
|
||
rcl dl, 1
|
||
|
||
get$hash3: ; CODE XREF: get$hash+1Aj get$hash+1Fj
|
||
; ...
|
||
lodsb
|
||
and al, 7Fh
|
||
sub al, 20h
|
||
ror al, 1
|
||
jnb get$hash4
|
||
rol al, 1
|
||
|
||
get$hash4: ; CODE XREF: get$hash+35j
|
||
xor ah, ah
|
||
add bx, ax
|
||
adc dl, 0
|
||
loop get$hash1
|
||
mov word ptr hash+1, bx
|
||
mov bx, offset hash
|
||
and dl, 3
|
||
ror dl, 1
|
||
ror dl, 1
|
||
or [bx], dl
|
||
lodsb
|
||
and al, 1Fh
|
||
inc si
|
||
mov ah, [si]
|
||
and ah, 3Fh
|
||
mov cl, 3
|
||
shl al, cl
|
||
shr ax, cl
|
||
mov dl, dpb_exm
|
||
shl ax, 1
|
||
|
||
get$hash5: ; CODE XREF: get$hash+6Bj
|
||
shr ax, 1
|
||
shr dl, 1
|
||
jb get$hash5
|
||
and ah, 1
|
||
ror ah, cl
|
||
or [bx], ah
|
||
mov 3[bx], al
|
||
|
||
get$hashret: ; CODE XREF: search$hash+5j
|
||
; search$hash+Cj ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
search$hash: ; CODE XREF: searchn+5p
|
||
cmp dph_hash, 0
|
||
jz get$hashret
|
||
mov al, searchl
|
||
or al, al
|
||
jz get$hashret
|
||
cmp hashl, 0FFh
|
||
jz get$hashret
|
||
mov bx, cdrmaxa
|
||
mov cx, [bx]
|
||
dec al
|
||
jnz search$h0
|
||
mov cx, dpb_drm
|
||
|
||
search$h0: ; CODE XREF: search$hash+1Dj
|
||
mov bx, dcnt
|
||
sub cx, bx
|
||
jz get$hashret
|
||
mov es, dph_hash
|
||
|
||
inc bx
|
||
mov di, bx
|
||
shl di, 1
|
||
shl di, 1
|
||
sub di, 4
|
||
call search$h_sub
|
||
mov ax, ds
|
||
mov es, ax
|
||
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
search$h_sub: ; CODE XREF: search$hash+39p
|
||
; search$h_sub+16j
|
||
add di, 4
|
||
mov si, offset hash
|
||
lodsb
|
||
xor al, es:[di]
|
||
mov dl, al
|
||
and al, 1Fh
|
||
jnz search$h2b
|
||
call search$h6
|
||
jz search$h2g
|
||
|
||
search$h2: ; CODE XREF: search$h_sub+39j
|
||
; search$h_sub+3Fj ...
|
||
inc bx
|
||
loop search$h_sub
|
||
cmp dcnt, 0FFFFh
|
||
jnz search$h2a
|
||
mov ax, ds
|
||
mov es, ax
|
||
call tst$log$fxs
|
||
jnz search$h2a
|
||
mov hashl, 0FFh
|
||
|
||
search$h2a: ; CODE XREF: search$h_sub+1Dj
|
||
; search$h_sub+26j
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
search$h2b: ; CODE XREF: search$h_sub+Ej
|
||
mov al, byte ptr xdcnt+1
|
||
inc al
|
||
jnz search$h2c
|
||
cmp es:byte ptr [di], 0F5h
|
||
jnz search$h2
|
||
jmps search$h2d
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
search$h2c: ; CODE XREF: search$h_sub+33j
|
||
inc al
|
||
jnz search$h2
|
||
call search$h6
|
||
jnz search$h2
|
||
mov al, find$xfcb
|
||
inc al
|
||
jnz search$h2e
|
||
test es:byte ptr [di], 10h
|
||
jz search$h2
|
||
test dl, 0Fh
|
||
jnz search$h2
|
||
|
||
search$h2d: ; CODE XREF: search$h_sub+3Bj
|
||
mov xdcnt, bx
|
||
jmps search$h2
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
search$h2e: ; CODE XREF: search$h_sub+4Bj
|
||
inc al
|
||
jnz search$h2f
|
||
test dl, 0Fh
|
||
jnz search$h2
|
||
jmps search$h2g
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
search$h2f: ; CODE XREF: search$h_sub+60j
|
||
test es:byte ptr [di], 1Fh
|
||
jnz search$h2
|
||
|
||
search$h2g: ; CODE XREF: search$h_sub+13j
|
||
; search$h_sub+67j
|
||
mov dx, dcnt
|
||
dec bx
|
||
mov dcnt, bx
|
||
mov al, bl
|
||
and al, 3
|
||
cmp al, 3
|
||
jz search$hret
|
||
and bl, 0FCh
|
||
and dl, 0FCh
|
||
cmp bx, dx
|
||
jz search$hret
|
||
or dir_check_flag, 0Fh
|
||
xor al, al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
search$h6: ; CODE XREF: search$h_sub+10p
|
||
; search$h_sub+41p
|
||
mov al, hashl
|
||
or al, al
|
||
jz search$hret
|
||
mov ah, 0E0h
|
||
cmp al, 3
|
||
jz search$h6a
|
||
mov ah, 0C0h
|
||
|
||
search$h6a: ; CODE XREF: search$h6+Bj
|
||
test dl, ah
|
||
jnz search$hret
|
||
xor ah, ah
|
||
xchg ax, cx
|
||
push di
|
||
inc di
|
||
rep cmpsb
|
||
xchg ax, cx
|
||
pop di
|
||
|
||
search$hret: ; CODE XREF: search$h_sub+7Ej
|
||
; search$h_sub+88j ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fix$hash: ; CODE XREF: cpm_login+55p
|
||
; delete11+2Bp ...
|
||
cmp dph_hash, 0
|
||
jz search$hret
|
||
push word ptr hash
|
||
push word ptr hash+2
|
||
call getdptra
|
||
call get$hash
|
||
mov ax, dcnt
|
||
shl ax, 1
|
||
shl ax, 1
|
||
mov di, ax
|
||
mov es, dph_hash
|
||
|
||
mov si, offset hash
|
||
mov cx, 2
|
||
rep movsw
|
||
mov ax, ds
|
||
mov es, ax
|
||
|
||
pop word ptr hash+2
|
||
pop word ptr hash
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
save$dcnt$pos1: ; CODE XREF: searchn+34p searchn+56p
|
||
cmp byte ptr xdcnt+1, 0FFh
|
||
jnz search$hret
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
save$dcnt$pos0: ; CODE XREF: bdos:3716p bdos:3737p
|
||
; ...
|
||
mov ax, dcnt
|
||
mov xdcnt, ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
searchi: ; CODE XREF: search$extnum+2p
|
||
; restore_dir_fcb+5p
|
||
; ...
|
||
mov bx, offset user_fcb
|
||
mov searcha, bx
|
||
|
||
searchi1: ; CODE XREF: does$xfcb$exist+18p
|
||
; bdos:47BAp
|
||
mov dirloc, 0FFh
|
||
mov searchl, cl
|
||
call set$hash
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Find the first extent of a file
|
||
|
||
find_extent_0: ; CODE XREF: update$stamp+16p
|
||
; F_TIMEDATE+10p ...
|
||
xor ax, ax
|
||
mov user_fcb+0Ch, al
|
||
mov user_fcb+0Eh, al
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Find a numbered extent
|
||
|
||
search$namlen: ; CODE XREF: openp close$fcb+Cp
|
||
; ...
|
||
mov cl, 0Fh
|
||
jmps search
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Find any extent of a file
|
||
|
||
search$extnum: ; CODE XREF: cpm_delete+8p
|
||
; cpm_delete+47p ...
|
||
mov cl, 0Ch
|
||
|
||
search: ; CODE XREF: search$namlen+2j
|
||
; F_SFIRST+4Ap ...
|
||
call searchi
|
||
|
||
search1: ; CODE XREF: bdos:47BDp
|
||
call set$end$dir ; Entry point used by rename
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
|
||
searchn: ; CODE XREF: searchn+4Fj bdos:3719j
|
||
; ...
|
||
mov user0$pass, 0 ; Don't try user 0 yet
|
||
call search$hash
|
||
jnz search$fin
|
||
mov cl, 0
|
||
call read$dir ; Read next dir element
|
||
call end$of$dir
|
||
jz search$fin
|
||
mov dx, searcha ; Not end of dir, scan for match
|
||
mov si, dx
|
||
lodsb
|
||
cmp al, 0E5h
|
||
jz searchnext ; Keep scanning if empty
|
||
push dx ; Not empty, may be end of logical directory
|
||
call compcdr ; Past logical end?
|
||
pop dx
|
||
jnb search$fin ; Artificial stop
|
||
|
||
searchnext: ; CODE XREF: searchn+1Dj
|
||
call getdptra ; BX = buffa + dptr
|
||
mov cl, searchl ; CL = length of search
|
||
xor ch, ch ; CH counts up, CL counts down
|
||
cmp byte ptr [bx], 0E5h
|
||
jnz srchnxt1
|
||
call save$dcnt$pos1
|
||
|
||
srchnxt1: ; CODE XREF: searchn+32j
|
||
mov save$xfcb, 0
|
||
mov al, [bx]
|
||
and al, 0EFh ; Is this an XFCB?
|
||
cmp al, [bx]
|
||
jz search$loop
|
||
mov si, dx
|
||
cmp al, [si]
|
||
jnz search$loop
|
||
mov al, find$xfcb
|
||
or al, al
|
||
jz searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
mov save$xfcb, al
|
||
jmps searchok
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
search$fin: ; CODE XREF: searchn+8j searchn+12j
|
||
; ...
|
||
call save$dcnt$pos1
|
||
call set$end$dir
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
lret$eq$ff: ; CODE XREF: chk$exit$fxs+17j
|
||
; rdbuff+56p ...
|
||
mov al, 0FFh
|
||
mov ch, al
|
||
inc ch
|
||
jmp sta$ret
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
search$loop: ; CODE XREF: searchn+42j searchn+48j
|
||
; ...
|
||
or cl, cl
|
||
jz endsearch
|
||
mov si, dx
|
||
lodsb
|
||
cmp ch, 0Eh
|
||
jnz not_modnum
|
||
and al, 3Fh ; Mask off high 2 bits
|
||
jmps was_modnum
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
not_modnum: ; CODE XREF: bdos:36E1j
|
||
and al, 7Fh
|
||
cmp al, '?' ; "?" in user FCB matches all
|
||
jz searchok
|
||
cmp ch, 0Dh ; If S1, continue
|
||
jz searchok
|
||
cmp ch, 0Ch ; Extent?
|
||
jz searchext
|
||
|
||
was_modnum: ; CODE XREF: bdos:36E5j
|
||
sub al, [bx]
|
||
and al, 7Fh ; Mask out flags/extent modulus
|
||
jnz searchnm ; Skip if not matched
|
||
jmps searchok
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
searchext: ; CODE XREF: bdos:36F5j
|
||
push cx
|
||
mov cl, [bx]
|
||
call compext ; Compare extent nos in AL and CL
|
||
; Return nonzero if they do not match
|
||
pop cx
|
||
jnz j_searchn ; No match
|
||
test user0$pass, 0FFh
|
||
jz disable_user0
|
||
;
|
||
; inlined save$dcnt$pos2
|
||
;
|
||
inc bx
|
||
inc bx
|
||
cmp byte ptr [bx], 0
|
||
jnz j_searchn
|
||
call save$dcnt$pos0
|
||
jmp searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
;
|
||
; Disable search of user 0 if any fcb is found under
|
||
; the current user number
|
||
;
|
||
|
||
disable_user0: ; CODE XREF: bdos:370Dj
|
||
mov search$user0, 0
|
||
|
||
searchok: ; CODE XREF: searchn+54j bdos:36EBj
|
||
; ...
|
||
inc dx
|
||
inc bx
|
||
inc ch
|
||
dec cl
|
||
jmps search$loop
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
;
|
||
; Entire name matches, return dir position
|
||
;
|
||
|
||
endsearch: ; CODE XREF: bdos:36D9j
|
||
cmp save$xfcb, 0FFh
|
||
jnz endsearch1
|
||
cmp byte ptr xdcnt+1, 0FEh
|
||
jnz j_searchn
|
||
call save$dcnt$pos0
|
||
|
||
j_searchn: ; CODE XREF: bdos:3706j bdos:3714j
|
||
; ...
|
||
jmp searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
endsearch1: ; CODE XREF: bdos:372Ej
|
||
xor al, al
|
||
mov dirloc, al
|
||
mov byte ptr aret, al
|
||
;
|
||
; Successful search - return with zero flag reset
|
||
;
|
||
mov ch, al
|
||
inc ch
|
||
|
||
endsearch_ret: ; CODE XREF: does$xfcb$exist+5j
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
; Search no match routine
|
||
|
||
searchnm: ; CODE XREF: bdos:36FBj
|
||
or ch, [bx]
|
||
jnz j_searchn ; fcb(0)?
|
||
test search$user0, 0FFh
|
||
jz j_searchn ; dir fcb(0)=0?
|
||
mov user0$pass, 0FFh
|
||
jmps searchok
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
init_xfcb_srch: ; CODE XREF: bdos:47A5p bdos:47DCp
|
||
mov al, 0FFh
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
init_xfcb_srch1: ; CODE XREF: does$xfcb$exist+Cp
|
||
; cpm_delete+5p
|
||
mov find$xfcb, al
|
||
mov al, 0FEh
|
||
mov byte ptr xdcnt+1, al
|
||
|
||
init_xfcbs_ret: ; CODE XREF: cpm_delete+Bj
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
does$xfcb$exist: ; CODE XREF: bdos:47D1p bdos:47F7p
|
||
cmp byte ptr xdcnt+1, 0FEh
|
||
jz endsearch_ret
|
||
call set_dcnt_dblk
|
||
xor al, al
|
||
call init_xfcb_srch1
|
||
mov bx, searcha
|
||
or byte ptr [bx], 10h
|
||
mov cl, 0Ch
|
||
call searchi1
|
||
jmp searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
xdcnt_eq_dcnt: ; CODE XREF: openx+42p openx+62p
|
||
; ...
|
||
mov ax, dcnt
|
||
mov xdcnt, ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
restore_dir_fcb: ; CODE XREF: openx+4Ap openx+87p
|
||
; ...
|
||
call set_dcnt_dblk
|
||
mov cl, 0Fh
|
||
call searchi
|
||
jmp searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
cpm_delete: ; CODE XREF: F_DELETE+1Bj
|
||
call get$atts
|
||
|
||
deletex: ; CODE XREF: cpm_delete+40j
|
||
mov al, 0FEh ; Make search return matching
|
||
; fcbs and xfcbs
|
||
call init_xfcb_srch1
|
||
call search$extnum ; Find any extent of a file
|
||
jz init_xfcbs_ret
|
||
|
||
delete00: ; CODE XREF: cpm_delete+45j
|
||
call getdptra
|
||
mov al, [bx]
|
||
and al, 10h ; Is it an xfcb?
|
||
jnz delete01 ; yes
|
||
test attributes, 80h ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
jnz delete00a
|
||
call check$rodir
|
||
|
||
delete00a: ; CODE XREF: cpm_delete+1Bj
|
||
call get$dir$mode
|
||
rol al, 1 ; Delete requires password?
|
||
jb delete02 ; No
|
||
mov bx, offset user_fcb
|
||
call chk$wild_cpm ; Is this a wildcard delete?
|
||
jz delete02
|
||
;
|
||
; Not wild and passwords inactive
|
||
; Skip to pass 2
|
||
;
|
||
jmps delete11
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
;
|
||
; Check XFCB password if passwords enabled
|
||
;
|
||
|
||
delete01: ; CODE XREF: cpm_delete+14j
|
||
call get$dir$mode
|
||
rol al, 1
|
||
jnb delete02
|
||
call chk_xfcb_passwd
|
||
jz delete02
|
||
call chk$pw$error
|
||
jmps deletex
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
delete02: ; CODE XREF: cpm_delete+25j
|
||
; cpm_delete+2Dj ...
|
||
call searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
jnz delete00
|
||
call search$extnum ; Find any extent of a file
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
delete10: ; CODE XREF: delete11+31j F_MAKE+ABp
|
||
jnz delete11
|
||
jmp copy$dir$loc
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
delete11: ; CODE XREF: cpm_delete+2Fj
|
||
; delete10j ...
|
||
call getdptra
|
||
mov al, [bx] ; Is addressed dir fcb an xfcb?
|
||
and al, 10h
|
||
jnz delete12
|
||
test attributes, 80h ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
jnz delete13
|
||
|
||
delete12: ; CODE XREF: delete11+7j
|
||
mov byte ptr [bx], 0E5h; Delete dir FCB or XFCB
|
||
|
||
delete13: ; CODE XREF: delete11+Ej
|
||
pushf
|
||
call get$dtba$8 ; Does SFCB exist?
|
||
or al, al
|
||
jnz delete13a
|
||
mov [bx], al ; If so, zero its mode byte
|
||
|
||
delete13a: ; CODE XREF: delete11+19j
|
||
call seek$copy
|
||
push cs
|
||
call f_interrupt
|
||
jnz delete13b
|
||
mov cl, 0
|
||
call scandm$ab
|
||
|
||
delete13b: ; CODE XREF: delete11+24j
|
||
call fix$hash
|
||
call searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
jmps delete10
|
||
|
||
|
||
;
|
||
; Given allocation vector position CX, find the closest zero bit
|
||
; by searching left and right. If found, set the bit to 1 and
|
||
; return the bit position in BX. If not found return BX=0
|
||
;
|
||
;
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
get$block: ; CODE XREF: cpm_writerec+5Fp
|
||
mov dx, cx
|
||
|
||
righttst: ; CODE XREF: get$block+18j
|
||
; get$block+26j
|
||
cmp dx, dpb_dsm
|
||
jnb retblock0
|
||
inc dx
|
||
push cx
|
||
push dx
|
||
mov cx, dx
|
||
call getallocbit
|
||
rcr al, 1
|
||
jnb retblock
|
||
pop dx
|
||
pop cx
|
||
|
||
lefttst: ; CODE XREF: get$block+44j
|
||
or cx, cx
|
||
jz righttst
|
||
dec cx
|
||
push dx
|
||
push cx
|
||
call getallocbit
|
||
rcr al, 1
|
||
jnb retblock
|
||
pop cx
|
||
pop dx
|
||
jmps righttst
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
retblock: ; CODE XREF: get$block+12j
|
||
; get$block+22j
|
||
rcl al, 1
|
||
inc al
|
||
call rotr
|
||
mov cl, curdsk
|
||
mov bx, offset proc_using_drvs
|
||
push ds
|
||
mov ds, rlr
|
||
call set$cdisk1
|
||
pop ds
|
||
pop bx
|
||
pop dx
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
retblock0: ; CODE XREF: get$block+6j
|
||
or cx, cx
|
||
jnz lefttst
|
||
mov bx, cx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
copy$dir2: ; CODE XREF: copy$dir0p F_ATTRIB+27p
|
||
push dx
|
||
mov ch, 0
|
||
mov dx, offset user_fcb
|
||
add dx, cx
|
||
call getdptra
|
||
pop cx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Copy FCB information starting at CL for DL bytes
|
||
; into the currently addressed directory entry
|
||
|
||
copy$dir: ; CODE XREF: bdos:47ECp
|
||
mov dh, 80h
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
copy$dir0: ; CODE XREF: make+59p
|
||
call copy$dir2
|
||
inc cl
|
||
|
||
copy$dir1: ; CODE XREF: copy$dir0+1Bj
|
||
dec cl
|
||
jnz copy$dir1a
|
||
jmp seek$copy
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
copy$dir1a: ; CODE XREF: copy$dir0+7j
|
||
mov ah, [bx]
|
||
and ah, ch
|
||
mov si, dx
|
||
lodsb
|
||
and al, 7Fh
|
||
or al, ah
|
||
mov [bx], al
|
||
inc bx
|
||
inc dx
|
||
jmps copy$dir1
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
copy$user$no: ; CODE XREF: bdos:47A8p bdos:47D9p
|
||
; ...
|
||
mov al, user_fcb
|
||
mov bx, offset user_fcb+10h
|
||
mov [bx], al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
open: ; CODE XREF: cpm_rwrand+89p
|
||
; F_OPEN+3Dp ...
|
||
call search$namlen ; Find a numbered extent
|
||
|
||
open1: ; CODE XREF: F_OPEN+6Ap
|
||
jz set$rcret
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
open$copy: ; CODE XREF: open$reel+52p
|
||
call setfwf
|
||
push bx ; BX->S2
|
||
dec bx
|
||
dec bx ; BX->EX
|
||
mov ah, [bx]
|
||
push ax ; AH=EX AL=S2
|
||
call getdptra
|
||
mov dx, bx
|
||
mov bx, offset user_fcb
|
||
mov cl, 20h
|
||
call move ; Copy CL bytes from DX to BX
|
||
call get$dir$ext ; Compute directory extent from FCB
|
||
mov cl, al
|
||
pop ax ; Restore original EX and S2
|
||
pop bx
|
||
mov [bx], al
|
||
dec bx
|
||
dec bx
|
||
mov [bx], ah
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
set$rc: ; CODE XREF: getfcb+12p close+27p
|
||
; ...
|
||
xor ch, ch
|
||
mov si, offset user_fcb+0Fh
|
||
mov al, [bx]
|
||
sub al, cl
|
||
jz set$rc2
|
||
mov al, ch
|
||
jnb set$rc1
|
||
mov al, 80h
|
||
or al, [si]
|
||
|
||
set$rc1: ; CODE XREF: set$rc+Dj
|
||
mov [si], al
|
||
|
||
set$rcret: ; CODE XREF: open+3j set$rc+18j
|
||
; ...
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
set$rc2: ; CODE XREF: set$rc+9j
|
||
cmp [si], al
|
||
jnz set$rcret
|
||
|
||
set$rc3: ; CODE XREF: close$fcb+86p
|
||
; F_TRUNCATE+CDp ...
|
||
xor al, al
|
||
mov [si], al
|
||
cmp dminx, al
|
||
jz set$rcret
|
||
mov byte ptr [si], 80h
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
restore$rc: ; CODE XREF: close+20p open$reel+9Cp
|
||
; ...
|
||
mov al, user_fcb+0Fh
|
||
cmp al, 81h
|
||
jb restore$rc1
|
||
and al, 7Fh
|
||
mov user_fcb+0Fh, al
|
||
|
||
restore$rc1: ; CODE XREF: restore$rc+5j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
mergezero: ; CODE XREF: close$fcb+40p
|
||
; close$fcb+45p
|
||
cmp word ptr [bx], 0
|
||
jnz mzero_ret
|
||
mov si, dx
|
||
lodsw
|
||
mov [bx], ax
|
||
|
||
mzero_ret: ; CODE XREF: mergezero+3j close$fcb+Fj
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
close$fcb: ; CODE XREF: close+2Ap
|
||
test byte ptr dpb_cks+1, 80h
|
||
jnz close$fcb0
|
||
mov dir_check_flag, 0F0h
|
||
|
||
close$fcb0: ; CODE XREF: close$fcb+5j
|
||
call search$namlen ; Find a numbered extent
|
||
jz mzero_ret
|
||
call getdptra
|
||
add bx, 10h
|
||
mov dx, bx
|
||
mov bx, offset user_fcb+10h
|
||
mov cl, 10h
|
||
|
||
merge0: ; CODE XREF: close$fcb+5Aj
|
||
cmp single, 0 ; Nonzero if using 8-bit blocks
|
||
jz merged
|
||
mov al, [bx]
|
||
or al, al
|
||
mov si, dx
|
||
lodsb
|
||
jnz fcbnzero
|
||
mov [bx], al
|
||
|
||
fcbnzero: ; CODE XREF: close$fcb+2Cj
|
||
or al, al
|
||
jnz buffnzero
|
||
mov al, [bx]
|
||
mov di, dx
|
||
cld
|
||
stosb
|
||
|
||
buffnzero: ; CODE XREF: close$fcb+32j
|
||
cmp al, [bx]
|
||
jz dmset
|
||
jmps mergerr
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
merged: ; CODE XREF: close$fcb+23j
|
||
call mergezero
|
||
xchg bx, dx
|
||
call mergezero
|
||
xchg bx, dx
|
||
mov si, dx
|
||
mov ax, [si]
|
||
cmp ax, [bx]
|
||
jnz mergerr
|
||
inc dx
|
||
inc bx
|
||
dec cl
|
||
|
||
dmset: ; CODE XREF: close$fcb+3Cj
|
||
inc dx
|
||
inc bx
|
||
dec cl
|
||
jnz merge0
|
||
mov bx, dx
|
||
sub bx, 14h
|
||
push bx
|
||
call get$dir$ext ; Compute directory extent from FCB
|
||
pop si
|
||
mov cl, [si]
|
||
mov ch, [bx]
|
||
mov [si], al
|
||
mov [bx], al
|
||
add si, 3
|
||
add bx, 3
|
||
cmp al, cl
|
||
jnz mrg$rc1
|
||
cmp al, ch
|
||
jnz mrg$rc2
|
||
mov al, [si]
|
||
cmp al, [bx]
|
||
jb mrg$rc1
|
||
or al, al
|
||
jnz mrg$rc2
|
||
call set$rc3
|
||
|
||
mrg$rc1: ; CODE XREF: close$fcb+76j
|
||
; close$fcb+80j
|
||
xchg bx, si
|
||
|
||
mrg$rc2: ; CODE XREF: close$fcb+7Aj
|
||
; close$fcb+84j
|
||
mov al, [si]
|
||
mov [bx], al
|
||
call getdptra
|
||
add bx, 0Bh
|
||
mov al, [bx]
|
||
and al, 7Fh
|
||
mov [bx], al
|
||
call setfwf
|
||
mov cl, 1
|
||
call scandm$b
|
||
jmp seek$copy
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
mergerr: ; CODE XREF: close$fcb+3Ej
|
||
; close$fcb+50j ...
|
||
call setfwf
|
||
mov word ptr 2[bx], 0FFFFh
|
||
jmp lret$eq$ff
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
close: ; CODE XREF: open$reel+19p
|
||
; cpm_rwrand+64p ...
|
||
xor ax, ax
|
||
mov byte ptr aret, al
|
||
call nowrite ; Return true if drive is software R/O
|
||
jnz makeret
|
||
mov al, user_fcb+0Eh
|
||
and al, 80h
|
||
jnz makeret
|
||
call cp_fcb10_ffff
|
||
jz mergerr
|
||
call get$dir$ext ; Compute directory extent from FCB
|
||
mov cl, al
|
||
mov ch, [bx]
|
||
push cx
|
||
mov [bx], al
|
||
call restore$rc
|
||
cmp cl, ch
|
||
jnb close1
|
||
call set$rc
|
||
|
||
close1: ; CODE XREF: close+25j
|
||
call close$fcb
|
||
mov bx, offset user_fcb+0Ch
|
||
pop cx
|
||
mov cl, [bx]
|
||
mov [bx], ch
|
||
jmp set$rc
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
make: ; CODE XREF: open$reel+4Bp
|
||
; cpm_rwrand+9Ep ...
|
||
cmp xdcnt, 0FFFFh
|
||
jz cpm_make0
|
||
call set_dcnt_dblk
|
||
|
||
cpm_make0: ; CODE XREF: make+5j
|
||
push word ptr user_fcb
|
||
mov user_fcb, 0E5h
|
||
mov cl, 1
|
||
call searchi
|
||
call searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
pop word ptr user_fcb
|
||
jnz make01
|
||
|
||
makeret: ; CODE XREF: close+8j close+Fj
|
||
; ...
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
make01: ; CODE XREF: make+1Fj
|
||
test make$xfcb, 0FFh
|
||
jnz makeret
|
||
mov bx, offset user_fcb+0Dh
|
||
mov byte ptr [bx], 0
|
||
inc bx
|
||
mov al, [bx]
|
||
push ax
|
||
push bx
|
||
and byte ptr [bx], 3Fh
|
||
inc bx
|
||
mov cx, 11h
|
||
mov al, 1
|
||
|
||
make0: ; CODE XREF: make+41j make+4Fj
|
||
mov byte ptr [bx], 0
|
||
inc bx
|
||
loop make0
|
||
dec al
|
||
jnz make1
|
||
call get$dtba
|
||
or al, al
|
||
mov cx, 0Ah
|
||
jz make0
|
||
|
||
make1: ; CODE XREF: make+45j
|
||
call setcdr
|
||
mov cl, 0
|
||
mov dx, 20h
|
||
call copy$dir0
|
||
pop bx
|
||
pop ax
|
||
mov [bx], al
|
||
mov result_F0F, 0
|
||
call fix$hash
|
||
jmp setfwf
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
open$reel: ; CODE XREF: bdos:3D06p cpm_writerec+37p
|
||
mov al, user_fcb+0Eh
|
||
mov openreel_S2, al
|
||
mov bx, offset user_fcb+0Ch
|
||
mov al, [bx]
|
||
mov cl, al
|
||
inc cl
|
||
call compext ; Compare extent nos in AL and CL
|
||
; Return nonzero if they do not match
|
||
jnz open$reel00
|
||
jmp open$reel3
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
open$reel00: ; CODE XREF: open$reel+12j
|
||
push bx
|
||
push cx
|
||
call close
|
||
pop cx
|
||
pop bx
|
||
cmp byte ptr aret, 0FFh
|
||
jnz open$reel01
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
open$reel01: ; CODE XREF: open$reel+23j
|
||
mov al, 1Fh
|
||
and al, cl ; Increment extent
|
||
mov [bx], al
|
||
jnz open$reel0
|
||
add bx, 2
|
||
inc byte ptr [bx]
|
||
mov al, [bx] ; Increment module
|
||
and al, 3Fh
|
||
jz open$r$error
|
||
|
||
open$reel0: ; CODE XREF: open$reel+2Cj
|
||
mov xdcnt, 0FFFFh
|
||
call search$namlen ; Find a numbered extent
|
||
jnz open$reel1
|
||
mov al, rmf ; Read mode flag
|
||
inc al
|
||
jz open$r$error
|
||
call make
|
||
jz open$r$error
|
||
jmps open$reel1a
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
open$reel1: ; CODE XREF: open$reel+42j
|
||
call open$copy
|
||
|
||
open$reel1a: ; CODE XREF: open$reel+50j
|
||
call set$lsn
|
||
|
||
open$reel2: ; CODE XREF: open$reel+A2j
|
||
call getfcb ; Set variables from currently addressed FCB
|
||
xor al, al
|
||
mov vrecord, al
|
||
jmp sta$ret
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
open$r$error: ; CODE XREF: open$reel+37j
|
||
; open$reel+49j ...
|
||
mov bx, offset user_fcb+0Ch
|
||
mov al, openreel_S2
|
||
mov 2[bx], al
|
||
mov al, [bx]
|
||
dec al
|
||
and al, 1Fh
|
||
mov [bx], al
|
||
mov open_unknown, 0FFh
|
||
jmp f_ret_1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
open$reel3: ; CODE XREF: open$reel+14j
|
||
mov [bx], cl
|
||
call get$dir$ext ; Compute directory extent from FCB
|
||
mov cl, al
|
||
test high$ext, 80h
|
||
jnz open$reel4
|
||
cmp al, [bx]
|
||
jnb open$reel4
|
||
dec byte ptr [bx]
|
||
cmp rmf, 0FFh ; Read mode flag
|
||
jnz open$reel3a
|
||
jmp f_ret_1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
open$reel3a: ; CODE XREF: open$reel+95j
|
||
inc byte ptr [bx]
|
||
|
||
open$reel4: ; CODE XREF: open$reel+88j
|
||
; open$reel+8Cj
|
||
call restore$rc
|
||
call set$rc
|
||
jmps open$reel2
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
calc_extent_no: ; CODE XREF: cpm_rwrand+1p
|
||
; fat_rdwr+41p
|
||
mov al, user_fcb+21h
|
||
mov dl, al
|
||
and dl, 7Fh
|
||
rcl al, 1
|
||
mov al, user_fcb+22h
|
||
mov ch, al
|
||
rcl ch, 1
|
||
and ch, 1Fh
|
||
and al, 0F0h
|
||
or al, user_fcb+23h
|
||
mov cl, 4
|
||
rol al, cl
|
||
mov cl, ch
|
||
mov ch, al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; CL=-1 read 0 write
|
||
|
||
cpm_rwrand: ; CODE XREF: F_READRAND+11p
|
||
; F_WRITERAND+11p ...
|
||
push cx
|
||
call calc_extent_no
|
||
cmp user_fcb+23h, 3
|
||
mov bl, 6
|
||
jbe crwr_1
|
||
jmp seekerr
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
crwr_1: ; CODE XREF: cpm_rwrand+Bj
|
||
mov user_fcb+20h, dl
|
||
cmp fs_function, 28 ; Write ZF?
|
||
jz diskwr11
|
||
call cp_fcb10_ffff
|
||
jz diskwr11
|
||
mov al, ch
|
||
sub al, user_fcb+0Eh
|
||
and al, 3Fh
|
||
jnz diskwr_err
|
||
mov al, user_fcb+0Ch
|
||
cmp al, cl
|
||
jnz fill0
|
||
jmp seekok2
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fill0: ; CODE XREF: cpm_rwrand+2Fj
|
||
call compext ; Compare extent nos in AL and CL
|
||
; Return nonzero if they do not match
|
||
jnz diskwr_err
|
||
push cx
|
||
call get$dir$ext ; Compute directory extent from FCB
|
||
pop cx
|
||
cmp al, cl
|
||
jnb fill2
|
||
test high$ext, 80h
|
||
jnz fill2
|
||
pop dx
|
||
push dx
|
||
inc dl
|
||
jnz fill2
|
||
inc dl
|
||
pop dx
|
||
jmp f_ret_1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fill2: ; CODE XREF: cpm_rwrand+40j
|
||
; cpm_rwrand+47j ...
|
||
mov user_fcb+0Ch, cl
|
||
mov cl, al
|
||
call restore$rc
|
||
call set$rc
|
||
jmps seekok2
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
diskwr_err: ; CODE XREF: cpm_rwrand+28j
|
||
; cpm_rwrand+37j
|
||
push cx
|
||
call close
|
||
pop cx
|
||
mov bl, 3
|
||
mov al, byte ptr aret
|
||
inc al
|
||
jz seekerr
|
||
|
||
diskwr11: ; CODE XREF: cpm_rwrand+19j
|
||
; cpm_rwrand+1Ej
|
||
mov xdcnt, 0FFFFh
|
||
xchg cl, user_fcb+0Ch; CL = EX
|
||
mov al, user_fcb+0Eh; AL = S2
|
||
xchg ch, al ; CH = S2, CL = EX
|
||
push cx
|
||
and ch, 40h
|
||
or al, ch
|
||
mov user_fcb+0Eh, al
|
||
call open
|
||
mov al, byte ptr aret
|
||
inc al
|
||
jnz seekok
|
||
mov bp, sp
|
||
mov cx, 2[bp]
|
||
mov bl, 4
|
||
inc cl
|
||
jz badseek
|
||
call make
|
||
mov bl, 5
|
||
mov al, byte ptr aret
|
||
inc al
|
||
jz badseek
|
||
|
||
seekok: ; CODE XREF: cpm_rwrand+91j
|
||
pop cx
|
||
call set$lsn
|
||
|
||
seekok2: ; CODE XREF: cpm_rwrand+31j
|
||
; cpm_rwrand+61j
|
||
pop cx
|
||
xor al, al
|
||
jmp sta$ret
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
badseek: ; CODE XREF: cpm_rwrand+9Cj
|
||
; cpm_rwrand+A8j
|
||
pop ax
|
||
mov user_fcb+0Ch, al
|
||
mov user_fcb+0Eh, ah
|
||
|
||
seekerr: ; CODE XREF: cpm_rwrand+Dj
|
||
; cpm_rwrand+6Fj
|
||
pop cx
|
||
mov byte ptr aret, bl
|
||
or bl, bl
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
check$nprs: ; CODE XREF: bdos:3D18p cpm_writerec+E4p
|
||
mov ch, blk$off ; Is direct transfer operation in
|
||
; progress?
|
||
mov al, dir$cnt
|
||
cmp al, 2
|
||
jb check$npr1 ; No.
|
||
dec al
|
||
mov dir$cnt, al
|
||
stc
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
check$npr1: ; CODE XREF: check$nprs+9j
|
||
mov al, dpb_phm
|
||
mov cl, al
|
||
and al, ch
|
||
jz check$npr11 ; Are we in mid-physical record?
|
||
|
||
check$npr1a: ; CODE XREF: check$nprs+2Ej
|
||
; check$nprs+35j ...
|
||
or cl, cl
|
||
jz check$npr1b
|
||
xor al, al ; No deblocking required
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
check$npr1b: ; CODE XREF: check$nprs+1Dj
|
||
or al, 1 ; Deblocking required
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
check$npr11: ; CODE XREF: check$nprs+19j
|
||
mov dh, cl
|
||
not dh
|
||
mov al, last_sec_count
|
||
cmp al, 2
|
||
jb check$npr1a
|
||
test high$ext, 80h
|
||
jnz check$npr1a
|
||
cmp fs_function, 16h
|
||
jz check$npr1a
|
||
mov bx, offset vrecord
|
||
mov ah, [bx]
|
||
add al, ah
|
||
cmp al, 80h
|
||
jb check$npr2
|
||
mov al, 80h
|
||
|
||
check$npr2: ; CODE XREF: check$nprs+47j
|
||
push cx
|
||
mov byte ptr [bx], 7Fh
|
||
push bx
|
||
push ax
|
||
mov bl, al
|
||
mov al, dpb_blm
|
||
mov dl, al
|
||
inc dl
|
||
not al
|
||
and ah, al
|
||
test rmf, 0FFh ; Read mode flag
|
||
jz check$npr21
|
||
mov al, rcount
|
||
and al, dh
|
||
cmp al, bl
|
||
jb check$npr23
|
||
|
||
check$npr21: ; CODE XREF: check$nprs+63j
|
||
mov al, bl
|
||
|
||
check$npr23: ; CODE XREF: check$nprs+6Cj
|
||
sub al, ah
|
||
cmp al, dl
|
||
jb check$npr9
|
||
push ax
|
||
call dm$position
|
||
mov ch, al
|
||
mov al, dminx
|
||
cmp al, ch
|
||
mov dl, al
|
||
jz check$npr5
|
||
mov cl, al
|
||
push cx
|
||
mov ch, 0
|
||
call get$dm ; Get block CX from FCB; returns in BX
|
||
|
||
check$npr4: ; CODE XREF: check$nprs+96j
|
||
; check$nprs+B4j
|
||
push bx
|
||
inc cx
|
||
call get$dm ; Get block CX from FCB; returns in BX
|
||
pop dx
|
||
inc dx
|
||
cmp bx, dx
|
||
jz check$npr4
|
||
test rmf, 0FFh ; Read mode flag
|
||
jnz check$nptr45
|
||
or bx, bx
|
||
jnz check$nptr45
|
||
cmp dx, dpb_dsm
|
||
jnb check$nptr45
|
||
push cx
|
||
push dx
|
||
mov cx, dx
|
||
call getallocbit
|
||
pop bx
|
||
pop cx
|
||
shr al, 1
|
||
jnb check$npr4
|
||
|
||
check$nptr45: ; CODE XREF: check$nprs+9Dj
|
||
; check$nprs+A1j ...
|
||
dec cl
|
||
pop dx
|
||
mov al, dh
|
||
cmp al, cl
|
||
jb check$npr5
|
||
mov al, cl
|
||
|
||
check$npr5: ; CODE XREF: check$nprs+83j
|
||
; check$nprs+BDj
|
||
sub al, dl
|
||
mov ch, al
|
||
inc ch
|
||
mov al, dpb_blm
|
||
inc al
|
||
mul ch
|
||
pop cx
|
||
xchg al, cl
|
||
test rmf, 0FFh ; Read mode flag
|
||
jz check$npr8
|
||
cmp al, cl
|
||
jb check$npr9
|
||
|
||
check$npr8: ; CODE XREF: check$nprs+D6j
|
||
mov al, cl
|
||
|
||
check$npr9: ; CODE XREF: check$nprs+74j
|
||
; check$nprs+DAj
|
||
pop cx
|
||
pop bx
|
||
mov [bx], ch
|
||
pop cx
|
||
mov dh, last_sec_count
|
||
sub al, ch
|
||
cmp al, dh
|
||
jb check$npr10
|
||
mov al, dh
|
||
|
||
check$npr10: ; CODE XREF: check$nprs+EBj
|
||
not cl
|
||
and al, cl
|
||
jz check$npr10b
|
||
mov dir$cnt, al
|
||
test rmf, 0FFh ; Read mode flag
|
||
jz check$npr10a
|
||
push ax
|
||
call flushx
|
||
pop ax
|
||
|
||
check$npr10a: ; CODE XREF: check$nprs+FDj
|
||
mov cl, dpb_psh
|
||
shr al, cl
|
||
mov fs_rdwrcount, al
|
||
or al, 1
|
||
|
||
check$npr10b: ; CODE XREF: check$nprs+F3j
|
||
retn
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_readrec: ; CODE XREF: F_READ+Fj F_READRAND+16j
|
||
call tst$inv$fcb
|
||
mov al, 0FFh
|
||
mov rmf, al ; Read mode flag
|
||
call getfcb ; Set variables from currently addressed FCB
|
||
mov al, vrecord
|
||
cmp al, rcount
|
||
jb recordok ; In the current extent
|
||
cmp al, 80h
|
||
jnz setlret1 ; Already off EOF
|
||
call open$reel ; Open the next extent
|
||
cmp byte ptr aret, 0
|
||
jnz setlret1
|
||
|
||
recordok: ; CODE XREF: bdos:3D00j
|
||
call index ; Compute disk block number from current FCB
|
||
jz setlret1
|
||
call atran
|
||
call check$nprs
|
||
jb j_setfcb
|
||
jnz read$deblock
|
||
jmp go_rdbuff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
read$deblock: ; CODE XREF: bdos:3D1Dj
|
||
call setdata
|
||
call seek
|
||
call rdbuff
|
||
|
||
j_setfcb: ; CODE XREF: bdos:3D1Bj
|
||
jmp setfcb ; Place values back into current FCB
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
setlret1: ; CODE XREF: bdos:3D04j bdos:3D0Ej
|
||
; ...
|
||
jmp f_ret_1
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
setdir1: ; CODE XREF: cpm_writerec+B0p
|
||
; fat_make+D9p ...
|
||
mov al, dpb_phm
|
||
xor ah, ah
|
||
inc ax
|
||
push ax
|
||
mov cl, 6
|
||
shl ax, cl
|
||
xchg ax, cx
|
||
mov di, dph_dirbcb
|
||
sub di, 0Ch
|
||
|
||
setdir1a: ; CODE XREF: setdir1+1Aj
|
||
mov di, 12[di]
|
||
cmp word ptr 12[di], 0
|
||
jnz setdir1a
|
||
mov byte ptr [di], 0FFh
|
||
mov di, 10[di]
|
||
mov word ptr fs_buffer+2, di
|
||
mov word ptr fs_buffer, ds
|
||
xor ax, ax
|
||
rep stosw
|
||
pop ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
cpm_writerec: ; CODE XREF: F_WRITE+Fj F_WRITERAND+16j
|
||
; ...
|
||
mov rmf, 0 ; Read mode flag
|
||
call check$write
|
||
mov al, user_fcb+0Eh
|
||
rcl al, 1
|
||
not al
|
||
test xfcb_rdonly, al
|
||
mov ah, 3 ; File R/O
|
||
jz writeseq_1
|
||
|
||
writeseq_err: ; CODE XREF: cpm_writerec+1Fj
|
||
jmp disk_error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
writeseq_1: ; CODE XREF: cpm_writerec+15j
|
||
test high$ext, 40h ; In R/O mode?
|
||
jnz writeseq_err
|
||
mov bx, offset user_fcb
|
||
call check$rofile
|
||
call tst$inv$fcb
|
||
call update$stamp
|
||
call getfcb ; Set variables from currently addressed FCB
|
||
mov al, vrecord
|
||
cmp al, 80h
|
||
jb dskwrite0
|
||
call open$reel
|
||
test byte ptr aret, 0FFh
|
||
jz dskwrite0
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
dskwrite0: ; CODE XREF: cpm_writerec+35j
|
||
; cpm_writerec+3Fj
|
||
call index ; Compute disk block number from current FCB
|
||
jz dskwrite2
|
||
mov cl, 0 ; Marked as normal write operation
|
||
; for wrbuff
|
||
jmps diskwr1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
dskwrite2: ; CODE XREF: cpm_writerec+45j
|
||
call dm$position
|
||
mov dminx, al
|
||
xor cx, cx ; May use block zero
|
||
or al, al
|
||
jz nopblock ; Skip if no prev block
|
||
mov cl, al
|
||
dec cx
|
||
call get$dm ; Get block CX from FCB; returns in BX
|
||
mov cx, bx
|
||
|
||
nopblock: ; CODE XREF: cpm_writerec+55j
|
||
call get$block
|
||
or bx, bx ; Can't find a block?
|
||
jnz blockok
|
||
mov al, 2 ; Disk full
|
||
jmp sta$ret
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
blockok: ; CODE XREF: cpm_writerec+64j
|
||
mov bcb_record, bx
|
||
mov dx, bx
|
||
call lru_touch ; Take the last LRU buffer, move to head of chain,
|
||
; allocate to drive bcb_drive block DX
|
||
mov bx, offset user_fcb+10h
|
||
cmp single, 0 ; Nonzero if using 8-bit blocks
|
||
mov al, dminx
|
||
mov ah, 0
|
||
jz allocwd
|
||
add bx, ax
|
||
mov [bx], dl
|
||
jmps diskwru
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
allocwd: ; CODE XREF: cpm_writerec+81j
|
||
add bx, ax
|
||
add bx, ax
|
||
mov [bx], dx
|
||
inc bx
|
||
|
||
diskwru: ; CODE XREF: cpm_writerec+87j
|
||
mov cl, 2 ; Write to previously unallocated block
|
||
|
||
diskwr1: ; CODE XREF: cpm_writerec+49j
|
||
mov deblock_flag, cl
|
||
call atran
|
||
cmp fs_function, 16h; Write random with ZF?
|
||
jnz dskwr11
|
||
cmp deblock_flag, 2
|
||
jnz dskwr11
|
||
mov deblock_flag, 0
|
||
push bcb_record
|
||
call setdir1
|
||
push ax
|
||
mov cl, dpb_blm
|
||
call lru_ckdirty ; Returns Carry set if buffer dirty?
|
||
mov ax, bcb_dirty
|
||
mov cl, 2
|
||
|
||
fill1: ; CODE XREF: cpm_writerec+DDj
|
||
mov bcb_record, ax
|
||
push cx
|
||
call discard$databcb ; Release the BCB for bcb_drive, record bcb_record
|
||
call seek
|
||
pop cx
|
||
call wrbuff
|
||
mov ax, bcb_record ; Restore record
|
||
pop bx
|
||
push bx
|
||
add ax, bx ; Continue until (blkmsk & arecord) = 0
|
||
mov bl, dpb_blm
|
||
and bl, al
|
||
mov cl, 0
|
||
jnz fill1
|
||
pop bx
|
||
pop bcb_record
|
||
|
||
dskwr11: ; CODE XREF: cpm_writerec+9Ej
|
||
; cpm_writerec+A5j
|
||
call check$nprs
|
||
jb dont$write
|
||
jnz _write
|
||
mov ah, 2
|
||
call deblock$dta
|
||
jmps dont$write1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
_write: ; CODE XREF: cpm_writerec+E9j
|
||
call setdata
|
||
call seek
|
||
call discard$databcb ; Release the BCB for bcb_drive, record bcb_record
|
||
mov cl, blk$off
|
||
if PCPM204E
|
||
call lru_free ; Free all LRU buffers for drive bcb_drive
|
||
else
|
||
call lru_ckdirty
|
||
endif
|
||
|
||
mov cl, deblock_flag
|
||
cmp blk$off, 0
|
||
jz write00
|
||
mov cl, 0
|
||
|
||
write00: ; CODE XREF: cpm_writerec+10Bj
|
||
call wrbuff
|
||
jmps dont$write1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
dont$write: ; CODE XREF: cpm_writerec+E7j
|
||
|
||
if DONTWRITE_PATCH
|
||
jmp patch_dontwrite
|
||
else
|
||
call discard$databcb
|
||
endif
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
dont$write1: ; CODE XREF: cpm_writerec+F0j
|
||
; cpm_writerec+112j ...
|
||
mov al, vrecord
|
||
mov bx, offset rcount
|
||
cmp al, [bx]
|
||
jb diskwr2
|
||
mov [bx], al
|
||
inc byte ptr [bx] ; rcount = vrecord + 1
|
||
mov deblock_flag, 2 ; Mark as record count incremented
|
||
|
||
diskwr2: ; CODE XREF: cpm_writerec+11Fj
|
||
cmp deblock_flag, 2
|
||
jnz noupdate
|
||
and user_fcb+0Eh, 7Fh; Reset FWF
|
||
|
||
noupdate: ; CODE XREF: cpm_writerec+12Fj
|
||
call getmodnum
|
||
and al, 40h
|
||
jnz diskwrite3
|
||
or byte ptr [bx], 40h; Set file write flag
|
||
and user_fcb+0Eh, 7Fh
|
||
|
||
diskwrite3: ; CODE XREF: cpm_writerec+13Bj
|
||
jmp setfcb ; Place values back into current FCB
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Convert a size (extent + record no)
|
||
; to a 3-byte record number.
|
||
|
||
extent_size: ; CODE XREF: F_SIZE+1Fp F_RANDREC+6p
|
||
; ...
|
||
xchg bx, dx
|
||
add bx, dx
|
||
mov cl, [bx]
|
||
xor ch, ch
|
||
mov bx, dx
|
||
mov ah, 12[bx]
|
||
shr ax, 1
|
||
and ax, 0F80h
|
||
add cx, ax
|
||
mov al, 14[bx]
|
||
and al, 3Fh
|
||
mov ah, 10h
|
||
mul ah
|
||
add ch, al
|
||
mov al, 0
|
||
adc al, ah
|
||
|
||
login_fail: ; CODE XREF: compare_recno+6j
|
||
; drive_login+Bj
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
compare_recno: ; CODE XREF: F_SIZE+22p F_TRUNCATE+34p
|
||
mov bx, offset user_fcb+21h
|
||
cmp al, 2[bx]
|
||
jnz login_fail
|
||
cmp cx, [bx]
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
drive_login: ; CODE XREF: disk$select1+Bp
|
||
push dx
|
||
mov cl, al
|
||
mov al, 9 ; SELDSK
|
||
call fs_call_xios
|
||
pop dx
|
||
or bx, bx
|
||
jz login_fail
|
||
inc bx
|
||
inc bx
|
||
mov cdrmaxa, bx
|
||
inc bx
|
||
inc bx
|
||
mov lsn$add, bx
|
||
add bx, 4
|
||
mov si, bx
|
||
mov di, offset dph_dpb
|
||
mov cx, 0Ch
|
||
rep movsb
|
||
mov si, dph_dpb
|
||
lodsw
|
||
cmp ax, 0FFFEh
|
||
jb fs_is_cpm
|
||
mov max_cluster, 0FFFFh
|
||
jz fs_is_fat16
|
||
mov max_cluster, 0FFFh
|
||
|
||
fs_is_fat16: ; CODE XREF: drive_login+36j
|
||
add dph_dpb, 0Ch
|
||
mov di, offset dpb_fatcount
|
||
mov cx, 1Bh
|
||
rep movsb
|
||
test dl, 1 ; Logged in before?
|
||
jnz fats_loaded
|
||
push ax
|
||
call load_fats
|
||
pop ax
|
||
or bx, bx
|
||
jz drv_login_ret
|
||
|
||
fats_loaded: ; CODE XREF: drive_login+4Ej
|
||
mov ax, dpb_clustersize
|
||
xor dx, dx
|
||
mov cx, 32
|
||
div cx
|
||
dec ax
|
||
mov names_per_block, ax
|
||
mov al, 1
|
||
jmps have_fstype
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fs_is_cpm: ; CODE XREF: drive_login+2Ej
|
||
mov di, offset dpb_spt
|
||
stosw
|
||
mov cx, 0Fh
|
||
rep movsb
|
||
xor al, al
|
||
|
||
have_fstype: ; CODE XREF: drive_login+69j
|
||
mov F_isfatfs, al
|
||
mov al, byte ptr dpb_dsm+1
|
||
or al, al
|
||
jz fewer256blocks
|
||
mov al, 1
|
||
|
||
fewer256blocks: ; CODE XREF: drive_login+7Ej
|
||
dec al
|
||
mov single, al ; Nonzero if using 8-bit blocks
|
||
stc
|
||
|
||
drv_login_ret: ; CODE XREF: drive_login+57j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
load_fats: ; CODE XREF: drive_login+51p
|
||
mov ax, dpb_firstfat
|
||
mov cx, dpb_fatcount
|
||
|
||
load_fat: ; CODE XREF: load_fats+3Bj
|
||
push ax
|
||
push cx
|
||
xor dx, dx
|
||
div dpb_spt
|
||
mov fs_track, ax
|
||
mov fs_sector, dx
|
||
mov al, byte ptr dpb_secperfat
|
||
mov fs_rdwrcount, al
|
||
mov ax, dph_hash
|
||
mov word ptr fs_buffer, ax
|
||
mov word ptr fs_buffer+2, 0
|
||
mov al, 0Ah ; READ
|
||
call xios_rdwr
|
||
mov bx, 1
|
||
pop cx
|
||
pop dx
|
||
or al, al
|
||
jz lfat_fail
|
||
mov ax, dpb_secperfat
|
||
add ax, dx
|
||
loop load_fat
|
||
xor bx, bx
|
||
|
||
lfat_fail: ; CODE XREF: load_fats+34j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
write_FAT: ; CODE XREF: fat_close+33p
|
||
; fat_make+52p ...
|
||
mov ax, dpb_firstfat
|
||
mov cx, dpb_fatcount
|
||
xor bx, bx
|
||
|
||
write_fat_loop: ; CODE XREF: write_FAT+39j
|
||
push ax
|
||
push bx
|
||
push cx
|
||
xor dx, dx
|
||
div dpb_spt
|
||
mov fs_track, ax
|
||
mov fs_sector, dx
|
||
mov al, byte ptr dpb_secperfat
|
||
mov fs_rdwrcount, al
|
||
mov ax, dph_hash
|
||
mov word ptr fs_buffer, ax
|
||
mov word ptr fs_buffer+2, 0
|
||
mov al, 0Bh
|
||
call xios_rdwr
|
||
pop cx
|
||
pop bx
|
||
or bx, ax
|
||
pop ax
|
||
add ax, dpb_secperfat
|
||
loop write_fat_loop
|
||
mov al, bl
|
||
mov ah, 0FFh
|
||
jmp diocomp1
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
disk$select: ; CODE XREF: curselect+9p reselect+6Cp
|
||
mov bcb_drive, al
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
disk$select1: ; CODE XREF: deblock+EFp
|
||
mov curdsk, al
|
||
mov dx, login_vector
|
||
call test$vector ; Return bit curdsk of vector DX
|
||
push dx
|
||
call drive_login
|
||
pop bx
|
||
jnb disk$select1a
|
||
dec bl
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
disk$select1a: ; CODE XREF: disk$select1+Fj
|
||
jmp j_fs_abort4
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
tmpselect_dir: ; CODE XREF: DRV_SETp DRV_RESET+18p
|
||
; ...
|
||
mov fs_fcbdrive, dl
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
curselect_dir: ; CODE XREF: reselect+3Dp F_SFIRST+16p
|
||
; ...
|
||
mov al, fs_fcbdrive
|
||
cmp al, 0FFh
|
||
jnz curselect_dir1
|
||
inc al
|
||
jz j_fs_abort4
|
||
|
||
noselect: ; CODE XREF: curselect+7j curselect+Cj
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
curselect_dir1: ; CODE XREF: curselect_dir+5j
|
||
mov chdir_drive, al
|
||
mov cur_drvdir, 0
|
||
cmp al, 10h
|
||
jnb j_fs_abort4
|
||
mov cl, 0
|
||
call cwd_for_drive
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
curselect: ; CODE XREF: tst$relog+Ap drv$relogp
|
||
; ...
|
||
mov al, fs_fcbdrive
|
||
|
||
curselect0: ; CODE XREF: cwd_for_drive+1Cj
|
||
cmp al, curdsk
|
||
jz noselect
|
||
call disk$select
|
||
jz noselect
|
||
cmp F_isfatfs, 0
|
||
jnz curselect01
|
||
call cpm_login
|
||
jmps curselect02
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
curselect01: ; CODE XREF: curselect+13j
|
||
call fat_login
|
||
|
||
curselect02: ; CODE XREF: curselect+18j
|
||
mov bx, lsn$add
|
||
mov al, 2[bx]
|
||
and al, 1
|
||
add 2[bx], al
|
||
mov bx, offset login_vector
|
||
call set$cdisk
|
||
cmp dpb_cks, 8000h
|
||
jz curselect03
|
||
mov bx, offset removable_drive
|
||
call set$cdisk
|
||
|
||
curselect03: ; CODE XREF: curselect+35j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
cwd_for_drive: ; CODE XREF: ret_drv_vector+11p
|
||
; curselect_dir+1Bp ...
|
||
push ds
|
||
mov ds, rlr
|
||
|
||
mov bx, proc_dirname
|
||
pop ds
|
||
|
||
or bx, bx
|
||
jz no_cwd_found
|
||
xor ah, ah
|
||
mov si, ax
|
||
add si, si ; +2*drive
|
||
mov bx, [bx+si] ; Have CWD on this drive?
|
||
or bx, bx
|
||
jnz cwd_found
|
||
|
||
no_cwd_found: ; CODE XREF: cwd_for_drive+Cj
|
||
cmp al, 0Dh ; Floating drive?
|
||
jb curselect0
|
||
mov al, sysvar_144
|
||
cmp cl, 0FFh
|
||
jz cwdfd_ret
|
||
mov fs_fcbdrive, al
|
||
jmps cwdfd_ret
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
j_fs_abort4: ; CODE XREF: disk$select1+14j
|
||
; curselect_dir+9j ...
|
||
jmp sel$error ; Report select error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cwd_found: ; CODE XREF: cwd_for_drive+18j
|
||
mov al, [bx] ; Drive this CWD structure applies to
|
||
cmp cl, 0FFh
|
||
jz cwdfd_ret
|
||
mov cur_drvdir, bx
|
||
mov fs_fcbdrive, al
|
||
mov dname_cluster, 0
|
||
|
||
cwdfd_ret: ; CODE XREF: cwd_for_drive+24j
|
||
; cwd_for_drive+29j ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
sel1_fcb_drive: ; CODE XREF: F_SFIRST+20p F_MAKE+Bp
|
||
; ...
|
||
xor al, al
|
||
mov high$ext, al
|
||
mov xfcb_rdonly, al
|
||
jmps sel_fcb_drive
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
reselect: ; CODE XREF: F_do_call+24p
|
||
mov cx, 807Fh
|
||
mov bx, offset user_fcb+7
|
||
mov al, [bx]
|
||
and al, ch
|
||
mov xfcb_rdonly, al
|
||
and [bx], cl
|
||
inc bx
|
||
mov al, [bx]
|
||
and al, cl
|
||
cmp al, [bx]
|
||
mov [bx], al
|
||
mov al, 60h ; If F8' was set, assume top 3 bits
|
||
; of EX are 011
|
||
jnz got_exflags
|
||
mov al, 4[bx]
|
||
and al, 0E0h ; Top 3 bits of EX
|
||
|
||
got_exflags: ; CODE XREF: reselect+1Aj
|
||
mov high$ext, al
|
||
call clr$ext
|
||
|
||
sel_fcb_drive: ; CODE XREF: sel1_fcb_drive+8j
|
||
mov set_if_attrs, 0FFh
|
||
mov al, user_fcb
|
||
mov fcbdsk, al
|
||
and al, 1Fh
|
||
dec al
|
||
cmp al, 0FFh
|
||
jz _noselect
|
||
mov fs_fcbdrive, al
|
||
|
||
_noselect: ; CODE XREF: reselect+38j
|
||
call curselect_dir
|
||
mov al, usrcode
|
||
mov user_fcb, al
|
||
|
||
noselect0: ; CODE XREF: F_SFIRST+19p
|
||
call tst$log$fxs
|
||
jnz dont_discard
|
||
mov dir_check_flag, 0F0h
|
||
|
||
dont_discard: ; CODE XREF: reselect+49j
|
||
call check$media
|
||
xor al, al
|
||
xchg al, xios_bh_gdopen
|
||
test al, al
|
||
jnz check_all_media
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
check_all_media: ; CODE XREF: reselect+5Bj
|
||
mov bx, login_vector
|
||
mov al, 10h
|
||
|
||
chk$am1: ; CODE XREF: reselect+92j
|
||
dec al
|
||
shl bx, 1
|
||
jnb chk$am2
|
||
push ax
|
||
push bx
|
||
call disk$select
|
||
mov bx, dph_dtabcb
|
||
mov bx, [bx]
|
||
|
||
reselect2: ; CODE XREF: reselect+89j
|
||
or bx, bx
|
||
jz reselect5
|
||
mov al, bcb_drive
|
||
cmp al, [bx]
|
||
jnz reselect3
|
||
test byte ptr 4[bx], 0FFh
|
||
jnz reselect4
|
||
|
||
reselect3: ; CODE XREF: reselect+7Ej
|
||
mov bx, 12[bx]
|
||
jmps reselect2
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
reselect4: ; CODE XREF: reselect+84j
|
||
call check$media
|
||
|
||
reselect5: ; CODE XREF: reselect+77j
|
||
pop bx
|
||
pop ax
|
||
|
||
chk$am2: ; CODE XREF: reselect+68j
|
||
or al, al
|
||
jnz chk$am1
|
||
jmp curselect
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
check$media: ; CODE XREF: reselect+50p reselect+8Bp
|
||
; ...
|
||
mov bx, lsn$add
|
||
xor al, al
|
||
xchg al, 1[bx]
|
||
or al, al
|
||
jz no_media_flag
|
||
call discard$dir ; Release all directory BCBs for a drive
|
||
push dcnt
|
||
call set$end$dir
|
||
|
||
check$media1: ; CODE XREF: check$media+43j
|
||
mov cl, 0
|
||
call r$dir
|
||
xor al, al
|
||
xchg al, relog
|
||
test al, al
|
||
jz check$media2
|
||
cmp fs_function, 1Ah
|
||
jz check$media$end
|
||
mov al, bcb_drive
|
||
cmp al, fs_fcbdrive
|
||
jnz check$media$end
|
||
pop dcnt
|
||
call drv$relog
|
||
jmp chk$exit$fxs
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
check$media2: ; CODE XREF: check$media+24j
|
||
call compcdr
|
||
jb check$media1
|
||
|
||
check$media$end: ; CODE XREF: check$media+2Bj
|
||
; check$media+34j
|
||
pop dcnt
|
||
|
||
no_media_flag: ; CODE XREF: check$media+Bj
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
copy8fromdma: ; CODE XREF: F_OPENp F_DELETEp
|
||
; ...
|
||
mov cl, 8
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
copyfromdma: ; CODE XREF: F_MAKE+2p DRV_SETLABEL+2p
|
||
; ...
|
||
mov si, userdma
|
||
mov di, offset passwd_buf
|
||
push ds
|
||
mov ds, userdmaseg
|
||
xor ch, ch
|
||
rep movsb
|
||
pop ds
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
get$dir$mode: ; CODE XREF: cpm_delete+20p
|
||
; cpm_delete+31p ...
|
||
mov bx, lsn$add
|
||
mov al, [bx]
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
get$xfcb: ; CODE XREF: chk$pw$error+46p
|
||
; chk$pw$error+75p ...
|
||
mov bx, offset user_fcb
|
||
mov al, [bx]
|
||
push ax
|
||
or byte ptr [bx], 10h
|
||
call search$extnum ; Find any extent of a file
|
||
pop ax
|
||
mov user_fcb, al
|
||
mov byte ptr aret, 0
|
||
jnz get$xfcb1
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
get$xfcb1: ; CODE XREF: get$xfcb+15j chk_xfcb_passwdp
|
||
; ...
|
||
call getdptra
|
||
mov dx, bx
|
||
add bx, 0Ch
|
||
mov al, [bx]
|
||
and al, 0E0h
|
||
or al, 1
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
init$xfcb: ; CODE XREF: F_MAKE+B1p DRV_SETLABEL+46p
|
||
; ...
|
||
call setcdr
|
||
mov cx, 1014h
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
init$xfcb0: ; CODE XREF: DRV_SETLABEL+65p
|
||
push cx
|
||
call getdptra
|
||
mov si, offset user_fcb
|
||
lodsb
|
||
or al, ch
|
||
mov [bx], al
|
||
inc bx
|
||
mov cl, 0Bh
|
||
mov dx, si
|
||
call move ; Copy CL bytes from DX to BX
|
||
mov dx, si
|
||
mov bx, di
|
||
pop cx
|
||
sub ch, ch
|
||
xor al, al
|
||
rep stosb
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
chk$pw$error: ; CODE XREF: cpm_delete+3Dp
|
||
; openx+71p ...
|
||
mov byte ptr xdcnt+1, 0; Disable special searches
|
||
mov si, offset user_fcb
|
||
mov di, offset passwd_fcb
|
||
mov cx, 10h
|
||
rep movsb
|
||
call getdptra ; Find XFCB with ext=0 S2=0
|
||
mov si, bx
|
||
inc si
|
||
mov di, offset user_fcb+1
|
||
mov cx, 0Bh ; Copy name.type
|
||
rep movsb
|
||
xor al, al
|
||
stosb ; Blank EX
|
||
inc di
|
||
stosb ; Blank S2
|
||
lodsb ; Password mode
|
||
mov pw$mode, al ; Password mode
|
||
call search$namlen ; Find a numbered extent
|
||
jz chk$pwe2
|
||
call get$dtba$8 ; Does SFCB exist for FCB?
|
||
or al, al
|
||
jnz chk$pwe1
|
||
mov si, offset pw$mode; Password mode
|
||
mov ch, [si]
|
||
mov al, [bx]
|
||
mov [si], al
|
||
or al, al ; Is SFCB password mode nonzero?
|
||
jz chk$pwe2 ; No
|
||
xor al, ch ; Does XFCB mode match SFCB?
|
||
and al, 0E0h
|
||
jz chk$pwe1
|
||
call get$xfcb ; Update XFCB to match SFCB
|
||
jz chk$pwe1
|
||
mov al, pw$mode ; Password mode
|
||
mov [bx], al
|
||
call nowrite ; Return true if drive is software R/O
|
||
jnz chk$pwe1
|
||
call seek$copy
|
||
|
||
chk$pwe1: ; CODE XREF: chk$pw$error+31j
|
||
; chk$pw$error+44j ...
|
||
call restore$pw$fcb
|
||
mov al, fs_function
|
||
cmp al, 2 ; F_OPEN
|
||
jz chk_pwe_ret
|
||
cmp al, 9 ; F_MAKE
|
||
jz chk_pwe_ret
|
||
|
||
pw$error: ; CODE XREF: openx+7Fj F_MAKE+6Ej
|
||
; ...
|
||
mov ah, 7
|
||
jmp disk_error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
chk$pwe2: ; CODE XREF: chk$pw$error+2Aj
|
||
; chk$pw$error+3Ej
|
||
mov pw$mode, 0 ; Password mode
|
||
call nowrite ; Return true if drive is software R/O
|
||
jnz restore$pw$fcb
|
||
call get$xfcb ; Delete XFCB
|
||
jz restore$pw$fcb
|
||
or user_fcb, 10h
|
||
call delete11
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
restore$pw$fcb: ; CODE XREF: chk$pw$error+58p
|
||
; chk$pw$error+73j ...
|
||
mov si, offset passwd_fcb
|
||
mov di, offset user_fcb
|
||
mov cx, 10h
|
||
rep movsb
|
||
|
||
chk_pwe_ret: ; CODE XREF: chk$pw$error+60j
|
||
; chk$pw$error+64j ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
chk$password: ; CODE XREF: bdos:479Dp F_ATTRIB+13p
|
||
; ...
|
||
call get$dir$mode
|
||
and al, 80h
|
||
jz chk_pwe_ret
|
||
call get$xfcb
|
||
jz chk_pwe_ret
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Compare password
|
||
|
||
cmp$pw: ; CODE XREF: chk_xfcb_passwd+4p
|
||
; openx+6Cp
|
||
inc bx
|
||
mov ch, [bx]
|
||
or ch, ch
|
||
jnz cmp$pw2
|
||
mov si, bx
|
||
add si, 3
|
||
mov cl, 9
|
||
|
||
cmp$pw1: ; CODE XREF: cmp$pw+15j cmp$pw+19j
|
||
lodsb
|
||
dec cl
|
||
jz chk_pwe_ret
|
||
or al, al
|
||
jz cmp$pw1
|
||
cmp al, 20h
|
||
jz cmp$pw1
|
||
|
||
cmp$pw2: ; CODE XREF: cmp$pw+5j
|
||
lea si, 10[bx]
|
||
lea dx, 3[bx]
|
||
mov bx, offset passwd_buf
|
||
mov cl, 8
|
||
std
|
||
|
||
cmp$pw3: ; CODE XREF: cmp$pw+31j
|
||
lodsb
|
||
xor al, ch
|
||
cmp al, [bx]
|
||
jnz cmp$pw5
|
||
inc bx
|
||
dec cl
|
||
jnz cmp$pw3
|
||
cld
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cmp$pw5: ; CODE XREF: cmp$pw+2Cj
|
||
cld
|
||
mov bx, offset df$password; Default password
|
||
mov cl, 8
|
||
jmp compare ; Compare CL bytes at DX and BX
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
chk_xfcb_passwd: ; CODE XREF: cpm_delete+38p
|
||
; DRV_SETLABEL+5Bp ...
|
||
call get$xfcb1
|
||
|
||
chk_xfcb_passw1: ; CODE XREF: F_MAKE+5Fp
|
||
push bx
|
||
call cmp$pw ; Compare password
|
||
pop bx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
set$pw: ; CODE XREF: F_MAKE+CEp sdl2+9p
|
||
mov cx, 8
|
||
lea di, 11[bx]
|
||
|
||
set$pw0: ; CODE XREF: F_PASSWD+15j
|
||
sub ah, ah
|
||
|
||
set$pw1: ; CODE XREF: set$pw+1Aj
|
||
lodsb
|
||
mov [di], al
|
||
or al, al
|
||
jz set$pw2
|
||
cmp al, 20h
|
||
jz set$pw2
|
||
inc ah
|
||
|
||
set$pw2: ; CODE XREF: set$pw+Dj set$pw+11j
|
||
add ch, al
|
||
dec di
|
||
dec cl
|
||
jnz set$pw1
|
||
or ah, ch
|
||
jnz set$pw3
|
||
mov [bx], ah
|
||
|
||
set$pw3: ; CODE XREF: set$pw+1Ej
|
||
inc di
|
||
mov cl, 8
|
||
|
||
set$pw4: ; CODE XREF: set$pw+2Aj
|
||
xor [di], ch
|
||
inc di
|
||
dec cl
|
||
jnz set$pw4
|
||
mov 1[bx], ch
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
get$dtba$8: ; CODE XREF: delete11+14p chk$pw$error+2Cp
|
||
; ...
|
||
mov ch, 8
|
||
|
||
get$dtba: ; CODE XREF: make+47p stamp2+2p
|
||
; ...
|
||
mov al, 3
|
||
mov ah, byte ptr dcnt
|
||
and ah, 3
|
||
cmp al, ah
|
||
jz get$dtba$ret
|
||
mov bx, buffa
|
||
add bx, 60h
|
||
mov al, [bx]
|
||
sub al, 21h
|
||
jnz get$dtba$ret
|
||
mov al, ah
|
||
mov cl, 0Ah
|
||
mul cl
|
||
inc al
|
||
add al, ch
|
||
add bx, ax
|
||
xor al, al
|
||
|
||
get$dtba$ret: ; CODE XREF: get$dtba$8+Dj
|
||
; get$dtba$8+1Aj ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
qdirfcb1: ; CODE XREF: qstampp openx+31p
|
||
; ...
|
||
mov bx, offset user_fcb+0Ch
|
||
mov al, [bx]
|
||
mov ah, dpb_exm
|
||
not ah
|
||
and al, ah
|
||
and al, 1Fh
|
||
jnz get$dtba$ret
|
||
test byte ptr 2[bx], 3Fh
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
qstamp: ; CODE XREF: openx2p F_MAKE+EFp
|
||
; ...
|
||
call qdirfcb1
|
||
jnz get$dtba$ret
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
qstamp1: ; CODE XREF: update$stamp+2p
|
||
call get$dir$mode
|
||
and al, cl
|
||
jz qstamp1a
|
||
jmp nowrite ; Return true if drive is software R/O
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
qstamp1a: ; CODE XREF: qstamp1+5j
|
||
inc al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
stamp1: ; CODE XREF: openx2+5j DRV_SETLABEL+4Fp
|
||
mov ch, 0
|
||
jmps stamp3
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
stamp2: ; CODE XREF: update$stamp+1Bp
|
||
; F_MAKE+F4p ...
|
||
mov ch, 4
|
||
|
||
stamp3: ; CODE XREF: stamp1+2j
|
||
call get$dtba
|
||
or al, al
|
||
jnz get$dtba$ret
|
||
|
||
stamp_cmpdate: ; CODE XREF: stamp5+9j
|
||
mov dx, offset date_days
|
||
|
||
stamp_compare: ; CODE XREF: F_BDOS_74+3Bp
|
||
; F_BDOS_74+51p
|
||
mov cl, 4
|
||
push bx
|
||
push dx
|
||
call compare ; Compare CL bytes at DX and BX
|
||
pop dx
|
||
pop bx
|
||
jz get$dtba$ret
|
||
mov cl, 4
|
||
call move ; Copy CL bytes from DX to BX
|
||
jmp seek$copy
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
stamp5: ; CODE XREF: DRV_SETLABEL+4Cp
|
||
; DRV_SETLABEL+55p
|
||
call getdptra
|
||
add bx, cx
|
||
mov ax, offset F_nop
|
||
push ax
|
||
jmps stamp_cmpdate
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
update$stamp: ; CODE XREF: cpm_writerec+2Ap
|
||
; F_TRUNCATE+8Ap
|
||
mov cl, 20h ; Is update stamping requested?
|
||
call qstamp1
|
||
jnz get$dtba$ret
|
||
test user_fcb+0Eh, 40h; Has file been written to?
|
||
jnz get$dtba$ret
|
||
mov ah, user_fcb+0Ch; Save EX and S2
|
||
mov al, user_fcb+0Eh
|
||
push ax
|
||
call find_extent_0 ; Find the SFCB
|
||
jz no_stamp2
|
||
call stamp2
|
||
|
||
no_stamp2: ; CODE XREF: update$stamp+19j
|
||
mov byte ptr aret, 0
|
||
pop ax
|
||
mov user_fcb+0Ch, ah
|
||
mov user_fcb+0Eh, al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
dirdata_alloc: ; CODE XREF: cpm_opendir+E5p
|
||
cli
|
||
mov bx, free_dirdata
|
||
or bx, bx
|
||
jz dda_allgone
|
||
mov si, [bx]
|
||
mov free_dirdata, si
|
||
|
||
dda_allgone: ; CODE XREF: dirdata_alloc+7j
|
||
sti
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
intrnldiskreset: ; CODE XREF: DRV_SETRO+9p
|
||
mov dx, bx
|
||
mov cx, 3
|
||
|
||
dskrst0: ; CODE XREF: intrnldiskreset+1Fj
|
||
shl bx, 1
|
||
jnb dskrst1
|
||
push cx
|
||
push bx
|
||
mov al, cl
|
||
add al, 0Ch
|
||
mov cl, 0FFh
|
||
call cwd_for_drive
|
||
mov cl, al
|
||
mov ax, 1
|
||
shl ax, cl
|
||
or dx, ax
|
||
pop bx
|
||
pop cx
|
||
|
||
dskrst1: ; CODE XREF: intrnldiskreset+7j
|
||
loop dskrst0
|
||
and dx, 1FFFh
|
||
mov bx, dx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Return bitmap of all drives in use by processes
|
||
|
||
get_drvs_in_use: ; CODE XREF: not_drv_loggedp
|
||
; DRV_RESETp
|
||
xor ax, ax
|
||
push es
|
||
mov es, bdos_conowner
|
||
|
||
|
||
gdiu_0: ; CODE XREF: get_drvs_in_use+1Dj
|
||
cmp es:proc_status, 2; 0 => Runnable
|
||
; 1 => waiting on timer
|
||
; 2 => terminated
|
||
; 3 => waiting on flag
|
||
jz gdiu_1
|
||
or ax, es:proc_using_drvs
|
||
|
||
gdiu_1: ; CODE XREF: get_drvs_in_use+Dj
|
||
mov cx, es:proc_nextseg
|
||
mov es, cx
|
||
or cx, cx
|
||
jnz gdiu_0
|
||
pop es
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
not_drv_logged: ; CODE XREF: DRV_FLUSH+2Cp
|
||
; DRV_FLUSH+63p
|
||
call get_drvs_in_use ; Return bitmap of all drives in use by processes
|
||
not ax
|
||
mov dx, ax
|
||
jmp test$vector ; Return bit curdsk of vector DX
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
call end$of$dir
|
||
mov cl, 0
|
||
jmp read$dir
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
DRV_ALLRESET: ; DATA XREF: bdos:256Eo
|
||
mov ax, 0FFFFh
|
||
mov fs_param_low, ax
|
||
call DRV_RESET
|
||
xor al, al ; A: is the default
|
||
call set_proc_drive
|
||
dec al ; But no drive is logged in
|
||
mov curdsk, al
|
||
push ds
|
||
mov ds, rlr
|
||
|
||
mov word ptr proc_dma, 80h
|
||
pop ds
|
||
|
||
jmp DRV_FLUSH
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
DRV_SET: ; DATA XREF: bdos:2571o
|
||
call tmpselect_dir
|
||
mov al, linfo
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
set_proc_drive: ; CODE XREF: DRV_ALLRESET+Bp
|
||
push ds
|
||
mov ds, rlr
|
||
|
||
mov proc_drive, al
|
||
pop ds
|
||
|
||
|
||
spd_ret: ; CODE XREF: F_OPEN+20j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_OPEN: ; DATA XREF: bdos:2574o
|
||
call copy8fromdma ; Get password
|
||
call clrmodnum ; Clear S2 byte of FCB
|
||
cmp F_isfatfs, 0
|
||
jz cpm_open
|
||
jmp fat_open
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_open: ; CODE XREF: F_OPEN+Bj
|
||
test fcb_is_for_dir, 0FFh
|
||
jz cpm_openfile
|
||
call cpm_opendir
|
||
cmp aret, 0FFh
|
||
jnz spd_ret
|
||
mov aret, 0FFh
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_openfile: ; CODE XREF: F_OPEN+15j
|
||
call check$wild
|
||
cmp usrcode, 0
|
||
jz call$open
|
||
mov al, 0FEh
|
||
mov byte ptr xdcnt+1, al
|
||
inc al
|
||
mov search$user0, al
|
||
|
||
call$open: ; CODE XREF: F_OPEN+31j
|
||
call open
|
||
call openx
|
||
xor al, al
|
||
xchg al, search$user0
|
||
test al, al
|
||
jnz callopen_noret
|
||
|
||
callopen_ret: ; CODE XREF: F_OPEN+53j openx+3j
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
callopen_noret: ; CODE XREF: F_OPEN+4Bj
|
||
cmp byte ptr xdcnt+1, 0FEh
|
||
jz callopen_ret
|
||
call set_dcnt_dblk
|
||
mov high$ext, 60h
|
||
xor al, al ; Try to open in user 0
|
||
mov user_fcb, al
|
||
mov cl, 0Fh
|
||
call searchi
|
||
call searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
call open1
|
||
call openx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
openx: ; CODE XREF: F_OPEN+40p F_OPEN+6Dp
|
||
call end$of$dir
|
||
jz callopen_ret
|
||
mov bx, offset user_fcb+20h
|
||
cmp byte ptr [bx], 0FFh
|
||
jnz openxa
|
||
mov al, user_fcb+0Dh
|
||
mov [bx], al
|
||
|
||
openxa: ; CODE XREF: openx+Bj
|
||
pop bx ; Open successful. Discard return address
|
||
mov al, high$ext
|
||
cmp al, 60h
|
||
jnz openx0
|
||
mov al, user_fcb+0Ah; System file?
|
||
and al, 80h
|
||
jnz openx0 ; Yes - open successful
|
||
mov high$ext, al
|
||
jmp lret$eq$ff ; Open fails
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
openx0: ; CODE XREF: openx+18j openx+1Fj
|
||
call set$lsn
|
||
call get$dir$mode ; Are passwords enabled on drive?
|
||
test al, 80h
|
||
jz openx1a
|
||
call qdirfcb1 ; Is this the first dir fcb?
|
||
jnz openx0a
|
||
call get$dtba$8 ; Does SFCB exist?
|
||
or al, al
|
||
jnz openx0a
|
||
test byte ptr [bx], 0C0h; Password read/write?
|
||
jz openx1a
|
||
call xdcnt_eq_dcnt ; Does XFCB exist?
|
||
call get$xfcb
|
||
jnz openx0b
|
||
call restore_dir_fcb
|
||
jz openxret
|
||
call get$dtba
|
||
or al, al
|
||
jnz openx1a
|
||
mov [bx], al
|
||
call nowrite ; Return true if drive is software R/O
|
||
jnz openx1a
|
||
call seek$copy
|
||
jmps openx1a
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
openx0a: ; CODE XREF: openx+34j openx+3Bj
|
||
call xdcnt_eq_dcnt
|
||
call get$xfcb
|
||
and al, 0C0h
|
||
jz openx1
|
||
|
||
openx0b: ; CODE XREF: openx+48j
|
||
call cmp$pw ; Compare password
|
||
jz openx1
|
||
call chk$pw$error
|
||
mov al, pw$mode ; Password mode
|
||
and al, 0C0h
|
||
jz openx1
|
||
test al, 80h
|
||
jz openx0c
|
||
jmp pw$error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
openx0c: ; CODE XREF: openx+7Dj
|
||
mov xfcb_rdonly, 80h; Can only open read-only
|
||
|
||
openx1: ; CODE XREF: openx+6Aj openx+6Fj
|
||
; ...
|
||
call restore_dir_fcb
|
||
jnz openx1a
|
||
|
||
openxret: ; CODE XREF: openx+4Dj
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
openx1a: ; CODE XREF: openx+2Fj openx+40j
|
||
; ...
|
||
call set$lsn
|
||
mov open_unknown, 0FFh
|
||
mov cl, 40h
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
openx2: ; CODE XREF: F_MAKE+EAp
|
||
call qstamp
|
||
jnz openx2_ret
|
||
jmp stamp1
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_CLOSE: ; DATA XREF: bdos:2577o
|
||
cmp F_isfatfs, 0
|
||
jz close_file
|
||
test fcb_is_for_dir, 0FFh
|
||
jz close_file
|
||
jmp fat_close
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
close_file: ; CODE XREF: F_CLOSE+5j F_CLOSE+Cj
|
||
cmp F_isfatfs, 0
|
||
jz cpm_close
|
||
jmp fat_close
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_close: ; CODE XREF: F_CLOSE+16j
|
||
test fcb_is_for_dir, 0FFh
|
||
jz cpm_closefile
|
||
mov aret, 0
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_closefile: ; CODE XREF: F_CLOSE+20j
|
||
call set$lsn
|
||
call chek$fcb
|
||
call close
|
||
cmp byte ptr aret, 0FFh
|
||
jnz f_close_flush
|
||
|
||
openx2_ret: ; CODE XREF: openx2+3j
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_close_flush: ; CODE XREF: F_CLOSE+37j
|
||
call call_xios_flush
|
||
|
||
f_close_end: ; CODE XREF: fat_close+50j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_SFIRST: ; DATA XREF: bdos:257Ao
|
||
mov ax, fs_param_ds
|
||
mov word ptr sys_find1st+2, ax
|
||
mov ax, fs_param_low
|
||
mov word ptr sys_find1st, ax
|
||
xor al, al
|
||
|
||
csearch: ; CODE XREF: bdos:464Aj
|
||
pushf
|
||
cmp user_fcb, '?' ; If drive byte is '?', search
|
||
; the default drive.
|
||
jnz csearch1
|
||
call curselect_dir
|
||
call noselect0
|
||
xor cl, cl
|
||
jmps csearch3
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
csearch1: ; CODE XREF: F_SFIRST+14j
|
||
call sel1_fcb_drive
|
||
mov cl, 0Ch
|
||
mov bx, offset user_fcb+0Ch
|
||
cmp byte ptr [bx], 3Fh
|
||
jz csearch3
|
||
call clr$ext
|
||
call clrmodnum ; Clear S2 byte of FCB
|
||
mov cl, 0Fh
|
||
|
||
csearch3: ; CODE XREF: F_SFIRST+1Ej F_SFIRST+2Bj
|
||
or dir_check_flag, 0Fh
|
||
cmp F_isfatfs, 0
|
||
jz srch_cpm
|
||
jmp srch_fat
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
srch_cpm: ; CODE XREF: F_SFIRST+3Fj
|
||
push cs
|
||
call f_interrupt
|
||
jnz srch_1
|
||
call search
|
||
jmps srch_found
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
srch_1: ; CODE XREF: F_SFIRST+48j
|
||
mov cl, searchl
|
||
call searchi
|
||
call searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
|
||
srch_found: ; CODE XREF: F_SFIRST+4Dj
|
||
cmp byte ptr aret, 0FFh
|
||
jz srch_ret
|
||
mov ax, dcnt
|
||
and al, 3
|
||
mov byte ptr aret, al
|
||
mov dx, buffa
|
||
mov bx, userdma
|
||
mov cl, 80h
|
||
push es
|
||
mov es, userdmaseg
|
||
call move ; Copy CL bytes from DX to BX
|
||
pop es
|
||
|
||
srch_ret: ; CODE XREF: F_SFIRST+5Ej bdos:4620j
|
||
retn
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
F_SNEXT: ; DATA XREF: bdos:257Do
|
||
mov ax, word ptr sys_find1st+2
|
||
or ax, word ptr sys_find1st
|
||
jz srch_ret
|
||
mov ax, word ptr sys_find1st+2
|
||
mov fs_param_ds, ax
|
||
mov ax, word ptr sys_find1st
|
||
mov fs_param_low, ax
|
||
call copy_fcb_33
|
||
mov searcha, offset user_fcb
|
||
test user_fcb, 80h
|
||
jz f_snext_file
|
||
and user_fcb, 3Fh
|
||
mov fcb_is_for_dir, 0FFh
|
||
|
||
f_snext_file: ; CODE XREF: bdos:463Cj
|
||
or al, 1
|
||
jmp csearch
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_DELETE: ; DATA XREF: bdos:2580o
|
||
call copy8fromdma
|
||
cmp F_isfatfs, 0
|
||
jz nonfat_delete
|
||
jmp fat_delete
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
nonfat_delete: ; CODE XREF: F_DELETE+8j
|
||
test fcb_is_for_dir, 0FFh
|
||
jz j_cpm_delete
|
||
mov aret, 0FFh
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
j_cpm_delete: ; CODE XREF: F_DELETE+12j
|
||
jmp cpm_delete
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_READ: ; DATA XREF: bdos:2583o
|
||
call check_changed
|
||
cmp F_isfatfs, 0
|
||
jz j_cpm_readrec
|
||
mov cl, 1
|
||
jmp fat_rdwr ; CL: Bit 0=1 for read, 0 for write
|
||
; Bit 1=1 for rand, 0 for seq
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
j_cpm_readrec: ; CODE XREF: F_READ+8j
|
||
jmp cpm_readrec
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_WRITE: ; DATA XREF: bdos:2586o
|
||
call check_changed
|
||
cmp F_isfatfs, 0
|
||
jz j_cpm_writerec
|
||
mov cl, 0
|
||
jmp fat_rdwr ; CL: Bit 0=1 for read, 0 for write
|
||
; Bit 1=1 for rand, 0 for seq
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
j_cpm_writerec: ; CODE XREF: F_WRITE+8j
|
||
jmp cpm_writerec
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_MAKE: ; DATA XREF: bdos:2589o
|
||
mov cl, 9
|
||
call copyfromdma ; New password & mode
|
||
call clr$ext
|
||
call clrmodnum ; Clear S2 byte of FCB
|
||
call sel1_fcb_drive
|
||
mov dl, 1
|
||
call valid_dl_f_fcb
|
||
mov xdcnt, 0FFFFh
|
||
cmp F_isfatfs, 0
|
||
jz cpm_make
|
||
jmp fat_make
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_make: ; CODE XREF: F_MAKE+1Ej
|
||
test fcb_is_for_dir, 0FFh
|
||
jz cpm_makefile
|
||
mov aret, 0FFh
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_makefile: ; CODE XREF: F_MAKE+28j
|
||
call get$atts
|
||
call open
|
||
call end$of$dir
|
||
jz makea0
|
||
call get$dir$ext ; Compute directory extent from FCB
|
||
cmp al, [bx]
|
||
jb makea0
|
||
mov ah, 8
|
||
jmp disk_error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
makea0: ; CODE XREF: F_MAKE+3Aj F_MAKE+41j
|
||
pushf
|
||
call f_make_nop
|
||
call qdirfcb1
|
||
jz makex04
|
||
call get$dir$mode
|
||
and al, 80h
|
||
jz makex04
|
||
call get$xfcb
|
||
and al, 0C0h
|
||
jz makex04
|
||
call chk_xfcb_passw1
|
||
jz makex04
|
||
call chk$pw$error
|
||
test pw$mode, 0C0h ; Password mode
|
||
jz makex04
|
||
jmp pw$error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
makex04: ; CODE XREF: F_MAKE+4Fj F_MAKE+56j
|
||
; ...
|
||
push cs
|
||
call f_interrupt
|
||
jb makex05
|
||
call make
|
||
|
||
makex05: ; CODE XREF: F_MAKE+75j
|
||
call end$of$dir
|
||
jnz makex06
|
||
|
||
f_make_ret: ; CODE XREF: F_MAKE+D7j
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
makex06: ; CODE XREF: F_MAKE+7Dj
|
||
call set$lsn
|
||
call get$dir$mode
|
||
test al, 80h
|
||
jz make3a
|
||
test attributes, 40h ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
jz make3a
|
||
call qdirfcb1
|
||
jnz make3a
|
||
call xdcnt_eq_dcnt
|
||
call get$xfcb
|
||
jnz make00
|
||
mov make$xfcb, 0FFh
|
||
call make
|
||
jnz make00
|
||
call search$namlen ; Find a numbered extent
|
||
call delete10
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
make00: ; CODE XREF: F_MAKE+9Cj F_MAKE+A6j
|
||
call init$xfcb
|
||
mov si, offset passwd_buf
|
||
add si, 8
|
||
lodsb
|
||
and al, 0E0h
|
||
jnz make2
|
||
mov al, 80h
|
||
|
||
make2: ; CODE XREF: F_MAKE+BDj
|
||
mov pw$mode, al ; Password mode
|
||
push ax
|
||
call get$xfcb1
|
||
pop ax
|
||
mov [bx], al
|
||
mov si, offset passwd_buf
|
||
call set$pw
|
||
call sdl3
|
||
call restore_dir_fcb
|
||
jz f_make_ret
|
||
call get$dtba$8
|
||
or al, al
|
||
jnz make3a
|
||
mov al, pw$mode ; Password mode
|
||
mov [bx], al
|
||
call seek$copy
|
||
|
||
make3a: ; CODE XREF: F_MAKE+88j F_MAKE+8Fj
|
||
; ...
|
||
mov cl, 50h
|
||
call openx2
|
||
mov cl, 20h
|
||
call qstamp
|
||
jnz f_make_ret2
|
||
call stamp2
|
||
or user_fcb+0Eh, 40h
|
||
|
||
f_make_ret2: ; CODE XREF: F_MAKE+F2j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
f_make_nop: ; CODE XREF: F_MAKE+49p
|
||
retn
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
F_RENAME: ; DATA XREF: bdos:258Co
|
||
call copy8fromdma
|
||
call check$wild
|
||
cmp F_isfatfs, 0
|
||
jz cpm_rename
|
||
jmp fat_rename
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_rename: ; CODE XREF: bdos:4798j
|
||
call chk$password
|
||
jz cpm_rename1
|
||
call chk$pw$error
|
||
|
||
cpm_rename1: ; CODE XREF: bdos:47A0j
|
||
call init_xfcb_srch
|
||
call copy$user$no
|
||
mov searcha, bx
|
||
mov dl, 1
|
||
call check$wild0
|
||
mov ah, 9
|
||
jz ren_wildcarderr
|
||
mov cl, 0Ch
|
||
call searchi1
|
||
call search1
|
||
jz cpm_rename2
|
||
mov ah, 8 ; File exists
|
||
|
||
ren_wildcarderr: ; CODE XREF: bdos:47B6j
|
||
mov cur_fcb_len, 0
|
||
add fs_param_low, 10h
|
||
jmp disk_error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_rename2: ; CODE XREF: bdos:47C0j
|
||
call does$xfcb$exist
|
||
jz cpm_rename3 ; If XFCB exists for new name, delete it
|
||
call delete11
|
||
|
||
cpm_rename3: ; CODE XREF: bdos:47D4j
|
||
call copy$user$no
|
||
call init_xfcb_srch
|
||
call search$extnum ; Find any extent of a file
|
||
jnz cpm_rename4
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_rename4: ; CODE XREF: bdos:47E2j
|
||
call check$rodir
|
||
|
||
rename0: ; CODE XREF: bdos:47F5j bdos:4802j
|
||
mov cl, 10h ; Not end of dir, rename next element
|
||
mov dl, 0Ch
|
||
call copy$dir ; Copy FCB information starting at CL for DL bytes
|
||
; into the currently addressed directory entry
|
||
call fix$hash
|
||
call searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
jnz rename0
|
||
call does$xfcb$exist
|
||
jnz cpm_rename_5
|
||
jmp copy$dir$loc
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_rename_5: ; CODE XREF: bdos:47FAj
|
||
call copy$user$no
|
||
jmps rename0
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
DRV_ALLOCVEC: ; DATA XREF: bdos:258Fo
|
||
call curselect_dir
|
||
mov f_ret_es, ds
|
||
mov bx, dph_alv
|
||
jmps f_ret_bx
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
DRV_SETRO: ; DATA XREF: bdos:2592o
|
||
mov cl, fs_fcbdrive
|
||
mov bx, 1
|
||
shl bx, cl
|
||
call intrnldiskreset
|
||
or readonly_vector, bx
|
||
mov dx, dpb_drm
|
||
inc dx
|
||
mov bx, cdrmaxa
|
||
mov [bx], dx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_ATTRIB: ; DATA XREF: bdos:2595o
|
||
call copy8fromdma
|
||
call check$wild
|
||
call sel1_fcb_drive
|
||
cmp F_isfatfs, 0
|
||
jz f_attrib_cpm
|
||
jmp f_attrib_fat
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_attrib_cpm: ; CODE XREF: F_ATTRIB+Ej
|
||
call chk$password
|
||
jz f_attrib_cpm1
|
||
call chk$pw$error
|
||
|
||
f_attrib_cpm1: ; CODE XREF: F_ATTRIB+16j
|
||
call get$atts
|
||
call search$extnum ; Find any extent of a file
|
||
jz rdrand_ret
|
||
|
||
f_attrib_cpm2: ; CODE XREF: F_ATTRIB+40j
|
||
mov cl, 0
|
||
mov dl, 0Ch
|
||
call copy$dir2
|
||
call move ; Copy CL bytes from DX to BX
|
||
test attributes, 40h ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
jz no_bytesize
|
||
mov al, user_fcb+20h
|
||
mov 13[bx], al
|
||
|
||
no_bytesize: ; CODE XREF: F_ATTRIB+32j
|
||
call seek$copy
|
||
call searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
jnz f_attrib_cpm2
|
||
jmp copy$dir$loc
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
DRV_DPB: ; DATA XREF: bdos:2598o
|
||
call curselect_dir
|
||
mov dir_check_flag, 0F0h
|
||
call check$media
|
||
mov f_ret_es, ds
|
||
mov bx, dph_dpb
|
||
|
||
f_ret_bx: ; CODE XREF: DRV_ALLOCVEC+Bj
|
||
mov aret, bx
|
||
|
||
rdrand_ret: ; CODE XREF: F_ATTRIB+21j F_READRAND+14j
|
||
; ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_READRAND: ; DATA XREF: bdos:259Bo
|
||
call check_changed
|
||
cmp F_isfatfs, 0
|
||
jz cpm_readrand
|
||
mov cl, 3
|
||
jmp fat_rdwr ; CL: Bit 0=1 for read, 0 for write
|
||
; Bit 1=1 for rand, 0 for seq
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_readrand: ; CODE XREF: F_READRAND+8j
|
||
mov cl, 0FFh
|
||
call cpm_rwrand ; CL=-1 read 0 write
|
||
jnz rdrand_ret
|
||
jmp cpm_readrec
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_WRITERAND: ; DATA XREF: bdos:259Eo
|
||
call check_changed
|
||
cmp F_isfatfs, 0
|
||
jz f_writerand_cpm
|
||
mov cl, 2
|
||
jmp fat_rdwr ; CL: Bit 0=1 for read, 0 for write
|
||
; Bit 1=1 for rand, 0 for seq
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_writerand_cpm: ; CODE XREF: F_WRITERAND+8j
|
||
mov cl, 0
|
||
call cpm_rwrand ; CL=-1 read 0 write
|
||
jnz rdrand_ret
|
||
jmp cpm_writerec
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_SIZE: ; DATA XREF: bdos:25A1o
|
||
cmp F_isfatfs, 0
|
||
jz cpm_size
|
||
jmp fat_size
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_size: ; CODE XREF: F_SIZE+5j
|
||
mov bx, offset user_fcb+21h
|
||
xor ax, ax
|
||
mov [bx], ax
|
||
mov 2[bx], al
|
||
call search$extnum ; Find any extent of a file
|
||
jz cpm_size_notfnd
|
||
|
||
cpm_size_loop: ; CODE XREF: F_SIZE+34j
|
||
call getdptra
|
||
mov dx, 0Fh
|
||
call extent_size ; Take the largest value of the
|
||
; file sizes given by the various
|
||
; extents
|
||
call compare_recno
|
||
jb cpm_size_next
|
||
mov 2[bx], al
|
||
mov [bx], cx
|
||
|
||
cpm_size_next: ; CODE XREF: F_SIZE+25j
|
||
call searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
mov byte ptr aret, 0
|
||
jnz cpm_size_loop
|
||
|
||
cpm_size_notfnd: ; CODE XREF: F_SIZE+17j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_RANDREC: ; DATA XREF: bdos:25A4o
|
||
mov bx, offset user_fcb
|
||
mov dx, 20h
|
||
call extent_size ; Convert a size (extent + record no)
|
||
; to a 3-byte record number.
|
||
mov 21h[bx], cx
|
||
mov 23h[bx], al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
DRV_RESET: ; CODE XREF: DRV_ALLRESET+6p
|
||
; DATA XREF: bdos:25A7o
|
||
call get_drvs_in_use ; Return bitmap of all drives in use by processes
|
||
push ax
|
||
and ax, fs_param_low
|
||
jz reset_none
|
||
and ax, removable_drive
|
||
mov dl, 10h
|
||
|
||
reset_loops: ; CODE XREF: DRV_RESET+2Cj
|
||
dec dl
|
||
shl ax, 1
|
||
jnb reset_next
|
||
push ax
|
||
push dx
|
||
call tmpselect_dir
|
||
mov bx, lsn$add
|
||
mov byte ptr 1[bx], 0FFh
|
||
mov xios_bh_gdopen, 0FFh
|
||
pop dx
|
||
pop ax
|
||
|
||
reset_next: ; CODE XREF: DRV_RESET+14j
|
||
or ax, ax
|
||
jnz reset_loops
|
||
|
||
reset_none: ; CODE XREF: DRV_RESET+8j
|
||
pop ax
|
||
not ax
|
||
and ax, fs_param_low
|
||
|
||
reset37x: ; CODE XREF: media$change+15j
|
||
not ax
|
||
and login_vector, ax
|
||
and readonly_vector, ax
|
||
and removable_drive, ax
|
||
mov curdsk, 0FFh
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_WRITEZF: ; DATA XREF: bdos:25B0o
|
||
call check_changed
|
||
cmp F_isfatfs, 0
|
||
jz cpm_writezf
|
||
mov cl, 2
|
||
jmp fat_rdwr ; CL: Bit 0=1 for read, 0 for write
|
||
; Bit 1=1 for rand, 0 for seq
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_writezf: ; CODE XREF: F_WRITEZF+8j
|
||
mov cl, 0
|
||
call cpm_rwrand ; CL=-1 read 0 write
|
||
jz j_fat_wrrec2
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
j_fat_wrrec2: ; CODE XREF: F_WRITEZF+14j
|
||
jmp cpm_writerec
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
DRV_SPACE: ; DATA XREF: bdos:25B9o
|
||
call tmpselect_dir
|
||
cmp F_isfatfs, 0
|
||
jz cpm_space
|
||
jmp fat_space
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_space: ; CODE XREF: DRV_SPACE+8j
|
||
mov si, dph_alv
|
||
call get$nalbs ; Return ALV size in bytes
|
||
xor cx, cx
|
||
|
||
cpm_space_loop: ; CODE XREF: DRV_SPACE+23j
|
||
lodsb
|
||
|
||
cpm_space_ctbit: ; CODE XREF: DRV_SPACE+20j
|
||
or al, al
|
||
jz cpm_space_next
|
||
|
||
cpm_space_ckbit: ; CODE XREF: DRV_SPACE+1Dj
|
||
shr al, 1
|
||
jnb cpm_space_ckbit
|
||
inc cx
|
||
jmps cpm_space_ctbit
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_space_next: ; CODE XREF: DRV_SPACE+19j
|
||
dec bx
|
||
jnz cpm_space_loop ; CX = count of used blocks
|
||
mov bx, dpb_dsm
|
||
inc bx
|
||
sub bx, cx ; BX = count of free blocks
|
||
mov cl, dpb_bsh
|
||
xor ch, ch
|
||
mov al, bh
|
||
xor ah, ah
|
||
shl bx, cl ; Convert to records
|
||
shl ax, cl
|
||
mov di, userdma
|
||
push ds
|
||
mov ds, userdmaseg
|
||
mov [di], bx
|
||
mov 2[di], ah
|
||
pop ds
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
DRV_FLUSH: ; CODE XREF: DRV_ALLRESET+1Fj
|
||
; DATA XREF: bdos:25BCo
|
||
cmp fs_function, 15h
|
||
jz flush0 ; Function 98 entry point
|
||
mov al, 0Ch ; XIOS flush
|
||
call fs_call_xios
|
||
call diocomp
|
||
|
||
flush0: ; CODE XREF: DRV_FLUSH+5j
|
||
; DATA XREF: bdos:25BFo ...
|
||
mov bx, login_vector; Function 98 entry point
|
||
mov dl, 10h
|
||
|
||
flush1: ; CODE XREF: DRV_FLUSH+1Dj
|
||
dec dl
|
||
shl bx, 1
|
||
jb flush2a
|
||
|
||
flush5: ; CODE XREF: DRV_FLUSH+74j
|
||
or bx, bx
|
||
jnz flush1
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
flush2a: ; CODE XREF: DRV_FLUSH+19j
|
||
push bx
|
||
push dx
|
||
call tmpselect_dir
|
||
cmp fs_function, 1Bh; Flush or reset allocation?
|
||
jnz flush_not3
|
||
call not_drv_logged
|
||
jz ptsync_drvfail
|
||
call copy$alv
|
||
jmps flush4
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
ptsync_drvfail: ; CODE XREF: DRV_FLUSH+2Fj
|
||
mov byte ptr aret, 0FFh
|
||
jmps flush4
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
flush_not3: ; CODE XREF: DRV_FLUSH+2Aj
|
||
cmp fs_function, 15h
|
||
jz flush35
|
||
cmp fs_function, 23h
|
||
jz flush34
|
||
call flushx
|
||
cmp linfo, 0FFh ; Discard buffers?
|
||
jnz flush4
|
||
jmps flush35
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
flush34: ; CODE XREF: DRV_FLUSH+49j
|
||
push ds
|
||
mov ds, rlr
|
||
|
||
mov proc_using_drvs, 0
|
||
pop ds
|
||
|
||
call not_drv_logged
|
||
jz flush35
|
||
call copy$alv
|
||
|
||
flush35: ; CODE XREF: DRV_FLUSH+42j
|
||
; DRV_FLUSH+55j ...
|
||
mov bx, dph_dtabcb
|
||
call proc$discard ; Free BCBs on bcb_drive used by current process
|
||
|
||
flush4: ; CODE XREF: DRV_FLUSH+34j
|
||
; DRV_FLUSH+3Bj ...
|
||
pop dx
|
||
pop bx
|
||
jmp flush5
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
call_xios_flush: ; CODE XREF: F_CLOSE+3Ap fat_close+43p
|
||
mov al, 0Ch
|
||
call fs_call_xios
|
||
call diocomp
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
flushx: ; CODE XREF: check$nprs+100p
|
||
; DRV_FLUSH+4Bp ...
|
||
test dpb_phm, 0FFh
|
||
jnz flushx1
|
||
|
||
flushxret: ; CODE XREF: trunc_save_dcnt+5j
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
flushx1: ; CODE XREF: flushx+5j
|
||
mov ah, 4
|
||
jmp deblock$dta
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
trunc_save_dcnt: ; CODE XREF: F_TRUNCATE+68p
|
||
; F_TRUNCATE+90p
|
||
cmp byte ptr xdcnt+1, 0FDh
|
||
jnz flushxret
|
||
jmp save$dcnt$pos0
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_TRUNCATE: ; DATA XREF: bdos:25C2o
|
||
call copy8fromdma
|
||
call sel1_fcb_drive
|
||
call check$wild
|
||
cmp F_isfatfs, 0
|
||
jz cpm_truncate
|
||
jmp fat_truncate
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_truncate: ; CODE XREF: F_TRUNCATE+Ej
|
||
call chk$password
|
||
jz cpm_truncate0
|
||
call chk$pw$error
|
||
|
||
cpm_truncate0: ; CODE XREF: F_TRUNCATE+16j
|
||
call get$atts
|
||
mov cl, 0FFh
|
||
call cpm_rwrand ; CL=-1 read 0 write
|
||
jz cpm_truncate2
|
||
|
||
cpm_truncate1: ; CODE XREF: F_TRUNCATE+37j
|
||
; F_TRUNCATE+3Cj
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_truncate2: ; CODE XREF: F_TRUNCATE+23j
|
||
call seek$copy
|
||
call getdptra
|
||
mov dx, 0Fh
|
||
call extent_size ; Convert a size (extent + record no)
|
||
; to a 3-byte record number.
|
||
call compare_recno
|
||
jbe cpm_truncate1
|
||
call search$extnum ; Find any extent of a file
|
||
jz cpm_truncate1
|
||
call check$rodir
|
||
mov byte ptr xdcnt+1, 0FDh
|
||
|
||
cpm_truncate3: ; CODE XREF: F_TRUNCATE+88j
|
||
call getdptra
|
||
add bx, 0Ch
|
||
mov si, offset user_fcb+0Ch
|
||
mov al, 2[si]
|
||
and al, 3Fh
|
||
cmp 2[bx], al
|
||
jnz cpm_truncate4
|
||
mov al, [bx]
|
||
mov cl, [si]
|
||
call compext ; Compare extent nos in AL and CL
|
||
; Return nonzero if they do not match
|
||
jz cpm_truncate4
|
||
mov al, [bx]
|
||
cmp al, cl
|
||
|
||
cpm_truncate4: ; CODE XREF: F_TRUNCATE+57j
|
||
; F_TRUNCATE+60j
|
||
jnb cpm_truncate5
|
||
call trunc_save_dcnt
|
||
jmps trunc2
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_truncate5: ; CODE XREF: F_TRUNCATE+66j
|
||
pushf
|
||
mov cl, 0
|
||
call scandm$ab
|
||
push cs
|
||
call f_interrupt
|
||
jz trunc3
|
||
call getdptra
|
||
mov byte ptr [bx], 0E5h
|
||
call seek$copy
|
||
call fix$hash
|
||
|
||
trunc2: ; CODE XREF: F_TRUNCATE+6Bj
|
||
; F_TRUNCATE+FEj
|
||
call searchn ; Search for the next directory element,
|
||
; assuming a previous call on search
|
||
jnz cpm_truncate3
|
||
call update$stamp
|
||
jmp copy$dir$loc
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
trunc3: ; CODE XREF: F_TRUNCATE+77j
|
||
call trunc_save_dcnt
|
||
call getfcb ; Set variables from currently addressed FCB
|
||
call dm$position
|
||
inc al
|
||
test single, 0FFh ; Nonzero if using 8-bit blocks
|
||
jnz trunc3a
|
||
shl al, 1
|
||
|
||
trunc3a: ; CODE XREF: F_TRUNCATE+A0j
|
||
mov di, offset user_fcb+10h
|
||
xor ah, ah
|
||
add di, ax
|
||
mov cl, 10h
|
||
sub cl, al
|
||
mov ch, ah
|
||
mov al, ah
|
||
rep stosb
|
||
call get$dir$ext ; Compute directory extent from FCB
|
||
cmp al, [bx]
|
||
mov [bx], al
|
||
pushf
|
||
mov al, user_fcb+20h
|
||
inc al
|
||
mov si, offset user_fcb+0Fh
|
||
mov [si], al
|
||
push cs
|
||
call f_interrupt
|
||
jz trunc3b
|
||
call set$rc3
|
||
|
||
trunc3b: ; CODE XREF: F_TRUNCATE+CBj
|
||
test dminx, 0FFh
|
||
jnz trunc3c
|
||
call set$rc3
|
||
|
||
trunc3c: ; CODE XREF: F_TRUNCATE+D5j
|
||
call getdptra
|
||
add bx, 0Bh
|
||
and byte ptr [bx], 7Fh
|
||
mov al, user_fcb+0Ch
|
||
mov 1[bx], al
|
||
add bx, 4
|
||
mov si, offset user_fcb+0Fh
|
||
mov di, bx
|
||
mov cx, 11h
|
||
rep movsb
|
||
mov cl, 1
|
||
call scandm$ab
|
||
call seek$copy
|
||
jmp trunc2
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
DRV_SETLABEL: ; DATA XREF: bdos:25C5o
|
||
mov cl, 10h
|
||
call copyfromdma
|
||
call sel1_fcb_drive
|
||
cmp F_isfatfs, 0
|
||
jz cpm_setlabel
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_setlabel: ; CODE XREF: DRV_SETLABEL+Dj
|
||
mov user_fcb, 21h ; Datestamped?
|
||
mov cl, 1
|
||
call search
|
||
jnz sdl0
|
||
mov bx, offset user_fcb+0Ch
|
||
test byte ptr [bx], 70h
|
||
jz sdl0
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
sdl0: ; CODE XREF: DRV_SETLABEL+1Cj
|
||
; DRV_SETLABEL+24j
|
||
mov user_fcb, 20h
|
||
mov cl, 1
|
||
mov xdcnt, 0FFFFh
|
||
call search
|
||
jnz sdl1
|
||
mov make$xfcb, 0FFh
|
||
call make
|
||
jnz sdl0a
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
sdl0a: ; CODE XREF: DRV_SETLABEL+43j
|
||
call init$xfcb
|
||
mov cx, 18h
|
||
call stamp5
|
||
call stamp1
|
||
|
||
sdl1: ; CODE XREF: DRV_SETLABEL+39j
|
||
mov cx, 1Ch
|
||
call stamp5
|
||
call stamp2
|
||
call chk_xfcb_passwd
|
||
jz sdl1a
|
||
jmp pw$error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
sdl1a: ; CODE XREF: DRV_SETLABEL+5Ej
|
||
xor cx, cx
|
||
call init$xfcb0
|
||
mov si, dx
|
||
lodsb
|
||
or al, 1
|
||
mov [bx], al
|
||
mov di, lsn$add
|
||
stosb
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
sdl2: ; CODE XREF: F_WRITEXFCB+5Fp
|
||
dec si
|
||
lodsb
|
||
and al, 1
|
||
jz sdl3
|
||
mov si, offset passwd_buf+8
|
||
call set$pw
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
sdl3: ; CODE XREF: F_MAKE+D1p sdl2+4j
|
||
; ...
|
||
call seek$copy
|
||
jmp fix$hash
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
DRV_GETLABEL: ; DATA XREF: bdos:25C8o
|
||
call tmpselect_dir
|
||
cmp F_isfatfs, 0
|
||
jz cpm_getlabel
|
||
mov al, 21h ; FAT filesystems always use 21h
|
||
jmp sta$ret
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_getlabel: ; CODE XREF: DRV_GETLABEL+8j
|
||
call get$dir$mode
|
||
jmp sta$ret
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_TIMEDATE: ; DATA XREF: bdos:25CBo
|
||
call sel1_fcb_drive
|
||
call check$wild
|
||
cmp F_isfatfs, 0
|
||
jz cpm_timedate
|
||
jmp fat_timedate
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_timedate: ; CODE XREF: F_TIMEDATE+Bj
|
||
call find_extent_0 ; Find the first extent of a file
|
||
jz wxfcb0a
|
||
mov ch, 0
|
||
call get$dtba
|
||
or al, al
|
||
jnz cpm_timedate1
|
||
push bx
|
||
mov di, offset user_fcb+10h
|
||
mov cx, 8
|
||
rep stosb
|
||
pop si
|
||
mov cl, 4
|
||
rep movsw
|
||
lodsb
|
||
mov user_fcb+0Ch, al
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_timedate1: ; CODE XREF: F_TIMEDATE+1Cj
|
||
call get$xfcb
|
||
mov al, 0FFh
|
||
jnz cpm_timedate2
|
||
jmp sta$ret
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_timedate2: ; CODE XREF: F_TIMEDATE+36j
|
||
mov bx, offset user_fcb
|
||
mov cl, 20h
|
||
jmp move ; Copy CL bytes from DX to BX
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_WRITEXFCB: ; DATA XREF: bdos:25CEo
|
||
mov cl, 10h
|
||
call copyfromdma
|
||
call sel1_fcb_drive
|
||
cmp F_isfatfs, 0
|
||
jz cpm_wrxfcb
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_wrxfcb: ; CODE XREF: F_WRITEXFCB+Dj
|
||
call get$dir$mode
|
||
and al, 80h
|
||
jnz wxfcb0
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
wxfcb0: ; CODE XREF: F_WRITEXFCB+17j
|
||
call check$wild
|
||
mov xdcnt, 0FFFFh
|
||
call search$extnum ; Find any extent of a file
|
||
jnz wxfcb0b
|
||
|
||
wxfcb0a: ; CODE XREF: F_TIMEDATE+13j
|
||
; F_WRITEXFCB+36j ...
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
wxfcb0b: ; CODE XREF: F_WRITEXFCB+28j
|
||
call get$xfcb
|
||
jnz wxfcb1
|
||
mov make$xfcb, al
|
||
call make
|
||
jz wxfcb0a
|
||
call init$xfcb
|
||
|
||
wxfcb1: ; CODE XREF: F_WRITEXFCB+2Ej
|
||
call chk_xfcb_passwd
|
||
jz wxfcb1a
|
||
jmp pw$error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
wxfcb1a: ; CODE XREF: F_WRITEXFCB+3Ej
|
||
mov si, offset user_fcb+0Ch
|
||
test byte ptr [bx], 0FFh
|
||
jnz wxfcb2
|
||
lodsb
|
||
dec si
|
||
and al, 1
|
||
jnz wxfcb2
|
||
call sdl3
|
||
jmps wxfcb4
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
wxfcb2: ; CODE XREF: F_WRITEXFCB+49j
|
||
; F_WRITEXFCB+4Fj
|
||
lodsb
|
||
and al, 0E0h
|
||
jnz wxfcb3
|
||
mov al, 80h
|
||
|
||
wxfcb3: ; CODE XREF: F_WRITEXFCB+59j
|
||
mov [bx], al
|
||
call sdl2
|
||
|
||
wxfcb4: ; CODE XREF: F_WRITEXFCB+54j
|
||
call get$xfcb1
|
||
and al, 0E0h
|
||
mov pw$mode, al ; Password mode
|
||
push ax
|
||
call find_extent_0 ; Find the first extent of a file
|
||
pop ax
|
||
mov user_fcb+0Ch, al
|
||
jz wxfcb0a
|
||
call get$dtba$8
|
||
or al, al
|
||
jnz wxfcb0a
|
||
mov al, pw$mode ; Password mode
|
||
mov [bx], al
|
||
jmp seek$copy
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_PASSWD: ; DATA XREF: bdos:25D1o
|
||
mov cl, 8
|
||
call copy_fcb
|
||
mov cur_fcb_len, 0
|
||
mov si, offset user_fcb
|
||
mov bx, si
|
||
mov di, offset df$password+7; Default password
|
||
mov cx, 8
|
||
jmp set$pw0
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_BDOS_74: ; DATA XREF: bdos:25D4o
|
||
call check_changed
|
||
call copy8fromdma
|
||
call check$write
|
||
cmp F_isfatfs, 0
|
||
jz cpm_bdos_74
|
||
jmp fat_bdos_74
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cpm_bdos_74: ; CODE XREF: F_BDOS_74+Ej
|
||
mov ah, user_fcb+0Ch
|
||
mov al, user_fcb+0Eh
|
||
push ax
|
||
call find_extent_0 ; Find the first extent of a file
|
||
pop ax
|
||
mov user_fcb+0Ch, ah
|
||
mov user_fcb+0Eh, al
|
||
jz cpm_74b
|
||
mov cl, 50h
|
||
call qstamp
|
||
jnz cpm_74a
|
||
mov ch, 0
|
||
call get$dtba
|
||
or al, al
|
||
jnz cpm_74a
|
||
mov dx, offset passwd_buf
|
||
call stamp_compare
|
||
|
||
cpm_74a: ; CODE XREF: F_BDOS_74+2Dj
|
||
; F_BDOS_74+36j
|
||
mov cl, 20h
|
||
call qstamp
|
||
jnz cpm_74b
|
||
mov ch, 4
|
||
call get$dtba
|
||
or al, al
|
||
jnz cpm_74b
|
||
mov dx, offset passwd_buf+4
|
||
call stamp_compare
|
||
or user_fcb+0Eh, 40h
|
||
|
||
cpm_74b: ; CODE XREF: F_BDOS_74+26j
|
||
; F_BDOS_74+43j ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
F_BDOS_75: ; DATA XREF: bdos:25DAo
|
||
mov si, dx
|
||
mov di, offset int13_func
|
||
push ds
|
||
mov ds, fs_param_ds
|
||
mov cx, 0Ah
|
||
rep movsb
|
||
pop ds
|
||
mov dl, int13_drive
|
||
call tmpselect_dir
|
||
call flushx
|
||
mov ax, word ptr int13_buffer+2
|
||
mov word ptr fs_buffer, ax
|
||
mov ax, word ptr int13_buffer
|
||
mov word ptr fs_buffer+2, ax
|
||
mov al, int13_sectors
|
||
mov fs_rdwrcount, al
|
||
cmp int13_func, 3
|
||
jnb bdos75c
|
||
xor ah, ah
|
||
mov al, int13_sector
|
||
mov fs_sector, ax
|
||
mov ah, int13_head
|
||
mov al, int13_cylinder
|
||
mov fs_track, ax
|
||
cmp int13_func, 0
|
||
jnz bdos75_notread
|
||
mov al, 23h
|
||
call xios_rdwr
|
||
mov aret, ax
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
bdos75_notread: ; CODE XREF: F_BDOS_75+4Aj
|
||
cmp int13_func, 1
|
||
jnz bdos75_notwrite
|
||
call discard$both
|
||
mov al, 24h
|
||
call xios_rdwr
|
||
mov aret, ax
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
bdos75_notwrite: ; CODE XREF: F_BDOS_75+5Aj
|
||
mov fs_rdwrcount, 1
|
||
mov si, dph_dirbcb
|
||
mov si, [si]
|
||
|
||
bdos75a: ; CODE XREF: F_BDOS_75+81j
|
||
cmp byte ptr [si], 0FFh
|
||
jz bdos75b
|
||
mov bx, 12[si]
|
||
or bx, bx
|
||
jz bdos75b
|
||
mov si, bx
|
||
jmps bdos75a
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
bdos75b: ; CODE XREF: F_BDOS_75+76j
|
||
; F_BDOS_75+7Dj
|
||
mov byte ptr [si], 0FFh
|
||
mov ax, 10[si]
|
||
mov word ptr fs_buffer+2, ax
|
||
mov word ptr fs_buffer, ds
|
||
mov al, 23h
|
||
call xios_rdwr
|
||
mov aret, ax
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
bdos75c: ; CODE XREF: F_BDOS_75+31j
|
||
mov ax, word ptr int13_sector
|
||
xor dx, dx
|
||
div dpb_spt
|
||
mov fs_track, ax
|
||
mov fs_sector, dx
|
||
cmp int13_func, 4
|
||
jz bdos75d
|
||
mov al, 0Ah
|
||
call xios_rdwr
|
||
mov aret, ax
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
bdos75d: ; CODE XREF: F_BDOS_75+AEj
|
||
call discard$both
|
||
mov al, 0Bh
|
||
call xios_rdwr
|
||
mov aret, ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
discard$both: ; CODE XREF: F_BDOS_75+5Cp
|
||
; F_BDOS_75+B9p
|
||
mov bx, dph_dtabcb
|
||
call discard$data ; Called with BX->BCB chain head. Release all BCBs for a drive
|
||
jmp discard$dir ; Release all directory BCBs for a drive
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
log$fxs db 0Ch, 2, 3, 4, 6, 9, 0Ah, 0Dh, 11h, 1Ch, 1Dh, 1Fh, 20h
|
||
db 0,0,0,0
|
||
; DATA XREF: tst$log$fxs+7o
|
||
rw$fxs db 5, 7, 8, 0Fh, 10h, 16h, 0, 0
|
||
; Read or write functions
|
||
sc$fxs db 2, 3, 5, 0, 0
|
||
; Close or search functions
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
srch_fat: ; CODE XREF: F_SFIRST+41j
|
||
popf
|
||
pushf
|
||
jnz srch_fat1
|
||
call set$end$dir
|
||
mov ff2c_extent, 0
|
||
|
||
srch_fat1: ; CODE XREF: srch_fat+2j
|
||
cmp cl, 0
|
||
jz srch_fat2
|
||
mov bx, offset user_fcb+0Ch
|
||
cmp byte ptr [bx], 3Fh
|
||
mov cl, 2
|
||
jz srch_fat2
|
||
mov cl, 3
|
||
mov al, [bx]
|
||
xor ah, ah
|
||
mov ff2c_extent, ax
|
||
|
||
srch_fat2: ; CODE XREF: srch_fat+10j srch_fat+1Aj
|
||
cmp cl, 3
|
||
jnb srch_fat3
|
||
test ff2c_extent, 0FFFFh
|
||
jz srch_fat3
|
||
dec dcnt
|
||
|
||
srch_fat3: ; CODE XREF: srch_fat+28j srch_fat+30j
|
||
mov searchl, cl
|
||
|
||
srch_fat4: ; CODE XREF: srch_fat+5Fj srch_fat+6Ej
|
||
; ...
|
||
mov cl, searchl
|
||
xor ch, ch
|
||
call fat_search1
|
||
or ax, ax
|
||
jnz srch_fat5
|
||
popf
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
srch_fat5: ; CODE XREF: srch_fat+45j
|
||
cmp searchl, 2
|
||
jb srch_fat6
|
||
mov bx, ax
|
||
test byte ptr 11[bx], 10h
|
||
jz srch_fat6
|
||
test fcb_is_for_dir, 0FFh
|
||
jz srch_fat4
|
||
|
||
srch_fat6: ; CODE XREF: srch_fat+50j srch_fat+58j
|
||
cmp searchl, 3
|
||
jnz srch_fat7
|
||
call fat_extents
|
||
cmp ax, 0FFFFh
|
||
jz srch_fat4
|
||
|
||
srch_fat7: ; CODE XREF: srch_fat+66j
|
||
popf
|
||
jnz srch_fat8
|
||
cmp searchl, 0
|
||
jnz srch_fat8
|
||
jmp srch_fat12
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
srch_fat8: ; CODE XREF: srch_fat+71j srch_fat+78j
|
||
pushf
|
||
mov bx, p_dirent
|
||
test byte ptr 11[bx], 8
|
||
jnz srch_fat4
|
||
popf
|
||
push es
|
||
mov es, userdmaseg
|
||
mov di, userdma
|
||
mov bx, p_dirent
|
||
cmp byte ptr [bx], 0
|
||
jz srch_fat9
|
||
cmp byte ptr [bx], 0E5h
|
||
jnz srch_fat10
|
||
|
||
srch_fat9: ; CODE XREF: srch_fat+99j
|
||
mov al, 0E5h
|
||
stosb
|
||
xor ax, ax
|
||
mov cx, 7Fh
|
||
rep stosb
|
||
jmps srch_fat11
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
srch_fat10: ; CODE XREF: srch_fat+9Ej
|
||
call fat_extents
|
||
xor bx, bx
|
||
push bx
|
||
push ax
|
||
push di
|
||
call fat_fcb_to_cpm
|
||
pop di
|
||
pop bx
|
||
pop ax
|
||
add di, 20h
|
||
mov cx, 20h
|
||
rep stosw
|
||
call fat_to_sfcb ; Generate a fake CP/M SFCB [datestamp] record
|
||
inc ff2c_extent
|
||
call fat_extents
|
||
cmp ax, 0FFFFh
|
||
jnz srch_fat11
|
||
mov ff2c_extent, 0
|
||
|
||
srch_fat11: ; CODE XREF: srch_fat+AAj srch_fat+CFj
|
||
pop es
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
srch_fat12: ; CODE XREF: srch_fat+7Aj srch_fat+F4j
|
||
mov bx, p_dirent
|
||
mov al, [bx]
|
||
cmp al, 0
|
||
jz srch_fat15
|
||
cmp al, 0E5h
|
||
jz srch_fat13
|
||
test byte ptr 11[bx], 8
|
||
jnz srch_fat14
|
||
|
||
srch_fat13: ; CODE XREF: srch_fat+E5j
|
||
sub cx, cx
|
||
call fat_search1
|
||
test bx, bx
|
||
jnz srch_fat12
|
||
jmps srch_fat15
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
srch_fat14: ; CODE XREF: srch_fat+EBj
|
||
mov es, userdmaseg
|
||
mov di, userdma
|
||
mov al, 20h
|
||
stosb
|
||
lea si, [bx]
|
||
mov cx, 0Bh
|
||
rep movsb
|
||
jmps srch_fat16
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
srch_fat15: ; CODE XREF: srch_fat+E1j srch_fat+F6j
|
||
mov es, userdmaseg
|
||
mov di, userdma
|
||
mov al, 20h
|
||
mov cx, 0Ch
|
||
rep stosb
|
||
|
||
srch_fat16: ; CODE XREF: srch_fat+10Aj
|
||
push es
|
||
push di
|
||
push ds
|
||
pop es
|
||
|
||
call set$end$dir
|
||
sub cx, cx
|
||
call fat_search1
|
||
pop di
|
||
pop es
|
||
|
||
mov al, 21h
|
||
stosb
|
||
xor ax, ax
|
||
stosw
|
||
mov al, 80h
|
||
stosb
|
||
stosb
|
||
stosb
|
||
xor ax, ax
|
||
mov cx, 27h
|
||
rep stosw
|
||
mov al, 21h
|
||
stosb
|
||
xor al, al
|
||
mov cx, 1Fh
|
||
rep stosb
|
||
push ds
|
||
pop es
|
||
|
||
test byte ptr 11[bx], 8
|
||
jnz srch_fatret
|
||
jmp set$end$dir
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
srch_fatret: ; CODE XREF: srch_fat+14Bj
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
c2f_to_extent: ; CODE XREF: fat_rdwr+363p
|
||
xor ah, ah
|
||
mov al, c2f_S2
|
||
mov cl, 5
|
||
shl ax, cl
|
||
or al, c2f_EX
|
||
mov ff2c_extent, ax
|
||
mov ax, word ptr user_fcb+1Ch
|
||
mov dx, word ptr user_fcb+1Eh
|
||
jmps size_to_cpm
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_extents: ; CODE XREF: srch_fat+68p srch_fat+ACp
|
||
; ...
|
||
mov bx, p_dirent
|
||
mov ax, 28[bx]
|
||
mov dx, 30[bx] ; File size
|
||
|
||
size_to_cpm: ; CODE XREF: c2f_to_extent+17j
|
||
mov bx, ax
|
||
mov cl, 0Eh
|
||
call shr_dxax_cl ; Size in extents
|
||
and bx, 3FFFh
|
||
or bx, bx ; Size in current extent
|
||
jnz size_ok
|
||
or ax, ax
|
||
jz size_ok
|
||
dec ax
|
||
mov bx, 4000h ; Round up
|
||
|
||
size_ok: ; CODE XREF: fat_extents+17j
|
||
; fat_extents+1Bj
|
||
cmp ax, ff2c_extent
|
||
jnb fat_exte2
|
||
mov ax, 0FFFFh
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_exte2: ; CODE XREF: fat_extents+25j
|
||
ja fat_exte3
|
||
mov ax, bx
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_exte3: ; CODE XREF: fat_extents+2Bj
|
||
mov ax, 4000h
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_fcb_to_cpm: ; CODE XREF: srch_fat+B4p cpm_opendir+16Dp
|
||
; ...
|
||
push bp
|
||
mov bp, sp
|
||
mov di, 4[bp]
|
||
test word ptr 8[bp], 0FFFFh
|
||
jnz ff2c_skipuser
|
||
mov al, usrcode ; User ID
|
||
mov es:[di], al
|
||
|
||
ff2c_skipuser: ; CODE XREF: fat_fcb_to_cpm+Bj
|
||
xor bx, bx
|
||
mov si, p_dirent
|
||
|
||
ff2c_copyname: ; CODE XREF: fat_fcb_to_cpm+63j
|
||
cmp bl, 0Bh
|
||
jnb ff2c_namedone
|
||
xor al, al
|
||
cmp bl, 4
|
||
ja ff2c_notFattr
|
||
mov al, 12[si]
|
||
mov cl, bl ; Generate F1-F4 from dir entry
|
||
shl al, cl
|
||
and al, 80h
|
||
jmps ff2c_notT3
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
ff2c_notFattr: ; CODE XREF: fat_fcb_to_cpm+23j
|
||
cmp bl, 8
|
||
jnz ff2c_notT1
|
||
test byte ptr 11[si], 1; R/O
|
||
jz ff2c_notT3
|
||
jmps ff2c_haveattr
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
ff2c_notT1: ; CODE XREF: fat_fcb_to_cpm+33j
|
||
cmp bl, 9
|
||
jnz ff2c_notT2
|
||
test byte ptr 11[si], 4; SYS
|
||
jz ff2c_notT3
|
||
jmps ff2c_haveattr
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
ff2c_notT2: ; CODE XREF: fat_fcb_to_cpm+40j
|
||
cmp bl, 0Ah
|
||
jnz ff2c_notT3 ; ARCV
|
||
test byte ptr 11[si], 20h
|
||
jnz ff2c_notT3
|
||
|
||
ff2c_haveattr: ; CODE XREF: fat_fcb_to_cpm+3Bj
|
||
; fat_fcb_to_cpm+48j
|
||
mov al, 80h
|
||
|
||
ff2c_notT3: ; CODE XREF: fat_fcb_to_cpm+2Ej
|
||
; fat_fcb_to_cpm+39j
|
||
; ...
|
||
mov dl, [bx+si]
|
||
and dl, 7Fh
|
||
or dl, al
|
||
mov es:1[bx+di], dl
|
||
inc bx
|
||
jmps ff2c_copyname
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
ff2c_namedone: ; CODE XREF: fat_fcb_to_cpm+1Cj
|
||
mov ax, ff2c_extent
|
||
and ax, 1Fh
|
||
mov es:12[di], al ; Extent, low bits
|
||
mov ax, 6[bp]
|
||
mov dl, al
|
||
and dl, 7Fh
|
||
shl ax, 1
|
||
mov al, dl
|
||
or al, al
|
||
jz ff2c_bytesize
|
||
inc ah
|
||
|
||
ff2c_bytesize: ; CODE XREF: fat_fcb_to_cpm+7Dj
|
||
test word ptr 8[bp], 0FFFFh
|
||
jnz ff2c_S2
|
||
mov es:13[di], al ; File size
|
||
|
||
ff2c_S2: ; CODE XREF: fat_fcb_to_cpm+86j
|
||
mov bx, ff2c_extent
|
||
mov cl, 5
|
||
shr bx, cl
|
||
mov es:14[di], bl ; Extent, high
|
||
mov es:15[di], ah
|
||
mov al, 80h ; Flags for bytes 16/17
|
||
test byte ptr 11[si], 10h; Directory?
|
||
jz ff2c_isdir
|
||
or al, 40h ; Bit 6 => dir
|
||
|
||
ff2c_isdir: ; CODE XREF: fat_fcb_to_cpm+A2j
|
||
test byte ptr 11[si], 2
|
||
jz ff2c_hid
|
||
or al, 20h ; Bit 5 => hidden
|
||
|
||
ff2c_hid: ; CODE XREF: fat_fcb_to_cpm+AAj
|
||
mov bx, dcnt
|
||
or al, bh
|
||
mov es:16[di], al
|
||
mov es:17[di], al
|
||
mov es:18[di], bl
|
||
xor ax, ax
|
||
mov es:19[di], al
|
||
mov es:20[di], ax
|
||
lea di, 22[di]
|
||
lea si, 22[si]
|
||
mov cx, 5
|
||
rep movsw
|
||
pop bp
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Generate a fake CP/M SFCB [datestamp] record
|
||
|
||
fat_to_sfcb: ; CODE XREF: srch_fat+C2p
|
||
mov al, 21h
|
||
stosb
|
||
mov bx, p_dirent
|
||
mov ax, 24[bx]
|
||
mov bx, 22[bx] ; Got a DOS datestamp?
|
||
or ax, bx
|
||
jnz f2sfcb_1
|
||
mov cx, 1Fh
|
||
rep stosb
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f2sfcb_1: ; CODE XREF: fat_to_sfcb+Fj
|
||
call fat_get_date
|
||
call dos_date_to_cpm
|
||
xor ax, ax
|
||
stosw
|
||
stosw
|
||
mov si, offset fs_days
|
||
movsw
|
||
movsw
|
||
mov cx, 15h
|
||
rep stosb
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_get_date: ; CODE XREF: fat_to_sfcb+17p
|
||
; fat_timedate+14p
|
||
mov bx, p_dirent
|
||
mov ax, 24[bx]
|
||
mov dl, al
|
||
and dl, 1Fh
|
||
mov fat_year, dl
|
||
mov cl, 5
|
||
shr ax, cl
|
||
mov dl, al
|
||
and dl, 0Fh
|
||
mov fat_month, dl
|
||
mov cl, 4
|
||
shr ax, cl
|
||
mov fat_day, al
|
||
mov ax, 22[bx]
|
||
mov dl, al
|
||
and dl, 1Fh
|
||
mov fat_second, dl
|
||
mov cl, 5
|
||
shr ax, cl
|
||
mov dl, al
|
||
and dl, 3Fh
|
||
mov fat_minute, dl
|
||
mov cl, 6
|
||
shr ax, cl
|
||
mov fat_hour, al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_set_date: ; CODE XREF: fat_make+93p fat_make+100p
|
||
; ...
|
||
mov bx, p_dirent
|
||
mov al, fat_day
|
||
mov cl, 4
|
||
shl ax, cl
|
||
add al, fat_month
|
||
mov cl, 5
|
||
shl ax, cl
|
||
add al, fat_year
|
||
mov 24[bx], ax
|
||
mov al, fat_hour
|
||
mov cl, 6
|
||
shl ax, cl
|
||
add al, fat_minute
|
||
mov cl, 5
|
||
shl ax, cl
|
||
add al, fat_second
|
||
mov 22[bx], ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
dos_date_to_cpm: ; CODE XREF: fat_to_sfcb+1Ap
|
||
; fat_timedate+17p
|
||
xor bx, bx
|
||
mov bl, fat_month
|
||
dec bx
|
||
add bx, bx
|
||
mov ax, monthDays[bx]
|
||
push ax
|
||
xor ah, ah
|
||
mov al, fat_day
|
||
inc ax
|
||
inc ax
|
||
mov bx, 365
|
||
mul bx
|
||
pop bx
|
||
add ax, bx
|
||
xor bx, bx
|
||
mov bl, fat_year
|
||
add ax, bx
|
||
push ax
|
||
mov bl, fat_month
|
||
xor bh, bh
|
||
mov al, fat_day
|
||
add al, 4
|
||
xor ah, ah
|
||
call leap_year_test
|
||
pop bx
|
||
add ax, bx
|
||
mov fs_days, ax
|
||
mov al, fat_hour
|
||
call pack_bcd
|
||
mov fs_hours, al
|
||
mov al, fat_minute
|
||
call pack_bcd
|
||
mov fs_minutes, al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_today: ; CODE XREF: fat_make+90p fat_truncate+96p
|
||
mov si, offset date_days
|
||
mov di, offset fs_days
|
||
mov cx, 5
|
||
rep movsb
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
timestamp_2_fat: ; CODE XREF: fat_bdos_74+15p
|
||
mov cx, offset rlr
|
||
mov bx, fs_days
|
||
dec bx
|
||
|
||
ts2fat_year1: ; CODE XREF: timestamp_2_fat+18j
|
||
mov dx, 365
|
||
test cl, 3
|
||
jnz ts2fat_noleap
|
||
inc dx
|
||
|
||
ts2fat_noleap: ; CODE XREF: timestamp_2_fat+Ej
|
||
cmp bx, dx
|
||
jb ts2fat_nextyear
|
||
sub bx, dx
|
||
inc cx
|
||
jmps ts2fat_year1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
ts2fat_nextyear: ; CODE XREF: timestamp_2_fat+13j
|
||
xor dx, dx
|
||
test cl, 3
|
||
jnz ts2fat_feb
|
||
cmp bx, 59
|
||
jbe ts2fat_feb
|
||
mov dx, 1
|
||
|
||
ts2fat_feb: ; CODE XREF: timestamp_2_fat+1Fj
|
||
; timestamp_2_fat+24j
|
||
mov si, 18h
|
||
|
||
tst2fat_months1: ; CODE XREF: timestamp_2_fat+3Aj
|
||
dec si
|
||
dec si
|
||
or si, si
|
||
jz ts2fat_months2
|
||
mov ax, monthDays[si]
|
||
add ax, dx
|
||
cmp ax, bx
|
||
ja tst2fat_months1
|
||
|
||
ts2fat_months2: ; CODE XREF: timestamp_2_fat+30j
|
||
sub cx, 50h
|
||
mov fat_day, cl
|
||
mov ax, si
|
||
shr al, 1
|
||
inc al
|
||
mov fat_month, al
|
||
mov ax, monthDays[si]
|
||
sub bx, ax
|
||
sub bx, dx
|
||
inc bl
|
||
mov fat_year, bl
|
||
mov al, fs_hours
|
||
call bcd2bin
|
||
mov fat_hour, al
|
||
mov al, fs_minutes
|
||
call bcd2bin
|
||
mov fat_minute, al
|
||
mov al, fs_seconds
|
||
call bcd2bin
|
||
shr al, 1
|
||
mov fat_second, al
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
leap_year_test: ; CODE XREF: dos_date_to_cpm+33p
|
||
mov dx, ax
|
||
shr ax, 1
|
||
shr ax, 1
|
||
test dx, 3
|
||
jnz lyt_ret
|
||
dec bx
|
||
add bx, bx
|
||
mov bx, monthDays[bx]
|
||
cmp bx, 59
|
||
jnb lyt_ret
|
||
dec ax
|
||
|
||
lyt_ret: ; CODE XREF: leap_year_test+Aj
|
||
; leap_year_test+16j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
pack_bcd: ; CODE XREF: dos_date_to_cpm+3Fp
|
||
; dos_date_to_cpm+48p
|
||
xor ah, ah
|
||
|
||
pack_b1: ; CODE XREF: pack_bcd+Bj
|
||
cmp al, 0Ah
|
||
jb pack_b2
|
||
sub al, 0Ah
|
||
add ah, 10h
|
||
jmps pack_b1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
pack_b2: ; CODE XREF: pack_bcd+4j
|
||
add al, ah
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
bcd2bin: ; CODE XREF: timestamp_2_fat+5Dp
|
||
; timestamp_2_fat+66p
|
||
; ...
|
||
xor ah, ah
|
||
|
||
bcd2bin1: ; CODE XREF: bcd2bin+Bj
|
||
cmp al, 10h
|
||
jb bcd2bin2
|
||
sub al, 10h
|
||
add ah, 0Ah
|
||
jmps bcd2bin1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
bcd2bin2: ; CODE XREF: bcd2bin+4j
|
||
add al, ah
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
lookup_dirent: ; CODE XREF: fat_open+1Fp fat_close+22p
|
||
; ...
|
||
call set$end$dir
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_dirent_next: ; CODE XREF: fat_delete+10p
|
||
; fat_delete+96p ...
|
||
mov cx, 2
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_search1: ; CODE XREF: srch_fat+40p srch_fat+EFp
|
||
; ...
|
||
push cx
|
||
call read$subdir
|
||
pop cx
|
||
mov p_dirent, ax
|
||
mov bx, ax
|
||
or ax, ax
|
||
jz scd_4
|
||
cmp cl, 0
|
||
jnz scd_1
|
||
|
||
scd_retbx: ; CODE XREF: fat_search1+1Fj
|
||
; fat_search1+23j
|
||
mov ax, bx
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
scd_1: ; CODE XREF: fat_search1+11j
|
||
cmp cl, 1
|
||
jnz scd_2
|
||
mov al, [bx]
|
||
or al, al
|
||
jz scd_retbx
|
||
cmp al, 0E5h
|
||
jz scd_retbx
|
||
jmps scd_next
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
scd_2: ; CODE XREF: fat_search1+19j
|
||
push bx
|
||
call get_cwd_cluster
|
||
pop bx
|
||
jnz scd_5
|
||
mov ax, dcnt
|
||
mov si, cdrmaxa
|
||
cmp ax, [si]
|
||
jb scd_5
|
||
|
||
scd_3: ; CODE XREF: fat_search1+45j
|
||
xor ax, ax
|
||
mov p_dirent, ax
|
||
|
||
scd_4: ; CODE XREF: fat_search1+Cj
|
||
mov bx, ax
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
scd_5: ; CODE XREF: fat_search1+2Cj
|
||
; fat_search1+37j
|
||
mov al, [bx]
|
||
or al, al
|
||
jz scd_3
|
||
cmp al, 0E5h
|
||
jz scd_next
|
||
test byte ptr 11[bx], 8
|
||
jnz scd_next
|
||
call fat_matchname
|
||
or al, al
|
||
jz scd_next
|
||
mov ax, p_dirent
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
scd_next: ; CODE XREF: fat_search1+25j
|
||
; fat_search1+49j ...
|
||
jmp fat_search1
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_matchname: ; CODE XREF: fat_search1+51p
|
||
mov al, ch
|
||
push cx
|
||
xor ah, ah
|
||
mov si, offset user_fcb+1
|
||
add si, ax
|
||
mov cx, 0Bh
|
||
|
||
fat_matchn1: ; CODE XREF: fat_matchname+23j
|
||
mov al, [si]
|
||
xor al, [bx]
|
||
test al, 7Fh
|
||
jz fat_matchn2
|
||
mov al, [si]
|
||
xor al, 3Fh
|
||
test al, 7Fh
|
||
jz fat_matchn2
|
||
xor al, al
|
||
pop cx
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_matchn2: ; CODE XREF: fat_matchname+13j
|
||
; fat_matchname+1Bj
|
||
inc si
|
||
inc bx
|
||
loop fat_matchn1
|
||
or al, 1
|
||
pop cx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
shl_dxax_cl: ; CODE XREF: fat_truncate+2Fp
|
||
xor ch, ch
|
||
|
||
shl_loop: ; CODE XREF: shl_dxax_cl+6j
|
||
shl ax, 1
|
||
rcl dx, 1
|
||
loop shl_loop
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
shr_dxax_cl: ; CODE XREF: fat_extents+Ep
|
||
; size_to_records+Fp
|
||
; ...
|
||
xor ch, ch
|
||
|
||
shr_loop: ; CODE XREF: shr_dxax_cl+6j
|
||
shr dx, 1
|
||
rcr ax, 1
|
||
loop shr_loop
|
||
retn
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
mul cx
|
||
push dx
|
||
xchg ax, bx
|
||
mul cx
|
||
pop dx
|
||
add ax, dx
|
||
xchg ax, bx
|
||
retn
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_muldiv: ; CODE XREF: fat_rdwr+CDp
|
||
jcxz fat_mdiv0
|
||
cmp cx, 1
|
||
jnz fat_mdiv1
|
||
mov dx, bx
|
||
xor cx, cx
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_mdiv1: ; CODE XREF: fat_muldiv+5j
|
||
xor dx, dx
|
||
xchg ax, bx
|
||
push ax
|
||
div cx
|
||
mov di, ax
|
||
mul cx
|
||
pop dx
|
||
sub dx, ax
|
||
mov ax, bx
|
||
div cx
|
||
mov cx, dx
|
||
mov dx, di
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_mdiv0: ; CODE XREF: fat_muldivj
|
||
mov ax, 0FFFFh
|
||
mov dx, ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_open: ; CODE XREF: F_OPEN+Dj
|
||
mov cl, 0C0h ; Get F5' and F6'
|
||
call get_sharemode
|
||
test fcb_is_for_dir, 0FFh
|
||
;
|
||
; Allow open of "." to work in the root directory even though it has
|
||
; no "." entry.
|
||
;
|
||
jz fat_open_notdot ; Not directory, so can't be '.'
|
||
call get_cwd_cluster
|
||
jnz fat_open_notdot ; Got cluster, so not the root
|
||
cmp user_fcb+1, '.'
|
||
jnz fat_open_notdot ; Not "."
|
||
cmp user_fcb+2, ' '
|
||
jz diropen_dot
|
||
|
||
fat_open_notdot: ; CODE XREF: fat_open+Aj fat_open+Fj
|
||
; ...
|
||
call lookup_dirent
|
||
or ax, ax
|
||
jnz open_got_dirent
|
||
test fcb_is_for_dir, 0FFh
|
||
jz open_fail
|
||
call get_cwd_cluster
|
||
jnz open_fail
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
cpm_opendir: ; CODE XREF: F_OPEN+17p
|
||
cmp user_fcb+1, '.'
|
||
jnz open_fail
|
||
cmp user_fcb+2, ' '
|
||
jnz open_fail
|
||
;
|
||
; CP/M only allows the fake "."
|
||
;
|
||
|
||
diropen_dot: ; CODE XREF: fat_open+1Dj fat_close+12j
|
||
mov ax, offset user_fcb+2
|
||
mov p_dirent, ax
|
||
mov user_fcb+0Dh, 10h; Faux "." entry for root
|
||
mov word ptr user_fcb+1Ch, 0
|
||
jmps open_got_dirent
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
open_fail: ; CODE XREF: fat_open+2Bj fat_open+30j
|
||
; ...
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
open_got_dirent: ; CODE XREF: fat_open+24j cpm_opendir+1Fj
|
||
test fcb_is_for_dir, 0FFh
|
||
jnz opendir_got
|
||
jmp open_file
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
opendir_got: ; CODE XREF: cpm_opendir+29j
|
||
xor bx, bx
|
||
mov bl, user_fcb+0Ch; BL = 0 for current drive,
|
||
; 1-3 to assign floating drive
|
||
cmp bl, 4
|
||
jnb open_fail
|
||
mov di, ax
|
||
test byte ptr 11[di], 10h
|
||
jz open_fail ; Not actually a directory
|
||
or bl, bl
|
||
jz opendir_setcwd
|
||
add bl, 0Ch
|
||
jmps assign_floatdrv
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
opendir_setcwd: ; CODE XREF: cpm_opendir+43j
|
||
cmp cur_drvdir, 0
|
||
jz chdir_fromroot
|
||
mov bl, chdir_drive
|
||
jmps assign_floatdrv
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
chdir_fromroot: ; CODE XREF: cpm_opendir+4Fj
|
||
mov bl, fcbdsk
|
||
sub bl, 1
|
||
jnb chdir_notfloat
|
||
push ds
|
||
mov ds, rlr
|
||
|
||
mov bl, proc_drive
|
||
pop ds
|
||
|
||
jmps assign_floatdrv
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
chdir_notfloat: ; CODE XREF: cpm_opendir+5Ej
|
||
and bl, 1Fh ; What? You support drives >P:?
|
||
cmp bl, 0Dh
|
||
jb chdir_realdrv
|
||
cmp bl, 0Fh
|
||
jbe assign_floatdrv
|
||
|
||
chdir_realdrv: ; CODE XREF: cpm_opendir+72j
|
||
mov bl, fs_fcbdrive
|
||
|
||
assign_floatdrv: ; CODE XREF: cpm_opendir+48j
|
||
; cpm_opendir+55j ...
|
||
push ds
|
||
mov ds, rlr
|
||
|
||
mov si, proc_dirname
|
||
pop ds
|
||
|
||
or si, si ; Do we have a current-directory
|
||
; structure to hand?
|
||
mov dx, si ; If not, fine.
|
||
jz dn_released
|
||
cmp word ptr 32[si], 1
|
||
jz dn_ref_was_1 ; If ref count is 1, take over the
|
||
; record which has now become free.
|
||
dec word ptr 32[si]
|
||
|
||
dn_released: ; CODE XREF: cpm_opendir+8Bj
|
||
pushf
|
||
cli
|
||
mov si, free_dirnames; Need a new dirname. Allocate one.
|
||
or si, si
|
||
jnz got_new_dirname
|
||
popf
|
||
jmps disk_error_11
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
got_new_dirname: ; CODE XREF: cpm_opendir+9Ej
|
||
mov ax, [si]
|
||
mov free_dirnames, ax
|
||
popf
|
||
push es
|
||
mov es, rlr
|
||
|
||
mov es:proc_dirname, si
|
||
pop es
|
||
or dx, dx ; Are we copying an existing structure?
|
||
jz gnd_blank ; No. Init to blanks.
|
||
mov bp, si
|
||
mov di, si ; Yes. Copy the template.
|
||
mov si, dx
|
||
mov cx, 12h
|
||
rep movsw
|
||
mov si, bp
|
||
jmps gnd_inited
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
gnd_blank: ; CODE XREF: cpm_opendir+B6j
|
||
xor ax, ax
|
||
mov di, si
|
||
mov cx, 12h
|
||
rep stosw
|
||
|
||
gnd_inited: ; CODE XREF: cpm_opendir+C5j
|
||
mov word ptr 32[si], 1; Set ref count to 1.
|
||
|
||
dn_ref_was_1: ; CODE XREF: cpm_opendir+91j
|
||
add bx, bx ; BX = drive ID
|
||
add si, bx
|
||
mov bx, [si] ; Is there a drvdir structure for
|
||
; this drive?
|
||
or bx, bx
|
||
jz need_new_dirdat
|
||
dec word ptr 8[bx] ; Decrease ref count
|
||
jz got_dirdata ; If it was one, take over the now-
|
||
; empty record.
|
||
|
||
need_new_dirdat: ; CODE XREF: cpm_opendir+DDj
|
||
push si
|
||
call dirdata_alloc
|
||
pop si
|
||
jnz got_dirdata
|
||
|
||
disk_error_11: ; CODE XREF: cpm_opendir+A1j
|
||
mov ah, 0Bh ; No room in system lock list
|
||
jmp disk_error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
got_dirdata: ; CODE XREF: cpm_opendir+E2j
|
||
; cpm_opendir+E9j
|
||
mov [si], bx ; Point dirname structure at this drvdir
|
||
mov al, curdsk
|
||
mov [bx], al ; Drive
|
||
mov si, lsn$add
|
||
mov al, 2[si]
|
||
mov 1[bx], al ; Filesystem type
|
||
mov di, p_dirent
|
||
mov dx, 26[di]
|
||
cmp dx, dname_cluster
|
||
jnz not_opening_dot
|
||
mov si, cur_drvdir
|
||
or si, si
|
||
jz not_opening_dot
|
||
mov ax, 2[si] ; If opening ".", just keep what we
|
||
; had before.
|
||
mov cx, 4[si]
|
||
jmps setup_dirdata
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
not_opening_dot: ; CODE XREF: cpm_opendir+10Cj
|
||
; cpm_opendir+114j
|
||
mov ax, dname_cluster
|
||
mov cx, dcnt
|
||
|
||
setup_dirdata: ; CODE XREF: cpm_opendir+11Cj
|
||
mov 2[bx], ax ; Parent cluster
|
||
mov 4[bx], cx ; Offset of entry in parent dir?
|
||
mov 6[bx], dx ; Cluster of directory
|
||
mov word ptr 8[bx], 1
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
open_file: ; CODE XREF: cpm_opendir+2Bj
|
||
mov bx, ax
|
||
test byte ptr 11[bx], 10h
|
||
jz open_file1
|
||
jmp open_fail
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
open_file1: ; CODE XREF: cpm_opendir+13Aj
|
||
cmp attributes, 80h ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
jnz open_file2
|
||
test byte ptr 11[bx], 1
|
||
jz open_file2
|
||
mov attributes, 20h ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
|
||
open_file2: ; CODE XREF: cpm_opendir+144j
|
||
; cpm_opendir+14Aj
|
||
mov al, user_fcb+0Ch
|
||
and al, 1Fh
|
||
xor ah, ah
|
||
mov ff2c_extent, ax
|
||
call fat_extents
|
||
cmp ax, 0FFFFh
|
||
jnz open_file3
|
||
inc ax
|
||
|
||
open_file3: ; CODE XREF: cpm_opendir+161j
|
||
mov bx, 0FFFFh
|
||
push bx
|
||
push ax
|
||
mov bx, offset user_fcb
|
||
push bx
|
||
call fat_fcb_to_cpm
|
||
add sp, 6
|
||
cmp user_fcb+20h, 0FFh
|
||
jnz open_file4
|
||
mov bx, p_dirent
|
||
mov al, 28[bx]
|
||
and al, 7Fh
|
||
mov user_fcb+20h, al
|
||
|
||
open_file4: ; CODE XREF: cpm_opendir+178j
|
||
or user_fcb+0Eh, 80h
|
||
mov open_G01, 0FFh
|
||
jmp openx1a
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fs_noop: ; CODE XREF: fat_close+36p
|
||
; fat_make+13Bp
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
get_sharemode: ; CODE XREF: fat_open+2p fat_make+2p
|
||
push cx
|
||
call get$atts
|
||
pop cx
|
||
and al, cl
|
||
cmp al, 0C0h ; Get sharing mode.
|
||
; If F5' and F6' set, F6' wins.
|
||
jnz gsm_1
|
||
mov al, 40h
|
||
|
||
gsm_1: ; CODE XREF: get_sharemode+9j
|
||
mov high$ext, al
|
||
shr al, 1
|
||
jnz gsm_2
|
||
mov al, 80h
|
||
|
||
gsm_2: ; CODE XREF: get_sharemode+12j
|
||
mov attributes, al ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_close: ; CODE XREF: F_CLOSE+Ej F_CLOSE+18j
|
||
; ...
|
||
test fcb_is_for_dir, 0FFh
|
||
jz fat_closefile
|
||
call get_cwd_cluster
|
||
jz not_in_subdir
|
||
xor bl, bl
|
||
mov user_fcb+0Ch, bl
|
||
jmp diropen_dot
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
not_in_subdir: ; CODE XREF: fat_close+Aj
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_closefile: ; CODE XREF: fat_close+5j
|
||
test byte ptr dpb_cks+1, 80h
|
||
jnz fcf_fixeddisc
|
||
mov dir_check_flag, 0F0h
|
||
|
||
fcf_fixeddisc: ; CODE XREF: fat_close+1Bj
|
||
call lookup_dirent
|
||
or ax, ax
|
||
jnz fcf_gotdirent
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fcf_gotdirent: ; CODE XREF: fat_close+27j
|
||
test user_fcb+0Eh, 80h
|
||
jnz fcf_fatclean
|
||
call write_FAT
|
||
|
||
fcf_fatclean: ; CODE XREF: fat_close+31j
|
||
call fs_noop
|
||
test user_fcb+0Eh, 40h
|
||
jz fcf_direntclean
|
||
call fat_wr_dirent
|
||
call call_xios_flush
|
||
|
||
fcf_direntclean: ; CODE XREF: fat_close+3Ej
|
||
and user_fcb+0Eh, 3Fh
|
||
or user_fcb+0Eh, 80h; Reset 'dirty' flags
|
||
jmp f_close_end
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_make: ; CODE XREF: F_MAKE+20j
|
||
mov cl, 80h
|
||
call get_sharemode
|
||
call lookup_dirent
|
||
or ax, ax
|
||
jz fmake_notfound
|
||
mov ah, 8
|
||
jmp disk_error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fmake_notfound: ; CODE XREF: fat_make+Aj
|
||
call set$end$dir
|
||
mov cx, 1
|
||
call fat_search1
|
||
or ax, ax
|
||
jnz fat_make5
|
||
call get_cwd_cluster
|
||
jz fat_make4
|
||
|
||
fat_make2: ; CODE XREF: fat_make+2Ej
|
||
cmp ax, dpb_clusters
|
||
jnb fat_make3
|
||
push ax
|
||
call fat_set_eof ; If FAT entry AX is unused, set it to EOF
|
||
pop bx
|
||
jmps fat_make2
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_make3: ; CODE XREF: fat_make+27j
|
||
mov nearby_cluster, bx
|
||
mov ax, bx
|
||
call alloc_cluster
|
||
mov newdir_cluster, ax
|
||
mov bx, ax
|
||
or ax, ax
|
||
jz fat_make4
|
||
mov ax, nearby_cluster
|
||
call fat_wcluster ; Set cluster[AX] to BX
|
||
mov ax, newdir_cluster
|
||
mov bx, max_cluster
|
||
call fat_wcluster ; Set cluster[AX] to BX
|
||
call write_FAT
|
||
mov ax, newdir_cluster
|
||
call wr_cluster
|
||
call set$end$dir
|
||
mov cx, 1
|
||
call fat_search1
|
||
or ax, ax
|
||
jnz fat_make5
|
||
|
||
fat_make4: ; CODE XREF: fat_make+21j fat_make+40j
|
||
; ...
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_make5: ; CODE XREF: fat_make+1Cj fat_make+66j
|
||
xor bx, bx
|
||
mov si, p_dirent
|
||
|
||
fat_make6: ; CODE XREF: fat_make+80j
|
||
cmp bl, 0Bh
|
||
jnb fat_make7
|
||
mov al, user_fcb+1[bx]
|
||
and al, 7Fh
|
||
mov [bx+si], al
|
||
inc bl
|
||
jmps fat_make6
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_make7: ; CODE XREF: fat_make+74j
|
||
xor ax, ax
|
||
mov di, p_dirent
|
||
add di, 0Ch
|
||
mov cx, 0Ah
|
||
rep stosw
|
||
call fat_today
|
||
call fat_set_date
|
||
mov si, p_dirent
|
||
test fcb_is_for_dir, 0FFh
|
||
jnz fat_mkdir
|
||
jmp fat_mkfile
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_mkdir: ; CODE XREF: fat_make+9Fj
|
||
mov byte ptr 11[si], 10h; Is directory
|
||
xor ax, ax
|
||
call alloc_cluster
|
||
or ax, ax
|
||
jz fat_make4
|
||
mov newdir_cluster, ax
|
||
mov si, p_dirent
|
||
mov 26[si], ax
|
||
mov bx, max_cluster
|
||
call fat_wcluster ; Set cluster[AX] to BX
|
||
call write_FAT
|
||
call seek$copy
|
||
call set_cwd_cdr
|
||
mov ax, newdir_cluster
|
||
call wr_cluster
|
||
mov ax, newdir_cluster
|
||
xor bx, bx
|
||
call clus_to_sec
|
||
call setdir1
|
||
mov si, word ptr fs_buffer+2
|
||
mov byte ptr [si], '.'
|
||
xor bx, bx
|
||
|
||
fat_mkdir1: ; CODE XREF: fat_make+F0j
|
||
cmp bl, 0Ah
|
||
jnb fat_mkdir2
|
||
mov byte ptr 1[bx+si], 20h ; ' '
|
||
inc bl
|
||
jmps fat_mkdir1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_mkdir2: ; CODE XREF: fat_make+E8j
|
||
mov byte ptr 11[si], 10h; Is directory
|
||
mov ax, newdir_cluster
|
||
mov 26[si], ax ; Cluster
|
||
mov p_dirent, si
|
||
call fat_set_date
|
||
mov si, word ptr fs_buffer+2
|
||
add si, 20h
|
||
mov word ptr [si], '..'
|
||
xor bx, bx
|
||
|
||
fat_mkdir3: ; CODE XREF: fat_make+11Bj
|
||
cmp bl, 9
|
||
jnb fat_mkdir4
|
||
mov byte ptr 2[bx+si], 20h ; ' '
|
||
inc bl
|
||
jmps fat_mkdir3
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_mkdir4: ; CODE XREF: fat_make+113j
|
||
mov byte ptr 11[si], 10h
|
||
call get_cwd_cluster
|
||
mov 26[si], ax
|
||
mov p_dirent, si
|
||
call fat_set_date
|
||
call seek
|
||
xor cx, cx
|
||
call wrbuff
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_mkfile: ; CODE XREF: fat_make+A1j
|
||
mov byte ptr 11[si], 20h ; ' '
|
||
call fs_noop
|
||
mov al, attributes ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
call set_cwd_cdr
|
||
call seek$copy
|
||
mov ff2c_extent, 0
|
||
mov bx, 0FFFFh
|
||
push bx
|
||
inc bx
|
||
push bx
|
||
mov bx, offset user_fcb
|
||
push bx
|
||
call fat_fcb_to_cpm
|
||
add sp, 6
|
||
or user_fcb+0Eh, 80h
|
||
mov al, open_G01
|
||
mov attributes, al ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
jmp openx1a
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
set_cwd_cdr: ; CODE XREF: fat_make+C8p fat_make+141p
|
||
call get_cwd_cluster
|
||
jnz set_cwd_cdr_0
|
||
jmp setcdr
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
set_cwd_cdr_0: ; CODE XREF: set_cwd_cdr+3j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_delete: ; CODE XREF: F_DELETE+Aj
|
||
call get$atts
|
||
xor ax, ax
|
||
|
||
fat_del1: ; CODE XREF: fat_delete+CAj
|
||
cmp al, 2
|
||
jb fat_delpass
|
||
jmp j_write_FAT
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_delpass: ; CODE XREF: fat_delete+7j
|
||
push ax
|
||
call set$end$dir
|
||
|
||
fat_del_dirloop: ; CODE XREF: fat_delete+59j
|
||
; fat_delete+BEj
|
||
call fat_dirent_next
|
||
or ax, ax
|
||
pop ax
|
||
jnz fat_del_matched
|
||
jmp fat_del_nxtfile
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_del_matched: ; CODE XREF: fat_delete+16j
|
||
test attributes, 80h ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
jz fat_del_file
|
||
retn ; Can't remove password; there is none
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_del_file: ; CODE XREF: fat_delete+20j
|
||
mov ah, 0FFh
|
||
or al, al
|
||
jnz fat_can_del_1
|
||
push ax
|
||
mov bx, p_dirent
|
||
test byte ptr 11[bx], 3; R/O or SYS?
|
||
jz fat_can_del
|
||
jmp rof$error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_can_del: ; CODE XREF: fat_delete+32j
|
||
mov bx, offset user_fcb
|
||
call chk$wild_cpm
|
||
pop ax
|
||
jz fat_can_del_1
|
||
inc al
|
||
|
||
fat_can_del_1: ; CODE XREF: fat_delete+27j
|
||
; fat_delete+3Ej
|
||
cmp al, 1
|
||
jnz fat_del_skipf
|
||
push ax
|
||
mov bx, p_dirent
|
||
test byte ptr 11[bx], 10h
|
||
jz target_is_file
|
||
push bx
|
||
mov bx, offset user_fcb
|
||
call chk$wild_cpm
|
||
pop bx
|
||
jz fat_del_dirloop
|
||
test fcb_is_for_dir, 0FFh
|
||
jz cant_delete
|
||
mov ax, 26[bx] ; Cluster
|
||
mov cx, 2
|
||
|
||
fat_can_del_2: ; CODE XREF: fat_delete+7Aj
|
||
mov bx, ax
|
||
push ax
|
||
call is_dir_empty
|
||
pop ax
|
||
jz cant_delete
|
||
call fat_set_eof ; If FAT entry AX is unused, set it to EOF
|
||
xor cx, cx
|
||
cmp ax, dpb_clusters
|
||
jb fat_can_del_2
|
||
jmps fat_del_ckinuse
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
cant_delete: ; CODE XREF: fat_delete+60j
|
||
; fat_delete+6Fj ...
|
||
pop ax
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_del_ckinuse: ; CODE XREF: fat_delete+7Cj
|
||
call is_obj_in_use
|
||
jnz cant_delete
|
||
dec dcnt
|
||
or dir_check_flag, 0Fh
|
||
mov dname_cluster, 0
|
||
call fat_dirent_next
|
||
or ax, ax
|
||
jz cant_delete
|
||
jmps fat_zap_dirent
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
target_is_file: ; CODE XREF: fat_delete+4Fj
|
||
call fs_nop2
|
||
|
||
fat_zap_dirent: ; CODE XREF: fat_delete+9Dj
|
||
mov bx, p_dirent
|
||
mov byte ptr [bx], 0E5h; Deleted
|
||
mov ax, 26[bx]
|
||
push bx
|
||
call fat_freechain ; Zap cluster chain
|
||
pop bx
|
||
call seek$copy
|
||
mov bx, offset user_fcb
|
||
call chk$wild_cpm
|
||
pop ax
|
||
jnz j_write_FAT
|
||
|
||
fat_del_skipf: ; CODE XREF: fat_delete+44j
|
||
push ax
|
||
jmp fat_del_dirloop
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_del_nxtfile: ; CODE XREF: fat_delete+18j
|
||
or ah, ah
|
||
jnz fat_del1_next
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_del1_next: ; CODE XREF: fat_delete+C3j
|
||
inc al
|
||
jmp fat_del1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
j_write_FAT: ; CODE XREF: fat_delete+9j
|
||
; fat_delete+BBj
|
||
jmp write_FAT
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
is_obj_in_use: ; CODE XREF: fat_delete+82p
|
||
cli
|
||
mov bx, p_dirent
|
||
mov dx, 26[bx]
|
||
mov si, bdos_conowner
|
||
|
||
ck_obj_in_use: ; CODE XREF: is_obj_in_use+3Dj
|
||
test si, si
|
||
jz ioiu_alldone
|
||
push ds
|
||
mov ds, si
|
||
|
||
mov di, proc_dirname
|
||
pop ds
|
||
|
||
test di, di
|
||
jz ioiu_nextproc ; No current dir structure
|
||
mov al, curdsk
|
||
mov cx, 10h
|
||
|
||
ioiu_chkdrive: ; CODE XREF: is_obj_in_use+33j
|
||
mov bx, [di]
|
||
test bx, bx
|
||
jz ioui_nextdrive
|
||
cmp al, [bx]
|
||
jnz ioui_nextdrive
|
||
cmp dx, 6[bx]
|
||
jz ioiu_driveinuse
|
||
|
||
ioui_nextdrive: ; CODE XREF: is_obj_in_use+26j
|
||
; is_obj_in_use+2Aj
|
||
inc di
|
||
inc di
|
||
loop ioiu_chkdrive
|
||
|
||
ioiu_nextproc: ; CODE XREF: is_obj_in_use+1Aj
|
||
push ds
|
||
mov ds, si
|
||
|
||
mov si, proc_nextseg
|
||
pop ds
|
||
|
||
jmps ck_obj_in_use
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
ioiu_driveinuse: ; CODE XREF: is_obj_in_use+2Fj
|
||
inc dx
|
||
|
||
ioiu_alldone: ; CODE XREF: is_obj_in_use+Ej
|
||
sti
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
is_dir_empty: ; CODE XREF: fat_delete+6Bp
|
||
mov scan_dirent, cx
|
||
xor bx, bx
|
||
call clus_to_sec
|
||
call setdir1
|
||
mov dir_record, ax
|
||
shl ax, 1
|
||
shl ax, 1
|
||
mov dir_entries, ax
|
||
mov bx, dpb_clustersize
|
||
mov cl, 7
|
||
add cl, dpb_psh
|
||
shr bx, cl
|
||
|
||
idempty_loop: ; CODE XREF: is_dir_empty+64j
|
||
push bx
|
||
call seek
|
||
call rdbuff
|
||
pop bx
|
||
mov cx, scan_dirent
|
||
mov dx, dir_entries
|
||
sub dx, cx
|
||
mov si, word ptr fs_buffer+2
|
||
|
||
idempty_scanrec: ; CODE XREF: is_dir_empty+3Dj
|
||
jcxz idempty_offset0
|
||
add si, 20h
|
||
loop idempty_scanrec
|
||
|
||
idempty_offset0: ; CODE XREF: is_dir_empty+38j
|
||
mov scan_dirent, cx
|
||
|
||
scan_dirents: ; CODE XREF: is_dir_empty+52j
|
||
dec dx
|
||
jl dir_next_record
|
||
lodsb
|
||
cmp al, 0
|
||
jz dirent_blank
|
||
cmp al, 0E5h
|
||
jnz dirent_used
|
||
|
||
dirent_blank: ; CODE XREF: is_dir_empty+49j
|
||
add si, 1Fh
|
||
jmps scan_dirents
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
dirent_used: ; CODE XREF: is_dir_empty+4Dj
|
||
xor ax, ax
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
dir_next_record: ; CODE XREF: is_dir_empty+44j
|
||
mov ax, dir_record
|
||
add bcb_record, ax
|
||
adc bcb_record_h, 0
|
||
dec bx
|
||
jnz idempty_loop
|
||
inc bx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_rename: ; CODE XREF: bdos:479Aj
|
||
call copy$user$no
|
||
mov dl, 1
|
||
call check$wild0
|
||
mov ah, 9
|
||
jz rename_wild
|
||
call set$end$dir
|
||
mov cx, 1002h ; Does new name exist?
|
||
call fat_search1
|
||
or ax, ax
|
||
jz fat_rename2
|
||
mov ah, 8
|
||
|
||
rename_wild: ; CODE XREF: fat_rename+Aj
|
||
add fs_param_low, 10h
|
||
mov cur_fcb_len, 0
|
||
jmp disk_error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rename2: ; CODE XREF: fat_rename+17j
|
||
call lookup_dirent
|
||
or ax, ax
|
||
jnz fat_rename3
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rename3: ; CODE XREF: fat_rename+2Dj
|
||
mov bx, ax
|
||
test byte ptr 11[bx], 10h
|
||
jz fat_rename4
|
||
jmp rof$error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rename4: ; CODE XREF: fat_rename+38j
|
||
call fs_nop2
|
||
xor bx, bx
|
||
mov si, p_dirent
|
||
|
||
fat_rename5: ; CODE XREF: fat_rename+55j
|
||
cmp bl, 0Bh
|
||
jnb fat_rename6
|
||
mov al, user_fcb+11h[bx]
|
||
and al, 7Fh
|
||
mov [bx+si], al
|
||
inc bl
|
||
jmps fat_rename5
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rename6: ; CODE XREF: fat_rename+49j
|
||
jmp seek$copy
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
f_attrib_fat: ; CODE XREF: F_ATTRIB+10j
|
||
call lookup_dirent
|
||
or ax, ax
|
||
jnz f_attrib_fat1
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_attrib_fat1: ; CODE XREF: f_attrib_fat+5j
|
||
call get$atts
|
||
test al, 40h ; Set size
|
||
jz dont_set_size ; Not asked to set size
|
||
mov cl, user_fcb+20h
|
||
and cl, 7Fh
|
||
or cl, cl
|
||
jz dont_set_size ; Passed size is 0
|
||
mov bx, p_dirent
|
||
mov ax, 28[bx]
|
||
mov dx, 30[bx] ; DXAX = file size
|
||
or ax, ax
|
||
jnz f_attrib_fat2
|
||
or dx, dx
|
||
jz dont_set_size
|
||
|
||
f_attrib_fat2: ; CODE XREF: f_attrib_fat+28j
|
||
test al, 7Fh
|
||
jz f_attrib_fat3
|
||
and al, 80h
|
||
jmps f_attrib_fat4
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_attrib_fat3: ; CODE XREF: f_attrib_fat+30j
|
||
sub ax, 80h
|
||
sbb dx, 0
|
||
|
||
f_attrib_fat4: ; CODE XREF: f_attrib_fat+34j
|
||
xor ch, ch
|
||
add ax, cx
|
||
adc dx, 0
|
||
mov 28[bx], ax
|
||
mov 30[bx], dx
|
||
|
||
dont_set_size: ; CODE XREF: f_attrib_fat+Fj
|
||
; f_attrib_fat+1Aj ...
|
||
call fs_nop2
|
||
xor bx, bx
|
||
mov si, p_dirent
|
||
|
||
set_attr_bits: ; CODE XREF: f_attrib_fat+9Cj
|
||
cmp bl, 0Bh
|
||
jnb f_attrib_fat12
|
||
mov ah, user_fcb+1[bx]
|
||
and ah, 80h
|
||
cmp bl, 4
|
||
jnb f_attrib_fat6
|
||
lea di, 12[si]
|
||
mov al, 80h
|
||
mov cl, bl
|
||
shr al, cl
|
||
jmps f_attrib_fat9
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_attrib_fat6: ; CODE XREF: f_attrib_fat+61j
|
||
cmp bl, 8
|
||
jb f_attrib_fat11
|
||
lea di, 11[si]
|
||
cmp bl, 8
|
||
jnz f_attrib_fat7
|
||
mov al, 1
|
||
jmps f_attrib_fat9
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_attrib_fat7: ; CODE XREF: f_attrib_fat+79j
|
||
cmp bl, 9
|
||
jnz f_attrib_fat8
|
||
mov al, 4
|
||
jmps f_attrib_fat9
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_attrib_fat8: ; CODE XREF: f_attrib_fat+82j
|
||
mov al, 20h
|
||
xor ah, 80h
|
||
|
||
f_attrib_fat9: ; CODE XREF: f_attrib_fat+6Cj
|
||
; f_attrib_fat+7Dj ...
|
||
test ah, 80h
|
||
jz f_attrib_fat10
|
||
or [di], al
|
||
jmps f_attrib_fat11
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_attrib_fat10: ; CODE XREF: f_attrib_fat+90j
|
||
not al
|
||
and [di], al
|
||
|
||
f_attrib_fat11: ; CODE XREF: f_attrib_fat+71j
|
||
; f_attrib_fat+94j
|
||
inc bl
|
||
jmps set_attr_bits
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
f_attrib_fat12: ; CODE XREF: f_attrib_fat+55j
|
||
jmp seek$copy
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_truncate: ; CODE XREF: F_TRUNCATE+10j
|
||
call get$atts
|
||
test user_fcb+23h, 0FCh
|
||
jz fat_trunc_1
|
||
|
||
fat_trunc_fail: ; CODE XREF: fat_truncate+12j
|
||
; fat_truncate+3Bj ...
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_trunc_1: ; CODE XREF: fat_truncate+8j
|
||
call lookup_dirent
|
||
or ax, ax
|
||
jz fat_trunc_fail
|
||
call fs_nop2
|
||
mov si, p_dirent
|
||
test byte ptr 11[si], 11h
|
||
jz fat_trunc_2
|
||
jmp rof$error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_trunc_2: ; CODE XREF: fat_truncate+1Fj
|
||
mov ax, word ptr user_fcb+21h
|
||
mov dl, user_fcb+23h
|
||
xor dh, dh
|
||
mov cl, 7
|
||
call shl_dxax_cl
|
||
add ax, 80h
|
||
adc dx, 0
|
||
cmp dx, 30[si]
|
||
ja fat_trunc_fail
|
||
jb fat_trunc_3
|
||
cmp ax, 28[si]
|
||
jnb fat_trunc_fail
|
||
|
||
fat_trunc_3: ; CODE XREF: fat_truncate+3Dj
|
||
mov 28[si], ax
|
||
mov 30[si], dx
|
||
or byte ptr 11[si], 20h
|
||
sub ax, 1
|
||
sbb dx, 0
|
||
mov cx, dpb_clustersize
|
||
div cx
|
||
mov bx, 26[si]
|
||
or bx, bx
|
||
jnz fat_trunc_5
|
||
|
||
fat_trunc_4: ; CODE XREF: fat_truncate+68j
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_trunc_5: ; CODE XREF: fat_truncate+5Fj
|
||
; fat_truncate+78j
|
||
cmp bx, dpb_clusters
|
||
jnb fat_trunc_4
|
||
or ax, ax
|
||
jz fat_trunc_6
|
||
dec ax
|
||
push ax
|
||
mov ax, bx
|
||
call fat_set_eof ; If FAT entry AX is unused, set it to EOF
|
||
mov bx, ax
|
||
pop ax
|
||
jmps fat_trunc_5
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_trunc_6: ; CODE XREF: fat_truncate+6Cj
|
||
mov ax, bx
|
||
push bx
|
||
call fat_set_eof ; If FAT entry AX is unused, set it to EOF
|
||
pop bx
|
||
cmp ax, dpb_clusters
|
||
jnb fat_trunc_7
|
||
push bx
|
||
call fat_freechain
|
||
pop ax
|
||
mov bx, max_cluster
|
||
call fat_wcluster ; Set cluster[AX] to BX
|
||
call write_FAT
|
||
|
||
fat_trunc_7: ; CODE XREF: fat_truncate+85j
|
||
call fat_today
|
||
call fat_set_date
|
||
jmp seek$copy
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_timedate: ; CODE XREF: F_TIMEDATE+Dj
|
||
call lookup_dirent
|
||
or ax, ax
|
||
jnz fat_timedate1
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_timedate1: ; CODE XREF: fat_timedate+5j
|
||
mov di, offset user_fcb+0Ch
|
||
mov cx, 4
|
||
xor ax, ax
|
||
rep stosw
|
||
call fat_get_date
|
||
call dos_date_to_cpm
|
||
mov si, offset fs_days
|
||
mov di, offset user_fcb+14h
|
||
movsw
|
||
movsw
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_bdos_74: ; CODE XREF: F_BDOS_74+10j
|
||
call lookup_dirent
|
||
or ax, ax
|
||
jnz fat_setstamp_1
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_setstamp_1: ; CODE XREF: fat_bdos_74+5j
|
||
mov si, offset passwd_buf+4
|
||
mov di, offset fs_days
|
||
movsw
|
||
movsw
|
||
xor al, al
|
||
stosb
|
||
call timestamp_2_fat
|
||
call fat_set_date
|
||
jmp seek$copy
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_size: ; CODE XREF: F_SIZE+7j
|
||
mov dx, 0FFFFh
|
||
push ax
|
||
push dx
|
||
call set$end$dir
|
||
|
||
fsize_next: ; CODE XREF: fat_size+2Cj
|
||
call fat_dirent_next
|
||
or ax, ax
|
||
jz fsize_nomatch
|
||
mov si, ax
|
||
pop dx
|
||
pop ax
|
||
cmp dx, 0FFFFh
|
||
;
|
||
; Take the size of the biggest matching file
|
||
;
|
||
jz fsize_gotsize
|
||
cmp dx, 30[si]
|
||
jb fsize_gotsize
|
||
ja fsize_haventgot
|
||
cmp ax, 28[si]
|
||
jnb fsize_haventgot
|
||
|
||
fsize_gotsize: ; CODE XREF: fat_size+16j fat_size+1Bj
|
||
mov ax, 28[si]
|
||
mov dx, 30[si]
|
||
|
||
fsize_haventgot: ; CODE XREF: fat_size+1Dj fat_size+22j
|
||
push ax
|
||
push dx
|
||
jmps fsize_next
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fsize_nomatch: ; CODE XREF: fat_size+Dj
|
||
pop dx
|
||
pop ax
|
||
cmp dx, 0FFFFh
|
||
jnz fsize_havesize
|
||
jmp lret$eq$ff
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fsize_havesize: ; CODE XREF: fat_size+33j
|
||
mov di, offset user_fcb+21h
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
size_to_records: ; CODE XREF: fat_space+28p
|
||
test al, 7Fh
|
||
jz s2r_noround
|
||
and al, 80h
|
||
add ax, 80h
|
||
adc dx, 0
|
||
|
||
s2r_noround: ; CODE XREF: size_to_records+2j
|
||
mov cx, 7
|
||
call shr_dxax_cl
|
||
mov es:[di], al
|
||
mov es:1[di], ah
|
||
mov es:2[di], dl
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; If FAT entry AX is unused, set it to EOF
|
||
|
||
fat_set_eof: ; CODE XREF: rd$subdir1+31p
|
||
; fat_make+2Ap ...
|
||
push ax
|
||
call fat_get ; Return FAT entry [AX]
|
||
pop bx
|
||
or ax, ax
|
||
jnz fat_set_eof_ret
|
||
mov ax, max_cluster
|
||
push ax
|
||
xchg ax, bx
|
||
call fat_wcluster ; Set cluster[AX] to BX
|
||
pop ax
|
||
|
||
fat_set_eof_ret: ; CODE XREF: fat_set_eof+7j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Return FAT entry [AX]
|
||
|
||
fat_get: ; CODE XREF: fat_set_eof+1p
|
||
; fat_freechain+Bp ...
|
||
mov di, ax
|
||
cmp max_cluster, 0FFFFh
|
||
jz fat_get1
|
||
shr di, 1
|
||
add di, ax
|
||
mov es, dph_hash
|
||
|
||
mov dx, es:[di]
|
||
test ax, 1
|
||
jz fat_get2
|
||
mov cl, 4
|
||
shr dx, cl
|
||
jmps fat_get3
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_get1: ; CODE XREF: fat_get+7j
|
||
shl di, 1
|
||
mov es, dph_hash
|
||
mov dx, es:[di]
|
||
jmps fat_get3
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_get2: ; CODE XREF: fat_get+17j
|
||
and dx, 0FFFh
|
||
|
||
fat_get3: ; CODE XREF: fat_get+1Dj fat_get+28j
|
||
mov ax, ds
|
||
mov es, ax
|
||
|
||
mov ax, dx
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; Set cluster[AX] to BX
|
||
|
||
fat_wcluster: ; CODE XREF: fat_make+45p fat_make+4Fp
|
||
; ...
|
||
mov di, ax
|
||
cmp max_cluster, 0FFFFh
|
||
jz fat_wcluster16
|
||
shr di, 1
|
||
add di, ax
|
||
test ax, 1
|
||
jz fat_wcluster12a
|
||
mov cl, 4
|
||
shl bx, cl
|
||
mov ax, 0Fh
|
||
jmps fat_wcluster12
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_wcluster16: ; CODE XREF: fat_wcluster+7j
|
||
shl di, 1
|
||
mov es, dph_hash
|
||
|
||
mov es:[di], bx
|
||
jmps fat_wcls_end
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_wcluster12a: ; CODE XREF: fat_wcluster+10j
|
||
mov ax, 0F000h
|
||
|
||
fat_wcluster12: ; CODE XREF: fat_wcluster+19j
|
||
mov es, dph_hash
|
||
and es:[di], ax
|
||
or es:[di], bx
|
||
|
||
fat_wcls_end: ; CODE XREF: fat_wcluster+24j
|
||
mov ax, ds
|
||
mov es, ax
|
||
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_freechain: ; CODE XREF: fat_delete+ADp
|
||
; fat_truncate+88p ...
|
||
or ax, ax
|
||
jz fat_fc_done
|
||
cmp ax, dpb_clusters
|
||
jnb fat_fc_done
|
||
push ax
|
||
call fat_get ; Return FAT entry [AX]
|
||
pop bx
|
||
push ax
|
||
mov ax, bx
|
||
xor bx, bx
|
||
call fat_wcluster ; Set cluster[AX] to BX
|
||
pop ax
|
||
jmps fat_freechain
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_fc_done: ; CODE XREF: fat_freechain+2j
|
||
; fat_freechain+8j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_space: ; CODE XREF: DRV_SPACE+Aj
|
||
xor cx, cx
|
||
mov ax, 2
|
||
|
||
fatspace_count: ; CODE XREF: fat_space+18j
|
||
cmp ax, dpb_clusters
|
||
jnb fatspace_done
|
||
push ax
|
||
push cx
|
||
call fat_get ; Return FAT entry [AX]
|
||
pop cx
|
||
or ax, ax
|
||
jnz fatspace_used
|
||
inc cx
|
||
|
||
fatspace_used: ; CODE XREF: fat_space+13j
|
||
pop ax
|
||
inc ax
|
||
jmps fatspace_count
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fatspace_done: ; CODE XREF: fat_space+9j
|
||
mov ax, cx
|
||
mul dpb_clustersize
|
||
mov es, userdmaseg
|
||
|
||
mov di, userdma
|
||
call size_to_records
|
||
mov ax, ds
|
||
mov es, ax
|
||
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
; CL: Bit 0=1 for read, 0 for write
|
||
; Bit 1=1 for rand, 0 for seq
|
||
|
||
fat_rdwr: ; CODE XREF: F_READ+Cj F_WRITE+Cj
|
||
; ...
|
||
mov attributes, 0 ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
mov fat_rdwr_flg1, 0
|
||
mov fat_rdwr_op, cl
|
||
test cl, 1
|
||
jnz fat_rdwr2
|
||
mov ah, 3
|
||
test high$ext, 40h
|
||
jz fat_rdwr1
|
||
jmp disk_error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr1: ; CODE XREF: fat_rdwr+1Aj
|
||
mov bx, offset user_fcb
|
||
call check$rofile
|
||
call check$write
|
||
or user_fcb+0Eh, 40h
|
||
|
||
fat_rdwr2: ; CODE XREF: fat_rdwr+11j
|
||
test fat_rdwr_op, 2
|
||
jz fat_rdwr5
|
||
test user_fcb+23h, 0FCh
|
||
jz fat_rdwr3
|
||
mov byte ptr aret, 6
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr3: ; CODE XREF: fat_rdwr+39j
|
||
call calc_extent_no
|
||
mov ah, user_fcb+0Eh
|
||
and ah, 3Fh
|
||
cmp ah, ch
|
||
jnz fat_rdwr4
|
||
cmp cl, user_fcb+0Ch
|
||
jz fat_rdwr7
|
||
|
||
fat_rdwr4: ; CODE XREF: fat_rdwr+4Dj
|
||
mov fat_rdwr_flg1, 0FFh
|
||
jmps fat_rdwr7
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr5: ; CODE XREF: fat_rdwr+32j
|
||
mov ch, user_fcb+0Eh
|
||
and ch, 3Fh
|
||
mov cl, user_fcb+0Ch
|
||
mov dl, user_fcb+20h
|
||
cmp dl, 80h
|
||
jb fat_rdwr7
|
||
cmp cl, 1Fh
|
||
jnz fat_rdwr6
|
||
cmp ch, 3Fh
|
||
jnz fat_rdwr6
|
||
mov byte ptr aret, 1
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr6: ; CODE XREF: fat_rdwr+73j fat_rdwr+78j
|
||
mov fat_rdwr_flg1, 0FFh
|
||
xor dl, dl
|
||
inc cl
|
||
cmp cl, 20h
|
||
jnz fat_rdwr7
|
||
xor cl, cl
|
||
inc ch
|
||
|
||
fat_rdwr7: ; CODE XREF: fat_rdwr+53j fat_rdwr+5Aj
|
||
; ...
|
||
mov c2f_S2, ch
|
||
mov c2f_EX, cl
|
||
mov c2f_RC, dl
|
||
xor ax, ax
|
||
mov ah, dl
|
||
shr ax, 1
|
||
xor bx, bx
|
||
mov bh, cl
|
||
mov cl, 2
|
||
shr bx, cl
|
||
or ah, bl
|
||
xor dx, dx
|
||
mov dl, ch
|
||
mov cl, 3
|
||
shl dx, cl
|
||
or dl, bh
|
||
mov word ptr fat_file_ptr, ax
|
||
mov word ptr fat_file_ptr+2, dx
|
||
cmp fs_function, 16h
|
||
jbe fat_rdwr8
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr8: ; CODE XREF: fat_rdwr+C4j
|
||
mov bx, dx
|
||
mov cx, dpb_clustersize
|
||
call fat_muldiv
|
||
or dx, dx
|
||
jnz fat_rdwr9
|
||
inc ax
|
||
cmp ax, dpb_clusters
|
||
jb fat_rdwr11
|
||
|
||
fat_rdwr9: ; CODE XREF: fat_rdwr+D2j
|
||
mov al, 2
|
||
test fat_rdwr_op, 1
|
||
jz fat_rdwr10
|
||
dec al
|
||
|
||
fat_rdwr10: ; CODE XREF: fat_rdwr+E2j
|
||
mov byte ptr aret, al
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr11: ; CODE XREF: fat_rdwr+D9j
|
||
dec ax
|
||
mov dir_record, ax
|
||
mov dir_entries, cx
|
||
mov dx, word ptr user_fcb+16h
|
||
mov ax, dir_record
|
||
cmp ax, dx
|
||
jnz fat_rdwr12
|
||
cmp word ptr user_fcb+14h, 0
|
||
jz fat_rdwr12
|
||
jmp fat_rdwr28
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr12: ; CODE XREF: fat_rdwr+FBj fat_rdwr+102j
|
||
mov open_unknown, 0FFh
|
||
cmp ax, dx
|
||
jb fat_rdwr13
|
||
cmp word ptr user_fcb+14h, 0
|
||
jz fat_rdwr13
|
||
sub ax, dx
|
||
mov scan_dirent, ax
|
||
mov ax, word ptr user_fcb+14h
|
||
mov nearby_cluster, ax
|
||
mov word_A15_7B1, ax
|
||
call fat_set_eof ; If FAT entry AX is unused, set it to EOF
|
||
mov newdir_cluster, ax
|
||
jmps fat_rdwr16
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr13: ; CODE XREF: fat_rdwr+10Ej
|
||
; fat_rdwr+115j
|
||
mov word ptr user_fcb+14h, 0
|
||
inc ax
|
||
mov scan_dirent, ax
|
||
mov ax, word ptr user_fcb+1Ah
|
||
mov newdir_cluster, ax
|
||
or ax, ax
|
||
jnz fat_rdwr14
|
||
call fat_getfsize
|
||
mov ax, word ptr user_fcb+1Ah
|
||
mov newdir_cluster, ax
|
||
|
||
fat_rdwr14: ; CODE XREF: fat_rdwr+13Fj
|
||
or ax, ax
|
||
jnz fat_rdwr15
|
||
mov attributes, 80h ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
|
||
fat_rdwr15: ; CODE XREF: fat_rdwr+14Cj
|
||
mov nearby_cluster, 0
|
||
mov word_A15_7B1, 0
|
||
|
||
fat_rdwr16: ; CODE XREF: fat_rdwr+12Bj
|
||
; fat_rdwr+209j
|
||
test scan_dirent, 0FFFFh
|
||
jnz fat_rdwr17
|
||
jmp fat_rdwr27
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr17: ; CODE XREF: fat_rdwr+165j
|
||
dec scan_dirent
|
||
mov ax, newdir_cluster
|
||
or ax, ax
|
||
jz fat_rdwr18
|
||
cmp ax, dpb_clusters
|
||
jnb fat_rdwr18
|
||
jmp fat_rdwr25
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr18: ; CODE XREF: fat_rdwr+173j
|
||
; fat_rdwr+179j
|
||
test fat_rdwr_op, 1
|
||
jz fat_rdwr19
|
||
jmp f_ret_1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr19: ; CODE XREF: fat_rdwr+183j
|
||
mov ax, nearby_cluster
|
||
call alloc_cluster
|
||
or ax, ax
|
||
jz fat_rdwr22
|
||
mov newdir_cluster, ax
|
||
mov bx, ax
|
||
and user_fcb+0Eh, 7Fh
|
||
mov ax, nearby_cluster
|
||
or ax, ax
|
||
jz fat_rdwr20
|
||
call fat_wcluster ; Set cluster[AX] to BX
|
||
jmps fat_rdwr21
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr20: ; CODE XREF: fat_rdwr+1A1j
|
||
mov word ptr user_fcb+1Ah, bx
|
||
|
||
fat_rdwr21: ; CODE XREF: fat_rdwr+1A6j
|
||
mov ax, newdir_cluster
|
||
mov bx, max_cluster
|
||
call fat_wcluster ; Set cluster[AX] to BX
|
||
cmp fs_function, 16h
|
||
jnz fat_rdwr26
|
||
mov ax, newdir_cluster
|
||
call wr_cluster
|
||
jmp fat_rdwr26
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr22: ; CODE XREF: fat_rdwr+190j
|
||
mov ax, word_A15_7B1
|
||
or ax, ax
|
||
jz fat_rdwr23
|
||
call fat_set_eof ; If FAT entry AX is unused, set it to EOF
|
||
cmp ax, dpb_clusters
|
||
jnb fat_rdwr24
|
||
call fat_freechain
|
||
mov ax, word_A15_7B1
|
||
mov bx, max_cluster
|
||
call fat_wcluster ; Set cluster[AX] to BX
|
||
jmps fat_rdwr24
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr23: ; CODE XREF: fat_rdwr+1CBj
|
||
mov ax, word ptr user_fcb+1Ah
|
||
call fat_freechain
|
||
mov word ptr user_fcb+1Ah, 0
|
||
|
||
fat_rdwr24: ; CODE XREF: fat_rdwr+1D4j
|
||
; fat_rdwr+1E3j
|
||
mov byte ptr aret, 2
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr25: ; CODE XREF: fat_rdwr+17Bj
|
||
mov ax, newdir_cluster
|
||
mov word_A15_7B1, ax
|
||
|
||
fat_rdwr26: ; CODE XREF: fat_rdwr+1BBj
|
||
; fat_rdwr+1C3j
|
||
mov ax, newdir_cluster
|
||
mov nearby_cluster, ax
|
||
call fat_set_eof ; If FAT entry AX is unused, set it to EOF
|
||
mov newdir_cluster, ax
|
||
jmp fat_rdwr16
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr27: ; CODE XREF: fat_rdwr+167j
|
||
mov ax, nearby_cluster
|
||
mov word ptr user_fcb+14h, ax
|
||
mov ax, dir_record
|
||
mov word ptr user_fcb+16h, ax
|
||
jmps fat_rdwr29
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr28: ; CODE XREF: fat_rdwr+104j
|
||
mov ax, word ptr user_fcb+14h
|
||
mov nearby_cluster, ax
|
||
|
||
fat_rdwr29: ; CODE XREF: fat_rdwr+218j
|
||
; fat_rdwr+241j
|
||
xor ch, ch
|
||
mov ax, word ptr fat_file_ptr+2
|
||
cmp ax, word ptr user_fcb+1Eh
|
||
ja fat_rdwr30
|
||
jb fat_rdwr31
|
||
mov ax, word ptr fat_file_ptr
|
||
cmp ax, word ptr user_fcb+1Ch
|
||
jb fat_rdwr31
|
||
|
||
fat_rdwr30: ; CODE XREF: fat_rdwr+229j
|
||
mov ch, 0FFh
|
||
|
||
fat_rdwr31: ; CODE XREF: fat_rdwr+22Bj
|
||
; fat_rdwr+234j
|
||
or ch, ch
|
||
jz fat_rdwr32
|
||
call fat_getfsize
|
||
or ax, ax
|
||
jnz fat_rdwr29
|
||
mov ch, 0FFh
|
||
|
||
fat_rdwr32: ; CODE XREF: fat_rdwr+23Aj
|
||
test fat_rdwr_op, 1
|
||
jnz fat_rdwr35
|
||
cmp fs_function, 16h
|
||
jz fat_rdwr34
|
||
or ch, ch
|
||
jz fat_rdwr34
|
||
mov al, dpb_phm
|
||
xor ah, ah
|
||
mov cl, 7
|
||
shl ax, cl
|
||
test word ptr fat_file_ptr, ax
|
||
jz fat_rdwr33
|
||
mov ax, word ptr fat_file_ptr
|
||
mov dx, word ptr fat_file_ptr+2
|
||
mov cl, dpb_psh
|
||
add cl, 7
|
||
push cx
|
||
call shr_dxax_cl
|
||
pop cx
|
||
push ax
|
||
push dx
|
||
mov ax, word ptr user_fcb+1Ch
|
||
mov dx, word ptr user_fcb+1Eh
|
||
call shr_dxax_cl
|
||
pop cx
|
||
pop bx
|
||
sub bx, ax
|
||
sbb cx, dx
|
||
or bx, cx
|
||
jz fat_rdwr34
|
||
|
||
fat_rdwr33: ; CODE XREF: fat_rdwr+264j
|
||
mov fat_deblock?, 0
|
||
jmps fat_rdwr36
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr34: ; CODE XREF: fat_rdwr+251j
|
||
; fat_rdwr+255j ...
|
||
mov fat_deblock?, 0FFh
|
||
jmps fat_rdwr36
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr35: ; CODE XREF: fat_rdwr+24Aj
|
||
or ch, ch
|
||
jz fat_rdwr36
|
||
jmp f_ret_1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr36: ; CODE XREF: fat_rdwr+294j
|
||
; fat_rdwr+29Bj ...
|
||
mov ax, nearby_cluster
|
||
mov bx, dir_entries
|
||
call clus_to_sec
|
||
call fat_rdwr_sub1
|
||
cmp ax, 0FFFFh
|
||
jz fat_rdwr37
|
||
call fat_rdwr_ckd
|
||
jmps fat_rdwr39
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr37: ; CODE XREF: fat_rdwr+2B4j
|
||
test fat_rdwr_op, 1
|
||
jnz fat_rdwr39
|
||
test dpb_phm, 0FFh
|
||
jz fat_rdwr38
|
||
mov al, byte ptr bcb_record
|
||
test dpb_phm, al
|
||
jnz fat_rdwr39
|
||
|
||
fat_rdwr38: ; CODE XREF: fat_rdwr+2C7j
|
||
call discard$databcb ; Release the BCB for bcb_drive, record bcb_record
|
||
|
||
fat_rdwr39: ; CODE XREF: fat_rdwr+2B9j
|
||
; fat_rdwr+2C0j ...
|
||
add word ptr fat_file_ptr, 80h
|
||
adc word ptr fat_file_ptr+2, 0
|
||
|
||
fat_rdwr40: ; CODE XREF: fat_rdwr+2F9j
|
||
mov ax, word ptr fat_file_ptr+2
|
||
cmp ax, word ptr user_fcb+1Eh
|
||
ja fat_rdwr41
|
||
jb fat_rdwr43
|
||
mov ax, word ptr fat_file_ptr
|
||
cmp ax, word ptr user_fcb+1Ch
|
||
jbe fat_rdwr43
|
||
|
||
fat_rdwr41: ; CODE XREF: fat_rdwr+2E7j
|
||
call fat_getfsize
|
||
or ax, ax
|
||
jnz fat_rdwr40
|
||
test fat_rdwr_op, 1
|
||
jz fat_rdwr42
|
||
mov ax, word ptr fat_file_ptr+2
|
||
sub ax, word ptr user_fcb+1Eh
|
||
mov ax, word ptr fat_file_ptr
|
||
sbb ax, word ptr user_fcb+1Ch
|
||
mov bx, 80h
|
||
sub bx, ax
|
||
mov di, userdma
|
||
add di, bx
|
||
mov es, userdmaseg
|
||
|
||
mov cx, ax
|
||
xor al, al
|
||
rep stosb
|
||
mov ax, ds
|
||
mov es, ax
|
||
|
||
jmps fat_rdwr43
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr42: ; CODE XREF: fat_rdwr+300j
|
||
mov ax, word ptr fat_file_ptr
|
||
mov word ptr user_fcb+1Ch, ax
|
||
mov fat_rdwr_flg1, 0FFh
|
||
mov ax, word ptr fat_file_ptr+2
|
||
mov word ptr user_fcb+1Eh, ax
|
||
mov open_unknown, 0FFh
|
||
call fat_rw_u
|
||
|
||
fat_rdwr43: ; CODE XREF: fat_rdwr+2E9j
|
||
; fat_rdwr+2F2j ...
|
||
mov al, user_fcb+0Eh
|
||
and al, 0C0h
|
||
or al, c2f_S2
|
||
mov user_fcb+0Eh, al
|
||
mov al, c2f_EX
|
||
mov user_fcb+0Ch, al
|
||
mov al, c2f_RC
|
||
mov user_fcb+20h, al
|
||
test fat_rdwr_flg1, 0FFh
|
||
jz fat_rdwr46
|
||
call c2f_to_extent
|
||
cmp ax, 0FFFFh
|
||
jnz fat_rdwr44
|
||
xor al, al
|
||
jmps fat_rdwr45
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr44: ; CODE XREF: fat_rdwr+369j
|
||
mov cl, 7
|
||
shr ax, cl
|
||
|
||
fat_rdwr45: ; CODE XREF: fat_rdwr+36Dj
|
||
mov user_fcb+0Fh, al
|
||
|
||
fat_rdwr46: ; CODE XREF: fat_rdwr+361j
|
||
test fat_rdwr_op, 2
|
||
jnz fat_rdwr47
|
||
inc user_fcb+20h
|
||
|
||
fat_rdwr47: ; CODE XREF: fat_rdwr+37Bj
|
||
test attributes, 80h ; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
jz fat_rdwr48
|
||
call fat_close
|
||
cmp byte ptr aret, 0FFh
|
||
jnz fat_rdwr48
|
||
mov ah, 0Ah
|
||
jmp disk_error
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr48: ; CODE XREF: fat_rdwr+386j
|
||
; fat_rdwr+390j
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_rdwr_sub1: ; CODE XREF: fat_rdwr+2AEp
|
||
cmp dir$cnt, 1
|
||
jbe fat_rdwr_sub2
|
||
dec dir$cnt
|
||
mov ax, 0FFFFh
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr_sub2: ; CODE XREF: fat_rdwr_sub1+5j
|
||
mov al, dpb_phm
|
||
and al, byte ptr bcb_record
|
||
jnz fat_rdwr_sub3
|
||
cmp last_sec_count, 2
|
||
jb fat_rdwr_sub3
|
||
test high$ext, 80h
|
||
jnz fat_rdwr_sub3
|
||
cmp fs_function, 16h
|
||
jnz fat_rdwr_sub5
|
||
|
||
fat_rdwr_sub3: ; CODE XREF: fat_rdwr_sub1+16j
|
||
; fat_rdwr_sub1+1Dj ...
|
||
xor ax, ax
|
||
test dpb_phm, 0FFh
|
||
jnz fat_rdwr_sub4
|
||
mov al, 1
|
||
|
||
fat_rdwr_sub4: ; CODE XREF: fat_rdwr_sub1+34j
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr_sub5: ; CODE XREF: fat_rdwr_sub1+2Bj
|
||
mov ax, nearby_cluster
|
||
xor cx, cx
|
||
|
||
fat_rdwr_sub6: ; CODE XREF: fat_rdwr_sub1+4Bj
|
||
push ax
|
||
push cx
|
||
call fat_set_eof ; If FAT entry AX is unused, set it to EOF
|
||
pop cx
|
||
pop bx
|
||
inc bx
|
||
cmp ax, bx
|
||
jnz fat_rdwr_sub7
|
||
inc cx
|
||
jmps fat_rdwr_sub6
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr_sub7: ; CODE XREF: fat_rdwr_sub1+48j
|
||
test fat_rdwr_op, 1
|
||
jnz fat_rdwr_sub9
|
||
cmp ax, 0FF7h
|
||
jbe fat_rdwr_sub9
|
||
|
||
fat_rdwr_sub8: ; CODE XREF: fat_rdwr_sub1+6Ej
|
||
push bx
|
||
push cx
|
||
mov ax, bx
|
||
call fat_get ; Return FAT entry [AX]
|
||
pop cx
|
||
pop bx
|
||
or ax, ax
|
||
jnz fat_rdwr_sub9
|
||
cmp bx, dpb_clusters
|
||
jnb fat_rdwr_sub9
|
||
inc bx
|
||
inc cx
|
||
jmps fat_rdwr_sub8
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr_sub9: ; CODE XREF: fat_rdwr_sub1+52j
|
||
; fat_rdwr_sub1+57j ...
|
||
mov ax, dpb_clustersize
|
||
mul cx
|
||
mov bx, dpb_clustersize
|
||
sub bx, dir_entries
|
||
add ax, bx
|
||
adc dx, 0
|
||
or dx, dx
|
||
jnz fat_rdwr_sub10
|
||
cmp ax, 4000h
|
||
jb fat_rdwr_sub11
|
||
|
||
fat_rdwr_sub10: ; CODE XREF: fat_rdwr_sub1+84j
|
||
mov ax, 4000h
|
||
xor dx, dx
|
||
|
||
fat_rdwr_sub11: ; CODE XREF: fat_rdwr_sub1+89j
|
||
test fat_rdwr_op, 1
|
||
jz fat_rdwr_sub14
|
||
mov bx, word ptr user_fcb+1Ch
|
||
sub bx, word ptr fat_file_ptr
|
||
mov cx, word ptr user_fcb+1Eh
|
||
sbb cx, word ptr fat_file_ptr+2
|
||
jnb fat_rdwr_sub12
|
||
xor bx, bx
|
||
xor cx, cx
|
||
|
||
fat_rdwr_sub12: ; CODE XREF: fat_rdwr_sub1+A7j
|
||
cmp cx, dx
|
||
ja fat_rdwr_sub14
|
||
jb fat_rdwr_sub13
|
||
cmp bx, ax
|
||
jnb fat_rdwr_sub14
|
||
|
||
fat_rdwr_sub13: ; CODE XREF: fat_rdwr_sub1+B1j
|
||
mov ax, bx
|
||
mov dx, cx
|
||
|
||
fat_rdwr_sub14: ; CODE XREF: fat_rdwr_sub1+95j
|
||
; fat_rdwr_sub1+AFj ...
|
||
mov cl, 7
|
||
call shr_dxax_cl
|
||
cmp al, last_sec_count
|
||
jbe fat_rdwr_sub15
|
||
mov al, last_sec_count
|
||
|
||
fat_rdwr_sub15: ; CODE XREF: fat_rdwr_sub1+C4j
|
||
mov bl, al
|
||
mov cl, dpb_psh
|
||
shr al, cl
|
||
mov dl, dpb_phm
|
||
not dl
|
||
and bl, dl
|
||
mov dir$cnt, bl
|
||
push ax
|
||
or al, al
|
||
jz fat_rdwr_sub16
|
||
test fat_rdwr_op, 1
|
||
jz fat_rdwr_sub16
|
||
call flushx
|
||
|
||
fat_rdwr_sub16: ; CODE XREF: fat_rdwr_sub1+E0j
|
||
; fat_rdwr_sub1+E7j
|
||
pop ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
alloc_cluster: ; CODE XREF: fat_make+36p fat_make+AAp
|
||
; ...
|
||
or ax, ax
|
||
jnz alloc_clus_1
|
||
mov ax, 1
|
||
|
||
alloc_clus_1: ; CODE XREF: alloc_cluster+2j
|
||
mov bx, ax
|
||
inc bx
|
||
dec ax
|
||
|
||
alloc_clus_2: ; CODE XREF: alloc_cluster+37j
|
||
; alloc_cluster+3Dj
|
||
cmp bx, dpb_clusters
|
||
jnb alloc_clus_4
|
||
push ax
|
||
push bx
|
||
mov ax, bx
|
||
call fat_get ; Return FAT entry [AX]
|
||
pop bx
|
||
or ax, ax
|
||
pop ax
|
||
jnz alloc_clus_3
|
||
mov ax, bx
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
alloc_clus_3: ; CODE XREF: alloc_cluster+1Cj
|
||
inc bx
|
||
|
||
alloc_clus_4: ; CODE XREF: alloc_cluster+Fj
|
||
cmp ax, 2
|
||
jbe alloc_clus_6
|
||
push ax
|
||
push bx
|
||
call fat_get ; Return FAT entry [AX]
|
||
pop bx
|
||
or ax, ax
|
||
pop ax
|
||
jnz alloc_clus_5
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
alloc_clus_5: ; CODE XREF: alloc_cluster+30j
|
||
dec ax
|
||
|
||
alloc_clus_6: ; CODE XREF: alloc_cluster+25j
|
||
cmp ax, 2
|
||
ja alloc_clus_2
|
||
cmp bx, dpb_clusters
|
||
jb alloc_clus_2
|
||
xor ax, ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_rdwr_ckd: ; CODE XREF: fat_rdwr+2B6p
|
||
mov cl, fat_rdwr_op
|
||
and cl, 1
|
||
or ax, ax
|
||
jz fat_rdwr_ckd2
|
||
or cl, cl
|
||
jnz fat_rdwr_ckd1
|
||
push ax
|
||
call discard$databcb ; Release the BCB for bcb_drive, record bcb_record
|
||
pop ax
|
||
xor cl, cl
|
||
|
||
fat_rdwr_ckd1: ; CODE XREF: fat_rdwr_ckd+Dj
|
||
jmp recordok1
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rdwr_ckd2: ; CODE XREF: fat_rdwr_ckd+9j
|
||
mov ch, fat_deblock?
|
||
jmp ddta_1
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
clus_to_sec: ; CODE XREF: rd$subdir1+69p
|
||
; fat_make+D6p ...
|
||
dec ax
|
||
dec ax
|
||
mul dpb_clustersize
|
||
add ax, bx
|
||
adc dx, 0
|
||
mov cl, 7
|
||
call shr_dxax_cl
|
||
mov bx, dpb_drm
|
||
add bx, 4
|
||
mov cl, 2
|
||
shr bx, cl
|
||
test dpb_phm, bl
|
||
jz clus_to_sec1
|
||
mov cl, dpb_phm
|
||
xor ch, ch
|
||
not cx
|
||
and bx, cx
|
||
not cx
|
||
add bx, cx
|
||
inc bx
|
||
|
||
clus_to_sec1: ; CODE XREF: clus_to_sec+1Fj
|
||
add ax, bx
|
||
adc dx, 0
|
||
mov byte ptr bcb_record, al
|
||
mov byte ptr bcb_record+1, ah
|
||
mov bcb_record_h, dl
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
wr_cluster: ; CODE XREF: fat_make+58p fat_make+CEp
|
||
; ...
|
||
xor bx, bx
|
||
call clus_to_sec
|
||
call setdir1
|
||
mov bx, dpb_clustersize
|
||
mov cl, 7
|
||
add cl, dpb_psh
|
||
shr bx, cl
|
||
mov fat_deblock?, 0
|
||
|
||
wr_cluster_loop: ; CODE XREF: wr_cluster+32j
|
||
push ax
|
||
push bx
|
||
call discard$databcb ; Release the BCB for bcb_drive, record bcb_record
|
||
call seek
|
||
xor cl, cl
|
||
call wrbuff
|
||
pop bx
|
||
pop ax
|
||
add bcb_record, ax
|
||
adc bcb_record_h, 0
|
||
dec bx
|
||
jnz wr_cluster_loop
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_getfsize: ; CODE XREF: fat_rdwr+141p
|
||
; fat_rdwr+23Cp ...
|
||
or dir_check_flag, 0Fh
|
||
test high$ext, 80h
|
||
jz fat_getfsize4
|
||
cmp fs_sectorcount, 1
|
||
jbe fat_getfsize1
|
||
mov al, last_sec_count
|
||
cmp al, fs_sectorcount
|
||
jnz fat_getfsize4
|
||
|
||
fat_getfsize1: ; CODE XREF: fat_getfsize+11j
|
||
mov al, user_fcb+12h
|
||
mov ah, user_fcb+10h
|
||
and ah, 1Fh
|
||
dec ax
|
||
mov dcnt, ax
|
||
call fat_dirent_next
|
||
or ax, ax
|
||
jnz fat_getfsize2
|
||
pop bx
|
||
mov byte ptr aret, 0Bh
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_getfsize2: ; CODE XREF: fat_getfsize+2Fj
|
||
mov open_unknown, 0FFh
|
||
mov bx, ax
|
||
mov ax, 26[bx]
|
||
mov word ptr user_fcb+1Ah, ax
|
||
mov dx, 30[bx]
|
||
cmp word ptr user_fcb+1Eh, dx
|
||
ja fat_getfsize4
|
||
jb fat_getfsize3
|
||
mov ax, 28[bx]
|
||
cmp word ptr user_fcb+1Ch, ax
|
||
jnb fat_getfsize4
|
||
|
||
fat_getfsize3: ; CODE XREF: fat_getfsize+4Ej
|
||
mov word ptr user_fcb+1Ch, ax
|
||
mov word ptr user_fcb+1Eh, dx
|
||
mov fat_rdwr_flg1, 0FFh
|
||
mov al, 1
|
||
retn
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_getfsize4: ; CODE XREF: fat_getfsize+Aj
|
||
; fat_getfsize+1Aj ...
|
||
xor ax, ax
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_rw_u: ; CODE XREF: fat_rdwr+341p
|
||
cmp fs_sectorcount, 1
|
||
ja fat_rw_u3
|
||
test high$ext, 80h
|
||
jz fat_rw_u3
|
||
mov dir_check_flag, 0Fh
|
||
test dpb_cks+1, 50h
|
||
jnz fat_rw_u1
|
||
mov dir_check_flag, 0FFh
|
||
|
||
fat_rw_u1: ; CODE XREF: fat_rw_u+19j
|
||
call lookup_dirent
|
||
or ax, ax
|
||
jz fat_rw_u2
|
||
jmps fat_wr_dirent
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
fat_rw_u2: ; CODE XREF: fat_rw_u+25j
|
||
mov byte ptr aret, 0Bh
|
||
add sp, 2
|
||
|
||
fat_rw_u3: ; CODE XREF: fat_rw_u+5j fat_rw_u+Cj
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fat_wr_dirent: ; CODE XREF: fat_close+40p
|
||
; fat_rw_u+27j
|
||
mov bx, p_dirent
|
||
test word ptr 26[bx], 0FFFFh
|
||
jnz fat_wr_dirent1
|
||
mov ax, word ptr user_fcb+1Ah
|
||
mov 26[bx], ax
|
||
|
||
fat_wr_dirent1: ; CODE XREF: fat_wr_dirent+9j
|
||
mov ax, word ptr user_fcb+1Ch
|
||
mov dx, word ptr user_fcb+1Eh
|
||
cmp dx, 30[bx]
|
||
ja fat_wr_dirent2
|
||
jb fat_wr_dirent3
|
||
cmp ax, 28[bx]
|
||
jbe fat_wr_dirent3
|
||
|
||
fat_wr_dirent2: ; CODE XREF: fat_wr_dirent+1Bj
|
||
mov 28[bx], ax
|
||
mov 30[bx], dx
|
||
|
||
fat_wr_dirent3: ; CODE XREF: fat_wr_dirent+1Dj
|
||
; fat_wr_dirent+22j
|
||
or byte ptr 11[bx], 20h; Archive bit
|
||
and user_fcb+0Bh, 7Fh
|
||
jmp seek$copy
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
fs_nop2: ; CODE XREF: fat_delete+9Fp
|
||
; fat_rename+3Dp ...
|
||
retn
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; S u b r o u t i n e
|
||
|
||
get_cwd_cluster: ; CODE XREF: fat_search1+28p
|
||
; fat_open+Cp ...
|
||
mov ax, cur_drvdir
|
||
test ax, ax
|
||
jz cwd_hasnt_clust
|
||
xchg ax, bx
|
||
mov ax, 6[bx] ; Cluster
|
||
or ax, ax
|
||
|
||
cwd_hasnt_clust: ; CODE XREF: get_cwd_cluster+5j
|
||
retn
|
||
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
|
||
if DONTWRITE_PATCH
|
||
|
||
patch_dontwrite: ; CODE XREF: cpm_writerec+114j
|
||
mov cl, blk$off
|
||
call lru_ckdirty ; Returns Carry set if buffer dirty?
|
||
call discard$databcb ; Release the BCB for bcb_drive, record bcb_record
|
||
jmp dont$write1
|
||
|
||
else
|
||
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
|
||
endif
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
;
|
||
; Patch to "Read-only disk" error
|
||
;
|
||
|
||
if ROD_ERROR_PATCH
|
||
rod_err_patch: ; CODE XREF: bdos:2920j
|
||
mov bx, dph_dtabcb
|
||
test bx, bx
|
||
jz true_rod_err
|
||
mov bx, [bx]
|
||
|
||
bcb_discard: ; CODE XREF: bdos:6193j
|
||
mov al, bcb_drive
|
||
cmp al, [bx]
|
||
jnz bcb_discard_nxt ; Not for this drive
|
||
mov ax, rlr
|
||
cmp ax, 14[bx]
|
||
jnz bcb_discard_nxt ; Not for this process
|
||
sub ax, ax ; Dump BCB contents hard on the floor
|
||
mov 14[bx], ax
|
||
mov 4[bx], al
|
||
dec ax
|
||
mov [bx], al
|
||
|
||
bcb_discard_nxt: ; CODE XREF: bdos:6179j bdos:6181j
|
||
mov bx, 12[bx]
|
||
test bx, bx
|
||
jnz bcb_discard
|
||
|
||
true_rod_err: ; CODE XREF: bdos:6170j
|
||
mov ah, 2
|
||
jmp goerr
|
||
|
||
else ;ROD_ERROR_PATCH
|
||
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
|
||
endif
|
||
|
||
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
nop ; Code segment patch space
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
nop
|
||
|
||
dseg
|
||
public dirname_0
|
||
public dirname_1
|
||
public dirdata_0
|
||
public readonly_vector
|
||
public login_vector
|
||
|
||
removable_drive dw 0 ; DATA XREF: check_changed+5r
|
||
; media$change+Fo ...
|
||
dw 0,0
|
||
readonly_vector dw 0 ; DATA XREF: DRV_ROVECr nowriter
|
||
; ...
|
||
login_vector dw 0 ; DATA XREF: DRV_LOGINVECr
|
||
; rdbuff+28r ...
|
||
db 0
|
||
fcbdsk db 0 ; DATA XREF: funcs_F_main+6Eo
|
||
; F_do_call+51r ...
|
||
cur_fcb_len db 0 ; DATA XREF: funcs_F_main+ADr
|
||
; copy_fcb_36+2w ...
|
||
aret dw 0 ; DATA XREF: funcs_F_main+F3r
|
||
; F_repeat_call+1Ar ...
|
||
set_if_attrs db 0 ; DATA XREF: funcs_F_main+113r
|
||
; F_do_call+2Br ...
|
||
dir_check_flag db 0 ; DATA XREF: deblock+B2w rd$subdir1+50r
|
||
; ...
|
||
open_unknown db 0 ; DATA XREF: open$reel+74w
|
||
; openx+90w ...
|
||
search$user0 db 0 ; DATA XREF: bdos:371Cw bdos:374Er
|
||
; ...
|
||
make$xfcb db 0 ; DATA XREF: make+22r F_MAKE+9Ew
|
||
; ...
|
||
find$xfcb db 0 ; DATA XREF: search$h_sub+46r
|
||
; searchn+4Ar ...
|
||
xdcnt dw 0 ; DATA XREF: set_dcnt_dblkr
|
||
; search$h_sub+58w ...
|
||
dir$cnt db 0 ; DATA XREF: check$nprs+4r
|
||
; check$nprs+Dw ...
|
||
last_sec_count db 0 ; DATA XREF: F_repeat_call+Bw
|
||
; check$nprs+29r ...
|
||
readf$sw db 0 ; DATA XREF: rdbuff+Bw rdbuff+4Fr
|
||
err_major db 0 ; DATA XREF: funcs_F_main+104r
|
||
; errorw
|
||
relog db 0 ; DATA XREF: tst$relog+2w rdbuff+44w
|
||
; ...
|
||
fcb_is_for_dir db 0 ; DATA XREF: funcs_F_main+C2r
|
||
; F_do_call+17w ...
|
||
dw 0
|
||
fs_rdwrcount db 1 ; DATA XREF: xios_rdwr+Ew bdos:2C56w
|
||
; ...
|
||
blk$off db 0 ; DATA XREF: atran+1Dw deblock+11Ar
|
||
; ...
|
||
arecord1 dw 0 ; DATA XREF: atran+7w lru_ckdirty+14r
|
||
p_lru_first dw offset lru_1 ; DATA XREF: lru_toucho lru_touch+1Ew
|
||
; ...
|
||
lru_1 dw offset lru_2 ; DATA XREF: dseg:05E7o
|
||
dw 0
|
||
dw 0FFh
|
||
lru_2 dw offset lru_3 ; DATA XREF: dseg:05E9o
|
||
dw 0
|
||
dw 0FFh
|
||
lru_3 dw offset lru_4 ; DATA XREF: dseg:05EFo
|
||
dw 0
|
||
dw 0FFh
|
||
lru_4 dw offset lru_5 ; DATA XREF: dseg:05F5o
|
||
dw 0
|
||
dw 0FFh
|
||
lru_5 dw offset lru_6 ; DATA XREF: dseg:05FBo
|
||
dw 0
|
||
dw 0FFh
|
||
lru_6 dw 0 ; DATA XREF: dseg:0601o
|
||
dw 0
|
||
dw 0FFh
|
||
hash rb 4 ; DATA XREF: get$hash+3w get$hash+Cw
|
||
; ...
|
||
hashl db 0 ; DATA XREF: media$change+Cw
|
||
; set$hash+16w ...
|
||
deblock_command db 0 ; DATA XREF: deblock+76w deblock+A9r
|
||
; ...
|
||
phy$off db 0 ; DATA XREF: get$bcba+6Cr get$bcba+EEr
|
||
; ...
|
||
curbcba dw 0 ; DATA XREF: get$bcba+53w get$bcba+5Fr
|
||
; ...
|
||
rootbcba dw 0 ; DATA XREF: get$bcbaw get$bcba+DBr
|
||
; ...
|
||
emptybcba dw 0 ; DATA XREF: get$bcba+16w get$bcba+2Br
|
||
; ...
|
||
seqbcba dw 0 ; DATA XREF: get$bcba+19w get$bcba+4Fw
|
||
; ...
|
||
my_bcbs db 0 ; DATA XREF: get$bcba+1Cw get$bcba+4Bw
|
||
; ...
|
||
; BCBs owned by this process
|
||
fs_function db 0 ; DATA XREF: bdos:25EBr funcs_F_main+14w
|
||
; ...
|
||
fs_track dw 0 ; DATA XREF: xios_rdwr+13r
|
||
; seek+40w ...
|
||
fs_sector dw 0 ; DATA XREF: xios_rdwr+17r
|
||
; seek+43w ...
|
||
fs_param_low dw 0 ; DATA XREF: bdos:25FFr funcs_F_main+73w
|
||
; ...
|
||
searcha dw 0 ; DATA XREF: searchi+3w searchn+14r
|
||
; ...
|
||
fs_fcbdrive db 0 ; DATA XREF: funcs_F_main+30w
|
||
; error+4r ...
|
||
usrcode db 0 ; DATA XREF: reselect+40r F_OPEN+2Cr
|
||
; ...
|
||
fs_param_ds dw 0 ; DATA XREF: funcs_F_main+37w
|
||
; funcs_F_main+BCr ...
|
||
f_ret_es dw 0 ; DATA XREF: funcs_F_main+3Ew
|
||
; funcs_F_main+ECr ...
|
||
userdma dw 0 ; DATA XREF: funcs_F_main+4Eo
|
||
; funcs_F_main+58r ...
|
||
userdmaseg dw 0 ; DATA XREF: funcs_F_main+5Fw
|
||
; deblock+171r ...
|
||
sys_fx db 0 ; DATA XREF: funcs_F_main+E1o
|
||
searchl db 0 ; DATA XREF: search$hash+7r
|
||
; searchi+Cw ...
|
||
sys_find1st dw 0,0 ; DATA XREF: F_SFIRST+9w bdos:461Cr
|
||
; ...
|
||
dcnt dw 0 ; DATA XREF: end$of$diro set$end$dirw
|
||
; ...
|
||
ff2c_extent dw 0 ; DATA XREF: srch_fat+7w srch_fat+22w
|
||
; ...
|
||
fs_errormode db 0 ; DATA XREF: sel$error+Cr disk_error+Cr
|
||
; ...
|
||
fs_sectorcount db 0 ; DATA XREF: funcs_F_main+97r
|
||
; F_repeat_call+8r ...
|
||
df$password rb 8 ; DATA XREF: cmp$pw+36o F_PASSWD+Fo
|
||
; Default password
|
||
high$ext db 0 ; DATA XREF: F_do_call+3Br
|
||
; chek$fcbr ...
|
||
xfcb_rdonly db 0 ; DATA XREF: F_do_call+32r
|
||
; cpm_writerec+Fr ...
|
||
curdsk db 0FFh ; DATA XREF: xios_rdwr+8r sel$errorw
|
||
; ...
|
||
cdrmaxa dw 0 ; DATA XREF: compcdr+4r cpm_login+3Br
|
||
; ...
|
||
lsn$add dw 0 ; DATA XREF: chek$fcb+Cr set$lsnr
|
||
; ...
|
||
buffa dw 0 ; DATA XREF: compute$csr getdptra+6r
|
||
; ...
|
||
dph_dpb dw 0 ; DATA XREF: drive_login+1Eo
|
||
; drive_login+26r ...
|
||
dph_csv dw 0 ; DATA XREF: r$dir+50r
|
||
dph_alv dw 0 ; DATA XREF: getallocbit+Dr
|
||
; copy$alv+Br ...
|
||
dph_dirbcb dw 0 ; DATA XREF: discard$dirr deblock+4r
|
||
; ...
|
||
dph_dtabcb dw 0 ; DATA XREF: discard$databcbr
|
||
; deblock+13r ...
|
||
dph_hash dw 0 ; DATA XREF: set$hashr search$hashr
|
||
; ...
|
||
dpb_fatcount dw 0 ; DATA XREF: seek+26r drive_login+43o
|
||
; ...
|
||
dpb_secperfat dw 0 ; DATA XREF: seek+29r load_fats+16r
|
||
; ...
|
||
dpb_clusters dw 0 ; DATA XREF: rd$subdir1+35r
|
||
; fat_make+23r ...
|
||
dpb_clustersize dw 0 ; DATA XREF: rd$subdir1+15r
|
||
; drive_login+59r ...
|
||
dpb_firstfat dw 0 ; DATA XREF: seek+1Er load_fatsr
|
||
; ...
|
||
dpb_spt dw 0 ; DATA XREF: seek+32r seek+38r
|
||
; ...
|
||
dpb_bsh db 0 ; DATA XREF: atranr dm$positionr
|
||
; ...
|
||
dpb_blm db 0 ; DATA XREF: atran+19r check$nprs+53r
|
||
; ...
|
||
dpb_exm db 0 ; DATA XREF: get$dir$ext+2Br
|
||
; compext+1r ...
|
||
dpb_dsm dw 0 ; DATA XREF: get$nalbsr scandm$a+37r
|
||
; ...
|
||
dpb_drm dw 0 ; DATA XREF: r$dirr search$hash+1Fr
|
||
; ...
|
||
dpb_al0_al1 dw 0 ; DATA XREF: scandm$a+16r cpm_login+25r
|
||
dpb_cks dw 0 ; DATA XREF: rdbuff+20r r$dir+3Dr
|
||
; ...
|
||
dpb_off dw 0 ; DATA XREF: seek+3Cr
|
||
dpb_psh db 0 ; DATA XREF: seek+9r check$nprs+104r
|
||
; ...
|
||
dpb_phm db 0 ; DATA XREF: get$bcba+92r lru_ckdirty+29r
|
||
; ...
|
||
fat_buf_dirty? db 0 ; DATA XREF: lru_ckdirty+7r
|
||
; bdos:2EFAw
|
||
db 0
|
||
F_isfatfs db 0 ; DATA XREF: seek+17r lru_ckdirtyr
|
||
; ...
|
||
passwd_buf rb 10h
|
||
; cmp$pw+21o ...
|
||
open_G01 db 0 ; DATA XREF: cpm_opendir+18Bw
|
||
; fat_make+162r
|
||
result_F0F db 0 ; DATA XREF: F_do_call+4Br
|
||
; make+60w
|
||
save$xfcb db 0 ; DATA XREF: searchn+37w searchn+51w
|
||
; ...
|
||
openreel_S2 db 0 ; DATA XREF: open$reel+3w open$reel+66r
|
||
pw$mode db 0 ; DATA XREF: chk$pw$error+24w
|
||
; chk$pw$error+33o ...
|
||
; Password mode
|
||
attributes db 0 ; DATA XREF: get$atts+17w cpm_delete+16r
|
||
; ...
|
||
; Bit 7 set: F5'
|
||
; Bit 6 set: F6'
|
||
; Bit 5 set: F7'
|
||
; Bit 4 set: F8'
|
||
rb 4
|
||
rmf db 0 ; DATA XREF: open$reel+44r
|
||
; open$reel+90r ...
|
||
; Read mode flag
|
||
deblock_flag db 0 ; DATA XREF: cpm_writerec+92w
|
||
; cpm_writerec+A0r ...
|
||
dirloc db 0 ; DATA XREF: bdos:3431r searchi+7w
|
||
; ...
|
||
linfo db 0 ; DATA XREF: funcs_F_main+77w
|
||
; DRV_SET+3r ...
|
||
dminx db 0 ; DATA XREF: index+3w get$dir$ext+14w
|
||
; ...
|
||
single db 0 ; DATA XREF: get$dm+5r get$dir$ext+18r
|
||
; ...
|
||
; Nonzero if using 8-bit blocks
|
||
rcount db 0 ; DATA XREF: getfcb+1Ew setfcb+19r
|
||
; ...
|
||
extval db 0 ; DATA XREF: dm$position+Fr
|
||
; getfcb+28w
|
||
vrecord db 0 ; DATA XREF: atran+16r dm$position+4r
|
||
; ...
|
||
bcb_drive db 0 ; DATA XREF: rdbuff+17r rdbuff+3Br
|
||
; ...
|
||
bcb_record dw 0 ; DATA XREF: xios_rdwrr seekr ...
|
||
bcb_record_h db 0 ; DATA XREF: xios_rdwr+4r seek+5r
|
||
; ...
|
||
bcb_dirty dw 0 ; DATA XREF: atran+12w cpm_login+38w
|
||
; ...
|
||
drec dw 0 ; DATA XREF: rd$dir+7w r$dir+39r
|
||
; ...
|
||
fs_buffer dw 0,0 ; DATA XREF: xios_rdwr+1Br
|
||
; deblockw ...
|
||
dptr db 0 ; DATA XREF: getdptrar drv$relog+8w
|
||
; ...
|
||
user0$pass db 0 ; DATA XREF: searchnw bdos:3708r
|
||
; ...
|
||
call_flags dw 0 ; DATA XREF: F_repeat_callw
|
||
; F_repeat_call+Fr
|
||
fcb_randrec_num rb 3
|
||
error_drive db 0 ; DATA XREF: funcs_F_main+11Fr
|
||
; error+7w
|
||
strColonSpace db ' : $' ; DATA XREF: funcs_F_main+14Bw
|
||
; funcs_F_main+14Fo
|
||
error_strings dw 0 ; DATA XREF: funcs_F_main+15Do
|
||
dw offset addr_writeerr
|
||
dw offset addr_rodisk
|
||
dw offset addr_rofile
|
||
dw offset addr_invaliddrv
|
||
dw 0
|
||
dw 0
|
||
dw offset addr_pwderr
|
||
dw offset addr_filexists
|
||
dw offset addr_ambiguous
|
||
rw 3
|
||
errFilename rb 0Ch
|
||
db '$'
|
||
rb 8Ah
|
||
F_entry_sp dw 0 ; DATA XREF: funcs_F_main+27o
|
||
; F_do_callw ...
|
||
F_old_ss dw 0 ; DATA XREF: funcs_F_main+1Bw
|
||
; funcs_F_main+FAr
|
||
F_old_sp dw 0 ; DATA XREF: funcs_F_main+1Fw
|
||
; funcs_F_main+FEr
|
||
user_fcb rb 24h
|
||
rb 4
|
||
passwd_fcb rb 10h
|
||
; restore$pw$fcbo
|
||
fat_rdwr_op db 0 ; DATA XREF: fat_rdwr+Aw fat_rdwr+2Dr
|
||
; ...
|
||
newdir_cluster dw 0 ; DATA XREF: fat_make+39w fat_make+48r
|
||
; ...
|
||
scan_dirent dw 0 ; DATA XREF: is_dir_emptyw
|
||
; is_dir_empty+2Ar ...
|
||
dir_record dw 0 ; DATA XREF: is_dir_empty+Cw
|
||
; is_dir_empty+57r ...
|
||
dir_entries dw 0 ; DATA XREF: is_dir_empty+13w
|
||
; is_dir_empty+2Er ...
|
||
fs_days dw 0 ; DATA XREF: fat_to_sfcb+21o
|
||
; dos_date_to_cpm+39w
|
||
; ...
|
||
fs_hours db 0 ; DATA XREF: dos_date_to_cpm+42w
|
||
; timestamp_2_fat+5Ar
|
||
fs_minutes db 0 ; DATA XREF: dos_date_to_cpm+4Bw
|
||
; timestamp_2_fat+63r
|
||
fs_seconds db 0 ; DATA XREF: timestamp_2_fat+6Cr
|
||
p_dirent dw 0 ; DATA XREF: srch_fat+7Er srch_fat+92r
|
||
; ...
|
||
word_A15_7B1 dw 0 ; DATA XREF: fat_rdwr+122w
|
||
; fat_rdwr+159w ...
|
||
monthDays dw 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334; DATA XREF: dos_date_to_cpm+9o
|
||
; timestamp_2_fat+32o
|
||
; ...
|
||
fat_file_ptr dw 0,0 ; DATA XREF: fat_rdwr+B8w fat_rdwr+22Dr
|
||
; ...
|
||
fat_day db 0 ; DATA XREF: fat_get_date+21w
|
||
; fat_set_date+4r ...
|
||
fat_month db 0 ; DATA XREF: fat_get_date+19w
|
||
; fat_set_date+Br ...
|
||
fat_year db 0 ; DATA XREF: fat_get_date+Cw
|
||
; fat_set_date+13r ...
|
||
fat_hour db 0 ; DATA XREF: fat_get_date+41w
|
||
; fat_set_date+1Ar ...
|
||
fat_minute db 0 ; DATA XREF: fat_get_date+39w
|
||
; fat_set_date+21r ...
|
||
fat_second db 0 ; DATA XREF: fat_get_date+2Cw
|
||
; fat_set_date+29r ...
|
||
fat_deblock? db 0 ; DATA XREF: fat_rdwr+28Fw
|
||
; fat_rdwr+296w ...
|
||
nearby_cluster dw 0 ; DATA XREF: fat_make+30w fat_make+42r
|
||
; ...
|
||
fat_rdwr_flg1 db 0 ; DATA XREF: fat_rdwr+5w fat_rdwr+55w
|
||
; ...
|
||
c2f_S2 db 0 ; DATA XREF: c2f_to_extent+2r
|
||
; fat_rdwr+92w ...
|
||
c2f_EX db 0 ; DATA XREF: c2f_to_extent+9r
|
||
; fat_rdwr+96w ...
|
||
c2f_RC db 0 ; DATA XREF: fat_rdwr+9Aw fat_rdwr+356r
|
||
int13_func db 0 ; DATA XREF: F_BDOS_75+2o F_BDOS_75+2Cr
|
||
; ...
|
||
int13_drive db 0 ; DATA XREF: F_BDOS_75+10r
|
||
int13_sectors db 0 ; DATA XREF: F_BDOS_75+26r
|
||
int13_head db 0 ; DATA XREF: F_BDOS_75+3Br
|
||
int13_sector db 0 ; DATA XREF: F_BDOS_75+35r
|
||
; F_BDOS_75+99r
|
||
int13_cylinder db 0 ; DATA XREF: F_BDOS_75+3Fr
|
||
int13_buffer dw 0,0 ; DATA XREF: F_BDOS_75+20r
|
||
; F_BDOS_75+1Ar
|
||
cur_drvdir dw 0 ; DATA XREF: read$subdirr rd$parentdir+6r
|
||
; ...
|
||
dname_cluster dw 0 ; DATA XREF: set$end$dir+6w
|
||
; rd$subdir1+9r ...
|
||
names_per_block dw 0 ; DATA XREF: rd$subdir1+20r
|
||
; rd$subdir1+61r ...
|
||
chdir_drive db 0 ; DATA XREF: curselect_dir+Cw
|
||
; cpm_opendir+51r
|
||
max_cluster dw 0 ; DATA XREF: drive_login+30w
|
||
; drive_login+38w ...
|
||
dirname_0 rw 10h ; DATA XREF: proc1:0011o
|
||
dw 1
|
||
dw 0
|
||
dirname_1 dw offset dirname_2 ; DATA XREF: dseg:0192o
|
||
rw 11h
|
||
dirname_2 dw offset dirname_3 ; DATA XREF: dseg:0813o
|
||
rw 11h
|
||
dirname_3 dw 0 ; DATA XREF: dseg:0837o
|
||
rw 11h
|
||
dirdata_0 dw offset dirdata_1 ; DATA XREF: dseg:0194o
|
||
rw 4
|
||
dirdata_1 dw offset dirdata_2 ; DATA XREF: dseg:087Fo
|
||
rw 4
|
||
dirdata_2 dw offset dirdata_3 ; DATA XREF: dseg:0889o
|
||
rw 4
|
||
dirdata_3 dw offset dirdata_4 ; DATA XREF: dseg:0893o
|
||
rw 4
|
||
dirdata_4 dw offset dirdata_5 ; DATA XREF: dseg:089Do
|
||
rw 4
|
||
dirdata_5 dw offset dirdata_6 ; DATA XREF: dseg:08A7o
|
||
rw 4
|
||
dirdata_6 dw offset dirdata_7 ; DATA XREF: dseg:08B1o
|
||
rw 4
|
||
dirdata_7 dw 0 ; DATA XREF: dseg:08BBo
|
||
rw 4
|
||
;
|
||
; PADDING: The next module must be on a paragraph boundary
|
||
;
|
||
rs 16
|