Обычный, пятничный, вечер... Сижу, ни кого не трогаю (с) смотрю ютюбчик, отдыхаю... Попадаю на просмотр прохождения игры Oberon 69, в процессе рассказа об игре, выясняется, что на Spectrum она была только на Испанском языке и только на кассете, была дискетная версия от Max Iwamoto, полу англифицированная... И такА меня вдруг тоска ностальгия взяла и переживание за несправедливость... Решаю, что раз никто, тогда Я! Будем а) дискетизировать, б) англифицировать, в) русифицировать.

Для начала, скачиваем все (8) разновидностей игры, для всех платформ, а это: Amiga (скорее всего не пригодится, уж очень сильно отличается, в лучшую сторону), PC DOS (очень примитивная, из неё, скорее под БК-0010 переделывать, чем под Spectrum, возможно, потом и озабочусь, но БК в железе мне сейчас не достать, да и стоят они...), Amstrad CPC (она на Английском, будет куда подглядывать), MSX (пусть будет, для коллекции) и 2 для Spectrum, кассета и переделка от Iwamoto, с бессмертием и прочими плюшками.

Дальше начинается поиск инструментов для разборки/сборки образов кассет и дисков и прочего инструментария. Для начала эмулятор Spectrum, для проверки, т.к. на живых диско-кассетах проверять будет уж слишком муторно и длительно, я старый и ленивый. Эмулятор выбрал Fuse. Далее разбираем образ кассеты, выбираем:

ZX-Blockeditor
ZX-Blockeditor

Первым делом, кроссим финги (fingers cross) и осматриваем Basic загрузчик на предмет сюрпризов, и они там есть, мелкие, но если не забытые воспоминания и прочитанный свежак, было бы сложно и не понятно (и таки было, но не долго). Для этого используем:

ZX-Editor
ZX-Editor

И... ура! что мы видим? Дофига нефига, так что бери, сколько надо и... сегодня о другом. Понимаю, сначала, что ни чего не понимаю, но я же на опыте? Нет, но да. Удаляемся на партию с гухлом, находим статью с похожими развлечениями, в процессе думаем, вспоминаем... в Basic можно использовать спец символы и раскрашивать текст, даже в самой программе, убираем цвета, и

мы видим тект программы загрузчика-запускальщика
мы видим тект программы загрузчика-запускальщика

Ранее, мы уже видели в ZX-Blockeditor, что образ состоит из загрузчика, и 3х data модулей, один из которых вступление, один заставка и в последнем сама игра. То есть загрузчик, вроде как, без сюрпризов (нет). Пробуем ручками ввести те же комманды (то ещё удовольствие, basic 48 весьма своеобразен) и запустить... Кино не запускается, расходимся... но нет... думаем дальше, партия в гухол, воспоминания, чтение... пункты 2 (не страшно) и 6 (чуть сложнее) - наш случай, рассматриваем внутренности загрузчика:

и обнаруживаем несоответствия
и обнаруживаем несоответствия

в более человекочитаемом виде это выглядит как-то так:

0 CLEAR 25399:\
POKE 23613,0:\
PAPER 0:\
BORDER 0:\
BRIGHT 1:\
INK 0:\
CLS :\
LOAD "pres"CODE :\	## 36864-45458	$9000-B192
LOAD "pant"CODE 45458:\ ## 45458-52370	$B192-CC92	screen
CLS :\
RANDOMIZE USR 29151:\	## 39571	$9A93
OVER 1:\
INK 0:\
PAPER 8:\
BRIGHT 8:\
FLASH 8:\
PRINT AT 16,0:\
LOAD "0"CODE :\		## 25400-65024	$6338-FE00
RANDOMIZE USR 65034	## 35074	$8902

идём в эмулятор:

пробуем ручками
пробуем ручками

смотрим вступление и, затем, заставку, отлично! Для финальной проверки:

запускаем саму игру!
запускаем саму игру!

С загрузкой разобрались на 100%, поздравляем себя, можно выпить кофе и закусить шоколадкой. Далее, быстрый трам/парам

буду краток
буду краток

В эмуляторе создаем новую дискету, форматируем её, сохраняем на нее Basic программу, загружаем с кассеты и сохраняем на диск файлы данных, как показанно вот здесь, а именно:

Используя эти данные, можно на основе приведенного варианта загрузчика написать специальный копировщик:

     10 INK 1: PAPER 5: BORDER 5: CLEAR 25199              

     20 LOAD  ""SCREEN$

     21 RANDOMIZE  USR  15619:

        REM : SAVE "shaky sc"CODE 16384,6912

     30 LOAD  ""CODE                          

     31 RANDOMIZE  USR  15619:

        REM : SAVE "shaky mn"CODE 25200,40335

     40 STOP

Сохраняем образ дискеты,

имеем, то, что имеем
имеем, то, что имеем

Итого, но не вообще, а по этой части: с файлами разобрались, с последовательностью действий разобрались, лёгкую дисковую версию создали... переходим к стейдж2... не расходимся, кому интересно ))

и тут... мощный такой PS, пока я развлекался и писал статью... в рекоммендациях ютюбчика получаю вот это и далее, сам релиз... ччиорт... ну ладно, придётся делать с блекджеком и что там дальше

