Просмотр полной версии : ВременнЫе диаграммы и другие вопросы по Z80
Здравствуйте.
Решил "собрать" (то есть в ПЛИС и/или написать эмулятор) простой процессор, сначала повторить реальный, потом попробовать разработать что-то своё. Для начала выбрал Z80, потому что я его достаточно хорошо знаю, следующим будет наверное 80386. Для опытов на реальном железе (недокументированные команды и прочее) будет собрана минимальная плата с Z80, FLASH и SRAM. Два Z80 разных производителей уже купил, может будут ещё. Один есть впаянный на старой плате АОН, выпаивать пока не хочу, хотя оборудование есть.
В процессе проектирования платы для экспериментов возник вопрос по временнЫм диаграммам работы Z80. В документации, которую удалось найти в интернете, они нарисованы не совсем понятно. Может кто-нибудь снять двухлучевым осциллографом осциллограммы на реальном процессоре? Интересуют A(любой), #RD, #WR, #MREQ, все относительно CLK. Ещё можно D(любой) относительно #MREQ.
Ну и ещё есть другие вопросы. Например, существуют ли тесты для процессора/эмулятора, чтобы проверить арифметические операции, условия, недокументированные команды и т.п.? Есть ли хороший консольный ассемблер, желательно под Linux? (сам пока ещё не искал, даже не знаю что сейчас есть) С командами вращения тоже какая-то путаница, про неё расскажу отдельно, с картинками :)
1. Есть куча эмуляторов которые не документированые возможности эмитируются
2. Чем диаграммы не понятны? Там все правильно, из диаграмм тяжело разве что с первого раза въехать в цикл подтверждения прерываний
Эмули с исходниками: unreal speccy, zxmak2
И да, Z80 в HDL уже есть если что, 4 варианта если не ошибаюсь
Это вам понятно, а мне ещё нет. Именно поэтому и интересует в первую очередь реальное железо, а не эмуляторы, пусть даже идеально имитирующие какое-то железо.
О диаграммах. Например, адрес на шине устанавливается по фронту или спаду тактового импульса? Или это у разных производителей по-разному? Сколько нс реальные задержки между сигналами? Данные при чтении в какой момент защёлкиваются? В отсканированных даташитах на Z80 тоже встречаются ошибки, поэтому я им не особо доверяю.
Сколько нс реальные задержки между сигналами?
Да какая разница сколько нс, всеравно в FPGA эти нс точно такие не поставишь
Например, адрес на шине устанавливается по фронту или спаду тактового импульса?
без понятия, даташит на память не помню, но там нарисовано
пусть даже идеально имитирующие какое-то железо.
и этого результата добивались очень долго, много народа эксперементировало, делало предположение и опять эксперементировало, в итоге много было потрачено человекомесяцев, разумней уже накопленным опытом воспользоваться чем самому чип колоть
Данные при чтении в какой момент защёлкиваются?
опять же в даташите четко нарисовано когда, но помню что в отличии от адреса который был всегда к одному фронту привязан с данными веселей, они как к переднему так и к заднему фронту привязаны в зависимости от машинного цикла
ZEK, для Вас это может пройденный этап, интерес угас и уже всё забылось, но я буду "колоть чип". Пока, чтобы не переделывать потом плату, меня интересуют диаграммы с реального железа. Любого. Которого у меня пока нет. Некоторые вещи я не могу понять и даташит в понимании пока не помогает. Не будет осциллограмм - ну, значит попробую наугад, потом буду переделывать. Но отговорить меня не получится ;)
Я не отговариваю, я "информирую" :)
уже много чего люди раскопали и есть куда смотреть, а колоть там ну там очень много.
Допустим что бы разобраться с логикой скрытого регистра, в каких операциях он используется это достаточно сложно и очень много тестов разных надо делать, причем софтовых
Я достаточно информирован о объёме работ, спасибо за заботу :)
Ещё вопрос: кто-нибудь коротко может объяснить что происходит с 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 вообще слабо поддающаяся логике вакханалия).
при LDI вообще слабо поддающаяся логике вакханалия).
Во-от. Её в том числе и буду изучать.
SAM style
15.04.2013, 19:29
Во-от. Её в том числе и буду изучать.
Нет, что в результате LDI получается в 3 и 5 битах - известно. Непонятно, почему так. Берётся перенесённый байт, складывается с регистром A, 3й бит результата сложения - в 3й бит флагов, 1й бит - в 5й.
В CPI/CPD ситуация ещё хуже.
Непонятно, почему так.
"А вот это вам и расскажет новая учительница." (Ничего личного, просто этот анекдот только что попался :) )
Мне вот, кажется, понятно. Надо только составить полную картину и проверить на разных кристаллах, чем и собираюсь заняться.
Есть ещё какие неисследованные особенности? Может набросаете, а я выберу чем из этого заняться в первую очередь.
Вы хотите сказать что всё недокументированное, даже уже описанное, недоисследовано? :)
Подключил, посмотрел. Буду заказывать печатную плату для опытов.
АЛУ Z80 и часть внутренней шины данных
http://yadi.sk/d/KFj2mpWo594Xy
АЛУ Z80 и часть внутренней шины данных
http://yadi.sk/d/KFj2mpWo594Xy
А чего не крупнее и не все?
Крупнее? Там на странице предварительный просмотр, а сам файл примерно 1700 x 1400 px. Крупнее не будет, я с таким работаю. Файл со всеми слоями получается около 200 мегабайт.
Ну так это круто) И надо оригинал в 200мб)
Оригиналы на http://www.visual6502.org/ Чуть больше гигабайта ;)
А чего не крупнее и не все?
Вот, уже больше ;) http://yadi.sk/d/voZdoH0n5CSAU
Пока не придумал как это разгребать, да и по кассетному декодеру идеи ждут в очереди, так что пока перерыв.
Пока не придумал как это разгребать, да и по кассетному декодеру идеи ждут в очереди, так что пока перерыв.
А какой цвет означает что?
синий - GND
красный - Vcc
зелёный - сигналы в верхней металлизации
фиолетовый - затворы транзисторов, проводники (полисиликон?)
голубой - истоки, стоки транзисторов, проводники (диффузия?)
Обвёл все слои, срисовываю схему. Срисовал всю регистровую часть: регистры, запись-чтение, 16-битный инкремент-декремент, формирование адреса. Ну и другие модули немного. Кое-где есть "зависающие в воздухе" затворы при #CLK=0.
Как вы думаете, почему у регистра R инкрементируются только 7 бит, а старший не меняется? ;)
Обвёл все слои, срисовываю схему. Срисовал всю регистровую часть: регистры, запись-чтение, 16-битный инкремент-декремент, формирование адреса. Ну и другие модули немного. Кое-где есть "зависающие в воздухе" затворы при #CLK=0.
Как вы думаете, почему у регистра R инкрементируются только 7 бит, а старший не меняется? ;)
Даже представить не можем) Расскажите)
И выложите схему уж)
Схема 16-битного инкремента-декремента имеет периодическую структуру по 2 разряда, в которую не вписывается только ускоренный перенос. Скорее всего регистр R находится в младших 8 битах, I - в старших, а инкремент происходит как обычно (как PC, например). От переноса из 6-го разряда в 7-й (если нумеровать с нуля) сделан отвод и за пределами всей схемы находится отдельный транзистор, который блокирует перенос. Видимо так удобно было, авторы не хотели нарушать структуру и тащить отдельный проводник для этого :)
Схему рисую на бумаге, а сфотографировать сейчас кроме мобильника с 0,3 мегапикселями больше ничего нет. Да и схемы ещё толком нет.
http://yadi.sk/d/HjmP9afY5cxde
Далее читать там http://www.nedopc.org/forum/viewtopic.php?p=105290#105290
Комментировать можно и здесь.
Это примерно 1/20 часть схемы на данный момент: http://yadi.sk/d/hHdabDM46f1UY
Описание что это такое: http://www.nedopc.org/forum/viewtopic.php?p=106306#106306
Осталось формирование флагов, управление АЛУ и всякие мелочи. Потом надо будет привести это всё в порядок и разобраться как оно работает.
Команда (машинная инструкция) делится на М-циклы, каждый М-цикл делится на Т-такты.
Последовательность М-циклов для команд без префиксов:
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
Количество тактов в циклах будет позже.
Набросать бы принципиальную схему процессора. Или хотя бы блок-схему, соответствующую оригиналу.
На уровне транзисторов схему оформлять по-моему вообще смысла нет. Транзисторные черновики у меня есть, но так как на кристалле нет чётких границ блоков, то и на схеме такой же "поток сознания".
На уровне логических элементов рисовать всё не буду, например, схему синхронизации #RESET толком разобрать не смог, выход нашёл - и ладно. Где можно я упрощаю, например, два элемента 2И-НЕ, подключённые к 2ИЛИ-НЕ, нарисую как 4И.
Блок-схема будет обязательно, как и разбор недокументированных особенностей вместе со всеми флагами и префиксами. Кстати, а как выполнится ldir с префиксом DD или FD? :)
Кстати, а как выполнится ldir с префиксом DD или FD? :)
ED )
SAM style
18.08.2013, 15:17
Кстати, а как выполнится ldir с префиксом DD или FD? :)На команды с префиксом ED индексные префиксы не действуют, всё равно операции будут идти с HL.
Я имею в виду DD ED 80. Что будет источником, (HL) или (IX)?
---------- Post added at 15:24 ---------- Previous post was at 15:18 ----------
На команды с префиксом ED индексные префиксы не действуют, всё равно операции будут идти с HL.
Хм, надо будет заняться префиксами.
Я имею в виду DD ED 80. Что будет источником, (HL) или (IX)?
---------- Post added at 15:24 ---------- Previous post was at 15:18 ----------
Хм, надо будет заняться префиксами.
Человек выше ответил. HL.
что есть в этом файле:
регистр текущей инструкции, декодер инструкций, группировка инструкций, прочая логика декодера
счётчик M-циклов и T-тактов (почти рабочий)
формирование сигналов управления блоком регистров: выбор регистров, управление буферами чтения-записи
ошибки :)
чего нет в этом файле:
формирования сигналов управления АЛУ, самого АЛУ, формирования флагов
внутренних шин, коммутаторов на шинах, управления коммутаторами
внешних шин (адреса, данных)
внешних сигналов управления (M1, REFRESH, IRQ, NMI...), блока обработки и формирования этих сигналов
прочей управляющей логики (условные переходы, обмен регистров, префиксы и т.п.)
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot