PDA

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



boo_boo
25.01.2006, 10:50
возникла вот пара вопросов:

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

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

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

alexfreed
25.01.2006, 11:25
2.
если с командами, кладущими в память 1 байт все ясно

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

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

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

boo_boo
25.01.2006, 11:51
а какая практически разница? если очень интересно, дизассемблируй RealSpec, там поцикловая эмуляция Z80. счётчик тактов прибавляется после каждого цикла
а если, например, мультиколор, есть же разница, на каком такте появится байт атрибутов?
по крайней мере в случае EX(SP),rp, которая сперва младший байт меняет, потом старший. изврат, но вдруг...

boo_boo
25.01.2006, 12:09
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
25.01.2006, 12:19
Вопрос поставлен некорректно. Если интересует, когда процессор Z80 устанавливает информацию для записи в память на своей шине данных это один случай: посмотрите в любом приличном описании Z80, где есть временные диаграммы шин и описания команд. А если вас интересует, когда по времени физически информация оказывается в памяти, то надо смотреть схему конкретного компьютера. Ибо, каких только вариантов не было: быстрая/медленная память, WAIT-ы, отложенная запись, упорядоченные/неупорядоченные циклы ОЗУ и т.д.. Да и зачем вам это?
Эмулятор Z80 пишу... Нашел описание :)

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

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

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

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

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

lvd
25.01.2006, 14:33
Один из самых подробных документов (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
25.01.2006, 14:35
В фирменных моделях WAIT использовался только при работе с ZX Interface 1
может, там проц тормозится не через WAIT, а отключением клока, но, если в фирменных 48/128 не эмулировать задержки при обращении к порту #FE, бордюрные демы "поплывут"

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

Если не вру, клок отключать в Z80 нельзя.

Коммент: вру всё-таки. В Z180 нельзя.

Но можно например затягивать верхней уровень клока (нижний имеет максимум).

Conan
25.01.2006, 15:08
может, там проц тормозится не через WAIT, а отключением клокаНе «может», а совершенно точно. Тормозится через остановку CLK CPU. В фирменных машинах WAIT не задействован (через резистор подключен к +5V).

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

Спасибо за пояснение, а откуда эта инфа? Мне бы посмотреть.
В моих книжках нигде нет подробностей М1 цикла на 5 тактов. Я *знаю* что
PUSH - 5,3,3. Не знаю только как именно. А мне это важно для правильной
отработки экрана без WAIT в турбо режиме. Можно источник?

alexfreed
26.01.2006, 12:57
Если не вру, клок отключать в Z80 нельзя.

Боюсь что это не совсем точное замечание. В отличие скажем от 6502, z80 целиком статический. Т.е. клок минимальной частоты не имеет, хотя рекомендуется подавать короткие импульсы, но как угодно редко. Например от кнопки :)
См. "Искусство схемотехники".

icebear
26.01.2006, 13:13
Боюсь что это не совсем точное замечание. В отличие скажем от 6502, z80 целиком статический. Т.е. клок минимальной частоты не имеет, хотя рекомендуется подавать короткие импульсы, но как угодно редко. Например от кнопки :)
См. "Искусство схемотехники".

Каюсь, попутал его с Z180, в нём клок нельзя отключать. Кстати, если интересно, могу отсканить страничку из "Микропроцессорный комплект Z80" по поводу клока.

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

В литературе всё с диаграммами сигналов на шине расписано.
НАпример "Микропроцессорный комплект Z80", минское издательство,
начало 90-х. Под ред. Цырульникова, автор не помню.

lvd
27.01.2006, 12:35
Спасибо за пояснение, а откуда эта инфа? Мне бы посмотреть.
В моих книжках нигде нет подробностей М1 цикла на 5 тактов. Я *знаю* что
PUSH - 5,3,3. Не знаю только как именно. А мне это важно для правильной
отработки экрана без WAIT в турбо режиме. Можно источник?

Ну вот сам подумай. M1 цикл - он 4 такта. Не может же он удлиниться сам по себе например в фазе регенерации на 1 такт? Не может. Значит, 5 такт просто добавляется, когда проц с шиной ничего не делает. В это время декрементится SP, чтоб пуш первого байта сделать в следующий цикл. Или вот например add hl,de - вообще 11 тактов? Думаешь, 7 тактов после M1 проц шаманит что-то там с шиной?...

Conan
27.01.2006, 14:37
В моих книжках нигде нет подробностей М1 цикла на 5 тактов. Я *знаю* что PUSH - 5,3,3. Не знаю только как именно. А мне это важно для правильной отработки экрана без WAIT в турбо режиме. Можно источник?
В свое время вопрос о времянках шин Z80 во время PUSH qq так же возникал и у меня. Как ни странно все доступные мне на то время фирменные описания хранили гордое молчание.

Информация нашлась в брошюре: «Микропроцессор Z80 Справочное пособие» Минск 1992 МП «Электроник-сервис». Там на стр. 26 приведены диаграммы цикла подтверждения NMI. Поскольку это аналог PUSH PC, то и времянки аналогичные. Но указанная брошюра содержала неточности, например, на стр. 66 диаграмма цикла подтверждения NMI содержала только 4 такта.

Для меня в то время (разрабатывался код для видеопроцессора в ZX-Next) нужна была выверенная информация (и по тактам и по состоянию шин). Поэтому пришлось зашить несколько ПЗУ и посмотреть реальные сигналы осциллографом. Так появились заметки на полях. Впрочем, они практически совпали с диаграммой на стр. 26 (см. присоединенный рисунок).



P.S. Думаю, авторы брошюры «Микропроцессор Z80 Справочное пособие» не сидели с осциллографами, а всего лишь переработали информацию из добытой ими документации по Z80. Список литературы в брошюре содержит 16 ссылок, скорее всего первоисточник где-то в них.

icebear
27.01.2006, 15:52
P.S. Думаю, авторы брошюры «Микропроцессор Z80 Справочное пособие» не сидели с осциллографами, а всего лишь переработали информацию из добытой ими документации по Z80. Список литературы в брошюре содержит 16 ссылок, скорее всего первоисточник где-то в них.

Z80 в начале 80-х хорошо разобрали немцы (как западные, так и восточные). Только не понимаю, почему у нас был такой дефицит инфы, если с восточными мы дружили и покупали их Роботроны.

Conan
27.01.2006, 16:30
Z80 в начале 80-х хорошо разобрали немцы (как западные, так и восточные).В списке литературы указанного справочника, есть книга(и) на немецком языке.

Только не понимаю, почему у нас был такой дефицит инфы, если с восточными мы дружили и покупали их Роботроны.Кроме того, что дефицит информации (как и много другого) был ужасный, в СССР не производились Z80. Да и в СНГ (в Зеленограде и Воронеже) скорее всего только закупленные за границей кристаллы разваривали в корпуса. По крайней мере я не получил ни одного подтверждения того, что кристаллы для процессоров Z80 производились где то в СНГ.

boo_boo
27.01.2006, 17:43
Спасибо за пояснение, а откуда эта инфа? Мне бы посмотреть.
В моих книжках нигде нет подробностей М1 цикла на 5 тактов. Я *знаю* что
PUSH - 5,3,3. Не знаю только как именно. А мне это важно для правильной
отработки экрана без WAIT в турбо режиме. Можно источник?
кстати, нашел вот в нете кой-чего (не помню уже, где). правда с официальным мануалом нашел уже одно расхождение по длительности М-циклов, правда официальный мануал по любому не без глюков...

alexfreed
28.01.2006, 02:05
M1 цикл - он 4 такта. Не может же он удлиниться сам по себе например в фазе регенерации на 1 такт? Не может.

Я точно не знаю может или не может. Поэтому и спрашиваю. Мне представляется возможным 2 механизма.

1. Вставляется 1 Wait state. Прецидент есть - IN/OUT всегда добавляют
1 Wait. Почему нет?

2. Первые 4 такта как всегда, но между М1 и след. циклом один такт вообще ничего снаружи не происходит.


Раз на самом деле (2), очень хорошо. А то лениво логический анализатор подключать :)