ИД7 выбирает порты:
A[7:4] = 0x5, т.е. порты под контроллер 0x50-0x5F
IORQ говорит, что обращение через IN/OUT, а BLIO - Block I/O?
Половинка ИД4 разделяет на запись и чтение, по 8 ячеек (по А[3]):
A[3] = 0 (0x50-0x57) происходит обращение к nCS3x
A[3] = 1 (0x58-0x5F) происходит обращение к nCS1x
nCS1x это основной набор регистров, nCS3x это регистр расширенного статуса. Сигналы формируются через ЛИ1, когда на одном из входов будет 0 - сформируется сигнал CSH сформируется при записи в 0x58-0x5F, что соответствует записи в основной набор регистров. Он выставит старший байт, который записан предварительно в ИР23. Обращение к регистру старшего байта происходит по адресу 0x57. Одновременно с этим будет активирован nCS3x, но у HDD там регистр только на 0x6 адресе, поэтому конфликта не будет. Вообще, 0x3F0-0x3F7 это FDC, а HDD туда "вклинился" в дырку. Буфер младшего байта выбран всегда, рулёжка происходит только направлением. Поэтому, его надо всегда держать на выводе, переводя на ввод только при чтении из IDE. Сигналы A[2:0] и стробы записи/чтения выведены напрямую через буфер, поэтому все тайминги будут зависеть от цикла CPU.
Итог:
0x50..0x55 - не используются
0x56 - регистр расширенного статуса IDE
0x57 - регистр старшего байта данных IDE
0x58-0x5F - регистры IDE.
При работе с регистрами управления и статуса IDE регистр старшего байта можно игнорировать.
При работе с регистром данных требуется соблюдения последовательности.
При чтении: читаем из IDE (0x58) младший байт данных, читаем из регистра (0x57) старший байт данных.
При записи: пишем старший байт данных в регистр (0x57), пишем младший байт данных в IDE (0x58).
Тут не понятно. Нужно посканить проход команды в диск по факту (nCS1x, BA[2:0], BWR). А еще мне не очень нравится, как сделан там сброс.





Ответить с цитированием