Да. ловушку на однобайтовую команду поставить гораздо проще (считая в количестве корпусов микросхем). На время работы NMI прерывания будут выключены аппаратно портом 0FBh (т.к. он сбрасывается по приходу /NMI), т.е. di/ei делать не надо и iff восстанавливать соответственно - тоже. Плюс подстрахую это доп вентилем работающем от триггера "мы в NMI", который сбросится финальным RET.
Я просто понять затрудняюсь - от чего имено он защищает? Прерванная программа же сама свой стек не испортит (где ее прервал приход NMI и где сохранен адрес возврата)?
Делать буду так: по приходу NMI в области 0000...1FFF (где у Ориона-ПРО ROM1) аппаратно будет включаться не ROM1, а ОЗУ на 8к (то же самое ОЗУ, из которого будут выдаваться эмулируемые матрицы кнопок по чтению нужных портов MSX/ZX), где будет лежать обработчик NMI (перекодировщик экрана и вычислитель матрицы клавишь). Аппаратно это реализация будет несложная, т.е. все абсолютно одинаково, только ROM1 включается в это окно по /RES, а RAMNMI туда же по /NMI. Первой командой обработчик NMI сохранит указатель стека уже в свое NMI-шное ОЗУ, в него же поставит новое значение SP, туда же push af, push all, затем все вычисления, pop all; ld a,40h; out (0FBh),a; pop af; ld sp,(1FFEh), RET
Реализуемо, но стоит ли это еще одной резанины на плате?
А что, бывает такое когда программа Спека пишет в область ПЗУ?





Ответить с цитированием