С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
.
Новый тест: TDW2.SAV - делает то же самое, но с предварительным сбросом контроллера.
.
Ситуация прояснилась - любое обращение к регистру 174006 обнуляет позицию чтения/записи в буфере DW ( это пока не эмулируется ), и только запись в регистр 174016 даёт такой же эффект ( это уже эмулируется ).
А кто-нибудь может в двух словах рассказать как выполнять I/O на DW? Причем интересует 22 bit.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
А биты там по барабану - он работает в PIO-mode. То есть посылаем цилиндр в 174012, поверхность в 174014, сектор в 174006, команду чтения в 174016, разрешение прерывания в 174020 и ждем прерывания. Пока выполняются операции, все регистры, кроме 174020 недоступны, бит 15 (100000) в нем на это указывает. То есть или жди прерывания, или пропалывай (POLL) этот бит. Впрочем и в RT-11, и в ДИАМСе, получив прерывание, первым делом его проверяют, если он стоит, уходят на повтор или ошибку.
А потом не спеша, прополкой, ждут бита готовности (200) в 174020, после чего пересылают очередное слово из 174010 в память. В RT-11 это делается на FORK-уровне. Запись примерно так же - выдают дисковый адрес, пословно пересылают из памяти в буфер DW (174010), выдают команду записи и ждут прерывания, после чего проверяют на ошибки
- - - Добавлено - - -
В принципе, почти логично - сектор изменили, значит позиция в старом секторе стала неактуальной. А то, что любое обращение, а не только запись - вероятно, или недоглядели, или были сложности в реализации. Да и нелогично делать чтение регистра служебной зоны формата посередине передачи блока...
Последний раз редактировалось AFZ; 02.02.2016 в 07:48.
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
Тоже вопрос или где можно почитать (желательно на русском), как процессор узнает по какому адресу находится подпрограмма прерывания выставленного аппаратурой? Если еще точнее, то вот например, есть регистры внешнего устройства к примеру 176570 и 176574 откуда процессор узнает что нужно перейти по вектору 374? Как этот механизм на железе работает, что выставляется на шину А/Д и т.п.?
Ответ просто - он этого не узнает в принципе. Ему выставили вектор, он по нему выполнил прерывание, а была там подпрограмма обработки или нет - его не волнует
- - - Добавлено - - -
Можно взять например users guide по KDJ11-B (первое что на память пришло), там подробно все это расписно.
- - - Добавлено - - -
Вот здесь еще вроде было про это.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Т.е. аппаратура висящая на адресах 176570 - 176576 выставляет сигнал прерывания и на шину выставляется адрес вектора? или адрес вектор процессор читает из 176576 по сигналу прерывания? где, чем, определяется приоритет?
Можно здесь, не очень подробно, сам механизм, мне пока не понятно.
Загляни в книжку "Центральный процессор М2", ссылку давали недавно в теме "ДВК-УКНЦ поиск файлов". Коротко - ВП1-065 по адресу 176560, допустим, выставляет К ТПР Н, в ответ сначала выдается К ВВОД Н, по которому все подключенные фиксируют состояние своего триггера запроса прерывания и, если он установлен, перекрывают дальнейшее прохождение К ППР Н. Через несколько сотен нс выдается сигнал К ППР Н, первый по корзине с включенным триггером запроса прерывания выдаст на К ДА02-15 Н код вектора прерывания (в нашем случае - 360) и К СИП Н. Процессор считывает этот код, интерпретирует его, как адрес вектора и достает оттуда PC, потом, прибавив к нему двойку, достает приоритет. И вперед.Остальные устройства (дальше по корзине) сигнал К ППР Н не получат - наш ВП1-065 его перекрыл.
Последний раз редактировалось AFZ; 02.02.2016 в 13:30.
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)