Нужно заменить команду чтения на уровне int 13 с 20h на 22h

Смысл в том что нужно заменить в BIOS команду обычного чтения на команду длинного чтения. Т.е. что бы hdd читал только длинным чтением. Реально? И если реально то что и где нужно править, подскажите PLZ.

Аватар пользователя savely

Если для ДОС - повесь обработчик INT13 и меняй там как хочешь. Если для винды/никсов - им биос не нужен, там дрова переписывать надо.
В самом BIOS - ну, видимо, патчем обработчика INT13 (переброс обработки функции 2h на функцию 0Ah).
А зачем? ECC хочешь увидеть?

Или я не о том? Тогда это называется не "длинное чтение"... Может, ты имеешь в виду замену с 02h на 21h (INT 13 - HARD DISK - PS/1 and newer PS/2 - READ MULTIPLE DISK SECTORS)? Или на 42h (IBM/MS INT 13 Extensions - EXTENDED READ)?
Или это команды IDE-интерфейса? По IDE доки счас нет под рукой.

Определись все же - что именно, для чего (хорошо бы узнать).

А кому счас легко...

Цель - что бы при наличии BAD блоков на HDD он на них не затыкался , а читал длинным чтением независимо от того повреждён сектор или нет.
Вот кое какая информация на эту тему:

Ошибка чтения сектора

Собственно, маловероятно, что бы сектор был разрушен целиком. Чаще всего "сыплется" только какая-то его часть, а все остальные данные остаются неискаженными.


Существуют контроллеры двух типов. Первые, обнаружив расхождение контрольной суммы считанного сектора, все же оставляют прочиненные данные в буфере, и позволяют их извлечь оттуда, проигнорировав ошибку чтения. Вторые либо очищают буфер, либо просто не сбрасывают внутренний кэш в результате чего все равно прочитать буфер невозможно. На практике обычно встречаются последнее. При этом сброс кеша можно инициировать серией запросов без считывания полученных данных. Кеш при этом переполняется, и наиболее старые данные будут вытолкнуты в буфер. Остается их только прочесть. Конечно, это крайне медленно, но, к сожалению, универсальной команды сброса кеша не существует. Разные разработчики реализуют это по-своему (впрочем, иногда это можно найти в документации на чипы, используемые в контролере). Westerd Digitel сообщает в техническом руководстве, что при длинном чтении сектора без повтора, контроль сектора не выполняется, и он будет-таки целиком помещен в буфер. Кстати, так и должно быть по стандарту. Увы, остальные фирмы он него часто отклоняются по разным соображениям.

Остается определить какие же из прочитанных данных достоверные, а какие нет (если этого не видно "визуально" - например, в случае текстового или графического файлов)? Разумеется, в подобных рамках задача кажется неразрешимой, но это не совсем так. Дело в том, что можно произвести не только короткое, но и длинное чтение (0х22h req PIOin read long with retry) для чего можно использовать следующую процедуру:
MOV AH,0Ah ; Длинное чтение сектора с CRC
MOV AL,NumSect ; Число секторов для чтения
MOV CH,Cyl ; Цилиндр (младшие восемь байт)
MOV CL,Sect ; Число секторов
MOV DH,HEad ; Головка
MOV DL,80 ; HDD #0
LES BX,[lpBuff] ; Указатель на буфер

Вобщем смысл в том что бы попробовать сделать такую штуку через БИОС...
Реально?

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей