В общем, попытка переделки внутренностей DisAsm11 выявила некоторые внутренние проблемы. Не серьёзные, но всё же :)
Вид для печати
В общем, попытка переделки внутренностей DisAsm11 выявила некоторые внутренние проблемы. Не серьёзные, но всё же :)
Первый этап внутренних переделок (механизма визуализации и приёма команд) близок к завершению - вроде осталось только восстановить работку кнопок (и скорее всего и шоткатов). Основная переделка будет на втором этапе - кнопки зависят от типа процессора, сделаю так, что бы их количество и предназначения не были жестко зашиты в часть, относящуюся к визуализации и интерфейсу пользователя.
Как проверка концепции - будет добавлена (ограниченная) поддержка ещё процессоров. Желательно, что бы один был одно- и нуль-операндным, а второй - трех-, двух-, одно- и нуль операдным. Под операндами понимаются не регистры, а ссылки какого-либо вида на ячейки памяти.
Хотелось бы ещё и нуль-операндого, но что я такого вообще не припоминаю..
Одно-операндный - вроде пойдёт 580-ый, а трёх-операндным может быть VAX, но надо проверить - точно ли у него все ли три операнда могут быть НЕ регистрами :)
Первый этап завершён. По крайне мере на текущий момент - проблем не заметил. И автоматические тесты дали идентичный результат.
Теперь оценка того, что наворатил :)
Дальше этап два - выпиливание жестко прибитых к визуальному интерфейсу кнопок - они будут создаваться по описанию команд, доступных в модуле собственно дизасма
Ну и ещё один функционал, который нужно будет доделать - сохранение-восстановление сеанса. Хотя тут, скорее всего, особых проблем не будет
По результатам ночного бдения нашёл один... косячок :) Не смертельный, но - неприятный. Плюс начал дизасмить одну программу, а поскольку до сохранения сеанса ещё не добрался и не проверил - прерывать сильно не хотелось :) Так что воспользовался VS и поменял программу прямо в отладчике :)
Ну а затем нашёл ещё один косяк - неправильно выставился статус на ячейке, что она - второй операнд команды. Этот косяк уже хуже - попробую так же пофиксить, не выходя из программы - под отладчиком :)
- - - Добавлено - - -
Хм.. Странно, что на этот косяк не налетел раньше. Но, правда, сценарий специфический, что бы он сработал :) Поправил.
Ещё один не критичный косячок найден и прямо в отладке, не прерывая работу с DisAsm, пофиксин :)
Когда активно начинаешь работать с программой - начинаешь понимать - чего не хватает :) В планах
- упростить добавление/изменение комментария, думаю, можно будет использовать - Ctrl/V для заполнения комментария
- слегка изменю работу с блочными комментариями - теперь кнопка двоеточия (начать редактировать комментарий ячейки памяти) будет работать и как - начать редактирование блочного комментария, если стоим на нём, а alt+двоеточие - теперь всегда будет - добавить блочный комментарий перед текущей ячейков (сейчас - редактировать блочный комментарий если стоим на нём, иначе - добавить блочный комментарий)
- думаю над возможностью добавления не только блочных комментариев (сейчас - единственное что можно добавить), но и над добавлением операторов условной трансляции (.IF, .IFT, .IFF, .IFTF, .ENDC) - сильно понадобилось при восстановлении исходников F11ACP, пока приходится вставлять просто как блочные комментарии. Но надо продумать - как будут вставляться и как будут использоваться самим DisAsm-ом
- так же думаю над возможностью добавления именованных констант с возможностью ссылки на них из команд PDP-11 - примерно как это делается в MACRO-11 - а то всякие смещения в блоках данных, которые обычно делаются через константы (типа I.IOSB(R5)) - показываются числами - и приходится в комментах добавлять именованный вариант
Два последних пункта требуют ешё обдумывания - как это сделать в визуализирующей части независимым от вида процессора (типа - открыли что-то PDP-шное - доступно, открыли не-PDP-шное - может быть и не доступным или доступным в другом виде)
- - - Добавлено - - -
Вдогонку.
- При условной трансляции ещё бывает требуется, что бы метка была на отдельной строке. В DisAsm она пока всегда связана с ячейкой памяти. Так что возможно будет добавка не только операторов условной трансляции, но и "самостоятельных" меток :) Тоже подумать - как правильней реализовать - учитывая, что идея DisAsm ни в каком виде не предполагает добавления, редактирования или удаления ячеек памяти - визуализация основывается исключительно на аттрибутах, выставленных автоматом при анализе или вручную.
Ещё вдогонку
- Ещё наткнулся на сценарий, где нужна отдельная "самостоятельная метка" - когда метка маркирует первый байт после какой-то области (что-то типа - конец буфера). Но это вариант - метка-после, в отличии от предыдущего варианта метка-перед.
Изменения комментария (в том числе блочного) по Ctrl/V - да
Вставка блочного комментария - до и после ячейки - по Insert и Alt/Insert - да
Редактирование и блочного комментария по ":" - да
Для файла-библиотеки системы DOS-11 в своё время добавил возможность "распилить" библиотеку на отдельные модули. Теперь сделал механизм "распила" до какой-то степени штатным - то есть если формат файла подразумевает, что он состоит из отдельных частей, то (при соотвествующей поддержке в коде) - его так же можно будет "распилить" на части. Прицел сделан на образ систем RSX-11, но пока функционал в отработке нюансов.
Но образ P/Os уже как-то распилился :) Прицел - продолжение работы по восстановлению исходников F11ACP из него :)
Битва за восстановление функционала - сохранение-восстановление сеанса работы.
В целом - вроде восстановил (хотя ещё надо потестировать не только на образе P/Os)
Основная битва была за восстановление текущего оверлея, содержимого окон дизасма и положения в них
Немного потестирую на других вариантах файлов и, скорее всего, вернусь к восстановлению исходников F11ACP P/Os