Онлайн дизассемблер i8080/i8085/Z80

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Онлайн дизассемблер i8080/i8085/Z80

Post by vital72 »

Несмотря на то, что дизассемблер -- вещь универсальная и не привязана к конкретной архитектуре, размещаю я его здесь, потому что мой проект связан с Радио-86РК.
Представляю вашему вниманию свою реализацию дизассемблера для 8-битных процессоров i8080/i8085/Z80.
Я его использовал для исследования МОНИТОР'ов разных ретрокомпьютеров, также планирую его применять для дизассемблирования игр и адаптации их под свой проект.
Из возможностей: отделение области данных от кода -- это когда вместо абсолютных адресов в командах чтения/записи из/в память используются метки на сегменты данных (декларирование переменных); имеется возможность скакать туда-сюда по меткам в исходном коде, что очень помогает при анализе кода; задание границ областей данных прямо из дампа; знает недокументированные команды.
Жду ваши комментарии/замечания/предложения по улучшению дизассемблера.
Адрес: https://86rk.ru/disassm/

Также, обновился редактор знакогенератора viewtopic.php?f=93&t=10859
You do not have the required permissions to view the files attached to this post.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
fifan
Devil
Posts: 909
Joined: 06 Oct 2006 03:17
Location: г.Лянтор,Сургутского р-на,ХМАО

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by fifan »

Интересно попробовать. Судя по нику топикстартера я - его тёска и одноготка... :wink:
Mildi
Fanat
Posts: 57
Joined: 24 Aug 2022 23:08

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by Mildi »

Почему то зависает когда доходит до такого кода.
22 05 41
22 04 41
22 06 41 тут зависает, если 41 забить 00 то идет нормально.
22 07 41
22 21 CE
22 08 41
Mildi
Fanat
Posts: 57
Joined: 24 Aug 2022 23:08

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by Mildi »

и еще косяк заметил, не распознает (точнее распознает и помечает даже) иногда константы в программе, из за чего константы воспринимаются как команды (несмотря на то что помечены), видимо этот алгоритм стоит улучшать.
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by vital72 »

здорово, что отписались об ошибке, как будет время -- посмотрю.
на счёт констант не понял. можете привести пример кода и какие опции были включены? или скриншот.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
Mildi
Fanat
Posts: 57
Joined: 24 Aug 2022 23:08

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by Mildi »

да сделаю, но несколько позже как бинарник в исходное состояние верну.
Дизассемблер парсит код по порядку без прохода по командам перехода?
Просто мне тут подсказали что так с константами раскиданными по свободным местам в дампе ведут себя многие дизассемблеры, так что наверное ничего страшного в таких ошибках нет. Ida pro вообще сказала "показывай мне тут каждый кусок кода в ручную" ...

И есть вопросы по поводу сгенерированного кода, а то описание крайне краткое. Почему он некоторые данные определяет как

Code: Select all

1CB1:	21 18 3E     LXI	H,V_3E11+7
хотя указано явно как 3E18h

и что означают цифры в квадратных скобках.

Code: Select all

1CB0:	FB		SUB71:	EI			; [2]
.
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by vital72 »

дизассемблер пытается определить размерность переменных и чтоб не плодить тучу переменных, он может за базу использовать уже имеющуюся, тут надо смотреть код. можете скинуть бинарник? самому интересно откуда взялось "+7".
числа в квадратных скобках -- это количество ссылок на данную метку, можете навести мышку на имя метки и узнать, кто на нее ссылается, тут же перейти на них, а потом вернуться обратно правой кнопкой мышки.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
Mildi
Fanat
Posts: 57
Joined: 24 Aug 2022 23:08

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by Mildi »

Да все понял, там местами таких с + значений кучкой встречается.
файл скинул на почту.
по адресу 2000h надо поставить код 01h это константа, программа выполняется в этом месте с 2001h, точка входа 0000h процессор 8080. ОЗУ c 3C00h по 3FFFh выше пусто, но могут быть условные переходы в диапазон 5000h-5FFFh там еще ПЗУ могут быть, но меняется и блок данных с адреса 2000h-2FFFh и возможно еще в какие то адреса выше но мне пока сменные модули неизвесты которые могли там подключать ПЗУ
команды undocumented получаются из за того что константы так по ишачьи раскиданы, и сбивается последовательность.
Ну тут возможно причина что именно по ишачьи написан код, я с точки входа пошел я уже проклял этого кодера... А хотя только до середины самоконтроля добрался.
Andnor
Fanat
Posts: 80
Joined: 01 Jan 2023 11:37

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by Andnor »

Полезная штука, но у меня почему-то заголовки оффесетов сверху съехали и криво как-то работает выделение строк в хех-дампе, если они занимают более одной строки в ффоксе около 100-й версии.
forthuser
Senior
Posts: 165
Joined: 12 Jan 2023 07:26

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by forthuser »

Запустил с сайта rk86.ru Forth (Форт)
Сделал дамп памяти в файл
Скормил файл дизассемблеру на сайте 86rk.ru

Не смог дождаться какого то результата.
Andnor
Fanat
Posts: 80
Joined: 01 Jan 2023 11:37

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by Andnor »

Дамп нужно сконвертировать в бинарник было, а то он там в json по умолчанию.
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by vital72 »

forthuser wrote:Запустил с сайта rk86.ru Forth (Форт)
Сделал дамп памяти в файл
Скормил файл дизассемблеру на сайте 86rk.ru

Не смог дождаться какого то результата.
скиньте файл на почту, я гляну, что не работает
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
forthuser
Senior
Posts: 165
Joined: 12 Jan 2023 07:26

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by forthuser »

vital72 wrote:скиньте файл на почту, я гляну, что не работает
Зачем, если его можно получить Online из программы https://rk86.ru (выбор Forth из выпадающего списка программ в нижней части Online симулятора и запуск его Run, а далее Memory)

P.S. Возможно, если сам файл Forth.rki дать программе дизасемблирования, то она "лучше" справиться, но не думаю т.к. Форт в классическом его построении плохо подходит для обычного
дизассемблирования, если это не учитывать. (в программе emu80 он тоже есть)
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by Lavr »

forthuser wrote:Форт в классическом его построении плохо подходит для обычного
дизассемблирования, ...
Если знать, как собственно, устроен Форт, то весьма даже неплохо подходит для обычного
дизассемблирования.
Листинг получается довольно регулярный и осмысленный в общем-то...
Бывают и похуже кандидаты на декомпиляцию. :wink:
iLavr
forthuser
Senior
Posts: 165
Joined: 12 Jan 2023 07:26

Re: Онлайн дизассемблер i8080/i8085/Z80

Post by forthuser »

Lavr wrote:Если знать, как собственно, устроен Форт, то весьма даже неплохо подходит для обычного
дизассемблирования.
Листинг получается довольно регулярный и осмысленный в общем-то...
Бывают и похуже кандидаты на декомпиляцию. :wink:
Да, но IDA Форт бинарники не понимает, если ничего не предпринимать дополнительно.
Х.З. как в этом случае авторы построили систему. Вероятно по классике.

P.S. Здесь даже почти отреверсена Starflight с Форт в Си для запуска с помощью Си (SDL) (запускал её)