Количество bad-секторов на диске
Решаю следующую задачу:
Необходимо средствами Turbo Assembler получить количество bad-секторов на диске.
Я так понимаю необходимо использовать ф-ию 02h прерывания int 13h. Но как определить сектор является бэдом или нет, и еще откуда и докуда надо читать? (Диск 1.44")
Зараннее спасибо.
Доброго дня!
Решаю следующую задачу:
Необходимо средствами Turbo Assembler получить количество bad-секторов на диске.
Я так понимаю необходимо использовать ф-ию 02h прерывания int 13h. Но как определить сектор является бэдом или нет, и еще откуда и докуда надо читать? (Диск 1.44")
Зараннее спасибо.
INT 13H 08H: Get Drive Parameters:│
Expects: AH 08H
DL drive: 0-3=diskette; 80H-81H=hard disk
Returns: AH
BIOS disk error code if CF is set to CY
CX maximum value for cylinder and sector
DL number of disks on first controller
DH maximum value for head
и читать с нулевого сектора нулевой дорожки через INT 13h(AH - 02h)
вот и все
Но как определить сектор является бэдом или нет,
в AH (при вызове INT 13h 02h) возвращается код ошибки. Для плохово сектора - 04h
И еще одно: перед читанием дискеты лочьше всего сбросить контроллер, а при появлении ошибки попробовать прочитать сектор еще 2 раза, а потом сделать reset через int 13h 00h :)
После восстановления секторов необходимо в программе PartitionMagic выполнить функцию Bad sector retest, чтобы убрать записи о сбойных секторах из FAT/MFT таблицы.
Доброго дня!
Решаю следующую задачу:
Необходимо средствами Turbo Assembler получить количество bad-секторов на диске.
Я так понимаю необходимо использовать ф-ию 02h прерывания int 13h. Но как определить сектор является бэдом или нет, и еще откуда и докуда надо читать? (Диск 1.44")
Зараннее спасибо.
1)читаешь сектор , попутно запоминаешь ошибки .
2)записываешь сектор последовательностью 10101010(AAh),ошибки тоже запоминаешь .
3)верифицируешь (ошибки - угадай что:D )
(пункты 2,3 можно повторить ,для надёжности,с последовательностью 01010101 (55h))
4)анализируешь ошибки - особо интересны две :CRC ,таймаут .
если таймауты , то разрушена поверхность - инфу не спасти .
если CRC - можно попытаться восстановить .
5)если сектор с ошибками - записанную инфу или уничтожаешь (так как может не хватить места ), или на чистый неиспользованный сектор .(не забудь таблицу подкорректировать )
для ускорения работы операции лучше проводить для целого цилиндра )
если сектор без ошибок - возвращаешь на место .
проги якобы восстанавливающие беды - на самом деле форматируют дорожку (есть вероятность что ошибка попадёт в промежуток между секторами ) .
Не обязательно. Можно сделать remap.