PC #42, januar 1999.

Jedina* akciona igra za TI-59

Navikli smo da za neki računar budu napisane stotine akcionih igara, a može se zamisliti i računar za koji uopšte nisu pisane akcione igre. Broj jedan zvuči prilično neobično ali je, sticajem okolnosti, upravo tako ispalo. Tek pišući ovaj tekst saznao sam zašto...

Dejan Ristanović

Navikli smo da za neki računar budu napisane stotine akcionih igara, a može se zamisliti i računar za koji uopšte nisu pisane akcione igre. Broj jedan zvuči prilično neobično ali je, sticajem okolnosti, upravo tako ispalo. Tek pišući ovaj tekst saznao sam zašto...

TI-59 je predstavljao vrh razvoja koji je firma Texas Instruments započela još 1967. godine, osmislivši prvi džepni kalkulator na svetu. Već 1975. se pojavio SR-52, koji je omogućavao snimanje programa na magnetne kartice, da bi 1977. godine bio promovisan TI-59, sa (skoro) čitavim kilobajtom memorije i mogućnošću umetanja ROM modula sa programima dužine 5 KB. Programirao se na neobičnom simboličkom jeziku, koji je veoma efikasno koristio memoriju, pa su u kilobajt mogli da stanu prilično složeni programi. Mnogi od njih su bile igre: od mastermajnda i nima, preko pokera i "čoveče ne ljuti se" do, verovali ili ne, programa za šah. Dobro napisane igre primane su u oficijelnu biblioteku PPX (Professional Program Exchange) koju je vodio sam Texas Instruments, u nezavisnu biblioteku TI Software Exchange koju je u Belgiji vodio Thomas Coppens ili objavljivani u američkom časopisu TI PPC Notes, švedskom časopisu Programbiten, nemačkom časopisu Plewnia...

Igre su bile logičke, uz poneki pokušaj pisanja igara-avantura, čiju je karijeru ugrožavala činjenica da TI-59 na ekranu nije mogao da ispisuje slova. Akcionih igara nije bilo, i to iz opravdanih razloga: TI-59 u svakom trenutku može ili da izvršava program ili da čeka na korisnika - nema kombinacije ta dva. Ne postoji, dakle, ni najelementarnija forma multitaskinga: ako se program izvršava, na tastaturi možete da radite šta god hoćete ali program to neće konstatovati, osim u slučaju da pritisnete taster R/S (run/stop), koji surovo prekida izvršavanje. Ako se pak program ne izvršava, on ne može da meri brzinu vaše reakcije na nešto što se događa, a nedostatak časovnika koji bi bio dostupan programeru onemogućava uvođenje pojma vremena u igru. Sve u svemu, nema osnovnih uslova da se napiše igra koja zahteva brzo odlučivanje i delovanje, pa takve igre nije ni bilo...

Ideja da ne mora biti tako sinula mi je dok sam čitao tekst koji je novembra 1980. godine objavljen u časopisu TI PPC Notes (v5n7p11). Autor teksta, Martin Neef, izložio je neobično ponašanje pomenutog tastera R/S nakon što program korisnika pozove potprogram iz ROM-a. Recimo da se u programu nalazi sekvenca PGM 19 SBR 562, koje poziva 562. instrukcija potprogram broj 19 iz ROM-a i recimo da se tamo nalazi instrukcija RTN, koja odmah vraća kontrolu korisničkom programu. Ako se posle toga izvrši naoko besmislena sekvenca PGM 19 BST (BST je taster koji u programu nema funkciju, koristi se za listanje instrukcija u memoriji), kalkulator će zapasti u neobično stanje u kome pritisak na R/S neće prekinuti korisnički program, već započeti izvršavanje programa u ROM-u počev od sledeće (u datom primeru 563.) instrukcije.

Martin Neef je čitavu ovu analizu izložio pre svega kao neobično ponašanje kalkulatora, ali se pred mojim očima složila zgodna primena. Recimo da pronađem segment u ROM-u koji će počinjati naredbom RTN, iza koje će slediti niz instrukcija koje menjaju nešto što se kasnije može testirati i tek onda vraćaju kontrolu programu u RAM-u. Taj program bi mogao da se vrti u "beskonačnoj" petlji mereći vreme, s tim da iz petlje izađe čim korisnik pritisne R/S. Eto načina da program primi barem jedan bit informacija od korisnika, a da se izvršavanje samog programa ne prekine. To bi moralo da bude dovoljno za neku moćnu akcionu igru, zar ne?

Traženje pogodne sekvence u ROM-u predstavljalo je veoma ozbiljan posao. Martinovo PGM 19 SBR 562 nije bilo upotrebljivo, jer se između instrukcije RTN i sledećeg povratka u glavni program nalazilo svega nekoliko naredbi. Zato je bilo gotovo nemoguće pritisnuti R/S dovoljno dugo da to kalkulator primeti, a opet dovoljno kratko da ga ne primeti još jednom, po povratku u glavni program, što bi izazvalo prekid njegovog izvršavanja. Zato sam počeo da analiziram programe iz ROM-a redom, jedan za drugim. Tražio sam RTN instrukcije, gledao sekvence iza njih, procenjivao dužinu, vreme izvršavanja, mogućnost povratka u glavni program... Ovaj poslednji uslov bio je najsloženiji: programi iz ROM-a su vrlo retko pozivali potprograme iz RAM-a ili ostavljali neke "tragove" svog izvršavanja. Najzad, od dobrog potprograma se i ne očekuje da barata podacima ili flegovima koji su "vlasništvo" glavnog programa.

