Вход

Просмотр полной версии : ВременнЫе диаграммы и другие вопросы по Z80



Bolt
15.04.2013, 09:48
Здравствуйте.

Решил "собрать" (то есть в ПЛИС и/или написать эмулятор) простой процессор, сначала повторить реальный, потом попробовать разработать что-то своё. Для начала выбрал Z80, потому что я его достаточно хорошо знаю, следующим будет наверное 80386. Для опытов на реальном железе (недокументированные команды и прочее) будет собрана минимальная плата с Z80, FLASH и SRAM. Два Z80 разных производителей уже купил, может будут ещё. Один есть впаянный на старой плате АОН, выпаивать пока не хочу, хотя оборудование есть.

В процессе проектирования платы для экспериментов возник вопрос по временнЫм диаграммам работы Z80. В документации, которую удалось найти в интернете, они нарисованы не совсем понятно. Может кто-нибудь снять двухлучевым осциллографом осциллограммы на реальном процессоре? Интересуют A(любой), #RD, #WR, #MREQ, все относительно CLK. Ещё можно D(любой) относительно #MREQ.

Ну и ещё есть другие вопросы. Например, существуют ли тесты для процессора/эмулятора, чтобы проверить арифметические операции, условия, недокументированные команды и т.п.? Есть ли хороший консольный ассемблер, желательно под Linux? (сам пока ещё не искал, даже не знаю что сейчас есть) С командами вращения тоже какая-то путаница, про неё расскажу отдельно, с картинками :)

ZEK
15.04.2013, 10:26
1. Есть куча эмуляторов которые не документированые возможности эмитируются
2. Чем диаграммы не понятны? Там все правильно, из диаграмм тяжело разве что с первого раза въехать в цикл подтверждения прерываний

Эмули с исходниками: unreal speccy, zxmak2

И да, Z80 в HDL уже есть если что, 4 варианта если не ошибаюсь

Bolt
15.04.2013, 11:25
Это вам понятно, а мне ещё нет. Именно поэтому и интересует в первую очередь реальное железо, а не эмуляторы, пусть даже идеально имитирующие какое-то железо.

О диаграммах. Например, адрес на шине устанавливается по фронту или спаду тактового импульса? Или это у разных производителей по-разному? Сколько нс реальные задержки между сигналами? Данные при чтении в какой момент защёлкиваются? В отсканированных даташитах на Z80 тоже встречаются ошибки, поэтому я им не особо доверяю.

ZEK
15.04.2013, 12:08
Сколько нс реальные задержки между сигналами?
Да какая разница сколько нс, всеравно в FPGA эти нс точно такие не поставишь


Например, адрес на шине устанавливается по фронту или спаду тактового импульса?
без понятия, даташит на память не помню, но там нарисовано


пусть даже идеально имитирующие какое-то железо.
и этого результата добивались очень долго, много народа эксперементировало, делало предположение и опять эксперементировало, в итоге много было потрачено человекомесяцев, разумней уже накопленным опытом воспользоваться чем самому чип колоть


Данные при чтении в какой момент защёлкиваются?
опять же в даташите четко нарисовано когда, но помню что в отличии от адреса который был всегда к одному фронту привязан с данными веселей, они как к переднему так и к заднему фронту привязаны в зависимости от машинного цикла

Bolt
15.04.2013, 12:21
ZEK, для Вас это может пройденный этап, интерес угас и уже всё забылось, но я буду "колоть чип". Пока, чтобы не переделывать потом плату, меня интересуют диаграммы с реального железа. Любого. Которого у меня пока нет. Некоторые вещи я не могу понять и даташит в понимании пока не помогает. Не будет осциллограмм - ну, значит попробую наугад, потом буду переделывать. Но отговорить меня не получится ;)

ZEK
15.04.2013, 12:31
Я не отговариваю, я "информирую" :)
уже много чего люди раскопали и есть куда смотреть, а колоть там ну там очень много.

Допустим что бы разобраться с логикой скрытого регистра, в каких операциях он используется это достаточно сложно и очень много тестов разных надо делать, причем софтовых

Bolt
15.04.2013, 12:41
Я достаточно информирован о объёме работ, спасибо за заботу :)

Ещё вопрос: кто-нибудь коротко может объяснить что происходит с 3 и 5 битами регистра флагов? Описания с кучей вариантов "при ... происходит ..." я уже читал. Уверен что всё описывается гораздо проще. Собираюсь заняться чем-то вроде http://zx.pk.ru/showthread.php?t=12970 , но основная цель скорее не "создать эмулятор", а "посмотреть на процессор изнутри". Если что - про http://www.visual6502.org/ я тоже знаю.

