/kernel/trunk/detect/dev_hdcd.inc |
---|
11,42 → 11,25 |
mov [ChannelNumber],1 |
mov [DiskNumber],0 |
call FindHDD_3 |
; mov ax,[Sector512+176] |
; mov [0x40006],ax |
; mov ax,[Sector512+126] |
; mov [0x40008],ax |
; mov ax,[Sector512+128] |
; mov [0x40008],ax |
mov [DiskNumber],1 |
call FindHDD_3 |
; mov al,[Sector512+176] |
; mov [0x40007],al |
inc [ChannelNumber] |
mov [DiskNumber],0 |
call FindHDD_3 |
; mov al,[Sector512+176] |
; mov [0x40008],al |
mov [DiskNumber],1 |
call FindHDD_1 |
; mov al,[Sector512+176] |
; mov [0x40009],al |
jmp EndFindHDD |
FindHDD_1: |
call DeviceReset |
cmp [DevErrorCode],0 |
jne FindHDD_2_2 |
call ReadHDD_ID |
cmp [DevErrorCode],0 |
jne FindHDD_2 |
cmp [Sector512+6],word 16 |
ja FindHDD_2 |
cmp [Sector512+12],word 255 |
ja FindHDD_2 |
inc byte [0x40001] |
jmp FindHDD_2_2 |
ret |
FindHDD_2: |
call DeviceReset |
cmp [DevErrorCode],0 |
jne FindHDD_2_2 |
call ReadCD_ID |
cmp [DevErrorCode],0 |
jne FindHDD_2_2 |
/kernel/trunk/fs/fat32.inc |
---|
1973,11 → 1973,13 |
push eax edx |
call disable_ide_int |
call wait_for_hd_idle |
cmp [hd_error],0 |
jne hd_read_error |
cli |
; cli |
xor eax,eax |
mov edx,[hdbase] |
inc edx |
2003,7 → 2005,7 |
inc edx |
mov al,20h |
out dx,al ; ATACommand ॣ¨áâà ª®¬ ¤ |
sti |
; sti |
call wait_for_sector_buffer |
2010,7 → 2012,7 |
cmp [hd_error],0 |
jne hd_read_error |
cli |
; cli |
push edi |
shl edi,9 |
add edi,0x600000+65536 |
2019,8 → 2021,10 |
cld |
rep insw |
pop edi |
sti |
; sti |
call enable_ide_int |
pop edx eax |
blok_read_2: |
lea esi,[edi*8+0x600000] |
2040,7 → 2044,20 |
pop edi esi ecx |
ret |
disable_ide_int: |
mov edx,[hdbase] |
add edx,0x206 |
mov al,2 |
out dx,al |
ret |
enable_ide_int: |
mov edx,[hdbase] |
add edx,0x206 |
mov al,0 |
out dx,al |
ret |
hd_write: |
;----------------------------------------------------------- |
; input : eax = block |
2119,11 → 2136,13 |
cmp eax,[PARTITION_END] |
ja danger |
call disable_ide_int |
call wait_for_hd_idle |
cmp [hd_error],0 |
jne hd_write_error |
cli |
; cli |
xor eax,eax |
mov edx,[hdbase] |
inc edx |
2149,7 → 2168,7 |
inc edx |
mov al,30h |
out dx,al |
sti |
; sti |
call wait_for_sector_buffer |
2158,7 → 2177,7 |
push ecx esi |
cli |
; cli |
mov esi,edi |
shl esi,9 |
add esi,0x600000+65536 ; esi = from memory position |
2166,10 → 2185,12 |
mov edx,[hdbase] |
cld |
rep outsw |
sti |
; sti |
pop esi ecx |
call enable_ide_int |
danger: |
does_not_need_writing: |