O czcionkach systemowych by QTZ 2010-02-16 00:22:52

Paweł "QTZ" napisał:

Prezentowałem niedawno "Atari Font Mover", który między innymi umożliwia dopasowanie znaków własnej czcionki do standardowej czcionki Atari lub do dowolnej innej, którą użytkownik umieści w pliku "Custom.set".

Atari Font Mover


W związku z tym postanowiłem sprawdzić, jakie zestawy znaków można znaleźć w 8-bitowych komputerach Atari i podzielić się tą wiedzą. Ostatecznie artykuł rozrósł się do postaci czterech miniporadników - jak sprawdzić wersję systemu, jak rozpoznać wersję arabskiego Atari, jak skompilować źródła oraz jak zgrać ROM'y. Zapraszam do lektury.

Standardowe zestawy znaków

Najbardziej popularne modele Atari posiadają wbudowane dwa zestawy znaków. Standardowy, zawierający znaki graficzne "pisane" z klawiszem Control i międzynarodowy, który w miejscu znaków graficznych ma umieszczone dodatkowe litery, wśród których niestety brakuje charakterystycznych dla języka polskiego. Ten zestaw znaków nie występuje w modelach - 5200, 400/800 - OSA, OSB (w zbiorach AtariOnline.pl pliki odpowiadające tym modelom mają następujące nazwy: "Atari 5200.rom", "Atari OS vA.rom", "Atari OS vB.rom"), został dodany w systemie dla Atari z pamięcią ROM 16KB (+8KB Basic) - seria XL/XE - REV10, REV11, REV1, REV2, REV3, REV4 ("Atari OS v10 82.10.26.rom", "Atari OS v11 82.12.23.rom", "Atari OS v1 83.11.03.rom", "Atari OS v2 83.10.05.rom", "Atari OS v3 85.01.03.rom", "Atari OS v4 87.07.05.rom").

standardowy zestaw znaków (graficzny)

międzynarodowy zestaw znaków
(wyróżnione znaki międzynarodowe)


Aby przełączyć się na niego wykonujemy POKE 756,204, a aby powrócić do standardowego - POKE 756,224. Podobno w modelu 1200XL można się przełączać również kombinacją klawiszy Control+F4, ale nie miałem okazji tego sprawdzić. Jako uzupełnienie dodam, że system w wersji OSB zawiera fragmenty znaków w nietypowym miejscu pamięci ROM:

OSB - fragmenty liter w kodzie systemu
(w zbiorach AOL: "Atari OS vB.rom")




Nieoficjalne modyfikacje

Pierwszy zestaw firmowo występuje w niezmienionej postaci we wszystkich 8-bitowych komputerach Atari, jak również w systemach pisanych przez niezależnych od Atari programistów. Wśród tych systemów wyjątkiem jest Happy Warp, gdzie nieznacznie zmieniono apostrof i cudzysłów:

Happy Warp
(w zbiorach AOL: "Atari OS (Happy Warp).rom")


Międzynarodowy zestaw znaków w nieoficjalnych systemach z powodu małej pojemności ROM często jest pominięty, a jego miejsce zajmuje rozbudowany kod systemu - przykładem są QMEG ("Atari OS (Qmeg 3).rom") i wspomniany Happy Warp ("Atari OS (Happy Warp).rom"). W kilku innych występuje w zmodyfikowanej postaci:

XL OS dla procesora 65C816 (tutaj)


OS++ w emulatorze "Atari++"
(u nas: "Atari OS (emulator Atari++).rom")


Jako ciekawostkę dodam, że OS++ z emulatora "Atari++" działa również na emulatorach - "Altirra" od wersji 1.5, gdzie kopiujemy go jako "otheros.rom" i na "Atari800" z wyłączonymi patch'ami. Nie działa na "Atari800Win PLus", gdzie po wyłączeniu patch'y pojawia się tylko kursor i na "EmuAPC", gdzie widzimy całkowicie czarny ekran.

działający OS++ w emulatorze "Altirra 1.6 prerelease"


Istnieje też modyfikacja systemu w wersji REV2 polegająca wyłącznie na zmianie zestawu znaków międzynarodowych na polskie:

polskie znaki ("Atari OS (polish charset).rom")


