Jakie fonty? Część trzecia


Fonty... coraz dalej...

      Pozwolę sobie na malutki wstęp. Już po raz siódmy biorę udział w redagowaniu magazynu dyskowego. Różnie tam na przestrzeni dziejów bywało, ale bardzo często w magazynach omawiamy różnego rodzaju programy i aby czytelnik mógł sam ocenić o czym mowa, opisywany program umieszczamy w tymże magazynie. W SERIOUS'ie już stało się to zasadą... Cały czas pozostaje jednak nie rozwiązany problem praw autorskich. Jest to na pewno uregulowane jakąś tam ustawą, ale w naszej sytuacji trudno wogóle dyskutować o jakichś tam ustawach. Czasami nawet się zastanawiam, czy my w ogóle istniejemy? Jak mam traktować ponad 4 000 programów, które udało mi się zgromadzić na moich dyskach? Programów, których autorzy już dawno być może działają na innych platformach sprzętowych i może nawet już nie pamiętają, że kiedyś coś takiego napisali. W sytuacji kiedy nie mam wątpliwości, że autor programu działa na naszej scenie staram się z nim skontaktować i uzyskać jego zgodę... Spotykam się z różnymi reakcjami. Jedni udzielają mi błogosławieństwa, dodatkowych rad, ujawniają więcej szczegółów jak na przykład kolega Madman z Madteam'u, czy kolega Forup/IND, a inni traktują mnie wyniosłym milczeniem, jak na przykład LBS/APC, czy kolega Hugo/Banklan. Na temat osiągania korzyści majątkowych płynących z działalności na naszej scenie wypowiadałem się już w innym artykule, tutaj tylko chcę powiedzieć, że nie możemy nikomu płacić za to, że pokazujemy w magu jego program, gdyż sami nie osiągamy z tego tytułu żadnych korzyści majątkowych. Nasza praca jako redakcji maga jest pracą społeczną. Uważam, że umieszczając czyjś program w naszym magazynie na pewno nie czynimy krzywdy jego autorowi. Program ów krąży już od dawna po naszej scenie, a my go dodatkowo popularyzujemy wyjaśniając bardzo wielu ludziom jak z niego korzystać. Być może zaowocuje to większym wykorzystaniem przykładowego programu i lepszym wyglądem nowopowstających programów, tworzonych zwłaszcza przez początkujących kolegów...

      Ten trochę przydługi wstęp dedykuję koledze Hugo/Banklan autorowi omawianego dzisiaj programu o nazwie X16, służącego do tworzenia fontów na matrycy 16x16 punktów...

