С режимами 320x200 я разобрался, благо примеров море. Но с 640x480 не могу.
Режим я поставил. Далее точки выводятся, как я понимаю, в окна, которые надо перемещать по экрану... Можно об этом по-подробнее и желательно с примером?
PS И ещё вопрос: в этом режиме видео-страниц много? И если больше одной, как их ставить, стандартные процедурки прокатят?
Ты работаешь с VESA?
тогда да, там окна =)
Итак, что такое окна?
640*480*8bit= 307200 байт,
Сегмент же у нас 65536 байт
307200/ 65536 примерно 4.7 - т.е. у нас здесь 4 полных окна и еще чуть чуть =) 5 окон всего.
Каждое окно - это просто напросто возможность записать в определенный кусок памяти, т.е. все что я запишу в $A000 будет записано в другой адрес.
В принципе правило перехода из окна в окно - если у нас
счетчик > 65535
то надо менять окно.
В VESA это можно сделать 2мя способами:
1. Использовать функцию 4F05:
mov dx,curwin
xor bx,bx
mov ax,4F05h
int 10h
и все. Эта функция меняет текущее окно на CurWin
НО разработчики VESA говорят что прерывание 10h уж очень торозное =)
т.к. на обращение к нему реагируют различные резидентыи компоненты DOS (ну например утилитка KEYRUS)
поэтому =) они советуют воспользоваться процедурой VMC [Video Memory Control] которая состоит из 10-15 команд и передвигает окно =) что нам и надо.
Где же эту функцию взять? Она записана в Video BIOS'е, именно ее адрес выдается нам когда мы запрашиваем информацию о режиме
(
mov ax, 4F01h - функция
mov cx, mode - режим
mov es,Info - сегмент, по адресу которого запишется инфа о режиме
xor di,di - и 0 смещение
int 10h - ВПЕРЕД!!!
)
вот, 4 байта по смещению [Info:di+0Ch] будут адресом VMC.
Здесь я приведу 2 процедуры им моего движка VESA - вычисления VMC и рисования точки =)
Мне жутко понадобились видеостраницы, но этот код я не понимаю:
xor bx,bx
mov cx.basecol
mov dx,baserow
mov ax.4F07h
int 10h
base col - базовый столбец, на которую ты двигаешь экран
base row - базовая колонка, на которую ты двигаешь экран
точки по случайности, замени на запятые