Когда-то давно я переделал игру ZOO от Специалиста на Радио-86РК. Графика заменялась на переключаемый шрифт с тайлами игры. Появилась идея сделать в новом компьютере символьный режим с загружаемыми шрифтами с регулируемой шириной 4-16 точек и выводом на монитор VGA NHD 640*360.
Это позволит запускать после доработки мониторы Радио-86РК, Орион-128, Специалист, IS-DOS, CPM для быстрого вывода текста на VGA монитор.
По видеокарте найдены оптимальные по возможностям, сложности и скорости режимы. Решено отображать одновременно символьный и графический режимы с разрешением 640*360 точек. Символьный режим с аппаратным скроллингом позволит быстро выводить текст и фон из тайлов в играх. Графический режим имеет блиттер для быстрого рисования следующего кадра игры и два переключаемых буфера для устранения мерцаний. В каждом режиме точки могут располагаться на двух уровнях. При этом чередуются символьные и графические уровни, у каждого уровня свои палитры. Для экономии места под тайлы и спрайты в одном байте располагается две точки.
Символьный режим имеет размер буфера 256 строк по 256 символов. Символы отображаются автоматически из буфера символов. Скроллинг с шагом 2 точки. Для скроллинга указать начало окна - номер первой строки и столбца в буфере, первой строки и столбца в символе. При скроллинге по-горизонтали с шагом 2 точки 640 точек будут сдвинуты за 5.33 секунд. Для больших пространств из символов по мере движения добавлять в буфер новые символы.
Графический режим без скроллинга. Два переключаемых экрана. Рисовать спрайты с шагом 2 точки с помощью блиттера. Для указания координат спрайта добавить старший байт для x. Если рисовать спрайты в пределах 512 точек, а справа расположить рамку шириной 640-512=128 точек, то достаточно будет в старший байт записать 0 и использовать однобайтовые координаты. Для рамки записать в старший байт 1.
СИМВОЛЫ/ТАЙЛЫ.
Четыре шрифта можно прошить во FLASH 128 K для возможности вывода текста сразу после включения компьютера. 16 загружаемых шрифтов можно записать в SRAM 512 K. Это позволит использовать набор из 4K тайлов для фона в играх.
На каждый символ дополнительно есть байт атрибута. 3 бита - номер палитры, 1 бит - тип шрифта (прошитый/загружаемый), 4 бита - номер шрифта.
ДВУХУРОВНЕВЫЕ ТАЙЛЫ.
На точку 4 бита: 3 бита - номер цвета и 1 бит - уровень. В одном символе можно разместить точки фона, например, стены, и объекта на переднем плане - ящика, столба, камня. Между двумя уровнями символов разместить уровень графики. Также один уровень графики выше.
УРОВНИ И ЦВЕТА:
0 - стены, лес
1 - движущиеся объекты, выстрелы
2 - ящики, столбы, камни
3 - рамка, индикаторы
0 Символы 8 цветов
1 Графика 15 цветов + прозрачный
2 Символы 8 цветов
3 Графика 15 цветов + прозрачный
У каждого уровня свои 8 палитр.
У символов 2 точки в байте: 3 бита - номер цвета и 1 бит - уровень.
Атрибут тайла: 3 бита - палитра, 1 бит - тип шрифта, 4 бита - номер шрифта (1xxx - живые тайлы).
ЖИВЫЕ ТАЙЛЫ:
В играх нужно изображать огонь, воду, вращающиеся монетки и другие живые тайлы. Поэтому половину символов из 4К использовать под них. Каждый живой тайл состоит из 16 обычных символов, которые будут меняться автоматически через каждые 133 мс (8 кадров 60 Гц). Цикл движения будет около двух секунд. Всего живых тайлов будет 2K/16=128.
СПРАЙТЫ.
Спрайты рисуются в графическом режиме с помощью блиттера. Графический режим с двумя переключаемыми буферами для быстрого обновления изображения без мерцания.
В основной памяти спрайт хранится по 2 точки в байте:
4 бита - номер цвета, 1111 - прозрачный
Каждая точка в графическом режиме в видеокарте представляется одним байтом:
1 бит - номер уровня
3 бита - номер палитры
4 бита - номер цвета
При рисовании спрайта в графическом режиме выбрать нужный уровень и палитру.
Спрайты разных уровней можно накладывать с учетом прозрачности. Начинать рисование со спрайтов низшего уровня, затем более высокого. На мониторе видна будет непрозрачная точка с наивысшим уровнем.
Для палитры две микросхемы по 32 К.
Размеры символов: 4, 6, 8, 10, 12, 14, 16 точек. Для 80 символов в строке ширина символа 8 точек, для 64 символов в строке ширина 10 точек, для 40 символов в строке ширина 16 точек. В байте шрифта 2 точки по 4 бита.
При выводе слова на монитор достаточно установить шрифт, цвет, номер строки, номер столбца. Затем записывать в один порт все символы слова или предложения (OTIR). При записи символа в порт символа в буфер символа записывается символ, автоматически записывается атрибут из регистров шрифта и палитры, а затем увеличивается номер столбца.
Начало отображаемого окна через запись в порты: начальная строка, начальный столбец, начальная строка в символе, начальный столбец в символе.
Размер символа устанавливается через запись в порты: первая отображаемая строка символа (0-12), первый отображаемый столбец символа (0-12).
Полосы параллакса можно представить как прозрачные ленты с рисунками, которые уложены внахлест и могут независимо двигаться по-горизонтали.
Чтобы при скроллинге не записывать смещение для каждой строки используем старший бит начального столбца в символе как переключатель записи. Если он нулевой - загрузить новое значение в счетчики из памяти. Если 1 - загрузить в счетчики значение из регистров как у предыдущей строки.
Таким образом, для смещения с учетом параллакса во время кадрового гасящего импульса нужно обновлять смещение только для верхних и средних строк каждой полосы параллакса. У строк ниже будет такое же смещение, так как в старшие биты для них мы запишем единицы.
Строк VGA 360. Упростим запись смещения. Будет одно смещение у двух строк. Всего 180 пар. Хватит одного байта для адресации памяти.
Слои дальнего фона с параллаксом сделать простыми. Всего по 256 символов в каждом слое. Всего по одной палитре на слой. На точку 15 цветов плюс прозрачный. Смещение по-вертикали общее на оба слоя. Размер буферов символов по 256 столбцов символов и 128 строк.
VGA выход выбран с разверткой NHD 640*360.
Разрешение 640*360 точек.
Частота кварца 20 МГц выбрана для упрощения вывода на VGA NHD. Z80 на 5 МHz.
Планируется модель памяти с четырьмя окнами.
Адреса портов должны быть восьмибитные с полной дешифрацией. Избегать комбинирования битов нескольких регистров управления в один порт. Для упрощения каждый параметр записывать в отдельный порт с восьмибитным адресом. Так проще и быстрее.
Текущая конструкция модульного компьютера.
На рисунке изображена кросс-плата с 8 разъемами PBD-80. Модули размером 183*122 мм предполагается устанавливать горизонтально на разных уровнях. Большой размер модулей для большого количества микросхем логики в DIP корпусах. Между модулями стойки на 20 мм.