Dawno nie przynudzałem o fontach. No i nie wyjawiłem (a przynajmniej nie tu) z jakich kompów są te czcionki z obrazków kilka postów wcześniej. Rozwiązanie jest w pliczku "8&16BIT.BAS". Na dysku jest ciut nowsza wersja uruchamiadełka
"0.BAS" - z literkami do wyświetlania plików txt w zachodnich językach: niemiecki, francuski, hiszpański, norweski, szwedzki, holenderski. (planuję dodać portugalski i turecki).
"00.BAS" - to wersja z literkami polskimi i węgierskimi. Na razie tylko te dwa a już zajmują tyle miejsca co te zachodnie razem wzięte. (planuję dodać czeski, słowacki i rumuński). W tej wersji widać też w dolnej linijce funkcje jakie planuję w późniejszych wersjach, które na razie nie działają.
W obu przyspieszyłem wyświetlanie tekstów, dodałem pokazywanie plików z fontami i obrazki z Art-Studia, ale tylko skompresowane i z paletą, na tych bez tego jest na razie zonk. A paseczkiem do wybierania plików można teraz przeskoczyć ze skrajnie górnych i dolnych pozycji na przeciwną stronę.

BIG.BAS - pozwala pisać po ekranie kulfonami 16x16 pikseli. Wygląd narodowych ogonków jest zdefiniowany, ale nie ma ich jeszcze na klawiaturze. Uruchamia się w MODE 2, ale można przerwać program (2xESC) i wpisać MODE 1 i cont. Można by to zrobić w 8x16 w 4 kolorach, albo prościej w 2óch. Może kiedyś wykluje się z tego jakiś prosty edytorek.

CALEN.BAS - to angielska wersja kalendarza który był już na dysku z listingami z Bajtka, ale tu z wąską kolorowszą czcionką.
FNT2BAS.BAS - to programik który pomaga zmienić czcionkę z pliku .FNT do takiej dość zwartej postaci Basica.
KEYS.BAS - to programik który zmienia mapę klawiatury np AZERTY na QWERTY, lub odwrotnie. Do wyboru są też gotowe wersje niemieckiego, węgierskiego oraz brytyjska z rozkładem jak na PC co ucieszy emulatorowców. Ta ostatnia ma też na funkcyjnych znaczki do tworzenia tabelek.

Wyświetla też aktualną mapę klawiszy, od lewej wciskanych bez niczego, potem ze Shiftem, a z prawej z Ctrl. Planuję dodać więcej gotowych języków oraz edytor mapy klawiatury. Do samodzielnego dłubania.
RUSSIAN.BAS - To ruski alfabet zastępujący znaki ASCII. Jeśli po pojawieniu się Ready wpiszesz cont, to zmieni kilka znaczków na Białoruski, a ponowne cont, na Ukraiński, co się objawi inną ostatnią literą w Ready.

NARROW.BAS - To moje eksperymenty z wąską czcionką 4x8 pikseli. Tu też wpisywanie cont po Ready uwidoczni kolejny bajerek, co widać na obrazkach. Kiedyś o tym pisałem na Trickach, ale widać nie dość jasno bo niedawno mnie o to pytano. No więc po kolei.

Aby przełączyć CPC na wyświetlanie wąskiej a jednocześnie 4 kolorowej czcionki wystarczy po komendzie MODE, wpisać POKE w 47043, liczbę o 1 większą niż wpisaliśmy przy MODE. Można też mniejszą, ale wtedy czcionka będzie szersza niż standardowa w danym trybie, ale o tym może innym razem.

