Džepno programiranje

"Svako vreme ima svoje igre i igračke - olovne vojnike, obruče, trotinete ili, o čuda, džepne računare". Ovako je počeo moj prvi tekst objavljen u "Galaksiji 105", januara 1981. godine. Iako se tekst bavio igrama na džepnim programabilnim kalkulatorima, ove naprave nipošto nisu bile igračke - bili su to zapravo prvi personalni računari do kojih je smrtan čovek ovde mogao da dođe!

Dejan Ristanović

1980. godine pojavili su Commodore VIC 20 i Apple III; industrija ličnih računara već je bila u "zaletu", spremajući se za promociju IBM PC-ja. Ali, mi smo bili daleko od toga: "pravi" personalni računari su bili nezamislivo skupi, uvoz je bio zabranjen a, što je možda i najgore, o njima se gotovo ništa nije znalo. Reč "računar" tada je bila sinonim za neku skalameriju koja u najboljem slučaju zauzima čitavu jednu sobu, na kojoj se vrte neke trake i koja "jede" bušene kartice. Takve "aždaje" živele su u velikim računskim centrima, o kojima su "nepovlašćeni" mogli samo da sanjaju; pomisao da neko ima svoj sopstveni računar ličila je na pravu jeres.

A opet, džepni programabilni kalkulatori koje su proizvodili Texas Instruments i Hewlett-Packard bili su pravi računari: imali su procesor, RAM, ekran, tastaturu, čak i spoljnu memoriju... I to u "impozantnim" količinama: TI-59 je, recimo, imao četvorobitni procesor, 120+16 registara memorije (uz malo optimizma, tj. računanja registra kao osmobajtnog broja (mada je realno bio sedmobajtni), 1088 bajta), ekran na kome se ispisivalo deset cifara (cifara, ne znakova!), tastaturu sa 45 tastera i magnetne kartice na koje je stajalo po 210 bajta.

I pored sveg tog siromaštva, na džepnom računaru se moglo divno programirati... ako čovek zna kako. Ja nisam znao - svoj prvi džepni računar, TI-58 (isto što i TI-59, ali uz duplo manje memorije, bez magnetnih kartica i, pogađate, jeftinije), kupio sam jula 1979. godine u "Komisionu", a da zapravo nisam pojma imao šta je to; znao sam samo da me takve stvari strašno zanimaju. Uz računar sam dobio dokumentaciju na italijanskom (koji, naravno, ne znam), ali se, uz svo slobodno vremena jednog letnjeg raspusta i mnogo dobre volje, svašta može uraditi. "Savladavao" sam računar sliku po sliku, instrukciju po instrukciju, pokušavajući da pojmim šta je to uopšte programiranje i kako se programira. Nekoliko meseci kasnije, kada sam napravio svoj prvi program za igru "Čoveče ne ljuti se" (pre toga sam napisao i Mastermajnd, ali mi je nekako izgledao previše jednostavno da bih se njime hvalio), mislio sam da sve znam o programiranju!

Kako se, stvarno, programiralo na TI-59? Program je bio nešto što bismo danas nazvali makroom, niz operacija koje računar "pamti" i kasnije izvršava kao da ih kucamo sa tastature. Program koji sabira brojeve u registrima 10 i 11 bi, na primer, glasio: RCL 10 + RCL 11 = R/S, gde je RCL (recall) taster za čitanje sadržaja registra, a R/S (run/stop) označava zaustavljanje programa. Pošto se na ekranu ispisuju samo brojevi, program ne može da se vidi u ovako "jasnom" obliku - svaka instrukcija zamenjena je odgovarajućim kodom, koji u stvari označava njene koordinate na tastaturi. Pošto je taster RCL treći po redu u četvrtom redu, njegov kod je 43, dok je kod tastera R/S (prvi u devetom redu) 91. Čitav program, dakle, izgleda ovako: 43 10 85 43 11 95 91 - pogađate, 85 i 95 su koordinate tastera + i tastera =.

Može li živ čovek da popamti sve te kodove? Verujte da može: prvih meseci brojite tastere, a onda naučite šta je tačno šta i 43 vam izgleda jednako jasno kao i RCL. Što je najlepše, posle beskrajnog gledanja u ekran, kodove ne možete da zaboravite čak ni kada ih godinama ne koristite: i danas ih se uglavnom sećam, čak mi se ponekad desi da zapamtim neki broj telefona kao niz tri TI-59 instrukcije.

