Для режима 640x350 мы имеем возможность подключать любой сегмент из 8 в любую из 7 областей экрана. Тогда нам нужно будет 4 порта, каждый из которых будет управлять двумя экранными местами (четверть экрана), куда можно будет подключать любой из 8 сегментов или вообще отключать эту часть экрана:
bit 7 - управление нечётным экранным местом (1-запрещено, 0-разрешено);
bits 4,5,6 - номер сегмента в нечётном экранном месте (0...7);
bit 3 - управление чётным экранным местом (1-запрещено, 0-разрешено);
bits 0,1,2 - номер сегмента в чётном экранном месте (0...7).
Запрещённое экранное место закрашивается чёрным цветом, а в будущем три бита у запрещённого сегмента можно считать цветом заливки...
P.S. Можно использовать оставшиеся в четвёртом порту 4 бита чтобы устанавливать видеорежим - два младших бита на цветность:
00 - 16-цветный режим без палитры;
01 - 256-цветный режим с палитрой "EGA2VGA";
10 - 256-цветный режим "Grayscale" (градации серого);
11 - 256-цветный режим с пользовательской палитрой (палитрами).
И оставшиеся 2 бита (старших) на кол-во строк:
00 - 200 строк первая страница (верхняя половинка видеопамяти);
01 - 200 строк вторая страница (нижняя половинка видеопамяти);
10 - 350 строк с настройками 7 окон видеопамяти;
11 - 400 строк с фиксированными окнами видеопамяти.
Режим 16-цветов 200 строк бессмысленен (потому что 640x200), поэтому комбинации 0000 и 0100 будут иметь иной смысл - отключение видео совсем (0000) и расширение на будущее (0100) - например аппаратный текстовый режим...
P.P.S. Режимы 0001 и 0101 тоже не сильно осмысленные на самом деле, но пусть будут - мало ли...
P.P.P.S. Вот полная линейка видеорежимов:
0000 - отключение видео совсем;
0001 - 320x200 первая страница с палитрой EGA2VGA;
0010 - 320x200 первая страница с палитрой GRAYSCALE;
0011 - 320x200 первая страница с пользовательской палитрой;
0100 - расширение на будущее (аппаратный текст?);
0101 - 320x200 вторая страница с палитрой EGA2VGA;
0110 - 320x200 вторая страница с палитрой GRAYSCALE;
0111 - 320x200 вторая страница с пользовательской палитрой;
1000 - 640x350 с настройками 7 окон видеопамяти;
1001 - 320x350 с настройками 7 окон видеопамяти и палитрой EGA2VGA;
1010 - 320x350 с настройками 7 окон видеопамяти и палитрой GRAYSCALE;
1011 - 320x350 с настройками 7 окон видеопамяти и пользовательскими палитрами;
1100 - 640x400 с фиксированными окнами видеопамяти;
1101 - 320x400 с фиксированными окнами видеопамяти и палитрой EGA2VGA;
1110 - 320x400 с фиксированными окнами видеопамяти и палитрой GRAYSCALE;
1111 - 320x400 с фиксированными окнами видеопамяти и пользовательскими палитрами.
P.P.P.P.S. Вот эта палитра EGA2VGA:
Частоты появления цветовых градаций:
0x54 очень близко к 0x55, 0xA9 очень близко к 0xAA, а 0xFE может быть заменено на 0xFF:
т.е. всего 7 уровней для каждой цветовой составляющей. Значит это должна быть комбинационная схема с 8 входами и 3*3=9 выходами (см.выше).
P.P.P.P.S. Поприкидывал на логике - палитра EGA2VGA тяжеловатой получается, т.е. видимо придётся аналоговые смесители на резисторах и транзисторах городить...
Единственное, что при аналоговом смешении коричневый будет не совсем коричневый, а скорее грязно-жёлтый:
http://avga.prometheus4.com/index.php?p=2-3
Наверное можно подмухлевать с аналоговым ключом, чтобы коричневый был исключением - у него надо зелёную составляющую в 2 раза уменьшать при аналоговом смешении:
http://en.wikipedia.org/wiki/Color_Graphics_Adapter
P.P.P.P.P.S. В палитре EGA2VGA я насчитал только 85 уникальных цветов и похоже удастся построить генератор такой палитры на резисторах и диодах, правда схема коррекции коричневого цвета добавляет хлопот...