Alekcandr wrote:...Не туда.
Текущее состояние стейт машины (машинный цикл) не делимая величина. Внешние события могут анализироваться только в промежутках машинных циклов. Соответственно и реагировать стейт машина может только в этих промежутках.
Судя по документации-то так и есть (и там написано, что она неделимая не святым духом, а что после префиксов (и EI) на один такт блокируются прерывания); но опять же судя по документации, код команды со всеми префисами читается при активном !M1. И вот это место выглядит очень похоже на глюк - один внешний сигнал ведёт себя странно, близкие ему внутренние тоже могут вести себя странно (если довольно редкая команда читается без !M1, то и прерывания могут быть пропущены); в общем, попробую проверить на всякий случай при случае.
Alekcandr wrote:
Касательно прерываний. Пару цитат.
Interrupt Request (input, active low). Interrupt Request is generated by I/O devices. The CPU honours a request at the end of the current instruction if IFF1 is set. INT is normally wired-OR and requires an external pullup for these applications.
Тут как раз просто и понятно, а начало обработки прерывания легко можно отследить по запросу вектора (!M1 и !IOREQ).
Alekcandr wrote:
Non-Maskable Interrupt (input, negative edge-triggered). NMI has a higher priority than INT. NMI is always recognised at the end of the current instruction, independant of the status of the interrupt ip-ops and automatically forces the CPU to restart at location 0066h.
Тут хуже - если нужно отследить, что вот прямо сейчас начало обрабатываться прерывание, то по сути надо ловить "the end of the current instruction".
Alekcandr wrote:
Вот тут, на мой взгляд, не очень удачно было принято решение разработчиками.
Bus Request (input, active low). Bus Request has a higher priority than NMI and is always recognised at the end of the current machine cycle. BUSREQ forces the CPU address bus, data bus and control signals MREQ, IORQ, RD and WR to go to a high-empedance state so that other devices can control these lines. BUSREQ is normally wired-OR and requres an external pullup for these applications. Extended BUSREQ periods due to extensive DMA operations can prevent the CPU from refreshing dynamic RAMs.
Кто ПДП запросил, тот память и регенерирует; сложно представить, что процессор __всё равно__ будет лезть в память и регенерировать её не смотря на ПДП.
Alekcandr wrote:
Приходится "выкручиваться" программно для безударного переключения между двумя процессорами в MSX.
А как там сделано? Мои планы на ПДП начинаются и оканчиваются ВТ57 (на типа COVOX звук выдавать).