Dzięki uprzejmości kolegi robecc, który dokonał "zrzutu" pamięci EPROM zawartej w cartridge ze swojej kolekcji, mogliśmy się cieszyć z kolejnego ocalonego z przeszłości produktu jakim był cartridge nazwany "Universal Turbo". Jak się okazało po szybkiej analizie było to połączenie software dla systemu Blizzard oraz dodatkowo zestaw oprogramowania dla czechosłowackich systemów Turbo 2000, Turbo UNI*, Turbo ZXL 3.1.
robecc zgłaszał że nie udaje mu się uruchomić poprawnie całości carta pod emulatorem, więc postanowiłem dokonać analizy powstałego problemu. wstępne wyniki pokazały że ten cart ma swój odmienny sposób przełączania banków, po szybkim sprawdzeniu zawartości udostępnionego pliku i upewnieniu się że wszystko z nim jest OK, postanowiłem zająć się tym dokładniej w wolnej chwili, zaczęło się spokojnie, ale im bardziej wnikałem w kod tym ciekawiej się robiło... koniec końców spędziłem nad tym trochę czasu i postanowiłem się podzielić tym co z tego wyszło, zacznijmy zatem tą nieco przydługa opowieść... ;-)
Cartridge po włączeniu, startuje w trybie Blizzard:
Czyli wygląda to jak standardowy cartridge dla systemu Blizzard, w którym dostępny jest:
Turbo K.O.S.
Microloader 3.2
Blizzard Copy
Z oprogramowania dla Blizzard usunięto jednak wszystkie informacje o firmie KNS która widnieje w innych oficjalnych wersjach cartridge dla Blizzarda. Wszędzie gdzie znajdowały się informacje o autorstwie KNS widnieją tylko puste miejsca/spacje.
Dodatkową opcją widniejącą w menu głównym dla Blizzard-a jest możliwość przejścia do "CS Turbo System" przy pomocy klawisza ESC. Zapewne litery "CS" oznaczają "Czechoslovak" , ale o tym później, po wciśnięciu ESC uruchamia się niejako drugie oprogramowanie "zaszyte" w pamięci cartridge:
.
Jak już pisałem robecc wspominał że nie udaje mu się w pełni uruchomić obrazu cartridge pod emulatorem, a ponieważ mi też się to nie udało, postanowiłem spróbować narysować schemat na podstawie zdjęć które udostępnił kolega robecc. Zdjęcia musiałem trochę przekształcić/wyprostować abym mógł złożyć warstwy, aby nie musieć tyle zgadywać i zmniejszyć prawdopodobieństwo popełnienia kardynalnych błędów. Co prawda nie widziałem układu ścieżek pod układami scalonymi, ale ekstrapolując nieco i zaglądając w kod umieszczony w cartridge udało się odtworzyć układ połączeń, zatem:
Schemat: wektor (PDF), raster color (PNG), raster grayscale (PNG).
Wartości elementów R,C mogą być niepoprawne, ponieważ nie widać napisów na nich, ale założyłem na podstawie poprzednich cartów, że wartość kondensatora na linii ~CCTL to pewnie ~560pF. Widoczne na zdjęciu rezystory nie mają pasków, a napisy świadczące o ich wartości są niewidoczne. Założyłem więc bezpieczną wartość ~10kOhm, zapewne jednak może to być coś w zakresie 2.2-4.7kOhm zapewne. Jeżeli robecc zechce to zweryfikować to poprawię oznaczenia na schemacie. Robecc dokonał weryfikacji wartości elementów, narysował także poprawny schemat, ponieważ popełniłem błędy przerysowując swoją wersję ze zdjęć.
Po narysowaniu schematu można było już "zobaczyć" zasadę bankowania carta i sposobu sterowania jego bebechami, wtedy też stało się jasne że żaden znany mi emulator nie wspiera takiego typu carta. Szanowny kolega Krótki, obecny na tym forum już kiedyś dopisał emulację cartridge AST-MULTI Cartridge,do Atari800, więc licząc że może znajdzie kiedyś czas na dopisanie emulacji kolejnego carta, postanowiłem że opiszę tutaj sposób działania tegoż egzemplarza, tak więc:
Cart ma na pokładzie 16kB pamięć EPROM, pamięć zajmuje obszar $A000-$BFFF i jest podzielona na dwa banki po 8KB. Cartridge można wyłączyć i włączyć programowo, również programowo można dokonać wyboru banku (1 z 2) widocznego w przestrzeni adresowej $A000-$BFFF.
Pominę w opisie już uwagi dotyczące, dość frywolnego podejścia konstruktora tego carta, przez co ma on "niepewną", a tak właściwie to przez duży łut szczecią działającą elektronikę (chociażby przez brak poprawnego układu resetującego przerzutniki). Okazało się że nie było to "frywolne podejście konstruktora" a jedynie błędy które popełniłem "odzyskując" schemat ze zdjęć, no cóż... na przyszłość pozostaje mi zachowanie większej uwagi, mniej nadinterpretacji i bardziej ostrożna ekstrapolacja z brakujących danych :D
Koniec końców ma to działać mniej więcej tak:
Zaraz po włączeniu zasilania przerzutniku ustawiane są tak że na wyjściu ~Q przerzutnika U3B pojawia się "1" logiczna, a więc linia A13 dla EPROM zostaje ustawiona na "1". W przestrzeni adresowej $A000-$BFFF pojawia się zatem obszar $2000-$3FFF z pamięci EPROM. Równolegle na wyjściu Q przerzutnika U3A ustawiane jest "0" logiczne, które potem zostaje zanegowane przez inwerter stworzony z bramki U2B, co w efekcie daje "1" na jej wyjściu które to ustala stan linii RD5 na owe "1", które to powoduje że cartridge zostaje włączony przez MMU i pojawia się w przestrzeni adresowej $A000-$BFFF.
Oba przerzutniki są taktowane w ten sposób iż zapamiętują stan linii adresowych (odpowiednio A6 i A7) w momencie jakiegokolwiek dostępu (odczyt lub zapis) w obszarze $D500-$D5FF. Jakie to niesie za sobą konsekwencje?
Dostęp do dowolnej komórki z przedziału $D580-$D5FF spowoduje wyłączenie cartridge (gdy A7=1, wyjście Q przerzutnika U3A = 1, po inwersji bramką U2B stan RD5 = 0.
Dostęp do dowolnej komórki z przedziału $D540-$D57F, spowoduje włączenie banku 0 w cartridge (gdy A6=1, wyjście ~Q przerzutnika U3B = 0, więc linia A13 pamięci EPROM=0, co za tym idzie w przestrzeni $A000-$BFFF Atari widać obszar $0000-$1FFF pamięci EPROM).
Dostęp do dowolnej komórki z przedziału $D500-$D53F, spowoduje włączenie banku 1 w cartridge (gdy A6=0, wyjście ~Q przerzutnika U3B = 1, więc linia A13 pamięci EPROM=1, co za tym idzie w przestrzeni $A000-$BFFF Atari widać obszar $2000-$3FFF pamięci EPROM).
Jak już wspominałem ten mechanizm "bankowania" cartridge na chwilę obecną, według mojej obecnej wiedzy nie jest wspierany przez żaden z emulatorów. Zaczęło mnie nurtować, czy nie dało by się zrobić wersji .XEX ładowanej bezpośrednio do pamięci komputera, jednak w tym wypadku nie było to tak trywialne, jak w przypadku większości cartridge. O ile część obsługująca "Blizzard" jest prostym 8kB cartridge i korzysta jedynie z możliwości wyłączenia się z poziomu własnego kodu, to "CS Turbo" dokonuje wielokrotnego włączenia i wyłączenia samego siebie... a to w celu kopiowania danych w różne obszary, w tym w obszar pamięci znajdujący się "pod" obszarem cartridge, a to w celu "pozbierania" się po reset, a to w celu relokacji loadera w inny obszar pamięci. Zacząłem więc przeglądanie tego kodu, aby zastanowić się czy da się to jakoś ogarnąć i zrealizować wersję .XEX ... trochę to trwało, ale okazało się że jest pewna szansa... a piszę o tym wszystkim tylko dlatego że podczas analizy kodu części "CS Turbo" ze zdziwieniem stwierdziłem, że w menu startowym było początkowo więcej pozycji niż obecnie widoczne na ekranie 6!
W oryginalnym carcie było tych pozycji 8. Zmiana wykonana przez "zblizardownie" carta polegała na okrojeniu "CS Turbo" do 8KB, a autor tej modyfikacji wywalił z menu pozycję 7-8, które jak mu się wydawało zajmowały drugie 8KB pamięci EPROM, usunął zatem z menu pozycje 7-8, ale zrobił to "po najmniejszej linii oporu", tzn. skasował tekst jedynie tekst z menu, trochę zmodyfikował Display List (usunął 1 linię). Nie mienił natomiast sprawdzania zakresu wybieranych klawiszy, przez co klawisze 7-8 pozostały aktywne, i teraz robi się naprawdę ciekawie ... bo np. wciśnięcie klawisza "8" w menu powoduje co prawda przepisanie bzdur do pamięci i przysłowiowy skok w maliny (końcowym efektem jest zawieszenie się komputera), ale wciśnięcie klawisza 7 w menu "CS Turbo" powoduje że ukazuje się:
... okazuje się że pozycja nr. 7 z menu umiejscowiona jest pod koniec 8KB obszaru okupowanego przez CS Turbo, wygląda na to że jest cała. Nie wiem zatem czemu autor tego carta postanowił ją wymazać z menu (być może chodziło o to że widać autora Turbo TOS-a?). Tak czy inaczej, pozycja nr 7 inaczej jest obecna w EPROM i postanowiłem, ze robiąc wersję XEX dodam nieco poprawek i modyfikacji, łącznie z przywróceniem tej pozycji w menu. A wygląda to po poprawkach tak:
Pozostało mi nieco opisać poszczególne pozycje dostępne w menu:
1,2) Turbo 2000 / Turbo 2000N:
Jest to niewielki i kompaktowy loader lokujący się w obszarze $05BA-$06FF, lub $B5BA-$B6FF w przypadku wersji "N".
3,4) Universal TURBO* / ZXL 3.1:
To dwa kolejne loadery, nieco dłuższe i prawdopodobnie obsługują inny format zapisu danych. Loader Uni* lokuje się pamięci w obszarze $458-$6FF, natomiast ZXL 3.1 w obszarze $400-$6FF. Ponieważ nie analizowałem kodu tych loaderów nie wiem jaki format danych obsługują. Nie spotkałem równie nigdy wcześniej żadnych programów zapisanych w tym systemie/formacie.
5) Turbo Copy:
Zapewne program kopiujący programy w standardzie Turbo 2000, okupuje przestrzeń adresową $0458-$0A64
6) Turbo DOS P:
Handler Turbo dla BASIC-a, instalujący urządzenie "T:", ma również swoje mini-menu dostępne po wydaniu polecenie DOS z poziomu BASIC-a, ale najciekawsze jest to że zawiera w sobie również sterownik dla drukarki obecny jako urządzenie "P:", nie zgłębiałem kodu, ale wychodzi na to że próbuje komunikować się z drukarką używając portów joysticka jak interface komunikacyjnego. Analizę tego fragmentu kodu pozostawiam już zainteresowanym osobom. Obszar zajmowany przez tą pozycje to $0AF0-$1055.
7) Turbo2000 Operating System V4.1:
Wspominany już wcześniej "Turbo 2000 Operating System V4.1". Nieobecny w oryginalnym menu, a przywrócony po nierównej walce ;) Po uruchomieniu zajmuje on obszar $0B00-$1772, zgłaszając MEMLO na poziomie: $17D4.
Wcześniej wspominałem że "CS Turbo" może oznaczać "Czechoslovak Turbo", właśnie z powodu tej pozycji w menu... autorem Turbo 2000 OS jest Milan Riha, co sugeruje pochodzenie systemu właśnie z Czechosłowacji, również format danych Turbo2000 jest podobny co Czechosłowackich rozwiązań z tamtych czasów.
Ciekawe czy te czechosłowackie systemy miały jakikolwiek wpływ na nasze polskie konstrukcje typu KSO 2000 czy Turbo 2T06... już kiedyś snułem dywagacje na ten temat... i sądzę że systemy z Czechosłowacji były jakąś inspiracją dla polskich konstruktorów. A w niektórych przypadkach można nazwać niektóre konstrukcje i pomysły plagiatem.
I kończąc już, dla porządku (aby wszystko było już w jednym miejscu/poście:
8) Poprawiona wersja XEX do pobrania tutaj: Universal Turbo Cartrige - patched
9) Oryginalny dump pamięci EPROM wykonany i udostępniony przez robecc: Universal Turbo EPROM
universal_turbo.bin:
MD5 : d9b152a5829b09ead1f75cbf8bd81eac
SHA256: 0f3150194aaf13985f75791d781a65d1dcf8a28c75d3b58ab67a1fa73b3d4bab
10) Poprawiony dump pamięci EPROM (poprawione menu, i pomniejsze poprawki w kodzie): Universal Turbo EPROM (patched)
universal_turbo_patched.bin
MD5 : cd62fd3f6b88de8788ef738eef838377
SHA256:f726e5af44458116830d3bbbbb082747832f7163d912da63d13ebd299365e613
zdjęcia wykonane przez robecc, tutaj trochę przetworzone i wyrównane:
PCB góra:
PCB dól:
sam cartridge: