Dzień Dobry!
Dziś będzie taki dość nietypowy wpis, trochę ględzenia i opis metodyki mojego działania przy analizie zawartości kasety którą udostępnił Grzegorz_29_ we wcześniejszym poście. Grzegorz był ciekawy czy da się coś więcej z tej kasety odzyskać poza dwoma programami które dało się z tej kasety odczytać w dość łatwy sposób.
Pierwszy rzut oka wskazywał że szanse są niewielkie, ponieważ kaseta wyglądała na nagrana parę razy, a nowe nagrania kasowały wcześniej nagraną zawartość, kaseta (a dokładniej strona A) zawierała jakieś fragmenty poprzednich nagrań, jednak trudno było z tego wyłuskać sensowną całość, bo żadne z wielu nagrań nie zachowało się w całości.
Powstało jednak pytanie czy może uda się dowiedzieć co jednak było tam nagrane wcześniej? Pomyślałem sobie że być może analizując fragmenty nagrań uda się chociaż zorientować jakie programy były tam wcześniej nagrane, ten post ma na celu opisanie moje próby i podjęte eksperymenty przeprowadzone w celu określenia co też mogło się znajdować na owej kasecie, a właściwie to tylko stronie A tej kasety, ponieważ nie zdążyłem zająć się jeszcze stroną B.
Zatem zacznijmy tę nieco przydługą i zapewne dla większości z was mało fascynującą opowieść, niemniej jednak ciekawość nie pozwalała mi "przejść obojętnie" obok takiej kasety :) tak, tak... wiem jestem "porąbany" :D
Na początku kasety znajdował się pierwszy plik który dość łatwo było przetworzyć na postać cas/hex/raw, a był to:
Dziwić może jedynie fakt że ktoś nagrał na kasetę inicjalizer przeznaczony dla stacji dysków, ale cóż, może to był jakiś eksperyment naukowy NASA! :D
Patrząc na zrzut kasety który przygotował Grzegorz, można zaobserwować że tuż za pierwszym nagraniem znajduje się nadpisane drugie nagranie, zapewne zapisane na innym magnetofonie z innym "skosem głowicy", gdyż jego poziom jest dość niski w porównaniu z pierwszym nagraniem na kasecie:
Ale od czego mamy programy do obróbki i przetwarzania dźwięku, taki słaby sygnał można "wzmocnić cyfrowo" i próbować przetworzyć te wzmocnione rekordy danych za pomocą a8cas-util lub a8cas-convert do postaci hex/cas/raw. Tak też uczyniłem i otrzymałem 285 rekordów danych, co prawda nie wszystkie były poprawnie zdekodowane, ale to nie miało większego znaczenia, postanowiłem tak przetworzone dane obejrzeć w formie "graficznej". Oczywiście z pomocą przyszedł stary dobry Turbo Basic XL i prosty program odczytujący przetworzony wcześniej plik wprost do "pamięci ekranu" po otwarciu trybu graficznego GRAPHICS 8. Na szczęście przy korzystaniu z emulatora można posługiwać się wirtualnym dyskiem twardym, więc wszystkie operacje są po prostu łatwiejsze i szybsze:
10 GRAPHICS 24:TRAP 99
15 OPEN #1,4,0,"H2:GRG2.RAW"
20 S=DPEEK(88):L=$1800
25 BGET #1,$0600,32
30 TRAP 50
40 BGET #1,S,L:GET K:GOTO 40
50 POKE 712,2
99 GOTO 99
Długo na efekty pracy programu nie trzeba było czekać po paru "ekranach danych", oczom moim się ukazało:
No i już wiadomo jaki program został "nadpisany" przez nagranie na początku kasety "game loadera", jak widać okazało się że była to gra "The Last V8", dla porządku jeszcze tylko przejrzałem ten plik w formie kodów Internal:
... i jak widać odnalazły się tym pliku również napisy występujące w grze.
Sprawę nagrania nr 2 można zatem uznać za rozwiązaną bo jest to po prostu gra "The Last V8" szeroko dostępna wszędzie w sieci :) Na szczęście żaden "biały kruk" nie został zniszczony przez nadpisanie go czymś innym. Można zatem było się zająć następnym nagraniem na stronie A kasety.
Następne nagranie prezentuje się dość dziwnie:
tzn. na początku nagrania jest o dziwo nagrany loader plików binarnych, tzw. "wykrzyknik", a potem następują kolejne bloki danych, z tym że wykrzyknik jest nagrany z niskim poziomem, jakby to była jakaś pozostałość, a następne bloki danych są nagrane już z nieco większym wysterowaniem. Do tego wychodzi na to że owe siedem bloków danych które występuje po wykrzykniku nie są wcale plikami binarnymi w formacie Atari DOS.
Co można było w tej sytuacji zrobić? Najpierw przyjrzałem się tym plikom za pomocą HEX-edytora, to pozwoliło zobaczyć że każdy z plików składa się 128 bajtowego nagłówka, który zawiera się powtarzający się bajt będący zapewne identyfikatorem pliku (plik nr 1 miał pierwsze 128 bajtów równe 1, plik nr 2 miał pierwsze 128 bajtów równe 2, etc.). Co pozwalało się domyślić iż pierwszy rekord danych każdego służył jako identyfikator tegoż pliku. Potem w każdym z plików występowało trochę kodu 6502, a potem następowała seria danych które wyglądały na grafikę, jednak nie do końca łatwo identyfikowalną:
Z układu pikseli w grafice widać było że to nie jest Hi-Res, więc spróbowałem trybu kolorowego (Graphics 15), ale też nie dawało to rezultatów pozwalających na identyfikację programu, więc pomyślałem sobie że może grafika jest przechowywana w nieco innym formacie (np. są do dane reprezentujące bloki 4x8 pixeli, czyli coś jak zestaw znaków z którego konstruuje się dany poziom/planszę), przerobiłem nieco kod w TBXL tak aby inaczej rysował dane z pliku i rysował je jako zestaw czcionek:
10 GRAPHICS 31:S=DPEEK(88)
11 POKE $02C4,$32:POKE $02C5,$74:POKE $02C6,$0E
20 OPEN #1,4,0,"H2:GRG4A.RAW"
21 TRAP 99
30 FOR Y=0 TO 23
31 FOR X=0 TO 39
32 FOR J=0 TO 7
33 GET #1,B
34 POKE S+X+Y*320+J*40,B
35 NEXT J
36 NEXT X
37 NEXT Y
99 GOTO 99
Zaczęło sie pojawiać coś więcej:
... ale i tak było ciężko się domyślić co widzę, jednak po przejrzeniu wszystkich 7 plików zacząłem się domyślać co właściwie widzę. Nie chciało mi się analizować kodu i szukać procedur rysujących plansze z widocznych danych, więc poszedłem na łatwiznę, tzn. ściągnąłem z AtariOnline archiwum gier, po czym w jednym z plików znalazłem sobie jakąś sekwencję kodu 6502 reprezentowaną przez ciąg liczb:
$AD $2F $11 $D0 $05 $A9 $00 $8D
Przeszukałem całe archiwum gier z AOL w poszukiwaniu owej sekwencji danych, po czym ujrzałem:
po czym moje kroki powędrowały od razu w stronę pliku: "Goonies, The (1985)(U.S. Gold)(GB).cas"
I to był przysłowiowy strzał w dziesiątkę. Okazało się że to co znajdowało się na kasecie (owe 7 plików) to właśnie pozostałość kasetowej gry The Goonies", piszę pozostałość, bo na taśmie zostały tylko dane poszczególnych poziomów z grą (oznaczone identyfikatorami 1-7) ... wcześniejszych danych, tzn. loadera, głównej części kodu gry, etc. brakowało (zostały nadpisane).
Kolejna zagadka rozwiązana, pozostało więc zabrać się za kolejny plik, a właściwie to co z niego zostało, a zostało niewiele po 22 rekordy w tym jeden obcięty (nadpisany), oczywiście kolejne nagranie było zapisane również z innym poziomem zapisu, (nieco większym niż wcześniejsze "The Goonies", jednak tym razem odzyskane rekordy nie wskazywały w żaden sposób z jaką pozostałością tym razem mamy do czynienia. Korzystając jednak z wcześniejszego sposobu, poszukiwania wybranej sekwencji bajtów w archiwum AOL udało się ustalić że owe pozostałe na taśmie 22 rekordy są częścią gry...
^^^ można założyć niemal ze 100% pewnością że na kasecie była kiedyś nagrana w tym miejscu gra Zorro.
Następne nagranie na kasecie było zapisane w formacie Blizzard turbo... to akurat poznałem "na ucho", dzięki doświadczeniu ze zgrywaniem kaset w różnych formatach turbo, użyłem więc a8cas-util od FUJI-ego do konwersji tego nagrania na format strawny dla emulatora, używając obrazu carta "Phoenix by Hurek" mogłem dokonać próby wczytania tak zdekodowanego pliku, użyłem "universal file loader", ponieważ plik nie wyglądał na binarny plik DOS-u, a raczej jak blik typu BOOT, chwilę po odpaleniu loadera moim oczom ukazał się bardzo intrygujący tytuł:
cóż pozostało mi robić? z pewną obawą wcisnąłem klawisz "Y", poczekałem chwilę a moim oczom ukazała się gra:
Ja rozumiem że gra jest trudna, ale żeby aż tak jej nienawidzić aby nadać jej tak "zaszczytny" tytuł? :D
Następnym plikiem nagranym na taśmę był wspominany wcześniej "Rythmizer @AT1", który to bez problemu wczytuje się czy też poddaje się konwersji. Plik na taśmie zapisano w formacie BOOT (zapewne w takiej postaci program był oublikowany):
Rythmizer był przed ostatnim programem nagranym na stronie A, za nim znajdował się dłuuugi plik zawierający aż 285 rekordów i tutaj miałem pewną "zagwozdkę", ponieważ to co zostało nagrane na taśmę wyglądało dość dziwnie, tzn. rekordy miały nie po 132 bajty (wliczając wszystkie informacje dodatkowe, tzn. sekwencję kalibracyjna, typ rekordu, etc). a po 133 bajty.. tzn. zamiast standardowego początku określającego rekord typu:
zarówno a8cas-util jak i a8cas-convert to nagranie interpretował jako zawierające o jeden bajt więcej przed właściwym rekordem:
Prawdę mówiąc nie zastanawiałem się dlaczego tak właśnie jest i czy to efekt błędnego nagrania, czy też ktoś nagrał jakąś wersję zabezpieczeniami, poszedłem na totalną łatwiznę i skorzystałem w wyszukiwania w sekwencji bajtów w archiwum gier z AOL, co bardzo szybko pokazało mi że tym razem nagrany plik to gra:
ufff... przebrnąłem :) Ze 3 dni się zbierałem aby napisać ten post, a to za gorąco, a to mi się nie chce, a to tamto, a to to... zawsze coś... w końcu jednak mi się udało pokonać moje lenistwo i opisać cały przebieg akcji "analiza". Resztę pewnie zanudziłem, ale liczę na to że te informacje przydadzą się chociaż samemu Grzegorzowi :)
Oczywiście jak znajdę chwilę wolnego czasu przyjrzę się również stronie B owej kasety, ale wszystko w swoim czasie, tymczasem muszę się przełączyć na nieco inne zadania.