Просмотр полной версии : Конвертор файлов ALASM в текст
CityAceE
28.07.2021, 10:23
Большая часть моих ассемблерных исходников находится в формате ALSM. Это не обычный текстовый формат - там для экономии памяти каждый оператор и операнд хранятся в упакованном виде. Поэтому, чтобы ознакомиться с исходником, его нужно либо загружать в ALASM и изучать там, либо предварительно конвертировать в текст. Для конвертации я использовал комплектный конвертер, который работает на Спектруме и конвертирует по одному файлу. Это, безусловно, неудобно, но про другие конвертеры я ничего не слышал. Поэтому для собственного удобства я написал скрипт на Python, который берёт TRD, SCL, HoBeta или уже выдернутый файл H, и конвертирует все найденные там исходники из формата ALASM в текст.
Использовать просто:
alasm2text.py filename.(trd|scl|$h|H)
Главное только, чтобы на компьютере был установлен Python 3.
После отработки скрипта, рядом с обрабатываемым файлом вы получите готовые текстовики в кодировке CP866 (DOS) с расширением .asm. В начало заголовка каждого файла добавляется счётчик, так как в TRD и SCL файлы могут дублироваться. Оригинальное название файла, которое берётся из заголовка исходника, добавляется в первый комментарий самого текста.
Особые усилия были предприняты для того, чтобы текстовые файлы выглядели именно так, как они выглядят в самом ALASM. Прежде всего это касается табуляций и пробелов. Я проверил на десятке файлов от разных авторов и вроде бы все проблемы поборол. Но это не точно :)
Также столкнулся с ситуацией, когда в ALASM строка "- INCLUDE "FILE"" отображается как "+ INCLUDE "FILE"". Не понимаю из-за чего это происходит, но делать с этим пока ничего не стал.
Хорошо бы там example какой-нить приаттачить и readme файлец
CityAceE
28.07.2021, 12:56
Нет никакого описания, кроме того, что приведено в первом посте. А что касается примеров, то можно, например, взять комплект того же ALASM (https://vtrd.in/system/ALASM509.zip), ну, или исходники (https://zx-pk.ru/attachment.php?attachmentid=75160&d=1617706345) TRDN (https://zx-pk.ru/threads/2952-tr-dos-navigator-(trdn).html).
CityAceE
29.07.2021, 22:18
Хоть кто-нибудь попробовал-то?
Наверное все пользуются моим конвертером 20-летней давности, который в 2013 году расширил Дмитрий (https://zx-pk.ru/members/4389-dmitrij.html) ;)
https://zx-pk.ru/threads/1356-konverter-iz-tasm-i-alasm-v-tekst.html
P.S. Дмитрий ещё вот такие коды добавлял:
case 0xE1: strcpy(str,"EXD"); break;
case 0xE2: strcpy(str,"JNZ"); break;
case 0xE3: strcpy(str,"JZ"); break;
case 0xE4: strcpy(str,"JNC"); break;
case 0xE5: strcpy(str,"JC"); break;
case 0xE6: strcpy(str,"RUN"); break;
Незнаю насколько они важны/нужны, но мне не попадались ;)
А так вроде всё совпадает
Попробовал, на TRD с ALASM и STS не все распарсило
python alasm2text.py ALASM509_STS75.TRD
Traceback (most recent call last):
File "/home/spiro/Downloads/ZX Spectrum/ALASM/alasm2text.py", line 177, in <module>
with open('{0:03}_{1}.asm'.format(file_number, alasm_name), "wb") as f:
FileNotFoundError: [Errno 2] No such file or directory: '065_SAVEBAS/.asm'
Причина оказалась в слешах в названии файла в TRD образе.
Простой фикс - заменить строки на
строка 12
file_name_trd = filedata_trd[begin + 0:begin + 8].decode().replace("\\"," ").strip()
строка 63
asm_name = databytes[0:8].decode().replace("/"," ").strip()
Rubts0FF
06.08.2021, 21:25
Вы маньяки, открыть .trd в Total Commander`е, посмотреть Lister`ом .H файл и скопировать в любой блокнот.
Black Cat / Era CG
06.08.2021, 21:27
Вы маньяки, открыть .trd в Total Commander`е, посмотреть Lister`ом .H файл и скопировать в любой блокнот.Надоть плагин inAlasm иметь ишшо.
Rubts0FF
06.08.2021, 21:32
Вы маньяки, открыть .trd в Total Commander`е, посмотреть Lister`ом .H файл и скопировать в любой блокнот.
Надоть плагин inAlasm иметь ишшо.
Я думал это по дефолту, для спектрумиста?!
Black Cat / Era CG
06.08.2021, 21:52
Я думал это по дефолту, для спектрумиста?!Не у всех даже ТС есть.
CityAceE
07.08.2021, 13:22
Наверное все пользуются моим конвертером 20-летней давности, который в 2013 году расширил Дмитрий
Я его увидел уже после того, как написал свой :) Ну и про плагин для Total Commander'а я совершенно забыл. Наверное, если бы я про всё это знал/помнил, то поленился бы писать что-то своё. Но в любом случае, у меня помимо самого перекодирования была цель обрабатывать целый TRD/SCL и я её достиг.
Незнаю насколько они важны/нужны, но мне не попадались
Я воспользовался данными, которые прилагались к оригинальному ALAMS, то есть к авторской документации. Конвертер писал для себя, а в имеющихся у меня в распоряжении аласмовских исходников таких кодов не было, но я на всякий случай тоже их сейчас добавил, раз такое дело ;)
Причина оказалась в слешах в названии файла в TRD образе.
Простой фикс
Спасибо за bug report и за фикс.
Дополненная и исправленная версия скрипта в первом посте.
Ну целый TRD/SCL это да - удобно :)
Bedazzle
21.08.2021, 20:59
была цель обрабатывать целый TRD/SCL и я её достиг.
Я в свои поделки на питонах заберу работу с трд, можно?
CityAceE
21.08.2021, 21:45
Я в свои поделки на питонах заберу работу с трд, можно?
Буду только рад!
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot