Цитата Сообщение от nzeemin Посмотреть сообщение
HDD Write 1f6 <-- 0xff00
HDD Write 1f5 <-- 0xff00
HDD Write 1f4 <-- 0xff00
HDD Write 1f3 <-- 0xff01
HDD Write 1f2 <-- 0xff01
HDD Write 1f7 <-- 0x0020
HDD COMMAND 20 (READ MULT): C=0, H=0, SN=1, SC=1
HDD Write 1f2 <-- 0xf522
HDD Write 1f6 <-- 0x0009
HDD Read sector complete
HDD Write 1f7 <-- 0x0091
HDD COMMAND 91 (SET CONFIG): H=9, SC=33

Вот здесь непонятка -- получается что сначала задаются параметры следующей команды, но затем завершается передача сектора, что приводит к декременту sector_count (SC, порт 1F2). В результате команда 91h получает параметр SC=33, что конечно неверно и в дальнейшем приводит к ошибкам позиционирования.
Либо я тут неправильно понимаю логику SC и он должен уменьшаться до завершения передачи данных сектора -- но неясно в какой момент.

Если быть точным, то установка параметров команды 91h происходит сразу же после чтения первых двух байт сектора:
HDD Read 1f7 0xffd0
HDD Read 1f7 0xffd0
HDD Read 1f7 0xff58 ; Снят сигнал BUSY
HDD Read 1f7 0xff58
HDD Read 1f0 0xf5dd ; Прочитаны первые два байта 1-го сектора
HDD Write 1f2 <-- 0xf522 ; Установка параметров команды 91h
HDD Write 1f6 <-- 0x0009
HDD Read 1f0 0x5d4d
HDD Read 1f0 0x5d4d
А вообще-то все правильно. Запрашивается команда чтения одного сектора, он прочитывается во внутренний буфер винчестера, и если не было ошибок при чтении, то SC устанавливается в ноль и в регистре статуса соответствующие биты. А далее уже программа должна прочесть из буфера эти 256 слов. А так как в самом первом слове находится геометрия, то соответственно она подготавливает данные для выполнения команды с кодом 91h.
Если предположить, что буфер имеет размер одного сектора, то он сначала целиком читается в буфер, уменьшается CS, устанавливаются соответствующие биты в регистре статуса и далее с регистра данных считываются данные. При записи соответственно сначала надо заполнить буфер, а потом уже винчестер записывает нужный сектор, декрементирует SC и устанавливает в регистре статуса и ошибок результат записи сектора.