Цитата Сообщение от Spectramine Посмотреть сообщение
Я так понимаю, #ED и #CB в вашей картине мира это тоже отдельные инструкции.
вполне - инструкции перевода процессора в режим расширенных опкодов.

- - - Добавлено - - -

Цитата Сообщение от Titus Посмотреть сообщение
M1 цикл - это машинный цикл в котором выбирается опкод инструкции. Префикс считается частным случаем опкода.
А конец инструкции (или начало следующий) в процессоре совершенно четко обозначен. В моем реверсе это сигнал RES_MCLK (последний машинный цикл инструкции).
M1-циклов может быть много, но RES_MCLK всегда один. По нему процессором и определяется, что инструкция закончилась, можно обработать запрос на прерывание или еще что-то в этом роде.
Вполне логично, что процессор может вырабатывать дополнительные сигналы блокировки прерывания, чтобы исключить прерывание, когда это нежелательно. Но ведь возможность обработать прерывание не означает что процессор закончил выполнение инструкции, иначе прийдется все что находится между DI и EI или весь обработчик NMI/INT прерывания трактовать как одну большую инструкцию.

- - - Добавлено - - -

Цитата Сообщение от Bedazzle Посмотреть сообщение
Я чутка потерялся. А что будет происходить, если сделать длинную цепочку префиксов, и во время её отработки наступит момент прерывания. Когда оно отработает? В середине цепочки, или будет пропущено, и цепочка отработает до конца? Если в середине, то процессор будет помнить какой был последний префикс перед прерыванием, или потеряет?
выполнение инструкции префикса переводит процессор в префиксный режим, в котором прерывания блокируются пока режим префикса не будет снят. Также как выполнение EI блокирует прерывания на одну следующую инструкцию.

- - - Добавлено - - -

Цитата Сообщение от Reobne Посмотреть сообщение
Мне кажется, лучше считать, что никакого бага в SZX нет. Что сохранить снапшот можно только в тот момент, с которого легко продолжить выполнение не только в эмуляторе, но и на реале. Для усложнения нужны более веские причины, чем просто "так хочется".
Дело в том, что если сохранять снэпшот только в тот момент, когда процессор не находится в режиме префикса, то не всегда будет возможность вообще сохранить снэпшот. В случае, когда вся память заполнена префиксом #DD или #FD, процессор перманентно всегда находится в префиксном режиме, не выходя из него. Поэтому это просто приведет к вечному зависанию эмулятора при попытке сохранить снэпшот. Такое поведение неправильное.

- - - Добавлено - - -

Цитата Сообщение от Reobne Посмотреть сообщение
Сейчас и на реалах можно делать снапшоты, по немаскируемому прерыванию. Есть, правда, глюки, при некоторых SP. Ну и, получается, если всю помять забить префиксом, то тоже не сработает NMI.
сохранение снэпшотов из обработачика NMI не всегда даёт рабочие снэпшоты, т.к. необратимо портит память и состояние процессора. Методы защиты от снятия снэпшотов с помощью TRDOS MAGIC или другого NMI обработчика на Z80 давно известны и в таких программах после нажатия NMI код программы будет испорчен и программа покажет сообщение о недопустимости выполнения NMI либо просто сбросится или перестанет работать.

Эмулятор-же или железный отладчик (JTAG) должен обеспечивать отладку полностью прозрачно для отлаживаемой программы, никак не влияя на её состояние.

- - - Добавлено - - -

Цитата Сообщение от Reobne Посмотреть сообщение
Эмуляторные извращения это весело, можно хоть любой такт сохранять, но во первых: "Зачем?"
Затем, чтобы во время отладки можно было сохранить текущее состояние программы, пойти погулять, покушать, отдохнуть и на следующий день загрузить его и продолжить отладку с того-же самого состояния.

Цитата Сообщение от Reobne Посмотреть сообщение
а во вторых: "Нафига усложнять запуск снапшота на реале?"
а как вы себе представляете корректный запуск SZX снэпштоа на риале, сохраненного после выполнения EI, т.е. с взведенным флагом EILAST?