Просмотр полной версии : DisAsm-11
Для образов системы некоторое количество неточностей и ошибок исправлено. Ещё тесты - на других образах и .TSK файлах
При разборе полётов в образе P/OS обнаружился забавный нюанс оной. Даже в поставке для разработчиков из файла глобальных символов (может, конечно, мне с конкретной поставкой так свезло) ака .STB - отсутствуют символы для слов масок фич 2, 3, 4 и 5. Почему так - могу только предположить, но выглядит так, как будто DEC старательно тормозило сторонних разработчиков всякого, имеющего доступ к ядру системы. Потом гляну на другие варианты P/OS, для которых так же есть .STB - как оно там.
Уф.. Что-то задолбался руками тесты прогонять (большая часть из которых - загрузить файл и сгенерить исходники. Надо посмотреть, что там сломалось в работе из командной строки при очередной доработке и пофиксить
Вспомнил, что сломалось в разборке командной строки :) Стали по другому (доработка в плане избавления части DisAsm от PDP-11 зависимости) передаваться некоторые параметры в методы парсинга. По быстрому сделал фикс под образы RSX, так что теперь тесты можно гонять командниками.
Очередная порция обнаруженных ошибок и не доработок пофиксина. Но всё ещё тесты..
Устал от DisAsm-а :) И по взаимосвязанным секциям пока ничего путного в голову не приходит - значит - перерыв.
Начал разбирать файлопомойку и как обычно - постоянно используемый инструмент - ImageUtils :) Налетел на ошибки - и переключился на него. Дальше в его теме :)
Начал разбирать файлопомойку
Что нибудь интересное нашли?
Она до какой-то степени разобрана, но есть большой каталог, где пока конь не валялся - а там есть и относящееся к DEC, но есть ли что-то интересное - пока не знаю..
Кроме того - много образов дисков и лент, до которых я ещё не добрался ImageUtils - в их содержимом тоже может быть что-то интересеное...
Плюс есть некоторое количество зеркал (полный и не очень) сайтов - та же хрень :)
Для возможности использовать функционал DisAsm11 в других программах (типа - API) - внутренняя перетряска и резка зависимостей. Не могу сказать, что уже все сделано - но ещё некоторое количество подвижек.
Использовал функционал в ImageUtilsX для дизасма (пока) первичного загрузчика дисков RT-11 :)
Но свободное время закончилось, опять рабочие дни..
Как обычно после более-менее существенной доработки, а часто и без неё - некоторый рефакторинг по результатам понимания процесса и написанного кода :)
Вожусь с внутренней перетряской DisAsm11 (более правильный вариант работы с WPF - шаблон MVVM). Да, надо было с самого начала делать "по правильному", но.. Некоторые вещи не понятно было как сделать в WPF - и сделал, как получилось :) Постепенно набрался опыта - и много из непонятного стало понятным :) Но... Снаружи это не как не видно, это больше вариант - как сделать проще написание, в том числе - DisAsm11 :)
Так вот.. Возился я, возился, и вдруг пришло в голову странное :) Попробовал.. хм.. Работает :) Итак, вниманию всех представляется...
Метка на .TITLE :)
Test MACRO V05.06R Thursday 31-Jul-25 00:04 Page 1
1 000000 TEST: .TITLE Test
2 .IDENT /KXX.01/
3
4 .MCALL .EXIT, .PRINT
5
6 000044 $JSW =: <^o44>
7 000400 CHAIN$ =: <^o400>
8
9 000054 $SYPTR =: <^o54>
10
11 000300 CONFIG =: <^o300>
12 000040 CLK50$ =: <^o40>
13 100000 CLOCK$ =: <^o100000>
14
15 000000 .ASECT
16
17 000044 .=$JSW
18 000044 000400 .WORD CHAIN$
19
20 000500 .=^O<500>
21
22 000500 START:
23 000500 012737 000100 000004 MOV #100, @#4
24 000506 012737 000340 000006 MOV #340, @#6
25
26 000514 013705 000054 MOV @#$SYPTR, R5 ;Get the pointer to the base of the RMON
27 000520 052765 100040 000300 BIS #CLOCK$!CLK50$, CONFIG(R5)
28 000526 010701 MOV PC, R1
29 000530 062701 000020 ADD #MESS-., R1
30 000534 .PRINT R1
31 000540 .PRINT #MESS-.
32
33 000546 .EXIT
34 000550 MESS:
35 000550 124 105 123 .ASCIZ /TEST/
000553 124 000
36 .EVEN
37
38 000500 .END START
Test MACRO V05.06R Thursday 31-Jul-25 00:04 Page 1-1
Symbol table
CHAIN$ 000400 CLOCK$ 100000 MESS 000550 TEST 000000R $SYPTR 000054
CLK50$ 000040 CONFIG 000300 START 000500 $JSW 000044 ...V1 = 000003
. ABS. 000556 000 (RW,I,GBL,ABS,OVR)
000000 001 (RW,I,LCL,REL,CON)
Errors detected: 0
*** Assembler statistics
Work file reads: 0
Work file writes: 0
Size of work file: 10565 Words ( 42 Pages)
Size of core pool: 16128 Words ( 63 Pages)
Operating system: RT-11
Elapsed time: 00:00:00.01
DK:TEST,DK:TEST=DK:TEST
Если посмотреть таблицу символов, видно, что метка TEST - относительная и - раз ни какой секции ещё на было заявлено - она в секции .PSECT :)
НА вопрос - нафига такое нужно - у меня ответа (возможно пока) - нет :)
В общем, попытка переделки внутренностей 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
Погонял на других типах файлов. В целом - основной функционал - ок. Некоторое количество (порядка 4-ых) ошибок из-за неучтённых сценариев и доработка парсера CIL - я с ним прервалася до того, как реализовал полноценный вариант ссылок на ячейки памяти ЗА пределами модуля, включая оверлеи.
Остальные идеи (из нереализованного в https://zx-pk.ru/threads/32983-disasm-11.html?p=1218411&viewfull=1#post1218411) - нужно обдумывание, так что - не сейчас. Пока меня больше интересуют исходники P/Os :)
Не сдержался :)
Пока ОЧЕНЬ концепт (http://www.kpxx.ru/Soft/Utils/DisAsm11/DisAsm11-098.jpg)
И делалось для проверки-выявления-оценки зависимостей ядра DisAsm от PDP-11.
Вариант загрузки образа ПЗУ и визуализация в виде .BYTE xxx занял примерно три вечера по полтора-два часа и часа два сегодня. Плюс ещё примерно полчаса-час на добавление двух инстркций :)
Предварительная оценка - выявленных зависимостей - очень мало, кое что уже пофиксино, но основная зависимостей - набор команд (и кнопок). Над чем неспешно и буду работать.
Периодически буду продолжать работу по добавлению очередной порции инструкций, но есть некоторая проблема - на языке ассемблера не программировал, так что параллельно предстоит разборка с его архитектурой, командами, режимами адресации и ассемблером Macro-32 :) Так что ожидать скорого появления такого же функционала, как для PDP-11 - не стоит.
Ну и из готового - автогенерация меток для ссылок, показ списка ссылок, .ASCIZ ... :)
Основная проблема декодера команд (ну по крайне мере для меня сейчас) - менее предсказуемая длина команды - её, как правило, нельзя оценить по первому байту команды. В отличии от PDP-11, где по первому слову команды сразу ясно - 1, 2 или 3 слова. Поэтому подход, который был использован для PDP-11 - менее применим..
Расписал заготовки для всех (ну, по крайне мере по EK-VAXAR-RM-001) команд VAX-11
Пытаюсь разобраться с методами адресации (точнее - с некоторыми вариантами) - всю голову уже сломал.. Пока много не понятного.. Э.. Точнее - много вопросов без ответов.. Надо сделать стенд с VMS, что бы Macro32 подсказывал..
Там на некоторых моделях VAX можно дополнительные команды вводить, если очень надо(с ограничениями конечно), через микропрограмму, но, чтобы это кто-то на практике применял, я упоминаний не видел.
Там на некоторых моделях VAX можно дополнительные команды вводить
Это не только на VAX-ах, такоe возможно как минимум на LSI-11 (который 581-ый), на PDP-11/40 (вариант -11/40E), и из того, что память подсказывает - вроде было ещё на -11/44 и -11/60
shattered
06.10.2025, 22:06
кстати о LSI-11 (processor handbook)
opcode 00021R читает внутренние регистры микрокода
opcode 000220 делает переход на микроадрес 3000, или trap to 10, если его не существует
Способность интересная, но ни одного упоминания применения на LSI-11 и PDP-11 не слышал :( В теории реально.
Про VAX было упоминание, вычисления каких-то хитрых полиномов посредством добавочных команд... Но как именно это реализовано не говорилось. Даже не говорилось кто этим занимался.
ни одного упоминания применения на LSI-11 и PDP-11 не слышал
Попадалось. И где-то вроде даже примеры - как сделать - валяются.
От DEC есть доки, хрень называется Writable Control Store (WCS), но есссвенно - оно разное для LSI-11 и VAX-ов
- - - Добавлено - - -
О, даже нашёл :)
;THIS IS AN LSI-11 MICRO CODE SUBROUTINE
;TO MOVE A BLOCK OF MEMORY FROM ONE PLACE TO SOME PLACE
;ELSE.
; THIS ROUTINE ILLUSTRATES...
; 1) HOW A LONG RUNNING MICROCODE SUBROUTINE ENSURES THAT
; PENDING INTERRUPTS GET SERVICED IN A TIMELY FASHION.
; THE INPUT PARAMETERS ARE
; R0:SOURCE ADDRESS
; R1:DESTINATION ADDRESS
; R2:NR. OF WORDS TO BE MOVED
LOC 3000
JMP 0
JMP MOV
JMP 0
ERROR: JMP 0
LOC 3004 ;UNNECESSARY,JUST FOR CLARITY.
;AN INTERRUPT HAS OCCURRED. MUST SUSPEND THIS OPERATION
;IN SUCH A WAY AS TO ALLOW THE OPERATION TO BE RESUMED RATHER
;THAN RESTARTED AFTER THE INTERRUPT HAS BEEN PROCESSED
;TO ACCOMPLISH THIS IT IS NECESSARY TO UPDATE THE INPUT PARAMETERS
;AND BACK UP THE BASE MACHINE PROGRAM COUNTER, THEN EXIT
;MICROCODE. IN THIS WAY THE INTERRUPT WILL BE PROCESSED, AND
;THE NEXT INSTRUCTION FETCH WILL AGAIN EXECUTE THE 076000 INSTRUCTION
;ONLY NOW WITH UPDATED VALUES IN THE SOURCE, DESTINATION, AND SIZE
;PARAMETERS
LL 0,RIRH ;UPDATE LSI-11 R0 TO POINT TO
LGL RIRH ; NEXT SOURCE WORD
MW RSRC,G
LL 1,RIRH ;UPDATE LSI-11 R1 TO POINT TO
LGL RIRH ; NEXT DESTINATION WORD
MW RDST,G
AL 376,PCL,RSVC ;DECREMENT BASE MACHINE PC BY TWO
CDB PCH ;AND EXIT MICROCODE
;PROCESS THE BLOCK MOVE INSTRUCTION
MOV: CL 175,RIRL ;LEGAL INSTRUCTION?
JZBF ERROR
AL 100,RIRH ;IF LEGAL C8=1
JC8F ERROR
LL 0,RIRH ;COPY CONTENTS OF LSI-11 R0
LGL RIRH ; INTO MICRO-REG RSRC
MW G,RSRC ;GET SOURCE BLOCK ADDR
LL 1,RIRH ;COPY CONTENTS OF LSI-11 R1
LGL RIRH ; INTO MICRO-REG RDST
MW G,RDST ;GET DEST BLOCK ADDR
;FROM THIS POINT ON
LL 2,RIRH ;MICRO REG G WILL ALWAYS POINT TO
LGL RIRH ; LSI-11 REG R2 (WORD COUNT REG)
TW G,G ;IS THE WORD COUNT REG (R2) = 0?
JZBT EXIT
LOOP: RIW2 RSRCH,RSRCL ;PUT SOURCE ADDR. ON DATA ACCESS LINES.
;(ALSO BUMPING SOURCE ADDR POINTER).
DW1F G,G ;TAKE ADVANTAGE OF IDLE TIME TO UPDATE
;CONTENTS OF LSI-11 R2
IW ,RBA ;COPY SOURCE OPERAND INTO SCRATCH
WIW2 RDSTH,RDSTL ;THEN MOVE WORD BACK OUT TO DEST
OW RBAH,RBAL ; BLOCK ALSO BUMPING DEST ADDR
SI I6 ;THIS FLAG ALTERS THE INTERRUPT DECISION CHAIN
;SUCH THAT AFTER THE EXECUTION
;OF A MICRO CODE RSVC, CONTROL
;WILL BE RETURNED TO THE MICROCODE
;IN ONE OF TWO WAYS. IF AN INTERRUPT
;IS PENDING CONTROL WILL GO
;TO MICRO LOCATION 3004. IF NO
;INTERRUPTS PENDING CONTROL WILL
;GO TO THE INSTRUCTION FOLLOWING
;THE RI INSTRUCTION.
NOP RSVC ;EXIT TO SERVICE ANY INTERRUPT
RI I6 ;RESET FLAG
;CONTROL RETURNS HERE IF NO
;INTERRUPT.
JZF LOOP ;IF ANY MORE WORDS, MOVE THEM.
EXIT: NOP RSVC ; ELSE, RETURN TO BASE MACHINE
NOP
.END
- - - Добавлено - - -
.TITLE MICRO ASSEMBLER
.SBTTL YET TO BE IMPLEMENTED FEATURES
Подход к декодированию команд и операндов для VAX сильно отличается от того, как я сделал для PDP-11.
Отработал на CMPB, а потом в лоб добавил MOVB (http://www.kpxx.ru/Soft/Utils/DisAsm11/DisAsm11-099.jpg)
С MOVB повезло - те же режимы адресации :)
Помимо кнопки Код проверил (более менее) кнопку Сброс
Понемногу движение вперёд (http://www.kpxx.ru/Soft/Utils/DisAsm11/DisAsm11-100.jpg)
Часть функционала достаётся почти даром - как результат доработок для PDP-11, но встречаются и свои трудности. Одна из них - БОЛЬШОЕ адресное пространство. Поэтому некоторые решения, прокатывающие для PDP-11 - не подходят для VAX-11..
Команды процессора добавляются по принципе - та, накоторый дизасм остановился :)
- - - Добавлено - - -
Надо найти листинг побольше.. А то описание в документации - так себе - не очень много примеров синтаксиса.. приходится гадать - насколько правильно генерируются команды...
Уф... Я ошибся - у VAX-а может быть до 6 операндов:v2_dizzy_facepalm:
Но DisAsm-у всё равно - сколько операндов - окна операндов он создаёт динамически - количество указывается в описании соотвествующего объекта.
- - - Добавлено - - -
В общем, на текущий момент все однобайтные инструкции для декодирования описаны, но
- один режим адресации (индексный) пока не реализован - надо подумать, как его вписать в модель аттрибутов инструкции.
- инструкция CASE - отдельный прикол - после неё может идти МНОГО описания смещений - как с ними работать - надо подумать, но скорее всего будет ручной вариант
- у инструкции EDITPC один из аргументов - ссылка на таблицу описания комманд-аттрибутов - которую тоже можно распарсить, но пока не.
- результат дисзасм пока никак не проверить
- может, что-то ещё
- - - Добавлено - - -
А, да, оказывается для VAX-ов ещё делалось векторное расширение :) До него тоже пока - не :)
Индексный режим вроде тоже ожил. Зачистка огрехов. Ну и в отличии от PDP-11, где я программу понимаю в лёт, тутова не всё так простова...
- - - Добавлено - - -
Ещё движение вперёд (http://www.kpxx.ru/Soft/Utils/DisAsm11/DisAsm11-101.jpg)
Теперь надо придумать способ, как всё это проверить..
В общем, ещё некоторое время погоняю дизасм для VAX-ов на предмет ошибок, а так же, по возможности, поудаляю из визуализации зависимости от PDP-11 и VAX и на этом, наверное, с дизасмом для VAX-11 всё. Попробую так же поискать исходники ПЗУ начальной загрузки - вдруг получится найти под какую-то модель - тогда можно будет оценить точность дизасма. Так надо подумать над созданием стенда (на simh), что бы как никак, но можно было транслировать-собирать и проверять качество дизасма. Собственно - то, что я делал для PDP-11, но там всё прощё было - опыт, как никак, присутствовал..
В общем, листинг, более менее совпадающий с двоичным файлом - нашёлся, так что есть на чём проверить. Чем и буду заниматься - ошибки в дизасме точно есть, уже убедился..
- - - Добавлено - - -
В декодере команд нашлась существенная ошибка. Она влияет на небольшое количество команд, но часть из них связана с переходом на другие команды - а вот это уже влияет на процесс дизасма весьма существенно. Как поправить - уже понятно, но.. придётся изменять описание команд для декодировщика. Порядка 250 штук :) То есть долго и нудно. И из-за нудности - риск ошибиться.. Порядка 77 уже поправил (с ними было легче), надеюсь - без ошибок :)
Поправил ошибку, связанную с описанием длины операндов (см. пред сообщние) - в описании команд и в декодере. Вроде теперь всё выглядит норм и даже начинает совпадать с листингом.
Как обычно - опять проверки. Визуальные и на совпадение с листингом. Плюс доработка команд и отвязка зависимостей визуализирющей части от PDP-11 и VAX-11
И ещё немного вперёд... (http://www.kpxx.ru/Soft/Utils/DisAsm11/DisAsm11-102.jpg)
Привет, попробуй вот это тут совсем мало, но хоть что-то.
https://zx-pk.ru/threads/35186-tsp-m10-kvi-ms0107-(microvax-ii).html?p=1183057&viewfull=1#post1183057
попробуй вот это
Привет, Саш! Ты имеешь ввиду - попробовать дезассемблировать твою программу чтения ПЗУ?
Да
Да, неплохой вариант :) Вечером попробую :) Спасибо!
попробуй вот это тут совсем мало
Проверяй :)
Исходник (http://www.kpxx.ru/Soft/Utils/DisAsm11/VAX-ROM-READ.MAR.txt)
И листинг... (http://www.kpxx.ru/Soft/Utils/DisAsm11/VAX-ROM-READ.LIS.txt)
BlaireCas
19.10.2025, 15:37
А нельзя-ли программу сделать не RequestWare а там ну не знаю даже ShareWare шаровары одним словом. Чтобы можно было вот зайти в первую страницу - увидеть ссылку "скачать".
Пофигу там рабочий не рабочий вариант (специально написать мол софт всегда в разработке, матюками крыть меня не надо). :)
Но чтобы его одним словом сразу можно было скачать. Софт хороший я юзал древнюю версию какую-то и вполне даже помогала.
сразу можно было скачать.
Есть такое в мыслях. Но точно не раньше, чем DisAsm будет разделён на части. Визуализирующую и дизассемблирующую.
Это, в частности, позволит решить проблему сеансов - сейчас сеанс, созданный в одной "версии" программы - с большой вероятностью не загрузиться в более новой. Когда то думал над написанием конвертеров (из более старой в более новую версию), но.. там конвертеры получались больше самой программы.
После распила будет .exe-шник, который собственно будет визуализировать, ну и некоторые сервисные функции выполнять (типа открыть файл, сохранить сеанс, сгенерировать разное) и dll, которая будет дизасмить и выполнять всякие команды типа - пометить ячейку как Ascii или ещё как-то. Вот эти dll можно сделать версионными и тогда сеанс будет подгружаться и отправляться в работу в нужную версию dll. Коих может быть сколько угодно. Не только на разные процы, но и разные версии под один проц.
Чем, по большей части, я сейчас и занимаюсь. В частности, за выходные получилось так:
То, что выделено - пока ещё жестко зашито (подумать надо, как отвязать) (http://www.kpxx.ru/Soft/Utils/DisAsm11/DisAsm11-103.jpg)
Остальное (ну кроме самой первой линии с кнопками типа Открыть, Сохранить, Сгенерировать) - генерируется по всякой информации из модулей дизасма, коих сейчас два.
Кнопки первой линии тоже не зависят от конкретного проца, но показываются всегда, так как с них начинается работа)
На текущий момент - так... (http://www.kpxx.ru/Soft/Utils/DisAsm11/DisAsm11-104.jpg)
... и вот так (http://www.kpxx.ru/Soft/Utils/DisAsm11/DisAsm11-105.jpg)
То, что в окне - всё определяется по соотвествущим описаниям дизассемблируемой сущности и отрисовывается динамически.
То, что за окном (без кнопок, только шоткаты) - вставка и редактирование комментариев, копи-паст и поиск - пока зашито. Вырезание этого - следующие шаги
На текущий момент остались жёстко зашитыми команды редактирования комментария, поиск (в трёз вариантах) и копи-паст. Учитывая, что они, фактически, не зависят от процессора - скорее всего они такими и останутся..
- - - Добавлено - - -
Вдогонку. Бонус переделок стало - возможность добавлять не только блочный комментарии - но и некоторые другие типы ячеек-операторов 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, она и подгрузилась (http://www.kpxx.ru/Soft/Utils/DisAsm11/DisAsm11-106.jpg)
Если же просто открыть файл для дизассемблирования, будет подгружена "последняя" (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# наконец разродилось - процесс пошёл :) Программа большая, процесс будет долгий, как будет что показать - создам тему :)
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot