V drugem letniku dodiplomskega študija elektronike na FE, pri predmetu Osnove mikroprocesorske elektronike, se je pojavila možnost za višjo oceno. Doseže se jo z izdelavo in zagovorom obsežnejšega programa, ki v največji možni meri izkorišča periferijo mikrokrmilniškega sistema MiŠKo2, s katerim smo se ukvarjali cel semester.
Priložnost je bila dobra. Preletel sem katalog obstoječih izdelkov preteklih let. Pong, Pacman, Breakout so že bili izdelani, od klasičnih iger pa je manjkal… Tetris.
Mitris je implementacija igre Tetris v programskem jeziku C za platformo MiŠKo2. Krmili se ga lahko prek tipk, igralne palice ali serijske povezave in terminalskega programa. Pri eni od laboratorijskih vaj predmeta v naslednjem letniku z istim profesorjem sem nato dodal še grafični vmesnik, izdelan v LabViewju, ki uporablja serijsko povezavo.
Igro se nadzira prek menija, kjer se izbira vnosne metode (in s tem število igralcev), stopnjo težavnosti (ki uravnava hitrost igre in posledično faktor točkovanja), sproži pa se lahko tudi kalibracijski postopek igralne palice:
Menijski vmesnik
Igra je za enega do dva igralca. Ker imamo na voljo več vnosnih metod, lahko dva sočasno igrata na ločenih poljih:
Polja za enega in dva igralca
Okrog igralnega polja so bili predvideni še razni načrti za okrasitev, a jih je hitro se bližajoč avgustovski izpitni rok žal izničil.
LCD krmilnik ILI9341 je predstavljal nekaj izzivov. Predvsem je bila težava hitrost izrisovanja, saj se je s prostim očesom videlo barvanje večjih površin zaslona.
Prva od rešitev je vidna že na zgornji sliki. Ko skupki kock (tetromini) padajo, so le ene barve. Ko pristanejo in obmirujejo, nanje šele narišem dodatne tri odtenke, ki dodajo nekaj globine.
Druga se tiče gibanja tetrominov in na slikah ni vidna. Sprva je algoritem po pretekli periodi padca pobrisal (beri pobarval s črno) celega in ga narisal premaknjenega navzdol. Podobno pri uporabniškem pozivu za obračanje. Ta operacija je bila hitrejša, a se je še vedno zaznalo izris, posebej pri dolgih tetrominih. Zato je bila naslednja rešitev izračun razlike med trenutnim in sledečim stanjem padca/obračanja. Tisti polja, ki se niso spremenila med stanjema, se niso brisala in spet risala. Preostala so se po potrebi pobrisala, druga na novo narisala.
Omogoča pa ILI9341 strojno pomikanje - nastavitev začetnega stolpca v grafičnem pomnilniku. To je omogočilo dodatek, ki je bil uporabljen pri točkovanju. Med igro se lahko pobrišejo od 1 do 4 dopolnjene vrstice, vsaka od štirih stopenj pa je bila ponazorjena s kratkim tresljajem slike, 1 z rahlim, 4 z močnim.
Nenazadnje pa še prehodi. Ker je osvetlitev zaslona vezana na PWM izhod mikrokrmilnika, sem to izkoristil za zatemnjevanje in odtemnjevanje med prizori - to sta predvsem meni in igralno polje.
Dvojno polje in tresljaji slike so povzeti po Twintrisu za Commodore Amigo, vendar sem se jaz navdihoval po klonu, Twintrisu za Commodore 64, ki smo ga igrali nekaj let nazaj na dejanskem Commodorju in televizorju v srednji šoli.
Mitris glasbe nima, velja pa vsaj omeniti vrhunsko glasbo zadnjega Twintrisa in še malo bolj nor uvodnik v Amiga Twintris.
Poleg komentiranja izvorne kode sem izvozil še Doxygen dokumentacijo (povezava na to stran je sprva kazala nanjo). Izvorna koda je ločena na logični polovici:
Nivojska ločitev programskih funkcij
V tistem študijskem letu je med študentskimi projekti Mitris tako izstopal (poleg sošolčevega interaktivnega šaha), da je njegovo fotografijo profesor Jankovec objavil v svojem članku v reviji Svet elektronike ob 10-letnici predmeta:
Svet elektronike, številka 300