Видеокарта "METEOR" предназначена для устранения клешинга атрибутов в старых играх для "ZX Spectrum".
Про завершение разработки видеокарты читайте в новой теме METEOR-2020.
Идея такая - делаем новый комп, заточенный под графику. Он кроме стандартного режима графики будет иметь дополнительный. Оба на частоте 3.5 MHz. В новом режиме мы сначала, используя байт маски, рисуем черный силуэт спрайта. Маска меняет цвет точек выборочно. Потом, используя байт спрайта, рисуем контур спрайта выбранным цветом. Тоже цвет точек меняется выборочно. Этот режим для раскрашивания старых игр.
Если для новых или портирования с других компьютеров, то лучше сделать буфер для подготовки следующего кадра игры с адреса 0000H вместо ПЗУ. При этом адресацию надо сделать линейную как в Орионе и Специалисте. Это позволит рисовать спрайты блочными командами. Спрайты располагать также с линейной адресацией. Тогда первый столбик спрайта шириной 8 точек мы сможем нарисовать сверху-вниз командой LDIR, затем переместить адреса HL и DE вправо с помощью команд INC H, INC D и рисовать второй столбик снизу-вверх командой LDDR.
Ну и скорость для новых игр можно переключить на TURBO 14 MHz.
ПРИНЦИП УСТРАНЕНИЯ КЛЕШИНГА И ДОРАБОТКИ СТАРЫХ ИГР:
Скрытый текст
Параллельно стандартной памяти 48К добавляется графическая память. В графическую память запись идет сразу по 8 байтов. Каждый байт соответствует биту в основной памяти. В стандартном режиме графики в старшие 7 битов записываются единицы, а в младший - соответствующий бит как в стандартную память.
Фон рисуется как обычно в хороших цветных играх в буфер. В разных играх буфер разного размера и по разным адресам. Как только фон нарисован - копию буфера аппаратно сохраняем в дополнительном буфере.
После этого включаем новый режим рисования цветом PAPER. Подпрограмма вывода спрайта немного дорабатывается. Маска спрайта читается и просто пишется в буфер без команды AND. При этом вместо нулевых битов записывается 4 бита цвета PAPER в соответствующий байт новой памяти. В старшие биты записывается 0000.
После этого включаем новый режим рисования цветом INK. Подпрограмма вывода спрайта немного дорабатывается. Байт спрайта читается и просто пишется в буфер без команды OR. При этом вместо единичных битов записывается 4 бита цвета INK в соответствующий байт новой памяти. В старшие биты записывается 0000.
Далее готовая картинка копируется аппаратно из буфера в экраную область.
При выводе на телевизор читается байт из графической памяти. Если старшие биты 1111111 - цвет в старом режиме. Значит надо прочитать атрибут из стандартного экрана и цвет получить из него. Если старшие биты не 1111111 - цвет точки брать из четырех младших битов графической памяти.
Перед подготовкой следующего кадра игры аппаратно восстанавливается фон в буфере из ранее сохраненной копии. Это делается для того, чтобы стереть спрайты на старых местах. Затем рисуются новые спрайты.
Таким образом можно перекрасить старые игры и устранить клешинг.
Время копирования буфера 256х192 точки составит около 1 мс. Это позволит обойтись без второго экрана. Рисуем в буфере и быстро копируем на экран.
Для адресования новых портов видеокарты Метеор надо будет сделать параллельную страницу портов, которая будет подключаться записью числа в порт FF. Тогда можно будет новых портов сделать сколько угодно.
В Орионе и Специалисте был медленный проц. Если использовать статику, то можно сделать Z80 на 14 MHz.
Для сохранения ретро цвета остаются как в ZX Spectrum.[свернуть]
ПРИНЦИП РАСКРАШИВАНИЯ СТАРЫХ ИГР:
Скрытый текст
Как устранить клешинг я придумал, но спрайты могут получиться только одного цвета. Как же дорабатывать игры, чтобы была возможность каждый спрайт рисовать своим цветом ?
Для начала в конце подпрограммы вывода спрайта можно записать в порт атрибута PAPER = 0, INK = 7, BRIGHT = 1. Тогда все спрайты, для которых не выбраны индивидуальные цвета будут рисоваться без клешинга ярко-белым цветом. Потом некоторые спрайты можно перекрасить, если захочется.
Нужно найти место в программе, где рисуется каждый тип спрайтов. Например, пчелы, летучие мыши и т.д. Скорее всего они рисуются одной подпрограммой, но перед ее вызовом для каждого типа спрайта указывается адрес начала его блока спрайтов. Скорее всего эта команда имеет длину 3 байта. Вместо нее написать команду перехода на дополнительные команды настроики цвета спрайта, а в конце написать ту команду, которую мы затерли и команду перехода назад к следующей команде.
Команды выбора цвета спрайта - это запись атрибута в порт атрибута. Надо будет для каждого объекта сделать свою команду записи атрибута со своими цветами PAPER и INK. Если объектов много, то надо где-то найти свободное место в игре для модернизации. Или придется в компьютер МETEOR-2020 добавить возможность включать блок ОЗУ вместо ПЗУ на время рисования спрайтов.
Если загружать в теневое ОЗУ блок команд для модернизации игры, то это можно использовать как типовое решение во всех играх и не искать свободное место в игре.[свернуть]
ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ:
Скрытый текст
Z80 на частоте 3.5 / 14 MHz.
Разрешение 256х192 точек.
Стандартные 15 ZX цветов.
Видеовыход: цифровой 4 бита RGBI c TV разверткой.
INT 50 Hz сразу после отображения последней строки окна 256х192.
Параллельная память графики 1 байт на 1 точку.
Рисование сразу по 8 точек. В стандартном режиме - одновременно, в новых режимах рисование точек выборочно.
Режимы рисования: стандартный, цветом PAPER (нулевыми битами), цветом INK (единичными битами), обоими цветами PAPER и INK (и нулями и единицами как раньше).
Аппаратное копирование блоков памяти в параллельной памяти. Время копирования буфера на экран около 1 мс.
Линейный буфер для рисования следующего кадра с адреса 0000H.[свернуть]
Вики о метеорите "Челябинск"
Про завершение разработки видеокарты читайте в новой теме METEOR-2020.