добрый вечер.
подскажите как правильно вернуться из TRAP 4 в тело программы ?
добрый вечер.
подскажите как правильно вернуться из TRAP 4 в тело программы ?
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
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
Вероятные причины возникновения :
1. Неисправность МПИ, или переразгон проца.
2. Фокусы с ЕЦЦ 1801ВП1-119
3. Отсуствует регистр на МПИ, или идет отладка такового.
*
Пример поиска регистра 177714 на УКНЦ, ЦП :
001000 : 013727 000004 000000 013727 000006 000000 012737 001100
001020 : 000004 012737 000340 000006 013727 177714 000000 032737
001040 : 000200 177564 001774 012737 000100 177566 013737 001004
001060 : 000004 013737 001012 000006 000000
001100 : 013737 001004 000004 013737 001012 000006 032737 000200
001120 : 177564 001774 012737 000101 177566 000000
Если есть регистр 177714 по чтению, напечатает "@", а если нет - "А". При этом стек углубится на 4 байта ( зависит от железа проца и М-ЭВМ ).
Что конкретно делает программа :
1.Сохраняет текущие значения вектора 4 в словах 1006 и 1012
2.Записывает в 4 слово адрес прерывания по 4 вектору ( 1100 ), и слово состояния проца при этом ( 340 - аппаратные прерывания пользователя запрещены )
3.Читает слово 177714, пытаясь скопировать его содержимое в слово 1034. Если это удается, восстанавливает сохраненные значения 4 и 6 слов, рисует на терминале символ "@".
4.Если происходит прерывание в адрес 1100, то программа восстанавливает содержание 4 и 6 слов, и рисует на терминале символ "А".
Указатель стека R6 при этом находится на минус 4 позиции относительно входа в данную программу.
- - - Добавлено - - -
Установка R6 в классические "001000"
012706 001000
*
Тест наличия регистра 177714 на МПИ :
001000 : 012737 001100 000004 005000 013727 177714 000000 077004
001020 : 012737 000007 177566 000137 001006
001100 : 012706 001000 000137 001000
В начале программы в 4 -й вектор записывается слово 1100 - куда передать управление при зависании МПИ.
Потом очищается R0 и делается чтение регистра 177714 в слово 1014, при достижении 65536 успешных попыток чтения воспроизводится звонок ( кот 7 ) на терминале, далее управление передается на адрес 1006.
В адресе 1100 R6 ставится на место - на слово 001000, и программа перезапускается.
Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения [email protected]
Вопрос был не про это. От чего возникает Trap4 в принципе - я прекрасно знаю. Вопрос был о причине у спрашивающего - в зависимости от этого может быть разная реакцию - не тупо в лоб ответом - возврат из любого прерывания - RTI. Который в общем случае - неверный
- - - Добавлено - - -
Что то мне на память не приходят варианты, когда при прерывании в стек не кладутся два слова - PC и PSW до прерывания
Последний раз редактировалось form; 07.05.2018 в 09:45.
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
Значит, вопрос актуален. Мне действительно интересно - есть ли в реакции на прерывания на семействе совместимых (и не очень) с PDP-11 особенности, связанные с нестандартным поведением - то есть когда на стек кладутся не два слова (PC, PSW) и/или не в том порядке ((SP) -> PC, 2(SP) - PSW).
Про особенности при наличии двух или трёх режимов работы процессора (kernel, supervisor, user) - знаю.
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)