Разработка предыдущей видеокарты затянулась и зашла в тупик. Материалы были пересмотрены и доработаны.
Новая видеокарта будет подключаться к компьютерам "ZX SPECTRUM 48K" и "LENINGRAD" через кросс-плату "SPACE MISSION 2020".
Основное назначение:
1. Устранение клешинга.
2. Ускорение игр за счёт аппаратного копирования буфера на экран.
Концепция при переделке игр - оставляем основной код и спрайты, переделываем вывод на экран.
Рисовать в новом режиме будем сразу по 8 точек текущими цветами.
Режим рисования маски цветом COLOR0 будет включаться командой LD L,L.
Режим рисования спрайта цветом COLOR1 будет включаться командой LD H,H.
Режим рисования обоими цветами сразу будет включаться командой LD B,B.
Строение видеопамяти:
В видеопамяти на каждую точку будет приходиться по 6 битов. 1 бит - BITMAP, 4 бита - цвет точки NEW_COLOR, 1 бит - откуда брать цвет точки при выводе на TV (0 - из BITMAP и атрибута старого экрана, 1 - из NEW_COLOR). Для записи и чтения процессором Z80 доступен только байт BITMAP на 8 точек, соответствующий старому экрану.
Вместо ПЗУ будут подключаться две новые области графики по 8 К адресов: видеобуфер VBUF1 с адреса 0000 и новый экран SCR2000 с адреса 2000H. Ещё будет видеобуфер VBUF2 для временного хранения.
Копирование между видеобуферами и новым экраном будет аппаратным за 1 мс.
Формат хранения изображения в буфере:
Линейный буфер с простым переходом к байту рядом в любом направлении. Экзотические форматы буфера при доработке игр преобразовывать линейному формату.
В линейном буфере максимум 256 байтов по вертикали. Для стандартного экрана 256*192 точек достаточно буфер высотой 192 байта.
Можно в этой же области памяти разместить линейные атрибуты. По вертикали 24 атрибута. 256-24=232.
Если с запасом 32 атрибута, то буфер точек может быть высотой 256-32=224.
Небольшой запас может пригодиться.
Чтобы определить адрес атрибута в линейном буфере с адреса 0000 надо к координате Y (в знакоместах) прибавить E0 и записать в младший байт адреса. Координату X (в знакоместах) записать в старший байт адреса.
Для копирования на экран нужно задать координаты левого верхнего угла и размеры окна в байтах.
После записи последнего параметра можно запускать процесс копирования с остановкой Z80.
Если использовать ПЛИС, генератор 56 MHz и SRAM 256K * 16 10 ns.
Если шина 16 бит, то нужен доступ за 1 такт 56 MHz. Если шина 64 бита, то за 1 такт 14 MHz.
Время копирования буфера на экран во время бордера будет равно 32 * 192 * 2 * 4 / 56 MHz = 878 мкс.
Буфер, где готовится следующий кадр игры, начинается с адреса 0000. Размер буфера 8 кбайт адресного пространства Z80.
Координата Y записывается в младший байт адресного регистра, а координата X (в байтах) - в старший байт.
Команды типа
ld a,(hl)
and d ; вырезаем по маске
ld (hl),a
Заменяем на
ld l,l ; записываем маску
ld (hl),d
Однобайтовая неиспользуемая команда Z80 ld l,l используется для быстрого включения режима рисования нулевыми битами в видеопамяти.
Адрес байта справа:
inc h