Witam,
Ostatnio wziąłem się za pisanie programu w trybie 13h. Aby szybko działał, użyłem wstawek asseblerowych, a całość składana jest właśnie w pascalu.(Program nie używa żadnych bibliotek typu CRT czy Graph, ani pamięci rozszerzonej)
Mój problem polega na szybkości jego działania, otóż używając typowych pascalowskich poleceń program wyświetla bitmapę z dysku w sekundę (DOSBox przy 3000 cyklach).
Odbywa się to w taki sposób:
0. (Plik z obrazem to zmodyfikowana mapa bitowa - bez nagłówka, palety i odwrócona do góry nogami);
- Ładuje plik amorficzny(była jakaś inna tego nazwa) do bufora ekranu bufor:array[0..319,0..119 ] of byte; za pomocą dwóch pętli for na x,y;
- Wrzucam bufor na ekran piksel po pikselu pętlą for (x,y) i poleceniem PutPixel (asm, pobiera x,y i color).
- Czy możliwe jest użycie monochromatycznej mapy bitowej zamiast 256-cio kolorowej celem oszczędności pamięci?
I teraz moje pytanie brzmi: Jak zrobić to szybciej?
Jak w asmie szybko wysłać bufor na ekran? Musi to być szybciej niż czas powrotu plamki, czyli poniżej 1/25 sekundy.
Problem drugi: Własne fonty.
Otóż przykładowo posiadam bitmapę w 256 kolorach 8x2048 pikseli, i chcę za pomocą procedury wysłać na ekran dowolny tekst, w dodatku przewijający się. Potrzebuję wczytać go do bufora, odczytać id znaku ASCII i użyć tego ID jako offsetu do bitmapy. Następnie wysłać tekst na ekran i zanimować go.
Problemem okazuje się też przycięcie scrolla tekstowego, aby nie zapętlił się gdzieś z drugiej strony ekranu.
I teraz tak:
1.Jak odczytać ID znaku w standardzie ASCII, to znaczy otrzymać z tego liczbę 0-255?
2.Jak szybko przyciąć animowany tekst do szerokości ekranu?
Mam nadzieję, iż ktoś rozpatrzy ten temat i udzieli mi pomocy.
Pozdrowienia,
Sinsky