-
Поигрался (в смысле - и потестировал малость) с новым вариантом. Из непонравившегося - в командной строке надо указывать полный набор, типа - /pdp11 /rt11 /sav
Надо будет реализовать вариант поиска по принципу - минимально достаточной инфы - то есть - /sav - он только в описании pdp11+rt11 встречается - значит - /pdp11 и /rt11 подразумевается. Но это завтра, в смысле - спать хочется, вот встану и попробую допилить :)
-
Допилил разборку командной строки до разборки по принципу разумной достаточности, то есть - указал ключ, скажем, /tsk - программа сама поймет, что то /pdp11 и /rsx.
Попутно пришла в голову мысль, что одинаковые файлы могут быть в разных ОС (DOS-11 и XXDP).
И (внезапно)! обнаружилось, что если в командной строке не указать ключ /generate - то программа просто откроет (и первоначально обработает) файл в графическом режиме. Автор забыл про то, что умеет произведение. Но вот параметры в выпадающих списках она по загруженному файлу не выставила (так и остался висеть Сохранённый сеанс), что с одной стороны - фиолетово (ибо дальше они не на что не влияют - только при открытии файла - а это уже было задано ключами), а с другой стороны - "Неаккуратненько как то, доктор!"
Второе поправить проще, поэтому начну с него :)
- - - Добавлено - - -
Другое дело - теперь правильная инфа о файле :)
Первый пункт в работе...
-
Разбор командной строки поправил. Фаза тестирования. Ну, по мере использования, а не специально гонянние тестов :)
- - - Добавлено - - -
А, да, чего-то мне стукнуло в голову - сделал возможным изменение размеров окошек с исходным текстом :) Не то, что бы это ОЧЕНЬ нужно было, но вдруг захотелось. А поскольку это дело на 5 минут правок описания интерфейса и ни одной строчки кода - пуркуа бы и не па :)
-
Для полноты картинки добавил в список так же CAPS-11 :) Формат у неё тот же - LDA (по крайне мере для основной массы файлов), но, как и в случае XXDP/DOS-11 - свои системные вызовы. Кстати, одна из операционок для PDP-11, в которой ассемблер не поддерживает макросы, то есть - вариант PAL-11. Надо посмотреть по документации - как вообще в CAPS-11 происходят вызовы системы :) В принципе - можно добавить в дизасм и макросы под это дело, только транслировать придётся под чем-нибуть типа RT-11. Надеюсь - OBJ у них с CAPS-11 похожие :)
-
"Неожиданное" применение кода из DisAsm :)
Код:
8.842.006-12.Редактор текста.var.1.ptap
** ** ** ** ** ** ** * **
* * * * * * * * * * * * * ** * *
** ** **** * * * * * *** *** * *
* * ** * * * * ** * * * * * * * *
** ** ** * **** ** ** ** ** *** ****
С адреса : 000004
По адрес : 012607
Стартовый адрес: 012416
000245 Начало записи 001 000
Счётчик байт 52
Адрес загрузки 000550
КС 045
...
-
Пофиксил некоторое количество неточностей при разборке командной строки.
Плюс вспоминл про модуль поиска системных вызовов (а-ля макросы). Там, конечно, на текущий момент - жуткая жуть - был реализован (доведён до работающего состояния) первый пришедший в голову вариант. Описываются макросы сложно и через код. Но - работает - ради пробы добавил три макроса под XXDP
В планах (не ближайших) (как и некоторые другие вещи) - вынести всё это дело во внешний файл. То есть - всё таже отвязка ядра DisAsm-11 от зависимостей :)
P.S. На вопрос - чё за код такой странный в раскрытии макроса - не отвечу. Оно так былО в программе :)
- - - Добавлено - - -
Добавил ещё некоторое количество макросов. Дальше - вечером, после работы..
Да, ещё вчера малость попилил зависимости модуля макросов от общей организации DisAsm. Прицел - перевести вызов этого модуля на второй этап обработки входного файла (когда первоначальный автоматический разбор сделан), а так же - в модуль обработки команды C (Code).
-
Добавил все(?) макровызова EMT для XXDP, на одной из программ из XXDP - играюсь и смотрю, что из этого вышло :)
Для этой программы я уже нарисовал эти вызовы в дизассемблированном исходнике руками - посмотрим, насколько совпадёт :)
- - - Добавлено - - -
На выходные попробую добавить что-нибудь из RSX :)
- - - Добавлено - - -
В общем, макросы описываются ака "Жуткая жуть" с некоторыми неочевидностями, но.. Работает! :)
-
Периодически мысль возникала, но... Видимо, таких длительных игр с сохранением сеанса не было, так что - как возникала, так и пропадала :) А тут - не только возникла, но достало вспоминать - где я там прервался?? :) Так что теперь инфа о текущих ячейках сохраняется и после открытия файла сеанса - восстанавливается :)
Пока в проверках работы описанных макросов для XXDP и фиксах мелких недочётов...
-
В процесс игр - обнуления флагов ячеек и выставления признака - Код (с автоопределением макровызовов) наткнулся на то, что обнуление флагов на макровызове осколками цепляет предыдущий макровызов, причём цепляет фатально - сам макровызов не обнуляется, а вот с его ячеек сбрасывается флаг, что они из макровызова. Разбираясь, наткнулся на (свой!) непонятный код. Такое впечатление, что была какая-то ошибка в определении макросов (а может были мыли про вложенные макросы - что, как мне сейчас кажется - глупость) - и вот она рванула. Закомментил, оставил комментарии, пофиксил - играюсь дальше...
- - - Добавлено - - -
Наткнулся так же на ошибку DisAsm и одновременно особенность дизассемблируемого файла. Выглядит так
Код:
5599 036272 M36272:
U 5600 036272 016765 002540 000006 MOV M36276, 6(R5) ; Ошибка! Должно быть K41036
5602 036300 001402 BEQ M36306
6294 040632 M40632:
6295 040632 104405 TRAP 5
6296 040634 RETURN
; 40636: ; Этот адрес уже за пределами файла
То есть, я предполагаю, что в исходнике было что-то типа
Код:
6294 040632 M40632:
6295 040632 104405 TRAP 5
6296 040634 RETURN
; 40636: ; Этот адрес уже за пределами файла
.BLKB 200
.... 041036 K41036:
...
но особенность LDA формата в том, что .BLKB и .BLKW в выходной файлы не попадос :)
Я уже рисовал код для правильной работы с такими ОТСУТСТВУЮЩИМИ ячейками в LDA, но, видимо, не всё корректно в датском королевсте :) Будем смотреть и фиксить :)
Интересно, как с таким справляется всеми любимый IDA (да ещё что бы и на выходе был файл, который проходит компиляцию стандартным MACRO-11 !) :)
-
В целом, ошибка - да, именно ошибка. Так как в не LDA это как несколько нестандартная и, возможно, недопустимая ситуации. Особенно если учесть 67-ой режим адресации. DisAsm пытался пометить операнд как указатель, но не получалось (об этом дальше), а оно без проверки результата шло дальше. Это - пофиксил. Хотя (написанный мной ранее) код не понравился - в DisAsm есть несколько мест, где он начинает какие-то изменения во флагах ячеек, а потом по разным причинам сделанное отменяет. Вот этот подход - сделать и отменить - не понравился. Ещё и по причине того, что визуализация дёргается ажж два раза. Как сделать лучше - подумаю.
По особенности файла - как и ожидал - делал проверку - а не выходит ли адрес за пределы минимального и максимального адресов, которые были загружены из LDA. Подумал и пока закомментил проверку. Вроде как оказалось, что ситация встречается и поэтому не надо, но вдруг какие мысли ещё придут - что бы не вспоминать, чего написакал.
Играюсь дальше.
- - - Добавлено - - -
После исправленных в коде косяков сброса-генерации макровызовов (а потом в DisAsm-е много команд Clear и одна команда Code на каждый случай) и исправленного косяка и фичи генерации ссылок за пределы программы (а потом одна команда Clear и одна команда Code на каждый случай) результат автоматической генерации исходников из исходного .BIN файла и .BIN файла, полученного трансляцией и сборкой восстановленного .MAC) файла - идентичен. Из-за особенностей LDA формата сравнивать именно двоичные файлы бесполезно - не совпадут с вероятностью почти 100 процентов...
Для этой программы я уже начал допиливать .MAC файл, полученный ранее - попробую сравнить их по максимому - интересно сравнение сгенерённых и восстановленных руками макровызовов :)
- - - Добавлено - - -
Разборки с векторами, когда они не в адресном пространстве :) Ну примерно тоже, как с 67, только в этом случае DisAsm а) генерит правильный код (и будет с 67-ым) и б) отказывается делать вектор вектором (по секретной команде V) :)