The Klątwa Tape - Part III: Klątwa w nowym formacie
Nowy format, nowy loader, ta sama klątwa
W poprzednich częściach opisałem, co udało się znaleźć na oryginalnej kasecie, z czym był problem i dlaczego część programów okazała się bardziej podstępna, niż początkowo zakładałem. Tym razem pora na praktyczne domknięcie tematu: wszystkie odzyskane pozycje przygotowałem ponownie w formacie Turbo 2000F+ NEW FORMAT, z nowym loaderem, który nie powinien już zależeć od konkretnej wersji systemu Turbo 2000F.
Innymi słowy: to nadal ta sama "Klątwa Tape", ale przepisana do postaci, którą łatwiej uruchomić, zachować, nagrać ponownie i wykorzystać jako punkt wyjścia do własnych eksperymentów.
Pliki do pobrania
Poniżej znajdują się pliki przygotowane w nowej wersji. Zawartość odpowiada temu, co udało się odzyskać z oryginalnej kasety, ale została skonwertowana do formatu Turbo 2000F+ NEW FORMAT i opatrzona nowym, poprawionym loaderem: The UnCursed Tape
W archiwum znajdują się trzy katalogi: cas/, hex/ oraz xex/.
Katalogi cas/ i hex/ zawierają obrazy plików, które można wczytać za pomocą emulatora albo skonwertować do postaci WAV, np. za pomocą TURGEN, a następnie nagrać na taśmę i wczytać na prawdziwym sprzęcie.
Katalog xex/ zawiera pliki XEX odtworzone z oryginalnych nagrań, nieco uporządkowane, wygładzone i naprawione tam, gdzie było to konieczne.
Skąd się wzięły te pliki?
Część 2.5 była jeszcze "dopiskiem śledczym" - wyjaśnieniem, dlaczego niektóre programy z dołączonym loaderem "LoMemLdr" zachowywały się inaczej, niż się spodziewałem. Część III jest już bardziej użytkowa: zawiera gotowe pliki oraz wskazówki, jak samodzielnie produkować podobne zestawy.
Żeby nie robić tego ręcznie za każdym razem i nie powtarzać tej samej gimnastyki przy kolejnych zestawach, uzupełniłem moje stare repozytorium T2K_TOOLS z narzędziami do obsługi formatu Turbo 2000 o dodatkowe narzędzie: t2k_new_format.py. Do kompletu dodałem poprawiony loader dla tego formatu. Repozytorium można znaleźć tutaj: T2K Tools
Opisy, czyli pliki README.md, są w języku polskim. Wydaje mi się, że są na tyle szczegółowe, że każdy zainteresowany będzie mógł samodzielnie przygotować własne zestawy kaset w formacie NEW FORMAT.
Być może Baktra, jeżeli będzie miał chęci, czas i możliwości, doda obsługę formatu NEW FORMAT do TURGEN-a. Źródła loadera są udostępnione w repozytorium, więc można z nich korzystać do woli. Wtedy będzie jeszcze łatwiej. Na razie, aby skorzystać z narzędzia, potrzebny jest Python 3 oraz umiejętność korzystania z wiersza poleceń - pod Linuksem albo Windowsem, wedle preferencji.
Jeżeli coś w dokumentacji byłoby niejasne lub niezrozumiałe, dawajcie znać. Spędziłem już nad tym tyle czasu, że nie bardzo widzę ewentualne wady, bo wszystko wydaje mi się oczywiste, ale wcale nie musi być równie oczywiste dla innych.
Kilka słów o loaderze
Osobnym elementem tej układanki był loader do formatu Turbo 2000F+ NEW FORMAT. Zamiast traktować go jak czarną skrzynkę, przeanalizowałem go przy użyciu DIS6502, po czym opisałem i uporządkowałem jego działanie. Chodziło głównie o zrozumienie, w jaki sposób loader odnajduje kolejne bloki, jak przekazuje sterowanie do wczytanego programu i dlaczego jego oryginalna wersja była tak mocno związana z konkretnym środowiskiem systemu Turbo.
Najwięcej pracy zajęło nie samo przepisanie kodu, lecz dojście do tego, co autor pierwotnego loadera miał na myśli, oraz opisanie tego w taki sposób, aby po kilku miesiącach dało się do tych źródeł wrócić bez ponownego rozwiązywania tej samej zagadki. Udało się także zoptymalizować loader i dodać obsługę innych interfejsów turbo. Wyrzuciłem również zbędne oraz błędne fragmenty kodu.
Efektem końcowym jest wersja loadera, której użyłem przy przygotowaniu "The UnCursed Turbo 2000F Tape". Nie jest to nowy system Turbo ani próba napisania wszystkiego od zera, tylko uporządkowana i lekko poprawiona wersja istniejącego rozwiązania, przygotowana tak, aby zachowała zgodność z większością poprawnych plików XEX oraz większością wersji oprogramowania systemowego dla Turbo 2000F/2001/KSO.
Zamknięcie sagi
Tym wpisem zamykam sagę "Klątwa Tape". Przynajmniej mam taką nadzieję ;-)
Jak zwykle w takich przypadkach, mocno niedoszacowałem czasu potrzebnego na doprowadzenie tematu do końca. Na początku wyglądało to jak prosta historia: jest jedna stara kaseta, trzeba ją zgrać, sprawdzić, co na niej siedzi, i ewentualnie uratować to, co jeszcze da się uratować.
W praktyce wyszedł z tego mały projekt badawczo-archeologiczny: odzysk nagrań, analiza formatu, poprawki uszkodzonych plików, deasemblacja loadera, pisanie i porządkowanie jego źródeł, przygotowanie konwertera, generowanie nowych plików, tworzenie repozytorium, dokumentacji oraz finalnej, "odklętej" wersji kasety.
Nie piszę tego, żeby narzekać, lecz raczej jako uczciwy opis skali zjawiska. W świecie retro bardzo często okazuje się, że "tylko jedna kaseta" albo "tylko jeden mały loader" potrafią rozrosnąć się do kilku tygodni pracy z przerwami: śledztwa, kodowania, testów, dokumentowania i ciągłego sprawdzania, czy przypadkiem pod spodem nie kryje się jeszcze jedna warstwa problemu. Taki już urok grzebania w rzeczach sprzed kilku dekad.
Najważniejsze jednak, że tym razem historia kończy się dobrze: zawartość kasety została odzyskana, uporządkowana, opisana i przygotowana w formie, z której można dalej korzystać. Klątwa została, mam nadzieję, skutecznie "odklęta", a zawartość nagrana na nowym nośniku, tak aby stara kaseta pozostała nienaruszona, w takim stanie, w jakim ją zastałem.

