Просмотр полной версии : Реверс-инжиниринг Z80
тоесть если T3=1 значит идет чтение/запись памяти?
Нет. Я же написал, что не каждый M-цикл читает-пишет память.
В таких циклах T3 может заниматься чем-то другим.
Нет. Я же написал, что не каждый M-цикл читает-пишет память.
В таких циклах T3 может заниматься чем-то другим.
в каких инструкциях T3 может быть без чтения/записи памяти?
Если у тебя активен LOAD_IR, значит идет загрузка регистра опкода.
сигнал интересный, но есть два момента:
1) LOAD_IR активен не только во время M1.T3.1. но и во время M1.T3.2.Что вобщемто не большая проблема, т.к. можно проверить сигналы /RD, /MREQ, /M1
2) когда идет чтение данных опкода, LOAD_IR не активируется:
https://i.imgur.com/DCTkWdh.png
в inc (ix+0) смещение 0 - это операнд опкода, но LOAD_IR не активен при чтении байта смещения... Насколько понимаю - это все-таки сигнал для обработки /RFSH, а не для выборки опкода.
Lethargeek
26.12.2024, 17:51
в inc (ix+0) смещение 0 - это часть опкода
с чего вдруг? обычный же операнд
с чего вдруг? обычный же операнд
этот операнд является частью инструкции.
С ld a,N та-же ситуация:
https://i.imgur.com/MRkkcXv.png
Lethargeek
26.12.2024, 18:01
этот операнд является частью инструкции
так опкода или всей инструкции? уж определись
так опкода или всей инструкции? уж определись
в данном контексте подразумевался вопрос - по каким сигналам узнать когда процессор читает операнды для опкода инструкции.
в каких инструкциях T3 может быть без чтения/записи памяти?
Это надо смотреть, я такую статистику не собирал.
Но думаю, что, например, ADD HL,dd.
- - - Добавлено - - -
2) когда идет чтение данных опкода, LOAD_IR не активируется
Я уже выше писал, как идет чтение опкода, ничего нового не добавлю)
- - - Добавлено - - -
в inc (ix+0) смещение 0 - это операнд опкода, но LOAD_IR не активен при чтении байта смещения... Насколько понимаю - это все-таки сигнал для обработки /RFSH, а не для выборки опкода.
Тоже не понял, в чем вопрос)
- - - Добавлено - - -
в данном контексте подразумевался вопрос - по каким сигналам узнать когда процессор читает операнды для опкода инструкции
У процессора нет такого специального разграничения, где непосредственные данные, например, LD A,n, а где адресуемые данные, например, LD A,(HL).
Просто блоку чтения данных подсовывается адрес, и он читает. В первом случае подсовывается PC, во втором случае HL.
У процессора нет такого специального разграничения, где непосредственные данные, например, LD A,n, а где адресуемые данные, например, LD A,(HL).
Просто блоку чтения данных подсовывается адрес, и он читает. В первом случае подсовывается PC, во втором случае HL.
понятно что процессору всеравно что читать, но для удобства отладки хотелось бы видеть именно моменты чтения операндов.
понятно что процессору всеравно что читать, но для удобства отладки хотелось бы видеть именно моменты чтения операндов.
Для разных типов команд чтение устроено тоже по-разному.
Процессор похож на некий такой монстроидальный конструкт из if'ов, в отличие от процессоров на основе микрокода.
Из-за чего он сложно поддается анализу кусками. Вернее, не видя всю конструкцию целиком, практически невозможно сказать, как в точности он работает.
По наблюдению извне за сигналами тоже этого не скажешь, т.к. таким образом видны последствия, но не видны причины.
Я потратил где-то месяца 3, чтобы составить для себя глобальную картину, как это все работает.
Да и вообще, я пока не очень вижу необходимости отлаживать процессор потактово. Эмулировать потактово - да. Но отлаживать нет.
Я извиняюсь, а чем собственно закончился реверс ? Результат где самый актуальный посмотреть ?
Я извиняюсь, а чем собственно закончился реверс ? Результат где самый актуальный посмотреть ?
Базовый реверс был весь выложен:
1. Полный потранзисторный реверс.
2. Полный реверс в виде логических элементов с сохранением оригинального асинхронного дизайна (правда, там было несколько помарок).
Далее я стал уже для себя писать логический синхронный дизайн, попутно переводя его на Verilog, чтобы проверять, как это работает. Написал некоторую часть и поставил на паузу, занялся эмуляторами.
Полный реверс в виде логических элементов с сохранением оригинального асинхронного дизайна (правда, там было несколько помарок).
а где схему в виде логических элементов можно качнуть?
а где схему в виде логических элементов можно качнуть?
Тут. Но она не финальная и имеет недочеты в области регистрового файла. Там надо было разделить половинки регистров, а я этого не сделал.
В остальном должна полностью совпадать.
- - - Добавлено - - -
Я ее рассматриваю как некую абстракцию перехода от точной транзисторной схемы к точной логической, но синхронной.
Т.е. это вспомогательный этап.
Тут. Но она не финальная и имеет недочеты в области регистрового файла. Там надо было разделить половинки регистров, а я этого не сделал.
В остальном должна полностью совпадать.
а в ascii sch можно? Бинарный проблемно импортировать
а в ascii sch можно? Бинарный проблемно импортировать
Можно.
Я ожидал схему в виде логических элементов, а тут набор блоков - черных ящиков. Нет ли схемы в виде классической логики?
https://i.imgur.com/n6qSne1.png
PS: файл почему-то плохо сконвертился - выводы отстоят от элементов, это и в оригинале так?
Я ожидал схему в виде логических элементов, а тут набор блоков - черных ящиков. Нет ли схемы в виде классической логики?
Схема выглядит нормально, в виде стандартной логики:
https://pic.maxiol.com/images2/1745661664.1595416127.clipboard042620250.png
Достань себе уже нормальный PC-совместимый комп, или сделай нормальный конвертер на своем линуксе и не мучай людей и себя.
можно попросить еще скопировать фрагмент схемы с парой элементов из этой схемы (с сохранением имени элемента), вставить в отдельный pcad файл (чтобы в нем ничего лишнего не было), сохранить в ascii sch и приложить картинку как это выглядит в pcad. Чтобы можно было понять как элемент должен выглядеть для исправления конвертера?
можно попросить еще скопировать фрагмент схемы с парой элементов из этой схемы (с сохранением имени элемента), вставить в отдельный pcad файл (чтобы в нем ничего лишнего не было), сохранить в ascii sch и приложить картинку как это выглядит в pcad. Чтобы можно было понять как элемент должен выглядеть для исправления конвертера?
https://pic.maxiol.com/images2/1745692601.1595416127.clipboard042620250.png
вот что у меня получается:
https://i.imgur.com/pRSdCM6.png
а как должно быть - можно скриншот?
а как должно быть - можно скриншот?
Скриншот прикреплен в предыдущем сообщении же.
у конвертора уже практически всё ок,
осталось только пины элементов выправить:
https://i.ibb.co/mCbfdMkf/sch.png
вот что у меня получается:
https://i.imgur.com/pRSdCM6.png
а как должно быть - можно скриншот?
да, проблема была в библиотечных символах. Добавил тектовые элементы в библиотечные символы. А вот с пинами непонятка, конвертер ожидает аттрибут pinLength, а его нет. поэтому они в ноль и скукожились. Не совсем понятно где pcad берет длину пинов, если она явно не задана. Я длину пинов в файле не вижу. Пока на этот случай захардкодил длину 7.62, если не указана явно. Не уверен, что это корректный способ, но для файла работает, Comparator идеально рисуется:
https://i.imgur.com/Mjg1iYb.png
А вот на оригинальной схеме есть кое какие косяки: https://i.imgur.com/abSdBpI.png
Похоже часть схемы к которой идут провода влево поверх элементов, видимо в оригинале расположена где-то справа? Возможно какая-то ошибка с переполнением при трансляции координат.
Подскажите, я правильно понимаю, что вот эта часть схемы, которая слева от границ листа и к которой тянутся провода через всю схему - она вся в оригинале на pcad расположена справа от остальной схемы?
https://i.imgur.com/JHOQrX4.png
Подскажите, я правильно понимаю, что вот эта часть схемы, которая слева от границ листа и к которой тянутся провода через всю схему - она вся в оригинале на pcad расположена справа от остальной схемы?
https://pic.maxiol.com/images2/1745741325.1595416127.clipboard042720250.png
Скриншоты размещаю на maxiol, т.к. это рекомендованный сервер для нашего форума.
https://pic.maxiol.com/images2/1745741325.1595416127.clipboard042720250.png
Скриншоты размещаю на maxiol, т.к. это рекомендованный сервер для нашего форума.
Речь про этот список?
Список фото-хостингов, одобренных к использованию на данном форуме
Maxiol - https://pic.maxiol.com/
Imageban - http://imageban.ru/
Lostpic - http://lostpic.net/
VFL - http://vfl.ru/
Imgur - https://imgur.com/
К сожалению pic.maxiol.com имеет ограниченный доступ и не всем доступен и даже через VPN не открываются. Твои картинки просто не видны, нет даже placeholder, как будто ты и не вставлял картинку. Вот я отвечаю на твоё сообщение и только сейчас (в редакторе) увидел в виде текста что ты приложил какую-то картинку, но в сообщении её нет.
А вот imgur.com из того-же списка одобренных к использованию на данном форуме работает везде.
Не хотел акцентировать на этом внимание, чтобы и этот хостинг не прикрыли, но раз уж зашел за это разговор, то вот так:
https://i.imgur.com/04rO8JQ.png
- - - Добавлено - - -
проблема с конвертацией pcad похоже из-за переполнения 32-разрядного int для хранения координат. Попробовал заменить на 64-разрядный, вроде проблема с переворачиванием части схемы исчезла, но появилось наложение некоторых частей схемы (https://i.imgur.com/e21lazT.png). Видимо где-то чтото не учтено.
после замены на 64-биные переменные, возникло подозрение на ошибки в трансляции координат, попробовал заменить на грязный трюк с преобразованием через плавающую точку и вроде бы вся схема похоже стала выглядеть ок:
https://i.imgur.com/bvLNsoH.png
видимо оставшаяся проблема где-то в функции трансляции координат. Нужно будет её внимательно пересмотреть.
проблема с конвертацией pcad похоже из-за переполнения 32-разрядного int для хранения координат. Попробовал заменить на 64-разрядный, вроде проблема с переворачиванием части схемы исчезла, но появилось наложение некоторых частей схемы. Видимо где-то чтото не учтено.
Не исключено, что символьный формат вообще чего-то не сохраняет важное.
Так что придется тебе сделать конвертер из бинарного базового формата)
Не исключено, что символьный формат вообще чего-то не сохраняет важное.
Так что придется тебе сделать конвертер из бинарного базового формата)
да вроде все видно, заметил только пропавший символ инверсии на пинах, нужно будет посмотреть что там творится, а так вроде вся схема выглядит корректно.
А что за картинку ты выше выкладывал, там общий вид схемы? можешь на imgur залить? у меня не получается её даже через разные vpn посмотреть.
А что за картинку ты выше выкладывал, там общий вид схемы? можешь на imgur залить? у меня не получается её даже через разные vpn посмотреть.
https://i.imgur.com/BCeaKA2.png
просьба проверить, на примере фрагмента схемы в левом верхнем углу - правильно ли сконвертилось, в особенности интересует - правильно ли помечен вход C триггера U103:
https://i.imgur.com/D72rNgU.png
правильно ли помечен вход C триггера U103:
Правильно.
У тебя еще нет пунктирной линии, которой рисуются вертикальные линии диаграммы справа. У тебя все сплошными линиями, а должно быть разными.
У тебя еще нет пунктирной линии, которой рисуются вертикальные линии диаграммы справа. У тебя все сплошными линиями, а должно быть разными.
можешь скопировать примеры этих пунктирных линий в отдельный файл и как они выглядят, чтобы там лишнего не было?
В полном файле сложно найти где эти линии.
Еще вопрос - у тебя в файле текстовый стиль "(Default)" использует такие параметры:
(textStyleDef "(Default)"
(font
(fontType Stroke)
(fontFamily SanSerif)
(fontFace "QUALITY")
(fontHeight 100.0)
(strokeWidth 10.0)
)
(textStyleAllowTType False)
(textStyleDisplayTType False)
)
Не совсем понимаю как это название и размеры транслировать kicad, это что за шрифт, "Microsoft Sans Serif"?
100 - это в каких единицах? Какой у этого стиля размер фонта в Mils (или в мм)?
Не совсем понимаю как это название и размеры транслировать kicad, это что за шрифт, "Microsoft Sans Serif"?
100 - это в каких единицах? Какой у этого стиля размер фонта в Mils (или в мм)?
Я не понимаю, как тебе ответить)
Скажи, какой кусок схемы тебе прислать в виде картинки, и ты сам определишь)
Я не понимаю, как тебе ответить)
Скажи, какой кусок схемы тебе прислать в виде картинки, и ты сам определишь)
вставь текст "D0" со стилем текста "(Default)" и нарисуй рядом с буковой D вертикальную линию, чтобы её длина четко совпадала с высотой буквы. Напиши - какая получилась длина линии?
вставь текст "D0" со стилем текста "(Default)" и нарисуй рядом с буковой D вертикальную линию, чтобы её длина четко совпадала с высотой буквы. Напиши - какая получилась длина линии?
https://pic.maxiol.com/images2/1745859741.1595416127.clipboard042820250.png
Длина линии 85.5.
https://pic.maxiol.com/images2/1745859741.1595416127.clipboard042820250.png
Длина линии 85.5.
с размером вроде как-то понятно - нужно корректировать fontHeight примерно * 2.0 / 3.0, похоже PCAD размер шрифта с учетом отступов меряет.
Интересно, а что-же это за шрифт? Нашел Microsoft Sans Serif, но у него 0 без косой линии. В шрифте Consolas такой 0, но этот шрифт не так выглядит. У меня в системе такого шрифта нет, но мне нравится, я тоже такой хочу. Это какой-то проприетарный, как он называется? Можешь как-то в свойствах шрифта посмотреть его название/файл?
Подправил размеры шрифтов, в целом вроде-бы выглядит правильно, как у тебя на превью:
https://i.imgur.com/HTWO56o.png
https://i.imgur.com/4seMRL7.png
Осталось только пунктирные линии пофиксить. Можешь скопировать пунктирную линию в отдельный файл и как она выглядит? а то не знаю как найти элемент который её рисует в большом файле.
Осталось только пунктирные линии пофиксить. Можешь скопировать пунктирную линию в отдельный файл и как она выглядит? а то не знаю как найти элемент который её рисует в большом файле.
https://pic.maxiol.com/images2/1745869470.2870374989.clipboard042820250.png
- - - Добавлено - - -
Интересно, а что-же это за шрифт? Нашел Microsoft Sans Serif, но у него 0 без косой линии. В шрифте Consolas такой 0, но этот шрифт не так выглядит. У меня в системе такого шрифта нет, но мне нравится, я тоже такой хочу. Это какой-то проприетарный, как он называется? Можешь как-то в свойствах шрифта посмотреть его название/файл?
Вот что про этот шрифт думает чат ГПТ:
В P-CAD 2006 шрифт по умолчанию для текстовых объектов (например, надписей на плате или схеме) — это Stroke Font, также известный как Default или просто шрифтовой тип "Stroke".
Подробнее:
Этот шрифт векторный (состоящий из линий), а не TrueType.
Он встроен в сам P-CAD и не зависит от шрифтов операционной системы.
Названия вроде "Default", "Stroke", или просто отсутствие выбора шрифта в настройках — это всё про него.
Stroke Font хорошо масштабируется при печати и выводе в Gerber-файлы.
Итог:
→ Stroke-шрифт P-CAD 2006 — это технический чертёжный шрифт.
→ Самый близкий в Windows — Lucida Console или Courier New.
подумалось, может ResourceGrabber-ом каким-то пошариться по dll-кам пикада, вдруг встретится секция со шрифтом.
допилил конвертер, теперь вроде все работает :)
https://i.imgur.com/Be3L65B.png
У кого есть pcad и kicad, просьба сравнить - все ли правильно отображается, в архивах исходный pcad sch и сконверченные из него kicad_sch:
https://transfiles.ru/3jdmo
допилил конвертер, теперь вроде все работает
Ты прикрепляешь слишком мелкую картинку, по ней сложно определить, все нормально или нет)
вот в большем разрешении:
https://i.imgur.com/4zbM7Ne.png
https://i.imgur.com/Uv0twQy.png
https://i.imgur.com/5KdRJzE.png
вот в большем разрешении:
это не очень большое разрешение, но в целом выглядит правдоподобно.
Что будешь делать на основе этой схемы? )
у меня больше 5120x4096 комп не тянет. Вернее тянет 7680x6144, но при попытке запустить kicad в таком разрешении он падает.
Что делать: для справки использовать, когда надо посмотреть детали как чтото реализовано. Правда искать нужный узел не просто.
Непросто, т.к. тут нет микрокода, и надо анализировать всю схему целиком.
1) Малость оффтоп:
Verilog Z80 от nukeykt (то что используют для эмуляции MIST ) не умеет (???) делать не активными сигналы управления (RD, WR, MREQ итд) в момент сброса (наличие сигнала nRST). другими словами: принудительно не переводит в лог '1 или 'Z.
2) Собственно : а как это в реалиях в "этой (вашей) модели" ?
3) что есть "динамический D-триггер" в схеме ?
4) где можно по быстрому посмотреть значения принятых УГО на схеме ? (тк разные источники временами по разному трактуют оные). Ну или опишите своими словами что значат "ромбики / треугольники и др символы" ? То как вы это понимаете... (как вариант в самой схеме отрисовать в виде таблички)
3) что есть "динамический D-триггер" в схеме ?
Динамический - это означает, что при отсутствии тактирования его состояние испортится. Ему нужна регенерация.
- - - Добавлено - - -
4) где можно по быстрому посмотреть значения принятых УГО на схеме ? (тк разные источники временами по разному трактуют оные). Ну или опишите своими словами что значат "ромбики / треугольники и др символы" ? То как вы это понимаете... (как вариант в самой схеме отрисовать в виде таблички)
Это очень долго будет. Лучше спроси конкретно, какие значки непонятны.
- - - Добавлено - - -
1) Малость оффтоп:
Verilog Z80 от nukeykt (то что используют для эмуляции MIST ) не умеет (???) делать не активными сигналы управления (RD, WR, MREQ итд) в момент сброса (наличие сигнала nRST). другими словами: принудительно не переводит в лог '1 или 'Z.
2) Собственно : а как это в реалиях в "этой (вашей) модели" ?
У меня есть отдельная линия, которая сообщает, что MREQ, IORQ, RD, WR в Z-состоянии.
У меня есть отдельная линия, которая сообщает, что MREQ, IORQ, RD, WR в Z-состоянии.
интересно, а где эта линия, какой транзистор за неё отвечает?
интересно, а где эта линия, какой транзистор за неё отвечает?
Alex_G спрашивал про Verilog-версию, а не про реальную схему, на сколько я понял.
U179 - это открытый коллектор ?
U178 - А это кто по выходу ?
U231 чем отличается от обычного инвертора ?
U57 - это синхронный RS-тригер?
PORT_RESET это D- триггер с инверсным клоком ? (в смысле по спаду ?)
U653 - С виду RS триггер. А что значит "can be tri-state" ?
U19 - это полностью синхронный триггер как дла D так и для R входа ?
или R - асинхронный ?
U614 такой же как и U19? за исключением тактовой ?
"bi-directional?" BUF_DBUS_LBUS - УГО двунаправленный, а сигнал управления только "ОЕ" .... ? таких как минимум парочка элементов
пс: как в пикаде "быстро пробежаться по всем цепям" аля "альт-ф7"
PLA95 "HALT" (не самый лучший пример) как найти по схеме куда идёт ? или откуда начинается тот или иной сигнал ?
- - - Добавлено - - -
Alex_G спрашивал про Verilog-версию, а не про реальную схему, на сколько я понял.
Ну я как бы интересовался и той и другой схемой (пкад + verilog)...
спрашивал про Verilog-версию, а не про реальную схему, на сколько я понял.
а я про реверс. На схеме у тебя это U54? Но насколько понимаю выход с U178 не зависит от него...
И какому транзистору это соответствует. Участок с U178 и U179 вроде нашел, для IORQ это похоже T2580, но чего-то похожего на U54 не нахожу.
U179 - это открытый коллектор ?
U178 - А это кто по выходу ?
Открытый эмиттер, и открытый коллектор.
U179 коммутирует только по плюсу питания.
U178 коммутирует только по земле.
- - - Добавлено - - -
U231 чем отличается от обычного инвертора ?
Мощностью, нагрузочной способностью.
- - - Добавлено - - -
U57 - это синхронный RS-тригер?
Да
- - - Добавлено - - -
PORT_RESET это D- триггер с инверсным клоком ? (в смысле по спаду ?)
Нет, это по фронту.
По спаду, это когда треугольничек растет слева направо.
- - - Добавлено - - -
U653 - С виду RS триггер. А что значит "can be tri-state" ?
Это означает, что может находиться в трехстабильном состоянии, т.к. может быть ситуация, когда и R и S будут активны.
Под триггерами, у которых такая ситуация невозможно, я ничего не писал.
- - - Добавлено - - -
U19 - это полностью синхронный триггер как дла D так и для R входа ?
Нет, это обычный, где R не зависит от C, т.к. R находится в отдельном поле.
- - - Добавлено - - -
U614 такой же как и U19? за исключением тактовой ?
А вот это полностью синхронный, т.к. R не находится в отдельном поле. Тактируется по фронту.
- - - Добавлено - - -
"bi-directional?" BUF_DBUS_LBUS - УГО двунаправленный, а сигнал управления только "ОЕ" .... ? таких как минимум парочка элементов
OE - для универсальности написал. А так это двунаправленные, да. Фактически просто ключ (мост) между двумя шинами.
- - - Добавлено - - -
пс: как в пикаде "быстро пробежаться по всем цепям" аля "альт-ф7"
PLA95 "HALT" (не самый лучший пример) как найти по схеме куда идёт ? или откуда начинается тот или иной сигнал ?
Я просто подсвечиваю нужную линию 'Highlight Net' в контекстом меню. И смотрю.
- - - Добавлено - - -
Ну я как бы интересовался и той и другой схемой (пкад + verilog)...
Verilog - это уже мое творчество, там идут значительные отличия от оригинала, т.к. переход на синхронность и т.д. Но с полным сохранением всех растактовок и совместимости.
Переход на другой уровень абстракции с полной совместимостью.
- - - Добавлено - - -
а я про реверс. На схеме у тебя это U54? Но насколько понимаю выход с U178 не зависит от него...
И какому транзистору это соответствует. Участок с U178 и U179 вроде нашел, для IORQ это похоже T2580, но чего-то похожего на U54 не нахожу.
Выход U54 даже подписан BUSACK_C.
И на транзисторной схеме также подписан.
- - - Добавлено - - -
https://pic.maxiol.com/images2/1746210504.1595416127.clipboard050220250.png
подписи проводов конвертер не перенес, в kicad вроде нет такой возможности провода подписывать.
хм, а как выход U54 отключает выходы U178?
хм, а как выход U54 отключает выходы U178?
Никак)
На входы U178 подаются логические 1, таким образом выходы U178 отключаются, т.к. это открытый коллектор.
Ну а U179 чтобы отключить как раз и используется BUSACK_C.
из `свежих` новостей
"Some Z80 chips react differently to a out-of-spec INT signal that does not respect the setup time.
A description of this appears in the ULA book, pg.227-228.
If the previous instruction is just an opcode fetch (OCF) cycle,
these Z80 chips will accept an INT signal that was asserted later than the usual sampling time (rising CLK of OCF-T4).
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot