Вот здесь https://zx-pk.ru/threads/14702-rasch...l=1#post560139 Patron приводит формулы для ВМ1:
[Время выполнения команды] = [Суммарное время всех циклов шины] + [Суммарное время всех штрафов]
Циклы шины:
DATI : [ 7*T+tn] - цикл чтения шины
DATO : [10*T+tn] - цикл записи шины
DATIO: [13*T+2*tn] - цикл чтения-записи шины (чтение + запись приемника)
tn - время задержки памяти (для динамической памяти БК с частотой процессора 3 МГц равно 4 тактам)
Штрафы:
[Штраф исполнения]: 1*T (для всех команд)
[Штраф второго операнда]: 1*T (для команд, использующих два операнда, если один из них в памяти)
[Штраф отмены предвыборки]: 2*T (для команд, выполняющих больше одного цикла шины)
[Штраф префиксной адресации]: 1*T - для каждого операнда с префиксной адресацией)
[Штраф невзаимности]: 5*T (для MOV = 4*T) (для команд, у которых первый операнд не обращается к памяти, а второй - обращается)
Так же надо учесть, что циклы шины могут начинаться только каждые 4 такта (если частота процессора 3 МГц). Т.е. если по этим формулам длительность команд не кратна 4 тактам, то ее необходимо увеличить до кратного 4 тактам значения.
Я просчитал для всех команд MOV (длительность которых, измеренную на БК-0010, вы привели), и у меня сошлось все такт в такт.
Могу в эмулятор внести новые тайминги с учетом этих формул, но желательно проверить теорию на других командах тоже.
PS: Конечно, по правильному надо учитывать в какие моменты (от начала команды) начинаются циклы шины, и каждый цикл уже выравнивать (в большую сторону) до 4 тактов. Но как рассчитать время каждого цикла - это вопрос. Нужно понять где (в каком месте по тактам) вставляются штрафы и где (в каком месте по тактам) в циклах шины формируется запрос на чтение/запись контроллеру памяти (т.е. какой именно такт цикла шины должен быть кратным 4 тактам).





Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
