Для тех кто не дочитал до конца статью в моем блоге, поясню, что Rev.A будет не просто репликой "Агат-7", но и репликой Apple, Commodore, Atari и пр. компов с процессорами семейства 6502. По возможности я постарался учесть нюансы этих компьютеров в этой версии, чтобы избежать проблем при их дальнейшей имплементации на этой плате. Например, я добавил возможность перевода адресной шины процесссора в 3-тье состояние, чтобы можно было реализовать ПДП с картами расширения или добиться совместимости с процессором 6510 из Commodore-64, который отличается от 6502 возможностью переводить шины в третье состояние (ну и 6-тью портами ввода/вывода, но это решается в ПЛИС).
Я почти закончил со схемой Rev.A и уже собирался начать разводить плату, но тут понял, что я упустил один важный момент - каждый компьютер имеет свою собственную палитру цветов и я уже не отделаюсь 3-х битным RGB плюс сигнал яркости, как реализовано сейчас.
Почитав статьи о Commodore и Atari, я понял, что для более или менее аккуратной цветопередачи надо делать как минимум 15-битный RGB. Это означает, что потребуется на 11 ног ПЛИС больше, чем сейчас. Фактически это не оставляет больше никаких запасных ног если потребуется, например, дополнительно вывести сигнал на плату расширения какого-либо из имплементируемых компьютеров.
Большинство из этих компьютеров используют YPbPr цветовое пространство и варианты их ограничены. Я посчитал, что будет достаточно 9 ног ПЛИС, чтобы вывести все возможные варианты для любого из компьютеров. Это всего на 5 ног больше чем сейчас и мы все еще имеем 6 ног в запасе.
Но тут возникает проблема преобразования этого сигнала в RGB для вывода на монитор. Перебрав несколько вариантов я пока остановился на следующем варианте - установить на плате вторую ПЛИС Cyclone 2, но с 144 ногами. Благодаря тому, что она содержит в себе 13 умножителей 18х18 она сможет эффективно налету пересчитывать цветовое пространство в RGB используя таблицы, загруженные во встроенную память, либо просто напрямую использовать заранее подготовленные коэффициенты конвертации, если цветов не очень много и память позволит их разместить. Использование именно этой модели позволит применить уже существующую схему питания. Кроме того, эту ПЛИС можно будет программировать с помощью микроконтроллера STM32 как и основную ПЛИС. Дополнительным преимуществом такого решения будет возможность загрузки различных вариантов палитр под любой компьютер и их обновление с SD-карты также как и прошивки основной ПЛИС.
Благодаря достаточному количеству ног, можно будет реализовать 24-битный RGB выход, добившись максимальной точности отображения оригинальных цветов имплементируемых компьютеров. Конечно, некоторые цвета могут выпасть из RGB палитры, но при 24-битном выходе близкий к нему цвет замены не будет сильно отличаться. Проект удорожается лишь на стоимость ПЛИС ($13) и резисторы для ЦАП.
Не исключено, что дальнейшая оптимизация и определенность с имплементируемыми компьютерами приведет к тому, что Rev.B будет содержать этот модуль в себе и необходимость во второй ПЛИС отпадет, но пока я оставил бы некоторый запас на расширение.
А теперь собственно вопрос - есть ли какие-либо более изящные и/или дешевые способы решения этой задачи? Если нет, то завтра добавлю вторую ПЛИС в схему и начну разводку.