Ten zestaw znaków użyty jest również w Turbo ROM ("Atari OS (Turbo 2001).rom").



Arabskie zestawy znaków

Twórcy modyfikacji słusznie biorąc pod uwagę zgodność znaków użyli standardowej czcionki bez jakichkolwiek modyfikacji i zostawili ją w standardowym obszarze pamięci. Inaczej jest w sygnowanej znakiem Atari wersji arabskiej - domyślny zestaw znaków jest umieszczony w miejscu międzynarodowego, a w miejscu standardowego znajdują się znaki arabskie. Istnieją co najmniej dwie wersje arabskiego Atari, różnią się one funkcjonalnością oraz wbudowaną czcionką. W pierwszej wersji powtarzają się znaki oznaczające cyfry: 0,2,3,4,8,9,6,7 i spacja, co jest mylące:

Arabic v.1 (opisany jako REV 3B)


W drugiej wersji zostało to poprawione - powtarza się już tylko spacja, w miejscu backslasha wstawiony został dodatkowy znak arabski, a zamiast powtarzających się zostały przywrócone znaki standardowe i dodatkowo doszedł odwrócony znak zapytania, pozostałe znaki zostały pogrubione, przez co stały się bardziej czytelne:

Arabic v.2 (opisany jako REV59)


Zastosowanie zmodyfikowanego zestawu znaków jako domyślnego (224) nie jest dobrym rozwiązaniem, powoduje, że większość programów nie przeznaczonych specjalnie dla tej wersji Atari wyświetla niewłaściwe znaki. Program uruchomiony na tak zmodyfikowanym systemie "nie spodziewa się" niestandardowych znaków w tym obszarze pamięci i używa ich tak samo, jak standardowo dostępnych w innych modelach. Więc w tym przypadku cyfry, małe litery i znaki graficzne zostaną zastąpione arabskimi. Program używający znaków graficznych, zamiast oczekiwanych kształtów będzie wyświetlał znaki im przypisane.

"Zaskakujące" efekty występują w programach, które kopiują domyślną czcionkę i modyfikują tylko część znaków. W polskich programach najczęściej tą metodą dodawane są znaki diakrytyczne, które w tym przypadku zostaną "przemieszane" z arabskimi, lub zależnie od użytej metody, arabskie znaki zyskają "ogonki".

Podobnie prezentuje się dodatkowa grafika umieszczona na znakach, czego przykładem jest logo podczas wczytywania programu "Kasprzak Demo":

"Kasprzak Demo" bezpośrednio po uruchomieniu (kopia czcionki arabskiej z logo), po przełączeniu zestawu znaków (czcionka graficzna) i dla porównania na standardowym Atari (kopia czcionki graficznej z logo)


W nowszej wersji systemu można się przełączyć pomiędzy aktualnym i alternatywnym zestawem znaków poprzez naciśnięcie kombinacji klawiszy Shift+Help, która działa nawet podczas Self-Test'u. Jednak jak widać, przywrócenie czcionki graficznej nie zawsze daje pożądany efekt - tu "usuwa" logo, które zostało "nieświadomie" dodane do czcionki arabskiej, zamiast według założenia do graficznej, gdzie go nie ma. Również efekt kursywy lub pogrubienia zostanie "zaaplikowany" do czcionki arabskiej:

"Super Czołówka" - pogrubione znaki, także arabskie


Manualna zmiana zestawu znaków zanim program zmieni używany zestaw na "swój" umieszczony w przestrzeni programu może z kolei spowodować, że obydwa dostępne w ten sposób zestawy będą zupełnie nieodpowiednie w danym przypadku. W programie "Super Czołówka", jeżeli na ekranie tytułowym (podczas tworzenia zestawu znaków) naciśniemy Shift+Help - później w menu ta kombinacja zamiast przełączyć nas na czcionkę graficzną, przełączy nas na standardową arabską:



Z tego wniosek, że programy wymagające "tradycyjnych" liter, aby poprawnie wyświetlać tekst na takim systemie, powinny być "spatch'owane" tak, aby pobierały czcionkę z alternatywnego zestawu znaków - 204 (w tym przypadku standardowy), a do programów korzystających z domyślnego zestawu znaków należałoby dodać POKE 756,204. Ciekawe, czy istnieją tak zmodyfikowane programy?

