Przygotowanie i ładowanie czcionek ekranowych
Przygotowanie i ładowanie czcionek ekranowych.
Wstęp.
W pamięci Atari umieszczone są matryce znaków wyświetlanych na ekranie – zestaw czcionek podstawowych oraz dodatkowy nazywany międzynarodowym z racji umieszczenia w nim czcionek charakterystycznych dla różnych języków. Z obu zestawów można swobodnie korzystać we własnych programach, niestety nie znajdziemy wśród nich polskich liter Ą,Ę itp. Matryca pojedynczej litery składa się z 8 rzędów i 8 kolumn i zajmuje ona 8 kolejnych bajtów w pamięci. Znaków w zestawie czcionek jest 128 z czego wynika, że pełny zestaw czcionek zajmuje 1024 bajty (1 kilobajt).
Pamięć w Atari podzielona jest na 256 bajtowe obszary zwane stronami, stąd w pamięci o pojemności np. 64 kB znajduje się 256 stron pamięci. Specyfika działania systemu operacyjnego powoduje, że zestaw czcionek w pamięci Atari musi być umieszczony na początku pełnego kilobajta i zajmuje 4 kolejne strony pamięci. Komórka pamięci z której możemy uzyskać informację od jakiej strony pamięci Atari pobiera dane czcionek do wyświetlania na ekranie ma numer 756. I tak na standardowo uruchomionym Turbo Basic XL wywołanie polecenia:
? PEEK(756)
zwraca wynik 244. Oznacza to, że standardowy zestaw czcionek umieszczony jest w pamięci od strony 224 do 227. Wpisanie do tej komórki pamięci wartości 204:
POKE 756,204
spowoduje, że Atari przełączy wyświetlanie na czcionki międzynarodowe. Obydwa zestawy umieszczone są w tzw. pamięci ROM – nie można więc ich zmodyfikować. Żeby w programie wykorzystać własne czcionki, np. zawierające polskie litery trzeba najpierw umieścić jej w wolnej przestrzeni o wielkości 4 stron – czyli 1 kilobajta – pamiętając żeby początek zestawu zaczynał się na granicy kilobajta, oraz, żeby z tej przestrzeni nie korzystały żadne inne programy, procedury, czy też sam system operacyjny, ponieważ mogłyby zamazać dane z tego obszaru, lub co gorsza wykorzystać te dane w niewłaściwy sposób.
Poniższy program wyświetla na ekranie graficznym czcionki zestawu podstawowego i międzynarodowego.
10 GRAPHICS 8:COLOR %1
11 POKE 756,204:Y=96:EXEC FONT
12 POKE 756,224:Y=32:EXEC FONT
13 END
15 PROC FONT
16 FOR A=%0 TO %3
17 FOR B=%0 TO 31
18 TEXT 32+B*8,Y+A*8,CHR$(A*32+B)
19 NEXT B
20 NEXT A
21 ENDPROC
Są dwie najczęściej stosowane metody utworzenia własnych czcionek w programie:
- kopiujemy oryginalny zestaw czcionek do wolnego obszaru pamięci i tam zmieniamy matryce określonych znaków,
- wczytujemy z pamięci zewnętrznej gotowy zestaw czcionek do wolnego obszaru pamięci.
Wyznaczenie wolnego obszaru pamięci na czcionki może być dla początkującego dosyć trudne, w poniższych przykładach wykorzystamy bezpieczny dla naszych niecnych eksperymentów obszar od strony 128 do 131 – POKE 756,128
Przykład 1: kopiowanie oryginalnych czcionek do wolnego obszaru pamięci i przykład zmiany matrycy jednego znaku (a konkretnie pustego znaku spacji):
10 -MOVE 224*256,128*256,1024
20 POKE 756,128
30 FOR X=0 TO 7
40 READ A:POKE 128*256+X,A
50 NEXT X
60 DATA 1,2,4,8,16,32,64,128
Przykład 2: ładowanie czcionek z pliku.
Jest bardzo dużo lepszych i gorszych edytorów czcionek na Atari, zasada działania większości jest prawie identyczna. Powstało też kilka edytorów czcionek Atari dla systemów Windows. Jednym z nich jest Atari Font Creator. Narzędzie proste i wygodne, w którym wynikowo przygotujemy plik z rozszerzeniem FNT zawierający 1024 bajty pełnego zestawu czcionek. W jednej z opcji możemy zawęzić obszar czcionek do zapisu jeśli nie potrzebujemy całego zestawu, a zmienione znaki następują po sobie.
Tak przygotowane czcionki możemy bez trudu odczytać:
10 OPEN #1,4,0,”D:CZCIONKI.FNT”
11 BGET #1,128*256,1024
12 CLOSE #1:POKE 756,128
Posłowie.
Wybór metody umieszczenia czcionek we własnym programie zależy od intencji twórcy. Jeśli dane czcionek mają być umieszczone bezpośrednio w programie w Turbo Basic XL można wykorzystać metodę pierwszą z matrycą znaków mieszczoną w liniach DATA – niestety powiększy się wielkość programu i obniży ilość wolnej pamięci dla tegoż. Wybór opcji drugiej jest prosty w zastosowaniu, lecz wymaga odczytu zewnętrznego pliku z czcionkami, więc czasem należy wprowadzić mechanizm sprawdzania, czy ten plik jest dla programu dostępny, na wypadek, gdyby program miał być uruchamiany np. pod kontrolą innego DOS-u. Ja korzystam ze Sparta Dos X, gdzie staram się, aby program i wszystkie dane siedziały grzecznie we wspólnym katalogu dzięki czemu taki problem nie istnieje – wszelkie operacje odnoszące się do nośnika D: wykonywane są na aktualnym katalogu.
Temat nie został wyczerpany i dla laika może okazać nie do końca zrozumiały, ale literatura opisuje zagadnienie nader obficie, do lektury której zachęcam każdego, kto chce dowiedzieć się więcej na temat pierwszego sposobu.
Biblioteka: