RP2350 захватывает CGA и EGA и выводит их на DVI без FPGA
На макетной плате несколько проводов приходят с DE-9 старой видеокарты в буфер, затем в GPIO RP2350. С другого края платы DVI-кабель подключён к современному монитору. Между ними нет FPGA, внешнего видеозахвата и готового скалера: прошивка pico-ttl2dvi принимает цифровые линии CGA, EGA, MDA или Hercules и рисует полученный кадр через DVI.
Пиксели забирает периферия, а не процессор
Старые адаптеры PC передавали цвет отдельными логическими линиями и добавляли к ним строчную и кадровую синхронизацию. Пиксельные частоты у поддержанных режимов лежат примерно между 14 и 18 МГц: 14.323 МГц у CGA, 16 МГц у MDA, Hercules и Commodore 128 VDC, 17.750 МГц у EGA на 350 строк. Для микроконтроллера здесь трудность в том, что читать GPIO инструкциями CPU уже поздно: один пропущенный такт меняет картинку.
Эту работу берёт на себя PIO, программируемая периферия ввода-вывода RP2350. Машина состояний ждёт фронт HSYNC, выдерживает фазовую задержку и последовательно загоняет значения входных пинов в сдвиговый регистр. DMA одним переносом записывает собранные данные кадра в rawbuf. Ядро процессора не обслуживает каждый пиксель и остаётся доступно для реконструкции изображения; захват и вывод разнесены по разным PIO и ядрам.
Кадр становится границей между двумя эпохами
Это всё же не проводной мост, где принятый бит немедленно превращается в символ DVI. После приёма прошивка восстанавливает кадр во framebuffer, подгоняет размеры и частоты кадра под режим вывода, затем форк PicoDVI кодирует данные в TMDS. Такая кадровая буферизация добавляет задержку, зато отделяет капризную синхронизацию старой карты от требований монитора и позволяет вывести режимы с разной геометрией единым DVI-трактом.
Пять вольт требуют настоящей схемы
Отдельная инженерная деталь — входные уровни. Автор публикует три варианта: прямое подключение через последовательные резисторы 330 Ом, восьмиканальный 74HCT541 и трансивер 74LVC245A, питаемый от 3.3 В. Последний принимает TTL-входы до 5.5 В, однако это активный двунаправленный трансивер: DIR должен быть жёстко задан в направлении от видеокарты к RP2350, а /OE удержан в активном состоянии. Ошибка в этих двух линиях превращает согласование уровней в конфликт драйверов. У RP2350 допустимость 5-вольтового сигнала зависит от типа GPIO: для FT-входов при IOVDD=3.3 В документация допускает до 5.5 В и требует, чтобы питание IOVDD присутствовало при уровнях выше 3.63 В.
На фотографиях автора уже видны результаты с Hercules/MDA, CGA и C128 VDC; первый прототип собран на Waveshare RP2350-PiZero с 74HCT541. Заявлены автоматическое распознавание подключённой карты и переключение конфигурации. При этом опубликованы лишь изображения работы, без осциллограмм, статистики потерь кадров, измерений джиттера или границы устойчивости на разных картах. Проект ценен уже тем, что показывает архитектурный сдвиг: старый параллельный видеопоток на десятках мегагерц можно поймать периферией микроконтроллера, сохранить кадр в его SRAM и выдать на цифровой монитор без отдельной программируемой логики.