Mastodon

Cicho, bo się nie wgra! – Problem Atari 8-bit z kasetami

Atari? Nie trzeba być cicho, bo się nie wgra…. bo i tak się nie wgra! A ja w końcu się dowiedziałem dlaczego!

Jako, że żyjemy w czasach memów, to pewnie wielu z Was widziało taki – “cicho bo się nie wgra”. Pochodzący z zamierzchłych czasów wgrywania gier z kaset magnetofonowych. Ku mojemu zdziwieniu często obok napisu pojawia się zdjęcie magnetofonu Commodre, który jak wiadomo nigdy z wgrywaniem problemów nie miał, a jeśli miał, to nie trzeba było być cicho, tylko ustawić sobie głowicę.

Ja sam pamiętam, że problem ten dotyczył głównie komputerów Atari. To oczywiste, że błędy zdarzały się zawsze i na każdym sprzęcie, ale na Atari jakby częściej.

W innym filmie i artykule, w którym wyjaśniłem dokładnie jak działa zapis i odczyt na kasetach magnetofonowych stwierdziłem, że powodem gorszego odbioru komputera Atari jest po prostu dłuższy czas wgrywania na nim gier w stosunku do Commodore z Turbo

Także błędy jeśli nawet występowały równie często, to w przypadku C64 traciło się 5 minut, na ponowne wgranie gry, a na Atari 20-scia – co było boleśniej odczuwalne przez nas – nie mogących się doczekać swojej ulubionej gry szkrabów.

Prawda okazuje się być inna i dość przerażająca! Znaczy ciekawa..

Nakierowali mnie na nią fajni Atari – otóż całkiem niedawno odkryto błąd w oprogramowaniu komputera, który powoduje błędne wczytywanie się poprawnie zapisanych programów z kasety.

Wyjaśnienie całego problemu opisał na forum atari.area Krótki (który był tak miły i przez znajomych wyjaśnił jeszcze dokładniej, na czym on polega), a sprzętowo sprawdził go jeszcze FUJI, również udzielający się w tym temacie..

Tak jak opowiadałem w poprzednim filmie Atari zapisuje dane na kasecie w postaci bloków zawierających do 128 bajtów danych. Przed każdym takim blokiem znajdują się dwa rozbiegowe bajty o wartości dziesiętnej 85 czyli bitowo 01010101, dodatkowo każdy bajt w Atari rozpoczyna dodatkowe 0, a kończy dodatkowa 1. Na początku bloku mamy więc 20 zer i jedynek występujących na zmianę:

00101010110010101011

Chwila coś tu jest nie tak! Jak na zmianę, jak to przecież nie jest na zmianę!

Na początku mamy dwa zera, a później jeszcze dwie jedynki, itd… Tylko, że właśnie doczytałem, że dane na kasecie zapisywane są jakby w negatywie: 1 to 0, 0 to 1, dzieje się tak w bajcie, ale nie w znacznikach jego końca i początku.

Także na kasecie mamy realnie następujący sygnał:
01010101010101010101

Dwadzieścia naprzemiennych zer i jedynek.

Te rozbiegowe bajty wykorzystywane są do wyznaczenia realnej prędkości taśmy, czyli częstotliwości z jaką Atari ma odbierać dane.

Przy okazji poprawię mały błąd, jaki zrobiłem ostatnio – zmienna prędkość taśmy nie wynika z tego, że jest ona nawijana na rolki kasety, gdyż konstrukcja magnetofonu i dodatkowa rolka prowadząca taśmę powoduje, że taśma powinna mieć zawsze stałą prędkość przesuwania się przed głowicą.

Prędkość jednak należy wyznaczać, bo różne magnetofony mogą mieć po prostu ją troszkę inną – zależną po prostu od konkretnego egzemplarza.

Prędkość przesuwu mierzona jest w następujący sposób:

Atari zapisuje sobie znacznik czasu, w którym pojawiło się pierwsze zero w bajtach wprowadzających, potem czeka na 10 zmian i zapisuje znacznik czas ostatniej z nich. Kolejne 10 zmian jest ignorowanych.

Teraz wystarczy odjąć te czasy od siebie i już mamy czas odczytu 10 bitów.

Na tej podstawie trzeba ustawić częstotliwość jednego z układów Atari – a dokładnie układu POKEY – który sprzętowo dba o odczyt, zamianę danych szeregowo płynących z magnetofonu na bajty i wykrywanie błędów.

