VGA карта на базе Arduino UNO R4 Minima
Попала мне в руки плата Ардуины Р4. Покупал по одной причине, а оказалось она под мои хотелки не подходит. Забросил на некоторое время на полку. Потом заморочился немного и решил применить руки. Хотел сначала сделать автомат типа тетрис или пинг понг, но меня понесло и получилось что получилось. Думаю буду дальше допиливать и исправлять.
Видео есть на ютуб и есть непосредственно в посте. На ваш выбор. Краткое описание ниже.

Прототип видеоадаптера, поддерживающий режим VGA 640x480 при 60 Гц - пока что только в одноцветном варианте. В качестве аппаратной основы используется плата Arduino Uno R4 Minima с тактовой частотой процессора 48 МГц и частотой пиксельного генератора 24 МГц. На данный момент реализован текстовый режим с сеткой 64x50 символов.
Технические характеристики платы довольно скромные, однако благодаря низкоуровневому программированию удалось добиться стабильности сигнала на уровне 95%. Архитектура платы зачастую ограничивает доступ к регистрам контроллера. Для этого режима была разработана полноценная библиотека, включающая поддержку окон, прокрутки, спрайтов, пользовательских (или игровых) шрифтов, внеэкранных буферов и многого другого.
К сожалению, пришлось пожертвовать всеми прерываниями - в текущей реализации они отключены. Из исходных 32 КБ памяти пользователю доступно от 10 до 20 КБ, в зависимости от выбранного режима. В дальнейшем можно будет добавить поддержку таких функций, как подключение PS/2-клавиатуры, вывод звука и т. д. В этом упрощенном режиме пользовательские программы выполняются только во время интервала гашения кадра (обратного хода кадровой развертки). Для более опытных пользователей предусмотрен доступ к контроллеру и во время обратного хода строчной развертки.
Реализован и протестирован графический режим 640x480 (60 Гц), обеспечивающий рабочую область 320x240 с глубиной цвета 1 бит. В планах - внедрение 4-цветной палитры, подобной той, что использовалась в легендарном стандарте CGA. И снова напомню: объем оперативной памяти крайне ограничен в видеорежиме только экран монохромный съедает 10кб озу - 30% от всего что есть!
PS. Аналогичных поделок именно на этой плате я не нашел. Код писался на С++ документация на плату 1000+ страниц.




Комментарии