/kernel/trunk/blkdev/rd.inc |
---|
31,13 → 31,10 |
and eax,0x0fffffff ;2 ok |
shr ax,4 ;1 ok |
mov dword [edi],eax |
add edi,4 |
mov dword [edi],ebx |
add edi,4 |
mov dword [edi],ecx |
add edi,4 |
mov dword [edi],edx |
add edi,4 |
mov dword [edi+4],ebx |
mov dword [edi+8],ecx |
mov dword [edi+12],edx |
add edi,16 |
add esi,12 |
cmp edi,0x280000+2856*2 ;2849 clusters |
64,9 → 61,8 |
shrd eax,ebx,8 |
shr ebx,8 |
mov dword [edi],eax |
add edi,4 |
mov word [edi],bx |
add edi,2 |
mov word [edi+4],bx |
add edi,6 |
add esi,8 |
cmp edi,0x100000+512+4278 ;4274 bytes - all used FAT |
100,8 → 96,8 |
repne scasw |
jnz rdfs2 ;if last cluster not 0 |
inc ebx |
jcxz rdfs2 ;if last cluster=0 |
jmp rdfs1 ;if not last |
test ecx, ecx |
jnz rdfs1 |
rdfs2: |
shl ebx,9 ;free clusters*512 |
mov edi,ebx |
438,15 → 434,11 |
jbe flnsa |
sub eax,512 |
mov [esp+12],eax |
mov eax,[esp+16] |
add eax,512 |
mov [esp+16],eax |
add dword [esp+16], 512 |
jmp frnewds |
flnsa: |
dec edi |
dec edi |
mov [edi],word 4095 ; mark end of file - last cluster |
mov [edi-2],word 4095 ; mark end of file - last cluster |
frnoreadds: |
644,7 → 636,7 |
push ecx |
mov ecx, 8 |
push edi ebp ecx |
cmp byte [ebp-4], 0 |
test byte [ebp-4], 1 |
jnz .unicode_short |
@@: |
mov al, [edi] |
763,7 → 755,7 |
ret |
@@: |
; if this is first entry: |
cmp byte [ebp-4], 0 |
test byte [ebp-4], 1 |
jnz .ret |
; buffer at ebp contains UNICODE name, convert it to ANSI |
push esi edi |
872,13 → 864,20 |
push ecx edi |
lea edi, [esi+40] |
mov esi, ebp |
mov ecx, 259/2 |
test byte [esi-4], 1 |
jz .ansi |
mov ecx, 260/2 |
rep movsd |
movsw |
stosw |
mov [edi-2], ax |
@@: |
mov esi, edi |
pop edi ecx |
ret |
.ansi: |
mov ecx, 264/4 |
rep movsd |
mov [edi-1], al |
jmp @b |
rd_find_lfn: |
; in: esi->name |
1013,7 → 1012,9 |
; fs_RamdiskReadFolder - LFN variant for reading sys floppy folder |
; |
; esi points to filename; only root is folder on ramdisk |
; ebx pointer to 32-bit number = first wanted block |
; ebx pointer to structure 32-bit number = first wanted block |
; & flags (bitfields) |
; flags: bit 0: 0=ANSI names, 1=UNICODE names |
; ecx number of blocks to read, 0+ |
; edx mem location to return data |
; |
1022,7 → 1023,6 |
; |
;-------------------------------------------------------------- |
fs_RamdiskReadFolder: |
mov ebx, [ebx] |
cmp byte [esi], 0 |
jz @f |
; ramdisk doesn't support folders |
1042,7 → 1042,8 |
push ebp |
sub esp, 262*2 ; allocate space for LFN |
mov ebp, esp |
push 1 ; for fat_get_name: read UNICODE name |
push dword [ebx+4] ; for fat_get_name: read ANSI/UNICODE name |
mov ebx, [ebx] |
; read root |
mov esi, edi ; esi points to block of data of folder entry (BDFE) |
mov edi, 0x100000+512*19 |
/kernel/trunk/docs/sysfuncr.txt |
---|
2236,6 → 2236,27 |
default.skn, ¨«¨ ¤¨ ¬¨ç¥áª¨ á ¯®¬®éìî ¯à¨«®¦¥¨ï desktop. |
====================================================================== |
============ ãªæ¨ï 49 - Advanced Power Management (APM). =========== |
====================================================================== |
à ¬¥âàë: |
* eax = 49 - ®¬¥à äãªæ¨¨ |
* dx = ®¬¥à äãªæ¨¨ APM ( «®£ ax ¢ ᯥæ¨ä¨ª 樨) |
* bx, cx = ¯ à ¬¥âàë äãªæ¨¨ APM |
®§¢à é ¥¬®¥ § 票¥: |
* 16-¡¨âë¥ à¥£¨áâàë ax, bx, cx, dx, si, di ¨ ä« £ CF |
ãáâ ®¢«¥ë ¢ ᮮ⢥âá⢨¨ ᮠᯥæ¨ä¨ª 樥© APM |
* áâ à訥 ¯®«®¢¨ë 32-¡¨âëå ॣ¨áâ஢ eax, ebx, ecx, |
edx, esi, edi à §àãè îâáï |
¬¥ç ¨ï: |
* ¯¥æ¨ä¨ª æ¨ï APM 1.2 ®¯¨áë¢ ¥âáï ¢ ¤®ªã¬¥â¥ |
"Advanced Power Management (APM) BIOS Specification" |
(Revision 1.2), ¤®áâ㯮¬ |
http://www.microsoft.com/whdc/archive/amp_12.mspx; |
ªà®¬¥ ⮣®, ® ¢ª«îç¥ ¢ ¨§¢¥áâë© Interrupt List by Ralf Brown |
(http://www.pobox.com/~ralf/files.html, |
ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/). |
====================================================================== |
================= ãªæ¨ï 50 - ãáâ ®¢ª ä®à¬ë ®ª . ================= |
====================================================================== |
¡ëçë¥ ®ª ¯à¥¤áâ ¢«ïîâ ᮡ®© ¯àאַ㣮«ì¨ª¨. ¯®¬®éìî í⮩ äãªæ¨¨ |
4077,7 → 4098,11 |
®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
* +0: dword: 1 = ®¬¥à ¯®¤äãªæ¨¨ |
* +4: dword: ¨¤¥ªá ç «ì®£® ¡«®ª (áç¨â ï á 0) |
* +8: dword: 0 (§ १¥à¢¨à®¢ ®) |
* +8: dword: ¯®«¥ ä« £®¢: |
* ¡¨â 0 (¬ ᪠1): ¢ ª ª®¬ ä®à¬ ⥠¢®§¢à é âì ¨¬¥ , |
0=ANSI, 1=UNICODE |
* ¯à®ç¨¥ ¡¨âë § १¥à¢¨à®¢ ë ¨ ¤®«¦ë ¡ëâì ãáâ ®¢«¥ë ¢ 0 |
¤«ï ¡ã¤ã饩 ᮢ¬¥á⨬®á⨠|
* +12 = +0xC: dword: ᪮«ìª® ¡«®ª®¢ ç¨â âì |
* +16 = +0x10: dword: 㪠§ â¥«ì ¡ãä¥à, ªã¤ ¡ã¤ãâ § ¯¨á ë |
¤ ë¥, à §¬¥à ¡ãä¥à ¤®«¦¥ ¡ëâì ¥ ¬¥ìè¥ 32 + [+12]*560 ¡ ©â |
4114,7 → 4139,8 |
íâ® ¬®¦¥â ¡ëâì ¯®«¥§® ¤«ï ¢â®¬ â¨ç¥áª®£® ᮧ¤ ¨ï |
backup- à娢®¢, ¨¡® ¯à¨ § ¯¨á¨ ¡¨â ®¡ëç® ãáâ ¢«¨¢ ¥âáï |
(¥ ¢ Kolibri, ¯à ¢¤ ) |
* +4: byte: ⨯ ¤ ëå ¨¬¥¨: (¤«ï ⥪ã饩 ॠ«¨§ 樨 ¢á¥£¤ 1) |
* +4: byte: ⨯ ¤ ëå ¨¬¥¨: |
(ᮢ¯ ¤ ¥â á ¡¨â®¬ 0 ä« £®¢ ¨ä®à¬ 樮®© áâàãªâãàë) |
* 0 = ASCII = 1-¡ ©â®¥ ¯à¥¤áâ ¢«¥¨¥ ª ¦¤®£® ᨬ¢®« |
* 1 = UNICODE = 2-¡ ©â®¥ ¯à¥¤áâ ¢«¥¨¥ ª ¦¤®£® ᨬ¢®« |
* +5: 3*byte: § १¥à¢¨à®¢ ® (㫨) |
4142,11 → 4168,12 |
* +2: word: £®¤ |
* ¯à¨¬¥à, 25.11.1979 § ¯¨áë¢ ¥âáï ª ª (¢ hex) 19 0B BB 07 |
¬¥ç ¨ï: |
* ¥ªãé ï ॠ«¨§ æ¨ï ¢®§¢à é ¥â ¨¬¥ ⮫쪮 ¢ ä®à¬ ⥠UNICODE. |
* ᫨ ¢ ¯à¨áãâáâ¢ã¥â ¨¬ï ¢ ASCII, â® ¤«¨ á®áâ ¢«ï¥â |
304 ¡ ©â , ¥á«¨ ¢ UNICODE - 560 ¡ ©â. 票¥ ¤«¨ë ¢ëà ¢¥® |
楫®¥ ªà ⮥ 16 ¡ ©â |
(¤«ï ãáª®à¥¨ï ®¡à ¡®âª¨ ¢ ªíè-¯ ¬ï⨠CPU). |
* ¥à¢ë© ᨬ¢®« ¯®á«¥ ¨¬¥¨ ã«¥¢®© (ASCIIZ-áâப ). «ì¥©è¨¥ |
¤ ë¥ á®¤¥à¦ â ¬ãá®à. |
* ᫨ ä ©«ë ¢ ¯ ¯ª¥ ª®ç¨«¨áì à ìè¥, 祬 ¡ë«® ¯à®ç¨â ® |
§ ¯à®è¥®¥ ª®«¨ç¥á⢮, â® äãªæ¨ï ¯à®ç¨â ¥â, ᪮«ìª® ᬮ¦¥â, |
¯®á«¥ 祣® ¢¥àñâ eax=6 (EOF). |
/kernel/trunk/fs/fat12.inc |
---|
55,7 → 55,6 |
rdfs1_1: |
mov ebx,[eax] |
and ebx,4095 |
cmp ebx,0 |
jne rdfs2_1 |
add edi,512 |
rdfs2_1: |
1268,7 → 1267,9 |
; fs_FloppyReadFolder - LFN variant for reading floppy folders |
; |
; esi points to filename |
; ebx pointer to 32-bit number = first wanted block, 0+ |
; ebx pointer to structure: 32-bit number = first wanted block, 0+ |
; & flags (bitfields) |
; flags: bit 0: 0=ANSI names, 1=UNICODE names |
; ecx number of blocks to read, 0+ |
; edx mem location to return data |
; |
1278,7 → 1279,6 |
;-------------------------------------------------------------- |
fs_FloppyReadFolder: |
call read_flp_fat |
mov ebx, [ebx] |
push edi |
cmp byte [esi], 0 |
jz .root |
1307,7 → 1307,8 |
push ecx ebp |
sub esp, 262*2 ; reserve space for LFN |
mov ebp, esp |
push 1 ; for fat_get_name: read UNICODE names |
push dword [ebx+4] ; for fat_get_name: read ANSI/UNICODE names |
mov ebx, [ebx] |
; init header |
push eax ecx |
mov edi, edx |
/kernel/trunk/fs/fat32.inc |
---|
3202,7 → 3202,9 |
; fs_HdReadFolder - LFN variant for reading hard disk folder |
; |
; esi points to filename |
; ebx pointer to 32-bit number = first wanted block, 0+ |
; ebx pointer to structure 32-bit number = first wanted block, 0+ |
; & flags (bitfields) |
; flags: bit 0: 0=ANSI names, 1=UNICODE names |
; ecx number of blocks to read, 0+ |
; edx mem location to return data |
; |
3211,7 → 3213,6 |
; |
;-------------------------------------------------------------- |
fs_HdReadFolder: |
mov ebx, [ebx] |
mov eax, [ROOT_CLUSTER] |
push edi |
cmp byte [esi], 0 |
3237,7 → 3238,8 |
push ebp |
sub esp, 262*2 ; reserve space for LFN |
mov ebp, esp |
push 1 ; for fat_get_name: read UNICODE name |
push dword [ebx+4] ; for fat_get_name: read ANSI/UNICODE name |
mov ebx, [ebx] |
; init header |
push eax ecx |
mov edi, edx |
/kernel/trunk/fs/fs_lfn.inc |
---|
32,17 → 32,17 |
virtual_root_query: |
dd fs_HasRamdisk |
du 'rd',0 |
db 'rd',0 |
dd fs_HasFloppy |
du 'fd',0 |
db 'fd',0 |
dd fs_HasHd0 |
du 'hd0',0 |
db 'hd0',0 |
dd fs_HasHd1 |
du 'hd1',0 |
db 'hd1',0 |
dd fs_HasHd2 |
du 'hd2',0 |
db 'hd2',0 |
dd fs_HasHd3 |
du 'hd3',0 |
db 'hd3',0 |
dd 0 |
endg |
104,9 → 104,10 |
mov ebp, [ebx+12] |
mov edx, [ebx+16] |
add edx, std_application_base_address |
mov ebx, [ebx+4] |
push dword [ebx+4] ; first block |
mov ebx, [ebx+8] ; flags |
mov esi, [edi+4] |
; ebx=first block, ebp=number of blocks, edx=return area, esi='Next' handler |
; ebx=flags, [esp]=first block, ebp=number of blocks, edx=return area, esi='Next' handler |
mov edi, edx |
mov ecx, 32/4 |
rep stosd |
115,7 → 116,7 |
call esi |
jc .maindir_done |
inc dword [edx+8] |
dec ebx |
dec dword [esp] |
jns .maindir_loop |
dec ebp |
js .maindir_loop |
142,15 → 143,27 |
@@: |
pop eax |
add al, '0' |
stosw |
stosb |
test bl, 1 ; UNICODE name? |
jz .ansi2 |
mov byte [edi], 0 |
inc edi |
.ansi2: |
test al, al |
jnz @b |
mov byte [edi-1], 0 |
pop edi |
; UNICODE name length is 520 bytes, ANSI - 264 |
add edi, 520 |
test bl, 1 |
jnz @f |
sub edi, 520-264 |
@@: |
pop edx eax |
jmp .maindir_loop |
.maindir_done: |
mov ebx, [edx+8] |
pop eax |
mov ebx, [edx+4] |
xor eax, eax |
dec ebp |
js @f |
173,9 → 186,10 |
mov ebp, [ebx+12] |
mov edx, [ebx+16] |
add edx, std_application_base_address |
mov ebx, [ebx+4] |
push dword [ebx+4] ; first block |
mov ebx, [ebx+8] ; flags |
xor eax, eax |
; eax=0, ebx=first block, ebp=number of blocks, edx=return area |
; eax=0, [esp]=first block, ebx=flags, ebp=number of blocks, edx=return area |
mov edi, edx |
mov ecx, 32/4 |
rep stosd |
190,13 → 204,13 |
.readroot_next: |
or ecx, -1 |
xchg esi, edi |
repnz scasw |
repnz scasb |
xchg esi, edi |
jmp .readroot_loop |
@@: |
xor eax, eax |
inc dword [edx+8] |
dec ebx |
dec dword [esp] |
jns .readroot_next |
dec ebp |
js .readroot_next |
208,15 → 222,24 |
rep stosd |
push edi |
@@: |
lodsw |
stosw |
lodsb |
stosb |
test bl, 1 |
jz .ansi |
mov byte [edi], 0 |
inc edi |
.ansi: |
test eax, eax |
jnz @b |
pop edi |
add edi, 520 |
test bl, 1 |
jnz .readroot_loop |
sub edi, 520-264 |
jmp .readroot_loop |
.readroot_done: |
mov ebx, [edx+8] |
pop eax |
mov ebx, [edx+4] |
xor eax, eax |
dec ebp |
js @f |
/kernel/trunk/kernel.asm |
---|
4888,7 → 4888,7 |
sys_apm: |
cmp word [apm_vf], 0 ; Check APM BIOS enable |
jne @f |
or [esp + 40], byte 1 ; error |
or [esp + 56], byte 1 ; error |
mov [esp + 36], dword 8 ; 32-bit protected-mode interface not supported |
ret |
4897,7 → 4897,7 |
cmp al, 3 |
ja @f |
and [esp + 40], byte 0xfe ; emulate func 0..3 as func 0 |
and [esp + 56], byte 0xfe ; emulate func 0..3 as func 0 |
mov eax, [apm_vf] |
mov [esp + 36], eax |
shr eax, 16 |
4912,8 → 4912,8 |
mov [esp + 32], ecx |
mov [esp + 36], eax |
setc al |
and [esp + 40], byte 0xfe |
or [esp + 40], al |
and [esp + 56], byte 0xfe |
or [esp + 56], al |
ret |
; ----------------------------------------- |