Замечу, что программирование адаптера VGA в стандартном режиме (640х480, 16 цветов), устанавливаемом процедурой InitGraph с помощью автодетектирования, полностью аналогично программированию адаптера EGA.

Каждая битовая плоскость связана с аппаратным устройством, формирующим определенную цветовую составляющую RGB— монитора: первая плоскость — синюю составляющую, вторая — зеленую, третья — красную (четвертая плоскость определяет интенсивность цвета). Поэтому цвет любого пиксела определяется совокупным значением бит в одном и том же разряде всех четырех битовых плоскостей: старший бит первого байта определяет цвет самого левого верхнего пиксела, следующий разряд первого байта — цвет второго пиксела в первой строке и т.д. Например, чтобы первый слева—сверху пиксел светился ярким белым цветом (точнее, цветом с номером 15; фактическое значение цвета может изменяться с помощью процедуры переустановки палитры), все 4 битовые плоскости должны иметь единицу в старшем разряде первого байта, а чтобы этот пиксел не светился (светился цветом 0) — ноль; другие комбинации нулей и единиц в том же разряде обеспечивают остальные цвета пиксела.

Между данными, посылаемыми (получаемыми) центральным процессором (ЦП), и видеопамятью расположено 4 буферных регистра — по одному на каждую битовую плоскость. Если ЦП записывает данные в видеопамять, он фактически записывает их в буферные регистры, точно так же при чтении — получает данные из них. Допустим, что показанные на рисунке управляющие регистры (регистры маски и цвета) не влияют на обмен данными. Тогда при записи байта со значением 128 (или в двоичном представлении 10000000) по адресу $АООО:ОООО во все четыре буферных регистра будет помещена одна и та же цепочка бит lOOOOOOQi в результате чего самый левый пиксел в верхней строке будет светиться белым цветом, а семь расположенных справа от него пиксел будут погашены.

Чтобы изменить цвет первого пиксела, мы должны перед записью байта отключить тот или иной буферный регистр. Для этого используется четырехразрядный регистр цвета: если в одном из разрядов этого регистра имеется ноль, соответствующий буферный регистр защищен от изменения, а значит не будет меняться и связанная с ним битовая плоскость. Чтобы, например, зажечь первый пиксел синим цветом, мы должны предварительно поместить в регистр цвета число 1, тогда лишь одна первая плоскость при записи байта изменит свое значение, в то время как три других останутся без изменения.

Во многих случаях не требуется одновременно изменять все восемь пиксел, связанных с одним и тем же байтом данных. Регистр маски битов позволяет управлять содержимым нужного разряда всех четырех буферных регистров одновременно: если регистр маски имеет ноль в каком—либо разряде, соответствующий разряд буферных регистров будет защищен от изменения. Таким образом, чтобы изменить только один первый пиксел, мы должны поместить в регистр маски двоичное число 10000000 (128), в регистр цвета — код нужного цвета, а затем записать по адресу $АООО:ОООО любое число с единицей в старшем разряде. Замечу, что регистр маски лишь запрещает изменение нужного разряда (разрядов)