Ale to nie wszystko...
Pamiętacie komendę WINDOW ? - podajemy tam lewą i prawą kolumnę tekstu, oraz górną i dolną linijkę trybu tekstowego, w której chcemy mieć dane okienko tekstowe. Przypominam że mamy 8 takich okien od 0-7. A po komendzie MODE wszystkie przybierają maksymalne w danym trybie rozmiary, czyli np po MODE 1 jest to WINDOW 1,40,1,25. Oczywiście drugi parametr może być inny zależnie od ilości znaków dostępnych w linii w danym trybie. A to jest kłopocik bo w trybie 1 Basic nie pozwala by w tej komendzie było tam więcej niż 40, więc po zwężeniu czcionki mamy dostęp tylko do połowy ekranu. Poprawiamy to POKE 46892, i tu prawa kolumna, ale inaczej niż w WINDOW tu liczona od 0 a nie od 1.
Czyli podsumowując:
MODE 1:POKE 47043,2:POKE 46892,79 - i mamy 80 znaków w 4 kolorach, albo:
MODE 0:POKE 47043,1:POKE 46892,39 - i mamy 40 znaków w 16 kolorowym trybie z czcionką w 4 kolorach.
Niestety oryginalna czcionka po tych "pokach" jest nieczytelna i trzeba sobie przygotować lepszą. I zaraz o tym, ale wpierw dodam że aby zdefiniować okno inne niż 0 trzeba dodać jego nr. np.: WINDOW#3,1,40,24,25. Podobnie trzeba dopisywać do PRINT, PEN, PAPER i CLS jeśli chcemy by dotyczyło to okna innego niż 0. A ten drugi POKE do okna #1 jest pod adresem o 14 większym niż z okna #0. I o kolejne 14 bajtów do każdego następnego okna. Komenda MODE kasuje nam te "poki" więc o ile nie jest to naszym celem, to aby ich ponownie nie wpisywać do kasowania ekranu lepiej używać CLS.
I jeszcze dodam że 1szy z tych POKE zniekształca linie rysowane przez DRAW itp komendy więc, przed ich użyciem wpisujemy tam nr zgodny z ostatnio użytym MODE, a żeby znowu pisać wąską czcionką przywracamy tam o 1 większą.

Teraz o czcionce. - Najpierw jak wczytać sobie gotowego fonta. Trzeba zacząć od komendy SYMBOL AFTER. Jedynym parametrem jest nr kodu ASCII od którego w górę potrzebujemy dostępu do zmieniania wyglądu znaków. Ta komenda rezerwuje pamięć RAM przesuwając odpowiednio ruchomy adres HIMEM i kopiuje tam wygląd tych znaków z ROM, więc jakby co można nią przywracać standardowy wygląd. Domyślnie po resecie jest ustawione 240, co oznacza że ostatnie 16 znaków są wyświetlane wg tego jak wyglądają w RAM a nie w ROM. By zmienić standardowego fonta wpisujemy SYMBOL AFTER 32:h=HIMEM+1:LOAD"nazwa.fnt",h A po tym, Ready już się powinien wyświetlić w nowej czcionce.

Nie próbujcie wpisywać LOAD"nazwa.fnt",himem+1 bo choć za pierwszym razem to zadziała to HIMEM się obniży o 4KB i ponowne użycie takiej linijki wczyta nam fonta niżej niż to potrzebne, więc font się nie zmieni, a po kilku takich próbach komputer reaguje już tylko komunikatem że brak mu pamięci. Nie wiem czemu, bo powinno działać, to chyba błąd w ROMie.
Jeśli zamierzamy oprócz fonta wczytywać także inne pliki binarne, (np. RSX-y albo obrazki na dolny ekran a nie ten standardowy), to można obniżyć HIMEM komendą MEMORY po wczytaniu fonta, którego obszar zostanie wyżej, ale wtedy nie mamy możliwości użycia komendy SYMBOL AFTER ponownie (wyświetla błąd). Bardziej elegancko jest wpierw wyłączyć możliwość definiowania znaków SYMBOL AFTER 256 <- to nie jest błąd. Potem obniżyć HIMEM np przez MEMORY &3FFF a potem SYMBOL AFTER 32 co obniży też HIMEM o 224 znaki razy 8 bajtów dla każdego czyli o 1792. To pozwoli nadal używać komendę SYM..AFT.. a jeśli parametrem będzie 256 to na ponowne przestawienie MEMORY. Co się przyda np by uruchamiać bez resetu inne programy które organizują sobie pamięć po swojemu. Można też dodać w 1ej linijce IF-a który sprawdzi czy już przestawiono HIMEM albo PEEK czy już coś wczytywał, by się niepotrzebnie nie wykonywały za każdym razem jak przerwiemy program by w nim podłubać i ponownie go uruchomimy.

