Просмотр полной версии : ZX Turbo Disassembler v2.00
Rubts0FF
25.04.2020, 19:00
По идее эту тему надо бы в раздел СОФТ, но учитывая назначение программы, решил все же сюда. Итак, фактически AboutMe с диска.
ZX Turbo Disassembler
version 2.0
(c) 1996 Инозецев Алексей
(с) 2020 V.Rubts0FF
Много раз я пытался дизассемблировать эту лучшую, пожалуй единственную программу, правильно выполняющую поставленную задачу -
получение исходных текстов исследуемого чужого, а иногда и своего кода.
Лично мне не хватало элементарных в общем вещей, и это:
1. Поиск по файлу
2. Закладки
3. При переходе по CALL / JUMP запоминать и возвращаться не только один последний адрес, но и еще хотя бы сколько.
Конечно это не единственное, но уже что то.
Многочисленные попытки не увенчались успехом, в какой то момент вносимые изменения приводили к потере
работоспособности программы. Причин здесь несколько и сейчас об этом не будем.
В очередной раз я вернулся к этой теме благодаря .., в общем я хотел перейти со своего "Шалаева" на что нибудь другое и
этим другим оказался xpeccy. Что бы привыкнуть, нужно что то делать и вот было решено в этом эмуляторе делать это.
К слову сказать, после двух вылетов, я даже не понял причин, на ровном месте, xpeccy был отложен в сторону и работа
продолжилась под эмулятором Шалаева
Вот и подошли к главному, но вначале о том что не сделано.
Сам дизассемлер не изменен никак, я собственно с ним особо не разбирался и понятия не имею как он работает, хотя он
мне кажется странным. Так что токеницация мнемноник z80 так же не изменилась.
Так же в угоду совместимости с оригинальной версией, адреса work-файла так же сохранились.
Что же изменилось:
1. исчез пунк View как бестолковый, после загрузки файла, Prog или Work, сразу попадаем в режим, так сказать редактирования.
3. вместо VIEW сделан пунк EDIT и он имеет пункты:
- Find - поиск, можно ввести как текст, так и hex, использовать маску;
- Find Next - продолжить с последней позиции;
¦ Goto addr - Переход по введенному адресу;
¦ Start Addr- определить начальный адрес программы, NewStart;
¦ DEC/Hex - переключение системы счисления dec/hex
¦ Save point- запомнить позицию в файле 10 ячеек.
¦ Goto point- перейти на одну из сохраненных позиций.
Все это так же вызывается из режима так сказать редактирования.
[m] - переход по введенному адресу;
[f] - Find
[n] - Find Next
[y] - Save point
[t] - Goto point - в ZAsm'е bookmark на тех же кнопках.
Так же, при переходе по адресу/метке CALL/JUMP - [j] - Jump, - Back реализован стек на 8 или 10 адресов, а не один как было ранее.
4. Пунк [B]Options - там ничего нет, так как нет места. Сейчас поясню.
Каждая ячейка памяти файла описывается 2-мя битами и для хранения этой информации, выделена память, для совместимости с оригинальной версией эти адреса трогать не могу и пока не хочу.
И вот зазор между программой и этой памятью совсем ничего 200-300 байт.
Решение есть, но эту пробную версию хочу оставить так как есть.
В общем с целью выявления ошибок, а они могут быть, хотя сейчас вроде бы все работает, но с имитировать все возможные
ситуации сложно.
5. Планы.
Перво-наперво все же разобраться с самим дизассемблером, мне это все то же не очень нравиться. Мнемоники z80 хотя и
считаются совместимыми с ZAsm'ом, но без импорта - syntax error. Как с этим бороться - еще не решил.
Что еще, хочу полный шрифт, хотя это и не так важно, хочу элементарные вещи по редактированию исследуемого файла, как в
самом обычном мониторе, в том числе FILL, COPY.
Но в ближайшие дни буду испытывать эту версию и прощу присоединиться к этому.
Так же выслушаю все пожелания и сообщения о найденных ошибках.
25.04.2020 V.Rubts0FF
В архиве zxd2exe.C - без basic загрузчика, вместо этого zxd2run - файл для ZAsm`а, так же несколько примеров включая ZXDv1 и AboutMe. Практически копия того что выше.
О, не только я дизасемблированийем занимаюсь в самоассимиляции.
Так, к слову, один известный дизасм, по крайней мере в той версии, что у меня, не понимает код 0ED 70, и говорит - отлюбись, это данные и все тут.
Rubts0FF
25.04.2020, 20:00
О, не только я дизасемблированийем занимаюсь в самоассимиляции.
Одно из интереснейших время препровождения. Особенно в былые времена. Правда чаще под STS`ом, но и этой софтиной пользовался часто. Бывает так же интересно и полезно посмотреть на свои собственные программы, с этой точки.
на чужие тоже интересно смотреть. ну тогда вот дизасменный код, три-пять строчки:
call loc_82C9+1
..
..
sub_82C7: ld a, 21h
loc_82C9 ld bc, 0CD3Eh
ld (loc_8408), a
ret
Какой сакральный смысл,( с т.з. программера) - переходить ( в данном случае call-ом ) в середину операнда, там другой код образуецца)?? и таких перехода как минимум три. А по другому не дизамблица, ибо на sub_82C7 то жи переходы есть:v2_dizzy_indy:
на чужие тоже интересно смотреть. ну тогда вот дизасменный код, три-пять строчки:
call loc_82C9+1
..
..
sub_82C7: ld a, 21h
loc_82C9 ld bc, 0CD3Eh
ld (loc_8408), a
ret
Какой сакральный смысл,( с т.з. программера) - переходить ( в данном случае call-ом ) в середину операнда, там другой код образуецца)?? и таких перехода как минимум три. А по другому не дизамблица, ибо на sub_82C7 то жи переходы есть:v2_dizzy_indy:
я такое на mos6502 регулярно встречал.
а это точно не часть защиты?
а это точно не часть защиты?
чехи писали. се может быть. но это уже код после кучи распаковок и расксорок и перемещений, это уже исполняемый код.И он работает, так что не особо важно, но просто интересно
call sub_82CA
..
..
sub_82C7: ld a, 21h
db 01h ;ld bc
sub_82CA: ld a, 0CDh
ld (loc_8408), a
ret
Это не защита, а экономия кода.
На MSX я очень часто видел целые цепочки таких конструкций, когда надо в одну ячейку писать разное содержимое. Надо только иметь ввиду, что в результате портится содержимое BC.
Rubts0FF
27.04.2020, 20:44
ZX Turbo Disassembler v2.01 - работа над ошибками.
@+* - я не знаю что это такое и о чем я думал заключая их в скобки. :-)
[@] Fix Error - при DEFB "&" только "", так как сивол "&" - управляющий код при печати - выделение символа красным цветом,
xor %10, горячая клавиша.
[@] Fix Error - выбор файла, при наличии в каталоге удаленных, адрес файла определялся неверно.
В режиме редактирования:
[+] SS+q в начало файла;
[+] ss+e в конец файла, насколько это получается.
[+] в режиме ввода, Input, SS+w меняет вид курсора Ins/Over, хотя программе ввода это все равно;
изменил подменю {Disassm}, пункты дизассм переместил вверх, вроде так логичней.
[+] Options - доступен пока вы не загрузили файл и работают не все пункты.
- не работает Save Setup
- не работает Load Font, он еще не используется в программе.
Что работает:
Keyboard - здесь можно вкл/выкл Beep'ер, насторить скорость опроса клавиатуры, скорость мерцания курсора и его вид, может быть Bold (#C0)
Colours - цвет можно настроить только для интерфейса, цвета дампа / листинга настроить сложно, так как в программе они не собраны
в определенных переменных, а разбросаны везде и я этим пока не занимался.
AboutMe - в общем бесполезное, но пока есть.
27.04.2020 V.Rubts0FF
В архиве кроме самого zxd2exe, загрузчик на бейсике и несколько примеров с work-файлами в том числе ZXD1.
Rubts0FF
28.04.2020, 11:19
ZX Turbo Disassembler v2.02 - возможно последняя версия. Все что запланировано на первом этапе сделано. Итак, начнем сначала, ReadMe с диска
ZX Turbo Disassembler
version 2.02
(c) 1996 Инозецев Алексей
(с) 2020 V.Rubts0FF
О самом дизассемблере лучше почитать описание к оригинальной версии, от ее автора.
Здесь же только о внесенных или не внесенных изменения, или отличия.
Сам дизассемблер не изменился никак и совместим с оригинальной версией, имеется ввиду возможность загрузить work-файл,
созданный прежней версией.
Так же никуда не делась эта странная токенизация мнемоник z80 - на этом этапе такая задача не ставилась.
Теперь об изменениях.
1. Исчез пунк меню VIEW, как ненужный
2. Появился пунк меню EDIT, который имеет следующие пункты:
- Find - поиск, можно ввести как текст, так и hex, использовать маску;
- Find Next - продолжить с последней позиции;
- Goto addr - Переход по введенному адресу;
- Start Addr- определить начальный адрес программы, NewStart;
- DEC/Hex - переключение системы счисления dec/hex
- Save point- запомнить позицию в файле 10 ячеек.
- Goto point- перейти на одну из сохраненных позиций.
Все это так же вызывается из режима так сказать редактирования. Об этом подробнее в "help".
4. Options - имеет слудуюшие пункты:
Keyboard - здесь можно вкл/выкл Beep'ер, - настроить скорость опроса клавиатуры, скорость мерцания курсора и его вид, может быть Bold (#C0)
Colours - цвет можно настроить только для интерфейса
SaveStup - Сохранить настройки и после следующем запуске "ZXD2", настройки будут загружены с файла "zxd2set"
AboutMe - в общем бесполезное, но пока есть.
28.04.2020 V.Rubts0FF
Так как большинство, включая меня, никогда не читают "Руководства пользователя", короткий "Help" с диска.
ZX Turbo Disassembler
version 2.0x
Help
Собственно перечень кнопок при работе с дампом/листингом файла, редактировании так сказать.
Общие кнопки:
SS+3 - переключение системы счисления Hex/DEC;
SS+4 - переключение режима Disasm/Hex
SPACE - выход в основное меню;
CS+4 - станица вниз;
CS+5 - страница вверх или наоборот;
CS+5,6,7 - перемещение курсора;
SS+Q - в начало файла;
SS+E - в конец файла;
1 - определить блок как DEFB;
2 - /-/-/-/-/-/-/-/-/-/ DEFW;
3 - /-/-/-/-/-/-/-/-/-/ ASM;
4 - /-/-/-/-/-/-/-/-/-/ DEFS;
q - отметит начало блока;
a - отметить конец блока;
z - выключить отметку;
y - сохранить позицию;
t - перейти на одну из сохраненных позиций;
m - перейти на введенный адрес;
f - поиск, открывается диалог;
n - продолжить поиск;
Кнопки в режиме DISASM
j - перейти на адрес под курсором, в случае инструкций call/jump;
l - переключение метка/не метка, например в случае: LD BC,L7FFD - это не метка, а
порт переключения страниц и так можно это отключить.
b - возврат с перехода по [j], в этой версии переходы можно делать многократно.
r - поиск откуда вызывается этот адрес/метка
R - продолжение поиска [r]
i - проверка наличия неверных call/jump, например если вызов ведет внутрь блока DEFS;
I - продолжение поиска неверных [i] call/jump;
Кнопки в режиме HEXDUMP
CS+9 - переключение курсора между hex/ascii дампом;
Похоже все.
28.04.2020 V.Rubts0FF
Прежде чем что то делать дальше, хочу по-пользоваться этим. Вот например завис вопрос, нужен ли полный (256 символов) шрифт, когда то казалось что очень нужен, сейчас в этом уверен не так и хватает ПЗУ-шного.
Ладно, найдете глюки - сообщайте, будут пожелания - так же пишите сюда. На zx.pk.ru захожу довольно редко, просматриваю чаще. Поэтому сообщение в теме я увижу быстрее, а "личке" оно может проваляться не одну неделю.
З.Ы. Самое главное, и в "ReadMe" тоже нет. Пункт меню "Options" становиться недоступным после операции дизассемлирования на диск, точнее
если встретиться инструкция DEFS - что фактически INSERT, вот эта операция его, "Options" и прибивает. Ну уж пока так.
Rubts0FF
30.04.2020, 14:28
ZX Turbo Disassembler v2.02 - возможно последняя версия - ха-ха-ха.
Когда занимаешься какой то частью программы об остальном забываешь. В общем внесены некоторые изменения.
Когда дизассемблировал ZXD2 - обнаружил пп. без RET.
Сообщения об ошибках - выглядело это ужасно, сейчас должно работать правильно;
Что еще - Числа в HEX сделал по умолчанию.
Да, при просмотре каталога/выборе файла - курсорные кнопки - перемещение по каталогу;
CS+1 - меню выбора дисковода;
SS+0 - +/- удаленные файлы в каталоге;
Что еще, в начале я собирался в архив добавлять и исходные тексты, да и сейчас об этом думаю, просто пока идет тестирование в общем. А вот потом задумался, с учетом назначения программы, может это и не надо. Пока вопрос открытый.
Bedazzle
30.04.2020, 17:12
Когда занимаешься какой то частью программы об остальном забываешь. В общем внесены некоторые изменения.
В спекуляторе открываю трд, делаю лист. Показывает первый экран файлов, нажимаю клавишу, показывает второй.
Вроде всё хорошо.
Тут же повторяю лист - вываливается ошибка.
В эмузвине нормально.
https://i.imgur.com/gdwQk2U.png
Rubts0FF
01.05.2020, 14:59
В спекуляторе открываю трд, делаю лист. Показывает первый экран файлов, нажимаю клавишу, показывает второй.
Вроде всё хорошо.
Тут же повторяю лист - вываливается ошибка.
В эмузвине нормально.
https://c.radikal.ru/c04/2005/f5/fd66ea6d867f.jpg (https://radikal.ru)
?
Rubts0FF
11.05.2020, 11:21
ZX Turbo Disassembler v2.04 - изменения:
Не много изменена структура программы и дизассемблирование DEFS - то есть INSERT
Подробности наверное не интересны, но раньше INSERT файл собирался в странице 0, и была возможна ошибка - вылет,
если DEFS был больше размера страницы (#4000).
Сейчас файл открывается на запись и по-байтово можно записать сколько угодно.
Главное, что теперь можно использовать эту страницу [0] для собственных нужд и уже используется. Часть пп. перенесена туда и OPTIONS доступен всегда.
Похоже это не последняя версия, так как хочу:
Spaces Compressor - счетчик пробелов - вывести в настройки и возможность заменить на пробелы, что бы не только ZAsm понимал.
PHASE - UNPHASE - что бы отмеченный блок дизассемблировался как будто он находится в других адресах. Вот только как это сделать пока не знаю, так как с самим дизассемблером еще не разобрался.
По мере работы в программе появляются всякие идеи по улучшению, PHASE-UNPHASE из этой оперы.
Открытым остается вопрос со шрифтом (2048), самому дизасму он как пятое колесо, но интерфейс бы оживил и место под него сейчас есть. И наличие исходных текстов в архиве с программой.
з.ы. у нас сегодня праздник, как какой - "День Республики", а я еще .., надо исправлять.
ZX Turbo Disassembler v2.04 - изменения:
а я еще .., надо исправлять.
Привет...
Все хорошо...
Только софтина - работать перестала...
Alasm 5.09 -
на полученный от дизассемблирования текст пишет -
wrong text...
???
Alasm 5.09 -
на полученный от дизассемблирования текст пишет -
wrong text...
???
ты его импортировал?
Собственно - да...
Через команду - Import...
Исходная софтина - дизассемблер от Иноземцева -
работает нормально...
Rubts0FF
31.07.2020, 10:16
Исходная софтина - дизассемблер от Иноземцева -
работает нормально...
Значит это не исходная софтина. Есть пару версий, оригинальной .. версии, отличается тем что на выходе текст/файл в формате обычного текста. Оригинальная, от автора (не меня) отличается наличием SPaces Compressor`а (6, число пробелов+#80), то есть в формате ZAsm v2.4/2.5 где программа похоже и писалась. Я в этом отношении ничего не менял, так как ZAsm отлично загружает дизассемблированные файлы, правда все же нужно Import`ировать. Вариант с обычным текстом .., меня и так устраивает, а другого никто и не просил. Похоже скоро вернусь к ZX Spectrum`у вообще и ZX Turbo Disassembler`у v2.x в частности. Оказалось полный шрифт все же нужен, пришлось ковы..., исследовать программу написанную "нашими" и там тексты, в общем их хочется видеть, а не просто DEFB #.
Поскольку когда это произойдет я не знаю, сейчас можно просто загрузить полученные тексты в ZAsm и сделать Export в обычный текст. Это не совсем удобно, но как уже говорил - другого не просили.
Rubts0FF
07.09.2020, 12:51
ZX Turbo Disassembler v2.06 - Главное изменение - полный шрифт, но пока толку от него не много, так сказать разницу можно увидеть только при просмотре HEX-Дампа. Здесь можно увидеть символы как с кодом меньше #20 (32), так и с кодом больше #80 (128), переключаются:
[!] SS+1 - char code <#20 char или символ превдографики
[@] SS+2 - char code >#80 char или символ превдографики.
Получить символы >#80 (128) в defb пока не получается. Внутренняя программа дизассемблирования использует свою токенизацию, думаю для ускорения процесса и коды >#80 заняты под токены.
Я еще во всех этих подпрограммах не очень разбирался.
Небольшое изменение по поиску:
[f] - Find, окно ввода данных и т.д.
[n] - Find Next, от последнего поиска
Новое:
[N] - Find Next, от текущего адреса
[F] - Find Again - от начала файла.
ZX Turbo Disassembler v1.0 написан в ZAsm v2.4/5/3, во всех версиях ZAsm используется упаковка пробелов.
Код 6, число пробелов+#80.
В этой версии упаковка пробелов отключена, возможно позже будет вынесено в настройки.
Пока все, тестировал не очень, w-work файлы от 'старой' версии принял нормально.
p.s. найдете глюки - пишите сюда.
Rubts0FF
05.02.2021, 02:54
ZX Turbo Disassembler v2.06 Source Code - по просьбам трудящихся, :-), в общем собирался отправить лично, но затем подумал - почему и нет.
Пару слов, все мои изменения коснулись в первую очередь интерфейса программы, собственно он переписан с нуля.
Так же были добавлены некоторые полезные, с моей точки зрения, вещи, такие как:
1. Поиск
2. Закладки
3. Стек/вложенность при переходе на адрес под курсором.
4. что то еще, не важно, а важно то, что сам дизассемблер не изменился никак.
Поэтому остались две важные вещи, два буфера, в одном (192 байта) храниться информация о каждом адресе, определялся он
как DEF? или ASM (1-4) один адрес-один бит и второй - массив на каждый адрес-два бита (0-3), (DEFB,DEFW,DISASM,DEFS/INSERT).
В общем какие бы изменения не вносили в программу заходить дальше #8FAA - не стоит, более того, здесь лучше всего
оставить как есть, для совместимости версий, что бы wrk-файл созданный в любой версии в любой же и открылся.
В остальном - все что угодно.
Собственно (ц) по прежнему принадлежит Иноземцеву Алексею.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot