Страница 10 из 47
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 ;устанавливаем режим
|