Co drzemie w zagadkowym kodzie wyświetlanym w filmie Terminator?

Fani każdej marki mają takie historie, które gloryfikują osoby czy przedmioty ich zachwytu. Kiedyś opowiem o moim rozczarowaniu związanym ze Stevem Wozniakiem, ale dzisiaj będzie o tajemniczym kodzie wyświetlanym w trakcie filmu Terminator na HUDzie T-800 – a nie będę ukrywał, że lubię Apple II, dorastałem na Atari 800XL a Terminator to też moje dorastanie.

Sam film trafił do kin jesienią 1984 roku, przełom października i listopada. Jest to o tyle ciekawe, że w kilku scenach pojawia się ten kultowy kod, przypisywany przez fanów Atari do ich komputerów.

Jedno jest pewne, kod pochodzi z procesora MOS 6502/65C02*, o czym świadczą charakterystyczne mnemoniki kodu.

Kod kompilowany pod adres $4000 – nic szczególnego. Mamy za to trzy wskaźniki:

AUXMOVE pod adresem $C311 oraz trzy zmienne na stronie zerowej A1, A2, A4 ($3C, $3E, $42). VTOC – sama nazwa niezbyt szczególna – Volume Table of Contents funkcjonuje chyba w każdym systemie dyskowym jako określenie sposobu zapamiętywania lokalizacji plików na dysku dzielonym na sektory/ścieżki. Po polsku – chyba katalog główny plus tablica alokacji zbiorów/plików.

Zacznijmy od pierwszego wskaźnika. $C311 – w Atari nie rezyduje konkretnie pod tym adresem żadna procedura ROM – konkretnie bajt niżej pod $c310 trafiamy w środek procedury ROM z odwołaniami do DOSVEC, ale wywołanie $c311 w przypadku Atari nie ma kompletnie sensu. Natomiast w Apple II z kartą 80kolumnową (czyli de facto kartą pamięci RAM) jest to właśnie obszar systemowy zawierający procedurę. Co bardziej dociekliwych odeślę do dobrego źródła:

You use the AUXMOVE routine to move data blocks between main and auxiliary memory, but the task still remains of setting up the routine so that it knows which data to write, and where to write it. To use this routine, some byte pairs in the zero page must be setup with the data block addresses, and the carry bit must be fixed to indicate the direction of the move.

Czyli kod ten może być uruchomiony na Apple II z kartą 80 kolumnową (64k), w praktyce najprawdopodobniej komputer Apple IIe albo nowszy, zawierający 128k pamięci RAM, ale niestety nie Atari. W pułapkę wpadło wiele osób włącznie z nieistniejącym już portalem The Dutch Atari Portal.

Co robi powyższy kod? To program umieszczający RAMdysk w pamięci rozszerzonej Apple IIe (już w latach 80tych było możliwe korzystanie z pamięci 1MB oczywiście bankowanej, bo MOS6502 nie pozwala adresować na raz więcej niż 64k).

Key Perfect był programem do generowania sum kontrolnych listingów publikowanych w magazynie. Po prawej stronie screenu widzimy wygenerowaną tabelkę sum kontrolnych pliku OVLY.OBJ, 16bitowy kod kontrolny do każdym 0x50 bajtów właśnie z tego programu. Po lewej zaś widać listing przeznaczony do wbudowanego w Apple II monitora – który pozwala wprowadzać bezpośrednio do pamięci kody w postaci hexadecymalnej.

Co zawiera ten kod? Jest to fragment programu wyświetlającego… slideshow w trybie Double-Hi-Res (czyli 560 x 192px monochromatycznie albo 280x192px w 16tu kolorach, które efektywnie ze względu na generowane artefakty powstające z mieszania kolorów dawały 140 x 192px) obrazów bitmapowych z dyskietki.

Skąd pochodzą te mnemoniki i gdzie można znaleźć opublikowane kody źródłowe programów? To jest dopiero ciekawa sprawa, bo wychodzi na to, że dodawano je do filmu w ostatniej chwili – pochodzą one bowiem z sierpniowego i wrześniowego (!) numeru Nibble poświęconego… Apple II. Czyli de facto robiono to w ostatniej chwili przed wejściem filmu do kin. Co ciekawe sumy kontrolne pochodzą nie z oryginalnej publikacji wraz z listingiem, ale z wydrukowanej miesiąc później korekty… bowiem przy oryginalnej publikacji wkradł się błąd 🙂

Nibble był jednym z najbardziej znaczących magazynów wydawanych w latach 80tych i poświęconych Apple II. Niestety od roku dostęp do jego archiwów stał się bardzo problematyczny z racji niekontynuowania obecności online jego wydawcy.

Terminator to bez wątpienia kultowy film lat 80tych. Dla mnie kultowy podwójnie – nieoficjalnie oparty na motywie z opowiadania Harlana Ellisona “I have no Mouth and I must scream”.


*MOS a nie jak napisałem początkowo Motorola – to taka freudowska pomyłka – miałem na myśli Motorolę 6800, na której “oparł” MOS 6502, a niektórzy nawet mówią, że ukradł, skopiował, ale przede wszystkim wykastrował 6502 o jeden rejestr danych i jeden rejestr indeksowy… Historię chyba znacie? Zespół ludzi, który pracował nad Motorolą 6800 odszedł w 1974 do firmy MOS (będącej za chwilę własnością Commodore, a którą Commodore kupiło decyzją Jack’a Tramiela – tego samego, który odkupi od Warner Bros upadające Atari). Czyli kolejna historia z branży IT o zabieraniu zespołów projektowych z jednej firmy do drugiej. Tak zadzieje się też z Commodore i Atari – Jack Tramiel zabierze z sobą ekipę pracującą nad 16bitowym komputerem pod szyldem Commodore, który “dokończy” bardzo szybko już pod szyldem Atari.