Цитата Сообщение от Black_Cat Посмотреть сообщение
так сразу снять NMI и ессно со снятием NMI переключить ПЗУ

Какую однокристалку предполагаешь юзать? И ты не ответил:

NMI определяется в конце инструкции (из документации, что маразм, скорее всего речь идет о конце машинного цикла), определился он и перед следующей инструкцией идет переход на 66H. Вопрос: а когда деактивировать NMI? Ведь когда мы его устанавливали это могла быть середина другого цикла, а могла быть середина этого цикла, т.е. пересекли ли мы границу обработки NMI?. Можно деактивировать по подъему M1, что означает что новый машинный цикл уже идет и менять ПЗУ нельзя, так как могут быьт еще обращения к памяти в пределах этой инструкции. НО! Ведь не факт что мы попали перед низким уровнем на M1 при активации NMI, т.е. NMI могло быть просто не определено.

Т.е. вопроса три:
1) Когда подать NMI чтобы он точно был пойман
2) Когда снять NMI, чтобы он УЖЕ был точно пойман в этот момент
3) Когда сменить ROM чтобы не было каши в голове в проца

И получается, тогда, что надо смотреть на M1, когда M1 - низкий можно подать NMI, тогда в конце этого цикла NMI будет точно пойман, Далее, как только мы видим еще раз опущение M1 (после подъема), это означает начало нового INSTRUCTION FETCH и будет совсем мало времени, чтобы сменить ROM и снять NMI, тогда все будет точно поймано и пройдет чисто. Там реально маленький зазор по времени совсем, полтакта где-то.

Можно было бы просто блокировать процессор сигналом WAIT. Проблема с ними, что он не опрашивается не в начале или конце машинного цикла, в активен сразу (по крайне мере в доке нет ни слова о месте, когда ижет опрос этой линии). Т.е. выставив его мы можем просто приостановить выполнение текущей команды и сменим ROM получить кашу, так как выполнение ее продолжится и только потом сработает NMI.

Можно попробовать через BUSREQ. Оно срабатывает в конце машинного цикла. Т.е. можно активировать BUSREQ, подождать BUSACK. Сменить культурно ROM, выдать NMI, деактивировать BUSREQ, подождать активации M1 и деактивировать NMI. Здесь все операции не требуют быстрой реакции. Я посмотрел, вроде ULA на линии BUSREQ/BUSACK у процеса не завязано никак, так что конфликта нет.


Касательно МК - неважно, эта часть все равно будет на CPLD

Касательно мэпинга памяти - это было просто больное любопытство. Ну не совсем, если можно было бы подменять память, то можно бы бы все манипуляции с памятью делать во внешней памяти, а потом мапировать. На сколько удобно или неудобно как раз и хотел решить, но коли нельзя и решать нечего.