Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Unsorted (http://zx-pk.ru/forumdisplay.php?f=13)
-   -   вопросы по таймингу Z80/ZX (http://zx-pk.ru/showthread.php?t=2333)

boo_boo 25th January 2006 11:50

вопросы по таймингу Z80/ZX
 
возникла вот пара вопросов:

1) порты: какие порты спектрума с задержкой (выставляют WAIT), а какие -- нет?

2) команды работы с памятью: если с командами, кладущими в память 1 байт все ясно (байт оказывается в ОЗУ по истечении последнего такта исполнения команды), то что с командами, кладущими 2 байта (PUSH regpair; EX (SP),regpair; CALL)?
на каком такте в памяти оказывается первый байт, а на каком -- второй? не разом ведь, шина данных-то 8и-битная.

SMT 25th January 2006 11:54

1. зависит от клона. смотри схемы (если только это не фирменные 48/128, где большая PAL)
2. а какая практически разница? если очень интересно, дизассемблируй RealSpec, там поцикловая эмуляция Z80. счётчик тактов прибавляется после каждого цикла

alexfreed 25th January 2006 12:25

2.
Quote:

Originally Posted by boo_boo
если с командами, кладущими в память 1 байт все ясно

Не все так ясно. Каждая команда выполняется за несколько элементарных операций - M cycles. А каждый M cycle состоит из от 3 до 6 T cycles (клоков 3.5 МГц). Или больше если вставить WAIT. В справочнике по z80 все расписано. Например PUSH BC
занимает 3 M cycles: вытащить 1 байт кода операции из памяти и записать 2 байта. В данном случае 11 T cycles. Поэтому все всегда считается в Т.

Conan 25th January 2006 12:34

1. Не встречал ни одного клона (с CPU CLK 3,5-4 МГц) где бы использовался WAIT при обращении к портам ввода/вывода. В моделях с турбо-режимом (с CPU CLK >= 7 МГц), такое решение необходимо для корректной работы FDC (КР1818ВГ93), который «не успевает» за более короткими операциями ввода-вывода. Причем в этом случае обычно тормозится обращение ко всем портам (для простоты схемотехники). В фирменных моделях WAIT использовался только при работе с ZX Interface 1. Практического интереса этот случай не представляет.

2. Вопрос поставлен некорректно. Если интересует, когда процессор Z80 устанавливает информацию для записи в память на своей шине данных это один случай: посмотрите в любом приличном описании Z80, где есть временные диаграммы шин и описания команд. А если вас интересует, когда по времени физически информация оказывается в памяти, то надо смотреть схему конкретного компьютера. Ибо, каких только вариантов не было: быстрая/медленная память, WAIT-ы, отложенная запись, упорядоченные/неупорядоченные циклы ОЗУ и т.д.. Да и зачем вам это?

boo_boo 25th January 2006 12:51

Quote:

Originally Posted by SMT
а какая практически разница? если очень интересно, дизассемблируй RealSpec, там поцикловая эмуляция Z80. счётчик тактов прибавляется после каждого цикла

а если, например, мультиколор, есть же разница, на каком такте появится байт атрибутов?
по крайней мере в случае EX(SP),rp, которая сперва младший байт меняет, потом старший. изврат, но вдруг...

boo_boo 25th January 2006 13:09

Quote:

Originally Posted by alexfreed
2.
Не все так ясно. Каждая команда выполняется за несколько элементарных операций - M cycles. А каждый M cycle состоит из от 3 до 6 T cycles (клоков 3.5 МГц). Или больше если вставить WAIT. В справочнике по z80 все расписано. Например PUSH BC
занимает 3 M cycles: вытащить 1 байт кода операции из памяти и записать 2 байта. В данном случае 11 T cycles. Поэтому все всегда считается в Т.

ага, нашел такой справочник :)
там, правда, не всегда ясно, какой М-стейт какой элементарной операции соответствует -- с PUSH и EX понятно, а с CALL как-то странно: если два М-стейта сразу после М1 соответствуют сохранению PC на стеке, то почему у них длина в тактах разная?

boo_boo 25th January 2006 13:19

Quote:

Originally Posted by Conan
Вопрос поставлен некорректно. Если интересует, когда процессор Z80 устанавливает информацию для записи в память на своей шине данных это один случай: посмотрите в любом приличном описании Z80, где есть временные диаграммы шин и описания команд. А если вас интересует, когда по времени физически информация оказывается в памяти, то надо смотреть схему конкретного компьютера. Ибо, каких только вариантов не было: быстрая/медленная память, WAIT-ы, отложенная запись, упорядоченные/неупорядоченные циклы ОЗУ и т.д.. Да и зачем вам это?

Эмулятор Z80 пишу... Нашел описание :)

alexfreed 25th January 2006 14:42

Quote:

Originally Posted by boo_boo
ага, нашел такой справочник :)
а с CALL как-то странно: если два М-стейта сразу после М1 соответствуют сохранению PC на стеке, то почему у них длина в тактах разная?

Один из самых подробных документов (z80_user_manual.pdf) говорит нам:

CALL M cycles = 5 T states=17 (4, 3, 4, 3, 3)

А дальше мои домыслы.

Которые по 4 - циклы М1 с регенерацией памяти. Которые по 3 - нормальные
циклы обращения к памяти.

lvd 25th January 2006 15:33

Quote:

Originally Posted by alexfreed
Один из самых подробных документов (z80_user_manual.pdf) говорит нам:

CALL M cycles = 5 T states=17 (4, 3, 4, 3, 3)

А дальше мои домыслы.

Которые по 4 - циклы М1 с регенерацией памяти. Которые по 3 - нормальные
циклы обращения к памяти.

Нет. CALL - один опкод, соотв-но и M1 один - вначале. А 3 и 4 сдедующие - чтение байтов адреса и декремент стека после последнего чтения. Последние 2 по 3 - пуши байтов на стек. Сравни, например, с PUSH - 5,3,3. Тоже стек декрементится вначале.

SMT 25th January 2006 15:35

Quote:

Originally Posted by Conan
В фирменных моделях WAIT использовался только при работе с ZX Interface 1

может, там проц тормозится не через WAIT, а отключением клока, но, если в фирменных 48/128 не эмулировать задержки при обращении к порту #FE, бордюрные демы "поплывут"


All times are GMT +4. The time now is 18:14.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.