GRAFIKA W ATARI PORTFOLIO 1. Wyswietlacz LCD : Rozdzielczosc : 240 x 64 jeden bit na pixel graficzna pamiec ekranu 1920 bajtow 2.Sposob programowania Programowac grafike na atari portfolio mozna na dwa sposoby. Pierwszy za pomoca uslug BIOS'u, zaleta tego sposobu jest fakt ze pixel pojawia sie natychmiastowo tzn. nie trzeba odswiezac zawartosci wyswietlacz LCD, natomiast wada jak latwo sie domyslic jest powolnosc tego sposobu. Druga metoda polega na uzyciu obszaru pamieci 0xB000:... jako bufora tzn. wszelkie operacje graficzne dokonywac wlasnie na tym buforze a nastepnie szybkie przekopoiwanie do pamieci LCD. 3. Pascal czy C ? Programy w pascalu maja to do siebie ze do pewnych rozmiarow kodu zrodlowego, plik wykonywalny jest krotszy niz C co w przypadku portfolio nie jest bez znaczenia. Niestety zeby uruchomic program napisany w pascalu na atari portfolio trzeba ustawic (setup->display->) speed na "fast", oraz refresh na "keys", w przeciwnym przypadku program nie uruchomi sie! Spowodowane jest to faktem ze w normalnym PC zegar standardowo "tyka" 18.2 razy na sekunde, w portfolio natomiast w zaleznosci od ustawienia opcji "speed" raz na 128 sekund, lub raz na sek. Nie bylo by to problemem gdyby nie to ze po ustawieniu "speed" na fast pobor proadu po WYLACZENIU pofo wynosi okolo 10 mA, gdy opcja speed=normal pobor wynosi okolo 0.3 - 0.5 mA, czyli w wypadku wylaczenia palmtopa zapominajac o ustawienu "speed" na normal spowodujemy rychly "pad" baterii. (probowalem kompilator Borland Turbo Pascal 7.0, byc moze w innych ten problem nie wystepuje) 4. ATARI PORTFOLIO GRAPHICS LIBRARY (pliki: p_graf.c, p_graf.h) Te kilka funkcji napisalem przy uzyciu kompilatora Borland C++ 3.1. Opis funkcji : ------------------------------------------------------------- set_mode(unsigned char mode) ustawia tryb graficzny gdy mode=1, lub tekstowy gdy mode=0; ------------------------------------------------------------- bios_pixel(short int x,short int y,unsigned char c) funkcja zapala pixel o wspolrzednych x,y gdy c=1, lub gasi gdy c=0 piksel pojawia sie natychmiast, nie potrzeba odswierzac, ale funkcja korzysta z przerwania BIOS'u przez co jest strasznie wolna uzywac tylko przy malych ilosciach pixeli -------------------------------------------------------------- set_pixel(unsigned char x,unsigned char y,unsigned char action) funkcja zapala pixel (w buforze nie na LCD) o wspolrzednych x,y gdy action=1, gasi gdy action=0, lub wykonuje operacje XOR gdy action=2 ta funkcja nie jest za szybka, jesli potrafisz ja przyspieszyc to zrob to! :) --------------------------------------------------------------- hor_line(unsigned char x1,unsigned char x2,unsigned char y,unsigned char col) funkcja rysuje pozioma linie od x1 do x2 na wysokosci y, parametr col NIE jest na razie nie jest uzywany. Uzywaj TEJ funklcji zamiast set_pixel i petli, bedzie znacznie szybciej ----------------------------------------------------------------- vert_line(unsigned char x,unsigned char y1,unsigned char y2) Rysuje pionowa linie od y1 do y2 na szerokosci x. Uzywaj TEJ funklcji zamiast set_pixel i petli, bedzie znacznie szybciej ------------------------------------------------------------------------ lineto(int startx,int starty,int endx,int endy,int act) Rysuje dowolna linie z punktu(startx,starty) do punktu(endx,endy) act: 1 rysuje linie 2 czysci linie 3 przeprowadz operacje XOR ------------------------------------------------------------------------ fill_rect(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char action) Rysuje wypelniony prostokat x1,y1 - x2,y2, action - na razie nie uzywany ------------------------------------------------------------------------- inverse_buf(void) Invertuje zawartosc bufora (negatyw) ------------------------------------------------------------------------- clear_buf(void) Czysci zawartosc bufora ------------------------------------------------------------------------- copy_to_lcd(void) Najwazniejsza funkcja, kopiuje zawartosc bufora (wirtualnego ekranu) bezposrednio do pamieci LCD czyli wyswietla. Ta funkcja MUSI byc wywolana jesli chcesz zobaczy efekt dzialania wszystkich poprzednich funkcji za wyjatkiem bios_pixel(...) ktora dziala natychmiastowo -------------------------------------------------------------------------- UWAGI OGOLNE -Autor absolutnie NIE ponosi zadnej odpowiedzialnosci za ewentualne szkody powstale w wyniku uzywania tej biblioteki!!!! ( a jak wiadomo Pofo lubi sie wieszac!) -Funkcji bios_pixel(..) uzywaj sporadycznie -- jest strasznie wolna -Wypelnianie duzych regionow przy pomocy set_pixel(...) tez bedzie wolne wiec do rysowania lini, wypelnionych regionow, uzywaj funkcji hor_line, vert_line fill_rect. -Pamietaj ze wszystkie funkcje oprocz bios_pixel, operuja na wirtualnym ekranie wiec aby zobaczy efekt musisz uzyc copy_to_lcd -Wszelkie sugestie mile widziane (pwoz@ekonom.ar.wroc.pl) -Daj znac jak stworzysz cos ciekawego dla Pofo -NIE odpalaj programow napisanych przy pomocy tej biblioteki na prawdziwym PC bo na 99.99(9) procent ZAWIESI SIE!!! 5. Do zrobienia na przyszlosc Jak bedzie troche czasu i checi to : -Pisanie tekstu w trybie graficznym (wlasne mniejsze fonty) -Poniewaz LCD portolio jest tragicznie maly przydal by sie wirtualny ekran np. 480x200, co wydaje mi sie nie bedzie trudne do zrobienia ------------------------------------------------------------------- 1999-28-01 Pawel Wozniczka (pwoz@ekonom.ar.wroc.pl) -------------------------------------------------------------------