Najlepiej byłoby sprawdzić wersję ROM - jeżeli jest to REV59 ($3B) - wtedy ustawić zestaw znaków na 204 - wszędzie tam gdzie jest on używany i po każdorazowej zmianie trybu graficznego: IF PEEK(65527) = 59 THEN POKE 756,204. Co polecam testom i uwadze piszących oprogramowanie dla Atari.

Również emulator "Atari800Win PLus" używa czcionki Atari z załadowanego ROM'u - do wyświetlenia komunikatu "pauzy":

"standardowy" Self-Test i komunikat pauzy


Doskonale to widać, kiedy użyjemy ROM'u ze zmodyfikowaną domyślną czcionką i zatrzymamy emulator klawiszem F9:

Arabic v.1 (znany jako REV3B) i zatrzymany Self-Test


Jak widać idealnie by było, gdyby czcionka standardowa (graficzna) zawsze znajdowała się w spodziewanym miejscu w pamięci w niezmienionej postaci, zaś czcionka specyficzna dla danego języka umieszczana była w miejscu międzynarodowej, która to z kolei mogłaby być ustawiona jako domyślna (204 zamiast 224), a system miałby unikatowy numer oznaczający wersję językową (tutaj można to zauważyć po numerze "revision" = 59) - wtedy nie powodowałoby to konfliktu.



Dwie wersje, a jakby jedna - przypuszczenia

W internecie można znaleźć informacje o wersjach REV3B i REV59, jednak źródła podają błędnie, że jest to dokładnie ta sama wersja, gdyż $3B = 59. Co prawda zapis ten zależy od interpretacji, jednak pod tymi pozornie jednoznacznymi oznaczeniami kryją się dość znacząco różniące się wersje, które łatwo pomylić, gdyż oprócz jednakowego numeru wersji (59) mają również taką samą datę (21/07/1987). Być może twórcy nie zmienili tych wartości celowo, aby istniejące już oprogramowanie nie miało problemu z rozpoznaniem wersji językowej systemu, a być może zapomnieli. Ponieważ poprzednie wersje odczytujemy jako numery dziesiętne - 10 = REV10 (nie A od $A), 11 = REV11 (nie B od $B), można przypuszczać, że oznaczenie REV59 jest tym prawidłowym, co również może być błędne, bo jeżeli zostanie ono tak zinterpretowane, to sposób zapisu jest inny niż w przypadku daty. Na dodatek nie wiadomo, na której wersji systemu te wersje są oparte - prawdopodobnie na REV4 lub REV3, jednak, aby być całkowicie pewnym należałoby się pokusić o analizę kodu. Wszystko wskazuje na to, że system opisany jako REV3B jest starszą wersją, gdyż jest mniej funkcjonalny, a REV59 wygląda na nowszą bardziej przemyślaną, więc można przyjąć, że są to Arabic v.1 i v.2. Nie wykluczone, że jedna wersja jest oparta na REV3, a druga na REV4. Wersja opisana jako REV59 może być więc najnowszą istniejącą wersją systemu operacyjnego, jaka została firmowo zamontowana w Atari.

Co do istnienia innej wersji systemu podejrzenia miał już Nosty (patrz artykuł o arabskiej wersji Atari). Wszystko wskazuje na to, że posiada on starszą wersję, gdyż jak napisał - nie działa w niej kombinacja Shift+Help, ostatni znak słowa po naciśnięciu spacji nie jest automatycznie zamieniany, pisanie jest niewygodne (zarówno z Caps jak i z Control zawsze w przeciwnym kierunku), również można to wywnioskować patrząc na załączone zdjęcie.



Jak rozpoznać, która to wersja?

Bardzo łatwo jest rozróżnić wersje arabskiego Atari patrząc na ekran Self-Test'u (często pokazywanego na zdjęciach), gdyż jako "Esc" w starszej wersji (opisanej jako REV3B) wyświetlany jest znak, który odpowiada cyfrze zero - "duża kropka" (podobna do "karo"), a w nowszej wersji (opisanej jako REV59) jest to "Ę".

Arabic v.2 (znany jako REV59) - wyraźnie widoczny symbol "Ę" ("Esc"), odwrócone znaki zapytania i inne charakterystyczne znaki




