Паяю платы и раздумываю про вывод спрайтов на экран.
ВидеоЦАП можно сделать по схеме R-2R по 5 бит на каждый из каналов RBG без палитры. Сначала реализовать копирование спрайтов из ОЗУ спрайтов в ОЗУ экрана с учетом прозрачного цвета. Ранее предполагалось две ОЗУ с независимым подключением шин адреса и данных к FPGA. Но теперь понятно, что просто так копировать из одной ОЗУ в другую нельзя. Надо анализировать прозрачный цвет. Если точка прозрачная - записывать не надо. На обработку будет тратиться цикл. Поэтому лучше адреса подавать на две ОЗУ параллельно, а данные и управляющие сигналы соединить отдельно у каждой. Тогда получим ОЗУ 256Kx32. Это позволит загружать и обрабатывать сразу по 4 точки.
Когда я писал дему к игре FUTURE TANK для ZX SPECTRUM 128K я рисовал на экране танки, у которых корпуса могли быть разного цвета, а гусеницы одного. Наверно в других играх тоже бывают ситуации, когда надо изображать одинаковые объекты разными цветами. Поэтому нужно предусмотреть, чтобы перед отображением спрайта можно было бы выбирать цвет.
Допустим, мы хотим изобразить шарики одинакового размера, но разного цвета. Мы можем нарисовать шарик одного из цветов с градациями яркости. Шарик будет выглядеть объемно. Сделаем из него спрайт, а при выводе будем менять цвет на тот, который требуется. Для этого каждую точку полутонового изображения закодируем одним байтом в таком формате:
D7-D5 - номер цвета в спрайте ( при 1-6 эти цвета спрайта можно выбрать при выводе)
D4-D0 - градация яркости данного цвета.
Если D7-D5 = 0, то цвета общие у всех перекрашиваемых объектов, например, гусеницы у танков.
D4-D2 - номер цвета
D1-D0 - градации яркости
Несколько перепрограммируемых цветов могут пригодиться, например, при изображении четырех черепашек нидзя. Все одинакового зеленого цвета, глаза белые с черным, а вот повязки на голове разные. Можно нарисовать спрайты для одного, а при выводе задавать цвет повязки. Тут вроде один переопределяемый цвет. Но у врагов могут быть разные шапки, пояса, сапоги и т.п. вещи и было бы удобно нарисовать спрайты для одного, а при выводе немного изменять несколько цветов в каждом. При этом каждая деталь объекта может быть изображена объемно за счет градаций яркости. 32 градации даже может быть многовато.
Цвета 5+5+5 соответствуют MSX2+
Еще один вариант кодирования цветов в байте:
D7-D3 - номер цвета: 0 - черный, 1-8 - номера цветов спрайта, которые можно менять при выводе, 9-30 фиксированный набор оттенков из палитры 5+5+5, 31 - прозрачная точка.
D2-D0 - 8 градаций яркости для выбранной пары оттенков.
Оттенки можно выбрать различимые и привычные:
от черного до синего
от черного до красного
от черного до сиреневого
от черного до зеленого
от черного до желтого
от черного до голубого
от черного до белого
от красного до белого
от зеленого до белого
от синего до белого
от желтого до белого
от сиреневого до белого
от голубого до белого
от красного до сиреневого
от красного до желтого
от зеленого до голубого
от зеленого до желтого
от синего до голубого
от синего до сиреневого


Ответить с цитированием

