Работа с двумя окнами видеопамяти
Раздельная работа с окнами
Раздельная (независимая) работа с двумя окнами применяется в редких случаях. Если в вашей практике возникнет такой случай, то следует поступить так:
- выяснить, какое окно доступно для записи, а какое для чтения;
- ввести две разные переменные для хранения текущих значений окон;
- использовать два разных указателя адреса в текущем окне;
- составить независимые подпрограммы для работы с двумя окнами;
- Обсудим эти вопросы более подробно.
При составлении конкретных программ или подпрограмм надо знать, какое окно доступно для записи, а какое для чтения. Например, у акселератора mach64 фирмы ATI Technologies Inc. для записи доступно окно А, а для чтения – в. Но это не общее правило. Стандарт VESA не распространяется на назначение окон, он только требует, чтобы оно было отражено в байте состояния окна. Поэтому наиболее простой способ выяснения назначения окон заключается в визуальной проверке кодов байтов состояния обоих окон, делать это программно намного сложнее.
В процессе выполнения задачи текущие значения окон изменяются независимо, поэтому их надо хранить в разных переменных. Учитывая, что для изменения номеров окон будут использоваться разные подпрограммы, можно выделить в разделе данных задачи две переменные cur_winA и Cur_winB. В таком случае при вызове подпрограмм не надо будет затрачивать лишние действия на передачу параметров.
Раздельная работа с окнами подразумевает и раздельную работу с адресами расположенных в них точек. При программировании циклов построения или преобразования графических объектов адреса точек хранятся в указателях адресов, обычно это индексные регистры. Количество используемых указателей адресов зависит от реализуемого алгоритма. Если текущие значения адресов в обоих окнах совпадают, то достаточно одного указателя адреса, в противном случае их должно быть два, что неизбежно усложнит структуру подпрограммы, выполняющей нужные действия.
Два комплекта подпрограмм
Мы не будем приводить подпрограммы, а просто опишем, что необходимо сделать.
Прежде всего, надо решить вопрос об именах подпрограмм Setwin, Nxtwin и Prevwin и имени переменной Cur_win. Проще всего добавить в конце каждого из этих имен буквы див, например, cur_winA и cur_winB.
Для получения двух комплектов подпрограмм сделайте копию примера 2.8 с тем вариантом Setwin, который в нем описан. В тексте оригинала добавьте в конце имен точек входа и в конце имени cur_win букву А.
В тексте копии добавьте в конце имен точек входа и в конце имени Cur_win букву в. Кроме того, в тексте копии надо заменить в подпрограмме setwin команду хог bx, bx командой mov bx, 01. Напомним, что наличие в регистре bx кода 1 является признаком работы с окном в. Это все, что надо сделать для получения двух комплектов подпрограмм.
Таковы основные особенности работы с двумя независимыми окнами. Еще раз напомним, что в практике автора только акселератор mach64 имел два разных окна для записи и чтения. Учитывая, что карта выпущена в 1997 году, можно допустить, что появятся и другие видеокарты с раздельными окнами для записи и чтения в видеопамять.