Glavna stvar kod programiranje bila je racionalnost: instrukcija skoka se, recimo, kodirala kao GTO xx gde je xx labela na koju se skače, recimo GTO A. To je zauzimalo dva programska koraka, ali je negde u programu trebalo zauzeti još dva za oznaku te labele, dakle LBL A. U zbiru - četiri koraka za jedan jedini skok! Mogli su da se koriste i apsolutni skokovi: kodirano GTO 210 zauzima tri koraka, ali zato skače direktno na instrukciju koja je na 210. koraku - tamo se ne mora nalaziti LBL A, dakle potrošena su tri koraka umesto četiri. Ušteda jednog koraka (7 bita) danas izgleda komično, ali je onda tih 7 bita značilo mnogo: program se napiše, testira, i onda se sve labele uklanjaju i zamenjuju apsolutnim skokovima čime se uštedi po 20-tak programskih koraka. Posle toga program je mnogo teži za održavanje, pošto umetanje ili brisanje jedne jedine instrukcije zahteva da se "protrči" kroz ceo program i podese svi apsolutni skokovi ali... zar nije 140 bita uštede vredno nekoliko sati posla?

Kakvi su se programi pisali za TI-59? Uglavnom matematički, uz poneku igru. Takav je, uostalom, put zacrtao i Master Library modul koji ste dobijali ugrađen u TI-59: u njega je zapisano 25 programa ukupne dužine od fantastičnih 4 kilobajta, koji uključuju rešavanje sistema jednačina, nule funkcija, numeričku integraciju i jednu igru, hi-low. Mogli su se, naravno, kupiti i dodatni moduli koji su nudili specijalizovane programe, ali je malo ko imao para za njih i načina da ih dobavi iz Amerike. Zato smo sve što nam je trebalo morali sami da napišemo.

Ma koliko to danas izgledalo neverovatno, u 1000 bajta se može smestiti sasvim solidan program koji će raditi koristan posao. Na TI-59 se mogao rešiti sistem od 8 jednačina sa 8 nepoznatih (kada vam je, osim ako se bavite građevinom, zadnji put bio potreban veći?), računati sa matricama sličnog obima, odrediti nule funkcije ili određeni integral nekom numeričkom metodom, obaviti čitava baterija statističkih testova, proveriti raspodele slučajne promenljive... ukratko, dobar deo onoga što je potrebno u inženjerskoj praksi. Programi su uglavnom bili veoma kvalitetni, optimizovani do krajnjih granica, tako da mi se čini da sam u njih imao više poverenja nego u neke današnje pakete - džinove koji rešavaju probleme iz slične klase.

A igre? LED ekran na kome može da se ispiše do deset cifara nije baš neko slavno polje za akcione igre, ali kada se radi o logičkim... bilo je zbilja svega i svačega, od Nima preko raznih višedimenzionalnih tic-tac-toe do, verovali ili ne, šaha! Šah se, doduše, pojavio pred sam kraj "života" računara TI-59, nezamislivo sporo je igrao i ne verujem da bi bio neki protivnik čak i malo boljem paceru, ali znao je sva pravila i kako-tako logično igrao. Smeštanje šaha u 1000 bajta, i to uz korišćenje instrukcija višeg nivoa nego što su mašinske, predstavlja pravi programerski podvig.

Instrukcije su, rekoh, bile nešto višeg nivoa od mašinskih, ali smo neprekidno tragali za nečim još bližim procesoru. Na asembleru se nije moglo programirati, ali je postojalo i nešto između: najpre smo pronašli kod 82 koji, prema uputstvu, ne pripada ni jednoj instrukciji niti se može normalno otkucati. Ali, možete da otkucate RCL 82, što bi bila naredba za pozivanje podatka iz registra broj 82, onda obrisati kod 43 koji predstavlja instrukciju RCL i tako dobijate novu naredbu 82, koju je štampač ispisivao kao HIR. Pokazalo se da je to skraćenica od Hierarchical Internal Register, i obezbeđuje pristup internim registrima koje kalkulator inače koristi kao aritmetički stek, pošto u računanju tipa 2+3*(4+5*6) treba negde smestiti brojeve 2, 3 i 4 dok se računa 5*6. Ako odustanete od složenijih izraza, ove registre možete da koristite kao dodatni prostor za skladištenje podataka... uz malo problema, pošto treba znati kako kod iza HIR određuje operaciju sa registrom: HIR 0x je, na primer, zahtevao upis u registar x, HIR 1x je pozivao podatak itd. Zanimljivo je da nikada niko nije otkrio šta rade instrukcije oblika HIR 2x, iako je jedna od njih korišćena u internom softveru koji radi sa statističkim funkcijama kao neki neobičan jump. Ako neko zna šta radi HIR 20, mene i danas zanima!

