Problem with comparison.
/trunk/fs/fs_phys.inc |
0,0 → 1,111 |
hd_phys_read: |
;eax - sector number |
;ebx - destination |
pushad |
call wait_for_hd_idle |
popad |
push edx |
push eax |
cli |
xor eax,eax |
mov edx,[hdbase] |
inc edx |
out dx,al |
inc edx |
inc eax |
out dx,al |
inc edx |
;write sector number. |
mov eax,[esp] |
out dx,al |
shr eax,8 |
inc edx |
out dx,al |
shr eax,8 |
inc edx |
out dx,al |
shr eax,8 |
inc edx |
and al,1+2+4+8 |
add al,byte [hdid] ;+0 or +16 |
or al,32+64+128 |
out dx,al |
inc edx |
mov al,0x20 |
out dx,al |
sti |
|
call wait_for_sector_buffer |
cmp [hd_error],0 |
jnz hd_read_error |
cli |
push edi |
mov edi,ebx |
mov ecx,256 |
mov edx,[hdbase] |
cld |
rep insw |
pop edi |
sti |
pop edx |
pop eax |
ret |
|
hd_phys_write: |
;eax - sector number |
;ebx - destination |
cmp eax,[partition_start] |
jb .ret |
cmp eax,[partition_end] |
ja .ret |
pushad |
call wait_for_hd_idle |
popad |
push edx |
push eax |
cli |
xor eax,eax |
mov edx,[hdbase] |
inc edx |
out dx,al |
inc edx |
inc eax |
out dx,al |
;write sector number |
inc edx |
mov eax,[esp] |
out dx,al |
shr eax,8 |
inc edx |
out dx,al |
shr eax,8 |
inc edx |
out dx,al |
shr eax,8 |
inc edx |
and al,1+2+4+8 |
add al,byte [hdid] ;+0 or +16 |
or al,32+64+128 |
out dx,al |
|
inc edx |
mov al,0x30 |
out dx,al |
sti |
|
call wait_for_sector_buffer |
cmp [hd_error],0 |
jnz hd_write_error |
cli |
push esi |
mov esi,ebx |
mov ecx,256 |
mov edx,[hdbase] |
cld |
rep outsw |
pop esi |
sti |
pop edx |
pop eax |
.ret: |
ret |