Работа с VESA в Паскале

Языки ASM, Pascal, C/C++, Perl, Delphi, PHP, Java...
Программируем сами, помогаем друг другу...

Модераторы: Al_lexx, Sharp, ionika, Happy_MAN, 0xFF, Atom, Serega S.U.

Ответить
tankist
Сообщения: 55
Зарегистрирован: 01 июл 2006, 07:10

Работа с VESA в Паскале

Сообщение tankist »

Есть режим 640*480 16М цветов. Необходимо вывести на экран цветовой градиент. Или подскажите, как в RGB изменяются цвета в десятичном формате т.е. начиная от 0 0 0 и заканчивая 255 255 255... Буду очень благодарен.
Hurricane
Сообщения: 4
Зарегистрирован: 09 янв 2007, 18:16

Сообщение Hurricane »

не помню как меняются ) советую самому вручную пустить прогу с изменением цветов от 0 0 0 до 255 255 255 и рисованием прямоугольники на экране - там все видно будет. Тебе сам код нужен что ли? )
BrainDamage
Сообщения: 27
Зарегистрирован: 21 июн 2006, 09:50

Сообщение BrainDamage »

Занимался такой ерундой году так в 2000...
Т.к. ДОС может адресовать только 64К памяти, а 640х480х4 это около 1 мегабайта, то приходится использовать блоки (по 64К каждый) и переключатся между ними.

Короче, выгледит это примерно так:

Procedure SetGraphicsMode(mode:word);Assembler;
asm
Mov ax,$4F02 {$4F02 - функция инт 10h. Установка разр. экрана}
mov bx,mode; {помоему 112h -это и есть 640x480х32. Зависит от Видео карты}
int 10h;
end;

Procedure SetBlock(Block:Word);assembler;
Asm
Mov ax,$4F05; {насколлько я помню, смена блока - эта и есть функция 4F05, но могу и ошибаться.Если не сработает, то поробуй 4F06, 4F03}
mov bx,Block;
Int 10h;
end;

Соответственно - сначала заполняешь первый, второй и т.д. блоки. Заполняются они соответсвенно по РГБ форме. 4ый байт не используется. У ВЕСА адаптеров память начинается с сегмента A000h.
Ответить