Разработка и ромхакинг > Ромхакинг
Извлечение BASIC-программ для ZX Spectrum из файлов .sna
(1/1)
Arigato:
ZX Spectrum 48K - BASIC

Как-то давно писал небольшую утилиту, которая позволяет открыть файл из эмулятора ZX Spectrum в формате .sna, извлечь из него программу на BASIC и сохранить ее в текстовый файл или скопировать в буфер обмена. Выложу ее тут, чтобы не потерялась, может кому пригодится. Прилагаются и исходники программы на Delphi (папка source).



Заодно схема для подсветки синтаксиса ZX Spectrum Basic в редакторе Nonepad++.
Для установки запустите Notepad++, меню "Синтаксисы" - "Пользовательский синтаксис" - "Задать свой синтаксис...", нажать кнопку "Импорт" и выбрать файл zx_basic.xml
Все файлы с расширением .bas будут открываться с установленной подсветкой.

Lunar Laser:
Приветствую, вопрос есть к тебе.

В программах, писанных на Бейсике для ZX Spectrum, используются 22 строки вместо 24-рёх.

Их защищали от взлома по BREAK командой POKE 23659, 0 (системная переменная DF_SZ), заодно получая 24 строки.
Похоже, из наиболее известных, так защищён басичный "Подкидной Дурак" от Медноногова.

Можно эту неприятность как-то поправить в эмуляторе и получить доступ к исходному коду таких программ?
blackoff:
а sna  это разве не копия памяти как по магич кнопке , там уже память может быть заменена другими ресурсами после запуска...
Arigato:

--- Цитата: Lunar Laser от 22 Май 2023, 18:49:53 ---Можно эту неприятность как-то поправить в эмуляторе и получить доступ к исходному коду таких программ?
--- Конец цитаты ---
Достаточно поменять значение системной переменной 23659 с 0 на 2, после чего BREAK сработает.
Например, в эмуляторе ZXMAK2 это меню Tools - Debugger, далее надо найти адрес 23659 (в hex: 5C6B). Не очень удобный там интерфейс, листаем адреса вниз клавишей PageDown, встаем в нужную ячейку:


Нажимаем Enter и вводим нужное значение:


Теперь в эмуляторе срабатывает комбинация Ctrl + Space (это и есть кнопка BREAK в Спектруме).

Командой LIST (кнопка K на клавиатуре) можно вывести листинг Бейски-программы. Но может быть установлена защита цветами, из-за чего получим ошибку листинга:


Тогда стрелкой вниз опускаем курсор на первую строку с программой или выполняем команду LIST с номером строки, чтобы на нее перепрыгнуть (вроде если в программе есть строка 0, то стрелкой вниз с нее не уйти, хотя может и ошибаюсь, давно Спектрумом не занимался):



blackoff:

--- Цитата: Arigato от 23 Май 2023, 12:53:20 --- Но может быть установлена защита цветами, из-за чего получим ошибку листинга
--- Конец цитаты ---
после 1 REM может идти машинный код ...
Arigato:
Да, в Диктаторе вроде бы там как раз машинный код и спрятан (всякие визуальные и звуковые эффекты). Одновременно работает как элемент защиты программы на BASIC от чтения. Хотя защита ну очень тупая, обходится самыми простыми методами...
blackoff:
проще из тap ,наверно ,или что там еще есть ,отдельными файлами ,если есть внутри извлекать ,sna это уже запущенная игра с отработанным кодом... некоторые игры память используемую бейсиком затирают под свои нужды после запуска игры ...

Добавлено позже:

--- Цитата: Arigato от 23 Май 2023, 15:16:13 ---обходится самыми простыми методами...
--- Конец цитаты ---
я вроде XORил чтоб не прочитать было ,но все ломалось ,прикольно было ...
Lunar Laser:

--- Цитата: Arigato от 23 Май 2023, 12:53:20 ---Командой LIST (кнопка K на клавиатуре) можно вывести листинг Бейски-программы. Но может быть установлена защита цветами, из-за чего получим ошибку листинга:


--- Конец цитаты ---

Ух, а русифицирована она, смотрю, не с помощью UDG, а системный шрифт переопределён.

Я так не умею. :D o_0

Добавлено позже:

--- Цитата: Arigato от 23 Май 2023, 15:16:13 ---Хотя защита ну очень тупая, обходится самыми простыми методами...

--- Конец цитаты ---

Какими?
Arigato:

--- Цитата: Lunar Laser от 23 Май 2023, 17:47:26 ---Ух, а русифицирована она, смотрю, не с помощью UDG, а системный шрифт переопределён.
--- Конец цитаты ---
Это несложно, даже редактор символов был в Art Studio. Зато можно использовать не только верхний регистр, а и нижний.


--- Цитата: Lunar Laser от 23 Май 2023, 17:47:26 ---Какими?
--- Конец цитаты ---
Ну так я же написал: LIST и номер строки дальше, чем расположено все это безобразие. Вывод начинается с указанной строки, и ошибки цвета и прочие манипуляции с атрибутами на вывод уже не влияют.
Навигация
Главная страница сообщений

Перейти к полной версии