.
Последовательность действий ( скорее всего ) будет такой: SP -> -(HSP) ; PC -> SP
- - - Добавлено - - -
Соответственно, при выполнении команды RTS SP последовательность действий будет такой : SP -> PC ; (HSP)+ -> SP
.
Последовательность действий ( скорее всего ) будет такой: SP -> -(HSP) ; PC -> SP
- - - Добавлено - - -
Соответственно, при выполнении команды RTS SP последовательность действий будет такой : SP -> PC ; (HSP)+ -> SP
Последний раз редактировалось Patron; 27.01.2016 в 20:47.
Нет - зависание в режиме HALT ничего в память не пишет, а только загружает в PC содержимое ячейки 000004.
- - - Добавлено - - -
Уже понятно, что ради возможности обрабатывать команду HALT, как обычное программное прерывание - разработчики пожертвовали в режиме HALT всеми нормальными прерываниями без исключения.
...
Было бы полезно узнать, как реагирует процессор ВМ3 в режиме HALT на команды INC PC и TST @#1.
...
Логика подсказывает, что внешние прерывания в режиме HALT невозможны, но проверить не мешает:
- - - Добавлено - - -Код:.ASect . = 0 Jmp @#Next // Точка входа пульта. . = 24 .Word Start // Адрес старта. .Word 340 Start: Mov #2222, SP HALT // Установить HALT-моду Next: Clr @#177776 BiS #100, @#177564 Wait
Из команд, неявно использующих SP, осталась не проверенной команда MARK - восполним этот пробел :
Код:.ASect . = 0 Jmp @#Next // Точка входа пульта. . = 24 .Word Start // Адрес старта. .Word 340 Start: Mov #2222, SP HALT // Установить HALT-моду Next: Mov #Next2, R5 Mark 0 Nop Next2: Call Next3 // Проверить HSP Next3: Mov SP, (PC)+ // Проверить SP Nop Wait
Последний раз редактировалось Patron; 29.01.2016 в 14:04.
На самом деле очень напоминает способ каким работает red stack abort на машинах с ограничением стека (11/70, 11/73, 11/[89][34]): в случае если во время прерывания из-за кривого значения кернелного стека туда не удается ничего положить, SP выставляется принудительно в 4, после чего происходит обычный trap to 4 (у этих процов есть регистр CPUERR в котором можно выяснить причину возникновения trap to 4)...Сообщение от Vslav
Последний раз редактировалось form; 29.01.2016 в 17:11.
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
Не противочречат. Данные былт получены на логическом анализаторе на реальном процессоре ВМ3, но он у меня установлен на модуле, который подключен к плате Terasic DE0, а там в FPGA уже собрана система с 16К ОЗУ с адреса 000000, контроллером векторных прерываний, системным таймером 50Гц и UART типа 065. Поскольку по адресу 000000 у меня в любом режиме ОЗУ (при программировании FPGA в него загружена начальная программа), то запись в него возможна, в отличие от реальной 1201.03.
Так и я о том же. На анализаторе - да, запись возможна. А на реальной 1201.03/04 - нет. Соответственно, проц по TRAP TO 4 пытается записать что-то в ячейки 2-0, RPLY от записи не получает, что вызывает новый TRAP TO 4 и так до снятия DCLO.
А Патрон утверждает, что зависание в Halt-Mode ничего не пишет, просто загружает адрес из 4 вектора, и все.
В принципе, это элементарно проверяется на 1201.03/04 с 377-й прошивкой (СуперМакс, ау!). Программа из 377-й прошивки при запуске с нулевого адреса первым делом сравнивает содержимое ячейки 100000 с константой 31764 (oct) и, если оно совпадает, уходит на адрес 100002. Прямо в пультовом режиме пишем в ячейку 100002 команду, вызывающую Trap to 4, потом 31764 в 100000 и запускаем программу Halt-Mode с нулевого адреса. То есть убираем сигнал К ОСТ Н (переключатель программа/пульт ставим в "программа"), заносим куда-нибудь вроде 1000 ноль (команда HALT) и запускаем с этого адреса (1000G).
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)