Dziś będzie o tym jak pewna przypadkowa kaseta zmieniła moje postrzeganie pochodzenia systemów turbo...
Zaczęło się bardzo niewinnie, od jednej z kaset która trafiła do mnie wraz z kolekcją magnetofonów uicr0Bee... ale to co potem się działo samego mnie wprawiło w osłupienie. Nie bardzo chciało mi się wierzyć w to co następowało gdy przekopywałem odmęty internetu aby się upewnić czy nie wyciągam zbyt pochopnych wniosków, ale im dłużej grzebałem tym głębsza robiła się ta "królicza nora" :D
Kaseta w pudełku nie prezentowała się jakoś specjalnie wyjątkowo:
^^^ na początku miałem wątpliwości w jakim systemie jest nagrana kaseta, bo zmyliły mnie literki "M" i "K" przy każdej pozycji, jednak przy RUN"T2 już wiedziałem o co chodzi... wychodziło na to że pliki zapisane w standardzie "Blizzard", a literki "M" i "K" oznaczają jakiego loadera należy użyć aby wczytać dany program:
W owych domysłach pomogła wcześniejsza zabawa z różnymi cartridge-ami dla systemu Blizzard, np. cart Hurka Phoenix, wyglądał po uruchomieniu tak:
W carcie od Hurka zamiast K.O.S. był autorski TOS, natomiast w cartach od Atares, której to jest przypisywane stworzenie systemu "Blizzard", można było spotkać zarówno Mikroloader jak i KOS:
sama kaseta nie wyróżniała się w jakiś specjalny sposób, ot niby zwykłe SONY EF60:
Uznałem zatem że sprawa jest jasna i oczywista i kaseta powędrowała do pudełka "do zgrania", a ja zająłem się innymi rzeczami. Po pewnym czasie zabrałem się za zgrywanie kaset i wkładając ową kasetę do decka i słuchając tego co się tam znalazło zorientowałem się że na pewno nie jest to Blizzard.
Słuchając zapisu na taśmie (tym razem w słuchawkach, aby nie straszyć domowników i okolicznych zwierząt ;P) nie potrafiłem zorientować się cóż to za dziwny format zapisu danych obecny jest na taśmie. W pierwszym nagranym pliku nie potrafiłem nawet wyróżnić bloku zawierającego nazwę. Można było co prawda wyróżnić dwa powtarzające się fragmenty o bliźniaczym brzmieniu, ale żadnej przerwy pomiędzy tym fragmentem a dalszą częścią nagrania nie było... wydawało mi się że po prostu brakuje początku nagrania.
Zignorowałem więc pierwsze nagranie na kasecie i przysłuchałem się drugiemu z nich... wyraźnie można było wyróżnić ton pilotujący blok nazwy, ponownie ton pilotujący i następnie blok danych, co mniej więcej brzmiało tak: Track #2 - pilot tone + name segment + pilot tone + data (forma OGG).
A to co słychać na powyższym fragmencie brzmiało już dla mnie znajomo! Ja już gdzieś to słyszałem, chwila zabawy w edytorze audio aby zobaczyć jak wygląda ton pilotujący i zobaczyłem coś takiego:
^^^ gdy tylko zobaczyłem ten przebieg w którym doskonale widać kolne bajty tworzące sygnał pilota (1 dłuższy impuls oraz 7 krótszych to 8 bitów, które tworzą jeden bajt danych), byłem już na 100% pewien, że nie dość że to słyszałem to dodatkowo na pewno to już widziałem... tylko gdzie to było... długo myśleć nie musiałem, bo brzmienie i wygląda jest mocno nietypowe, tzn. wyróżnia się mocno spośród wszystkich innych systemów Turbo dla Atari 8-bit, które miałem okazję słyszeć i widzieć.
Nie tak dawno opisywałem w tym wątku system Turbo Star (plus), trochę wcześniej cartridge do tego systemu, a jeszcze wcześniej, na początku tego wątku w pierwszym poście podałem link do kaset które udało się zgrać. Kasety były w kiepskim stanie dlatego zgrałem je tak szybko jak tylko dostałem je w swoje ręce i patrząc na datę tego pierwszego posta doznałem lekkiego szoku ... 2014.07.20 ... no to dałem czadu ... tyle czasu już minęło?!? Wierzyć się nie chce... co prawda życie trochę mnie potargało w międzyczasie, ale i tak jestem mocno zszokowany O_o, ale kiedy? jak? kiedy to minęło? może jednak wpadłem w pętlę czasu! ;-)
... wróćmy jednak do głównego wątku... no więc Turbo Star (plus) przecież zgrywałem taśmy które miał uicr0Bee nagrane w tym systemie, leżą tutaj: Turbo Star Tapes. Jako że kasety były w dość kiepskim stanie to i nagrania są miernej jakości... no ale coś da się z nich odczytać, można natomiast porównać brzmienie :) Chociażby słuchając tej taśmy: Turbo Star Plus - zestaw programów (format FLAC).
Ucieszyłem się niezmiernie że sprawa jest wyjaśniona i w pudełku po prostu jest kaseta z programami dla Turbo Star Plus, lub też Turbo 6000, ponieważ Turbo Star (plus) to klon niemieckiego Turbo 6000, o którym więcej napisano na AtariWiki V3: Atari Datasette XC12 Turbo 6000 Baud Interface.
Aby przyspieszyć swoje działania, postanowiłem użyć po prostu emulatora Altirra, który to ma wsparcie dla obsługi systemów turbo, szybko się okazało że emulacja turbo używającego linii PROCEED, po prostu w Altirra nie działa poprawnie. Postanowiłem zatem skorzystać z pracy FUJI-ego i użyć emulatora Atari800 do którego FUJI dodał poprawki umożliwiające poprawną emulację systemów Turbo: Modified atari800 emulator.
Pod emulatorem uruchomiłem sobie cart od Turbo Star Plus na którym znajdował się loader, który po uruchomieniu prezentował się tak jak na zrzutach ekranu poniżej i przy próbie załadowania pliku zgranego z kasety pokazał coś takiego:
loader zatrzymał się po wyświetleniu nazwy i pokazał adres ładowania napotkanego programu... nazwa "spaprana" jakaś, chyba jakieś przekłamanie transmisji... ale adres jakiś dziwny... hehehe... zupełnie jak na C64! ależ dziwny przypadek... no ale co z tą nazwą? Prawdę mówiąc, to mi wygląda jak kod ATASCII pokazany jako kody ANTIC-a. Czyżby jakaś inna wersja systemu Turbo która kodowała nazwy nie w kodach ekranowych ale w kodach ATASCII?
Pomyślałem że zajrzę w kod loadera, w miejsce gdzie trzyma on odczytaną nazwę:
096C: 50 49 54 53 54 4F 50 20 20 20 20 20 20 20 20 20 PITSTOP
hahaha! a jednak dobrze mi się wydawało! Czyli mamy gierkę "PITSTOP", tylko jakoś nie pamiętam aby ona się ładowała tak nisko. Dziwne kodowanie, adres ładowania $801... dziwne dość to wszystko, nieprawdaż? Przecież ten loader tego nie załaduje, sam znajduje się dość nisko i adres ładowania tej gry pokrywa się adresami w której siedzi ten loader. Cholera, pewnie jakiś inny loader, albo inna wersja systemu potrzebna. Może w Turbo6000 było jednak trochę inaczej?
A może po prostu wczytać ten plik do jakiegoś programu kopiującego obsługującego Turbo6000? I podejrzeć co mamy właściwie w tym pliku, wystarczy parę bajtów aby wiedzieć o co chodzi:
0801: 0B 08 4F 04 9E 32 30 36 34 00 00 00 00 00 00 82
WHAT!?! Ci którzy przeczytali post o carcie SONIX, to zapewne zorientują się co tu widać...
Przecież do cholery jasnej to jest typowy nagłówek programu dla platformy C64. Widać wszystko co trzeba, tzn. adres następnej linii $80b, nr. linii ($44F/1103) potem token instrukcji SYS ($9E) oraz adres uruchomienia: 2064.
WTF?!?! Jakim cudem udało mi się softem z Atari wczytać kasetę na której jak widać nagrane są programy dla C64.... to jakiś okrutny żart!?! Albo jakiś niewiarygodny wręcz przypadek... zatem trzeba zobaczyć czy uda się wczytać jakieś inne programy z tej kasety, bo "PITSTOP" to akurat na Atari jest... byłbym pewny że to kaseta z softem dla C64 gdyby pojawił się jakiś tytuł gry której nie ma na Atari!
096C: 50 49 54 53 54 4F 50 20 49 49 20 20 20 20 20 20 PITSTOP II
aaarrrrghhhh!!! pfff! NEXT PLEASE! :D
096C: 44 45 56 49 41 4E 54 53 20 20 20 20 20 20 20 20 DEVIANTS
no dobra... to już jest jakiś trop, gra istnieje na platformę C64: DEVIANTS
^^^ powoli zacząłem się godzić z tym że to jest kaseta zapisana w jakimś systemie Turbo dla platformy C64, który jakimś "przypadkiem" jest w 100% zgodny z niemieckim Turbo 6000... zarówno na poziomie kodowania bitów na taśmie, jak i formatu i struktur danych. Zgodne są nawet bajty wskazujące adresy ładowania! Szok i niedowierzanie! :)
No ale jak zweryfikować poprawność moich przypuszczeń i być pewnym na 100% że to coś da się uruchomić na C64? No skoro na naszej platformie dysponujemy formatem .CAS to może i na platformie C64 jest również jakiś sposób na archiwizację taśm? Okazało się ze jest i że istnieje masa softu tworzącego pliki w formacie .TAP które przechowują dane w postaci liczb określających długość impulsów zapisanych na taśmie.
Tylko pojawił się jeden problem, narzędzie konwertujące pliki .WAV na .TAP nie patrzą zupełnie na strukturę danych, a robią jedynie "surową" konwersję, wynikiem której jest plik zawierający kolejne długości pulsów zdekodowane w/g widzimisię algorytmu zawartego w danym narzędziu. Sama konwersja na ten format nic nie da, bo jeszcze trzeba wiedzieć jaki system turbo załadować aby wczytać to nagranie utworzone w systemie a jakimś systemie Turbo.
Sytuacja wydawała się beznadziejna, ponieważ w przypadku C64 systemy turbo są jedynie "programowe", żadne modyfikacje magnetofonu dla C64 nie są wymagane, ponieważ pracuje on od razu na takiej zasadzie jak nasze systemu turbo, a niska domyślna prędkość transmisji (300 bodów) wynika po prostu z jakiegoś niesamowitego nieporozumienia, albo niechęci ludzi piszących C64 Kernal ROM ;) Jak więc do cholery znaleźć system którego szukam, jak dla platformy C64 istnieje ich niezliczona liczba... każdy kto chciał pisał własny... ich mnogość mnie dobiła i już się miałem poddać, ale wpadłem na pomysł że to musi być bardzo wczesny system turbo ... dlaczego? Bo daty widniejące w loaderach dla systemu Turbo 6000 to 1988 rok:
Zatem system turbo którego klonem musiało być Turbo 6000, musiał pochodzić w roku wcześniejszego niż 1988. To już nieco ułatwiało zadanie, tzn. nie wydawało się ono tak niewykonalne jak wcześniej sądziłem... zaczęło się grzebanie po internecie, czytanie o "komodorowskich" systemach turbo, przeglądane każdej notatki i kawałka kodu na który napotkałem w sieci, artki o archiwizacji taśm dla C64... na początku naiwnie sądziłem że to może jakiś system turbo zawarty w BlackBOX czy Action!Replay... ale niestety nie... pliki .TAP wygenerowane przez narządzie które sobie upatrzyłem czyli: C64 Tapedecode, co prawda wygenerowało mi pliki .tap bez problemu, ale używając emulatora VICE nie udawało mi się ich załadować mimo iż emulator podczas dołączania pliku TAP dekodował nazwę, więc musiał wiedzieć co to za format turbo!
Kolejne jakieś dziesiątki przejrzanych stron, normalnie zaczynało wyglądać na to że robię doktorat z systemów turbo dla Commodore64... prawdę mówiąc chyba "profilowanie przez google" mi pomogło, bo gdy tylko google się zorientował czego szukam, zaczął w końcu podrzucać sensowniejsze linki... i tak idąc po nitce do kłębka trafiłem na coś takiego:
C64 Turbo Tape
wszystko zaczęło pasować i układać się całość! Data powstania 1984! W dodatku to niemieckie rozwiązanie więc ta pozycja była idealnym kandydatem do bycia tym systemem turbo którego szukałem, zatem chwila prawdy:
Prawdę mówiąc gdy zobaczyłem "FOUND DEVIANTS" albo "FOUND PITSTOP", no to kopara mi totalnie opadła, nie do końca wierzyłem że udało się znaleźć ten właściwy system turbo. Jednak wyszło na to że to jednak ten :)
I tutaj zaczęła docierać do mnie taka trochę smutna prawda... Turbo 6000 okazało się klonem (i to jakim!?!) rozwiązania z platformy C64. Zacząłem grzebać w kodzie loadera, jednego i drugiego... procedury dekodowania strumienia danych oparte w przypadku platformy C64 na timerze układu CIA, natomiast w przypadku Atari na timerze układu POKEY. Podobieństwo procedury wczytującej bajt danych były tak uderzające że aż nie chciało mi się wierzyć jakiej jakości kalkę ktoś zastosował :)
Potem zdałem sobie sprawę że istnieje jeszcze jeden system dla platformy Atari który bazuje na tej samej zasadzie działania, tyle że nie wykorzystuje przerwań generowanych przez PIA jak przypadku Turbo6000, a jedynie timery układu POKEY, aby zorientować się czy impuls, który był transmitowany to "0" czy też "1"... tym systemem jest oczywiście Blizzard.
Czy autorzy Blizzarda bazowali na Turbo 6000 które to bazowało w 100% na C64 Turbo Tape? Tego nie mogę stwierdzić z całą pewnością, ponieważ zdarza się że ludzie wpadają na te same pomysły zupełnie niezależnie, ale przyznam że po tej przygodzie zmieniło się nieco moje postrzeganie wszystkich tych rozwiązań... do tej pory naiwnie sądziłem że jednak te wszystkie pomysły rodziły się jakoś niezależnie, ale wychodzi na to że wszystko ma jakiś jeden początek, z którego na drodze ewolucji i rozwoju powstają inne rozwiązania, oczywiście mniej lub bardziej bazujące na tym co powstało wcześniej.
Zastanawiało mnie jakie były początki powstania tego systemu turbo... grzebiąc pod odmętach internetu i googlując.... Mr.Google w końcu postanowił uraczyć mnie takim linkiem: "How TurboTape Works", a w artykule mamy bardzo fajny rysunek wyjaśniający jak jest dekodowany sygnał turbo za pomocą użycia timer-a, czy to będzie timer w CIA czy w POKEY, to już nie ma znaczenia, zasada działania jest taka sama :)
Czy na tej kasecie znajdują się gry zapisane za pomocą "Turbo Tape 64", czy też za pomocą innego programu z nim zgodnego, tego już chyba nie będę w stanie ustalić, przyznam że nawet już nie mam sił na dalsze poszukiwania. Dla dociekliwych wystawiam dump tej kasety, wykonany za pomocą techniki użytej i opisanej w poprzednich postach, tzn.
kanał L) sygnał zgrany z wyjścia kolektora Q6
kanał R) sygnał zgrany z wyjścia ogranicznika (8 pin LM324)
C64 Turbo Tape example cassette dump (format OGG, Q=10)
Przyznam że nie miałem siły dekodować i sprawdzać wszystkich plików z tej kasety, ale kaseta nie była w stanie idealnym, części gier na pewno się nie wczytuje, np. próba wczytania "Pitstop II", kończy się niepowodzeniem:
...a i jeszcze jedna uwaga, gdy używałem softu z pakietu C64TapeDecode, musiałem użyć parametru "-r" przy przetwarzaniu plików .WAV na .TAP (widać Datasette ma fazę odwróconą o 180° w stosunku do tego co zgrałem przy użyciu XC12):
sbn@debian:~/lab/c64tapedecode/src$ ./wav2tap -r c64_trk06.wav >trk06.tap
Być może jest tak że niepotrzebnie prowadziłem całe to dochodzenie, bo ktoś bardziej zaznajomimy z platformą C64 powiedziałby mi od razu co to za turbo i jakiego softu należy użyć aby wczytać programy z tej kasety, ale cóż... cała ta przygoda wiele mnie nauczyła :) Kto by pomyślał że trafi mi się kaseta przeznaczona dla C64 w dodatku bez żadnego opisu sugerującego jakiekolwiek jej pochodzenie czy też zawartość. Założyłem po prostu że to kaseta z programami dla Atari i z uporem maniaka dążyłem do odczytania tych danych na Atari... to wszystko miało swoje dalece idące konsekwencje jak widać, czysto historyczne ale jednak. Przyznaję że nie sądziłem że coś mnie będzie w stanie jeszcze jakoś specjalnie zaskoczyć, jednak ten przypadek należy do takich, który zapamiętam na bardzo, bardzo długo.
Ponieważ to ostatnia kaseta z pudełka, moje posty w tym wątku nie będą już tak częste. Zachęcam was do publikowania swoich odkryć i analiz, nie obawiajcie się dzielić swoją wiedzą i spostrzeżeniami... kto wie jak wiele jeszcze pozostało do odkrycia na starych kasetach, zapomnianych taśmach, cartridge-ach i innych nośnikach.
Ja na jakiś czas muszę przerwać tą działalność, ale zapewniam was że jeszcze do niej wrócę. Muszę ogarnąć trochę pozostałych spraw, bo przyznam że stworzenie tego co tutaj wam zaprezentowałem zajęło trochę czasu, o wiele więcej niż sądziłem, ale cieszę się że udało mi się dobrnąć końca tego etapu.
Co mogę powiedzieć na koniec tego wątku? No może starą jak świat prawdę ... Everything is a Remix! <--- polecam obejrzeć, a na zakończenie tak mi się przypomniało jeszcze:
https://www.youtube.com/watch?v=Ns8bG9AbfwM
ps1) zapewne zapomniałem napisać o setce rzeczy które miałem w głowie podczas walki z tą kasetą. W głowie miałem tyle myśli i pomysłów, tyle rzeczy do zaprezentowania, że sądziłem że tego wyjdzie 10 razy tyle ile napisałem, ale wszystko to jakoś uleciało z głowy podczas pisania, a mimo tego napisanie tego zajęło mi pół dnia (oczywiście z przerwami i czasem niezbędnym na przygotowanie tych wszystkich plików). Miałem wklejać fragmenty kodów źródłowych loaderów z C64 i Atari, aby pokazać wam jak podobne są procki odczytu w przypadku C64, Turbo6000 czy Blizzarda. Przyznam jednak szczerze, nie mam już dziś na to siły, nie chcę obiecywać czy do tego jeszcze wrócę, ale jak będę miał chęci, siły i czas to dokonam takiego porównania, chociażby w przypadku procedury odczytującej bajt ze strumienia danych.
ps2) jeżeli mi się coś przypomni, albo gdy odpocznę i przejrzę jeszcze raz ten mój post, zapewne będę coś poprawiał.
ps3) dzielcie się wiedzą, zasobami, archiwizujcie i udostępniajcie! Te wszystkie carty, taśmy i magnetofony już umierają. Niebawem nie będzie możliwe odzyskanie niczego z kaset, pamięci EPROM w cartach też już zbliżają się do końca życia, z dnia na dzień mogą przestać działać (ładunki zgromadzone w komórkach pamięci EPROM bezpowrotnie ulatują!). w tym wątku mieliście kilka przykładów że dosłownie "cudem" udało się odzyskać zawartość niektórych umierających już cartów.
ps4) WIELKIE PODZIĘKOWANIA dla uicr0Bee-iego za udostępnienie wszystkich tych materiałów (kaset, magnetofonów i cartów). Zajęcie się tym zajęło mi sporo czasu, życie przeszkadzało jak mogło, ale w końcu się udało.a
ps5) nie traktujcie mnie jako jakiejś wyroczni czy "właściciela" tego wątku, piszcie w nim bez obaw. Nie obawiajcie się mnie "prostować", jest spora szansa że moje przemyślenia czy dywagacje mogą być błędne. Mogło mi się źle coś wydawać, lub miałem zbyt małe doświadczenie w danym temacie aby móc poprawnie coś ocenić. Konstruktywna krytyka mile widziana. Nie wierzę że nie popełniłem błędów (czy to merytorycznych czy to logicznych) pisząc te wszystkie posty. Także jeżeli ktoś odkryje jakieś nieścisłości niech śmiało o tym pisze.
ps6) Link do skanu magazynu Compute! ze stycznia 1985, w którym to opublikowano kod "Turbo Tape" (do własnoręcznego wklepania!) dla komputerów C64 i VIC20: Compute! Magazine Issue 056
ps7) właśnie doczytałem że link na csdb.dk który podawałem wyżej, to "lame hack", oryginał ponoć to ten: Turbo Tape 64
i jeszcze doczytałem że kasety nagrywane w PL były często i gęsto zapisane w standardzie ABC-Turbo:
ABC Turbo V1.0 lub ABC Turbo V2.0
sprawdziłem, te turbo też wczytuje pliki z tej kasety bez problemu. Najlepsze jest to że: Turbo 250 a także V3 Turbo Tape, również bez problemu wczytują pliki .TAP wygenerowane z tej kasety.
^^^ wychodzi na to że "mnogość" systemów Turbo dla Commodore C64 to jakiś mit. Co bym nie kliknął z "cdsb.dk" to wychodzi na to że ładuje pliki w formacie TurboTape64. Czyli co? jeden oryginał a reszta to naśladowcy? ;)
ps8) Okazało się że Turbo wbudowane w Blackbox v3 też jest zgodne z TurboTape64: