Marcin "Montezuma" Sochacki prezentuje nam dzisiaj swój
projekt interfejsu:
SIO2BT czyli Atari i Bluetooth
SIO2BT swoją nazwą nawiązuje do projektów SIO2PC i SIO2SD. Idea
projektu to emulacja urządzeń SIO (na przykład stacji dyskietek) na
smartfonie i bezprzewodowe przesyłanie danych z/do Atari przez
interfejs Bluetooth.
Pewnie gdybym na samym początku postawił sobie takie właśnie cele,
to wcale bym się za to nie zabrał :). Na wiosnę 2013 roku
postanowiłem poeksperymentować z modułami Bluetooth. Pomysł był
prosty – zamiana kabla SIO2PC na połączenie Bluetooth. Testy miały
się odbyć na PC-cie z programem AspeQt. Niestety dość szybko
okazało się, że rzeczywistość jest bardziej skomplikowana. AspeQt
potrzebuje do pracy sygnał Command Line podpięty do portu
szeregowego (pod CTS,DSR lub pod RI). Tymczasem stan sygnałów
sterujących nie jest przesyłany przez Bluetooth. Na szybko
znalazłem w internecie program SIO2BSD autorstwa drac030, który nie
potrzebuje do pracy „Command Line”. Program napisany jest wprawdzie
pod Linux-a, ale działa także pod Windows w środowisku Cygwin.
Pierwszy test i porażka. Podpięty analizator stanów logicznych dał
odpowiedź - opóźnienia w transmisji danych przekraczają limity
protokołu SIO.
I na tym w zasadzie zakończyłbym swoją zabawę z Bluetooth, gdyby
nie xxl, który podesłał mi xbios z własnymi procedurami SIO. Loader
załadowałem za pomocą SIO2SD, następnie przepiąłem kabelki i voilà
- ładuję grę przez Bluetooth! Teraz wiedziałem już, że się da, ale
brakowało mi jeszcze pełnej wiedzy, żeby kontynuować projekt. W
międzyczasie zwrócił się do mnie Bernd Herale (
jego strona) z propozycją współpracy nad
projektem 4MB Flash MegaCart i SIO2BT musiało jeszcze trochę
poczekać.
W latach 80-tych nie miałem, niestety, własnego Atari. Kilka lat
temu postanowiłem to zmienić. W planach miałem zakup sprzętu i
literatury - z zamiarem nadrobienia sporych zaległości. Do mojego
„nowego” Atari kupiłem też SIO2SD, ale szybko zorientowałem się, że
obsługa tego urządzenia, delikatnie mówiąc, odbiega od ogólnie
przyjętych standardów GUI. Szczególnie wyszukiwanie gier z użyciem
klawiszy K1-K5 wymagało dużo cierpliwości. Kiedy jednak skopiowałem
na kartę SD nowe gry i zorientowałem się, że SIO2SD nie sortuje
plików alfabetycznie, postanowiłem napisać
program (na PC),
który pomaga utrzymać porządek z grami.
Na moim pierwszym Atari party ("NOMAM" w Laboe w 2010 roku)
musiałem chyba wprowadzić wszystkich w niezłe zakłopotanie. Nowo
poznani koledzy z ABBUC-a pokazali mi wszystkie możliwe wynalazki i
rozszerzenia do Atari. Połowa z nich wydawała mi się zupełnie
bezużyteczna. Stereo? Mam przecież w PC-cie. Dodatkowa pamięć RAM
dla jednego dema? To ja sobie to demo obejrzę w emulatorze. VBXE w
cenie trzech komputerów Atari? Może jednak innym razem... Bardzo
spodobały mi się natomiast freezer i carty z kolekcjami gier i
programów. W rozmowach wykazałem się sporą niewiedzą:
- "naprawdę nie słyszałeś nigdy o stacjach TOMS? I nie grałeś
nigdy w Hansa Klossa?" TOMS kojarzyło mi się tylko i wyłącznie z
TOM TOM-em, ale za to Niemcy grając w Hansa Klossa, nie mieli
pojęcia, że wcielają się w największego wroga III Rzeszy („Stawka”
znana jest tylko mieszkańcom byłego NRD).
- wykazałem się również pewną dozą ignorancji: "poznaj Stefana,
autora QMEG-a.", fajnie, "a co to jest QMEG, czy to ma coś
wspólnego z MPEG-iem?" Wtedy nie miałem jeszcze pojęcia, że zarażę
się od nich chorobą o ładnej nazwie RETRO COMPUTING.
Do SIO2BT wróciłem na wiosnę 2014 roku. Moja praca polegała na
początku głównie na zbieraniu informacji. Wiedziałem już, że chcę
zmodyfikować Atari OS. Na
forum AtariAge Kr0tki zamieścił kody źródłowe i środowisko
pozwalające na kompilację dowolnej wersji systemu operacyjnego przy
użyciu CC65. Krótka konsultacja ze Stefanem i spatchowany plik
OS-ROM był gotowy. Właśnie wtedy doceniłem Ultimate1MB, dzięki
któremu testowanie i używanie SIO2BT okazało się proste i wygodne.
Za pomocą programu uFlash autorstwa flashjazzcat można bowiem z
poziomu Atari wgrać dowolny OS-ROM do pamięci flash
rozszerzenia.
Następnym krokiem było dostosowanie AspeQt do komunikacji przez
Bluetooth. Gdy i to się udało, zaczęły się intensywne testy.
Pozytywne wyniki i namowy kolegów skłoniły mnie do prób z
Android-em. Było to dla mnie kolejne wyzwanie. Znałem wprawdzie
język Java, ale jeszcze nigdy nie zaprogramowałem żadnej aplikacji
na Android-a. Krok po kroku, wykorzystując załączony do ADT
(Android Development Toolkit) przykładowy kod projektu „Bluetooth
Chat” zacząłem programowanie.
Tutaj mała ciekawostka. Wszystkie nowe projekty tworzone za pomocą
ADT, które mają działać na starszych modelach telefonów, dostają od
ADT w prezencie bibliotekę kompatybilności, dzięki której nawet na
starszych wersjach Androida aplikacje mogą korzystać z nowych
elementów GUI.
Cena tego „prezentu” to spory rozmiar gołej aplikacji (która
jeszcze nic nie robi) - ponad 2MB. Mając na uwadze ograniczone
zasoby starszych telefonów, nie potrafię zrozumieć tej polityki
inaczej, niż zmuszanie ludzi do kupowania coraz to nowszych modeli.
Na szczęście udało mi się tak skonfigurować projekt, że pakiet
instalacyjny ma jedynie 66kB, a aplikacja na telefonie zajmuje
poniżej 200kB. Przy czym SIO2BT można uruchomić na smartfonach z
Android-em od wersji 2.1 (kolega znalazł gdzieś w szufladzie Sony
Ericsson Xperia E15i). Testowałem ją też na Nexus-ie 5 z Android-em
5. Okazało się, że Java, Bluetooth i smartfony dają radę :)
Główna zaleta korzystania ze smartfona to dostęp do internetu i
możliwość ściągania najnowszych produkcji. To uświadomiło mi, że
bez obsługi plików dyskowych xex, exe, com (przeważających w
internecie) SIO2BT niewiele daje. Postanowiłem więc dodać (oprócz
obsługi plików atr) również loader do plików xex. Żeby nie
wynajdywać koła od nowa przyjrzałem się loaderom z projektów
SDRIVE, SIO2SD i AspeQt. Wypróbowałem wszystkie trzy, ale do
ostatecznej wersji SIO2BT zdecydowałem się na (moim zdaniem
najlepszy) loader z projektu SDRIVE. Ma on bowiem dodatkową zaletę,
że pozwala na emulację dyskietek DOS-owych: wybrany w SIO2BT plik
*.xex jest widoczny z poziomu DOS-a i może zostać skopiowany na
twardy dysk.
Z takim działającym już SIO2BT pojawiłem się w tym roku na party w
Głuchołazach. Od samego początku było dla mnie jasne, że nie
dogodzę wszystkim użytkownikom i wiele decyzji podjętych w czasie
realizacji projektu to kompromisy. Ucieszyłem się, że SIO2BT
wzbudziło spore zainteresowanie i z zaciekawieniem wysłuchałem
wszystkich uwag. Na przykład Lotharek spojrzał na ekran smartfona w
czasie ładowania gry i spytał, dlaczego nic się na nim nie dzieje.
Miał absolutną rację. Nawet stacja dyskietek ma diodę, która zapala
się w czasie pracy. Dołożyłem więc do aplikacji prostą animację
diody, dzięki czemu widać teraz, czy coś się ładuje (nawet gdy
ogłosy SIO są wyciszone).
Inna ważna sprawa, to niechęć użytkowników do modyfikacji OS-a.
Pomimo, że wiele osób posiada Ultimate 1MB, lub jakikolwiek inny
OS-Switch, to dla purystów ingerencja we wnętrzności Atari jest
nieakceptowalna. Idąc tym tropem, wpadłem na pomysł napisania
krótkiego loader-a, którego celem jest skopiowanie OS-a do RAM-u i
modyfikacja parametrów komunikacyjnych SIO „w locie”. Oczywiście
taki loader trzeba jakoś załadować, ale praktyka pokazała, że
oryginalny OS radzi sobie bez większych problemów z załadowaniem
kilku sektorów przez Bluetooth.
Z pomocą Bernda, Stefana i kodów źródłowych Atari OS, udało mi się
utworzyć takie ATR-y (128 bajtów danych + 16 bajtów nagłówka) dla
systemów operacyjnych serii XL/XE. Niestety kompatybilność tego
rozwiązania daje sporo do życzenia. Nie da się w ten sposób
załadować gier, które przełączają banki pamięci w czasie ładowania,
itp. Z ciekawości przetestowałem pierwszych 60 gier z kolekcji
Homesoft. Z ATR-ów
wypakowałem najpierw za pomocą Total Commander-a wraz
pluginem ATR
autorstwa Pajero, wszystkie pliki XEX. Z orginalnym OS-em i z
loader-em udało mi się załadować 70% gier. Ze zmodyfikownym OS-em –
wszystkie.
Kolejna ważna uwaga dotyczyła legalności rozprowadzania
zmodyfikowanych wersji Atari OS. Podobno kod OS-a w dalszym ciągu
chroniony jest prawami autorskimi. Żeby uniknąć problemów prawnych,
napisałem niewielki program (na PC-ta), który pozwala
użytkownikowi, posiadającemu plik ROM, jego modyfikację dla SIO2BT
(pliki te są dostępne w internecie i dokumentacja SIO2BT zawiera do
nich linki). Przy okazji - dzięki pomocy Stefana – można dopasować
nim również QMEG-a w wersji 4.04 do komunikacji przez
Bluetooth.
Były też pytania o iPhone-a. Pomijam podwojenie kosztów projektu
(konieczność zakupu iPhona, zapłacenia za licencję SDK), a także
dodatkowy czas na naukę systemu iOS i na portowanie aplikacji.
Apple celowo nie pozwala aplikacjom na korzystanie z „Serial Port
Profile” do komunikacji przez Bluetooth. Kiedyś dziwiłem się, że
mini konsola do gier iCADE udaje klawiaturę Bluetooth. Po
odwiedzeniu
strony
Apple wszystko stało się jasne...
Jak co roku, pod koniec października odbyło się coroczne zebranie
klubu ABBUC. Na zebraniu członkowie klubu oddali głosy na prace
zgłoszone do konkursów w kategorii hardware i software. W tym roku
zgłoszono aż 7 prac w kategorii hardware. Tym bardziej cieszy mnie
uznanie, jakie otrzymał mój projekt zdobywając 1-sze miejsce. To
było ładnych kilka miesięcy pracy, która sprawiła mi jednak sporo
satysfakcji.
Poniżej moje małe i subiektywne podsumowanie wad i zalet
SIO2BT.
Wady:
- transmisja danych maksymalnie z prędkością 19200
bodów,
- konieczność modyfikacji Atari OS (lub używania specjalnego
loader-a, co wiąże się jednak z ograniczeniami),
- ograniczona możliwość równoczesnego używania z innymi
urządzeniami SIO (z braku informacji o stanie Command Line, SIO2BT
analizuje dane przesyłane przez Atari w celu rozpoznawania ramek
Command Frame, a taka sekwencja bajtów może się znaleźć
przypadkowo, na przykład w sektorze wysyłanym przez Atari do stacji
dyskietek). Jeśli inne urządzenie SIO jest używane tylko do
odczytu, to nie ma kolizji z SIO2BT.
Zalety:
- brak kabli (moduł Bluetooth można zamontować na stałe w Atari
lub też we wtyku SIO,
- dostęp do najnowszych produkcji na Atari bez konieczności
używania PC-ta,
- możliwość ładowania gier/dem w formacie xex i kopiowania ich z
poziomu DOS-a,
- możliwość tworzenia pustych dyskietek, dowolnego ich
formatowania i zapisywania na nich danych, (na przykład programów w
BASIC-u).
- kompatybilność z DOS 2, DOS 2.5, MyDOS (również obsługa bloków
PERCOM) i SpartaDOS, jak również z XBIOS-em (wymagana modyfikacja
OS),
- pokazowa współpraca aktualnych technologii z techniką sprzed 30
lat (może nie jest to żadna zaleta, ale lubię tak myśleć o
projekcie SIO2BT).
Dokumentacja
do projektu ma 28 stron, jest w języku angielskim i zawiera
wiele szczegółowych informacji i zdjęć.
W planach jest także obsługa nowego urządzenia 'N', pozwalającego
na komunikację Atari (jako klienta TCP/IP) z internetem. Udało mi
się namówić do współpracy xxl-a i mam nadzieję, że wspólnie uda nam
się to zrealizować. Być może w najbliższym czasie pojawi się też
ciekawy wideoblog stRing-a opowiadający o projekcie SIO2BT
(widziałem pierwszą wersję i trzymam kciuki, żeby się udało).
Więcej informacji na forum.