File system addition: get/set file/folder attributes

git-svn-id: svn://kolibrios.org@86 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Evgeny Grechnikov (Diamond)
2006-06-15 13:13:03 +00:00
parent 62da2ad490
commit b3a457d97d
5 changed files with 358 additions and 45 deletions

View File

@@ -834,13 +834,42 @@ fat_date_to_bdfe:
pop edx ecx pop edx ecx
ret ret
bdfe_to_fat_time:
push edx
mov edx, eax
shr eax, 16
and dh, 0x3F
shl eax, 6
or al, dh
shr dl, 1
and dl, 0x1F
shl eax, 5
or al, dl
pop edx
ret
bdfe_to_fat_date:
push edx
mov edx, eax
shr eax, 16
sub ax, 1980
and dh, 0xF
shl eax, 4
or al, dh
and dl, 0x1F
shl eax, 5
or al, dl
pop edx
ret
fat_entry_to_bdfe: fat_entry_to_bdfe:
; convert FAT entry at edi to BDFE (block of data of folder entry) at esi, advance esi ; convert FAT entry at edi to BDFE (block of data of folder entry) at esi, advance esi
; destroys eax ; destroys eax
movzx eax, byte [edi+11]
mov [esi], eax ; attributes
mov eax, [ebp-4] mov eax, [ebp-4]
mov [esi+4], eax ; ASCII/UNICODE name mov [esi+4], eax ; ASCII/UNICODE name
fat_entry_to_bdfe2:
movzx eax, byte [edi+11]
mov [esi], eax ; attributes
movzx eax, word [edi+14] movzx eax, word [edi+14]
call fat_time_to_bdfe call fat_time_to_bdfe
mov [esi+8], eax ; creation time mov [esi+8], eax ; creation time
@@ -861,6 +890,8 @@ fat_entry_to_bdfe:
mov [esi+32], eax ; file size (low dword) mov [esi+32], eax ; file size (low dword)
xor eax, eax xor eax, eax
mov [esi+36], eax ; file size (high dword) mov [esi+36], eax ; file size (high dword)
test ebp, ebp
jz .ret
push ecx edi push ecx edi
lea edi, [esi+40] lea edi, [esi+40]
mov esi, ebp mov esi, ebp
@@ -872,6 +903,7 @@ fat_entry_to_bdfe:
@@: @@:
mov esi, edi mov esi, edi
pop edi ecx pop edi ecx
.ret:
ret ret
.ansi: .ansi:
mov ecx, 264/4 mov ecx, 264/4
@@ -879,41 +911,62 @@ fat_entry_to_bdfe:
mov [edi-1], al mov [edi-1], al
jmp @b jmp @b
bdfe_to_fat_entry:
; convert BDFE at edx to FAT entry at edi
; destroys eax
; attributes byte
test byte [edi+11], 8 ; volume label?
jnz @f
mov al, [edx]
and al, 0x27
and byte [edi+11], 0x10
or byte [edi+11], al
@@:
mov eax, [edx+8]
call bdfe_to_fat_time
mov [edi+14], ax ; creation time
mov eax, [edx+12]
call bdfe_to_fat_date
mov [edi+16], ax ; creation date
mov eax, [edx+20]
call bdfe_to_fat_date
mov [edi+18], ax ; last access date
mov eax, [edx+24]
call bdfe_to_fat_time
mov [edi+22], ax ; last write time
mov eax, [edx+28]
call bdfe_to_fat_date
mov [edi+24], ax ; last write date
ret
ramdisk_root_first:
mov edi, 0x100000+512*19
clc
ret
ramdisk_root_next:
add edi, 0x20
cmp edi, 0x100000+512*33
cmc
ret
rd_find_lfn: rd_find_lfn:
; in: esi->name ; in: esi->name
; out: CF=1 - file not found ; out: CF=1 - file not found
; else CF=0 and edi->direntry ; else CF=0 and edi->direntry
push esi ebp edi push esi edi
sub esp, 262*2 ; allocate space for LFN push ramdisk_root_first
mov ebp, esp ; ebp points to buffer push ramdisk_root_next
push 0 ; for fat_get_name: read ASCII name call fat_find_lfn
mov edi, 0x100000+512*19 ; to root dir jc .notfound
.l1:
call fat_get_name
jc .l2
call fat_compare_name
jz .found
.l2:
add edi, 0x20
cmp edi, 0x100000+512*33
jb .l1
.notfound:
add esp, 262*2+4
pop edi ebp esi
stc
ret
.found:
; found
; if this is LFN entry, advance to true entry
cmp byte [edi+11], 0xF
jnz @f
add edi, 0x20
@@:
; folders are not supported
cmp byte [esi], 0 cmp byte [esi], 0
jnz .notfound jnz .notfound
add esp, 262*2+4+4 ; CF=0 add esp, 12
pop ebp esi pop esi
ret ; CF=0
.notfound:
add esp, 8
pop edi esi
stc
ret ret
;---------------------------------------------------------------- ;----------------------------------------------------------------
@@ -1594,4 +1647,46 @@ fs_RamdiskRewrite:
loop .read_symbols loop .read_symbols
ret ret
fs_RamdiskGetFileInfo:
cmp byte [esi], 0
jnz @f
mov eax, 2 ; unsupported
ret
@@:
push edi
call rd_find_lfn
fs_GetFileInfo_finish:
jnc @f
pop edi
mov eax, ERROR_FILE_NOT_FOUND
ret
@@:
push esi ebp
xor ebp, ebp
mov esi, edx
and dword [esi+4], 0
call fat_entry_to_bdfe2
pop ebp esi
pop edi
xor eax, eax
ret
fs_RamdiskSetFileInfo:
cmp byte [esi], 0
jnz @f
mov eax, 2 ; unsupported
ret
@@:
push edi
call rd_find_lfn
jnc @f
pop edi
mov eax, ERROR_FILE_NOT_FOUND
ret
@@:
call bdfe_to_fat_entry
pop edi
xor eax, eax
ret
; \end{diamond} ; \end{diamond}