Uszkodzony Arabic OS - początek poszukiwań

Na stronie Kevina Savetz'a można znaleźć pliki ROM arabskiej wersji Atari, które nie działają z żadnym emulatorem. Ponieważ jest tam również informacja o możliwej modyfikacji sprzętowej, można uznać, że nie działają one właśnie z tego powodu... Jednak pliki te nie działają, ponieważ są uszkodzone, o czym świadczą czcionki zawarte w jednym z nich - zarówno standardowa, jak i arabska są pełne przekłamań, również data ROM'u jest nieprawidłowa (21/07/E1).

Arabic (zaznaczone uszkodzone znaki)


Arabic (zaznaczone uszkodzone znaki - w porównaniu z poprawnymi)




Źródła - kompilacja - poprawne Arabic OS'y

Poprawną czcionkę wraz z źródłami arabskiego OS'a znalazłem w pakiecie źródeł różnych wersji systemu Atari w inkarnacji trzeciej - do ściągnięcia tutaj. Aby je skompilować pod Windows'em potrzebne są:

wynik w "SysInfo 2.20"




Zgrywanie ROM z Atari

16-to kilobajtowy ROM Atari można zgrać programem "COPYOS", który uruchamiamy na Atari. Ostatnie 16384 bajty utworzonego pliku (należy usunąć pierwsze 6 bajtów nagłówka) to ROM, który możemy użyć jako system dla emulatora. Z kolei po podziale tego pliku na bloki po 1024 bajty - czwarty i dziewiąty (licząc od 1) będą zawierały zestawy znaków, które można odczytać dowolnym programem odczytującym pliki FNT.

Basic nie zawiera fontów, jednak, gdy chcemy go zgrać na przykład do użycia z emulatorem, można to zrobić programem "ROMCOPY". Podobnie jak poprzedni, uruchamiamy go na Atari, z tym, że z włączonym Basic'iem (bez klawisza Option na starcie). Ostatnie 8192 bajty utworzonego pliku to ROM Basic'a.

Do wyodrębnienia potrzebnych fragmentów plików zgranych z Atari, po przeniesieniu ich na peceta, można użyć programu "TinyHexer" (bardzo funkcjonalny edytor). W tym celu tworzymy pusty plik (opcja File->New), wybieramy jeden z plików utworzonych na Atari, aby wstawić jego część (File->Insert Partial File...), podajemy adres, rozmiar i zapisujemy plik pod odpowiednią nazwą (File->Save as...), następnie, aby się nie pomylić, zamykamy go i powtarzamy całą procedurę dla kolejnego/-ych plików.

Dla pliku zgranego programem "COPYOS", należy wpisać 6 i +0x4000, plik zapisać jak "ATARIXL.ROM". Dla zgranego "ROMCOPY": 0x207D i +0x2000 - nazwa pliku to "ATARIBAS.ROM". Aby wyciągnąć czcionki postępujemy podobnie z utworzonym plikiem "ATARIXL.ROM". Wartości 0xC00 i +0x400 - plik "ATARI2.FNT" (zestaw alternatywny), 0x2000 i +0x400 - plik "ATARI1.FNT" (standardowy).

Program "ROMCOPY" służy do zgrywania cartridge'y, więc gdyby ktoś chciał go użyć w tym celu oczywiście należy go uruchomić bez Basic'a (z Option). Ostrzegam: wkładanie lub wyjmowanie cartridge'a przy włączonym komputerze może spowodować uszkodzenia!

Pliki FNT z czcionkami z różnych systemów (także te uszkodzone - do podejrzenia) do ściągnięcia tutaj.

=====
Uzupełnienie z 19 lutego: QTZ podesłał dla wygodnickich dyskietkę, na której nagrane są programy "COPYOS" oraz "ROM COPY", o których mowa w artykule. Pliczek tutaj.
Kaz 2010-02-16 00:39:34

Mocne! Lubie takie artki, dzieki Pawel.

mono 2010-02-16 01:30:28

Bardzo fajny artykuł.

zilq 2010-02-16 02:25:10

Dobry, rdzenny artykuł. Brawa

sikor 2010-02-16 07:49:06

