Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
Надеюсь, ты делаешь это в чистом досе ? 20.11.02 11:22 Число просмотров: 1186
Автор: Chingachguk <Chingachguk> Статус: Member
|
Или раньше, ибо под виндой с винтом работать просто так не выйдет ;)
|
<programming>
|
[low hdd] command write sectors(s) 30h 18.11.02 04:01
Автор: kar Статус: Незарегистрированный пользователь
|
не могу записать сектор на хард..
использую команду 30h,31h (W.S.)
вообщем что происходит:
-загоняю необходимые ей регистры (sc,sn,cl,ch....)
-загружаю регистр команд CR
- читаю регистр состояния SR (читаю сразу без какой-л задержки!(равно как и с ней))
- бамц а там 58h... то есть все круто но без БИТА BSY
(по протоколу PO он должен быть установлен... да и вообще я прочел SR сразу после команды[чтобы команда ни делала устройство должно реагировать на нее установлением BSY])
вопрос почему?!?!?!
----
вообщем как вывод - ниче не работает
ps значение 58 возникало на двух хардах...
|
|
[Low HDD] ошибка в протоколе PIO??? 19.11.02 21:08
Автор: kar Статус: Незарегистрированный пользователь
|
> не могу записать сектор на хард.. > использую команду 30h,31h (W.S.) > вообщем что происходит: > -загоняю необходимые ей регистры (sc,sn,cl,ch....) > -загружаю регистр команд CR > - читаю регистр состояния SR (читаю сразу без какой-л > задержки!(равно как и с ней)) > - бамц а там 58h... то есть все круто но без БИТА BSY > (по протоколу PO он должен быть установлен... да и вообще я > прочел SR сразу после команды[чтобы команда ни делала > устройство должно реагировать на нее установлением BSY]) > вопрос почему?!?!?! > ---- > вообщем как вывод - ниче не работает > ps значение 58 возникало на двух хардах... ------------
хмм вот что обнаружил - на некоторых хардах сразу после команды WS рег.состаяния имеет значение D0h (бит BSY установлен;-)
смотрим что дальше - Немного погодя этот бит сбрасывается и устанавливается бит DRQ (дальше соотвественно записав данные все выполняется)
вопрос - почему сбрасывается BSY??
в протоколе PO(pio) опубликованном у в.кулакова наоборот перед передачей BSY устанавливается
|
| |
Надеюсь, ты делаешь это в чистом досе ? 20.11.02 11:22
Автор: Chingachguk <Chingachguk> Статус: Member
|
Или раньше, ибо под виндой с винтом работать просто так не выйдет ;)
|
| | |
код 20.11.02 13:50
Автор: kar Статус: Незарегистрированный пользователь Отредактировано 21.11.02 22:25 Количество правок: 1
|
> Или раньше, ибо под виндой с винтом работать просто так не > выйдет ;) ну есесно.. я писал что запись проходит нормально.. меня все интересует бит bsy
вот если хочешь посмотри у себя(хард на примари мастер):
.386
DATA segment use16
sector512 db 512 dup (0)
sectoraddress dd ?
tblhex db '0123456789ABCDEF'
standardATAbases dw 1f0h,170h
channelnumber db ?
disknumber db ?
ATAfeatures db ?
ATAsectorcount db ?
ATAsectornumber db ?
ATAcylinder dw ?
ATAhead db ?
ATAaddressmode db ?
ATAcommand db ?
ATAbaseportaddr dw ?
deverrorcode db ?
optime dd ?
DATA ends
CODE segment use16
assume cs:CODE,ds:CODE,fs:DATA
begin:
push DATA
pop fs
push fs
pop ds
push 0b800h
pop es
mov fs:[channelnumber],1
mov fs:[disknumber],0
mov 1 ptr fs:[ATAsectorcount],1
mov 1 ptr fs:[ATAsectornumber],5Eh ;просто число
mov 2 ptr fs:[ATAcylinder],0
mov 1 ptr fs:[ATAhead],0
mov 1 ptr fs:[ATAaddressmode],1
mov 1 ptr fs:[ATAcommand],30h
call cmd2HDD
cmp fs:[deverrorcode],0
jnz e_exit
;delay 20ticks
push es
push 0000
pop es
mov eax,es:[046ch]
mov fs:[optime],eax
wait1:
mov eax,es:[046ch]
sub eax,fs:[optime]
cmp eax,20
jb wait1
pop es
;DUMP SR! (=58h)
; mov di,80
; mov dx,fs:[ATAbaseportaddr]
; add dx,7
; in al,dx
; mov ah,0AAh ;можно не писать
; call dumpAX
;write sector
mov si,offset sector512
mov dx,fs:[ATAbaseportaddr]
mov cx,256
rep outsw
exit:
mov ax,4c00h
int 21h
e_exit:
mov di,0
mov ax,0EFEFh
call dumpAX
jmp exit
;---------------------------------------------------------------------------------------
cmd2HDD proc
pusha
push es
push 0000
pop es
mov fs:[deverrorcode],0
mov bh,0
mov bl,fs:[channelnumber]
dec bx
shl bx,1
mov ax,fs:[bx+standardATAbases]
mov 2 ptr fs:[ATAbaseportaddr],ax
mov dx,fs:[ATAbaseportaddr]
add dx,6
mov al,fs:[disknumber]
shl al,4
or al,10100000b
out dx,al
mov eax,es:[046ch]
mov fs:[optime],eax
inc dx
waitHDready:
mov eax,es:[046ch]
sub eax,fs:[optime]
cmp eax,3
ja @err1
in al,dx
test al,80h
jnz waitHDready
test al,08h
jnz waitHDready
test al,32
jnz @err1
mov dx,fs:[ATAbaseportaddr]
inc dx
mov al,fs:[ATAfeatures]
out dx,al
inc dx
mov al,fs:[ATAsectorcount]
out dx,al
inc dx
mov al,fs:[ATAsectornumber]
out dx,al
inc dx
mov ax,fs:[ATAcylinder]
out dx,al
inc dx
mov al,ah
out dx,al
inc dx
mov al,fs:[disknumber]
shl al,4
or al,10100000b
or al,fs:[ATAhead]
mov ah,fs:[ATAaddressmode]
shl ah,6
or al,ah
out dx,al
inc dx
mov al,fs:[ATAcommand]
out dx,al
jmp @end1
@err1: mov fs:[deverrorcode],1
@end1:
pop es
popa
retn
endp cmd2HDD
;------
dumpAX proc ;input ds=DATA!
push bx
push ax
and ax,0f0h
shr ax,4
mov bx,offset tblhex
xlat
mov es:[di],al
inc di
inc di
pop ax
push ax
and ax,0fh
xlat
mov es:[di],al
inc di
inc di
pop ax
push ax
and ax,0f000h
shr ax,12
xlat
mov es:[di],al
inc di
inc di
pop ax
push ax
and ax,0f00h
shr ax,8
xlat
mov es:[di],al
inc di
inc di
pop ax
pop bx
retn
dumpAX endp
CODE ends
end begin
|
|
|