Drugo veliko TI-59 otkriće bio je ubrzani režim rada. Otkriveno je da skok na lokaciju 240 programa broj 2 u Master Library modulu (gde je, inače, "rep" neke instrukcije koji se protumači kao kod nepostojeće naredbe) ubacuje kalkulator u neki čudan režim u kome, izgleda, ne osvežava sadržaj ekrana, ali zato radi gotovo duplo brže! Bilo je tu i nekih ograničenja, od kojih je najneprijatnije bilo što se u ubrazanom modu nisu mogli pozivati potprogrami, ali potprogrami su potprogrami, a dvaput brže je dvaput brže... nedugo posle otkrića, dobar deo programa pisan je u ubrzanom režimu, iako je to zahtevalo složenu proceduru prilikom pokretanja. Godinu dana kasnije otkriveno je da se do ubrzanog režima može doći i lakše, korišćenjem takozvanih heksadekadnih kodova (na samom početku sam rekao da je registar imao nešto više od sedam bajta - pokazalo se da, ako na neki volšeban način setujete neki od "nevidljivih" bitova, dobijate čitavu klasu novih naredbi). Ali, TI-59 je tada već bio na kraju "karijere", pa je čitavo veličanstveno polje tih kodova ostalo poprilično neistraženo.

Korisnici drugog tada popularnog džepnog računara, Hewlett-Packard 41C, nisu sebi dopustili "luksuz" da nešto ne istraže. HP-41C se pojavio na tržištu dve godine posle TI-59, i bio je, gledano sa ove istorijske distance, neosporno napredniji kalkulator, sledeća generacija. To, naravno, vlasnici TI-59 ni slučajno nisu priznavali - prisustvovali smo, izgleda, začetku budućih velikih rasprava na temu Spektrum ili Komodor, PC ili Atari, Atari ili Amiga... Svoju superiornost, ili bar ravnopravnost, vlasnici TI-59 su zasnivali na tome što je njihov ljubimac imao duplo više memorije: 120 registara prema HP-ovih 64. Ali, na poleđini HP-41C nalazila su se četiri porta, u koja se mogao uključiti po jedan modul - dodate četiri memorijska modula, i eto "fantastičnih" 320 registara ili 2.5 kilobajta! Kasnije će se pojaviti i HP-41CV (V je zapravo rimsko pet), u startu opremljen sa 2.5 kilobajta; portovi su bili slobodni za priključenje modula sa korisničkim programima, štampača, čitača kartica ili bar koda...

HP-41C imao je alfanumerički ekran na kome su se mogla ispisivati (doduše prilično stilizovana) velika slova, pa je programiranje bilo mnogo komfornije - nisu morali da se pamte kodovi, već su se videli mnemonici instrukcija. Ali, korisnici baš nisu mogli bez internih kodova: članovi velikog američkog kluba PPC otkrili su i klasifikovali nekoliko bagova, koji su obezbeđivali pristup internim segmentima HP-41. Čitava procedura korišćenje internih registara i "nepostojećih" naredbi nazvana je "sintetičko programiranje" - posle dve godine grozničavog istraživanja, William Wickes je izdao knjigu o sintetičkom programiranju, koja je postala bestseler među vlasnicima HP-41. Samog dr Wickes-a je Hewlett-Packard "trenutno" zaposlio, dajući mu nesrazmerno više para nego što je ranije zarađivao kao lekar, samo da ne bi više "čačkao" po njihovom računaru - sintetičke instrukcije, naravno, nisu bile jednostavne ni pouzdane kao regularne, pa su mnogi početnici sa njima imali problema, zbog čega su se "penjali na glavu" Hewlett-Packard-ovim stručnjacima.

Doktor Wickes je tako dobio bolji posao, ali istraživanja nisu prestala... naprotiv. PPC klub je krenuo u projekat koji je po mnogo čemu jedinstven u istoriji softverske industrije - odlučili su da gomilu uslužnih programa (matematika, statistika, pomoć pri sintetičkom programiranju itd), koji su tokom prethodnih godina objavljivani u njihovom Žurnalu, ujedine i da od Hewlett-Packard-a traže da taj softver ugradi u jedan custom modul koji će onda PPC prodavati. U modul su bili uključeni programi preko 500 članova kluba, naknadno skraćeni i sređeni tako da predstavljaju pravo čudo optimizacije. Takva je bila i dokumentacija: uz modul ste dobijali knjigu od preko 2000 strana gusto pisanog teksta u kome je do detalja opisan svaki program, ne samo sa aspekta korišćenja, nego i njegova interna struktura, komentarisan listing itd. Programeri koji su pisali programe i dokumentaciju nisu za hiljade i hiljade časova rada uzeli ni jedan dolar, a sam modul je prodavan po proizvodnoj ceni.

