Жанр: Учеба
Справочник программиста на IBM PC
...анавливает основной и фоновый
цвета символа. В любом случае Ваша программа может писать данные
прямо в буфер терминала, что значительно повышает скорость вывода
на экран.
Все системы, кроме монохромной, предоставляют набор цветных
графических режимов, которые отличаются как разрешением, так и
числом одновременно выводимых цветов. И PCjr и EGA могут одновременно
выводить 16 цветов, причем EGA может выбирать эти 16 из
набора 64 цветов. При использовании 16 цветов каждая точка экрана
требует четырех бит памяти, поскольку 4 бита могут хранить числа
от 0 до 15. По аналогии, четырехцветная графика требует только 2
бита на точку. Двухцветная графика может упаковать представление
восьми точек в один байт видеобуфера. Количество памяти, требуемое
для данного режима экрана может быть легко вычислено, если
известно количество выводимых в этом режиме точек и количество
бит, необходимое для описания одной точки. Текст легко комбинируется
с графикой (BIOS рисует символы на графическом экране) и
Вы можете создавать свои специальные символы.
4.1.1 Программирование контроллера дисплея 6845.
Все видеосистемы строятся вокруг микросхемы контроллера видеотерминала
Motorola 6845 (EGA использует заказную микросхему,
основанную на 6845). Микросхема используется во многом аналогично
в монохромном адапторе, в цветном адапторе и в PCjr; но EGA не
настолько совместим и по этой причине мы рекомендуем Вам избегать
прямого программирования микросхемы, когда BIOS может выполнить
работу за Вас. Говоря общими словами, микросхема 6845 устанавливает
видеодисплей в один из нескольких алфавитноцифровых или
графических режимов. Она выполняет основную работу по интерпретации
номеров кодов ASCII и поиску данных для вывода соответствующих
символов в микросхеме ПЗУ (а иногда в оперативной памяти).
Она декодирует значения атрибутов цвета и соответственно устанавливает
экран. Она также создает курсор и управляет им. В архитектуре
EGA часть этих функций распределена между другими микросхемами.
Микросхема 6845 имеет 18 управляющих регистров, пронумерованных
от 0 до 17. Первые 10 регистров фиксируют горизонтальные и
вертикальные параметры дисплея. Эти регистры, как правило, неинтересны
для программистов, поскольку они автоматически устанавливаются
BIOS при изменении режима экрана. Не советуем экспериментировать
с этими регистрами, поскольку имеется возможность испортить
терминал. Регистры имеют размер 8 бит, но некоторые связаны
в пары, чтобы хранить 16-битные величины. Пары #10-11 и #14-15
устанавливают форму [4.2.4] и местоположение [4.2.1] курсора.
Пара #12-13 управляет страницами дисплея [4.5.3]. Пара #16-17
сообщает позицию светового пера [7.3.2]. Большинство регистров
доступно только для записи; только регистр адреса курсора можно и
читать и писать, а регистр светового пера предназначен только для
чтения. EGA имеет 6 добавочных регистров, которые связаны с техническими
деталями. Регистр 20 наиболее интересен; он определяет
какая линия сканирования в строке символа используется для подчеркивания.
Доступ ко всем 18 регистрам осуществляется через один и тот же
порт, адрес которого для монохромного адаптора равен 3B5H. Этот
адрес равен 3D5H для цветного адаптора и PCjr (заметим, что все
адреса портов для монохромного адаптора такие же, как и для цветного,
за исключением того, что средней цифрой является B, а не
D). EGA использует один из этих двух адресов, в зависимости от
того, присоединен ли к нему цветной или монохромный монитор. Для
записи в регистр монохромного адаптора надо сначала в регистр
адреса, расположенный в порте 3B4H (3D4H для цветного), послать
номер требуемого регистра. Тогда следующий байт, посланный в порт
с адресом 3B5H будет записан в этот регистр. Поскольку регистры,
интересные для программиста, используются попарно, то надо сначала
записать в адресный регистр, потом в первый регистр пары,
потом снова в адресный регистр и, наконец, во второй регистр
пары. Поскольку адреса портов смежные, то легче всего адресовать
их, используя инструкции INC и DEC, как в следующем примере:
;---запись в регистры 11 и 12 микросхемы 6845 (данные в BX)
;---выбираем регистр младшего байта
MOV DX,3B4H ;порт адресного регистра
MOV AL,11 ;номер регистра для младшего байта
OUT DX,AL ;посылаем номер регистра
;---посылаем байт
INC DX ;увеличиваем адрес порта
MOV AL,BL ;берем младший байт
OUT DX,AL ;посылаем его в регистр 11
;---выбираем регистр старшего байта
DEC DX ;восстанавливаем адрес порта
MOV AL,12 ;номер регистра для старшего байта
OUT DX,AL ;посылаем номер регистра
;---посылаем байт
INC DX ;увеличиваем адрес порта
MOV AL,BH ;берем старший байт
OUT DX,AL ;посылаем его в регистр 12
У монохромного и цветного адапторов имеются еще три порта,
которые важны для программистов. Они имеют адреса 3B8H, 3B9H и
3BAH для монохромного и 3D8H, 3D9H и 3DAH - для цветного адаптора.
Первый устанавливает режим экрана, второй - связан в основном
с установкой цветов экрана, а третий сообщает полезную информацию
о статусе дисплея.
PCjr использует не все эти адреса аналогичным образом. Вместо
этого, он держит часть информации, относящейся к этим портам, в
микросхеме массива ворот дисплея, основное назначение которой -
обеспечить дополнительное управление цветами экрана. Доступ к
массиву ворот дисплея осуществляется через порт с адресом 3DAH. У
цветного адаптора этот порт возвращает байт статуса; у PCjr этот
порт также возвращает байт статуса при использовании инструкции
IN, но он предоставляет доступ к массиву ворот, когда используется
инструкция OUT. Массив ворот дисплея имеет следующие регистры:
Номер Назначение
0 режим управления 1
1 маска набора цветов (палетты)
2 цвет границы
3 режим управления 2
4 сброс
10H-1FH назначение цветов палетты
Доступ ко всем регистрам осуществляется через порт 3DAH. Сначала
надо послать в этот порт номер требуемого регистра, а затем
значение этого регистра. Порт автоматически переключается между
этими функциями работы с адресами и с данными. Чтобы он начал
ожидать ввод адреса, надо прочитать его. Отдельные регистры обсуждаются
в различных местах этой главы.
Особый интерес представляют 16 регистров палетты с номерами от
10H до 1FH. Каждый регистр имеет размер всего 4 бита, что как раз
достаточно, чтобы хранить 16 кодовых номеров для 16 возможных
цветов. Для каждой позиции символа или точки на экране видеобуфер
содержит данные, указывающие каким цветом должен выводиться этот
объект. Эту информацию называют данными атрибутов. В отличие от
цветного графического адаптора PCjr не использует данные атрибутов
для непосредственного определения цвета, который будет выводиться.
Вместо этого данные атрибутов являются указателями на
один из 16 регистров палетты, а число, содержащееся в этом регистре,
определяет каким цветом будет выводиться данный символ.
При таком методе, программе нужно изменить только установку регистра
палетты, и все символы или точки с соответствующим атрибутом
изменят свой цвет. Регистры палетты работают во всех режимах,
как текстовых, так и графических.
EGA распределяет эти функции между микросхемой контроллера
атрибутов (адрес порта 3C0H) и двумя микросхемами контроллера
графики (адреса портов 3CCH-3CFH). Контроллер атрибутов содержит
16 регистров палетты EGA, пронумерованных от 00 до 0FH. Эти регистры
могут содержать 6-битные коды цветов, когда EGA связан с
улучшенным цветным дисплеем, поэтому могут быть использованы
любые 16 цветов из набора 64-х. В [4.4.1] показано как программировать
регистры палетты для PCjr и EGA.
4.1.2 Установка/проверка режима дисплея.
Монохромный адаптор поддерживает один режим терминала, цветной
графический - семь, PCjr - десять, а EGA - двенадцать. Система
PCjr более гибкая, чем монохромный или цветной адапторы, поскольку
она предоставляет широкий выбор цветов в режимах с двумя и
четырьмя цветами, а также серые тени в черно-белом режиме. EGA
еще более сложен, поддерживая палетту из 64 цветов, графику на
монохромном дисплее и вывод в 43 строки. Ниже приведен перечень
различных режимов:
Номер Режим Адапторы
0 40*25 (320*200) B&W алфавитноцифровой цветной, PCjr, EGA
1 40*25 (320*200) цветной алфавитноцифровой цветной, PCjr, EGA
2 80*25 (640*200) B&W алфавитноцифровой цветной, PCjr, EGA
3 80*25 (640*200) цветной алфавитноцифровой цветной, PCjr, EGA
4 320*200 4-цветная графика цветной, PCjr, EGA
5 320*200 B&W графика (4 тени на PCjr) цветной, PCjr, EGA
6 640*200 B&W графика цветной, PCjr, EGA
7 80*25 (720*350) B&W алфавитноцифровой монохромный, EGA
8 160*200 16-цветный графика PCjr
9 320*200 16-цветный графика PCjr
A 640*200 4-цветный графика PCjr
B зарезервирован для EGA
C зарезервирован для EGA
D 320*200 16-цветный графика EGA
E 640*200 16-цветный графика EGA
F 640*350 4-цветная графика на монохромном EGA
10 640*350 4- или 16-цветная графика EGA
EGA разрешает иметь 8 страниц в режиме 7 - стандартном монохромном
текстовом режиме. Режимы 0-6 полностью совместимы, используя
память одинаковым образом. При условии, что переключатели на
EGA установлены для работы с улучшенным цветным дисплеем фирмы
IBM, традиционные текстовые режимы выводятся с высоким разрешением,
используя рисунок символов, состоящий из 8*14 точек, а не
обычные 8*8.
BIOS хранит однобайтную переменную по адресу 0040:0049, в
которой содержится номер текущего режима. Байт по адресу
0040:004A дает число символов в строке в текстовом режиме.
Высокий уровень.
Бейсик использует операторы SCREEN и WIDTH для управления
режимом экрана. PCjr использует эти операторы несколько другим
способом, чем монохромный и цветной адапторы, и это будет обсуждаться
ниже. Один оператор SCREEN устанавливает режим для цветного
адаптора. За оператором стоит номер кода, устанавливающий
разрешение, где:
0 текстовый режим
1 графический режим среднего разрешения
2 графический режим высокого разрешения
SCREEN 1 устанавливает графический режим среднего разрешения.
Второй параметр включает и выключает цвет. Этот параметр не имеет
смысла для режима высокого разрешения на цветном адапторе, поскольку
разрешен только черно-белый режим. Для текстовых режимов 0
в качестве второго параметра выключает цвет, а 1 - включает.
Оператор SCREEN 0,0 устанавливает текстовый черно-белый режим.
Для графического режима ситуация обратная: 0 - включает цвет, а 1
- выключает. Поэтому оператор SCREEN 1,1 устанавливает черно-белый
графический режим среднего разрешения.
Все режимы первоначально показываются черно-белыми. Оператор
COLOR (см. [4.1.3]) должен быть использован, чтобы закрасить
экран фоновым цветом. В графическом режиме одного оператора COLOR
достаточно, чтобы изменить весь фон на указанный цвет. Но для
текстового режима Вы должны после оператора COLOR использовать
оператор CLS.
В текстовых режимах в строке может быть 40 или 80 символов.
Для установки требуемого числа символов в строке надо использовать
оператор WIDTH. WIDTH 40 дает 40 символов в строке, а WIDTH
80 - 80. Другие значения недопустимы. Если оператор WIDTH используется
в графическом режиме (SCREEN 1 или SCREEN 2), то WIDTH 40
переводит экран в режим среднего разрешения, а WIDTH 80 - в режим
высокого разрешения. Вот несколько примеров:
100 SCREEN 0,1: WIDTH 40 'цветной текстовый режим с 40 символами
100 SCREEN 0,1: WIDTH 40 'цветной дисплей как монохромный
100 SCREEN 0,1: WIDTH 40 'цветная графика среднего разрешения
500 WIDTH 80 'переводим в режим высокого разрешения
Монохромный монитор может быть переведен в режим 40 символов в
строке операторами SCREEN 0: WIDTH 40. Для восстановления режима
с 80 символами введите WIDTH 80. В режиме с 40 символами они
сохраняют свою обычную ширину, поэтому будет использоваться только
левая часть экрана. Строка переносится после 40-го столбца и
невозможно поместить курсор в правую половину экрана с помощью
оператора LOCATE. CLS чистит только левую часть экрана. Трудно
представить программу, которая использовала бы это свойство, но
оно действительно позволяет программе принимать ввод (скажем,
через оператор INPUT), в то время как пользователь продолжает
печатать в левой половине экрана, оставляя правую половину экрана
для возможной корректировки вводимой информации. При этом любой
вывод в правую половину экрана возможен только прямого обращения
к памяти дисплея, как объяснено в [4.3.1].
PCjr использует в Бейсике 7 номеров режимов:
Номер Режим
0 текстовый режим, ширина может быть 40 или 80
1 4-цветная графика среднего разрешения
2 2-цветная графика высокого разрешения
3 16-цветная графика низкого разрешения
4 4-цветный режим среднего разрешения
5 16-цветный режим среднего разрешения
6 4-цветная режим высокого разрешения
Последние четыре режима требуют дискетты с Бейсиком. Размер
страницы определяет количество памяти, требуемое для одного экрана
(дисплейные страницы обсуждаются в [4.5.3]). Программа должна
отвести соответствующее количество памяти перед установкой режима.
Это делается оператором CLEAR. За оператором CLEAR должны
следовать три числа, определяющие отводимую память, третье из
этих чисел устанавливает размер видеобуфера (первые два параметра
обсуждаются в [1.3.1]). Например, размер для видеобуфера 16K,
устанавливаемый по умолчанию, выделяется командой CLEAR ,,16384.
K сожалению, размер видеобуфера указывается в байтах, поэтому он
не равен круглому числу типа 4000 или 32000, а равен 4096 или
32768. Помните, что 2K = 2^11, 4K = 2^12, 16K = 2^14, а 32K =
2^15. Для выделения трех страниц по 16K, введите CLEAR ,,3*2^14.
Этот оператор должен помещаться в самом начале программы, поскольку
при использовании оператора CLEAR все переменные очищаются.
Отметим также, что при создании нескольких страниц, страница
0 начинается с младших адресов памяти.
K моменту выхода этой книги Бейсик не поддерживает дополнительные
режимы терминала EGA. В [4.3.3] приведена подпрограмма на
машинном языке, которая позволит Вам установить эти режимы.
Средний уровень.
Функция 0 прерывания 10H устанавливает режим дисплея. В AL
должен находиться номер режима от 0 до A. Чтобы установить цветной
графический режим среднего разрешения надо:
MOV AH,0 ;номер функции
MOV AL,4 ;номер требуемого режима
INT 10H ;устанавливаем режим
Для определения текущего графического режима надо использовать
функцию F прерывания 10H. Прерывание возвращает номер режима в
AL. Оно также дает номер текущей страницы дисплея в BH и число
символов в строке в AH.
MOV AH,0FH ;номер функции
INT 10H ;получение информации о режиме дисплея
MOV MODE_NUMBER,AL ;номер режима в AL
MOV NUMBER_COLS,AH ;число символов в строке в AH
MOV CURRENT_PAGE,BH ;номер текущей страницы в BH
MS DOS обеспечивает также Esc-последовательности для установки
и сброса режимов дисплея. Для этого необходимо, чтобы Вы предварительно
загрузили драйвер ANSI.SYS, как объяснено в приложении
Д. Управляющая строка имеет вид ESC [=#h, где # - номер режима,
указанный как код ASCII, а ESC обозначает один символ с кодом
ASCII 27. Например:
;---в сегменте данных
MED_RES_COLOR DB 27, '[=4h$'
MED_RES_B&W DB 27, '[=5h$'
;---установка цветного графического режима среднего разрешения
MOV AH,9 ;номер функции вывода строки
LEA DX,MED_RES_COLOR ;DS:DX должны указывать на строку
INT 21H ;изменение режима
Низкий уровень.
В данном пункте цветной адаптор, монохромный адаптор и PCjr
рассматриваются отдельно, поскольку они существенно отличаются.
Цветной графический адаптор имеет регистр, который устанавливает
режим дисплея. Он расположен в порте с адресом 3D8H. Биты 0, 1, 2
и 4 хранят установку. Бит 0 устанавливает 40 символов в строке,
когда он равен 0 и 80 - когда равен 1. Бит 1 устанавливает дисплей
в текстовый режим, когда равен 0 и в графический, когда равен
1. Бит 2 устанавливает цветной режим, когда равен 0 и черно-белый,
когда равен 1. И, наконец, бит 4 устанавливает для графического
режима среднее разрешение, когда равен 0 и высокое разрешение,
когда равен 1 (бит 2 должен быть равен 1). Ниже приведены
возможные комбинации:
Режим биты: 5 4 3 2 1 0
0. 40*25, черно-белый, текст 1 0 1 1 0 0
1. 40*25, цветной, текст 1 0 1 0 0 0
2. 80*25, черно-белый, текст 1 0 1 1 0 1
3. 80*25, цветной, текст 1 0 1 0 0 1
4. 320*200, черно-белый, графика 0 0 1 1 1 0
5. 320*200, цветной, графика 0 0 1 0 1 0
6. 640*200, черно-белый, графика 0 1 1 1 1 0
¦ ¦ ¦ ¦ ¦ текст 80*25
¦ ¦ ¦ ¦ графика 320*200
¦ ¦ ¦ черно-белый
¦ ¦ разрешение вывода
¦ графика 640*200
мигание
Изменение этих битов не приводит к изменению режима дисплея.
Нужно еще много шагов, включающих изменение параметров первых 10
регистров по адресу порта 3D5H. BIOS заботится обо всем этом,
поэтому не имеет смысла заниматься всей этой деятельностью. Однако
иногда имеет смысл реинициализировать регистр режима в его
текущем режиме, изменяя биты 3 и 5, которые на самом деле не отвечают
за установку режима. Когда бит 5 сброшен в 0, то он запрещает
атрибут мигания символов; в этом случае, если старший бит
байта атрибутов установлен, то это приводит к выводу фонового
цвета высокой интенсивностью (см. пример в [4.1.3]). Бит 3 этого
регистра управляет разрешением вывода. Когда он равен 0, то весь
экран закрашивается в цвет рамки, но видеобуфер не очищается.
Вывод мгновенно возвращается, когда значение этого бита меняется
на 1. Это свойство полезно использовать для избежания интерференции
экрана при сдвигах [4.5.1]. Некоторые утилиты используют это
свойство для того, чтобы зря не утомлять фосфорное покрытие трубки
терминала, когда компьютер включен, но не используется. Отметим
также, что два старших бита регистра не используются.
Монохромный адаптор имеет соответствующий адрес порта 3B8H.
Имеют значение только три бита. Бит 0 устанавливает высокое разрешение,
которое является единственным допустимым режимом для
монохромного дисплея. Если этот бит равен 0, то компьютер перестает
работать. Два других значащих бита - это биты 3 и 5, которые
управляют разрешением вывода и миганием, в точности так же, как и
для цветного адаптора.
PCjr распределяет информацию, содержащуюся в одном порте для
монохромног и цветного адаптора. Массив ворот дисплея имеет два
регистра режима, номера 0 и 3. Для доступа к этим регистрам надо
послать номер регистра в порт с адресом 3DAH, а затем записать
данные по тому же адресу (чтение этого порта обеспечивает, что
первая запись в него будет воспринята, как указание номера требуемого
регистра). Вот значение битов этих регистров:
Регистр 0:
бит 0 1 = текст, 80*25 и режимы 5 и 6, иначе 0
0 1 = графический режим, 0 = текстовый
0 1 = запрет цветов, 0 = разрешение цветов
0 1 = разрешение вывода, 0 = запрет вывода
0 1 = 16-цветный режим, 0 = все остальные режимы
Регистр 3:
бит 0 всегда 0
1 1 = разрешение мигания, 0 = 16 фоновых цветов
2 всегда 0
3 1 = 2-цветная графика, 0 = все остальные режимы
Как и в двух предыдущих случаях, не стоит устанавливать эти регистры
прямо из программы, так как нужно еще много работы для
программирования микросхемы 6845. Но каждый из этих регистров
содержит бит, который иногда приходится программно модифицировать,
а поскольку эти регистры только для записи, то Вам необходимо
понимать значение всех их битов. Эти биты - бит разрешения
вывода в регистре 0 и бит разрешения мигания в регистре 3. Их
действие было описано ранее и возможное их использование еще не
раз будет обсуждаться в этой главе (в [4.5.1] и [4.1.3]).
EGA имеет два регистра, управляющих режимом дисплея. Один
имеет адрес порта 3D5H. Этот регистр не содержит ни одного бита,
связанного с чем-либо другим, поэтому нет никаких причин обращаться
к нему. Второй регистр имеет адрес порта 3C0H и содержит
бит, который выбирает будет ли бит 7 байта атрибутов соответствовать
миганию или высокой интенсивности. Этот вопрос обсуждается в
[4.1.3].
4.1.3 Установка атрибутов/цветов символов.
Когда дисплей установлен в текстовый режим в любой из видео
систем, то каждой позиции символа на экране отводится два байта
памяти. Первый байт содержит номер кода ASCII кода символа, а
второй - атрибуты символа. Цветной адаптор и PCjr могут выводить
в цвете, как сам символ, так и всю область, отведенную данному
символу (фоновый цвет). Монохромный адаптор ограничен только
черным и белым цветом, но он может генерировать подчеркнутые
символы, чего не могут делать цветной адаптор и PCjr. Все три
системы могут выдавать мигающие символы и негативное изображение.
Все три системы могут также создавать символы с высокой интенсивностью,
хотя для цветного адаптора и PCjr повышенная интенсивность
символа на самом деле приводит к другому цвету (восемь
основных цветов имеют версии с повышенной интенсивностью, что
дает набор 16 цветов). EGA умеет делать все, что могут все остальные
системы и многое другое. В частности, на улучшенном дисплее
он может выводить подчеркнутые цветные символы, поскольку
матрица изображения символов 8*14 дает такую возможность.
Атрибуты цвета:
Для указания цветов экрана одни и те же номера кодов используются
в Бейсике и прерываниями операционной системы. Они такие:
0 - черный 8 - серый
1 - синий 9 - голубой
2 - зеленый 10 - светлозеленый
3 - циан 11 - светлый циан
4 - красный 12 - светлокрасный
5 - магента 13 - светлая магента
6 - коричневый 14 - желтый
7 - белый 15 - яркобелый
Младшие четыре бита байта атрибутов устанавливают цвет самого
символа (бит 3 включает высокую интенсивность). Следующие три
бита устанавливают фон символа. И при обычных обстоятельствах
старший бит включает и выключает мигание. Таким образом:
когда бит 0 = 1, синий включается в основной цвет
1 = 1, зеленый включается в основной цвет
2 = 1, красный включается в основной цвет
3 = 1, символ выводится с высокой интенсивностью
4 = 1, синий включается в фоновый цвет
5 = 1, зеленый включается в фоновый цвет
6 = 1, красный включается в фоновый цвет
7 = 1, символы мигают
Биты 0-2 и 4-6 содержат одни и те же компоненты цветов для
самих символов и фона. Эти трехбитные группы позволяют 8 возможных
комбинаций. Когда включается бит высокой интенсивности, то
добавляются еще 8 цветов. Шестнадцать возможных цветов получаются
из этих установок битов следующим образом:
Красный Зеленый Синий Низкая интенсивность Высокая
0 0 0 черный серый
0 0 1 синий светлосиний
0 1 0 зеленый светлозеленый
0 1 1 циан светлый циан
1 0 0 красный светлокрасный
1 0 1 магента светлая магента
1 1 0 коричневый желтый
1 1 1 белый яркобелый
Можно иметь 16 цветов и для фонового цвета. В этом случае бит 7
должен служить указателем высокой интенсивности для фона, а не
указателем мигания символов. Для цветного адаптора надо изменить
бит 5 порта с адресом 3D8H в 0, как показано ниже. Поскольку этот
порт доступен только для записи, то все остальные биты должны
быть переустановлены. Эта возможность доступна только в двух
случаях: текстовых режимов с 40 и с 80 символами в строке. Для
режима с 80 символами надо послать в порт число 9, а для режима с
40 символами - число 8. Чтобы вернуть мигание надо добавить к
обоим этим значениям 32. Для PCjr надо сбросить в 0 бит 1 регистра
3 массива ворот дисплея. Все остальные биты должны быть равны
нулю, кроме номера 3, который должен быть установлен для режима
двухцветной графики. Кроме этого режима, для установки бита мигания
надо сначала прочитать порт с адресом 3DAH, чтобы подготовить
массив ворот дисплея, затем послать в него 3, чтобы указать регистр,
и затем послать 0, чтобы установить бит мигания. При завершении
программы всегда надо восстанавливать мигание, так как
следующая программа может полагаться на это.
EGA также может разрешать/запрещать мигание, хотя в этом случае
адрес порта 3C0H. Сначал надо прочитать порт 3DAH, чтобы
получить доступ к адресному регистру в 3C0H. затем надо послать в
3C0H 10H, чтобы указать соответствующий
...Поділитися у соцмережах