Нужно хотя бы иногда спать ложиться, а то не заметил вчера оченьвидных вещей
Теперь все ясно. Основной блок данных для функций ПЗУ располагаются в адресах 0xEE21-0xEE3D. Это не считая "рабочих" переменных, как например формируемый байт управления дисководом по адресу 0xEE20 (тот самый байт, что засылается в 0x7FF7). Не выяснял полностью, но картина следующая:
Код:
      ; логическая адресация по типу CP/M
0xEE21: logDisk:        .db ?   ; номер диска [0-1]
0xEE22: logTrack:       .db ?   ; лог. номер дорожки
0xEE23: logSector:      .db ?   ; лог. номер сектора
0xEE24: dmaBuff:        .dw ?   ; адрес обмена
0xEE26: typeSector:     .db ?   ; тип записываемого сектора:
0xEE26:                         ;    0: обычный сектор
0xEE26:                         ;    1: из области директория
0xEE26:                         ;    2: первый сектор нового блока
      ; здесь пошла физическая адресация
0xEE27: byte_EE27:      .db ?
0xEE28: byte_EE28:      .db ?
0xEE29:                 .db ?
0xEE2A: byte_EE2A:      .db ?
0xEE2B: byte_EE2B:      .db ?
      ; данные о последней операции записи на диск
0xEE2C: _wrDisk:        .db ?
0xEE2D: _wrTrack:       .db ?
0xEE2E: _wrSector:      .db ?
0xEE2F: _wrSide:        .db ?
0xEE30: wr_EE30:        .db ?
      ; данные о последней операции чтения с диска
0xEE31: _rdDisk:        .db ?
0xEE32: _rdTrack:       .db ?
0xEE33: _rdSector:      .db ?
0xEE34: _rdSide:        .db ?
      ; данные о текущей операции чтения/записи
0xEE36: physDisk:       .db ?   ; номер диска
0xEE37: physTrack:      .db ?   ; номер дорожки = (logTrack >> 1) & 0x7F
0xEE38: physSector:     .db ?   ; номер сектора = (((logSector-1) >> 3) & 0x07) + 1
0xEE39: physSide:       .db ?   ; сторона = logTrack & 1
0xEE3A: nSecInBuff:     .dw ?   ; адрес 128-байтного сектора в буфере обмена = (logSector-1) >> 1

0xEE3C: lastTrack:      .db ?   ; номер дорожки в последней операции с диском
                                ; (нужен для операции позиционирования головок)
0xEE3D:                 .db ? ; то же для диска 1
Функции чтения/записи работают с логическими адресами, как в CP/M, самостоятельно переводя их в физические. Операции чтения и записи имеют свой набор данных и адреса буферов. Чтение происходит на адрес 0xE600, а запись с адреса 0xEA00. А уж затем нужный 128-байтный сектор копируется в dmaBuff.

Но это так, мелочи. Что касается чтения регистров. Регистр 0x7FF7 читается исключительно из ОЗУ, а не из контроллера. Регистр 0x7FF8 читается прямо с ПЗУ, так как его значение формируется самой ВГ93 и выставляется на шину данных. Это я просто с недосыпу вчера не сообразил, что на адресах 0x7FF7-0x7FFF нет ПЗУ, а значения туда подставляются ИР26 и ВГ93, то есть с чтением проблем не будет.

В принципе уже можно написать простенькие тесты. Правда придется ПЗУ вытащить. По крайней мере можно проверить работу ТМ8 и ИР26. Есть желание?