Я видел пару комментариев сейчас, когда эти странные инструкции DDCB и FDCB только увеличивают регистр R. в два раза.
Я всегда предполагал (и то, как я реализовал свой эмулятор Z80), что регистр R реализуется в конце каждый M1 цикл.
Напомним, что эти странные инструкции DDCB и FDCB имеют длину четыре байта:
DD CB, код операции
Код операции FD CB
Понятно, что два прекодных кода операции считываются с использованием циклов M1, в результате чего регистр R увеличивается в конце каждого из этих циклов.
Также ясно, что байт смещения, следующий за префиксом CB, читается обычным циклом чтения, поэтому регистр R не увеличивается в конце этого цикла.
Это оставляет окончательный код операции. Если он читается циклом M1, то либо регистр R увеличивается в конце цикла, что дает в общей сложности 3 приращения, либо в особых случаях Z80 этот цикл M1 не увеличивается на регистр R.
Есть еще одна возможность. Что, если окончательный код операции читается обычным циклом чтения, таким как байт смещения, который предшествовал ему, а не циклом M1? Это, конечно, также приведет к тому, что регистр R будет увеличен только в два раза для этих инструкций, и не потребует, чтобы Z80 сделал исключение, не увеличивая регистр R в конце каждого цикла M1.
Это также может иметь больший смысл с точки зрения внутреннего состояния Z80. Как только он переключается на обычные циклы чтения для чтения дополнительных байтов инструкции (в данном случае это байт смещения после префикса CB), он никогда не переключается обратно на циклы M1, пока не начнет следующую инструкцию.
Может ли кто-нибудь проверить это на реальном оборудовании Z80, чтобы подтвердить значение регистра R, следуя одной из этих инструкций DDCB или FDCB?