Terminal w stylu Commodore 64 na Linuksie — i polskie znaki, których nie było
*** 8 na 8 pikseli, ogonki i licencja z 2019 roku ***
Terminal w stylu Commodore 64 na współczesnym Linuksie to pomysł, który przychodzi do głowy każdemu, kto kiedykolwiek widział niebieski ekran z napisem READY. Pikselowy font, paleta VIC-II, migający kursor-blok. Wszystko to da się dziś zrobić w kilkanaście minut — do momentu, w którym napiszesz pierwsze polskie słowo z ogonkiem.
Ten wpis jest o tym, co się wtedy dzieje, i jak to naprawiliśmy. Efekt oddajemy do używania: c64-terminal-pl jest publiczny i darmowy.
Dlaczego terminal w stylu Commodore 64 nie mówi po polsku
Najwierniejszą rekonstrukcją charsetu z ROM-u C64 jest font C64 Pro Mono autorstwa Style — ten sam, którego używamy zresztą na tej stronie. Jest znakomity i ma jedną wadę, o której dowiadujesz się dopiero w praktyce: nie zawiera ani jednego polskiego znaku. Żadnego ą, ę, ł, ń, ó, ś, ź, ż.
System nie zgłasza wtedy błędu. Po prostu podstawia za brakujące litery pierwszy lepszy font systemowy — i w środku pikselowego napisu ląduje gładkie, wygładzone „ą" z kroju zaprojektowanego w XXI wieku. Wygląda to dokładnie tak źle, jak brzmi. Napis ZAŻÓŁĆ GĘŚLĄ JAŹŃ zamienia się w zbieraninę dwóch epok typografii naraz.
Osiem na osiem, czyli gdzie zmieścić ogonek
Rozwiązanie okazało się siedzieć w samej konstrukcji fontu. C64 Pro Mono jest w stu procentach pikselowy — każdy znak to prostokąty ułożone na siatce ośmiu na osiem pikseli, dokładnie tak jak w oryginalnym układzie znaków Commodore. Można więc zrobić rzecz, która w zwykłym foncie byłaby wandalizmem: zamienić literę z powrotem w bitmapę, dorysować akcent jako piksele, i złożyć znak od nowa.
Kluczowe było odkrycie, że w tym foncie wiersz nad wielką literą i wiersz pod linią bazową są puste. Wielkie litery zajmują wiersze od pierwszego do siódmego, małe od trzeciego do siódmego. Zostaje dokładnie tyle miejsca, ile trzeba na kreskę nad Ó i na ogonek pod Ą — bez skracania samych liter, bez rozpychania wierszy:
Ó Ż Ł Ą ....##.. ...#.... ........ ........ ..####.. .######. .##..... ...##... .##..##. .....##. .##..... ..####.. .##..##. ....##.. .##..... .##..##. .##..##. ...##... ####.... .######. .##..##. ..##.... .##..... .##..##. .##..##. .##..... .##..... .##..##. ..####.. .######. .######. .##..##. ........ ........ ........ ....##..
Dzięki temu cały znak mieści się w komórce terminala. To nie jest kosmetyka: gdyby akcent wystawał choć o piksel, terminal ucinałby mu górę albo trzeba by rozsuwać wiersze, a wtedy ekran przestaje wyglądać jak ekran C64.
Ź kontra Ż, czyli lekcja o różnicy, którą widać
Pierwsza wersja miała wadę, którą widać było dopiero na renderze. Ź i Ż różniły się wyłącznie przesunięciem akcentu o jeden piksel w bok — kreska stała w czwartej kolumnie, kropka w trzeciej. Na papierze różnica jest. Na ekranie nie ma żadnej.
Poprawka polegała na tym, żeby rozróżniać je grubością, a nie położeniem: kreska ma dwa piksele i idzie w prawo, kropka ma jeden i stoi na środku. Małe litery mają zapas dwóch wierszy, więc dostały ładniejszy, ukośny akcent. Wniosek wart zapamiętania przy każdym projektowaniu w małej rozdzielczości: różnicę trzeba projektować tak, żeby ją było widać, a nie tak, żeby dała się policzyć.

Dlaczego instalator pobiera font, zamiast go rozdawać
Tu dochodzimy do części, która wymagała więcej namysłu niż sam kod. Licencja fontu C64 Pro Mono zabrania dwóch rzeczy naraz: rozpowszechniania pliku i jakiejkolwiek jego modyfikacji. Każde dozwolone użycie ma w niej dopisek „without any modification". Gotowy font z dorysowanymi polskimi znakami wypada więc poza wszystko, na co autor się zgodził.
Dlatego w repozytorium nie ma pliku fontu i nigdy nie będzie. Instalator pobiera oryginał prosto ze strony autora, a polskie znaki dorysowuje już na komputerze użytkownika, do jego własnego użytku. Rozdajemy generator, nie font. To rozróżnienie brzmi drobiazgowo, ale jest różnicą między „szanujemy pracę autora" a „bierzemy sobie cudze i zmieniamy nazwę".
Jak to zainstalować
Trzy polecenia. Instalator sam rozpoznaje dystrybucję, sprawdza czego brakuje i robi kopię zapasową plików, które zmienia:
git clone https://github.com/arekbr/c64-terminal-pl.git cd c64-terminal-pl ./install.sh
Nie chcesz nic zmieniać w ciemno? ./install.sh --dry-run pokaże, co by się stało, i nie tknie niczego. Rozmyślisz się? ./uninstall.sh cofa wszystko, a Twój plik startowy powłoki wraca do stanu sprzed instalacji — sprawdzaliśmy to trzema pełnymi cyklami instalacji i deinstalacji.
Powstało i było testowane na Debianie, z gnome-terminalem. Konfiguracje dla kitty, alacritty, foot, Konsole, xfce4-terminala i wezterma są napisane według dokumentacji każdego z nich, ale nie mieliśmy ich na czym przeklikać — i tak jest to napisane wprost w dokumentacji projektu. Wolimy powiedzieć „nie sprawdziliśmy", niż udawać, że sprawdziliśmy.
Po co komu terminal w stylu Commodore 64
Bo praca może wyglądać jak zabawa. Bo READY. zamiast zachęty basha to drobiazg, który poprawia humor o siódmej rano. I dlatego, że retro to nie tylko sprzęt na półce — to również przenoszenie tamtej estetyki tam, gdzie realnie spędzamy dziś czas.
Jeśli lubisz takie rzeczy, zajrzyj do tego, czym się zajmujemy, albo sprawdź, jak działa wynajem sprzętu retro na eventy — prawdziwe maszyny, nie tylko ich fonty.
Projekty takie jak ten robimy po godzinach i udostępniamy za darmo. Jeśli chcesz, żeby powstawało ich więcej, najskuteczniej wesprzesz nas przez Patronite — regularne wsparcie pozwala nam planować dłużej niż na miesiąc do przodu. Każda inna forma pomocy też się liczy: tutaj zebraliśmy wszystkie sposoby.
Kod, dokumentacja i zrzuty ekranu: github.com/arekbr/c64-terminal-pl. Zgłoszenia błędów i poprawki mile widziane — zwłaszcza od użytkowników terminali, których nie mieliśmy jak przetestować.

