Там в последних прошивках КМД можно было заставить процессор КМД выполнять код, лежащий в ОЗУ основного процессора. Я этим пользовался для записи защищенных от копирования дискет.
https://groups.google.com/d/msg/fido...I/1GIr7YgIUdwJ
Да, я это уже попробовал в эмуляторе ДВК от Patron. Да и все прошивки дизассемблированы и разобраны. Собственно их всего две: старая -091, которая много чего не умела, да и ошибки там были, и новые -092 и -255, отличались только размером памяти и ее инициализацией.
Судя по тесту, выполняемому КМД в технологическом режиме - когда процессор КМД выполняет команду RESET - регистр статуса КМД ( 177100 на шине КМД ) полностью обнуляется.
Чтобы в обычном режиме делать то же самое без сброса ВП1-128 - КМД приходится дважды записывать ноль в регистр статуса - один раз через шину КМД и один раз через шину ДВК.
Об этом мы точно узнаем, если вскроют 1801ВП1-095 и 1801ВП1-096. Информации по этим чипам нет никакой, можно только гадать.
А обнуление идет с двух сторон потому, что биты, доступные по записи со стороны вычислителя, доступны только по чтению со стороны КМД. Ну и наоборот.
А команда RESET применяется для очистки регистра 177130 1801ВП1-128. По сигналу INIT там очищаются все биты РСН по записи (с 0 до 10). Также очищаются биты по чтению 7(TR) и 14(CRC).
Дело в том, что до RESET в регистр статуса 0177100 пишется 0177777, после чего его содержимое проверяется на равенство 0100200 и при отличии тест засчитывает ошибку, а после RESET начинается новый цикл тестирования и там уже ошибочным считается ненулевое значение в регистре статуса.
Поэтому, если по RESET не проводить полное обнуление регистра статуса - тест засчитывает ошибку.
В описании КМД прямо говорится, что бит требования в регистре статуса КМД очищается при любом обращении к регистру данных - и при чтении, и при записи.
Если это так - КМД не может отличить чтение и запись регистра данных, что должно проявляться при "ручной" загрузке с MY.
После ввода команды 37 ( Load ) в регистр статуса - КМД выполняет такой код:
Если успеть прочитать регистр данных КМД в пульте ДВК до того, как в регистре статуса КМД будет установлен бит требования 0200 - КМД дождётся записи номера привода в регистр данных. Если же запоздать - чтение содержимого регистра данных при его открытии в пульте ДВК ( судя по описанию КМД ) будет воспринято, как запись номера загружаемого привода в регистр данных.Код:003006 [000004] BIT #32., (R2) ; 003010:000040 -> 177100:000037 003012 [000004] BEQ 003076 003076 [000004] MOV (R2), R5 ; 177100:000037 -> R5 :000000 003100 [000000] BIT #16384., R5 ; 003102:040000 -> R5 :000037 003104 [000004] BEQ 003112 003112 [000004] BICB #224., R5 ; 003114: 340 -> R5 : 037 003116 [000000] CMPB #21., R5 ; 003120: 025 -> R5 : 037 003122 [000011] BNE 003130 003130 [000011] CMPB #19., R5 ; 003132: 023 -> R5 : 037 003134 [000011] BNE 003152 003152 [000011] MOV #128., (R2) ; 003154:000200 -> 177100:000037
Но как пульт ДВК может успеть, если даже при нажатии <ПС> - перед тем, как прочитать и вывести на терминал содержимое регистра данных КМД - пульт ДВК выводит на терминал его адрес ( на скорости 9600 это занимает 7 мс, значит процессор КМД за это время выполнит 28000 тактов ).
Следовательно - одно из двух:
1. Или бит требования в регистре статуса КМД сбрасывается только при записи в регистр данных.
2. Или указанная в описании КМД последовательность "ручной" загрузки годится только для загрузки с нулевого привода.
Последний раз редактировалось Patron; 05.01.2014 в 00:09.
Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)