Цитата Сообщение от nzeemin Посмотреть сообщение
Вот здесь непонятка -- получается что сначала задаются параметры следующей команды, но затем завершается передача сектора, что приводит к декременту 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
Действительно странно как-то, чувствую надо дизассемблировать IDDRIV.SAV для того, чтобы понять логику работы.

HDD COMMAND 20 (READ MULT): C=0, H=0, SN=1, SC=1
// Читается мастер-блок с информацией о разделах
HDD COMMAND 91 (SET CONFIG): H=9, SC=34
; Тут выбор раздела 0
HDD COMMAND 20 (READ MULT): C=0, H=0, SN=2, SC=1
// Чтение первичного загрузчика (он же содержит драйвер чтения)
HDD COMMAND 20 (READ MULT): C=0, H=0, SN=4, SC=4
// Чтение вторичного загрузчика
HDD COMMAND 20 (READ MULT): C=0, H=0, SN=8, SC=2
HDD COMMAND 20 (READ MULT): C=0, H=0, SN=10, SC=2
HDD COMMAND 20 (READ MULT): C=0, H=0, SN=12, SC=2
HDD COMMAND 20 (READ MULT): C=0, H=0, SN=14, SC=2
HDD COMMAND 20 (READ MULT): C=0, H=0, SN=16, SC=2
// Чтение каталога. Здесь вторичный загрузчик ищет сам файл операционной системы, драйвера
HDD COMMAND 20 (READ MULT): C=0, H=3, SN=23, SC=1
// Чтение доп.части вторичного загрузчика
HDD COMMAND 20 (READ MULT): C=0, H=5, SN=27, SC=1
// Чтение нулевого блока драйвера винча ID.SYS
HDD COMMAND 20 (READ MULT): C=0, H=5, SN=27, SC=2
// Чтение всего драйвера ID.SYS. Здесь вторичный загрузчик должен переместить его в ОЗУ ближе к 160000, примерно 157*** с чем-то
HDD COMMAND 20 (READ MULT): C=0, H=3, SN=22, SC=1
// Чтение доп.части вторичного загрузчика
HDD COMMAND 20 (READ MULT): C=0, H=3, SN=26, SC=33
// Чтение самой операционной системы. Читается KMON, USR и RMON
HDD COMMAND 20 (READ MULT): C=0, H=3, SN=25, SC=1
// Чтение доп.части вторичного загрузчика