You are here
Декомпилятор микрокода К145ИК13
сб, 07/08/2021 - 18:37 - KPG
Который использовался для ПМК МК-61 и других подобных ПМК. Оптимизация ещё не доделана поэтому много мусора. Но код работает, так же требуется ручная оптимизация. Теперь эмулятор в 100 раз быстрей, можно сделать аппаратный эмулятор на слабом МК.
Forums:
Логично
Неплохая работа. Сразу подняла уровень еггогологии. Зачем таскать эмулятор, если можно перевести микрокод в Си?
Со временем, возможно, получится оптимизировать код ПМК и привести к виду, читабельному человеком. Ну и вопрос, будет ли МК61S переходить на этот новый уровень.
Непонятно, как таки декомпилятор помог (+)
оптимизировать?
Оптимизатор
«Декомпилятор» переводит микрокод в программу на Си. Он не эмулирует железо и возню с битами микрокоманд, а работает с 4-битными сущностями:
Грубо говоря, считывание, разбор и интерпретация микрокоманд осуществляется один раз на этапе «декомпиляции», а не во время каждого исполнения. Есть ещё небольшая, но перспективная оптимизация получившегося кода на Си.
А, теперь понятнее. Интересно, (+)
а тесты какие-то написаны, сравнить результаты "декомпилятора" и "классического" эмулятора?
Если отличия есть, то ценность первого для меня лично стремительно упадёт
Должны совпадать
Отличий не должно быть. Ведь за основу ВЭ (Высокоуровневого Эмулятора) берётся тот же самый микрокод. Точнее, если отличия будут обнаружены, это существенно обогатит наше знание ПМК.
Конечно, хорошо бы все тесты автоматизировать. Это позволит проверять корректность оптимизации.
Как говорится, вот когда ... тогда и приходите (с)
Ну, было бы интересно посмотреть хотя бы на РС эмуляторе разницу в скорости работы. Пока что есть моменты, которые настораживают. Навскидку:
1. Автор упоминает линию акустической задержки в оригинальном железе. WAT?
2. Исходник с расширением .cpp, хотя внутри просто Си
3. Имена переменных содержат русские буквы - как минимум, код сразу не собирается без напильника.
4. Кто-то в чате задался вопросом, который возник у меня тоже:
Компиляция декомпилятора
1. Без комментариев.
2. Это не проблема. Си это подмножество C++. Код, скорее всего, предназначен для gcc.
3. Компилировать декомпилятор не пробовал. Просмотрел глазами код ещё раз, переменные названы на английском.
4. Вопрос от незнания. Странно, что он здесь возник.
Микрокод ИК13 небольшого размера, но сложен для восприятия. На данный момент нет живых людей, его изучивших. Авторы микрокода умерли. Вместе с тем понимание, что он делает, у владельцев ПМК есть. Можно сравнивать поведение ВЭ хоть с советскими ПМК, хоть с эмулятором.
Двойной работы тут нет. Наоборот, декомпилятор позволяет создать большой «сырой» код ВЭ, упрощая который можно разобраться, как работает микрокод.
Компиляция
1. Я тоже не знаю, о чем это, возможно, автор так проиллюстрировал кольцевую шину.
2. Не проблема, естественно, я просто собрал для кучи
3. А я пробовал. В имени некоторых переменных не Ascii символы - типа вместо getSumA написано getSumА, где А - русская буква. Это признак того, что автор, как минимум, не проверил, что он "вывалил" в мир.
В общем, если у кого есть желание и время изучать это, добро пожаловать, я не проникся.
Цель декомпилятора
Вопрос ещё, что на выходе декомпилятора — работающая программа на Си или псевдокод. Я как-то некритично воспринял заявление автора «Теперь эмулятор в 100 раз быстрей, можно сделать аппаратный эмулятор на слабом МК.» Скорее всего, заявление «код работает» относится к самому декомпилятору, а не результату его работы.
Пока это всё не выглядит, как работающий проект. Если же английские буквы подменяют русскими, это не обязательно злонамеренность. Например, эмулятор на JavaScript в верхнем правом уголке этого сайта использует русские идентификаторы.
Само направление перспективное. Если у кого заработает транслированный микрокод, это действительно снизит требования для камня, на котором можно эмулировать советские ПМК.
Скомпилировал и сгенерил
Я собрал это чудо инженерной мысли. Оно производит Си файл размером 739 Кбайт на 49050 строк кода (отдельный привет тем, кто будет это впихивать в микроконтроллеры). Зип файл Си файла тут:
P.S. Си файл, на самом деле, Си Плюс Плюс - функции в сгенерированном файле принадлежат своим классам.
Чудо инженерной мысли
49к строк это же максимум, начальный размер. Главное, чтобы это чудо откомпилировалось и заработало. Дальше пойдёт оптимизация и выкидывание мусора. Например, 22 строки из начала:
легко оптимизируются в 4 строчки:
С такой плотностью кода весь ВЭ сожмётся в меньше, чем 9к строк. Спасибо за зип!
Не за что!
Не за что! Удачи в дальнейшем исследовании, было бы интересно сравнить с "классическим" эмулятором
Всем привет!
Всем привет!
Я автор этого декомпилятора. Сейчас работаю над улучшением декомпилятора и эмулятора. Основа кода взята тут mk-61.moy.su. Код эмулятора и улучшенного декомпилятора выложу позже.
Добро пожаловать
Здравствуйте ещё раз. Это ваш эмулятор работает на этом сайте?
Моё почтение за декомпилятор. Это востребованный и давно назревший проект. Мало кто обладает опытом, достаточным для его осуществления. Мы все с нетерпением ждём эмулятора на её основе. Если поможет, можете использовать Вики по ПМК для структурирования информации по ИК13 и микрокоду ПМК:
https://pmk.the-hacker.ru/ИК13
Обсуждение декомпилятора ИК13
Обсуждение декомпилятора микрокода на КЛК, с примерами:
http://www.leningrad.su/calc/cforum.php?topicid=2446
Размер кода
Как 80 КБ кода под CISC процессор влезут 64 КБ памяти RISC процессоров?
Ассемблер?
Если декомпилировать в псевдокод, оптимизировать вручную и потом перевести в ассемблер — может влезть. Микрокод оперирует очень низкоуровневыми сущностями, которые потом приходится реализовывать на Си, что не оптимально. На форуме wasm было авторское пояснение. Если он виден из-за границы, можете сами процитировать.
Из России форум лежит, уже второй день минимум. Даже не знаю, это проблема самого форума или захватившие Россию варвары опять навандалили по крупному и порушили что-то в Сети, как во время бодания с телегой.
Заработал форум
Точная цитата разработчика декомпилятора:
Мой «псевдокод» уважаемый Intro называет «условным ассемблером».
v0.03
Сделал оптимизатор, который выбрасывает не использованные выражения. Теперь надо сделать предвычисления выражения. А потом ещё некоторую оптимизацию сделать.
Хотя оптимизатор компилятора С++ может это делать хорошо, но лучше самому это сделать, чтобы код легче понимался. Кроме того оптимизатор С/С++ не может сделать некоторую оптимизацию. Да и предварительно оптимизированный код позволит использовать хреновые компиляторы С/С++. Для МК не все компиляторы могут оптимизировать код на уровне VS2010.
Да, я использую студию 2010, gcc пока не пробовал, даже пока не устанавливал, потом.
Правильное направление
Верно мыслите. Если генерируемый код подразумевает чтение человеком, то он должен быть максимально понятен, все элементы обфускации изъяты, как и неиспользуемые/пустые фрагменты и "болванки".
Рабочий код эмулятора?
А есть ли уже рабочий код эмулятора, попробовать в МК61S?
ЕГГОГ
Начал тестировать оптимизирующий декомпилятор, вылезла куча ошибок. Придётся переделать код, там довольно хреново сделано.
Псевдокод
Как насчёт компиляции прошивки ПМК в псевдокод, удобный для оптимизации? Ну а потом пропустить псевдокод через оптимизатор и компилятор в C++?
Разбить эту великую задачу на три этапа.