Демки обычно отличаются более сложной графикой, чем игры того же объёма. Ведь не приходится тратить ресурсы на взаимодействие с пользователем и дополнительные расчёты. Предлагаемая программа работает на микроконтроллере ATtiny5 с 512 байтами ПЗУ, 32 байтами ОЗУ и 16 регистрами процессора. Rakettitiede — это по-фински «ракетная наука» (в т.ч. в том же значении, что и в английском фразеологизме), а также название компании, разрабатывающей ПО.

Схема платы для работы демки:



Здесь знакомо всё, кроме компонента LTC1799. Это тактовый генератор, конфигурируемый резистором. Он работает на частоте в 12 МГц. Подойдёт и другой достаточно стабильный генератор прямоугольных импульсов на ту же частоту. Чтобы получить необходимые VGA-монитору пять сигналов с трёх выходов микроконтроллера, применены делители на светодиодах и резисторах, в которых задействованы также 75-омные резисторы, встроенные в монитор. Каждый из выходов может быть переключён программой в нуль, единицу и высокоимпедансное состояние.

Поскольку приём заявок на конкурсе Hackaday заканчивался, автор отправил туда промежуточную версию демки, которая делала всё то же самое, кроме вывода текста:


Она занимала 394 байта, или 197 16-битных слов:

avra  -l pentaveega.lst pentaveega.asm
AVRA: advanced AVR macro assembler Version 1.3.0 Build 1 (8 May 2010)
Copyright (C) 1998-2010. Check out README file for more info

   AVRA is an open source assembler for Atmel AVR microcontroller family
   It can be used as a replacement of 'AVRASM32.EXE' the original assembler
   shipped with AVR Studio. We do not guarantee full compatibility for avra.

   AVRA comes with NO WARRANTY, to the extent permitted by law.
   You may redistribute copies of avra under the terms
   of the GNU General Public License.
   For more information about these matters, see the files named COPYING.

Pass 1...
Pass 2...
done

Assembly complete with no errors.
Segment usage:
   Code      :       197 words (394 bytes)
   Data      :         0 bytes
   EEPROM    :         0 bytes

После оптимизации демку удалось уменьшить до 354, а затем и 352 байт. Но затем автор решил добавить в картинку текст, после чего программа и стала занимать 492 байта:


Код лежит на Bitbucket здесь, а также на Hackaday в виде отдельных файлов: pentaveega.asm, tn5def.inc и pentaveega.hex.

Собрать устройство можно в трёх вариантах: на макетках двух видов с применением переходных плат, а также на печатной плате (под CC-BY-SA 4.0, файлы в отдельной папке проекта на Bitbucket). Обратите внимание на способ подключения разъёма монитора при сборке по первому варианту:





Комментарии (5)


  1. nevzorofff
    07.06.2019 08:27

    Хвалёная американская свобода.


  1. FDA847
    07.06.2019 08:40
    +1

    Класс!


  1. dlinyj
    07.06.2019 13:24
    +1

    Да, крутая поделка.


  1. Best-404-Error
    08.06.2019 08:37
    +1

    Круто, не спорю. Использование ASM'а оправдано (чтобы выжать всю производительность (ставим радиаторы на ATTiny 5)).
    Но хотелось бы подобное на С/C++ заценить, если это возможно.

    Ухх чую я минусов нахватаю...


    1. MichaelBorisov
      09.06.2019 17:31
      +1

      ASM нужен здесь не только для того, чтобы «выжать всю производительность», но и для формирования точных временных задержек. Как иначе можно генерировать видеосигнал, если там пиксельная частота может составлять десяток мегагерц? Никакие таймеры не помогут. Задержки формируются путём подсчёта количества машинных команд, выполненных между изменением уровня сигнала на портах ввода-вывода. Благо, кэша нет, операционки нет, прерывания можно запретить или заранее знать, когда они придут. Поэтому каждая команда исполняется за фиксированное время.

      Поэтому я думаю, что для подобных проектов вообще нет смысла рассматривать C/C++. Если сильно захотеть — можно, наверное, и на C такое написать, но это будет что-то вроде обратного перевода с ассемблера на си, и борьба с оптимизациями компилятора, постоянно сверяясь с ассемблерным листингом. Проще уж сразу на ассемблере написать.