X16.COM

      Niestety, nie dysponuję żadną dokumentacją tego programu. Z konieczności muszę ograniczyć się do moich doświadczeń z eksploatacji tego programu, a są one raczej niewielkie...

      Bardzo często zdarza nam się obserwować w różnego rodzaju produktach typu "dema" piękne duże fonty wykonane, nie topornie na matrycy 8x8 punktów i powiększone do trybu 7, lecz wykonane bardzo ładnie na matrycy 16x16 punktów. Niestety nie jest to takie proste. Efekt ten można osiągnąć przy pomocy przeprojektowanego fontu opartego na foncie zbudowanym na matrycy 8x8 punktów! Musimy uruchomić trochę swoją wyobraźnię. Aby uzyskać znak oparty na matrycy 16x16 punktów musimy użyć aż czterech znaków 8x8 położonych obok siebie w dwóch sąsiadujących ze sobą liniach trybu 2...

      Trochę to zawiłe, a przy czytaniu o Font Designerze w pierwszym odcinku tego serialu wszystko wydawało się tak proste, że aż za proste... Ale nie rozmydlajmy się. Sprawa jest dosyć skomplikowana i to w fazie projektowania fontu jak i w fazie wyświetlania napisów na ekranie. Pozostańmy na razie przy projektowaniu. Otóż jak napisało się tam wyżej opieramy się na foncie o matrycy 8x8 punktów czyli do zdefiniowania jednego symbolu musimy użyć 8 bajtów, Cały zestaw liczy sobie 128 symboli. My jednak projektując nasz zestaw symboli musimy pamiętać, że na każdy "nasz" symbol potrzeba nam aż 4 symboli z projektowanego fontu. Dane tychże symboli to 4*8 bajtów ułożone liniowo, czyli możemy zaprojektować 32 "nasze" symbole.

      W tym momencie proponuję obejrzeć sobie program X16 znajdujący się w pliku ze stuff'em. Znajduje się tam także kilka przykładowych fontów. Ale na razie zajmijmy się samym X16. Po jego odpaleniu pojawia się pytanie czy chcemy skasować stary font. Odpowiedź twierdząca spowoduje wyczyszczenie obszaru pamięci przeznaczonego na font. Po udzieleniu odpowiedzi na powyższe pytanie ukazuje się nam ekran roboczy Font Edytora. Największe okno, to okno edycji, umieszczone po lewej stronie ekranu. Po prawej stronie ekranu znajduje się kilka mniejszych okienek. Od góry szyldzik z nazwą programu i jego autorem. Poniżej znajduje się okno określające rodzaj aktywnego napędu dysków i nazwa programu (fontu). Naciśnięcie klawisza "D" spowoduje odczytanie katalogu dyskietki, ale u mnie zawsze jest to stacja nr.1. Naciśnięcie klawisza "L" umieszcza kursor w opisywanym oknie i umożliwia nam wybór stacji dysków oraz nazwy fontu, który chcemy odczytać. Trzeba przy tym pamiętać, że standardowym rozszerzeniem nazwy pliku jest SXS. Zatwierdzenie wybranej operacji klawiszem RETURN spowoduje odczytanie wybranego pliku.

      Jak już jesteśmy przy operacjach I/O to walę od razu, że nagrać swoje wypociny możemy po naciśnięciu klawisza "S" i zatwierdzeniu operacji klawiszem RETURN. Warto jeszcze wspomnieć, że przed operacją nagrania fontu możemy dokonać ustalenia adresu pod który będzie się wczytywał nagrywany font o ile zdecydujemy się na dodanie do nagrywanego fontu nagłówka "dosowego". Wyboru czy nagłówek ma być dodany czy nie możemy dokonać naciskając klawisz "B" i napis "yes" lub "no" w stosownym okienku będzie nas informował czy nagłówek będzie czy nie dodawany do fontu. W sytuacji kiedy rezygnujemy z nagłówka, oczywiście nie ma już mowy o adresie pod który ma się font ładować. W przeciwnym wypadku adres ten należy zawsze podać. Wprawdzie sam edytor sugeruje nam z góry wspomniany adres, lecz jeśli przyjdzie nam ochota na jego zmianę musimy co nieco wiedzieć...

      Otóż redagowany przez nas teoretycznie 32 znakowy font, jest niczym innym jak 128 znakowym fontem. Taki font jak już wszyscy doskonale wiedzą zajmuje obszar jednego kilobajta (1024 bajty, zgadza się?) i teraz uwaga nie chodzi tu o dowolny kilobajt w pamięci! Ustalając adres fontu trzeba podporządkować się pewnym regułom, niestety. W zasadzie jest to jedna reguła: starszy bajt adresu fontu musi być podzielny przez cztery, a młodszy bajt adresu musi być zerem.

      Jak już załatwiliśmy sprawy formalne to teraz możemy już się zająć sprawą w tym wypadku najważniejszą czyli tworzeniem tego wybranego cudownego fontu. Po lewej stronie ekranu roboczego umiejscowione jest okno edycyjne, widoczne pod postacią ramki o wymiarach 16x16 punktów. W oknie tym znaduje się kursor w postaci dużego okrągłego punktu. "Zapalenie" lub "zgaszenie" punktu wskazywanego przez kursor odbywa się poprzez naciśnięcie klawisza spacji. W dużym, szerokim oknie na dole ekranu, "na żywo" możemy obserwować jakie wprowadzamy zmiany wobec całego zestawu. W tym oknie redagowany symbol jest wyróżniony ciemniejszym polem. Działają następujące klawisze: o spacji już wspominałem.... Duży okrągły punkt przesuwamy w oknie edycyjnym poprzez naciśnięcie klawiszy "ze strzłkami" czyli klawiszy kursora. Klawisze kursora naciskane wraz z klawiszem CONTROL scrolują redagowany symbol w wybranym kierunku. Klawisz Clear naciśnięty wraz z klawiszem Shift powoduje skasowanie wybranego symbolu, ale jednocześnie skasowany symbol zostaje zapamiętany i można go wielokrotnie odtwarzać naciskając klawisz Insert wraz z klawiszem Shift.

