2D-видеоускоритель на Arduino Nano

На этой странице я начал описывать развитие компаньон-проекта nano4tv для моего "нанокомпьютера" - "видеокарты" на базе .... естественно, Arduino Nano :-)

Характеристики:

монохромный сигнал;

графическое разрешение - 320 × 224 точки;

символьное разрешение - 28 строк по 64 символа.

Вход - последовательный порт (UART).

Выход - RCA-разъем (композитный монохромный PAL-сигнал)

В проект добавлены элементы 2D-ускорения:

попиксельный и посимвольный скроллинг вверх или вниз;

рисование линий с помощью алгоритма Брезенхема;

планируется добавить:

рисование окружностей;

работа со спрайтами.

Схема устройства:

...

Организация экранной памяти

Данные, отображаемые на экране, хранятся построчно (пиксель изображения соответствует биту данных: 0 - черный, 1 - белый) в виде 224 строк.

Структура строки:

00...1 байт "черного" в начале строки..00 XXXXX...40 байт изображения...XXXXX 00...23 байта "черного" в конце строки..00

(начальный бит изображается в левой части строки экрана).

Таким образом, для хранения всего экрана требуется 224 × 64 = байт (микросхема SPI RAM 23K256 предоставляет 32768 байт памяти).

Регистры видеокарты:

...

Для управления устройством через последовательный порт подаются команды, которые позволяют модифицировать содержимое регистров видеокарты и выполнять ее доступные команды.

Список команд:

символ с кодом от 32 до 255 - отображается на экране;

символ с кодом меньше 32 (кроме 27) - управляющий символ;

символ с кодом 27 (ESC) - префикс команды, после этого символа следуют байты команды:

D  <байт> - запись байта в регистр data_reg - регистр данных;

U  <байт> - запись байта в регистр x_ch_reg - регистр символьной X-координаты;

V  <байт> - запись байта в регистр y_ch_reg - регистр символьной Y-координаты;

X  <байт> - запись байта в регистр x_px_hi_reg - регистр старшего байта пиксельной X-координаты;

x  <байт> - запись байта в регистр x_px_lo_reg - регистр младшего байта пиксельной X-координаты;

Y  <байт> - запись байта в регистр y_px_reg - регистр пиксельной Y-координаты;

...

s - попиксельный скроллинг;

S - посимвольный скроллинг;

F - заливка экрана;

L - рисование линии

...

Экран, заполненный символами шрифта (снимок сделан с помощью ТВ-тюнера):
homebrew computer

Видео, демонстрирующее попиксельный (гладкий) и посимвольный (ступенчатый) скроллинг вверх и вниз:
https://youtu.be/-9w_FPTiY3o

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

 

Яндекс.Метрика