У перерахованих адаптерах апаратно реалізований стандартизсванный спосіб установки таблиці знакогенераторов, можливість змінювати бітові карти лише для деяких символів і ін. Крім того, EGA –  і VGA – адаптери дозволяють использоать у текстовому режимі розширену до 512 символів таблицю знакогенератора.

Керування знакогенератором EGA - і VGA – адаптерів виконує функція 11h переривання 10h BIOS. Вона має ряд подфункций, обираних значенням регістра AL. Ця функція входить у так називані розширення BIOSа, тобто є функцією, що доповнює стандартний BIOSсистемной плати.

У текстових режимах EGA - і VGA – адаптери дозволяють використовувати кілька повних таблиць знакогенератора, називаних блоками. На кожні 64До байт відеопам'яті адаптера мається по одному блоці. Таким чином, EGA -  адаптер може мати до чотирьох блоків, а VGA – адаптер – до 8 длоков. При роботі в текстовому режимі існує можливість зробити активними відразу два блоки з обраними номерами. У результаті на екрані можна буде відображати до 512 різних обрисів символів. У режимі з двома таблицями вибір таблиці буде виконувати біт 3 байти атрибута символу. Графічні режими розглянутих адаптерів дозволяють використовувати тільки одну повну таблицю для 256 символів.

Таблиці знакогенераторов для графічних режимів розташовуються або в оперативній пам'яті, або в ПЗУ на платі адаптера. У текстових режимах таблиці знакогенераторов розташовуються на плані 2 відеопам'яті адаптера (про плани пам'яті див.у 8.2). Щораз, коли відбувається переключення в текстовий режим, повинна виконаються завантаження знакргенератора у відеопам'ять адаптера. “Обрис” символу задається бітовою картою з 8 стовпців і 8, 14 або 16 рядків у залежності від режиму роботи адаптера (див. табл. 8.1). Бітові карти символів розташовуються послідовно друг за другом, починаючи з бітової карти для символу з ASCII – кодом 0 і закінчуючи бітовою картою символу з ASCII – кодом 255. Таблиці знакогенераторов приведені у відповідність з режимом роботи адаптера. Наприклад, при виборі графічного режиму 12h (знакоместо 8х16, див. табл.8.1) використовується таблиця знакогенератора, у якій для обрису кожного символу застосовується 16 байт.

Таблиці знакогенераторов у текстових режимах можуть бути перевизначені частково: можуть бути задані власні бітові карти для якого-небудь діапазону символів, наприклад з ASCII-кодами від 25 до 32, або навіть для єдиного символу. Однак зроблені зміни в таблиці будуть знищені при будь-якім переключенні з режиму в режим. Те ж саме відноситься і до установки відразу двох активних наборів символрв. Тому якщо необхідно зробити зміни таблиці знакогенератора постійними, після кожного переключення режиму необхідно знову завантажувати визначену пользлвателем таблицю або активізувати двох таблиць. По такому принципі саме працюють програми, що виконують “русифікацію” екрана. Відразу після запуску подібна програма завантажує визначену користувачем таблицю (звичайно це Alt - таблиця), підмінює вектор переривання 10h і завершується резидентно. При кожнім звертанні до переривання 10h керування спочатку одержує резидентная програма “русифікації” екрана вона викликає “старий” оброблювач переривання 10h. Якщо була викликана функція переключення режиму, “русифікатор” виконує повторне завантаження визначеної користувачем таблиці знакогенератора.

При висновку тексту в графічних режимах 0Dh – 13h вектор прерывалия 43h вказує адреса початку використовуваної таблиці знакогенератора. Тому підмінивши даний вектор на адресу власної таблиці, можна виводити в графічному режимі “замовлені” символи. На відміну від CGA –режимів вектор 43h  указує на повну таблицю для 256 символів, а не тільки на 128 старших символів, як це має місце при висновку тексту в графічних режимах CGA – адаптера (див. 9.8).

Далі як приклад приводиться варіант програми L9_16.C, що використовує установку власної таблиці знакогенератора в режимі 12h – VGA – режим з 16 квітами і форматом текстового екрана 80 х 30. Для простоти як бітові карти для символів з кодами 128 – 133 використовуються розглянуті в 9.8 бітові карти, доповнені нульовими байтами. Тло, по якому плазує “черв'як”, формується з 16 вертикальних смуг вссех можливих квітів.

/*L9_17.C*/

#include <dos.h>

#include <bios.h>

#include “screen.h”

struct adress {char far*p;};

struct adress far*int_43h=( struct adress far*) 0x00000010cL;

char far*int_tmp;

char*phaze1= “\x80\x81\x82\x83”;

char*phaze2= “\x84\x85\x85\x85\x83”;

/*Таблиця знакогенератора для висновку символів з кодами 128-255 у

  графічних режимах8x8.*/

char graf_table[ ]={

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x10, 0x0c, 0x06, 0x03, 0x01, /*символ 128*/

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x01, 0x07, 0x1c, 0x38, 0x70, 0xe0, 0xc0, /*символ 129*/

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x80, 0xe0, 0x38, 0x1c, 0x0e, 0x07, 0x03, /*символ 130*/

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x10, 0x2e, 0x7e, 0xf8, 0x80, /*символ 131*/

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x07, /*символ 132*/

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff}; /*символ 133*/

void main(void)

{int і; char*ptr, row=0, col=1, semafor=0;

set_mode (0x12); /*установлюємо відеорежим 12h*/

/*Збереження “старого” вектора 43h; виконується обов'язково після, а не до

переключення режиму через улаштування впливу протрамм -“русифікаторів” екрана,

 можливо, встановлених у системі.*/

int_tmp=int_43h ->p;

/*Установка таблиці знакогенератора graf_table; тому що перевизначаються тільки

символи 128-133, “зміщаємо” покажчик на 128*16=22048 байт.*/

int_43h->p=(char*)(graf_table-2048);

/* “Заливання” екрана смугами різних квітів.*/

for (i=0; i<16;i++)

scroll(ENTIRE, 0, 5*i, 29, 5*(i+1)-1, i);

/*Нескінченний цикл чергування фаз руху.*/

while(!bioskey(1))

{if(!semafor)

 {ptr=phaze2; col--; }

else ptr=phaze1;

semafor^=1;

goto_xy(row, col, 0);

hor_prn(row, col, ptr, 0xff);

delay(150);

hor_prn(row, col, ptr, 0x81);

col++;

if(col==77)

 {col=0; row++;}

if(row==30) row=0;

}

/*Відновлення таблиці векторів переривання.*/

int_43h->p=int_tmp;

bioskey(0);

}

Розглянута програма буде працювати й у EGA – режимах, але для цього буде потрібно коректування масиву graf_table з урахуванням іншого числа рядків і стовпців тексту й іншого знакоместа.