Если читать регистр состояния и проверять устройство на занятость так:
Код:
NO_BSY LD BC,#FFBE
CALL IN_A
RLCA
RET NC
JR NO_BSY
IN_A - функция чтения регистра контроллера
То в случае отсутствия проверяемого контроллера это приведет к зацикливанию.
Предлагаю сделать следующие: выбираем первое устройство на данном контроллере и пишем, например, в регистр сектора какое-то значение, а потом проверяем его содержимое, потом проделываем тоже самое для второго устройства контроллера. Тут есть один большой недостаток, если неподключено ни одно устройство к тестируемому контроллеру, а он на самом деле есть, то мы его не определим. Для контроллеров NEMO и NEMO A8 нужно проводить дополнительный тест, для уточнения конкретной схемы. Я сделал так:
1. Выбираем любую модель NEMO/NEMO A8
2. Забиваем в буфер размером 512 байт значением #FF
3. Выдаем контроллеру команду #EC (Drive Identify)
4. Читаем блок данных в наш буфер
5. Проверяем значение в буфере по смещению 256. Если это значение отличается от #FF (не помню почему, но в этом месте при успешном считывании точно не будет #FF), то у нас выбранная модель, иначе у нас другая модель
PS. В связи с отсутствием под рукой реальной машины с любым из контроллеров IDE все тесты проводились на эмуляторе Unreal Speccy
PPS. Если кому интересно, то могу вечерком могу выложить реализацию всего вышеописанного для моделей NEMO, NEMO A8 и SMUC.