Автор Тема: Извлечение BASIC-программ для ZX Spectrum из файлов .sna  (Прочитано 644 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Arigato

  • Пользователь
  • Сообщений: 47
    • Просмотр профиля
ZX Spectrum 48K - BASIC

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



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


Оффлайн Lunar Laser

  • Пользователь
  • Сообщений: 82
    • Просмотр профиля
Приветствую, вопрос есть к тебе.

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

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

Можно эту неприятность как-то поправить в эмуляторе и получить доступ к исходному коду таких программ?

Оффлайн blackoff

  • Пользователь
  • Сообщений: 8322
  • Пол: Мужской
    • Просмотр профиля
а sna  это разве не копия памяти как по магич кнопке , там уже память может быть заменена другими ресурсами после запуска...

Оффлайн Arigato

  • Пользователь
  • Сообщений: 47
    • Просмотр профиля
Можно эту неприятность как-то поправить в эмуляторе и получить доступ к исходному коду таких программ?
Достаточно поменять значение системной переменной 23659 с 0 на 2, после чего BREAK сработает.
Например, в эмуляторе ZXMAK2 это меню Tools - Debugger, далее надо найти адрес 23659 (в hex: 5C6B). Не очень удобный там интерфейс, листаем адреса вниз клавишей PageDown, встаем в нужную ячейку:


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


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

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


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




Оффлайн blackoff

  • Пользователь
  • Сообщений: 8322
  • Пол: Мужской
    • Просмотр профиля
Но может быть установлена защита цветами, из-за чего получим ошибку листинга
после 1 REM может идти машинный код ...

Оффлайн Arigato

  • Пользователь
  • Сообщений: 47
    • Просмотр профиля
Да, в Диктаторе вроде бы там как раз машинный код и спрятан (всякие визуальные и звуковые эффекты). Одновременно работает как элемент защиты программы на BASIC от чтения. Хотя защита ну очень тупая, обходится самыми простыми методами...

Оффлайн blackoff

  • Пользователь
  • Сообщений: 8322
  • Пол: Мужской
    • Просмотр профиля
проще из тap ,наверно ,или что там еще есть ,отдельными файлами ,если есть внутри извлекать ,sna это уже запущенная игра с отработанным кодом... некоторые игры память используемую бейсиком затирают под свои нужды после запуска игры ...

Добавлено позже:
обходится самыми простыми методами...
я вроде XORил чтоб не прочитать было ,но все ломалось ,прикольно было ...

Оффлайн Lunar Laser

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


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

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

Добавлено позже:
Хотя защита ну очень тупая, обходится самыми простыми методами...

Какими?

Оффлайн Arigato

  • Пользователь
  • Сообщений: 47
    • Просмотр профиля
Ух, а русифицирована она, смотрю, не с помощью UDG, а системный шрифт переопределён.
Это несложно, даже редактор символов был в Art Studio. Зато можно использовать не только верхний регистр, а и нижний.

Какими?
Ну так я же написал: LIST и номер строки дальше, чем расположено все это безобразие. Вывод начинается с указанной строки, и ошибки цвета и прочие манипуляции с атрибутами на вывод уже не влияют.