Fani każdej marki mają historie, które gloryfikują to, czym są zafascynowani. O moim rozczarowaniu Steve'em Wozniakiem opowiem innym razem — dziś o tajemniczym kodzie widocznym na HUD-zie T-800 w Terminatorze. Nie ukrywam: lubię Apple II, wychowałem się na Atari 800XL, a Terminator jest częścią tego samego dzieciństwa.

Film wszedł na ekrany jesienią 1984, dokładnie na granicy października i listopada. Ciekawe jest to, że ten charakterystyczny kod pojawia się w kilku scenach — a fani od dawna przypisują go komputerom Atari.

Jedno jest pewne: kod pochodzi z procesora MOS 6502/65C02*, co widać po charakterystycznych mnemonikach.
Kod kompiluje się pod adres $4000 — nic specjalnego. Mamy za to trzy wskaźniki warte bliższego przyjrzenia się.
AUXMOVE i zmienne na stronie zerowej
Mamy AUXMOVE pod adresem $C311, plus trzy zmienne na stronie zerowej — A1, A2, A4 ($3C, $3E, $42). Jest też VTOC — Volume Table of Contents, nazwa, która w mniej więcej każdym systemie dyskowym oznacza sposób śledzenia położenia plików na sektorach i ścieżkach. Po polsku to z grubsza "katalog główny plus tablica alokacji plików".
Zacznijmy od pierwszego wskaźnika. $C311 — na Atari pod tym adresem nie ma żadnej procedury ROM. Bajt niżej, pod $C310, trafiamy w środek procedury ROM odwołującej się do DOSVEC, ale wywołanie $C311 nie ma na Atari żadnego sensu. Na Apple II z kartą 80-kolumnową (w praktyce kartą dodatkowej pamięci RAM) to jednak dokładnie ten obszar systemowy, w którym znajduje się ta procedura. Dla ciekawych, gotowych kopać głębiej, dobre źródło:

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.
Ten kod może więc działać na Apple II z kartą 80-kolumnową (64K), najpewniej na Apple IIe lub nowszym, z 128K RAM-u — ale zdecydowanie nie na Atari. Wielu dało się na to złapać, w tym już nieistniejący holenderski Atari Portal.

Co ten kod właściwie robi
Co robi ten kod? To program, który tworzy dysk RAM w rozszerzonej pamięci Apple IIe — już w latach 80. można było wykorzystać do 1MB RAM-u, oczywiście bankowanego, bo MOS 6502 nie zaadresuje naraz więcej niż 64K.


Key Perfect to program służący do generowania sum kontrolnych dla listingów publikowanych w magazynie. Po prawej stronie ekranu widać wygenerowaną tabelę sum kontrolnych dla pliku OVLY.OBJ — 16-bitową sumę kontrolną dla każdych 0x50 bajtów, wyprodukowaną przez ten sam program. Po lewej listing przeznaczony dla wbudowanego monitora Apple II, który pozwala wpisywać kody szesnastkowe bezpośrednio do pamięci.


Co konkretnie robi ten fragment kodu? To wycinek programu wyświetlającego pokaz slajdów w trybie Double-Hi-Res — 560×192px w monochromie albo 280×192px w 16 kolorach, co dzięki artefaktom mieszania kolorów, jakie ten tryb produkuje, dawało efektywnie 140×192px — ładując obrazy bitmapowe z dyskietki.

Skąd właściwie wzięły się te mnemoniki
Skąd więc te mnemoniki i gdzie znaleźć publikowany kod źródłowy? Tu robi się naprawdę ciekawie: wygląda na to, że kod dodano do filmu w ostatniej chwili, bo pochodzi z sierpniowego i — uwaga — wrześniowego wydania działu Apple II magazynu Nibble. Innymi słowy, zrobiono to tuż przed premierą filmu w kinach. Co więcej, sumy kontrolne nie pochodzą nawet z oryginalnego listingu — pochodzą z korekty wydrukowanej miesiąc później, bo w oryginalnej publikacji był błąd.
Nibble był jednym z najważniejszych magazynów wydawanych w latach 80. poświęconych Apple II. Niestety jego archiwa stały się bardzo trudno dostępne, odkąd wydawca przestał utrzymywać obecność w sieci.

Terminator to bez wątpienia ikoniczny film lat 80. Dla mnie podwójnie ikoniczny — nieoficjalnie zainspirowany opowiadaniem Harlana Ellisona "Nie mam ust, a muszę krzyczeć".

* MOS, nie Motorola, jak pierwotnie napisałem — lapsus. Miałem na myśli Motorolę 6800, na której MOS 6502 był "oparty" — niektórzy mówią wręcz o kradzieży, kopiowaniu, ale przede wszystkim o okrojeniu o jeden rejestr danych i jeden rejestr indeksowy względem 6800. Pewnie znacie tę historię: zespół pracujący nad Motorolą 6800 odszedł w 1974 do MOS Technology, która wkrótce stała się własnością Commodore, gdy Jack Tramiel zdecydował się ją kupić — ten sam Jack Tramiel, który później kupił podupadające Atari od Warner Bros. Kolejna historia z branży o zespołach inżynierskich przechodzących z firmy do firmy. To samo powtórzyło się między Commodore a Atari: Tramiel zabrał ze sobą zespół pracujący nad 16-bitowym komputerem pod szyldem Commodore i dokończył go — bardzo szybko — już pod szyldem Atari.