MCEBlaster — это универсальный автономный конвертер TTL-видеосигнала (MDA/CGA/EGA) в VGA, разработанный scrapcomputing на базе микроконтроллера Raspberry Pi Pico. Устройство читает TTL-видеосигнал, записывает пиксели в буфер и генерирует VGA-сигнал из этих пикселей. Проект решает проблему подключения старых видеокарт (MDA/CGA/EGA) к современным VGA-мониторам без необходимости использовать VGA-апскейлер или монитор с поддержкой 15 кГц.
1. Возможности
- Не требуется VGA-апскейлер или 15 кГц VGA-монитор. Работает со стандартными VGA-режимами.
- Пиксель-в-пиксель вывод:
- VGA 640×400 для CGA/EGA 320×200, 640×200 и 640×350
- VGA 800×600 для MDA 720×350
- VGA 640×480 для вертикальных разрешений от 200 до 240
- Настройка пиксельной частоты для каждого режима.
- Автоматическая регулировка — центрирование изображения на экране.
- Коррекция коричневого цвета EGA.
- Экранное меню и сообщения.
- PCB с выводным монтажом (Through-Hole).
2. Установка прошивки в Pico (Pico 1 или Pico 2)
- Скачайте прошивку (MCEBlaster_pico1.uf2 или MCEBlaster_pico2.uf2): https://github.com/scrapcomputing/MCEBlaster/releases
- Отключите Pico.
- Нажмите и удерживайте кнопку BOOTSEL на Pico.
- Удерживая BOOTSEL, подключите Pico к ПК через micro-USB кабель.
- Pico определится как массовое запоминающее устройство.
- Скопируйте MCEBlaster_pico1.uf2 или MCEBlaster_pico2.uf2 на диск, связанный с Pico.
- Безопасно извлеките устройство.
3. Использование
ПРИМЕЧАНИЕ: Управление изменилось с версии 0.2!Регулировка пиксельной частоты
- Нажмите кнопку PIXEL CLOCK один раз — войдёте в режим регулировки пиксельной частоты. На экране отобразится текущая пиксельная частота.
- Грубая регулировка:
- Нажмите PIXEL CLOCK — увеличить пиксельную частоту на 10 кГц.
- Нажмите AUTO ADJUST — уменьшить пиксельную частоту на 10 кГц.
- Точная регулировка:
- Долгое нажатие PIXEL CLOCK — увеличить пиксельную частоту на 1 кГц.
- Долгое нажатие AUTO ADJUST — уменьшить пиксельную частоту на 1 кГц.
- Среднее нажатие (около половины секунды) PIXEL CLOCK — увеличить смещение выборки, затем увеличить пиксельную частоту на 1 кГц после перебора всех смещений.
- Среднее нажатие AUTO ADJUST — уменьшить смещение выборки, затем уменьшить пиксельную частоту на 1 кГц после перебора всех смещений.
- Выход из режима регулировки пиксельной частоты — не нажимать кнопки в течение 12 секунд. Настройки сохраняются во флеш-память.
Смещение выборки (с rev 0.3)
Смещение выборки — это тонкая настройка, добавленная в rev 0.3, которая сдвигает TTL-выборку, чтобы избежать выборки пикселей во время переходов (показано как X). В этом примере использование смещения выборки 1 приведёт к очень шумному изображению, потому что выборка происходит во время переходов пикселей.
Код:
TTL Pixels: X_____X_____X_____X_____X
Sampling offset 0: | | | |
Sampling offset 1: | | | |
Sampling offset 2: | | | |
Sampling offset 3: | | | |
Центрирование изображения
- Нажмите кнопку AUTO ADJUST. Лучше всего работает, когда изображение заполнено от края до края.
Печать информации о TTL (с v0.2)
Долгое нажатие кнопки PIXEL CLOCK покажет экран с информацией о TTL-сигнале. Примечание: информация не обновляется в реальном времени. Выход из экрана — нажатие любой кнопки.Ручная настройка TTL-опций (с v0.2)
По умолчанию MCE Blaster автоматически определяет TTL-режим, проверяя частоту VSync и полярность VSync. Если они соответствуют стандартным режимам MDA/CGA/EGA, используемым в ПК, это обычно работает нормально. Но начиная с версии 0.2 MCE Blaster также поддерживает ручную настройку:- Режима (MDA/CGA/EGA),
- Горизонтального и вертикального разрешения,
- Горизонтального и вертикального смещения экрана (на стороне TTL) с помощью экранного меню.
- Чтобы войти в меню, долго нажмите обе кнопки (более секунды), пока не появится меню «MANUAL-TTL».
- Однострочное меню состоит из 4 элементов, которые можно изменять. Текущий выбранный элемент заключён в квадратные скобки [<selected>]. Например:
Код:
Currently
Selected Horiz Offset Vertical Offset
vvv vvv vvv
MANUAL-TTL [CGA] 640 x 200 X: AUTO Y: AUTO
^ ^ ^ ^
On/Off TTL-mode Horiz x Vertical Resolution
- Измените значение выбранного элемента коротким нажатием кнопок.
- Перебирайте элементы долгим нажатием кнопок: одна кнопка перебирает в одном направлении, другая — в противоположном.
- Опции сохраняются во флеш-память, когда пользователь не нажимает кнопки в течение 12 секунд.
Сброс к заводским настройкам (с v0.2)
Иногда пользователь может сохранить во флеш-память конфигурацию, которая делает MCE Blaster непригодным для использования. В этом случае можно сбросить настройки, нажав обе кнопки при включении устройства. При успешном сбросе светодиод будет быстро мигать около 2 секунд. После этого кнопки можно отпустить, и MCE Blaster запустится с настройками по умолчанию.Профили (с v0.3 beta13)
MCE Blaster поддерживает несколько профилей, что помогает при смене видеокарт. Настройки для одной карты могут быть в Профиле 0, для другой — в Профиле 1 и т.д. Профиль по умолчанию — Профиль 0.Смена профиля — долгое нажатие кнопки AUTO ADJUST и перебор профилей кнопками AUTO ADJUST или PIXEL CLOCK.
Профили кратко продемонстрированы в видео part 3.
4. Как это работает
Обзор
Первый процессор читает TTL-видеоданные (через преобразователь уровней) из PIO-автомата и помещает пиксели в буфер в памяти. Второй процессор работает полностью независимо от первого, читает пиксели из буфера и подаёт их вместе с необходимыми сигналами горизонтальной и вертикальной синхронизации в PIO-автомат, который записывает их на выходы GPIO. Выход преобразуется в аналоговый сигнал с помощью простого R-2R ЦАП, состоящего из двух резисторов. Визуальный обзор — в видео part 1.PIO-автоматы
PIO-автоматы используются не только для приёма TTL-видеоданных и записи VGA-видеоданных, но и для других вспомогательных функций, включая:- Обнаружение отсутствия входного сигнала: проверяет, активен ли сигнал горизонтальной синхронизации.
- Обнаружение смещения изображения: подсчитывает пиксели чёрной рамки до тех пор, пока не будет найден не-чёрный пиксель по всем строкам. Этот подсчёт используется для автоматического центрирования изображения.
- PIO-автомат EGA также выполняет коррекцию коричневого пикселя, потому что накладные расходы на выполнение этого в ядре CPU были слишком высоки.
Тактовый сигнал выборки
TTL-видеовход читается PIO-автоматом (по одной версии для каждого видеорежима). Но чтобы он выбирал пиксели в нужное время, необходимо точно настроить период выборки в соответствии с внутренней пиксельной частотой TTL-видеокарты. Использование делителя тактовой частоты PIO не даёт достаточной точности, потому что дробная часть делителя — 8-битное число, что даёт точность ~0.004 нс, но реально нужно около 0.001 нс. Поэтому используется несколько реализаций кода автомата, каждая с разным периодом выборки, и выбирается та, у которой наименьшая ошибка деления с использованием 8-битного делителя PIO. Этот процесс подробно объясняется в видео part 2.5. Перечень компонентов (BOM)
| Обозначение | Кол-во | Значение | Описание |
|---|---|---|---|
| N/A | 3 | 1K Rm065 линейный потенциометр с выводным монтажом (опционально: можно заменить проводом между 2 пинами, как показано на PCB и фото) | Регулировка сигналов R G B VGA |
| C1 | 1 | 0.1 мкФ дисковый керамический конденсатор | Развязывающий конденсатор для ИС преобразователя уровней |
| D1 | 1 (опционально) | Диод с выводным монтажом (например, Шоттки 1N5817 или кремниевый 1N4001) | Для питания MCE Blaster от ПК (вместо micro-USB Pico) |
| J2 | 1 (опционально) | 1x02 male pin header 2.54 мм с выводным монтажом | Для альтернативного внешнего питания |
| J1 | 1 | DB9 Male Horizontal | Для подключения к TTL-видеокарте |
| J3 | 1 | DB15 Female HighDensity разъём (например, Kycon K61X-E15S-NJ-VESA) | Для подключения к VGA-монитору |
| R3 R4 R6 | 3 | 390 Ом резистор с выводным монтажом 1% (альтернативно 470 Ом) | Для ЦАП VGA-сигнала |
| R2 R5 R7 | 3 | 780 Ом резистор с выводным монтажом 1% (альтернативно 1 кОм) | Для ЦАП VGA-сигнала |
| SW1, SW2 | 2 | 6 мм кнопка с выводным монтажом | Кнопки Auto-adjust и pixel-clock |
| U1 | 1 | 74LVC245A DIP-20 (например, SN74LVC245AN) (+ опциональная панелька) | ИС преобразователя уровней (ПРИМЕЧАНИЕ: в видео используется 74HCT245, который работает вне спецификации) |
| U2 | 1 | RaspberryPi Pico (или Pico 2) | Pi Pico (или Pico 2) |
| N/A (для Pico) | 2 | 1x20 female pin-header 2.54 мм с выводным монтажом | Заголовки Pico для PCB |
| N/A (для Pico) | 2 | 1x20 male pin-header 2.54 мм с выводным монтажом | Заголовки для Pico |
Потенциометры опциональны. Их можно заменить проводом, как показано на фото.
6. Инструкции по сборке (для разработчиков)
Требования:- Кросс-компилятор C++17 (см. инструкции в https://github.com/raspberrypi/pico-sdk)
- Pico-SDK 2.2.0 или более поздняя версия
- cmake 3.13 или более поздняя версия
Bash:
$ cd firmware && mkdir build && cd build
$ cmake -DPICO_BOARD=<pico|pico2> -DCMAKE_BUILD_TYPE=Release -DPICO_FREQ=270000 -DPICO_SDK_PATH=<path-to-pico-sdk> ../src/
$ make -j
7. Журнал изменений
- Rev 0.1: Начальный выпуск.
- Rev 0.2: Крупный редизайн. Ручной TTL, меню с живым фоном.
- Rev 0.3: Улучшенная регулировка пиксельной частоты со смещением выборки, поддержка Pico 2, исправление цветов на некоторых мониторах.
8. Лицензия
Проект распространяется под лицензией GPLv2.9. Резюме
MCEBlaster от scrapcomputing — это универсальный автономный конвертер MDA/CGA/EGA (TTL) в VGA на базе Raspberry Pi Pico, обеспечивающий пиксель-в-пиксель вывод на стандартные VGA-мониторы без апскейлера или 15 кГц монитора. Устройство поддерживает режимы VGA 640×400, 800×600 и 640×480, автоматическое центрирование изображения, коррекцию коричневого цвета EGA, настройку пиксельной частоты и смещения выборки, экранное меню, профили для разных видеокарт и сброс к заводским настройкам. Проект включает полную документацию: схему, PCB, BOM, прошивки для Pico 1 и Pico 2, инструкции по сборке и использованию. Это отличное решение для энтузиастов, желающих подключить старые видеокарты к современным мониторам.Файлы для загрузки
| Название файла / Папка | Описание | GitHub | Yandex.Диск |
|---|---|---|---|
| firmware (папка) | Исходный код прошивки для Pico/Pico 2 | Ссылка на GitHub | Ссылка на Яндекс.Диск |
| img (папка) | Изображения и скриншоты проекта | Ссылка на GitHub | Ссылка на Яндекс.Диск |
| kicad (папка) | Исходные файлы проекта в KiCad (схема, PCB, rev 0.3) | Ссылка на GitHub | Ссылка на Яндекс.Диск |
| Скачать все файлы | Все файлы находятся в одном архиве | Ссылка на GitHub | Ссылка на Яндекс.Диск |