УКНЦ, ДВК-3, Ленинград-1 (48 кб)
Вероятно ошибка в эмуляторе. Подпрограмма остановки мотора по адресу 1344454 очищает все биты выбора, потому реально не будет выбран ни один дисковод, что на реальной машине приведет к ошибке чтения. Видно где-то в эмуляторе не особо следится за выбором устройства, установкой бита вращения мотора, потому и такой глюк. Кстати, если контроллер перешел в режим чтения, то при остановке мотора он будет формировать нулевые данные, ну и CRC естественно не сойдётся.
- - - Добавлено - - -
Тестовая программа ничего не показала бы. Я уже описал данный глюк связанный с остановкой мотора. При тестах его скорее всего и не воспроизвели бы.
А данный глюк возникает и на реальной машине с контроллером псевдоКМД?
Да, такой надобности не было. Но у кого есть четыре дисковода, то почему бы не попробовать. Придется конечно на дисководах резать дорожки и паять перемычки. Но я уверен, что данного глюка на реальной машине вы не получите.
nzeemin(06.08.2020)
УКНЦ, ДВК-3, Ленинград-1 (48 кб)
Алекс, не могли бы вы тут описать по-подробнее. Дело вот в чем, когда я еще только начинал разрабатывать контроллер КВЭ, я отлавливал команды которые УКНЦ отправляет в порт 177130, при выборе дисковода MZ0: УКНЦ отправляет о2023, те выстален 0,1,4 и 10 бит, 4-й нас пока не интересует. По тому, что вы описали, получается, что выбран MZ3: тк 10 бит в 1, но это не так. Согласен, инверсия бит (хотя у меня уже с инверсией, ВА87). Я сейчас сделал выбор привода согласно вашего описания, и какие бы я не выбирал приводы, привод всегда выбирался MZ3:. Вот у меня и возник вопрос, может бит 10 отвечает не за 3 привод, а за то, что не выбран ни один? Где-то.. мне попадалась такая информация, но я перерыл все, что у меня есть по контроллеру, не не нашел
- - - Добавлено - - -
На моем живом УКНЦ и контроллере КВЭ все точно так же, как и на вашем эмуляторе, те при выводе multic.doc глюк.
- - - Добавлено - - -
Я поправил глюк с multic.doc, похоже, что логика там такая:
бит 10 - если = 0, то не выбран ни один накопитель.
бит 0,1 после инверсии выбор накопителей 0-3
- - - Добавлено - - -
Иногда игрушки от ИТО вываливаются вот с такой ошибкой (номер ошибки не меняется):
- - - Добавлено - - -
Я тут разобрался почему у меня раньше на multic.doc зависала УКНЦ, не потому что RPLY висел в низу, ни по какой другой причине связанной с зависанием сигнальных линий. Я просто не знал, что когда мотор выключен, то бит готовности контроллер должен все равно выставить. Да, данные = 0, но 7 бит в статусном регистре должен быть 1.
Эта фраза поставила в ступор:
Так что-же показывает этот 10 бит?Код:BIT #2000,23204 ; Двигатель накопителя еще работает ? BNE 131620$ ; Да BIS #20,23204 ; Установить бит запуска мотора в УС MOV 23216,23224 ; (23224) = время разгона двигателя
Опять бит 10 и тут он "бит выбора накопителя"Код:131652$:BIC #3,23204 BISB 135406$(R1),23204; Установить биты номера устройства в УС BIS #2000,23204 ; Установить бит выбора накопителя MOV 23204,@#177130 ; Запуск мотора CALL 134356$ ; Восстановить РОН
Последний раз редактировалось ZPilot; 06.08.2020 в 19:47.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
У меня в документации про контроллер УКНЦ всё описано. Там есть глава, которая так и называется "Контроллер дисковода УКНЦ". Оттуда:
Для выбора устройства надо обязательно установить разряд REZ, а с помощью разрядов DS0 и DS1 осуществляется выбор номера устройства. При сброшенном разряде REZ ни одно устройство не выбрано, значение разрядов DS0 и DS1 в этом случае не играет роли.
REZ DS1 DS0 Выбранный накопитель 1 1 1 Выбран накопитель 0 1 1 0 Выбран накопитель 1 1 0 1 Выбран накопитель 2 1 0 0 Выбран накопитель 3 0 - - Не выбран ни один накопитель
Соответственно REZ - это 10-й бит, а DS1 и DS0 - первый и нулевой биты.
- - - Добавлено - - -
В этом же труде есть описание драйвера дисковода в системном ПЗУ, с подробными объяснениями. Также оттуда:
"Первым делом надо определить - вращается еще мотор или нет? Делается это анализом бита выбора накопителей REZ в копии РС. В данном случае анализируется именно бит выбора накопителей, а не включения мотора, т.к. раз был выбран накопитель, то и мотор должен еще вращаться. Если мотор еще вращается, то делается переход на метку 131620, а иначе в копии РС устанавливается бит включения мотора, в ячейку 23224 копируется время разгона двигателя и осуществляется переход на метку 131652."
"Как в случае запуска мотора, так и загрузки головки, в копии РС устанавливаются биты номера накопителя и бит выбора REZ. Затем копию РС записывается в РС контроллера по адресу 177130. При этом запускается мотор и осуществляется выбор накопителя. После этого восстанавливаются РОН и происходит возврат из подпрограммы прерывания."
У меня есть ваш файл по КГМД, но там этот момент почти не описан, ну или я этого не нашел/не понял я по этому и попросил помощи. В любом случае, спасибо. Вы подтвердили мои мысли.
Есть еще момент мне не понятный, все-таки как отвечает контроллер когда выключен мотор и когда не выбран ни один диск. Что с регистром статуса?
Я много раз говорил, что контроллер надо отделить от накопителей. Ведь контроллер не знает, подсоединены они или нет. Т.е. существуют объекты - контроллер и до 4-х накопителей. Сам контроллер может находится в режиме чтения или записи. В режиме чтения контроллер находится после включения питания, сброса по шине МПИ сигналом INIT, после чтения регистра 0177132. В режиме записи он находится после записи в регистр 0177132.
Сам режим чтения подразделяется на два подрежима - поиск маркера и формирование данных (собственно чтение). В режиме поиска маркера контроллер находится после включения питания, сброса по шине МПИ сигналом INIT, после установки бита GOR (бит 8) в регистре 0177130. В режим формирования данных контроллер переходит после успешного нахождения маркера. При формировании данных контроллер аккуратно формирует данные каждые 64 мкс, в соответствии с информацией, поступающей на вход DI. Если информация перестаёт поступать (выключили мотор, выбрали отсутствующий привод, не выбрали привода), то формируются нулевые данные.
Потому ответ: если контроллер остался в режиме формирования данных, то будут поступать нулевые данные, т.е. каждые 64 мкс в регистре 0177132 будет оказываться ноль, ну и соответственно устанавливаться бит готовности в регистре 0177130. А вот если контроллер остался в режиме поиска маркера, то тут он его уже не найдёт. Соответственно бит готовности уже никогда не установится, а в регистре 0177132 останется последнее прочитанное значение.
Спасибо, теперь вроде все расставилось по своим местам.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)