1) The search HDD is improved, earlier by search was made reset only CD, now is made reset and HDD also.

2) Are deleted CLI and STI from procedures of reading and writing of sector on HDD. These of commands are replaced by operation with a port [hdbase]+206h, which disables only interruption for IDE.

git-svn-id: svn://kolibrios.org@136 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2006-08-26 16:50:41 +00:00
parent 65cbed8f0d
commit 334f7721de
2 changed files with 36 additions and 32 deletions

View File

@ -11,42 +11,25 @@ FindHDD:
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 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
FindHDD_2:
call DeviceReset
cmp [DevErrorCode],0
jne FindHDD_2_2
call ReadHDD_ID
cmp [DevErrorCode],0
jne FindHDD_2
inc byte [0x40001]
ret
FindHDD_2:
call ReadCD_ID
cmp [DevErrorCode],0
jne FindHDD_2_2

View File

@ -1973,11 +1973,13 @@ hd_read:
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,14 +2005,14 @@ hd_read:
inc edx
mov al,20h
out dx,al ; ATACommand ॣ¨áâà ª®¬ ­¤
sti
; sti
call wait_for_sector_buffer
cmp [hd_error],0
jne hd_read_error
cli
; cli
push edi
shl edi,9
add edi,0x600000+65536
@ -2019,7 +2021,9 @@ hd_read:
cld
rep insw
pop edi
sti
; sti
call enable_ide_int
pop edx eax
blok_read_2:
@ -2040,6 +2044,19 @@ hd_read:
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:
;-----------------------------------------------------------
@ -2119,11 +2136,13 @@ write_cache:
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 @@ write_cache:
inc edx
mov al,30h
out dx,al
sti
; sti
call wait_for_sector_buffer
@ -2158,7 +2177,7 @@ write_cache:
push ecx esi
cli
; cli
mov esi,edi
shl esi,9
add esi,0x600000+65536 ; esi = from memory position
@ -2166,10 +2185,12 @@ write_cache:
mov edx,[hdbase]
cld
rep outsw
sti
; sti
pop esi ecx
call enable_ide_int
danger:
does_not_need_writing: