Thread View: pl.comp.programming
7 messages
7 total messages
Started by sza... Szymon Araczewski
Mon, 19 Feb 1996 00:00
Page flipping
Author: sza... Szymon Araczewski
Date: Mon, 19 Feb 1996 00:00
Date: Mon, 19 Feb 1996 00:00
21 lines
1322 bytes
1322 bytes
Witam, Mam taki maly problem przy obsludze karty graficznej - konkretnie przy pageflippingu. Wyglada na to, ze po przelaczeniu widocznego obszaru pamieci funkcja VESY obszar ten pojawia sie na ekranie z pewnym opoznieniem (w jakis czas po powrocie z przerwania). Moj program zdazy juz cos nadpisac na tej stronie ktora teoretycznie ma byc juz niewidoczna, co powoduje flickering... W jaki sposob moge rozpoznac, czy dokonala sie juz zamiana widocznego obszaru ? W tej chwili czekam po prostu na odswiezanie pionowe, ale to zre kupe czasu. Delay o scisle okreslony czas nie zawsze dziala - na niektorych kartach potrzeba go mniej, na niektorych wiecej. Da sie cos zrobic ? Pozdrowienia, Szymon -- Szymon Araczewski Network administrator - Tadeusz Kosciuszko http://www.loiv.torun.pl/~szaracz/ Secondary School in Torun, Poland sza...@loiv.torun.pl sza...@cc.uni.torun.pl "...On the Internet nobody knows I'm a dog..."
Re: Page flipping
Author: l... Jarek Lis
Date: Tue, 20 Feb 1996 00:00
Date: Tue, 20 Feb 1996 00:00
27 lines
1957 bytes
1957 bytes
Szymon Araczewski (sza...@alf.mat.uni.torun.pl) wrote: : Witam, : Mam taki maly problem przy obsludze karty graficznej - konkretnie przy : pageflippingu. Wyglada na to, ze po przelaczeniu widocznego obszaru pamieci : funkcja VESY obszar ten pojawia sie na ekranie z pewnym opoznieniem (w jakis : czas po powrocie z przerwania). Moj program zdazy juz cos nadpisac na tej : stronie ktora teoretycznie ma byc juz niewidoczna, co powoduje flickering... : W jaki sposob moge rozpoznac, czy dokonala sie juz zamiana widocznego : obszaru ? W tej chwili czekam po prostu na odswiezanie pionowe, ale to zre : kupe czasu. Delay o scisle okreslony czas nie zawsze dziala - na niektorych : kartach potrzeba go mniej, na niektorych wiecej. Da sie cos zrobic ? Chyba sobie odpowiedziales. Strony przelaczaja sie dopiero przy nastepnej ramce. Mozesz wykorzystac przerwanie zglaszane w powrocie odchylania pionowego. Operacji nie przyspieszy, ale zaoszczedzi Ci aktywnego czekania. Mozesz tez tak zorganizowac operacje graficzne, zeby po przelaczeniu stron zaczac rysowac cos od gory ekranu. I liczyc na to, ze wyswietlanie bedzie szybsze niz rysowanie.. Jaroslaw Lis +------------------------------------------------------------------------+ | l...@ict.pwr.wroc.pl | Institute of Engineering Cybernetics | | tel 48-71-202636 | Technical University of Wroclaw, Poland | | fax 48-71-203408 or 517398 | | +------------------------------------------------------------------------+
Re: Page flipping
Author: sza... Szymon Araczewski
Date: Tue, 20 Feb 1996 00:00
Date: Tue, 20 Feb 1996 00:00
18 lines
1149 bytes
1149 bytes
Jarek Lis (l...@okapi.ict.pwr.wroc.pl) wrote: : Chyba sobie odpowiedziales. Strony przelaczaja sie dopiero przy nastepnej : ramce. : Mozesz wykorzystac przerwanie zglaszane w powrocie odchylania pionowego. Czy kazda karta je wywoluje ? Kiedys obilo mi sie o oczy (chyba nawet w tej grupie) cos o przerwaniu, ktorego juz sie w kartach graficznych nie implementuje. A moze bylo to przerwanie powrotu poziomego ? Pozdrowienia, Szymon -- Szymon Araczewski Network administrator - Tadeusz Kosciuszko http://www.loiv.torun.pl/~szaracz/ Secondary School in Torun, Poland sza...@loiv.torun.pl sza...@cc.uni.torun.pl "...On the Internet nobody knows I'm a dog..."
Re: Page flipping
Author: w... Marcin Witek
Date: Tue, 20 Feb 1996 00:00
Date: Tue, 20 Feb 1996 00:00
18 lines
867 bytes
867 bytes
Pewnie robisz to w ten sposob:
loop: czekaj_na_powrot_pionowy;
zmien_strony;
rysuj;
goto loop;
A gdy sie zrobi tak:
loop: czekaj_na_powrot_pionowy;
rysuj;
zmien_strony;
goto loop;
to dziala dobrze, po prostu jest tak ze karta odczytuje rejestr na poczatku
powrotu pionowego i jak sie wpisze za pozno to strona zmienia sie dopiero
przy nastepnym powrocie.
Wit
Re: Page flipping
Author: tom... Pawe³ Piercionek
Date: Tue, 20 Feb 1996 00:00
Date: Tue, 20 Feb 1996 00:00
62 lines
2694 bytes
2694 bytes
Czesc,
sza...@alf.mat.uni.torun.pl (Szymon Araczewski) wrote:
>Mam taki maly problem przy obsludze karty graficznej - konkretnie przy
>pageflippingu. Wyglada na to, ze po przelaczeniu widocznego obszaru pamieci
>funkcja VESY obszar ten pojawia sie na ekranie z pewnym opoznieniem (w jakis
>czas po powrocie z przerwania). Moj program zdazy juz cos nadpisac na tej
>stronie ktora teoretycznie ma byc juz niewidoczna, co powoduje flickering...
>W jaki sposob moge rozpoznac, czy dokonala sie juz zamiana widocznego
>obszaru ? W tej chwili czekam po prostu na odswiezanie pionowe, ale to zre
>kupe czasu. Delay o scisle okreslony czas nie zawsze dziala - na niektorych
>kartach potrzeba go mniej, na niektorych wiecej. Da sie cos zrobic ?
Przelaczenie widocznego obszaru nastepuje dopiero podczas pionowego
powrotu plamki, a nie dokladnie w chwili zmiany adresu. Z reguly czas
reakcji nie przekracza 1/60 sek (czas odswierzenia calego ekranu) ale
jest na to sposob: tuz przed zmiana strony (adresu wyswietlanego okna)
wywolaj ponizsza procedure (Borland C - SORRY)
void wf_retrace()
//wait for vertical retrace
{
asm mov dx,3dah // 3bah dla kart VGA MONO
nrt:
asm {
in al,dx
test al,1000b
jz nrt}
}
Niestety procedura zabiera sporo czasu - czeka az plamka dotrze na sam
dol ekranu (ekran zostanie wyswietlony w calosci). Problem nadmiernego
tracenia czasu da sie wyeliminowac dopiero przy tak zwanym TRIPPLE
BUFFERING ale musial by uzyc trzech stron graficznych, co przy trybach
VESA w wysokiej rozdzielczosci prawdopodobnie nie udalo by sie.
Uwaga:
Czas powrotu pionowego plamki jest bardzo (bardzo!) krotki a wiec
procedura sprawdzajaca czy plamka wlasnie powraca (co oznaczalo by ze
mozesz bezpiecznie zmienic widoczna strone) musiala by miec duze
szczescie zeby trafic wlasnie w ten moment, ale jezeli sie uprzec to
oto ona:
int test_retrace()
//test for vertical retrace
{
asm {
mov dx,3dah // 3bah dla kart VGA MONO
in al,dx
test al,1000b
jnz retracing}
return 0;
retracing:
return 1; // plamka wlasnie powraca na gore
}
W razie jakichkolwiek niejasnosci lub kolejnych problemow z
gafika/animacja pytaj smialo.
Pawel
Re: Page flipping
Author: kfol... Krzysztof Foltman
Date: Wed, 21 Feb 1996 00:00
Date: Wed, 21 Feb 1996 00:00
10 lines
918 bytes
918 bytes
In article <4gcsth$s...@Waldemar.mat.uni.torun.pl>, Szymon Araczewski wrote: >Czy kazda karta je wywoluje ? Kiedys obilo mi sie o oczy (chyba nawet w tej >grupie) cos o przerwaniu, ktorego juz sie w kartach graficznych nie >implementuje. Owszem. Jedynym wyjsciem jest tzw. virtual vblank interrupt, czyli implementacja tegoz przerwania na drodze programowej Krzysiek
Re: Page flipping
Author: Cezary Lagod
Date: Thu, 22 Feb 1996 00:00
Date: Thu, 22 Feb 1996 00:00
69 lines
4589 bytes
4589 bytes
Szymon Araczewski (sza...@alf.mat.uni.torun.pl) wrote:
: Witam,
: Mam taki maly problem przy obsludze karty graficznej - konkretnie przy
: pageflippingu. Wyglada na to, ze po przelaczeniu widocznego obszaru pamieci
: funkcja VESY obszar ten pojawia sie na ekranie z pewnym opoznieniem (w jakis
: czas po powrocie z przerwania). Moj program zdazy juz cos nadpisac na tej
: stronie ktora teoretycznie ma byc juz niewidoczna, co powoduje flickering...
: W jaki sposob moge rozpoznac, czy dokonala sie juz zamiana widocznego
: obszaru ? W tej chwili czekam po prostu na odswiezanie pionowe, ale to zre
: kupe czasu. Delay o scisle okreslony czas nie zawsze dziala - na niektorych
: kartach potrzeba go mniej, na niektorych wiecej. Da sie cos zrobic ?
Co do tego problemu to da sie to rozwiazac w sposob naprawde bardzo prosty.
Po prostu musisz tuz przed koncem wyswietlania strony przelaczac sie na
nastepna strone. Wiem, wiem, ze to jest czasochlonne. Ale jak troche sie
pomeczysz to mozesz zrobic to w nastepujacy sposob :
1. Jako pierwsza rzecz musisz zaprogramowac PIC tak by wywolywal przerwania
jak najrzadziej i policzyc ile trwa jedno wyswietlenie ekranu ( da sie to
odczytac z portow i po zainstalowaniu specjalnej procedurki na przerwaniu
zegara )
2. Majac z grubsza ile przerwan mogloby sie wywolac podczas jednego
wyswietlania, zmniejszasz to o czas wywolania pageflip z VESY( oczywiscie to
tez musisz sobie zmierzyc runtime ).
3. Nastepnie podczepiasz pod przerwanie zegara taka procedure ktora bedzie
wywolywala przelaczanie stron co ten czas ( liczony w wywolaniach przerwan
), tylko sobie nie ustawiaj np. wywolywania przerwania co kazda mozliwa
wywolanie, bo ci sie i tak taka procedura nie wyrobi zanim sie drugie
przerwanie wywola !
4. Po kazdym vertical retrace programujesz PIC tak by inicjowal twoja
procedurke. Twoja procedurka po odpowiednim wywolaniu staruje przelaczanie
stron , czeka na vertical retrace, i znow sie sama inicjuje ( oczywiscie w
PIC ).
5. Mozna jeszcze na biezaco zliczac ile trwalo czekanie na ten vertical
retrace w twojej procedurze i odpowiednio dostosowywac sie do wyswietlania,
dzieki czemu mozna przelaczac tryby, a i tak sie nie bedzie sypac.
6. Jezeli mimo tego opisu nie zrozumiales , to pamietam, ze swego czasu
Tomek Pytel ( Tran ) w swoim demosie ( i tu niestety nie pamietam jakim )
uzywal tego chwytu ! Co prawda ja tez go uzywalem, ale to bylo w protected
mode i bylo to w asemblerze ( a konkretnie ta czesc byla jako wstawki w
kodzie wewnetrznym procesora ), bo byl problem , zeby kompilowac kod dla
trybu real w segmencie kodu protected mode. Zrodlo tego demosa o ile
pamietam przewracalo sie gdzies w ftp.luth.se/pub/msdos/demo/code/.... , ale
niestety nie pamietam jak to sie nazywalo. Moze ktos sie wgryzal, to bedzie
pamietal ( ale o ile wiem, to niewielu jest takich oszolomow, jak ja, ktorym
chce sie analizowac i wykorzystywac zrodla innych dobrych programistow, nie
mowiac o tym, ze protected mode + asm + kod maszynowy to dla wielu juz za
wiele , zeby jeszcze rownowczesnie sie starac cos mieszac z hardwarem svga,
tudziez v86 )
Mam nadzieje, ze chociaz troche nakreslilem sposob rozwiazania! Jezeli
nie, to trudno ( nie wszystko da sie wytlumaczyc w kilkudziesieciu
linijkach tekstu :)
Jezeli nie znajdziesz tego zrodla demosa, to moze pogrzebie w swoich
archiwach i moze cos sie tam znajde, ale z gory mowie, ze to nie powinno
byc nic trudnego ( o ile tylko przeczytasz sobie o programowaniu PIC i o
portach VGA to powinno wystarczyc do napisania takiego czegos ). Jak nie
znajdziesz nic, to daj znac to moze cos Ci podesle ( o ile to jeszcze mam,
a mam nadzieje ze tak ;)
Trzymaj sie, moze i bedzie wiecej programistow ktorzy na slowo asembler,
protected mode i programowanie portami karty graficznej nie beda krecic
glowa , bo w koncu systemy operacyjne tez ktos musi pisac :)
--
Cezary Lagod C4, FTiMS, Warsaw University of Technology
cin...@alpha.im.pw.edu.pl or cin...@deuter.im.pw.edu.pl
//////////// Always remeber you're unique, just like everyone else.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads