Анализируя ошибки при тестировании собранного мной контроллера HDD, дизассемблировал TESTHDD3 Фролова, и заодно немного его улучшил. Вот получившиеся исходники: TESTHDD3src.7z
С моими исправлениями назвал TESTHDD4: TESTHDD4.7z (в архиве исходники и откомпилированная версия)
Изменения по отношению к третьей версии:
1. Заменил все обращения к порту 5Fh на 57h, кроме первого, при этом оказалось, что линию "reset" можно не размыкать, диск и с ней работает нормально. Собственно, в документации к контроллеру и было сказано, что порт 5Fh лучше не использовать часто, и, возможно, также нужно будет пропатчить ДОСы...
2. При "поверхностном" тестировании портов с моим диском выдаётся ошибка "не работает порт IN 57 или индексный маркер HDD". Разбор исходного алгоритма показал, что там считывается байт из порта и анализируется изменение его второго бита, если оно не произошло за 65536 х 16 циклов, то и выдаётся эта ошибка. В найденном описании из инета сказано, что это "индекс, трактуется особо каждым производителем", поэтому я не исключаю, что на моей модели диска он просто не меняется. В этом тесте я значительно переработал алгоритм проверки и добавил вывод значения порта, по которому можно судить о его работе: если с порта 57 читается значение 50h или 51h, то скорее всего проблема в индексном маркере.
3. При тестировании чтения/записи сектора выдавалась малопонятная ошибка "мало данных", дополнил её выводом числа считанных/записанных байт. Кроме того поправил подпрограмму сравнения считанных данных, теперь она проверяет не больше, чем было считано и выводит номер байта, на котором возникла первая ошибка. Собственно, это тоже связано с моделью диска: в тесте изначально читается сектор 512 байт и дополнительно ещё 16 байт (контрольные суммы?), мой же диск отдаёт только 8 дополнительных байт. Не думаю, что эти дополнительные данные как-то влияют на работу программ, но вывод этих ошибок в тесте я оставил.
4. Ну и напоследок, убрал неиспользуемые части, исправил найденные ошибки, добавил новые...![]()




Ответить с цитированием