Не надо столько режимов.
Режим 1 – цвет 1 байт на 8х1 пикселей;
Режим 2 – цвет 2 байт на 8х1 пикселей;
Режим 3 – цвет 3 байт на 8х1 пикселей;
Режим 4 – цвет 4 байт на 8х1 пикселей.
Во всех режимах доступна палитра 16/256. Всего 16 палитр, по умолчанию палитра 0. По умолчанию представляет стандартные цвета. Любой цвет любой палитры может быть объявлен прозрачным. Смена палитры, переопределение цвета в палитре и объявление цвета прозрачным производятся через вызов соответствующих функций. С одинаковыми номерами во всех трёх режимах.
Программы, которые не знают об этих функциях и не знают их номеров, всё равно не смогут их вызвать. А конструкция «видеочипа» будет проще. Номера режимов прямо указывают на количество битов на пиксель (байтов на тайл 8х1).
Во всех режимах по умолчанию атрибут на знакоместо. Но можно установить флаг атрибут на строку знакоместа. Атрибут из расчёта байт на битплан слоя, хранит номера цветов 16-цветной палитры. В качестве атрибута всего знакоместа используется атрибут его 0 строки. Дополнительный параметр устанавливает возможность использовать бит 7 битплана 0 как бит мерцания, в этом случае для фона битплана 0 доступны только цвета 0-7 текущей палитры. По умолчанию (после сброса) параметр установлен.
Во всех режимах возможна установка разрешения 256х192 или 320х200. Разрешение 320х240 (QVGA) не нужно, оно использовалось только на мобилках и карманных медиалеерах с середины «нулевых», но под него не было каких-то эксклюзивных удачных игр, портировать с него нечего. А в 320х200 много старых игр (на PC, например). Зато, возможно, стоит рассмотреть вариант 320х180 – он будет без чёрных полосок подгоняться под современные мониторы 16:9. По умолчанию (после сброса) разрешение 256х192.
По умолчанию во всех режимах экран располагается с адреса 8000h, при необходимости адрес может быть переключён на 0000h.
Такая архитектура в силу своей ортогональности максимально упрощает разработку и отладку видеокарты, а также интуитивно понятна программисту.
Расход памяти в байтах на каждый слой: 2 х номер_режима х разрешение_режима. Округлённо: 64 КБ на экран 320х200 в режиме 4. На 8 слоёв необходимо 512 КБ памяти.
Рендеринг изображения производится в буфер (ramdac), всего есть 2 буфера, которые переключаются по кругу (двойная буферизация). Переключение буферов производится специальным вызовом вручную. При 8 слоях в режиме 4 у нас будет максимум 128 цветов на точку, округляем до байта и получаем 128 кб двухпортовую память (два буфера 320х200х256). При переключении буфера текущая палитра дублируется в теневую копию, которая затем используется при выдаче содержимого буфера на экран. Т. е. на экране отображается одна 256-цветная палитра, а мы работаем в видеопамяти с другой.
P.S. Номер режима 0 может быть использован (зарезервирован) для текстового режима видеокарты (пригодится для системных и офисных программ).
P.S.2. Не понимаю какая разница с какого адреса у нас видеопамять: с 0000 или 8000, всё равно банками щёлкать. Хотя как бы процессору и незачем лезть непосредственно в память спрайтовой видеокарты (а Метеор хоть и несколько оригинальная, но таки спрайтовая видеокарта). А вот источником головной боли для программиста/хакера-адаптатора отображение видеопамяти поверх системного ПЗУ вполне может стать. Ведь игра вполне может вызывать отдельные функции оттуда. Или использовать системный шрифт.