режимі екрану. Знакогенератори адаптерів MDA/HGC і CGA програмно недоступні; вони виконані у вигляді мікросхем ПЗП, що ніяк не відображаються в адресному просторі процесора. Ці знакогенератори визначають фіксований набір з 256 відображуваних символів, і з їх «начинкою» доводиться стикатися при «русифікації» адаптерів даного класу. Знакогенератор CGA має формат 8х8 і найпростішу дуже наочну організацію: біт 7 відповідає найлівішій точці рядка розкладання, а біт 0 – правій. Кожному символу відводиться по 8 байт (рядків його розкладання), об'єм ПЗП рівний 2 Кбайт. Знакогенератор MDA/HGC має формат 8Ч14 (при знакомісці 9Ч14) з тим же розташуванням біт у рядку, і для нього потрібен ПЗП місткістю 4 Кбайт. Проте в розташуванні рядків трапляються різноманітні варіанти. Це може бути і виділення для кожного символу по 16 суміжних байт ПЗП з ігноруванням двох останніх, і більш хитромудрі варіанти, включаючи чергування рядків. Поширений, наприклад, варіант, коли в першій половині ПЗП розташовані по 8 перших рядків для кожного символу, а їх нижня частина (по чотири використовуваних і чотири фіктивні рядки) розташовується в другій половині. Хоча для даного знакогенератора потрібно всього 4 Кбайт, часто використовують більш поширені мікросхеми 2764 (8Кх8). Іноді в них поміщають два знакогенератори, і адаптер дозволяє вибирати таблицю програмно (звичайно нікому не відомим способом). Для визначеності, при програмуванні можна в обидві половини записати однакові таблиці. Самі таблиці для русифікації можна запозичити, наприклад, із завантажуваних русифікованих фонтів для адаптера EGA.
Знакогенератори адаптерів EGA і VGA розміщуються в другому шарі відеопам'яті і тому програмно доступні. При ініціалізації адаптера вони завантажуються з образів, що зберігаються в ПЗП розширення BIOS, встановлених на плати графічних адаптерів. Адаптер EGA дозволяє одночасно зберігати до чотири таблиць по 256 символів, а VGA – до восьми. Активною (використовуваною для відображення) може бути або одна з них, або відразу дві. В останньому випадку набір символів, що одночасно відображаються, розширяється до 512, а одна з двох таблиць, що використовуються для конкретного символу, визначається бітом 3 його байта атрибутів.
Таблиці мають 32-байтну розгортку кожного символу в форматі 16Ч16, з якої в EGA використовується матриця 8Ч14, а в VGA – 9Ч16. Якщо таблицю знакогенератора (фонти) для EGA завантажити в VGA, символи виглядатимуть дрібнувато, а в лініях, намальованих символами псевдографіки, з'являться розриви. Якщо ж фонти для VGA завантажити в EGA, то символи виглядатимуть усіченими (особливо знизу). Програмна доступність знакогенератора знімає необхідність апаратної русифікації адаптера, але при бажанні можна переписати русифіковані фонти в BIOS графічного адаптера (не забувши виправити контрольну суму в останньому байті ПЗП). Така процедура позбавить від необхідності завантаження резидентного русифікатора, що займає місце в пам'яті. Оскільки знакогенератор розташований в одному з шарів відеопам'яті, після використання більшості графічних режимів його вміст доводиться перезавантажувати, а вбудований драйвер BIOS за умовчанням візьме образ, що зберігався в ПЗП адаптера. Якщо туди підставити потрібний фонт, то додатковий драйвер екрану не буде потрібний.
Графічний контроллер є засобом підвищення продуктивності програмної побудови зображень, точніше їх образів, у відеопам'яті. В перших графічних адаптерах (CGA і HGC) цей блок фактично був відсутній. Він оформився в адаптері EGA, звідки перекочував і в VGA. В цих адаптерах його функції реалізовані апаратними засобами спеціалізованих мікросхем. Розглянемо функції графічного контроллера адаптерів EGA і VGA. Він працює з чотиришаровою моделлю організації відеопам'яті (див. рис. 6). Адаптери EGA і VGA мають чотири 8-бітні регістри-клямки, в яких фіксуються дані з відповідних їм колірних шарів при виконанні будь-якої операції читання відеопам'яті. В подальших операціях запису у формуванні даних для кожного шару можуть брати участь дані від процесора (1 байт) і дані з регістрів-клямок відповідних шарів (рис. 7). Дані від процесора можуть бути заздалегідь циклічно зсунуті. Над даними від процесора (можливо, зсунутими) і з регістрів-клямок можуть виконуватися логічні операції І, АБО і ВИКЛЮЧНЕ АБО. Крім того, замість результатів цих операцій в деякі шари можуть бути записані байти нулів або одиниць. Регістр бітної маски дозволяє побітно управляти джерелом записуваних даних: якщо біт регістра маски має нульове значення, то у відеопам'ять цей біт у всіх шарах буде записаний з регістра-клямки. Дані від процесора (логічно оброблені) поступатимуть тільки для біт з одиничним значенням маски. І нарешті, запис проводитиметься тільки в дозволені шари, правда, функція дозволу шарів відноситься вже до синхронізатора.
Рис. . Тракт запису графічного контроллера
При читанні графічний контроллер може задати номер читаного шару. Можливе і читання з порівнянням кольорів. В цьому випадку вказується код шуканого кольору (значення біт для відповідних шарів) і результатом читання відразу всіх шарів стане байт, в якого одиничне значення приймуть біти пікселів, колір яких співпадає із зразком (рис. 8). В порівнянні кольорів можуть брати участь і не всі шари.
Рис. . Зчитування з порівнянням кольору
Всіма функціями графічного контроллера управляють через його регістри. Звичайно, можливе і пряме звернення до окремого колірного шару як по читанню, так і по запису. Але знання можливостей графічного контроллера дозволяє багато часто використовуваних функцій покласти на його апаратні засоби. Проте якщо такий апаратний графічний контроллер ще прийнятний для чотиришарової організації (4 біти на піксель), то для більш глибоких кольорів (8 біт на піксель і більше) він буде вже дуже громіздким. В сучасних адаптерах функції графічного контроллера суттєво розширені в порівнянні з EGA і VGA, виконуються вбудованим мікропроцесором