Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал - Переключение между видеоадаптерами

ОГЛАВЛЕНИЕ

     4.1.6 Переключение между видеоадаптерами.


   Машина  может быть оснащена и монохромным и цветным адаптером,
или одним из этих адаптеров  и  EGA.  Программа  может  выбирать,
какой из мониторов должен быть активным, изменяя значения битов 4
и 5 в ячейке памяти  0000:0410.   Установив  оба этих бита в 1 мы
выбираем монохромный адаптер.  Изменив установку битов 5-4 на  10
устанавливаем графический  адаптер в режиме 80 символов в строке,
а на 01 - 40 символов в строке.  И, наконец, изменив биты на  00,
выбираем EGA. Во всех случаях Вы должны немедленно подать команду
установки режима, поскольку BIOS имеет еще очень много регистров,
которые надо изменить, прежде чем дисплей будет работать нормаль-
но.
   Отметим,  что  хотя  операционная система не  может  управлять
одновременно двумя мониторами, программы могут осуществлять вывод
на оба дисплея, используя прямое отображение в память [4.3.1] для
адресов буфера неактивного монитора.

   Высокий уровень.


   В Бейсике надо просто использовать следующий код:

100 'Переключение на монохромный дисплей
110 KEY OFF: CLS
120 WIDTH 40
130 DEF SEG = 0
140 M = PEEK(&H410)
150 POKE &H410,M OR &H30
160 WIDTH 80
170 LOCATE,,1,12,13
180 KEY ON

100 'Переключение на цветной графический дисплей (80 символов)
110 KEY OFF: CLS
120 WIDTH 80
130 DEF SEG = 0
140 M = PEEK(&H410)
150 POKE &H410,(M AND &HCF) OR &H20
160 WIDTH 80
170 SCREEN 0
180 LOCATE,,1,6,7
190 KEY ON

100 'Переключение на EGA (80 символов)
110 KEY OFF: CLS
120 WIDTH 80
130 DEF SEG = 0
140 M = PEEK(&H410)
150 POKE &H410,M AND &HCF
160 WIDTH 80
170 SCREEN 0
180 LOCATE,,1,6,7
190 KEY ON

Измените команды WIDTH и  SCREEN,  чтобы  переключиться на другие
начальные режимы дисплея.

   Низкий уровень.


   В ассемблере, как и в Бейсике, надо прямо изменить биты 4 и  5
по адресу 0000:0410. Надо  сбросить  режим дисплея сразу вслед за
изменением.

;---переключение на монохромный монитор
   SUB  AX,AX           ;обнуляем AX
   MOV  ES,AX           ;устанавливаем ES на начало памяти
   MOV  DL,ES:[410H]    ;получаем байт по адресу 0000:0410
   OR   DL,00110000B    ;устанавливаем биты 4 и 5
   MOV  ES:[410H],DL    ;возвращаем байт
   MOV  AH,0            ;фукция установки режима дисплея
   MOV  AL,0            ;монохромный режим 80*25
   INT  10H             ;устанавливаем режим

;---переключение на цветной монитор (40 символов)
   SUB  AX,AX           ;устанавливаем ES на начало памяти
   MOV  ES,AX           ;
   MOV  DL,ES:[410H]    ;берем байт по адресу 0000:0410
   AND  DL,11001111B    ;сбрасываем биты 4 и 5
   OR   DL,00010000B    ;устанавливаем бит 4
   MOV  ES:[410H],DL    ;возвращаем байт
   MOV  AH,0            ;функция установки режима дисплея
   MOV  AL,1            ;цветной режим 40*25
   INT  10H             ;устанавливаем режим

;---переключение на EGA
   SUB  AX,AX           ;устанавливаем ES на начало памяти
   MOV  ES,AX           ;
   MOV  DL,ES:[410H]    ;берем байт по адресу 0000:0410
   AND  DL,11001111B    ;сбрасываем биты 4 и 5
   MOV  ES:[410H],DL    ;возвращаем байт
   MOV  AH,0            ;функция установки режима дисплея
   MOV  AL,1            ;цветной режим 40*25
   INT  10H             ;устанавливаем режим