Подход к декодированию команд и операндов для VAX сильно отличается от того, как я сделал для PDP-11.
Отработал на CMPB, а потом в лоб добавил MOVB
С MOVB повезло - те же режимы адресации :)
Помимо кнопки Код проверил (более менее) кнопку Сброс
Вид для печати
Подход к декодированию команд и операндов для VAX сильно отличается от того, как я сделал для PDP-11.
Отработал на CMPB, а потом в лоб добавил MOVB
С MOVB повезло - те же режимы адресации :)
Помимо кнопки Код проверил (более менее) кнопку Сброс
Понемногу движение вперёд
Часть функционала достаётся почти даром - как результат доработок для PDP-11, но встречаются и свои трудности. Одна из них - БОЛЬШОЕ адресное пространство. Поэтому некоторые решения, прокатывающие для PDP-11 - не подходят для VAX-11..
Команды процессора добавляются по принципе - та, накоторый дизасм остановился :)
- - - Добавлено - - -
Надо найти листинг побольше.. А то описание в документации - так себе - не очень много примеров синтаксиса.. приходится гадать - насколько правильно генерируются команды...
Уф... Я ошибся - у VAX-а может быть до 6 операндов:v2_dizzy_facepalm:
Но DisAsm-у всё равно - сколько операндов - окна операндов он создаёт динамически - количество указывается в описании соотвествующего объекта.
- - - Добавлено - - -
В общем, на текущий момент все однобайтные инструкции для декодирования описаны, но
- один режим адресации (индексный) пока не реализован - надо подумать, как его вписать в модель аттрибутов инструкции.
- инструкция CASE - отдельный прикол - после неё может идти МНОГО описания смещений - как с ними работать - надо подумать, но скорее всего будет ручной вариант
- у инструкции EDITPC один из аргументов - ссылка на таблицу описания комманд-аттрибутов - которую тоже можно распарсить, но пока не.
- результат дисзасм пока никак не проверить
- может, что-то ещё
- - - Добавлено - - -
А, да, оказывается для VAX-ов ещё делалось векторное расширение :) До него тоже пока - не :)
Индексный режим вроде тоже ожил. Зачистка огрехов. Ну и в отличии от PDP-11, где я программу понимаю в лёт, тутова не всё так простова...
- - - Добавлено - - -
Ещё движение вперёд
Теперь надо придумать способ, как всё это проверить..
В общем, ещё некоторое время погоняю дизасм для VAX-ов на предмет ошибок, а так же, по возможности, поудаляю из визуализации зависимости от PDP-11 и VAX и на этом, наверное, с дизасмом для VAX-11 всё. Попробую так же поискать исходники ПЗУ начальной загрузки - вдруг получится найти под какую-то модель - тогда можно будет оценить точность дизасма. Так надо подумать над созданием стенда (на simh), что бы как никак, но можно было транслировать-собирать и проверять качество дизасма. Собственно - то, что я делал для PDP-11, но там всё прощё было - опыт, как никак, присутствовал..
В общем, листинг, более менее совпадающий с двоичным файлом - нашёлся, так что есть на чём проверить. Чем и буду заниматься - ошибки в дизасме точно есть, уже убедился..
- - - Добавлено - - -
В декодере команд нашлась существенная ошибка. Она влияет на небольшое количество команд, но часть из них связана с переходом на другие команды - а вот это уже влияет на процесс дизасма весьма существенно. Как поправить - уже понятно, но.. придётся изменять описание команд для декодировщика. Порядка 250 штук :) То есть долго и нудно. И из-за нудности - риск ошибиться.. Порядка 77 уже поправил (с ними было легче), надеюсь - без ошибок :)
Поправил ошибку, связанную с описанием длины операндов (см. пред сообщние) - в описании команд и в декодере. Вроде теперь всё выглядит норм и даже начинает совпадать с листингом.
Как обычно - опять проверки. Визуальные и на совпадение с листингом. Плюс доработка команд и отвязка зависимостей визуализирющей части от PDP-11 и VAX-11
И ещё немного вперёд...
Привет, попробуй вот это тут совсем мало, но хоть что-то.
https://zx-pk.ru/threads/35186-tsp-m...=1#post1183057
Да
Проверяй :)
Исходник
И листинг...
А нельзя-ли программу сделать не RequestWare а там ну не знаю даже ShareWare шаровары одним словом. Чтобы можно было вот зайти в первую страницу - увидеть ссылку "скачать".
Пофигу там рабочий не рабочий вариант (специально написать мол софт всегда в разработке, матюками крыть меня не надо). :)
Но чтобы его одним словом сразу можно было скачать. Софт хороший я юзал древнюю версию какую-то и вполне даже помогала.
Есть такое в мыслях. Но точно не раньше, чем DisAsm будет разделён на части. Визуализирующую и дизассемблирующую.
Это, в частности, позволит решить проблему сеансов - сейчас сеанс, созданный в одной "версии" программы - с большой вероятностью не загрузиться в более новой. Когда то думал над написанием конвертеров (из более старой в более новую версию), но.. там конвертеры получались больше самой программы.
После распила будет .exe-шник, который собственно будет визуализировать, ну и некоторые сервисные функции выполнять (типа открыть файл, сохранить сеанс, сгенерировать разное) и dll, которая будет дизасмить и выполнять всякие команды типа - пометить ячейку как Ascii или ещё как-то. Вот эти dll можно сделать версионными и тогда сеанс будет подгружаться и отправляться в работу в нужную версию dll. Коих может быть сколько угодно. Не только на разные процы, но и разные версии под один проц.
Чем, по большей части, я сейчас и занимаюсь. В частности, за выходные получилось так:
То, что выделено - пока ещё жестко зашито (подумать надо, как отвязать)
Остальное (ну кроме самой первой линии с кнопками типа Открыть, Сохранить, Сгенерировать) - генерируется по всякой информации из модулей дизасма, коих сейчас два.
Кнопки первой линии тоже не зависят от конкретного проца, но показываются всегда, так как с них начинается работа)
На текущий момент - так...
... и вот так
То, что в окне - всё определяется по соотвествущим описаниям дизассемблируемой сущности и отрисовывается динамически.
То, что за окном (без кнопок, только шоткаты) - вставка и редактирование комментариев, копи-паст и поиск - пока зашито. Вырезание этого - следующие шаги
На текущий момент остались жёстко зашитыми команды редактирования комментария, поиск (в трёз вариантах) и копи-паст. Учитывая, что они, фактически, не зависят от процессора - скорее всего они такими и останутся..
- - - Добавлено - - -
Вдогонку. Бонус переделок стало - возможность добавлять не только блочный комментарии - но и некоторые другие типы ячеек-операторов MACRO-11. Так что возможность добавить, скажем, условную трансляцию - стала ближе :)
Более менее монолит DisAsm11 порезан, даже набросан метод, который проверяет dll библиотеки и подгружает те, которые реализуют нужный функционл дизассемблирования и добавляет поддерживаемые ими процессора в список. Так что теперь без этих библиотек DisAsm11 показывается только "Сохранённый сеанс", а с ними - плюс ещё PDP-11 и VAX-11. Это из хороших новостей :)
Из плохих - я стараюсь оставить в модуле, отвечающий за визуализацию, только нужный функционал, а всё остальное вынести в модули дизассемблирования. Но есть некоторые нюансы, которые надо понять и решить создаваемыми ими проблемы. В процессе..
- - - Добавлено - - -
Некоторое количество проблем пофиксино.. Но ещё остались..
Подгрузка библиотек более менее отлажена - и в варианте .NET 4.0 и в варианте .NET 9.0 (да, теперь девятка - перешёл с семерки), но пока без работы с несколькими версиями библиотек (то есть подгрузить то она подгрузит все и... покажет в какой-то степени все - и как будет бедный пользователь выбирать между несколькими PDP-11??? :) )
Помимо этого воевал с некоторым количеством ошибок из-за внутренних изменений, связанных с распилом монолита и просто моих ошибок. Один из выводов - работу с векторами надо несколько переделать :)
На вскидку - вроде как осталось только слегка поправить вывод листинга - а то после изменений, связанных с поддержкой VAX-11 - листинг VAX-11 выводится ок, а вот листинг PDP-11 - не очень. А так же проверить сохранение-восстановление сеанса :)
Ну и - версионность модулей дизасма :)
Листинг поправил, сеанс вроде тоже сохраняется-восстанавливается..
Уф... Война с .NET-ами, версиями dll и динамической загрузкой
Теперь можно иметь несколько версий библиотек дизассемблирования. На скриншотах красным выделены версии библиотеки дизассемблирования PDP-11
Для сохранённого сеансы была использована "версия" 0.9.9.9, она и подгрузилась
Если же просто открыть файл для дизассемблирования, будет подгружена "последняя" (1.0.0.0 на скриншоте) версия
Пока это только отладка - отличия в версиях созданы искусственно - в 0.9.9.9 убрана кнопка Asciz
Есть ещё некоторая заморочка с сохранением сеанса, но она пока никак не влияет на процесс загрузки сеансов, хотя попробую её тоже пофиксить
- - - Добавлено - - -
Даже две заморочки, но вторую скорее всего быстро исправлю - почему-то в обеих случая светится, что открывали Сохранённый сеанс, но для версии 1.0.0.0 это не так - открывался файл для дизасма...
- - - Добавлено - - -
Да, с проблемой показа "Сохранённого сеанса" разобрался быстро - старый код, теперь не нужен.
А вот первая заморочка (которая вроде ни на что не должна влиять)... надо подумать... Вроде действительно не должна ни на что влиять, но пока не понял - точно ли..
Весь сегодняшний день - война с подгрузкой строго определённой версии .dll библиотеки модуля дизассемблирования.
При том, что на этапе запуска для каждого модуля дизассемблирования ищется его последняя версия (dll) и на основе последней версии создаётся объект, который управляет показом типа процессора, поддерживаемых ОС, форматов и вариантов формата файлов.
Собирается две версии DisAsm11 - под .NET 4.0 и .NET 9.0. И каждая из версий считала своим долгом выпендриться по своему. Несколько слабее четверка, а вот девятки - это был некий адЪ. Но всё было успешно преодалено.
На текущий момент мне пока не известно об ошибках, вроде всё работает более менее, так что начинается этап более глубоко тестирования.
- - - Добавлено - - -
А, нет, вспомнил, работа из командной строки - вот что ещё предстоит восстановить и допилить (там некоторое время была жОсткая завязка на PDP-11, которую выпилил) до универсальности и работе через инфу из модулей дизассемблирования.
Ну и прикинуть - всё ли процессорно-ОС-форматофайло-зависимое было выпилено из модуля визуализации и интерфейсной библиотеки.
Есть вероятность, что будет добавлен (в первую очередь для проверки концепции) ещё один вид процессора.
С утра на свежую голову поигрался с попеременной загрузкой - сохранённый сеанс из более старой версии модуля дизасма - загрузка исходного файл (должна загрузиться новая версия модуля дизасма) - да, всё ок, подгружаются нужные версии dll. А то уже засыпая - пришла в голову мысль - а как оно будет, если .NET 9 так долго сопротивлялся с загрузкой нужной версии. А нормально отрабататывает :)
Прошерстил код - вроде как да, в модуле визуализации зависимостей от pdp-11 или vax-11 не нашлось. Ну кроме работы с командной строкой.
В версии .NET 9.0 опять стала использоваться только последняя версия... Делаю перерыв в этих попытках, пока буду доработывать внутренности без проверок выбора версии в девятке.
Ну и ещё слегка отвлекусь на другое. Долгое мусолние мысли о том, что надо бы ещё одну программу переделать с C на C# наконец разродилось - процесс пошёл :) Программа большая, процесс будет долгий, как будет что показать - создам тему :)
В общем, после долгих и многочисленных попыток войны с загрузкой разных версий одного и того же модуля дизасма (в .NET 9.x) плюнул и сделал более простой вариант - модули (а точнее, в терминах .NET - сборки) будут отличаться не только версией но и именем. Тогда с точки зрения .NET - это РАЗНЫЕ сборки и никаких проблем (вроде) с загрузкой нет. Попробовал поиграться - вроде всё (ТТТ!) работает - попеременно грузил сохранненый из разных версиях сеанс. Технически - чуть сложнее с точки зрения настройки проекта - версию надо поменять в двух местах.
Теперь - разгрести завалы кода от пробных попыток и причесать его - и будем посмотреть на тесты.
Из ещё недоделанного - поддержка версионности при работе из командной строки плюс вернуть в ImageUtils возможность дизасмить блоки первичного и вторичного (если есть) загрузчиков