No dobra, a teraz jak przygotować wąskiego fonta. - Normalnie matryca znaków ma 8x8 pikseli. Jednak gładki jednokolorowy font do 80 znaków w 4-ro-kolorowym MODE 1 rysujemy go w prawej połówce. Dowolnym edytorem, a jest tego pełno, bo to chyba najczęściej pisany program przez początkujących programistów na CPC, ale jeszcze nie spotkałem takiego co pozwala tworzyć wąskie kolorowe fonty. Trzeba będzie kiedyś taki napisać, póki co używam tego w Art-Studio. Efekt będzie taki jak na obrazku z czarnymi literkami, font ma kolor 2, ale kolor kursora to 3. Co jest dość dziwne i fajne zarazem.

Jednak font narysowany tylko na jednej połówce nie pozwala korzystać ze wszystkich kombinacji po 4 różne PEN i PAPER. A jedynie takie jak widać na górze obrazka w tej kolorowej linijce z pytaniami pod czarnym fontem. Czyli inwers dzięki chr$(24) lub Ctrl+X oraz dzięki zmianie koloru tła za pomocą POKE. Inne kombinacje oznaczają pen i paper w takim samym kolorze czyli bez sensu. Ale wystarczy w lewej połówce matrycy zrobić kopię co do piksela, tego co narysowaliśmy po prawej. Tworząc taką podwójną literkę w każdym znaku. I mamy do dyspozycji gładki font który za pomocą POKE może mieć dowolny z 4ech kolorów i tak samo z tłem. Czyli nie licząc tych niewidocznych (np czarny na czarnym), mamy 12 różnych kombinacji, a nie 3 jak w matrycy w połowie pustej. Ale z fontem z podwójnymi literkami kursor zawsze ma taki sam kolor jak font którym w danej chwili piszemy. Co jest mniej cool.

Teraz o kolorach. - Po wpisaniu tego pierwszego POKE na wąską czcionkę komputer "myśli" że wyświetla znaki w MODE 2, więc PEN 1 i PEN 3 to jest ten sam kolor. Ale można to zmienić POKE 46895 dla koloru pisaka, a następny bajt to kolor tła. (Dla kolejnych okien są to adresy o 14 większe dla każdego następnego okna). Z tym że nie wpisujemy tam nr koloru tylko maskę, które kolumny matrycy znaku mają być wyświetlane. I tak by literki miały kolor 1 wpisujemy tam 240, ponieważ binarnie to &x11110000. Dla koloru 2 wpisać 15, a dla 3 to 255. Zero jak się domyślacie to 0.

Z tłem jest tak samo, a inne wartości dają pionowe paski. Nie polecam tego w tle bo będzie nieczytelnie, ale pisak może wyglądać tak jak w przykładzie na obrazku - te literki na czarnym tle. Co ciekawe kursor przybiera takie same kolorowe pionowe paski jak maska pisaka.

Pewnie się domyślacie że font kolorowy jak np ten z cieniem, tworzy różnica między prawą a lewą połówką matrycy. najlepiej go wyświetlać z penem 255 i tłem 0, lub w inversie. A pen wpisany POKiem jako 240 da gładki font bez cienia (kolor z górnej części litery), podobnie jak pen 255 ale z tłem 15 (kolor dolnej części litery na tle koloru cienia). Inne kombinacje dają albo mniej czytelne kombinacje kolorów, albo kompletnie nieczytelne kształty. Można też tak przygotować fonta by różne znaki miały różne kolory lub zestawy poziomych pasków albo piksele antyaliasingu w innym kolorze niż podstawowy na ostrych kątach. Choć osobiście nie jestem fanem tego ostatniego pomysłu. I to tyle o 80 w MODE 1.

Teraz o tym czym się różni font 40 w MODE 0 od tego poprzedniego. - Tym razem patrzymy na ten kolorowszy obrazek. Tym razem czcionkę rysujemy w środkowych czterech kolumnach czyli w 00111100. A dwie lewe kolumny matrycy to kopia (w przypadku jednokolorowego fonta), lewej połówki litery, a dwie prawe kolumny matrycy to kopia prawej połowy litery. Z tym że pierwszy składowy bit ostatecznego koloru w docelowej matrycy 4x8 w 4 kolorach, jest w jedynkach wg wzoru 11001100, a drugi składowy to zera. Innymi słowy w obu wersjach fonta do 80 i do 40 znakowego trybu bity 11000011 są identyczne, a pary kolumn 1 i 2 wg wzoru 00112200 muszą być zamienione miejscami. Można przerobić jeden font w drugi dokonując na każdym bajcie fonta:
b=PEEK(a):POKE a,(b AND 195)+(b AND 48)/4+(b AND 12)*4
Font z Art-Studia zawierający znaki od 32 do 127, zajmuje 768 bajtów. A pod jaki adres go wczytacie to już sami wiecie.
Jeszcze trochę o kolorach. Po tym jak po MODE 0 wpisaliśmy POKE na wąskie literki, CPC "myśli" że wyświetla je w MODE 1 więc dostępne jest przełączanie kolorów PEN i PAPER od 0 do 3. A kolejne czyli 4 i 5 itd. będzie wyświetlał jako 0 i 1 itd. Stąd słowa w "Shadow text !!!" mają 3 różne kolory, a właściwie to 3 zestawy 3ech kolorów.
Wracając do gładkiej czcionki w 1 kolorku. Jak widać na obrazku można użyć wszelkich kombinacji 16 kolorów pisaka i tła. Wpisując pod te same POKE 46895 i 46896 jako PEN i PAPER. Tu również wpisujemy maskę a nie kolor. Aby uzyskać kolory od 0 do 15, będą to wartości po kolei: 0, 192, 12, 204, 48, 240, 60, 252, 3, 195, 15, 207, 51, 243, 63, 255. jak komuś się tego nie chce przepisywać to ma gotowca w DATA w linii 50 w NARROW.BAS. Inne wartości dają kombinacje pionowych kolorowych pasków, co zwykle nie jest czytelne. Jeszcze słowo o dobraniu palety. W przypadku fonta 4 kolorowego i użycia PEN 1, litery się składają z kolorów o numerach 1,4 i 5, w PEN 2 to będą 2,8 i 10, a w PEN 3 to 3,12 i 15. Więc wypadałoby nadać im jakieś sensowne komponujące się ze sobą kolorki, zależnie od wizji artysty.

A jeśli czyta to jakiś początkujący Amstradowiec, a dotąd Spectrumowiec lub inny owiec. - INK w CPC nie służy do zmiany koloru pisaka tylko do zdefiniowania palety, a pisak się zmienia komendą PEN. W INK podaje się 2 parametry, 1szy to numer buteleczki na farbę od 0 do 15, a 2gi to nr farby od 0 do 26. A potem w PEN i PAPER podajemy nr buteleczki. A jaki w niej jest kolor zdecydował INK. Można też w INK podać 3ci parametr od 0 do 26. Wtedy w buteleczce są dwa kolory i sobie mrugają.

No i to tyle mojego dzisiejszego przynudzania. Teraz już chyba wszystko jasne. Dodaję kilka obrazków i oczywiście DSK. Na którym są wszystkie fonty jakie w tym wątku wcześniej pokazywałem na obrazkach. Zarówno te z innych komputerów jak i te z egzotycznymi oraz wąskimi alfabetami. Łatwo je pooglądać za pomocą 0.BAS. W trakcie gdy się wyświetlają można przerwać program (2xESC) i poklikać sobie danym fontem. Zobaczyć jak w nim wygląda listing (Ctrl+TAB), albo katalog dyskietki (Shift+TAB). A samo TAB uruchamia program od nowa, przywracając standardową czcionkę.

Inne BAS-y niż opisane powyżej to albo pliki które już na innych wątkach były na DSK albo jakieś niedokończone śmieci. nie chciało mi się ich posprzątać przed publikacją, jeszcze by mi je wcięło bezpowrotnie.

Pytania i komentarze mile widziane. A jak nie będą pozytywne to wyślę pocztą wąglika.