View File

@@ -3131,6 +3131,7 @@ dword-
* ebx = ࠧ<><E0A0A7><EFBFBD><><E4A0A9> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD> 0 <20><><EFBFBD> HD, -1 <20><><EFBFBD> RD, * ebx = ࠧ<><E0A0A7><EFBFBD><><E4A0A9> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD> 0 <20><><EFBFBD> HD, -1 <20><><EFBFBD> RD,
<20>᫨ 䠩<> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>᫨ 䠩<> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* <20><><EFBFBD> <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 5 <20>㭪樨 70.
* <20><EFBFBD><E3ADAA><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>. * <20><EFBFBD><E3ADAA><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>.
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A5A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E2A0AA> <20><><EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD><><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A5A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E2A0AA> <20><><EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD><><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
(<28><><><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20> FAT), <20><> <20><><><E1ABA5><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. (<28><><><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20> FAT), <20><> <20><><><E1ABA5><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
@@ -3167,6 +3168,7 @@ dword-
<20><><EFBFBD> <20><><EFBFBD><E2AEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1AAAE><><E1AEA7><EFBFBD><EFBFBD><EFBFBD> backup-<2D><><EFBFBD><E5A8A2>, <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><E2AEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1AAAE><><E1AEA7><EFBFBD><EFBFBD><EFBFBD> backup-<2D><><EFBFBD><E5A8A2>, <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD> <20><><EFBFBD><20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20> Kolibri, <20><EFBFBD><E0A0A2>) <20><><EFBFBD> <20><><EFBFBD><20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20> Kolibri, <20><EFBFBD><E0A0A2>)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* <20><><EFBFBD> <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 5 <20>㭪樨 70.
* <20><EFBFBD><E3ADAA><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>. * <20><EFBFBD><E3ADAA><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>.
====================================================================== ======================================================================
@@ -3198,6 +3200,7 @@ dword-
* ᫥<><E1ABA5><EFBFBD>騥 4 <20><><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD>, 1<=m<=12 * ᫥<><E1ABA5><EFBFBD>騥 4 <20><><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD>, 1<=m<=12
* <20><><EFBFBD><EFBFBD>訥 7 <20><><EFBFBD> = <20><><EFBFBD> <20><EFBFBD><E2ADAE>⥫쭮 1980 * <20><><EFBFBD><EFBFBD>訥 7 <20><><EFBFBD> = <20><><EFBFBD> <20><EFBFBD><E2ADAE>⥫쭮 1980
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* <20><><EFBFBD> <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 5 <20>㭪樨 70.
* <20><EFBFBD><E3ADAA><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>. * <20><EFBFBD><E3ADAA><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>.
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>/<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E2A0A5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>/<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E2A0A5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
@@ -4052,6 +4055,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* +12 = +0xC: dword: ࠧ<><E0A0A7><EFBFBD> * +12 = +0xC: dword: ࠧ<><E0A0A7><EFBFBD>
* +16 = +0x10: dword: 㪠<><E3AAA0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * +16 = +0x10: dword: 㪠<><E3AAA0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* +20 = +0x14: n db: ASCIIZ-<2D><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9> * +20 = +0x14: n db: ASCIIZ-<2D><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>
<20><><EFBFBD>
* +20 = +0x14: db 0
* +21 = +0x15: dd 㪠<><E3AAA0><EFBFBD> <20><> ASCIIZ-<2D><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><E3ACA5><EFBFBD><20><> ᮮ⢥<E1AEAE><E2A2A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><E3ACA5><EFBFBD><20><> ᮮ⢥<E1AEAE><E2A2A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD>.
<EFBFBD><EFBFBD><EFBFBD><><E4A0A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢨⥫쭮 <20><><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20>㪢. <20><><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><><E4A0A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢨⥫쭮 <20><><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20>㪢. <20><><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2> cp866 (DOS). <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2> cp866 (DOS).
@@ -4076,6 +4082,8 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 0 - <20><EFBFBD><E2A5AD><><E4A0A9> * <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 0 - <20><EFBFBD><E2A5AD><><E4A0A9>
* <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 1 - <20><EFBFBD><E2A5AD> <20><><EFBFBD><EFBFBD><EFBFBD> * <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 1 - <20><EFBFBD><E2A5AD> <20><><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 2 - ᮧ<><E1AEA7><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><E0A5A7><EFBFBD><EFBFBD><EFBFBD><><E4A0A9> * <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 2 - ᮧ<><E1AEA7><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><E0A5A7><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>
* <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 5 - <20><><EFBFBD><EFBFBD><EFBFBD><E7A5AD> <20><><EFBFBD>⮢ 䠩<><E4A0A9>/<2F><><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 6 - <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD> <20><><EFBFBD>⮢ 䠩<><E4A0A9>/<2F><><EFBFBD><EFBFBD><EFBFBD>
====================================================================== ======================================================================
= <20><EFBFBD><E3ADAA><EFBFBD> 70, <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 0 - <20><EFBFBD><E2A5AD><><E4A0A9> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6AA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. = = <20><EFBFBD><E3ADAA><EFBFBD> 70, <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 0 - <20><EFBFBD><E2A5AD><><E4A0A9> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6AA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. =
@@ -4091,6 +4099,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* +16 = +0x10: dword: 㪠<><E3AAA0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * +16 = +0x10: dword: 㪠<><E3AAA0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* +20 = +0x14: ASCIIZ-<2D><><EFBFBD><><E4A0A9>, <20><EFBFBD><E0A0A2><EFBFBD> <20><>ନ஢<E0ACA8><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E3AAA0><EFBFBD><EFBFBD> <20> * +20 = +0x14: ASCIIZ-<2D><><EFBFBD><><E4A0A9>, <20><EFBFBD><E0A0A2><EFBFBD> <20><>ନ஢<E0ACA8><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E3AAA0><EFBFBD><EFBFBD> <20>
<20><><20><><EFBFBD><EFBFBD><E1A0AD> <20><><20><><EFBFBD><EFBFBD><E1A0AD>
<20><><EFBFBD>
* +20 = +0x14: db 0
* +21 = +0x15: dd 㪠<><E3AAA0><EFBFBD> <20><> ASCIIZ-<2D><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>:
* eax = 0 - <20>ᯥ譮, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E8A8A1><><E4A0A9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> * eax = 0 - <20>ᯥ譮, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E8A8A1><><E4A0A9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
* ebx = <20><><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A0AD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> * ebx = <20><><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A0AD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>
@@ -4121,6 +4132,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ࠧ<><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 32 + [+12]*560 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ࠧ<><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 32 + [+12]*560 <20><><EFBFBD><EFBFBD>
* +20 = +0x14: ASCIIZ-<2D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><EFBFBD><E0A0A2><EFBFBD> <20><>ନ஢<E0ACA8><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E3AAA0><EFBFBD><EFBFBD> <20> * +20 = +0x14: ASCIIZ-<2D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><EFBFBD><E0A0A2><EFBFBD> <20><>ନ஢<E0ACA8><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E3AAA0><EFBFBD><EFBFBD> <20>
<20><><20><><EFBFBD><EFBFBD><E1A0AD> <20><><20><><EFBFBD><EFBFBD><E1A0AD>
<20><><EFBFBD>
* +20 = +0x14: db 0
* +21 = +0x15: dd 㪠<><E3AAA0><EFBFBD> <20><> ASCIIZ-<2D><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>:
* eax = 0 - <20>ᯥ譮, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E8A8A1><><E4A0A9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> * eax = 0 - <20>ᯥ譮, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E8A8A1><><E4A0A9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
* ebx = <20><>᫮ 䠩<><E4A0A9><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><E0ACA0><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>, * ebx = <20><>᫮ 䠩<><E4A0A9><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><E0ACA0><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>,
@@ -4213,6 +4227,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* +16 = +0x10: dword: 㪠<><E3AAA0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * +16 = +0x10: dword: 㪠<><E3AAA0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* +20 = +0x14: ASCIIZ-<2D><><EFBFBD><><E4A0A9>, <20><EFBFBD><E0A0A2><EFBFBD> <20><>ନ஢<E0ACA8><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E3AAA0><EFBFBD><EFBFBD> <20> * +20 = +0x14: ASCIIZ-<2D><><EFBFBD><><E4A0A9>, <20><EFBFBD><E0A0A2><EFBFBD> <20><>ନ஢<E0ACA8><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E3AAA0><EFBFBD><EFBFBD> <20>
<20><><20><><EFBFBD><EFBFBD><E1A0AD> <20><><20><><EFBFBD><EFBFBD><E1A0AD>
<20><><EFBFBD>
* +20 = +0x14: db 0
* +21 = +0x15: dd 㪠<><E3AAA0><EFBFBD> <20><> ASCIIZ-<2D><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>:
* eax = 0 - <20>ᯥ譮, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E8A8A1><><E4A0A9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> * eax = 0 - <20>ᯥ譮, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E8A8A1><><E4A0A9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
* ebx = <20><><20><><EFBFBD><EFBFBD><EFBFBD><E1A0AD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0) * ebx = <20><><20><><EFBFBD><EFBFBD><EFBFBD><E1A0AD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0)
@@ -4222,6 +4239,64 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* <20>᫨ ᢮<><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>筮, <20><> <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, * <20>᫨ ᢮<><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>筮, <20><> <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<>쪮 ᬮ<><E1ACAE><EFBFBD>, <20><>᫥ 祣<> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E8A8A1> 8. <>쪮 ᬮ<><E1ACAE><EFBFBD>, <20><>᫥ 祣<> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E8A8A1> 8.
======================================================================
=== <20><EFBFBD><E3ADAA><EFBFBD> 70, <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 5 - <20><><EFBFBD><EFBFBD><EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD><20><><E4A0A9>/<2F><><EFBFBD><EFBFBD><EFBFBD>. ===
======================================================================
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* eax = 70 - <20><><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨
* ebx = 㪠<><E3AAA0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><E0ACA0><E6A8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0ACA0><E6A8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* +0: dword: 5 = <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㭪樨
* +4: dword: 0 (<28><><EFBFBD>ࢨ஢<E0A2A8><E0AEA2><EFBFBD>)
* +8: dword: 0 (<28><><EFBFBD>ࢨ஢<E0A2A8><E0AEA2><EFBFBD>)
* +12 = +0xC: dword: 0 (<28><><EFBFBD>ࢨ஢<E0A2A8><E0AEA2><EFBFBD>)
* +16 = +0x10: dword: 㪠<><E3AAA0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(40 <20><><EFBFBD><EFBFBD>)
* +20 = +0x14: ASCIIZ-<2D><><EFBFBD><><E4A0A9>, <20><EFBFBD><E0A0A2><EFBFBD> <20><>ନ஢<E0ACA8><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E3AAA0><EFBFBD><EFBFBD> <20>
<20><><20><><EFBFBD><EFBFBD><E1A0AD>
<20><><EFBFBD>
* +20 = +0x14: db 0
* +21 = +0x15: dd 㪠<><E3AAA0><EFBFBD> <20><> ASCIIZ-<2D><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>:
* eax = 0 - <20>ᯥ譮, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E8A8A1><><E4A0A9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
* ebx ࠧ<><E0A0A7><EFBFBD><E8A0A5><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><E4A0A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A0A5><EFBFBD> <20> <20><><EFBFBD><E0ACA0> <20><><EFBFBD><EFBFBD>
(<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><E2A0AB><EFBFBD>), 㪠<><E3AAA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><E1A0AD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㭪樨 1, <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>
(<28><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 40 = 0x28 <20><><EFBFBD><EFBFBD>).
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* <20><EFBFBD><E3ADAA><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E3A0AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <> /, /rd <20>
<20><><EFBFBD><E0ADA5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <> /rd/1.
======================================================================
===== <20><EFBFBD><E3ADAA><EFBFBD> 70, <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 6 - <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD> <20><><EFBFBD>⮢ 䠩<><E4A0A9>/<2F><><EFBFBD><EFBFBD><EFBFBD>. ====
======================================================================
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* eax = 70 - <20><><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨
* ebx = 㪠<><E3AAA0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><E0ACA0><E6A8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0ACA0><E6A8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* +0: dword: 6 = <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㭪樨
* +4: dword: 0 (<28><><EFBFBD>ࢨ஢<E0A2A8><E0AEA2><EFBFBD>)
* +8: dword: 0 (<28><><EFBFBD>ࢨ஢<E0A2A8><E0AEA2><EFBFBD>)
* +12 = +0xC: dword: 0 (<28><><EFBFBD>ࢨ஢<E0A2A8><E0AEA2><EFBFBD>)
* +16 = +0x10: dword: 㪠<><E3AAA0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> (32 <20><><EFBFBD><EFBFBD><EFBFBD>)
* +20 = +0x14: ASCIIZ-<2D><><EFBFBD><><E4A0A9>, <20><EFBFBD><E0A0A2><EFBFBD> <20><>ନ஢<E0ACA8><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E3AAA0><EFBFBD><EFBFBD> <20>
<20><><20><><EFBFBD><EFBFBD><E1A0AD>
<20><><EFBFBD>
* +20 = +0x14: db 0
* +21 = +0x15: dd 㪠<><E3AAA0><EFBFBD> <20><> ASCIIZ-<2D><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>:
* eax = 0 - <20>ᯥ譮, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E8A8A1><><E4A0A9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
* ebx ࠧ<><E0A0A7><EFBFBD><E8A0A5><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 32 <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><E2A0AB><EFBFBD>),
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><><E3AAA0><EFBFBD> <20> <20><><EFBFBD><EFBFBD><E1A0AD> <20><><EFBFBD><EFBFBD>㭪樨 1
(<28><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><E0A0A7><EFBFBD><EFBFBD><><E4A0A9>). <20><><EFBFBD><E0A8A1><>/<2F><><EFBFBD><EFBFBD><EFBFBD>/<2F><>⪠ ⮬<>
(<28><><EFBFBD><EFBFBD> 3,4 <20> dword'<27> +0) <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> +4 (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* <20><EFBFBD><E3ADAA><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E3A0AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <> /, /rd <20>
<20><><EFBFBD><E0ADA5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <> /rd/1.
====================================================================== ======================================================================
========== <20><EFBFBD><E3ADAA><EFBFBD> -1 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ========= ========== <20><EFBFBD><E3ADAA><EFBFBD> -1 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> =========
====================================================================== ======================================================================

View File

@@ -1241,7 +1241,7 @@ flp_notroot_extend_dir:
fd_find_lfn: fd_find_lfn:
; in: esi->name ; in: esi->name
; out: CF=1 - file not found ; out: CF=1 - file not found
; else CF=0 and edi->direntry ; else CF=0 and edi->direntry, eax=directory cluster (0 for root)
push esi edi push esi edi
push 0 push 0
push flp_root_first push flp_root_first
@@ -1264,6 +1264,7 @@ fd_find_lfn:
stc stc
ret ret
.found: .found:
mov eax, [esp+8]
add esp, 16 ; CF=0 add esp, 16 ; CF=0
pop esi pop esi
ret ret
@@ -1905,4 +1906,58 @@ fs_FloppyRewrite:
pop edi ecx pop edi ecx
jmp .ret jmp .ret
fs_FloppyGetFileInfo:
call read_flp_fat
cmp [FDC_Status], 0
jnz ret11
cmp byte [esi], 0
jnz @f
mov eax, 2 ; unsupported
ret
@@:
push edi
call fd_find_lfn
jmp fs_GetFileInfo_finish
ret11:
mov eax, 11
ret
fs_FloppySetFileInfo:
call read_flp_fat
cmp [FDC_Status], 0
jnz ret11
cmp byte [esi], 0
jnz @f
mov eax, 2 ; unsupported
ret
@@:
push edi
call fd_find_lfn
jnc @f
pop edi
mov eax, ERROR_FILE_NOT_FOUND
ret
@@:
push eax
call bdfe_to_fat_entry
pop eax
test eax, eax
jz .root
add eax, 31
pusha
call save_chs_sector
popa
jmp .cmn
.root:
call save_flp_root
.cmn:
pop edi
xor eax, eax
cmp [FDC_Status], 0
jz @f
mov al, 11
@@:
ret
; \end{diamond} ; \end{diamond}

View File

@@ -7,6 +7,7 @@
;; Copyright 2002 Paolo Minazzi, paolo.minazzi@inwind.it ;; ;; Copyright 2002 Paolo Minazzi, paolo.minazzi@inwind.it ;;
;; ;; ;; ;;
;; See file COPYING for details ;; ;; See file COPYING for details ;;
;; 15.06.2006 LFN get/set file/folder info - diamond ;;
;; 27.05.2006 LFN create/rewrite file - diamond ;; ;; 27.05.2006 LFN create/rewrite file - diamond ;;
;; 04.05.2006 LFN read folder - diamond ;; ;; 04.05.2006 LFN read folder - diamond ;;
;; 29.04.2006 Elimination of hangup after the ;; ;; 29.04.2006 Elimination of hangup after the ;;
@@ -2512,28 +2513,28 @@ hd_read:
xor eax,eax xor eax,eax
mov edx,[hdbase] mov edx,[hdbase]
inc edx inc edx
out dx,al ; ATAFeatures <20><><EFBFBD>𡢠 "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" out dx,al ; ATAFeatures <EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
inc edx inc edx
inc eax inc eax
out dx,al ; ATASectorCount <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> out dx,al ; ATASectorCount <20><><EFBFBD><EFBFBD>稪 ᥪ<EFBFBD><EFBFBD>
inc edx inc edx
mov eax,[esp+4] mov eax,[esp+4]
out dx,al ; ATASectorNumber <EFBFBD><EFBFBD><EFBFBD>𡢠 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> out dx,al ; ATASectorNumber <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1A5AA><EFBFBD><EFBFBD>
shr eax,8 shr eax,8
inc edx inc edx
out dx,al ; ATACylinder <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>𭤠<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) out dx,al ; ATACylinder <20><><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
shr eax,8 shr eax,8
inc edx inc edx
out dx,al ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>𭤠<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) out dx,al ; <20><><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
shr eax,8 shr eax,8
inc edx inc edx
and al,1+2+4+8 and al,1+2+4+8
add al,byte [hdid] add al,byte [hdid]
add al,128+64+32 add al,128+64+32
out dx,al ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD> <20>𡪠 out dx,al ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>
inc edx inc edx
mov al,20h mov al,20h
out dx,al ; ATACommand <20><><EFBFBD>𡢠 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> out dx,al ; ATACommand <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sti sti
call wait_for_sector_buffer call wait_for_sector_buffer
@@ -2934,7 +2935,7 @@ read_hd_file:
hd_find_lfn: hd_find_lfn:
; in: esi->name ; in: esi->name
; out: CF=1 - file not found ; out: CF=1 - file not found
; else CF=0 and edi->direntry ; else CF=0 and edi->direntry, eax=sector
; destroys eax ; destroys eax
push esi edi push esi edi
push 0 push 0
@@ -2964,6 +2965,15 @@ hd_find_lfn:
stc stc
ret ret
.found: .found:
lea eax, [esp+8]
cmp dword [eax], 0
jz .root
call fat_get_sector
jmp .cmn
.root:
mov eax, [eax+4]
add eax, [ROOT_START]
.cmn:
add esp, 20 ; CF=0 add esp, 20 ; CF=0
pop esi pop esi
ret ret
@@ -3907,4 +3917,65 @@ fs_HdRewrite:
popad popad
ret ret
fs_HdGetFileInfo:
cmp [fat_type], 0
jnz @f
mov eax, ERROR_UNKNOWN_FS
ret
@@:
cmp byte [esi], 0
jnz @f
mov eax, 2
ret
@@:
push edi
call hd_find_lfn
pushfd
cmp [hd_error], 0
jz @f
popfd
pop edi
mov eax, 11
ret
@@:
popfd
jmp fs_GetFileInfo_finish
fs_HdSetFileInfo:
cmp [fat_type], 0
jnz @f
mov eax, ERROR_UNKNOWN_FS
ret
@@:
cmp byte [esi], 0
jnz @f
mov eax, 2
ret
@@:
push edi
call hd_find_lfn
pushfd
cmp [hd_error], 0
jz @f
popfd
pop edi
mov eax, 11
ret
@@:
popfd
jnc @f
pop edi
mov eax, ERROR_FILE_NOT_FOUND
ret
@@:
push eax
call bdfe_to_fat_entry
pop eax
mov ebx, buffer
call hd_write
call update_disk
pop edi
xor eax, eax
ret
; \end{diamond} ; \end{diamond}

