płynna grafika w 13h [TP]

0

Jak zlikwidować migotanie na ekranie podczas rysowania w trybie 13h? Czy ustawienie bufora obrazu pomoze? Jesli ktoś zna lepsy sposb - proszę o pomoc

asm
mov ax, 13h
int 10h
end;

bufor,ekran:pointer;
getmem(bufor,64000);

kiedy chcĘ dodać pixel do pamieci ekranu robię to tak: mem[$A000:y*320+x]:=kolor; jak natomast wykonac taką samą operację dla burof-a

asm // kopiowanie bufor-a do ekran-u
push ds
lds si, bufor
les di, ekran
mov cx, 32000
cld
rep movsw
pop ds
end;

0

oczysicie bufor:pointer; jest przed begin w var

0

u mnie miałem tak:

procedure gr_zamaluj(bufor:pointer; kolor:byte);assembler;
asm
<asm> pusha
 les di, bufor	   {pobierz segment i offset}
 mov di, 0	   {zacznij od poczatku}       **
 mov ah, kolor	{kolor do ax}
 mov al, ah
 mov cx, 32000	
 cld
 rep stosw
 popa

end;{koniec gr_zamaluj}</delphi>

żeby rysować pixel musisz w linijce ** zamiast 0 dać przesunięcie

 mov ax, y
 mov di, ax
 shl ax, 8
 shl di, 6
 add di, ax
 add di, x

pojedynczą komórkę wypełnia się tak:

 mov byte ptr es:[di], al
w al jest oczywiście kolor
Milka napisał(a)

u mnie miałem tak:

procedure gr_zamaluj(bufor:pointer; kolor:byte);assembler;
asm
<asm> pusha
 les di, bufor	   {pobierz segment i offset}
 mov di, 0	   {zacznij od poczatku}       **
 mov ah, kolor	{kolor do ax}
 mov al, ah
 mov cx, 32000	
 cld
 rep stosw
 popa

end;{koniec gr_zamaluj}</delphi>

żeby rysować pixel musisz w linijce ** zamiast 0 dać przesunięcie

 mov ax, y
 mov di, ax
 shl ax, 8
 shl di, 6
 add di, ax
 add di, x

pojedynczą komórkę wypełnia się tak:

 mov byte ptr es:[di], al
w al jest oczywiście kolor

co do samej płynności to jest jeszcze coś takiego jak vsync...

0

ale jak zapisac bajt do bufora, nie do ekranu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1