PC Press specijal - Data centri 2025

Dve nove igre za Galaksiju

Za svoj četrdeseti rođendan Galaksija je, sa malim zakašnjenjem, dobila dve nove igre. Kako one izgledaju i kako izgleda vratiti se četrdeset godina unazad i programirati na osmobitnom računaru?

Nove igre za Galaksiju: Korak po korak i Belt

Tempo promena u svetu računara je toliko brz, da mnogih od njih nismo ni svesni – i pre nego što se na nešto naviknemo, ono već bude zamenjeno nečim novijim i boljim. Gledano iz današnje perspektive, programiranje u BASIC-u ne deluje mnogo bliže sadašnjosti od osvetljavanja prostorija fenjerom. Mnogima je, posle BASIC-a, naredni korak bio Turbo Pascal – uvođenje procedura, funkcija, rekurzije, integrisano okruženje sa debagerom koji omogućava da se program izvršava liniju po liniju uz praćenje kako se menjaju vrednosti promenljivih, naveli su nas da se zapitamo kako se uopšte moglo bez svega toga. Vreme je išlo dalje, kroz C, zatim C++, pa Javu, kasnije i Python i mnoge druge platforme, stizala su nova unapređenja i inovacije. Razvojna okruženja sa gomilom otvorenih prozora na monitorima dijagonale 30 ili više inča koja rade na računarima sa više gigabajta RAM-a i moćnim procesorima, postala su uobičajena pojava. Kako izgleda ako se sve ovo odbaci i vratimo se na računar sa procesorom brzine 3 MHz kome se kapacitet memorije meri u kilobajtima, i gde se izbor okruženja za programiranje svodi na BASIC i asembler? Takav eksperiment sproveden je kroz razvoj dve igre za Galaksiju.

Korak po korak

Prva igra je jednostavna slagalica nazvana Korak po korak. Na tabli je raspoređeno deset figura različitih dimenzija, označenih brojevima od nula do devet, koje se mogu pomerati u sva četiri pravca na susedna polja na tabli, ukoliko su ona slobodna. Cilj igre je da se u što manje poteza najveća figura na tabli, koja zauzima četiri polja i označena je nulom, dovede do izlaza. Pomeranje se vrši tako što se na tastaturi odabere broj figure koja se pomera a zatim strelica za željeni pravac i smer kretanja. Igra sadrži sedam slagalica različitog nivoa složenosti.

Korak po korak - završna scena
PC - Naših 30

Pošto je igra u osnovi vrlo jednostavna i (makar na prvi pogled) ne zahteva veliku brzinu i interaktivnost, logičan izbor za njenu realizaciju bio je BASIC. Pokazalo se da je znanje BASIC-a nalik vožnji bicikla – ako ste ga jednom naučili, nikada ga nećete zaboraviti. Trebalo je samo malo vremena da se uz pomoć uputstva za upotrebu Galaksije objavljenog u Računarima u vašoj kući savladaju specifičnosti sintakse i struktura podataka na Galaksiji.

Pročitajte i:  Promocija drugog izdanja knjige "Da li postoje stvari koje ne postoje" Voje Antonića

Naručite osnovni komplet za samogradnju Galaksije

Jedan od većih problema tokom programiranja predstavljalo je praćenje strukture programa: Galaksija na ekranu prikazuje samo 16 linija teksta i više od toga se u jednom trenutku ne može videti. Zato je bilo vrlo korisno podeliti program na manje potprograme.

Kako se rad na igri bližio kraju, postalo je očigledno da se figure po ekranu pomeraju prilično “tromo”. BASIC jednostavno nije dovoljno brz da obezbedi dovoljno glatku animaciju. Galaksiju je lako trostruko ubrzati, samo treba privremeno isključiti iscrtavanje slike, ali treperenje slike koje je nastalo nije izgledalo dobro, pa je rešenje za rutinu koja pomera figure po ekranu pronađeno u… mašinskom jeziku.

Ništa bez asemblera

Uz bilo kakvo prethodno iskustvo sa asemblerom za bilo koji mikroprocesor, nije teško savladati mašinski jezik Z80. Uputstvo za upotrebu procesora sa sajta proizvođača sasvim je dovoljno da se brzo savladaju njegove specifičnosti i osposobi se za pisanje programa manje ili srednje složenosti, a i na YouTube-u se mogu naći brojni tutorijali. Potrebno je i obratiti pažnju na specifičnosti Galaksije i biti obazriv sa upotrebom indeksnih registara IX i IY koji se koriste za sistemske potrebe (najbezbednije je da ih ne koristite). Za upoznavanje sa asemblerom Galaksije od velike pomoći bila su uputstva objavljena u Računarima 2 i 3 (mogu se naći na dejanristanovic.com/galaksija).