SAM style
15.04.2013, 12:51
Ещё вопрос: кто-нибудь коротко может объяснить что происходит с 3 и 5 битами регистра флагов? Описания с кучей вариантов "при ... происходит ..." я уже читал. Уверен что всё описывается гораздо проще.Обычно туда копируются 3 и 5 биты из результата операции, но есть исключения (3 и 5 биты старшего байта адреса или старшего байта MEMPTR, при LDI вообще слабо поддающаяся логике вакханалия).

Bolt
15.04.2013, 13:51
при LDI вообще слабо поддающаяся логике вакханалия).
Во-от. Её в том числе и буду изучать.

SAM style
15.04.2013, 19:29
Во-от. Её в том числе и буду изучать.
Нет, что в результате LDI получается в 3 и 5 битах - известно. Непонятно, почему так. Берётся перенесённый байт, складывается с регистром A, 3й бит результата сложения - в 3й бит флагов, 1й бит - в 5й.
В CPI/CPD ситуация ещё хуже.

Bolt
15.04.2013, 20:45
Непонятно, почему так.
"А вот это вам и расскажет новая учительница." (Ничего личного, просто этот анекдот только что попался :) )

Мне вот, кажется, понятно. Надо только составить полную картину и проверить на разных кристаллах, чем и собираюсь заняться.

Есть ещё какие неисследованные особенности? Может набросаете, а я выберу чем из этого заняться в первую очередь.

Bolt
15.04.2013, 22:06
Вы хотите сказать что всё недокументированное, даже уже описанное, недоисследовано? :)

Bolt
18.04.2013, 18:50
Подключил, посмотрел. Буду заказывать печатную плату для опытов.

Bolt
25.05.2013, 10:17
АЛУ Z80 и часть внутренней шины данных
http://yadi.sk/d/KFj2mpWo594Xy

Titus
25.05.2013, 11:29
АЛУ Z80 и часть внутренней шины данных
http://yadi.sk/d/KFj2mpWo594Xy

А чего не крупнее и не все?

Bolt
25.05.2013, 12:09
Крупнее? Там на странице предварительный просмотр, а сам файл примерно 1700 x 1400 px. Крупнее не будет, я с таким работаю. Файл со всеми слоями получается около 200 мегабайт.

Titus
25.05.2013, 14:09
Ну так это круто) И надо оригинал в 200мб)

Bolt
25.05.2013, 14:49
Оригиналы на http://www.visual6502.org/ Чуть больше гигабайта ;)

Bolt
27.05.2013, 01:14
А чего не крупнее и не все?
Вот, уже больше ;) http://yadi.sk/d/voZdoH0n5CSAU

Пока не придумал как это разгребать, да и по кассетному декодеру идеи ждут в очереди, так что пока перерыв.

Titus
27.05.2013, 01:25
Пока не придумал как это разгребать, да и по кассетному декодеру идеи ждут в очереди, так что пока перерыв.

А какой цвет означает что?

Bolt
27.05.2013, 09:08
синий - GND
красный - Vcc
зелёный - сигналы в верхней металлизации
фиолетовый - затворы транзисторов, проводники (полисиликон?)
голубой - истоки, стоки транзисторов, проводники (диффузия?)

Bolt
08.06.2013, 01:54
Обвёл все слои, срисовываю схему. Срисовал всю регистровую часть: регистры, запись-чтение, 16-битный инкремент-декремент, формирование адреса. Ну и другие модули немного. Кое-где есть "зависающие в воздухе" затворы при #CLK=0.

Как вы думаете, почему у регистра R инкрементируются только 7 бит, а старший не меняется? ;)

Titus
08.06.2013, 12:44
Обвёл все слои, срисовываю схему. Срисовал всю регистровую часть: регистры, запись-чтение, 16-битный инкремент-декремент, формирование адреса. Ну и другие модули немного. Кое-где есть "зависающие в воздухе" затворы при #CLK=0.

Как вы думаете, почему у регистра R инкрементируются только 7 бит, а старший не меняется? ;)

Даже представить не можем) Расскажите)
И выложите схему уж)

Bolt
08.06.2013, 14:04
Схема 16-битного инкремента-декремента имеет периодическую структуру по 2 разряда, в которую не вписывается только ускоренный перенос. Скорее всего регистр R находится в младших 8 битах, I - в старших, а инкремент происходит как обычно (как PC, например). От переноса из 6-го разряда в 7-й (если нумеровать с нуля) сделан отвод и за пределами всей схемы находится отдельный транзистор, который блокирует перенос. Видимо так удобно было, авторы не хотели нарушать структуру и тащить отдельный проводник для этого :)

Схему рисую на бумаге, а сфотографировать сейчас кроме мобильника с 0,3 мегапикселями больше ничего нет. Да и схемы ещё толком нет.

