У себя такого не наблюдал за всю историю использования этого плагина.
---------- Post added at 19:46 ---------- Previous post was at 19:15 ----------
Ну ок.
Сейчас есть две проблемы. Первая - заключается в том, что после дизассемблирования плагина с помощью ZX TURBO DISASSEMBLER 1.1 и последующего обратного процесса в ALASM размер кода плагина уменьшается на 4 байта. Непонятно, что и где при этом теряется.
Вторая - трудность отладки по живому, т.к. на реале теневой монитор сразу закрывает порты DOS, а эмулятора с прямым доступом к портам HDD (т.е. работающего с реальным устройством, а не с его образом в виде файла) я пока не встречал.
Как вариант можно попробовать переделать плагин на работу с закрытыми портами и ковырять после этого в теневом мониторе, но тогда надо понять, что такого пропадает из кода, почему плагин становится короче.
Вот фрагмент плагина, на котором происходит зависание (*):
;К этому моменту порты дос уже открыты
ld de,#0000; номер цилиндра
ld hl,#0002; номер головки/сектора
call LC94D; позиционирование (см. ниже**)
ld a,#41; Количество секторов
ld b,#fa; Регистр счётчика секторов
out (c),a; Записали
ld a,#20; Команда чтения
call LC943; Передача команды (см. ниже***)
call LC935; Ожидание завершения выполнения команды (лишний вызов)
ld b,#fb; Регистр номера сектора
LC9FE push bc
in (d),c
push de
ld b,#ff; Регистр состояния
LCA04 in a,(c)
* bit 3,a; Проверка флага DRQ (запрос данных)
jr z,LCA04; Тут образовался бесконечный цикл
ld a,#20
ld hl,#f000
call LC889
call LC935
pop de
pop bc
in a,(c)
sub d
jr nc,LC9FE
.......
**
LC94D ld b,#fe; Регистр накопителя и головки
ld a,#a0; Неиспользуемые разряды
xor h; Номер головки (наверно лучше or h?)
out (c),a
dec b; Регистр цилиндра (старшая часть)
out (c),d; Номер цилиндра
dec b; Регистр цилиндра (младшая часть)
out (c),e; Номер цилиндра
dec b; Регистр номера сектора
out (c),l; Номер сектора
ret
***
LC943 ld b,#ff; Регистр команды
out (c),a
call LC935; Ожидаем завершения выполнения команды
jp LC93D
LC93D in b,#ff; Регистр состояния
in a,(c)
rrca; Флаг ERR
ret
LC935 ld b,#ff; Регистр состояния
LC937 in a,(c)
rlca; Флаг BSY
ret nc
jr LC937; Ждём завершения выполнения команды
---------- Post added at 19:51 ---------- Previous post was at 19:46 ----------
Такого драйвера не встречал. Сам много лет пользуюсь драйвером IDESMUC.BLK от Валерия Кожевникова (тот же Jason). До него использовал поставочный ZHDD4.BLK.
Да, с CF картами IDESMUC подглючивает. Причём пришлось подбирать карту памяти такую, чтобы и нормально размечалась теневым монитором и работала в iS-DOS. Другие карты либо вообще не размечались даже в теневом мониторе, либо напрочь завешивали драйвер в iS-DOS.
Похоже есть какие-то особенности в их работе.
Однако моим тестом никаких особенностей не выявилось. Правда проверял в режиме LBA...
---------- Post added at 20:36 ---------- Previous post was at 19:51 ----------
Исходники IDESMUC.BLK есть в наличии. Знать бы какой стандарт предпочитают CF карты - можно бы было ковырнуть драйвер.