;D ;D --- я просто счастилив теперь VESA работает полностью 320*200 16 млн цветов ---- и цвет нормально кодируется ff ff ff R G B ---- и видео память индексируется нормально незнаю кидать исходник или нет ну уж очень весомый ---- написал для паскаля такую же чтуку -----
AlaRic
3.05.2003 11:00
Кидай исходник прям сюда....на сколько символов выйдет?
Shadow
3.05.2003 12:28
D вот оно
{$L inc.obj} {$f+} Var x,y,xx,yy,xxx,yyy: Word; col: LongInt;
Procedure Color(col:LongInt);External;
Procedure VESAINIT;Assembler; asm mov ax,4f02h { функция VESA } mov bx,10fh { режим 320*200 16-милионов } int 10h {BIOS video interrupt} mov ax,0a000h {video memory adress} mov es,ax {init es for video memory} end;
Procedure VESAPix(x,y:Word);Assembler; asm mov ah,4fh { востанавливаем окно } mov al,05 {--} mov bh,0 {--} mov bl,0 {--} mov dx,0 {--} int 10h {--} mov ax,1280 mul y { ;умножаем на У } cmp dx,1 { если в dx 1 то на 1 шаг } je @corect1 {} cmp dx,2 { на 2 шага } je @corect2 {} cmp dx,3 { на 3 шага } je @corect3 {} shl x,2 {} add ax,x {} adc dx,0 { сложение с корректировкой } cmp dx,1 { 1 шаг } je @corect1t {} cmp dx,2 { 2 шага } je @corect2t {} cmp dx,3 { 3 шага } je @corect3t {} mov si,ax { ;теперь адресуем видео память } @out: jmp @exits { ;выходим } @corect1: {} shl x,2 { ;сдвиг на 2 умножаем на 4 } add ax,x { ;в ax конечный результат } adc dx,0 { ;сложение с корректировкой } @corect1t: {} mov si,ax { ;в si ax } cmp dx,2 { cмотрим в dx число то есть какой шаг стоит } je @corect2t {} cmp dx,3 { 3 шага } je @corect2t {} @not_cor: {} mov ah,4fh {} mov al,05 { ;62454 } mov bh,0 {;---------} mov bl,0 {;---------} mov dx,1 { ;переносим окно на один шаг } int 10h {} jmp @out {} @corect2: {} shl x,2 { ;сдвиг на 2 умножаем на 4 } add ax,x { ;в ax конечный результат } adc dx,0 {} cmp dx,3 {} jz @corect3t {}
@corect2t: {} mov si,ax { ;в si ax } mov ah,4fh {;} mov al,05 { ;62454 } mov bh,0 {;---------} mov bl,0 {;---------} mov dx,2 { ;переносим окно на один шаг } int 10h {} jmp @out {} @corect3: {} shl x,2 { ;сдвиг на 2 умножаем на 4 } add ax,x { ;в ax конечный результат } adc dx,0 { сложение с корректировкой } @corect3t: {} mov si,ax { ;в si ax } mov ah,4fh { функция } mov al,05 { ;62454 } mov bh,0 { ;страница } mov bl,0 { ;номер окна } mov dx,3 { ;переносим окно на 1 шаг } int 10h { BIOS interrupt } jmp @out { на вывод пиксель } @exits: end;
BEGIN VESAInit; {INIT Graph Mode VESA} col:=$0000000000; { внешняя переменная для цвета } for yy:=50 to 60 do begin {add xx+1} for xx:=100 to 115 do begin {add yy+1} col:=col+$0000111111; VESAPix(xx,yy); { чертим закрашенный прямоугольник } end; col:=0; end;
col:=$0000ffffff; for yy:=50 to 60 do begin {add xx+1} for xx:=115 to 129 do begin {add yy+1} col:=col-$0000111111; VESAPix(xx,yy); { чертим закрашенный прямоугольник } end; col:=0; end;
col:=$0000000000; { внешняя переменная для цвета } for yy:=50 to 60 do begin {add xx+1} for xx:=129 to 144 do begin {add yy+1} col:=col+$0000111111; VESAPix(xx,yy); { чертим закрашенный прямоугольник } end; col:=0; end;
col:=$0000ffffff; for yy:=50 to 60 do begin {add xx+1} for xx:=144 to 158 do begin {add yy+1} col:=col-$0000111111; VESAPix(xx,yy); { чертим закрашенный прямоугольник } end; col:=0; end;
col:=$0000000000; { внешняя переменная для цвета } for yy:=61 to 71 do begin {add xx+1} for xx:=100 to 115 do begin {add yy+1} col:=col+$0000000011; VESAPix(xx,yy); { чертим закрашенный прямоугольник } end; col:=0; end;
col:=$00000000ff; for yy:=61 to 71 do begin {add xx+1} for xx:=115 to 129 do begin {add yy+1} col:=col-$0000000011; VESAPix(xx,yy); { чертим закрашенный прямоугольник } end; col:=$00000000ff; end;
col:=$0000000000; { внешняя переменная для цвета } for yy:=61 to 71 do begin {add xx+1} for xx:=129 to 144 do begin {add yy+1} col:=col+$0000000011; VESAPix(xx,yy); { чертим закрашенный прямоугольник } end; col:=0; end;
col:=$00000000ff; for yy:=61 to 71 do begin {add xx+1} for xx:=144 to 158 do begin {add yy+1} col:=col-$0000000011; VESAPix(xx,yy); { чертим закрашенный прямоугольник } end; col:=$00000000ff; end;
col:=$0000000000; { внешняя переменная для цвета } for yy:=72 to 82 do begin {add xx+1} for xx:=100 to 115 do begin {add yy+1} col:=col+$0000110000; VESAPix(xx,yy); { чертим закрашенный прямоугольник } end; col:=0; end;
col:=$0000ff0000; for yy:=72 to 82 do begin {add xx+1} for xx:=115 to 129 do begin {add yy+1} col:=col-$0000110000; VESAPix(xx,yy); { чертим закрашенный прямоугольник } end; col:=$0000ff0000; end;
col:=$0000000000; { внешняя переменная для цвета } for yy:=72 to 82 do begin {add xx+1} for xx:=129 to 144 do begin {add yy+1} col:=col+$0000110000; VESAPix(xx,yy); { чертим закрашенный прямоугольник } end; col:=0; end;
col:=$0002ff0000; for yy:=72 to 82 do begin {add xx+1} for xx:=144 to 158 do begin {add yy+1} col:=col-$0000110000; VESAPix(xx,yy); { чертим закрашенный прямоугольник } end; col:=$0000ff0000; end;
asm {Wait press} mov ah,0 {Key} int 16h end; END.
Shadow
3.05.2003 12:31
а вот и pbj ----- :D :D ----
.MODEL SMALL, Pascal .DATA Extrn col:Dword; .CODE Public color color proc far .386 mov ebx,col mov es:[si],ebx ret endp color END
SKVOZNJAK
4.11.2003 22:56
А не мог бы ты сделать енто под 640480 защищённого режима ;)
Shadow
5.11.2003 0:27
:D -=-=- Это древняя тема для меня -=-=- насчет защищенного режима как бы видно что в паскале во вставках ASM неполучилось применить 32 регистр который участвует в цвете -=-= Думаю модет в DELPHI ето удастся ------------------------------ Но есть мыль анписать все ето на ASM с под WIN кстати компилятор под WIN у меня есть ----------------------------------- Но ето собачья работа........ собственно все что выше переработать
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.