Bolt
09.06.2013, 18:58
http://yadi.sk/d/HjmP9afY5cxde
Далее читать там http://www.nedopc.org/forum/viewtopic.php?p=105290#105290
Комментировать можно и здесь.

Bolt
10.07.2013, 01:53
Это примерно 1/20 часть схемы на данный момент: http://yadi.sk/d/hHdabDM46f1UY
Описание что это такое: http://www.nedopc.org/forum/viewtopic.php?p=106306#106306

Осталось формирование флагов, управление АЛУ и всякие мелочи. Потом надо будет привести это всё в порядок и разобраться как оно работает.

Bolt
18.08.2013, 03:42
Команда (машинная инструкция) делится на М-циклы, каждый М-цикл делится на Т-такты.

Последовательность М-циклов для команд без префиксов:

0x: 1 123 123 1 1 1 12 1 1 123 123 1 1 1 12 1
1x: 12 123 123 1 1 1 12 1 12 123 123 1 1 1 12 1
2x: 12 123 12345 1 1 1 12 1 12 123 12345 1 1 1 12 1
3x: 12 123 1234 1 145 145 12 1 12 123 1234 1 1 1 12 1
4x: 1 1 1 1 1 1 14 1 1 1 1 1 1 1 14 1
5x: 1 1 1 1 1 1 14 1 1 1 1 1 1 1 14 1
6x: 1 1 1 1 1 1 14 1 1 1 1 1 1 1 14 1
7x: 14 14 14 14 14 14 14 14 1 1 1 1 1 1 14 1
8x: 1 1 1 1 1 1 14 1 1 1 1 1 1 1 14 1
9x: 1 1 1 1 1 1 14 1 1 1 1 1 1 1 14 1
Ax: 1 1 1 1 1 1 14 1 1 1 1 1 1 1 14 1
Bx: 1 1 1 1 1 1 14 1 1 1 1 1 1 1 14 1
Cx: 123 123 123 123 12345 123 12 1 123 123 123 1 12345 12345 12 1
Dx: 123 123 123 12 12345 123 12 1 123 1 123 12 12345 1 12 1
Ex: 123 123 123 12345 12345 123 12 1 123 1 123 1 12345 1 12 1
Fx: 123 123 123 1 12345 123 12 1 123 1 123 1 12345 1 12 1
Количество тактов в циклах будет позже.

Titus
18.08.2013, 12:01
Набросать бы принципиальную схему процессора. Или хотя бы блок-схему, соответствующую оригиналу.

Bolt
18.08.2013, 14:17
На уровне транзисторов схему оформлять по-моему вообще смысла нет. Транзисторные черновики у меня есть, но так как на кристалле нет чётких границ блоков, то и на схеме такой же "поток сознания".

На уровне логических элементов рисовать всё не буду, например, схему синхронизации #RESET толком разобрать не смог, выход нашёл - и ладно. Где можно я упрощаю, например, два элемента 2И-НЕ, подключённые к 2ИЛИ-НЕ, нарисую как 4И.

Блок-схема будет обязательно, как и разбор недокументированных особенностей вместе со всеми флагами и префиксами. Кстати, а как выполнится ldir с префиксом DD или FD? :)

Titus
18.08.2013, 15:00
Кстати, а как выполнится ldir с префиксом DD или FD? :)

ED )

SAM style
18.08.2013, 15:17
Кстати, а как выполнится ldir с префиксом DD или FD? :)На команды с префиксом ED индексные префиксы не действуют, всё равно операции будут идти с HL.

Bolt
18.08.2013, 15:24
Я имею в виду DD ED 80. Что будет источником, (HL) или (IX)?

---------- Post added at 15:24 ---------- Previous post was at 15:18 ----------


На команды с префиксом ED индексные префиксы не действуют, всё равно операции будут идти с HL.
Хм, надо будет заняться префиксами.

Titus
18.08.2013, 15:32
Я имею в виду DD ED 80. Что будет источником, (HL) или (IX)?

---------- Post added at 15:24 ---------- Previous post was at 15:18 ----------


Хм, надо будет заняться префиксами.

Человек выше ответил. HL.

Bolt
09.04.2014, 15:53
что есть в этом файле:
регистр текущей инструкции, декодер инструкций, группировка инструкций, прочая логика декодера
счётчик M-циклов и T-тактов (почти рабочий)
формирование сигналов управления блоком регистров: выбор регистров, управление буферами чтения-записи
ошибки :)

чего нет в этом файле:
формирования сигналов управления АЛУ, самого АЛУ, формирования флагов
внутренних шин, коммутаторов на шинах, управления коммутаторами
внешних шин (адреса, данных)
внешних сигналов управления (M1, REFRESH, IRQ, NMI...), блока обработки и формирования этих сигналов
прочей управляющей логики (условные переходы, обмен регистров, префиксы и т.п.)