Ужать аналог Space Invaders в 1 килобайт (оригинал 1978 года занимает 8)

в 4:41, , рубрики: 1 килобайт, 1024 байта, attiny2313, DIY, diy или сделай сам, space invaders, Игры и игровые приставки, ненормальное программирование, программирование микроконтроллеров, ретрокомьютинг

Ужать аналог Space Invaders в 1 килобайт (оригинал 1978 года занимает 8) - 1

Эта игра, в значительной мере вдохновлённая Space Invaders, написана с нуля для ATtiny2313 и отправлена на недавно прошедший конкурс 1-килобайтных программ на Hackaday.

Непросто поместить такую игру в 1024 байта. Но автор решил получить в результате полнофункциональную игру с подсчётом очков, звуком и VGA-видеовыходом с разрешением в 640х480 и частотой в 60 Гц.

Разумеется, весь код полностью написан на ассемблере, причём для генерации звука и видео запрограммировано получение точных временных интервалов.

Прерывание по таймеру соответствует требованиям к строчной синхронизации VGA, а поскольку кадровая частота получается делением строчной на целое число, оба вида синхронизации можно поместить в одну процедуру обработки прерывания. Для этого в процедуре производится точный подсчёт циклов.

Строчная частота в 31,5 кГц берётся в той же процедуре за основу при получении звуков.

Процедура обработки прерывания отнимает 90% машинного времени, поэтому вся логика игры просчитывается во время обратного хода луча. Несколько конечных автоматов управляют перемещением персонажей, определением положения ракет, и т.п.

Небольшой знакогенератор используется для хранения как шрифта для отображения счёта, так и тайлов и спрайтов.

Всего за несколько часов до окончания приёма материалов код был готов и отправлен на конкурс. В нём оказалось реализовано всё, что планировалось. Генерирация стандартного VGA-сигнала (хотя реальное разрешение значительно меньше, чем 640х480 — «огромные квадратные пиксели»), управление от геймпада для SNES или его клона с тремя сигналами Clock, Latch, Data, программные спрайты с плавным перемещением, а не перепрыгиванием из знакоместа в знакоместо, подсчёт очков, циклическая смена тайлов как в оригинале…

Тот самый геймпад:

Ужать аналог Space Invaders в 1 килобайт (оригинал 1978 года занимает 8) - 2

Вы тоже можете сделать такое же устройство и поиграть в 1-килобайтный аналог Space Invaders. Соберите такую схему (кварц на 20 МГц не показан, подключается к выводам 4 и 5, разъём справа сверху — для программатора). Автор утверждает, что нарисовал эту схему на смартфоне в 4 часа ночи непосредственно перед отправкой на конкурс. Разумеется, переходник фирмы Parallax необязателен, можно взять просто VGA-разъём.

Ужать аналог Space Invaders в 1 килобайт (оригинал 1978 года занимает 8) - 3

При применении переходника устройство выглядит так:

Ужать аналог Space Invaders в 1 килобайт (оригинал 1978 года занимает 8) - 4

Скомпилируйте исходники (программу и файл заголовка) при помощи AVR Studio или GCC, или просто залейте прилагаемый HEX-файл — так быстрее, но вы не сможете покопаться в коде. И можно воочию убеждаться, что аналог Space Invaders, помещающийся в один килобайт — реальность.

Автор: tormozedison

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js