A ja się przyczepię: [..]Ten zestaw znaków nie występował w starszych modelach - 5200, 400/800[..] - 5200 to nie jest starszy model, powiem wręcz, że młodszy. Dodatkowo jest to konsola do gier, a nie komputer. Inna sprawa, że właściwie jest to Atari XL/XE ze zmienionymi adresami sprzętowymi, ale to już zupełnie inna bajka...
Poza tym - artyku w porządku ;)

nosty 2010-02-16 09:54:29

Dzieki. Uzyskalem pewnosc, ze arabska wersja 65XE to nie zadna samodzielna inicjatywa szejkow (co sugerowali niektorzy) ale w pelni oficjalna wersja.

flashjazzcat 2010-02-16 11:11:39

Very interesting article!

T 2010-02-16 11:32:11

Trochę tych programów już jest porozrzucanych po sieci, może czas umieścić jakieś osobne archiwum na wszystkie programy narzędziowe dla Atari pozwalające coś stworzyć za pomocą PC?

Kaz 2010-02-16 12:34:39

Sadze, ze juz raczej czas na zapoznanie sie z zawartoscia AtariOnline.pl :)

http://atarionline.pl/v01/index.php?ct=utils&sub=Z.+Inne+platformy

Krótki 2010-02-16 16:06:19

Poprawki do bazy plików:
1. Atari OS vB PAL (v1).rom to NIE jest PAL-owska wersja OSB. Jest to spatchowana wersja OSB NTSC rozprowadzana z XFormerem - być może pochodzi ona z Translator Diska. Źródło: http://ftp.pigwa.net/stuff/collections/nir_dary_cds/ROMS/ROMS_OS/REPLACEM/PATCHES/

2. Atari OS vB PAL (v2).rom - jak może wiadomo, do dziś nie znaleziono Atari 400/800 w wersji PAL z systemem w wersji B. Udało się natomiast odtworzyć ROM OSB/PAL "sztucznie", kompilując oryginalne źródła systemu - dokonał tego "sup8pdct" w tym wątku: http://www.atariage.com/forums/topic/141632-atari-rev-b-pal-rom-file

Tyle że w tym wątku autor opublikował 2 wersje OSa - pierwsza jest błędna, bo sup8pdct źle skompilował kod źródłowy. U ciebie leży właśnie ta błędna wersja. Zatem ściągnij sobie z ww. wątku wersję poprawną.

Kaz 2010-02-16 19:40:30

Dzieki Krotki! Poprawki wprowadzone.

Krótki 2010-02-17 16:12:32

Może niech nazwa pliku zawiera informację, że wersja NTSC pochodzi z XFormera, a PAL jest "sztuczna" i niezweryfikowana. W innych nazwach w ten sposób umieszczasz dodatkowe informacje.

Dalej:
1. Pliki Atari 5200 (v1).rom i Atari 5200 (v2).rom to nie są jakieś tam przypadkowe 2 wersje BIOS-u, tylko odpowiednio rewizja 1. z 1982 roku i rewizja 2. z 1983. Proponuję konsekwentnie usunąć z nazw nawiasiki i dodać daty.

2. Konsola Atari 7800 w wersji PAL i NTSC ma różne BIOS-y. Twój plik Atari 7800.rom to _nieprawidłowy_ dump BIOS-u NTSC, krążący po sieci od wielu lat. O tym, jak powstał - http://www.atariage.com/forums/topic/49237-new-a7800-bios/page__p__597891__hl__bios%20correct__fromsea
rch__1#entry597891

Jeśli nie chcesz go skasować z bazy, to chociaż dodaj do nazwy "bad dump" albo coś.

Dobre wersje BIOSU NTSC i PAL ściągnij z http://atari7800.org/emulation.htm

Krótki 2010-02-17 16:16:24

Poprawka pierwszego linka - http://www.atariage.com/forums/topic/49237-new-a7800-bios/

Kaz 2010-02-18 14:58:08

Dzieki!
ad.1 - zrobione.
ad.2 - zrobione. Aczkolwiek strona, ktora podales nazywa to "old OS", a nie nieprawidlowy?
Za pare godzin bedzie tez update na serwerze.

Krótki 2010-02-18 17:34:00

ad.2 - to prawda; ale w ww. dyskusji na AtariAge jest explicite mowa o tym, że jest do zły dump z ręcznie dopisanymi 2 brakującymi bajtami.