Пишу программную поддержку HDD на 8-битке (Орион-ПРО), КНЖМД по схемотехнике NEMO_IDE. С одним единственным устройством (Master) никаких проблем, всё работает прекрасно. При добавлении второго (Slave) начинаются проблемы. Причём характер проблем рандомный, в связи с чем понять принцип глюков методом научного тыка затруднительно.
Как делаю. Судя по документации, для смены устройства нужно записать новое значение бита DRV (D4) в регистр головок/конфигурации, после чего команды должны уходить в другое IDE-устройство. На практике это либо происходит, либо нет. Примерно 50 на 50, но иногда бывает, что Master "залипает" надолго, вплоть до того, что помогает только команда сброса интерфейса.
Мне не понятен вот какой момент. Например, у меня активен IDE0 (Master), я записываю в регистр значение с DRV=1, получается, что оно записывается в текущий активный (Master). Как о смене "узнаёт" IDE1 (Slave) ? Или запись происходит в регистры обоих накопителей, а они уже как-то там сами договариваются, минуя контроллер хоста?
Также не понятно поведение системы при физическом отсутствии IDE1 (Slave), но при попытке его обнаружения. Я выдаю команду детекта IDE0 (Master), он отвечает, "представляется" - всё отлично. Дальше пишу в регистр DRV=1 - типа переключаюсь на IDE1 (Slave), снова выдаю команду детекта, и от КНЖМД прилетает успешный ответ о принятии команды! Получается, что команду снова принял IDE0 (Master)... Не понимаю...
Может кто-то уже разбирался с данным вопросом?
П.С. Абонемент в библиотеку не надо, просто объясните на пальцах, если знаете. Спасибо.