mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-11-28 11:43:09 +03:00
Fix:
1) small error for procedure reserve_cd: (iso9660.inc) 2) reserved controller 1 or 2, because the devices IDE0+IDE1 or IDE2+IDE3 can not work simultaneously. git-svn-id: svn://kolibrios.org@95 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
497393b8cb
commit
548cefab68
@ -129,8 +129,41 @@ reserve_hd1:
|
||||
pop eax
|
||||
sti
|
||||
ret
|
||||
|
||||
|
||||
;********************************************
|
||||
reserve_hd_channel:
|
||||
cmp [hdbase], 0x1F0
|
||||
jne .IDE_Channel_2
|
||||
.IDE_Channel_1:
|
||||
cli
|
||||
cmp [IDE_Channel_1],0
|
||||
je .reserve_ok_1
|
||||
sti
|
||||
call change_task
|
||||
jmp .IDE_Channel_1
|
||||
.IDE_Channel_2:
|
||||
cli
|
||||
cmp [IDE_Channel_2],0
|
||||
je .reserve_ok_2
|
||||
sti
|
||||
call change_task
|
||||
jmp .IDE_Channel_1
|
||||
.reserve_ok_1:
|
||||
mov [IDE_Channel_1],1
|
||||
ret
|
||||
.reserve_ok_2:
|
||||
mov [IDE_Channel_2],1
|
||||
ret
|
||||
|
||||
free_hd_channel:
|
||||
cmp [hdbase], 0x1F0
|
||||
jne .IDE_Channel_2
|
||||
.IDE_Channel_1:
|
||||
mov [IDE_Channel_1],0
|
||||
ret
|
||||
.IDE_Channel_2:
|
||||
mov [IDE_Channel_2],0
|
||||
ret
|
||||
;********************************************
|
||||
clear_hd_cache:
|
||||
|
||||
push eax ecx edi
|
||||
|
@ -407,6 +407,7 @@ fs_OnHd3:
|
||||
mov [hdid], 0x10
|
||||
push 4
|
||||
fs_OnHd:
|
||||
call reserve_hd_channel
|
||||
pop eax
|
||||
mov [hdpos], eax
|
||||
cmp ecx, 0x100
|
||||
@ -414,6 +415,7 @@ fs_OnHd:
|
||||
cmp cl, [0x40001+eax]
|
||||
jbe @f
|
||||
.nf:
|
||||
call free_hd_channel
|
||||
and [hd1_status], 0
|
||||
mov dword [esp+36], 5 ; not found
|
||||
ret
|
||||
@ -430,11 +432,13 @@ fs_OnHd:
|
||||
jae .not_impl
|
||||
add ebx, 4
|
||||
call dword [fs_HdServices + eax*4]
|
||||
call free_hd_channel
|
||||
and [hd1_status], 0
|
||||
mov [esp+36], eax
|
||||
mov [esp+24], ebx
|
||||
ret
|
||||
.not_impl:
|
||||
call free_hd_channel
|
||||
and [hd1_status], 0
|
||||
mov dword [esp+36], 2 ; not implemented
|
||||
ret
|
||||
@ -475,7 +479,7 @@ fs_OnCd3:
|
||||
mov [DiskNumber],1
|
||||
push 0
|
||||
fs_OnCd:
|
||||
|
||||
call reserve_cd_channel
|
||||
pop eax
|
||||
mov [hdpos], eax
|
||||
cmp ecx, 0x100
|
||||
@ -489,6 +493,7 @@ fs_OnCd:
|
||||
|
||||
jnz @f
|
||||
.nf:
|
||||
call free_cd_channel
|
||||
and [cd_status], 0
|
||||
mov dword [esp+36], 5 ; not found
|
||||
ret
|
||||
@ -501,11 +506,13 @@ fs_OnCd:
|
||||
jae .not_impl
|
||||
add ebx, 4
|
||||
call dword [fs_CdServices + eax*4]
|
||||
call free_cd_channel
|
||||
and [cd_status], 0
|
||||
mov [esp+36], eax
|
||||
mov [esp+24], ebx
|
||||
ret
|
||||
.not_impl:
|
||||
call free_cd_channel
|
||||
and [cd_status], 0
|
||||
mov dword [esp+36], 2 ; not implemented
|
||||
ret
|
||||
|
@ -4,6 +4,8 @@ cd_current_pointer_of_input dd 0
|
||||
cd_current_pointer_of_input_2 dd 0
|
||||
cd_mem_location dd 0
|
||||
cd_counter_block dd 0
|
||||
IDE_Channel_1 db 0
|
||||
IDE_Channel_2 db 0
|
||||
endg
|
||||
|
||||
CDDataBuf equ 0x7000
|
||||
@ -16,7 +18,7 @@ reserve_cd:
|
||||
|
||||
sti
|
||||
call change_task
|
||||
jmp reserve_hd1
|
||||
jmp reserve_cd
|
||||
|
||||
reserve_ok2:
|
||||
|
||||
@ -28,6 +30,40 @@ reserve_cd:
|
||||
pop eax
|
||||
sti
|
||||
ret
|
||||
|
||||
reserve_cd_channel:
|
||||
cmp [ChannelNumber],1
|
||||
jne .IDE_Channel_2
|
||||
.IDE_Channel_1:
|
||||
cli
|
||||
cmp [IDE_Channel_1],0
|
||||
je .reserve_ok_1
|
||||
sti
|
||||
call change_task
|
||||
jmp .IDE_Channel_1
|
||||
.IDE_Channel_2:
|
||||
cli
|
||||
cmp [IDE_Channel_2],0
|
||||
je .reserve_ok_2
|
||||
sti
|
||||
call change_task
|
||||
jmp .IDE_Channel_1
|
||||
.reserve_ok_1:
|
||||
mov [IDE_Channel_1],1
|
||||
ret
|
||||
.reserve_ok_2:
|
||||
mov [IDE_Channel_2],1
|
||||
ret
|
||||
|
||||
free_cd_channel:
|
||||
cmp [ChannelNumber],1
|
||||
jne .IDE_Channel_2
|
||||
.IDE_Channel_1:
|
||||
mov [IDE_Channel_1],0
|
||||
ret
|
||||
.IDE_Channel_2:
|
||||
mov [IDE_Channel_2],0
|
||||
ret
|
||||
|
||||
cd_status dd 0
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user