Cały problem leży w momencie i sposobie wyznaczania znacznika czasu.

Atari ustala go na podstawie dwóch wartości.

Pierwsza wartość to zawartość rejestru sprzętowego VCOUNT, który zawiera numer linii obrazu, która jest właśnie generowane na ekranie. Tak właściwie jest to jej numer podzielony przez dwa.

Odrysowanie wszystkich linii w PALu dla Atari trwa 1/50 sekundy. W tym czasie przez licznik VCOUNT przewijają się liczby od 0 do 155.

Druga to wartość rejestru programowego RTCLOK+2 – tam znajduje się aktualna wartość zegara czasu rzeczywistego. Każdy jego tyk to 1/50 sekundy (dla Atari działającego w systemie PAL).

Cała generacja znacznika czasu działa to w ten sposób, że odrysowanie się wszystkich linii na ekranie wyliczanych w rejestrze VCOUNT wywołuje procedurę która zwiększa RTCLOK+2 o jeden. Tak dzieje się co 1/50 sekundy.

Dzięki temu możemy wyznaczyć czas dodając ilość tyknięć co 1/50 sekundy zapisanych w RTCLOK+2 i tyknięć 1/156 * 1/50 sekundy VCLOCK. Wychodzi całkiem dokładnie dokładnie, bo czas możemy zmierzyć co do 0.128 ms.

Tak się akurat składa, że zmiana wartości zegara czasu rzeczywistego dokonuje się w momencie wyświetlania nie ostatniej, a 248 linii obrazu, czyli dla wartości VCLOCK wynoszącej 124.

Cały problem polega na tym, że nie dokonuje się to od razu. Zanim w RTCLOK+2 pojawi się nowa wartość Atari musi zająć się jeszcze kilkoma innymi sprawami.

Także od czasu wywołania potrzeby zwiększenia wartości zegara czasu rzeczywistego do jego realnego zwiększenia się mija 13 cykli – kroków procesora. Odpowiada to opóźnieniu rzędu 0.0073 ms.

Przez ten krótki okres dane o czasie są zapisane źle.

Można sobie to wyobrazić tak:

Gdyby w realnym mechanicznym zegarze ze wskazówkami – wskazówka odliczająca minuty przeskoczyła by z 59 na 00, a wskazówka licząca godziny nie przesunęła się z nią od razu na kolejną godzinę, ale zrobiła to po kilku sekundach – każdy kto by spojrzał w tym momencie na zegar, myślałby że jest godzina wcześniej.

Dokładnie tak samo jest w Atari.

Jeśli pierwsza lub ostatnia zmiana 10 bitów będzia miała miejsce w momencie przeskoku, całe obliczenia czasu będą błędne, więc układ odczytujący dane będzie pracował ze złą częstotliwością, więc będzie mógł zwrócić błąd odczytu nawet jeśli dane na kasecie są zapisane poprawne.

Realna szansa na takie zdarzenie podczas odczytywania bloku danych z kasety Atari została doświadczalnie wyznaczona na około 1/2000.

Należy jednak pamiętać, że standardowo blok danych ma 128 bajtów, a sama gra jako całość składa się raczej z setek takowych bloków. Stąd dla całego odczytu prawdopodobieństwo błędu może być znacznie większe, np 12% dla 32 KB danych.

Tak moi drodzy – nawet w idealnych warunkach gra na Atari nie wgrywała się około 1 na 10 razy, a nawet częściej.

Dla użytkowników tego komputera było to jednak zdarzenie występujące z raczej magicznych przyczyn. Nic dziwnego, że zaczęto je powiązywać np. z akurat startującym agregatem w lodówce, trzaśnięciem drzwiami, czy krzyczącym obok rodzeństwem, albo tupiącym sąsiadem z góry.

Przyjęło się więc, że magnetofon atari wymaga ciszy, spokoju i idealnych warunków, bo nawet kichnięcie może spowodować błędy odczytu.

Nikt nikt nie pomyślał, że błąd może leżeć w samym oprogramowaniu, wszyscy byli więc cicho, bo się nie wgra.

Odwiedź nasze Muzeum - zobacz sprzęty z filmu na żywo!

Obejrzy inne filmy, jakie przygotowaliśmy dla Ciebie na naszym kanela YT!