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

BBCode

  • HTML-теги не обрабатываются и показываются как обычный текст
  • You may use the following BBCode tags:
    • [align]
    • [b]
    • [code]
    • [color]
    • [font]
    • [hr]
    • [i]
    • [img]
    • [list]
    • [quote]
    • [s]
    • [size]
    • [spoiler]
    • [sub]
    • [sup]
    • [table]
    • [u]
    • [url]
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.

savely

20 лет 8 месяцев назад

Если для ДОС - повесь обработчик 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 доки счас нет под рукой.

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

Unknown BIOS (не проверено)

20 лет 8 месяцев назад

Цель - что бы при наличии 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] ; Указатель на буфер

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