Atari? Nie trzeba być cicho, bo się nie wgra…. bo i tak się nie wgra! A ja w końcu się dowiedziałem dlaczego! I nie! Nie ma to nic wspólnego z włączaniem się pralki, czy tupaniem sąsiada z góry!
Subskrybuj naszego chata na FB: https://m.me/RetroGralnia?ref=w1629323
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 poprzednim filmie, 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..
Link do tematu na forum atari.area:
http://www.atari.org.pl/forum/viewtopic.php?id=9188
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.
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 lini 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.
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. Jeśli pierwsza lub ostatnia zmiana 10 bitów będzie 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.
Muzyka:
Matthew Huffaker, TEKNOAXE, CC 4.0
FACEBOOK:
http://www.FB.com/RetroGralnia