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




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

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

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

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

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

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

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

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



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



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



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



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




К сожалению, не доступен сервер mySQL