Elegancko możemy się pożegnać z opisywanym programem, poprzez naciśnięcie klawisza ESC.

      Teraz powinienem przejść do ćwiczeń praktycznych. Zawsze w tym momencie ogarniają mnie skrupuły, choć może jest to niewłaściwe określenie. Chyba bardziej adekwatnym będzie wstyd. Muszę tu zazanaczyć, że w przypadku "zajęć praktycznych" niestety trzeba ujawnić trochę tajemnic swojego warsztatu i tu nie da się ukryć trochę się obnażamy. Wprawdzie nigdy i nigdzie nie twierdziłem, że jestem wielkim koderem i dlatego bardzo proszę o powstrzymywanie się od krytyki moich koderskich umiejętności. Oczywiście, jeżeli demonstrowane przezemnie rozwiązania uznacie za słabe, lub wręcz niedobre bardzo chętnie opublikujemy Wasze znacznie lepsze sposoby rozwiązania zadanego problemu.

      Po tym bańczucznym wstępie możem pooglądać sobie w jaki sposób udało mi się wykorzystać font, stworzony już tam przez kogoś wcześniej z znajdujący się w moich zbiorach pod nazwą JOYRIDE.SXS.

         icl 'D2:EQU.ASM'
         opt list_err+code_dsk

Zbiór etykiet używany przezemnie na pewno nie jest niczym specjalnym, jednak jeśli będziecie się domagali jego opublikowania, uczynimy to na pewno.
 font    equ $8000


Nagrywając font na dyskietkę, wybrałem opcję z nagłówkiem "dosowym" i podałem adres wczytywania na ten właśnie.
         org font+$400

 run     equ *
         lda #czarny
         sta tlo
         lda <dl
         sta dlptrs
         lda >dl
         sta dlptrs+1
         lda >font
         sta chbas

To jest blok przygotowania,że tak powiem przedpola, do dalszego działania. Oczywiście wszyscy sobie zdają sprawę z tego, że to przygotowanie polega na ustaleniu koloru tła dla naszego ekranu, na którym będziemy wyświetlać napis ułożony z nowych dużych symboli. Odpowiedniego "zorganizowania" wyglądu ekranu, a także powiadomienia systemu gdzie znajdują się definicje symboli.
 l1      ldx lx
         lda text,x
         dex
         stx lx
         bmi rts

Przyjąłem sobie założenie,że "moja" linia będzie się składała z 20 znaków i procedurka przepisująca dane z obszaru edycji "text" do obszaru pamięci ekranu kończy się po przeniesieniu 20 znaków. Do nadzorowania tej czynności powołałem do życia licznik x "lx". W buforze edycji tekstu spacja niestety nie może być spacją ze względu na inną jej odległość w foncie co jeszcze bardziej by skomplikowało procedurę.
         sec
         sbc #$20
         asl @
         asl @
         tay

Ponieważ trzeba przyjąć, że początek naszych symboli odpowiada początkowi prawdziwego fontu, więc to odejmowanie! Ale nasz symbol składa się z czterech kolejnych symboli prawdziwego fontu więc jego kod mnożymy razy cztery i umieszczamy w rejestrze "Y".
         inx
         txa
         asl @
         tax

Ponieważ nasze symbole są dwa razy szersze od symboli orginalnego fontu ofset "X" należy zwiększyć dwukrotnie ! Bufor "text" liczy sobie 20 znaków a linia ekranu liczy sobie 40 znaków!
         tya
         sta mems,x
         iny
         tya
         sta mems+1,x
         iny
         tya
         sta mems+40,x
         iny
         tya
         sta mems+41,x
         jmp l1

Pozostaje już tylko znaki z zestawu umieścić w odpowiednim miejscu pamięci ekranu. I tak aż do przeniesienia całego bufora tekstu.
 rts     ldx kbcode
         inx
         beq rts
         jmp warmst

Jak nam się znudzi naciskamy dowolny klawisz i RESET!

No i dane chyba bez komentarza!

 text    dta d'@SERIOUS@@@MAGAZINE@'
 dl      dta b($70),b($70),b($70)
         dta b(2+lms),a(mems)
         dta b(2)
         dta b($41),a(dl)
 mems    dta d'                                        '
         dta d'                                        '
 lx      dta b(19)

         org runadr
         dta a(run)
         end

      Mam nadzieję napisać jeszcze jeden, ostatni odcinek tego cyklu. Chciałbym opisać metody tworzenia dużych, naprawdę dużych wspaniałych wielokolorowych fontów. Tu chcę się zwrócić z apelem do wszystkich kolegów. Jedyny program jakim dysponuję, przy pomocy którego można zrobić duże kolorowe fonty to "Animator". Jest to program bardzo duży i skomplikowany i byłby na pewno problem z jego opublikowaniem, a raczej jest to niemożliwe... Może ktoś dysponuje programem służącym do tego celu, możliwym do opisania i jednocześnie publikacji?

Zbycho Jabol/DIAL