Комментарии (16)


  1. ZMile
    10.08.2025 11:55

    Старый задрот. Я Вас люблю.


    1. Jec13
      10.08.2025 11:55

      когда примерно также шакалил.


  1. vitecd Автор
    10.08.2025 11:55

    нас только понять и простить ))


  1. NutsUnderline
    10.08.2025 11:55

    как по мне автору не стоит уходить в лирику: получается не очень и читать смысл труднее. хотя идея то любопытная, хотя бы посмотреть до чего дошел прогресс от конца 198х - утилит то всяких понаделали.

    Загрузчик замаскировали несколько более глубоко чем обычно. Сразу цепляет взгляд блок "pres" - он грузиться непривычно до заставки и довольно большой, - о так тут еще и вступление есть. У заставки нестандартный адрес загрузки по умолчанию, и она не пожатая никак, то есть типа грузится с черным экраном долго и скучно - это как бы намекает что тут что то не то


    1. vitecd Автор
      10.08.2025 11:55

      Мультик и сама заставка достаточно короткие, заставка выводится после мультика и "висит" пока грузится сама игра. Возможно, было бы логично... и наверно так сделаю )) загрузить прямо в экран, загрузить мультик, спрятать экран, показать мультик, снова показать экран, грузить игру. как вариант, чтобы было чуть менее скушно.

      Возможно, не грузили в экран, т.к. при загрузке через бейсик, на экран выводится имя загружаемого файла, попортит картинку. Это надо будет обдумать, если грузить в экран.


      1. yappari
        10.08.2025 11:55

        Возможно, не грузили в экран, т.к. при загрузке через бейсик, на экран выводится имя загружаемого файла, попортит картинку. Это надо будет обдумать, если грузить в экран.

        Парой поков можно отредиректить вывод на принтер (главное, чтобы он не был физически подключен), тогда название выводиться не будет. Значений, к сожалению, не помню. Но загрузчики с такой фичей не были редкостью.


        1. vitecd Автор
          10.08.2025 11:55

          спасибо за совет )


      1. NutsUnderline
        10.08.2025 11:55

        там как минимум print at переводит курсор туда где может быть пусто


        1. vitecd Автор
          10.08.2025 11:55

          на чужих скриншотах видно текст в середине картинки, не совсем получилось


  1. NeriaLab
    10.08.2025 11:55

    Не вчитывался и сразу бахнул за статью + и только из-за того, что часть детских лет было посвящено Спектруму


  1. kmatveev
    10.08.2025 11:55

    Статью плюсанул.

    Для тех, кто не понял, что сделал автор. Игры для ZX Spectrum распространялись вначале на кассетах, потом, с ростом популярности дисководов, которые нужно было покупать отдельно, игры стали распространяться и на дискетах. Редкие ранние игры писались на BASIC, но их производительность не очень, поэтому качественные игры делались на ассемблере для процессора Z80. Игра загружается так: вводится команда LOAD "", включается с нужного места магнитофон, и ждём 5 минут. При этом вначале загружается и автоматически выполняется короткая BASIC-программа загрузчик, которая уже загружает последующие блоки сырых байт в нужные места, и в конце стартует выполнение машинного кода. Поэтому анализ программ начинают именно с анализа их BASIC-загрузчика. Защиту программ от анализа, взлома и копирования также начинали с защиты загрузчика, для чего имелся ряд приёмов. Например, BASIC хранил числовые константы в теле программы два раза: сначала шло текстовое представление для листинга, потом - внутреннее представление для математической подсистемы BASIC. И аккуратными манипуляциями с байтами памяти можно было сделать так, что эти два представления отличаются друг от друга, смущая исследователя, который верил тому, что видел в текстовом представлении. Именно это и происходит в загрузчике, который подвернулся автору, и автор вернул загрузчику простой и ясный вид.


    1. vitecd Автор
      10.08.2025 11:55

      Спасибо за толкование )

      И да, упростил загрузку для потрошения, в дальнейшем, наверное, будет всё обратно спрятано. Ибо люди пишут, что моветон что-то ломнуть и оставить на тарелочке, нужно обратно завернуть, порядок такой ))


      1. kmatveev
        10.08.2025 11:55

        Не слушайте их, оставьте простой и ясный вариант. А ещё можно исходники на github.


        1. NutsUnderline
          10.08.2025 11:55

          А ещё можно исходники на github

          это вообще то варез. даже не абндонваре. и без исходников. за некоторое старье копирайтеры до сих пор предъявляют.

          вот напишет автор СВОЮ игру - может выкладывать, вроде бы сейчас так с новьем делают


      1. NutsUnderline
        10.08.2025 11:55

        а кто пишет то :) наверное Bill Gilbert - он(и) как раз таким баловался на кассетах.

        в дисковых версиях как то больше все упаковывали, в монолит и интрили - и грузится быстрее, и копировать удобно, да а внутрь лезть уже как бы и не надо, если только еще на какую хитрую не-TRDOS переделывать. Я вообще видел пару шифровальщиков каталога TRDOS (как файлы скопировать нельзя) но даже ни разу не видел чтобы его применяли на практике. Защиты ставили только на новый свеженаписанный софт


  1. riv2
    10.08.2025 11:55

    Спасибо, был у меня такой друг лет 25 назад (͡°͜ʖ͡°)