nzeemin.github.io / Портирование Stop the Express

Оригинал на ZX Spectrum

"Stop the Express" на World of Spectrum

Как игра устроена внутри.
Игровой экран имеет размер 32×24 тайла, тайлы 8x8 пикселей плюс атрибут. Т.е. экран 256×192 = экран Спектрума. В памяти мы храним экран в виде индексов тайлов два раза, я их назвал «экран план» и «экран факт». Если мы хотим что-то вывести на экран – меняем всегда только экран план. Допустим хотим вывести строку – просто копируем символы этой строки на экран план. Регулярно выполняется процедура актуализации экрана. Она бежит по экрану план, для каждого тайла сравнивает есть ли различие с тайлом экран факт. Только если различие есть, то делаем изменение на экране, и обновляем номер тайла в экране факт. Сами тайлы это 9 байт – 8 байт на пиксели плюс один байт на атрубут, всего 256 тайлов. Если обратите внимание, большинство строк на экране в горизонтальном направлении почти одинаковы. Поэтому даже когда выполняется вроде бы большое скроллирование (поезд уезжает), реально изменений на экране не так уж и много.

Stop the Express на Электроника МС 0515

В начале 1990-х во Львове на компьютер «Электроника МС 0515» был портирован ряд программ с компьютера ZX Spectrum, в частности, игра «Stop the Express» (мне неизвестно кто именно выполнил эту работу, есть только подпись «Lwow Soft»). «Электроника МС 0515» имеет организацию экрана, сходную с экраном ZX Spectrum, но совершенно другой процессор – 16-разрядный, с системой команд PDP-11. Поэтому такое портирование скорее представляло собой полное дизассемблирование и по-командное переписывание кода игры.

  • expres.lst – восстановленный комментированный код игры

Скриншот экрана «Электроника МС 0515» – до пиксела совпадает с версией для ZX Spectrum:

Портирование на УКНЦ (незакочено)

Портирование выполнено в марте 2017 года.

Скриншоты портированой версии:

Демо-режим:

На реальном УКНЦ (спасибо hobot с форума zx-pk.ru):

Портирование на БК-0010 (незакочено)

Портирование начато в сентябре 2018 года.

Доступной памяти под программу у БК-0010 всего 16 КБ, поэтому многое убрано:

  • убрана последовательность демо-режима, поэтому в демо главный герой просто стоит;
  • большинство тайлов имеют размер 8x4 пикселов, 4 цвета; тайлы символов и цифр 8x5 в 4 цвета;
  • убран блок тайлов и сами тайлы локомотива, это используется после прохождения уровней;
  • экран описания показывается только один раз в начале игры, потом это место используется;
  • нет звука.

Скриншоты портированой версии:

Видео портированной версии, снято с помощью эмулятора: