
Сообщение от
Alex_K
Есть в УКНЦ особенности работы с прерываниями на аппаратном уровне в некоторых микросхемах.
А можно поподробнее что было дальше: возникло прерывание, регистр 0177702 не считали, вышли в RT-11... А вектор восстановили? Бит разрешения прерывания дергали?
Вектор восстановлен. Ничего не дергалось. Процесс был запущен как-обычно в диспетчере процессов ПП, прерывание там рядом переназначено. После возникновения прерывания был выход с него (тупо inc KeyDwn; rti). Далее в диспетчере задач по дохождению до кода было видно что что-то нажали, был выход из диспетчера и затем ЦП давал команду на очистку памяти ПП. Вообщем обычное дело.
Ну так вот - если не делать считывание из ячейки по возникновению прерывания - затем блокировались например .ttyin (висело в бесконечном цикле) в ЦП. Нажатия клавиш тоже не слышно было.
Помогло в прерывании тупо сделать считывание с ячейки (пометка что вызвалось нажатие клавиши как и раньше оставалась) и rti потом. Без считывания с ячейки происходил факап какой-то.
Я делал это в соседней теме про косичку от Manwe для БК-0010 чтобы по возникновению прерывания тупо выйти из всего в RT-11. Вот без считывания выходит "косячно". Если в прерывании считывать адрес - выходит нормально.
Вот такой код прокатил:
Код:
; 'keyboard' interrupt
INTKB1: mov R0, -(SP)
mov @#177702, R0
; TODO: change drawing variables in CPU from pressed keys
inc KEYPR0
mov (SP)+, R0
rti
Закомментировав строку с mov @#177702.. - уже не прокатывает.
Правда есть момент - я не менял ВЕСЬ вектор. Только адрес прерывания, и восстанавливал его также. Но думается это иррелевантно что там в PS проца запишется, как и раньше оставалось-же.
Весь код (он большой конечно и может быть там косяки?) где-то тут: https://raw.githubusercontent.com/bl...ter/kosich.mac
Но сама рисовка там в ЦПУ ничего не портит. А в ПП достаточно закомментить считывание по прерыванию из 177702 и после выхода в RT-11 ничего больше не нажмешь.