Найти в Дзене
Таков мой замысел

Arduboy на Watara Supervision или почему идея была мертва в зачатке

Как только я разобрался со шрифтами и прокачал Hello world, сразу же подумал, а почему бы не портировать простой движок Arduboy на свою уже любимую Watara Supervision. Как же я ошибался, но все по порядку, но тут закреплю фразу - "оптимизация важна, даже если на устройстве проблемы неощутимы".

Первым делом я решил переносить функции рисований примитивов, а какой примитив самый простой? Конечно же... точка. Казалось бы, поставь одну точку где-то там в массиве и вот тебе прекрасная точка. Но дьявол, как и будет в будущем, кроется в прошлой статье. Если в произвольное место видеобуфера мы поставим 0xFF (0b11111111), мы получим последовательность четырех черных пикселей на экране, разумеется, если вставим значение в видимой части буфера. Но как же проставить черную точку на необходимую координату x, ведь по горизонтали мы имеет 160 строк и можем перемещать пиксель как нам заблагорассудится, прибавляя 0x30 для выбора нужно строки. Для того, чтобы в последовательности 4 точек именно последняя была точка была черной, нужно записать в буфер 0b11000000, на третьем месте - 0b00110000, и так далее. Для вычисления необходимого байта для записи, нам необходимо проделать некоторые операции над x, который, к слову, меняется от 0 до 160. Сначала разделим x на 4, по сути целая часть - количество целых байт в строке, которое нам необходимо отступить. Если дробная часть, тобишь остаток от деления отсутствует, необходимо вписать в x/4 пиксель 0b1100000.
В противном случае, если остаток присутствует, необходимо остаток умножить на 2 и выполнить операцию смещения 0x3 (0b11) на это число: 3 << ((x%4) * 2), и записать в x/4 + 1.

Скриншот эмулятора potator с моей программой
Скриншот эмулятора potator с моей программой

В конечном итоге я получил программу которая по курсорами отрисовывала на экране непрерывную ломанную линию.

Выглядит на самом деле просто, но как только дело касается битмапов, то такие вычисления становятся большой занозой в одном месте... Основные сложности с битмап пришедшие с Arduboy:
1) В ардубое за один пиксель отвечает один бит информации, есть необходимость дублировать пиксели.
2) Необходимо постоянно считать смещения битмапа, так как необходимо биты сместить так, чтобы они начинались с произвольного x.
3) Нельзя затирать уже отрисованные пиксели.
Когда-нибудь я размещу и этот код на гитхабе в качестве примера, но решение нерабочее.

Каких же результатов я добился:
* научился рисовать точки в произвольном месте экрана
* получил большее понимание о том, как устроен фреймбуфер
* получил демку, которая демонстрирует, что софтварная отрисовка битмапов так как это сделано в Arduboy непригодня для Watara Supervision.

Динозавр все таки побежал
Динозавр все таки побежал

На моей странице есть видео, демонстрация того, как работает игра. Впереди куда больше интересностей, оставайтесь с нами!)

Продолжение следует...