- PVSM.RU - https://www.pvsm.ru -
Эта игра, в значительной мере вдохновлённая Space Invaders, написана с нуля для ATtiny2313 и отправлена на недавно прошедший конкурс 1-килобайтных программ на Hackaday [1].
Непросто поместить такую игру в 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-разъём.
При применении переходника устройство выглядит так:
Скомпилируйте исходники (программу [2] и файл заголовка [3]) при помощи AVR Studio или GCC, или просто залейте прилагаемый HEX-файл [4] — так быстрее, но вы не сможете покопаться в коде. И можно воочию убеждаться, что аналог Space Invaders, помещающийся в один килобайт — реальность.
Автор: tormozedison
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy/313737
Ссылки в тексте:
[1] конкурс 1-килобайтных программ на Hackaday: https://hackaday.io/submissions/the-1kb-challenge/list
[2] программу: https://cdn.hackaday.io/files/18674798948416/Invaders.S
[3] файл заголовка: https://cdn.hackaday.io/files/18674798948416/2313.h
[4] HEX-файл: https://cdn.hackaday.io/files/18674798948416/Invaders.ihex
[5] Источник: https://habr.com/ru/post/446984/?utm_campaign=446984
Нажмите здесь для печати.