Нужно хотя бы иногда спать ложиться, а то не заметил вчера оченьвидных вещей![]()
Теперь все ясно. Основной блок данных для функций ПЗУ располагаются в адресах 0xEE21-0xEE3D. Это не считая "рабочих" переменных, как например формируемый байт управления дисководом по адресу 0xEE20 (тот самый байт, что засылается в 0x7FF7). Не выяснял полностью, но картина следующая:
Функции чтения/записи работают с логическими адресами, как в CP/M, самостоятельно переводя их в физические. Операции чтения и записи имеют свой набор данных и адреса буферов. Чтение происходит на адрес 0xE600, а запись с адреса 0xEA00. А уж затем нужный 128-байтный сектор копируется в dmaBuff.Код:; логическая адресация по типу 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
Но это так, мелочи. Что касается чтения регистров. Регистр 0x7FF7 читается исключительно из ОЗУ, а не из контроллера. Регистр 0x7FF8 читается прямо с ПЗУ, так как его значение формируется самой ВГ93 и выставляется на шину данных. Это я просто с недосыпу вчера не сообразил, что на адресах 0x7FF7-0x7FFF нет ПЗУ, а значения туда подставляются ИР26 и ВГ93, то есть с чтением проблем не будет.
В принципе уже можно написать простенькие тесты. Правда придется ПЗУ вытащить. По крайней мере можно проверить работу ТМ8 и ИР26. Есть желание?




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
