информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Low HDD] ошибка в протоколе PIO??? 19.11.02 21:08  Число просмотров: 1508
Автор: 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 устанавливается
<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
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach