6.1. Короткий огляд
6.1. Короткий огляд
Більшість регістрів CGA доступна тільки для запису, що створює певні проблеми, особливо для мультизадачних систем.
| Адреса | Реєстр |
| 3D4, | Регістри контролера ЕЛТ |
| 3D5 | (CRT Controller Register's - CRT_CR) |
| 3D8 | Реєстр установки режиму |
| 3D9 | Реєстр установки кольору |
| 3DA | Регістр стану (Input Status Register - ISR) |
| 3DB | Регістр очищення тригера-засувки світлового пера (Clear Light Pen Latch Register-CLLPR) |
| 3DC | Установка тригера-засувки світлового пера (Set Light Pen Latch Register - SLPLR) |
Таблиця 7.1 Карта портів вводу/виводу CGA.
| Номер режиму роботи | Адреса пам'яті |
| 0,1,2,3,4,5,6 | B000:8000-B000:FFFF |
Таблиця 7.2 Розподіл пам'яті у різних режимах.
6.2. Регістри контролера ЕЛТ
Регістри контролера ЕПТ керують сигналами синхронізації, необхідними для формування растру, визначають формат даних на екрані, форму курсору, а також керують світловим пером.
Більшість із цих регістрів не становлять інтересу для їхнього безпосереднього програмування. Більш того, їх неправильне використання може спричинити фізичне руйнування дисплея. Тому ми докладно розглянемо лише найкорисніші та найбезпечніші регістри контролера.
Таблиця 7.3 Регістри контролерів ЕПТ, побудованих на основі мікросхеми Motorola 6845 або її аналогів.
Адресація регістрів контролера ЕЛТ відбувається через два порти. У перший порт (індексний) записується індекс регістра, до якого здійснюється доступ, а через другий порт (портданих) можна здійснювати обмін даними (запис чи читання).
Загальна довжина лінії горизонтальної розгортки (Horizontal Total Register – HTR) (індекс 0)
Регістр HTR визначає число знайомих на одній лінії сканування, включаючи зворотний хід променя.
Для CGA кількість знайомих по горизонталі буде на одне більше, ніж значення, записане в регістрі.
Довжина горизонтальної розгортки, що відображається (Horizontal Display Enable End Register - HDER) (індекс 1)
Цей регістр використовується адаптерами CGA та Hercules. Регістр задає довжину ділянки горизонтальної розгортки, що відображається. Розмір регістру дорівнює числу символів у рядку екрана.
Положення горизонтальної синхронізації (Horizontal Sync Position - SHBR) (індекс 2)
Регістр CGA, що визначає початок зворотного ходу променя. Змінюючи вміст регістру можна зміщувати зображення на екрані ліворуч та праворуч.
Ширина горизонтального синхросигналу (Horizontal Sync Pulse Width Register - HSPWR) (індекс 3)
Число горизонтальних ліній растру (VTR) (індекс 4)
Визначає кількість текстових рядків у растрі.
Вирівнювання растру (Vertical Total Adjust Register - VTAR) (індекс 5)
Визначає кількість текстових рядків у растрі, відведених під рамку екрана.
Довжина вертикальної розгортки, що відображається (Vertical Displayed - VDR) (індекс 6)
Регістр CGA, що задає кількість текстових рядків, що відображаються.
Положення вертикальної синхронізації (Vertical Sync Position Register - VSPR) (індекс 7)
Режим з'єднання (Interlase Mode Register - IMR) (індекс 8)
Реєстр CGA. Біти D4 та D5 задають режим з'єднання. Біти D6 та D7 визначають відхилення екрану. Регістр завжди містить 2.
Висота символів тексту (MaxScan Line Register - MSLR) (індекс 9)
Наведемо формат регістру:
- D4-D0 Ці біти задають висоту символу в пікселах мінус один (див. рис. 7.1).
- D7-D5 Не використовуються.

7.1 Використання регістру висоти символів тексту.
Початкова лінія курсору (Cursor Start Register - CSR) (індекс 0Ah)
Регістр визначає верхню лінію сканування символу. З цієї лінії починається курсор. Разом з регістром кінцевої лінії курсору (CER), він визначає розмір та форму курсора.
Наведемо формат регістру:
- D4-D0 Номер початкової лінії курсору. Відповідає номеру першої лінії курсору.
- D7-D5 Не використовуються.
Кінцева лінія курсору (Cursor End Register - CER) (індекс 0Bh)
Регістр визначає нижню лінію сканування символу, в якій закінчується курсор.
- D4-D0 Відповідає номеру останньої лінії курсору.
- D7-D5 Не використовуються.
| Режим | 0,1,2,3 | 4,5,6 |
| Вміст регістру | 7 | 0 |
Змінюючи значення регістрів початкової та кінцевої лінії курсору можна змінювати його положення та розмір.
Наведемо програму, яка запитує з клавіатури нові значення для регістрів початкової та кінцевої ліній курсору та записує їх:
Замість цих функцій для доступу до регістрів можна використовувати функції inp і outp із стандартних бібліотек трансляторів Microsoft Quick C 2.5 і C 6.0.

Реєстри, що визначають положення курсору

Рисунок 7.3 Відображення курсору на екрані.
Програма, наведена нижче, зчитує значення з регістрів положення курсору.
6.3. Регістр вибору режиму. (Mode Select Register)
6.4. Реєстр вибору кольорів. (Color Select Register)
Для режимів 4 та 5 колір рамки відповідає кольору фону (піксели зі значенням 0), а для режиму 6 – пікселам зі значенням 1.
- D0 Синя складова кольору рамки.
- D1 Зелена складова кольору рамки.
- D2 Червона складова кольору рамки.
- D3 Інтенсивність кольору кадру.
- D4 У текстових режимах керує інтенсивністю фону, а графічних режимах - інтенсивністю пікселів.
- D5 Біт D5 вибирає поточну палітру кольорів для графічних режимів.
- D7-D6 Не використовуються.
6.5. Регістр стану (Input Status Register - ISR0)
Регістр стану має такий формат:
- D0 Біт роздільної здатності.
- D1 Біт триггера світлового пера.
- D2 Біт перемикача світлового пера.
- D3 Біт зворотного вертикального ходу променя.
- D7-D4 Біти не використовуються.
6.6. Регістр скидання тригера-засувки світлового пера (LPLR)
Доступ до регістру здійснюється через порт 3DBh. Будь-яка операція запису (OUT) у цей регістр скидає тригер-клацання світлового пера.
6.7. Регістр установки тригера-засувки світлового пера (Light Pen Latch Set Register - LPLRR)
Доступ до регістру здійснюється через порт 3DCh. Будь-яка операція запису (OUT) в цей регістр викликає встановлення тригера-клацання світлового пера.