Pošto je svaka lokacija na ekranu Galaksije direktno mapirana na adresu u delu memorije rezervisanom za video, asemblersku rutinu za pomeranje figura nije bilo teško napisati. Neočekivanu otežavajuću okolnost za rad na njoj predstavljala je činjenica da se raspored figura na tabli čuva u nizu koji, gledano iz BASIC-a, sadrži cele brojeve. Oni su, međutim, u memoriju smešteni u zapisu sa pokretnim zarezom (floating point). Zato je bilo potrebno pronaći rutine u Galaksijinom operativnom sistemu koje konvertuju brojeve zapisane u formatu sa pokretnim zarezom u cele. Njih je onda moguće upisivati u registre procesora i memorijske lokacije i tako ispisivati karaktere na ekran. Nakon malo pretrage po disasembliranom i dobro komentarisanom ROM-u Galaksije (može se naći na istoj lokaciji gde i prethodno pomenuta uputstva) i malo eksperimentisanja, pronađene su potrebne rutine, i sve je proradilo.

Pročitajte i:  Trka veterana: Spectrum, C64 i Galaksija

Kombinacija u kojoj se u BASIC-u proverava da li postoji slobodno mesto na tabli da se figura pomeri i očitavaju pritisnuti tasteri, a u asembleru se figure pomeraju, se pokazala dovoljno interaktivnom i efikasnom za ovu vrstu igre. Uspeh na njenom razvoju je bio podstrek da se pokuša napisati nešto “ozbiljnije”, sa još više asemblerskog koda.

Pokretna traka – belt

U igri Belt se na pokretnoj traci na vrhu ekrana kreću slučajno generisani brojevi. Traka se polako kreće, na nju stalno dolaze novi brojevi, a cilj igrača je da onemogući da se traka prepuni i brojevi padnu sa nje. To se postiže lansiranjem dodatnih brojeva sa pokretne platforme na dnu ekrana. Kada se na traci jedan do drugog nađu tri ista broja oni nestaju sa trake i niz brojeva se skupi. Ako skupljanjem niza nastane novi niz od tri ili četiri ista broja, nestaju i oni.

Belt

Za figure koje se kreću na traci izabrane su cifre koje se lako raspoznaju i međusobno razlikuju, jer na Galaksiji nije moguće redefinisati karaktere, crtati različite oblike tako malih dimenzija (poput kvadrata, trouglova, krugova), niti ih bojiti u različite boje.

Ova igra je mnogo dinamičnija pa je, sa izuzetkom uvodnog i završnog ekrana, morala biti u celini napisana u asembleru. Tu se ponovo pojavio problem brzine, ali ovog puta u suprotnom obliku. Mašinski program je previše brz, tako da ono što igrač doživljava kao jedan pritisak na taster na tastaturi, rutina koja se vrlo brzo ponavlja u svakom prolazu detektuje kao novi pritisak. Zato je i najkraći pritisak na strelice platformu odmah dovodio u krajnji položaj. Znamo da je program teško ubrzati, ali ga je lako usporiti, pa je problem rešila jedna “prazna petlja”.

Ovde je problem praćenja strukture programa na ekranu sa samo 16 redova bio još izraženiji, pa je dobra podela na potprograme bila još važnija. Neki od potprograma su pisani odvojeno, pa su tek nakon što su završeni i detaljno testirani, ubacivani u kompletan program. Tako je značajno olakšano i ubrzano lociranje i otklanjanje grešaka.

Pročitajte i:  PC Press video: Iskustva gradnje nove Galaksije | Voja Antonić i Nemanja Milutinović

Galaksijini alati

Rad na asemblerskom kodu često ume da iznenadi. Da bi se došlo do nekih stvari koje su u BASIC-u vrlo lako pristupačne, u asembleru se morate pomučiti. Primera radi, generisanje celog slučajnog broja u željenom opsegu se u BASIC-u postiže vrlo lako, funkcijama RND i INT, dok u asembleru za isti posao treba pozvati četiri sistemske rutine, koje prethodno treba identifikovati u ROM-u računara.

U razvoju igre je od velike koristi pri otklanjanju grešaka bio Galaksijin monitor program koji omogućava praćenje sadržaja memorije, kao i pseudoinstrukcija REG koja pauzira izvršavanje mašinskog programa i na ekranu prikazuje sadržaj registara procesora u tom trenutku.

Da bi ceo proces programiranja bio potpuno autentičan, apsolutno ništa nije rađeno na PC-ju sa većim ekranom i modernim editorom – korišćena je samo Galaksija a dijagrami toka programa su pisani na papiru.

U programerskom vremepolovu

Dvadesetak radnih sati provedenih na razvoju ove dve igre u svojevrsnom programerskom vremeplovu bili su zanimljivo i vredno iskustvo. S jedne strane, ono je podsetilo koliko moderni alati olakšavaju proces programiranja. Sa druge, rad na retro platformi poput Galaksije, vratio je izgubljenu draž direktne komunikacije programera sa hardverom na najnižem nivou i izazov rada na optimizacijama neophodnim da bi se program i na skromnom hardveru uspešno izvršavao.

Iako su po današnjim standardima igre za Galaksiju izuzetno skromne, one i dalje mogu da zabave, jer privlačnost nekada ume da bude i u jednostavnosti i dobroj ideji, a ne samo u atraktivnom prikazu. Zato izazov ostaje otvoren, pokušajte i sami da napravite neki novi program ili igru i pošaljite je Redakciji da bude objavljena i podeljena sa ostalim korisnicima Galaksije!

Igre Korak po korak i Belt možete da preuzmete odavde, ili sa racunari.com/galaksija/

Facebook komentari:
Tagovi: , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *