Вход

Просмотр полной версии : IDA Pro 7 + 1801BM1/BM2 (python)



yu.zxpk
26.03.2019, 10:51
Добрый день,

В качестве "проекта выходного дня" и по причине ностальгии сделал в IDA7 порт модуля "pdp11" процессора (C++) на Python, а так же добавил поддержку 1801ВМ1 и ВМ2.

https://github.com/yshestakov/ida_proc_1801

Проверялось на IDA Pro 7.0 под MacOS.
По идее модуль должен так же легко работать и под IDA 6.x, хотя возможна некоторая несовместимость по API (IDAPython). При необходимости могу опробовать с IDA Pro 6.8 на Windows.

Интересно получить отзывы.

shurik-ua
26.03.2019, 11:50
Гидру не пробовали ? - https://ghidra-sre.org
говорят чуть ли не убийца Иды будет - https://exelab.ru/f/index.php?action=vthread&forum=3&topic=25640

yu.zxpk
26.03.2019, 12:05
Гидру не пробовали ? - https://ghidra-sre.org
говорят чуть ли не убийца Иды будет - https://exelab.ru/f/index.php?action=vthread&forum=3&topic=25640

Нет, не пробовал. Мне IDA привычней (занимался когда-то реверсом сервера линейки). Плюс открыл для себя новый чудный мир "скриптования" в IDA.

Vslav
26.03.2019, 12:57
Камрады, я знаю топикстартера по RL, и с легким сердцем могу дать ему самые лучшие рекомендации :) Так что за модули ВМ1/ВМ2 для IDA можно быть спокойными.
А еще топикстартер легко может довести до ума GCC для PDP-11. И даже под MinGW если попросить. И вроде как не возражает, но и не горит :)

yu.zxpk
26.03.2019, 13:13
А еще топикстартер легко может довести до ума GCC для PDP-11. И даже под MinGW если попросить. И вроде как не возражает, но и не горит :)

Спасиб за рекомендацию ;)

По GCC. Рабочий код генерит 9-я версия. 8.2, 8.3 - битый. Я начал делать рефакторинг pdp11 бакенда GCC в части обработки флагов -m [1801bm1a | 1801bm1g | 1801bm2], генерацию кода с использованием SOB и XOR и, в случае BM1Г / ВМ2 - EIS команд. Но там малость наркоманская обработка флагов (аргументов).
Я остановился на unit-test-ах GCC для PDP11. Без них тяжело отлаживаться. В самом GCC для PDP11 их просто нет, но можно по аналогии с vax backend-ом сделать.

zx_
26.03.2019, 16:08
yu.zxpk, может в следующие выходные спортируете бибиси бейсик для бэкашки?
https://zx-pk.ru/threads/30128-bbc-basic-for-pdp-11.html

с усмешкой , но и вдруг

yu.zxpk
26.03.2019, 17:03
yu.zxpk, может в следующие выходные спортируете бибиси бейсик для бэкашки?
https://zx-pk.ru/threads/30128-bbc-basic-for-pdp-11.html

с усмешкой , но и вдруг

BBCBasic - интересно, конечно. Но я пока не отладил себе кросс-компиляцию под Linux/MacOS кода на Macro11 и/или GCC+GNU Asm. Всесто кросс-компиляции можно (да и лучше) использовать комбинацию SimH + RT11 с MACRO11.SAV и rt11dks из ukncbtl-utils.

Имея парочку FPGA плат (Terrasic DE0, китайские Spartna6+DDR3, Artix7+SDRAM) я хочу поиграться ВМ1 cpu имени Vslav ;)
В его cpu11 репке тестовый пример зашивает образ ROM на этапе синтеза, как COE файл. Очень геморно обновлять прошивку. Потому Vslav предложил заняться прошивкой 054 от ДВК1, разобрать ее на части, собрать - проверить, что я могу скомпилить asm код в точно такой же бираный код. Если все хорошо на этом этапе, то можно заменить загрузчик из НГМД на свой загрузчик из SPI флеша.
Вот так я дошел до того, что мне нужен настроенный под меня IDA.

Hunta
26.03.2019, 18:37
тестовый пример зашивает образ ROM на этапе синтеза, как COE файл. Очень геморно обновлять прошивку
Поэтому я нарисовал скрипт, который берёт листинг от MACRO-11 и делает из него MIF файл, который потом инжектируется в SOF, который потом прошивается в... :)

- - - Добавлено - - -

И примерно для таких же целей восстановил 134 прошивку :)

Но имея FPGA - выводить интерфейс SPI - это не комильфо. Делается какой либо из стандартных контроллеров, которые есть в прошивке - и вуаля - даже драйвера писать не надо :)

yu.zxpk
26.03.2019, 19:01
Поэтому я нарисовал скрипт, который берёт листинг от MACRO-11 и делает из него MIF файл, который потом инжектируется в SOF, который потом прошивается в... :)


Идея брать LST и генерить MIF - да, мне нравится. С другой стороны, я хотел (хочу) генерить MCS файл из пары fpga bitstream + rom. И уже MCS файл прошивать в борду. Таким образом ускоряется цикл проверки.

На предмет эмуляции честного НГМД в FPGA на основе SD + FAT. Да, можно. Только "сбоку" в FPGA надо вшивать soft core какой-нибудь, к-й буде мапить block i/o эмулятора НГМД на файлы на FAT12. Не на один день работы. Надо посмотреть, что kapitan-u сделал.

Hunta
26.03.2019, 19:14
генерить MCS файл
Мне до прошивания во флеш ещё далеко, пока все напрямую грузится для проверки


soft core какой-нибудь, к-й буде мапить block i/o эмулятора НГМД на файлы на FAT12
Мне до этого тоже пока ещё далеко, пока sd карта используется напрямую при эмуляции, максимум - для RK05 эмулируется до 8 устройств, но для разборок с FAT (кстати, FAT12 - это очень мало) будет создан свой проц с прошивкой, хотя в моем случае можно использовать и ядро arm-а для этой работы. Пока не выбрал.

Manwe
27.03.2019, 00:00
Но я пока не отладил себе кросс-компиляцию под Linux/MacOS кода на Macro11 и/или GCC+GNU Asm.А чем не устраивает PDPy11 (https://github.com/imachug/PDPy11)?

Hunta
27.03.2019, 06:20
Он вот такое оттранслировать и собрать сможет?
http://www.kpxx.ru/KBAHT4C/Софт/ПЗУ

yu.zxpk
27.03.2019, 12:11
А чем не устраивает PDPy11 (https://github.com/imachug/PDPy11)?

Я не смотрел на PDPy11. Vslav находил там баги. Одну из них поправили авторы недели 3 тому.
Лично мне проще поправить генератор ASM кода в IDA для моей реализации процессора в BSD синтаксис. Таким образом, GNU AS спокойно соберет код для PDP11/1801BM1/1801BM2.

- - - Добавлено - - -


Он вот такое оттранслировать и собрать сможет?
http://www.kpxx.ru/KBAHT4C/Софт/ПЗУ


Я ничего не знаю про КВАНТ4С и его ПЗУ. По какому адресу загружается: 0160000 или 0140000 или 0? Подозреваю, что последнее. Ага, судя по таблице драйверов...

Manwe
27.03.2019, 12:34
Он вот такое оттранслировать и собрать сможет?
http://www.kpxx.ru/KBAHT4C/Софт/ПЗУСплошные макросы. Это, считай, другой язык. Всё равно что на Си писать. А PDPy11 для ассемблера :)

Hunta
27.03.2019, 12:56
Это, считай, другой язык
Язык называется MACRO-11 ;) MACRO!
А язык ассемблера для PDP-11 назывался PAL-11 :)
Я, используя макросы, программу на порядок быстрее напишу.
И если взять что-нибудь, написанное для PDP-11, существует ХОРОШИЙ шанс налететь на МАКРОСЫ. Что будете делать с PDPy11? ;)


Я ничего не знаю про КВАНТ4С и его ПЗУ
Если быть точнее, то это ПЗУ под МС 1201.03 и .04. И да, это ПЗУ для halt режима, отображается на адреса 0-13776(8)

yu.zxpk
27.03.2019, 13:19
Если быть точнее, то это ПЗУ под МС 1201.03 и .04. И да, это ПЗУ для halt режима, отображается на адреса 0-13776(8)

Спасибо. Интересное на поизучать. Заодно обнаружил, что я "потерял" byte-адресацию при выводе текста команды :(
https://www.dropbox.com/s/w9w5vdox13r08hd/134.lst.txt?dl=0

Hunta
27.03.2019, 13:30
Спасибо. Интересное на поизучать
Да не за что :)
В планах - восстановление прошивок до примерно такого же состояния, на очереди - КГЦД, потом могу и 054-ой заняться.
В зависимости от цели (в 134 была - добавить свой загрузчик) - может доводиться до разного состояния в плане разборки логики работы и комментирования.
Мне в таком виде проще разбираться с логикой - нет локальных меток, визуально виден локальный код (то есть нет захода внутрь) ну и если код более менее нормально был написан - восстанавливается достаточно быстро. После 134-ой сунулся было в 377... но там потяжелее, пока отложил в сторону

yu.zxpk
27.03.2019, 16:40
по 054 ПЗУ: могу выложить свои наработки в виде asm, lst, IDA *idb или *idc (IDC скрипм можно "натянуть" в свою базу разбора 054, даже на другой версии IDA)

tnt23
27.03.2019, 16:42
Гидру не пробовали ? - https://ghidra-sre.org
говорят чуть ли не убийца Иды будет - https://exelab.ru/f/index.php?action=vthread&forum=3&topic=25640

Это круче чем radare2, или не круче?

Hunta
27.03.2019, 17:40
по 054 ПЗУ: могу выложить свои наработки
Если только asm - я руками работаю :)

shurik-ua
27.03.2019, 22:18
Это круче чем radare2, или не круче?
радар как то не юзал - но судя по количеству роликов на ютубе гидра набирает популярность.

yu.zxpk
28.03.2019, 13:35
Язык называется MACRO-11 ;) MACRO!
А язык ассемблера для PDP-11 назывался PAL-11 :)
Я, используя макросы, программу на порядок быстрее напишу.
И если взять что-нибудь, написанное для PDP-11, существует ХОРОШИЙ шанс налететь на МАКРОСЫ. Что будете делать с PDPy11? ;)


Если быть точнее, то это ПЗУ под МС 1201.03 и .04. И да, это ПЗУ для halt режима, отображается на адреса 0-13776(8)

Сделал генератор ASM в BSD синтаксисе, понимаемом GNU as (binutils). Собрал "генеренку" без ручных правок, diff показывает, что все совпало до бита.
> make diff
pdp11-aout-as -o 134.o 134.asm
pdp11-aout-ld -T pdp11-rom.ld -o 134.out 134.o
pdp11-aout-ld: warning: cannot find entry symbol start; defaulting to 0000000000000000
pdp11-aout-objcopy -O binary 134.out 134.rom
diff -u 134-org.rom 134-new.rom
--- 134-org.rom 2019-03-28 12:32:42.000000000 +0200
+++ 134-new.rom 2019-03-28 12:32:42.000000000 +0200
@@ -371,4 +371,4 @@
000017f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 76 c0 |..............v.|
00001800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
-00002000
+00002200
make: *** [Makefile:28: diff] Error 1

Hunta
28.03.2019, 13:47
Ну, 134 уже как бы не интересно... :)

yu.zxpk
28.03.2019, 13:54
Ну, 134 уже как бы не интересно... :)

Кому как. Я потратил время на разработать себе инструментарий. Сам разбор 134 по-быстрому занял минут 40.
Вот сейчас втыкаю в разницу между оригинальной 054 и собранной из "генеренки":

> make diff
diff -u 054_mc1201-org.txt 054_mc1201-new.txt
--- 054_mc1201-org.txt 2019-03-28 12:50:46.000000000 +0200
+++ 054_mc1201-new.txt 2019-03-28 12:50:46.000000000 +0200
@@ -177,7 +177,7 @@
00000b00 f9 87 a4 00 f7 83 b4 00 f5 82 a2 00 f3 85 b2 00 |................|
00000b10 f1 84 a8 00 ef 81 b8 00 ed 80 ec 05 a8 00 ea 04 |................|
00000b20 af 00 e8 07 bf 00 e6 06 f7 09 58 ff c2 0d f7 09 |..........X.....|
-00000b30 52 ff 01 01 09 01 c3 15 fe ff c2 78 f7 09 44 ff |R..........x..D.|
+00000b30 52 ff 01 01 09 01 c3 15 fe ff 83 78 f7 09 44 ff |R..........x..D.|
00000b40 87 7e c5 15 09 00 87 00 f7 09 38 ff c2 65 23 00 |.~........8..e#.|
00000b50 f7 09 30 ff c2 60 9f 60 80 ff df 25 1f 02 80 ff |..0..`.`...%....|
00000b60 f0 02 82 11 df 17 04 00 3c 01 df 17 08 00 3e 01 |........<.....>.|

Так лучше видно в octal:

> make diff
diff -u 054_mc1201-org.txt 054_mc1201-new.txt
--- 054_mc1201-org.txt 2019-03-28 12:55:01.000000000 +0200
+++ 054_mc1201-new.txt 2019-03-28 12:55:01.000000000 +0200
@@ -177,7 +177,7 @@
0000b00 103771 000244 101767 000264 101365 000242 102763 000262
0000b10 102361 000250 100757 000270 100355 002754 000250 002352
0000b20 000257 003750 000277 003346 004767 177530 006702 004767
-0000b30 177522 000401 000411 012703 177776 074302 004767 177504
+0000b30 177522 000401 000411 012703 177776 074203 004767 177504
0000b40 077207 012705 000011 000207 004767 177470 062702 000043
0000b50 004767 177460 060302 060237 177600 022737 001037 177600
0000b60 001360 010602 013737 000004 000474 013737 000010 000476
make: *** [Makefile:31: diff] Error 1

upd. Попутал параметры для XOR:

HLTROM:00000165472 074302 xor R2, R3

Оригинальный PDP11 модуль в IDA имеет эту же ошибку. У себя в питоновой реализации поправил анализ XOR.
ASM генеренки для 054 и 134 собираются без ошибок.

Shiny
25.06.2025, 10:36
Сделал генератор ASM в BSD синтаксисе, понимаемом GNU as (binutils). Собрал "генеренку" без ручных правок, diff показывает, что все совпало до бита.

Хорошо бы заполучить эту сборку для win32, а то пришлось руками собирать программу для запуска в simh.