View File

@@ -54,11 +54,12 @@ file_system_lfn:
; 2 : create/rewrite file ; 2 : create/rewrite file
; 3 : write/append to file - not implemented yet ; 3 : write/append to file - not implemented yet
; 4 : set end of file - not implemented yet ; 4 : set end of file - not implemented yet
; 5 : get file attributes structure - not implemented yet ; 5 : get file/directory attributes structure
; 6 : start application - not implemented yet ; 6 : set file/directory attributes structure
; 7 : delete file - not implemented yet ; 7 : start application - not implemented yet
; 8 : create directory - not implemented yet ; 8 : delete file - not implemented yet
; 9 : rename file/directory - not implemented yet ; 9 : create directory - not implemented yet
; 10: rename file/directory - not implemented yet
add eax, std_application_base_address add eax, std_application_base_address
; parse file name ; parse file name
@@ -311,10 +312,18 @@ fs_OnRamdisk:
mov dword [esp+36], 2 ; not implemented mov dword [esp+36], 2 ; not implemented
ret ret
fs_NotImplemented:
mov eax, 2
ret
fs_RamdiskServices: fs_RamdiskServices:
dd fs_RamdiskRead dd fs_RamdiskRead
dd fs_RamdiskReadFolder dd fs_RamdiskReadFolder
dd fs_RamdiskRewrite dd fs_RamdiskRewrite
dd fs_NotImplemented
dd fs_NotImplemented
dd fs_RamdiskGetFileInfo
dd fs_RamdiskSetFileInfo
fs_NumRamdiskServices = ($ - fs_RamdiskServices)/4 fs_NumRamdiskServices = ($ - fs_RamdiskServices)/4
fs_OnFloppy: fs_OnFloppy:
@@ -339,6 +348,10 @@ fs_FloppyServices:
dd fs_FloppyRead dd fs_FloppyRead
dd fs_FloppyReadFolder dd fs_FloppyReadFolder
dd fs_FloppyRewrite dd fs_FloppyRewrite
dd fs_NotImplemented
dd fs_NotImplemented
dd fs_FloppyGetFileInfo
dd fs_FloppySetFileInfo
fs_NumFloppyServices = ($ - fs_FloppyServices)/4 fs_NumFloppyServices = ($ - fs_FloppyServices)/4
fs_OnHd0: fs_OnHd0:
@@ -401,6 +414,10 @@ fs_HdServices:
dd fs_HdRead dd fs_HdRead
dd fs_HdReadFolder dd fs_HdReadFolder
dd fs_HdRewrite dd fs_HdRewrite
dd fs_NotImplemented
dd fs_NotImplemented
dd fs_HdGetFileInfo
dd fs_HdSetFileInfo
fs_NumHdServices = ($ - fs_HdServices)/4 fs_NumHdServices = ($ - fs_HdServices)/4
fs_HasRamdisk: fs_HasRamdisk: