Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   ЧАВО - Частые Вопросы и Ответы    >>    pixels
   
 
 GRF. Как вывести точку в VESA режимах   Victor Shantar 20.12.1997

Несколько вариантов вывода точки на экран в графических режимах


 
 

> Hi, Vadim. Однажды 18 Dec 97 13:13, Vadim Maximoff писал к All, а я вмешался: VM> Я сам это попытался сделать, да в нашем городе нет вообще книг VM> нормальных по программированию, файликов тоже нет с документацией... VM> Hужно все это для Graphical User Interface (GUI)...SUBJ (если есть VM> доки, то намыльте пожалуйста)... 2Vadim: Hе знаю как на счет скорости, но точка в VESA режимах вроде так выводится : procedure PutPixel(X, Y: Integer; Color: Byte); var Offset: Longint; Bank: Integer; begin if (X >= 0) and (Y >= 0) and (X < VesaMode.Width) and (Y < VesaMode.Height) then begin Offset := LongMul(Y, VesaMode.Width) + X; Bank := LongRec(Offset).Hi; if Bank <> LastBank then SetBank(Bank); case DrawMode of 0: Mem[SegA000: LongRec(Offset).Lo] := Color; 1: Mem[SegA000: LongRec(Offset).Lo] := Color xor Mem[SegA000:LongRec(Offset).Lo]; 2: Mem[SegA000: LongRec(Offset).Lo] := Color or Mem[SegA000:LongRec(Offset).Lo]; end; end; end; Procedure Plot(x,y:integer; color:byte); assembler; Asm mov bh,0 mov cx,x { sets x coordinate } mov dx,y { sets y coordinate } mov al,color { sets color (0-255) } mov ah,0Ch { tells video to plot a point } int 10h End; procedure SetPixel(X, Y : Word; C : word); var b,z1,z2,z3,q,w:longint; bnk:word; begin if c<=255 then begin z1:=y;z2:=xmax; q:=z1*z2+x; z3:=memw[sos:ooo+6]; z3:=z3*1024; if z3=0 then z3:=1; b:=q div z3; bnk:=b*bank; if oldbank<>b then begin asm mov ax,$4f05 mov bx,0 mov dx,bnk int $10 end; oldbank:=b; end; if ((x<xmax) and (y<ymax)) then mem[$a000:q]:=c; end; end; procedure PutPixel(x,y:word;col:byte);assembler; asm mov ax,GraphResult cmp ax,grOk jne @L_END mov ax,modeInfo.usBytesPerScanLine mul y add ax,x jnc @LOOP1 inc dx @LOOP1: mov di,ax cmp dx,WinPos je @LOOP2 mov WinPos,dx xor bx,bx call modeInfo.fpWinFunc @LOOP2: mov ax,ModeInfo.usBegSegA mov es,ax mov al,col mov es:[di],al @L_END: End; procedure PutPixel256(X,Y : word; C : byte); begin asm mov ax,y mov bx,bytesPerLine mul bx add ax,x mov bx,0a000h mov es,bx mov si,ax mov al,dl and al,0fh mov dx,3d7h out dx,al mov al,byte ptr c mov es:[si],al end; end; Выбор за тобой. :) > With best wishes and regards. ћ Как мало программ остается в первоначальном виде. Так давайте слать исходники, чтоб проще было их изменять. :) --- [Hedgehog House] Phone: +7-3422-622044 Work Time: 00:00 - 07:30 Local * Origin: Это не GoldEd. Это примочка к Д00Му для написания писем. (2:5054/26)