A džepni računari u Jugoslaviji? 1982. i 1983. su bile njihove "zlatne godine" - bilo je dosta Texas-a i za nijansu manje HP-a, svi smo se poznavali, okupljali se na sastancima Kluba programera ETF, dok su se programi razmenjivali preko Kluba programera časopisa "Galaksija". "Galaksija" je iz meseca u mesec pisala o džepnim programabilnim kalkulatorima, a uz svaki tekst objavljivan je opis desetak odabranih programa koje su napisali čitaoci. Svako ko napiše i pošalje program dobijao je besplatno dva druga programa, a ostali su mogli da naruče bilo koji program plaćajući samo fotokopiranje listinga i poštarinu. Bili su to dani kada je softver bio besplatan, ali ne zbog toga što se piratovao, nego zato što je malo kome uopšte padalo na pamet da bi svoj program trebalo da naplaćuje - bili smo srećni da neko koristi naše remek delo. A da su neki programi za džepne računare bili remek dela optimalnog programiranja, bili su - nekoliko naših programa objavljeno je u najjačim svetskim časopisima koji su se bavili ovom oblašću, a moj HP-41CV i danas krasi Golden programmer nalepnica koju sam dobio od oficijelne Hewlett-Packard-ove biblioteke u Corvalisu kada su prihvatili i uvrstili u biblioteku više od deset mojih programa. Naravno, i tamo se za programe nije dobijao novac, već drugi programi ili, eventualno, neki modul ili drugo proširenje. Istina, u prospektima je pisalo da će onaj čijih 100 programa biblioteka primi, dobija san snova zvani Hewlett-Packard 85 stoni računar, ali niko nikada nije stigao ni blizu te brojke - kriterijumi su bili prilično visoki.

Prvi vesnik kraja programabilnih kalkulatora bio je Sharp-ov PC1211: bio je veći od TI i HP "digitrona", imao je više (lošije izrađenih) tastera, LCD ekran na kome se normalno mogao pisati tekst i bejzik interpretator u ROM-u. Nešto kasnije pojavljuje se i Sharp PC1500, koji uz priključeni modul ima čak 16 KB memorije, odličan bejzik, ekran čijim se tačkama može slobodno upravljati, kasetofon za snimanje programa, ploter/štampač u četiri boje... Mnogi vlasnici džepnih računara tada su rekli da je bejzik jezik suviše visokog nivoa, da im ne treba, da više neće poznavati "dušu" svoje mašine... ali, progresu se ne može stati na put. Sa jedne strane mali bejzik računari, sa druge strane "veliki" Spektrum i Komodor... ako je nekome baš bilo do RCL i GTO kriptčnih instrukcija, uvek je mogao da programira na asembleru! I tako se carstvo džepnih računara počelo rušiti kao kula od karata: Texas Instruments i Hewlett-Packard su ukinuli zvanične časopise i biblioteke programa, časopis TI PPC Notes, koji je uređivao Maurice Swinnen, prestao je redovno da izlazi; PPC klub se raspao kada je prerastao u javnu non-profit korporaciju i kada su Richarda Nelsona, osnivača i dugogodišnjeg urednika Žurnala, smenili i (uz pomoć (ne)naoružanog stražara) izbacili iz klubskih prostorija članovi borda direktora koje je prethodno sam imenovao; Thomas Coppens, koji je vodio veliku nezavisnu biblioteku programa TI Soft u Belgiji prestao je sa razmenom, a i naša "Galaksija" je napustila "digitrone" i pokušala da oformi klub korisnika kućnih računara koji će razmenjivati programe na sličnim principima. Ali, amaterska razmena je još malo koga zanimala - prolazilo je vreme malih računara koje smo voleli, i dolazilo vreme većih i moćnijih koji će moći mnogo bolje da se primene i od kojih će se stvoriti čitava jedna grana industrije.

Šta da kažem na kraju? Na džepnim računarima sam naučio da programiram, i oni su dobrim delom odredili moju profesionalnu karijeru. Sećam ih se sa dosta nostalgije, ne zaboravljajući ono što sam na njima naučio. Prošle zime, za vreme onih groznih restrikcija struje, radio sam na notebook-u dok se njegove baterije ne istroše a onda, posle skoro deset godina, uzimao HP-41CV i pisao neki program. Program koji, naravno, ne radi ništa korisno, ali koji je interesantan zato što je svaki njegov bajt i svaki registar prava dragocenost koja se olako ne troši. Ponekad pomislim da je šteta što se i danas, bar u nekoj meri, ne programira tako...