Potraga je potrajala preko tri meseca (kako bi bilo lepo opet imati vremena za istraživanja zanimljivosti!), ali me za sve to vreme nije ostavljala nada da ću naći pogodnu sekvencu i napisati prvu akcionu igru za TI-59. Kockice su se najzad složile u martu 1981, a šifra je glasila PGM 09 SBR 058. Program broj 9 je računao vrednost određenog integrala, s tim što je korisnik zadavao funkciju koja se integrali u vidu kratkog programa. Na lokaciji 058 nalazila se instrukcija RTN, iza koje je sledio poziv nekog internog potprograma i onda naredba PGM 00 A', koja poziva program A' u RAM-u. Lepota je bila u onom internom potprogramu: poziv potprograma, desetak instrukcija koje su ga sačinjavale i povratak iz njega trajali su više nego dovoljna dva sekunda, pa nije bilo opasnosti da se pritisnuti R/S detektuje dva puta. Eto kako je povremeno korisno što je računar spor.

Prosto ne verujući u svoju sreću, odmah sam počeo da pišem program koji sam nazvao 5/10 Start. Bila je u pitanju igra u kojoj karte (dobro, brojevi) doleću u grupama - treba ih brzo primati ili odbacivati, tako da se dostigne tražena suma. Igra je, barem za moje standarde, bila veoma teška - tražila je brze reakcije, još brže sabiranje i solidnu taktiku, tako da sam postizao sasvim skroman skor; uostalom, nisam se preterano ni trudio da vežbam. Na Klubu programera je primljena jako dobro, a neki maheri su postizali rezultate kojima sam se čudio, kao što se sada čudim kad neko otvori Minesweeper na Expert nivou za 90 sekundi (da nisam video svojim očima, ne bih poverovao). 5/10 Start je primljen u PPX i TI Soft biblioteke i čak je dobio nagradu za program meseca, a njegova pojednostavljena verzija je decembra 1981. objavljena u američkom časopisu TI PPC Notes (v6n9/10p31).

Uzalud sam se nadao da će se nakon ovog otkrića pojaviti čitav niz akcionih igara za TI-59: tekst i program nisu izazvali baš nikakav odjek među programerima, a PGM 09 SBR 058 trik je korišćen još samo u mom programu TI-59 Supertest, koji je procenjivao koliko "igrač" poznaje skrivene tajne svog računara (TI PPC Notes v7n9p8-11, septembar 1982). Nisam znao u čemu je problem: možda je moje objašnjenje bilo nejasno, ili tehnika nije delovala zanimljivo, ili je TI-59 već imao nepokolebljivu reputaciju "ozbiljnog" računara... tek, novih akcionih igara nije bilo.

Epilog Pripremajući ovaj tekst, uverio sam se da je "PGM 09 SBR 058 pronalasku" suđeno da bude ubistven po moje slobodno vreme. Posle skoro 20 godina, sećao sam se osnovne ideje, ali sam naravno zaboravio detalje. Ponovno čitanje teksta iz časopisa TI PPC Notes i pregled objavljenog programa samo su povećali zbrku: ni posle više sati analize, uz pozivanje svih sećanja o simboličkom jeziku TI-59 iz moje interne i eksterne memorije, nisam mogao da shvatim kako bi opisana sekvenca mogla da radi to što navodno radi. Čak sam po Internetu tražio ime Martin Neef, nadajući se da ću naći sagovornika koji će se sećati ove teme; Martina sam najzad pronašao, danas je profesor na Univerzitetu u Kelnu (www.uni-koeln.de), ali njegova sećanja nažalost nisu bila od velike pomoći.

Otkrovenje je nastupilo narednih dana pošto sam, osećajući se kao da izlazim iz vremeplova, sklopio i aktivirao stari TI-59. Baterije su, naravno, odavno "pokojne", ali sam se setio da se kalkulator može napajati i kroz štampač. Perfektno je funkcionisao, čak je i čitao magnetne kartice, ali se nije bilo lako setiti naredbe kojom se program iz ROM-a kopira u RAM (komanda je OP 09 - uh!). Posle toga sam za trenutak shvatio u čemu je stvar - urednik časopisa TI PPC Notes nije dobro razumeo tehniku, pa je u pratećem tekstu istakao pogrešnu sekvencu PGM 01 SBR 012, koja zaista postoji u programu, ali radi sasvim drugu stvar (briše niz sukcesivnih registara) - prava "čarobna" sekvenca u tekstu uopšte nije ni pomenuta, što nažalost nisam primetio sve do danas. Tako sam, 17 godina kasnije, saznao pravi razlog zbog koga je lista akcionih igara za TI-59 ostala na samo jednom slovu...

 

horizontal rule

 

Epilog posle epiloga Još 10 godina i jedan rat kasnije, u septembru 2009, saznao sam da je ipak postojala još jedna akciona igra za TI-59, koja koristi istu tehniku i, štaviše, poziva se na moj tekst u TI PPC Notes - Pierre Flener je analizirao moj program, našao pravu sekvencu i lepo je primenio. Radi se, koliko moj skromni francuski razume, o simulaciji vožnje u kojoj treba izbegavati prepreke/autobuse pritiscima tastera 1, 2 i 3. Moram jednom da probam. Tekst je objavljen jula 1983. u francuskom časopisu l'Ordinateur de poche, čija kompletna arhiva postoji ovde. A ja sam izdvojio opis igre i listing...