С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
То есть на ВМ3 получается недозащита стека как в E11 ошибочно сделано для процов где есть защита стека: при падении ниже 400 - трап, при невозможности записать в стек - падает.
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
.
Запуск прошивки 377 вскрыл пласт проблем в эмуляции контроллера DW - 1) никак не эмулируется влияние обращений к 174006 на текущую позицию в буфере данных ; 2) никак не эмулируется влияние чтения по адресу 174016 на текущую позицию в буфере данных.
Для установления истины написан тест TDW1.SAV
Результат первого запуска в эмуляторе ДВК такой:
Код:.RU TDW1 0 1 2 3 4 5 6 7 8 9 10 11 0 1 2
Результат повторного запуска такой:
Код:.RU TDW1 0 1 2 3 4 5 6 7 8 9 10 11 253 254 255
.
Новый тест: 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? Как этот механизм на железе работает, что выставляется на шину А/Д и т.п.?
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)