Главная / Цифровая археология / Музей ASV / Специалист: Демонстрация вертикального сдвига.
Вспоминая былые времена вдруг подумалось... а что если... разумеется надо попробовать. Ассемблер под рукой, эмулятор тоже, пару часов на это найти не проблема. И вот оно готово.
Жуткое мельтешение из-за того, что нет возможности засинхронизироваться с кадровой развёрткой. Но "шахматное поле" это наихудший вариант. В реальной игровой картинке так бить по глазам не должно. Картинка бежит бодро. Шаг сдвига - 2 точки. Даже непривычно бодро для Специалиста.
Скриншот (динамику он, разумеется, не передаёт):
Теперь подробнее. Все, кто в своё время имел дело со Специалистом, должны помнить "волнообразный" сдвиг экрана. Процессор был откровенно слабоват для такого объёма видео-ОЗУ. Поэтому про игры с полноценным сдвигом экрана задумываться не приходилось.
Но если отступить от канонического подхода к программированию, а "понаделать хаков", то можно получить некоторый прирост по скорости.
Именно используя хаки я предпринимал попытку сделать клон Спектрумовского Boulder Dash. На просмотр лабиринта скорости было достаточно, а вот на саму игру уже нет.
Идея хака взята из трюка с очисткой экрана. В Специалисте экран очищается при помощи команд записи в стэк. В регистровую пару заносится значение для заполнения видео-ОЗУ, устанавливается счётчик и в цикле выполняется подряд несколько команд записи в стек. Таким образом видео-ОЗУ заполняется сравнительно быстро.
А вот если организовать нечто напоминающее теневое видео-ОЗУ, состоящее из кода типа:
COL001: ..... LXI D, <значение 1> PUSH D LXI D, <значение 2> PUSH D ...... JMP COL001То видео-ОЗУ будет заполняться тоже сравнительно быстро.
Количество команд PUSH определяется вертикальным размером игровой области. Вертикальное смещение определяется прыжком по адресу COL001+YOFFSET*4 Перед тем как прыгать на этот адрес, перед ним надо путём модифицирования кода вставить команду JMP для возвращения в основной цикл перерисовки.
Подпрограмма рисования спрайтов будет модифицировать код, заменяя аргументы у команд LXI. Подпрограмма вывода надвигающегося "ландшафта" будет убирать подставные JMP, восстанавливая команду LXI и подставлчяя ей в аргументы данные от появляющегося ландшафта.
Разумеется, что Специалисту не хватит скорости сделать полноэкранную игру, но даже на Спектруме подобные игры тоже как правило не занимали весь экран.
Поскольку такое "теневое ОЗУ" занимает в два раза больше памяти по-сравнению с обычной копией, то рассчитывать на разнообразную графику тоже не приходится.
Ну и также не факт, что скорости процессора хватит и на сдвиг экрана и на "бизнес-логику". Эх, нам бы ещё пару мегагерц...
Да, замечание по дёмке - шахматная доска скроллится чуть более простым кодом - просто для оценки скорости. Реализовывать всю идею я не посчитал целесообразным.