Эта игра, в значительной мере вдохновлённая Space Invaders, написана с нуля для ATtiny2313 и отправлена на недавно прошедший конкурс 1-килобайтных программ на Hackaday.
Непросто поместить такую игру в 1024 байта. Но автор решил получить в результате полнофункциональную игру с подсчётом очков, звуком и VGA-видеовыходом с разрешением в 640х480 и частотой в 60 Гц.
Разумеется, весь код полностью написан на ассемблере, причём для генерации звука и видео запрограммировано получение точных временных интервалов.
Прерывание по таймеру соответствует требованиям к строчной синхронизации VGA, а поскольку кадровая частота получается делением строчной на целое число, оба вида синхронизации можно поместить в одну процедуру обработки прерывания. Для этого в процедуре производится точный подсчёт циклов.
Строчная частота в 31,5 кГц берётся в той же процедуре за основу при получении звуков.
Процедура обработки прерывания отнимает 90% машинного времени, поэтому вся логика игры просчитывается во время обратного хода луча. Несколько конечных автоматов управляют перемещением персонажей, определением положения ракет, и т.п.
Небольшой знакогенератор используется для хранения как шрифта для отображения счёта, так и тайлов и спрайтов.
Всего за несколько часов до окончания приёма материалов код был готов и отправлен на конкурс. В нём оказалось реализовано всё, что планировалось. Генерирация стандартного VGA-сигнала (хотя реальное разрешение значительно меньше, чем 640х480 — «огромные квадратные пиксели»), управление от геймпада для NES или его клона с тремя сигналами Clock, Latch, Data, программные спрайты с плавным перемещением, а не перепрыгиванием из знакоместа в знакоместо, подсчёт очков, циклическая смена тайлов как в оригинале…
Тот самый геймпад:
Вы тоже можете сделать такое же устройство и поиграть в 1-килобайтный аналог Space Invaders. Соберите такую схему (кварц на 20 МГц не показан, подключается к выводам 4 и 5, разъём справа сверху — для программатора). Автор утверждает, что нарисовал эту схему на смартфоне в 4 часа ночи непосредственно перед отправкой на конкурс. Разумеется, переходник фирмы Parallax необязателен, можно взять просто VGA-разъём.
При применении переходника устройство выглядит так:
Скомпилируйте исходники (программу и файл заголовка) при помощи AVR Studio или GCC, или просто залейте прилагаемый HEX-файл — так быстрее, но вы не сможете покопаться в коде. И можно воочию убеждаться, что аналог Space Invaders, помещающийся в один килобайт — реальность.
Источник