отличается на самом деле от того, что указано в справочниках?
Я реально столкнулся с этим, когда писал плеер цифровых музонов для Speakera. При этом в тактах всё было чётко (т.е. команды были выровнены), однако на самом деле было чётко замечено (на слух) отличие звучания плеера от оригинала на рельнос спектруме (ощущение, как будто проигрывается аудиокассета в "жующем магнитофоне").
Детально этим вопросом я не стал заниматься тогда (это было где то три года назад), но вот счаз опять поднялся этот вопрос.
И вот какие есть соображения:
- Проблемы с изменённым количеством тактов наблюдается только для нечётнотактовых команд.
- Не все нечётнотактовые команды имеют длительность, большую, чем указано
- Предположительно, изменённая длительность команд (нечётнотактовых) справедлива только для ОЗУ, в ПЗУ такого никогда не происходит
- Суммарно длительность таких "неформальных" команд может быть представлена в виде дополнительных 0.1-0.9 тактов, добавленных к длительности команды
На основе аналогии, я знаю что в МК48 и МК51 один такт включает в себя несколько циклов, суммарно длительность команды составляется не из тактов, а из циклов, и соответсвенно, если принять такую же аналогию для Z80, то скорей всего длительность таких "странных" команд зависит от скорости выполнения циклов, которые прежде всего зависят от задержек обращений к памяти.
Кроме того, Vitamin указал, что Unwinder исследовал длительность некоторых команд и усреднённая длительность их равна была скажем не 7 а 7,5 тактам (это может быть LD A,(DE) - 7,5, RET Z в случае NZ - 5,5 и т.д.).
Причём, если вначале идёт такая "странная" команда процессора, то следующая автоматически увеличивается в длительности на один такт (т.е. конструкция RET Z inc b имеет длительность не 9 а 10 тактов, LD A,(DE) nop имеет 10 тактов длительность).
И вот интересный момент: эмулятор R80 учитывает этот нюанс, т.е. создатели эмулятора знали о таких премудростях? US же это не учитывает, на остальных эмулях я не пробовал.
Может есть специалисты которые объяснят почему происходит так?