test_1:push es | ; сохранение содержимого es |
mov es, Info | ; значение сегмента буфера Info |
xor di, di | ; адрес начала буфера |
mov ax, 4F00h | ; код запрашиваемой функции |
int 10h | ; обращение к BIOS |
cmp ax, 4Fh | ; стандарт VESA поддерживается ? |
jz test 2 | ; -> да, продолжение проверок ; нет, выполнение задачи не возможно |
pop es | ; вывод аварийного сообщения |
Выполнение примера 2.1 начинается с сохранения в стеке содержимого регистра es (если он еще не использовался и его содержимое не имеет значения, то команды push es и pop es можно исключить из текста примера). Далее в регистр es записывается значение сегмента, содержащего буфер info, a di очищается для размещения данных с начала буфера. После этого в регистр ах записывается код запрашиваемой функции и происходит обращение к прерыванию BIOS int 10h. Если видеокарта соответствует стандарту VESA, то при возврате из BIOS в ах находится код 4Fh, это и проверяет команда cmp ax, 4Fh. Если результат проверки положительный, то следующая команда jz выполнит переход на метку test_2, которая обозначает начало примера 2.2.
Если результат проверки отрицательный (код отличается от 4Fh), то дальнейшее выполнение задачи не возможно. На экран надо вывести аварийное сообщение типа "Видеокарта не поддерживает режимы VESA" И Прекратить выполнение задачи. Как можно подготовить текст сообщения и вывести его на экран, описано в главе 5, посвященной работе с текстом.
В случае успешного выполнения запроса, в буфере info находится общая информация о видеокарте (см. главу 1). Как правило, ее использует только Windows при выборе драйверов для работы с конкретной картой. Нам драйверы подбирать не надо, поэтому интерес может представлять только объем видеопамяти, указанный в слове массива info со смещением 12h. Эта величина выражена в блоках размером по 64 Кбайт, поэтому 1 Мбайт соответствует код 10h. Объем видеопамяти в случае его использования при выполнении задачи надо сохранить в области данных, т. к. уже на следующем шаге содержимое массива info изменится.
Проверка поддержки видеорежима. Если видеокарта соответствует стандарту VESA, то надо проверить, поддерживается выбранный вами видеорежим или нет, и одновременно прочитать в массив info информацию о нем. В примере 2.2 показано, как можно выполнить эти действия.