Dibager za Galaksiju
Galaksija i danas može da posluži kao pogodna platforma za učenje i razumevanje principa mašinskog programiranja. Teško je pisati složenije mašinske programe bez odgovarajućeg dibagera, a on odnedavno postoji i za Galaksiju!
Autor: Nemanja Milutinović
Retro računare poput Galaksije danas uglavnom koriste hobisti i entuzijasti, koji se tako podsećaju „starih dobrih vremena“, pa na prvi pogled deluje da te mašine u modernom okruženju teško mogu da imaju neku ozbiljniju praktičnu primenu. To nije sasvim tačno – osmobitni računari mogu da budu dobra platforma za učenje i razumevanje principa mašinskog programiranja.
Iako danas poznavanje mašinskog jezika procesora Z80 nije od preterane koristi, svi ikada napravljeni procesori, uključujući i najmodernije, u suštini funkcionišu na isti način: obavljaju osnovne aritmetičke i logičke operacije, njihove rezultate smeštaju u registre ili memoriju i redom izvršavaju takve instrukcije dok ne naiđu na instrukciju skoka. Princip je isti, a nijanse su u tome da li su registri osmobitni ili šezdesetčetvorobitni i da li se kapacitet memorije meri u kilobajtima ili u gigabajtima. Uspešno savladan „mašinac“ procesora Z80 u Galaksiji dovodi na korak do razumevanja mašinskog jezika svakog, pa i najmodernijeg procesora.
Ko zna kakve bismo sve programe i igre danas imali da je ovakav dibager postojao osamdesetih godina prošlog veka, u vreme kada je napisana većina softvera za Galaksiju
Moglo bi se reći da za ovu namenu stari osmobitni računari nude i neke krupne prednosti u odnosu na moderne. Oni ne koriste složene operativne sisteme koji, da bi omogućili stabilan rad računara i istovremeno izvršavanje više programa, virtuelizuju pristup memoriji i zabranjuju direktan pristup hardveru i IO portovima. Zato programer na ovim računarima svim resursima može da pristupa direktno i bez bilo kakvih ograničenja.
To omogućava veliku fleksibilnost, ali traži i dodatnu pažnju, jer greška lako može da dovede računar u stanje iz koga je jedini izlaz reset, uz posledični gubitak sadržaja memorije.
Galaksija je za ovu namenu posebno pogodna, jer joj je arhitektura izuzetno jednostavna i elegantna, te zainteresovani programer može da ode i korak dalje, pa tako, na primer, analizom asemblerskog koda video-drajvera u njenom ROM-u isprati sve korake na hardverskom i softverskom nivou koji upis u video-memoriju na kraju pretvore u ispisani karakter na ekranu.
Asembleri, monitori, dibageri…
Nova Galaksija 2024 u startu nudi sve što je potrebno da se krene u mašinsko programiranje. U njenom ROM-u se nalaze ugrađeni asembler i monitor program. Asembler omogućava da se programi pišu u simboličkom mašinskom jeziku, tako da programer ne mora direktno da unosi „sirove“ vrednosti u memoriju (mada je i to moguće). Primera radi, asembler omogućava da se instrukcija za uvećavanje vrednosti šesnaestobitnog registra DE za jedan, unese kao intuitivno INC DE umesto da se u memorijsku lokaciju direktno upisuje vrednost 19 (decimalno), kako se ta instrukcija kodira. Osim što će asemblerski kod prevesti u mašinski, asembler će pomoći da se program u memoriji smesti na pravo mesto, omogućiti da se umesto neposrednih memorijskih lokacija koriste intuitivne labele, da se postavi prekidna tačka u programu…
Galaksija dibager omogućava izvršavanje mašinskog programa red po red, pregled stanja registara procesora i odabranog segmenta memorije
Monitor omogućava da se, nakon izvršenog programa, direktno pregleda sadržaj memorije, i podaci po potrebi upisuju ili kopiraju na različite memorijske lokacije.
Mašinski programi nisu pregledni – mašinske instrukcije obavljaju mnogo manje posla nego instrukcije viših programskih jezika, pa je i za jednostavne operacije često potrebno dosta instrukcija i teško je ispratiti strukturu iole složenog mašinskog programa (da ne pominjemo to što se na Galaksijinom ekranu vidi samo šesnaest redova teksta), a još teže pronaći i ispraviti greške u njima.
Zato je u mašinskom programiranju od ogromne pomoći dibager, koji omogućava da se program izvršava instrukciju po instrukciju i sve vreme prati stanje registara i memorije.
Dibager za Galaksiju
Sve donedavno dibager program za Galaksiju nije postojao. Ovaj nedostatak je, 40 godina nakon što se računar pojavio na tržištu, ispravio Vitomir Spasojević, zahvaljujući kome se u biblioteci programa za Galaksiju danas nalazi pravi pravcati dibager.
Dibager nazvan GAD (Galaksija debugger), nastao je kao pomoćni alat tokom razvoja sistemskih rutina za podršku USB interfejsu za Galaksiju koji je delo istog autora. Korisnici USB interfejsa za Galaksiju su ga već dobili upisanog u ROM interfejsa, a svi ostali GAD dibager mogu pronaći na https://github.com/DigitalVS/GAD
Ovaj program nudi praktično sve dibager funkcije: mašinski program se može izvršavati instrukciju po instrukciju, a ukoliko se iz glavnog programa poziva neki potprogram, moguće je ili izvršavati i njega instrukciju po instrukciju ili ga izvršiti u celini i odmah preći na narednu instrukciju glavnog programa. Osim uvida u njihovo stanje, moguće je i postavljati vrednosti registara, kao i pojedinačnih flegova, a program daje i pregled sadržaja izabranog segmenta memorije.
Na slici 1 je prikazan izgled tipičnog izlaznog ekrana dibagera. Na vrhu je prikazan trenutni sadržaj svih registara a odmah ispod i svi pojedinačni flegovi. Naredni prozor prikazuje kod programa koji se dibaguje, pri čemu je znakom > označena instrukcija do koje je izvršavanje stiglo u datom trenutku. Potom sledi prozor koji prikazuje sadržaj izabranog segmenta memorije i na kraju komandna linija gde se mogu izdati komande samog dibagera.
Uputstvo za upotrebu
Za početak, potrebno je da sve bude ispravno raspoređeno u memoriji: treba obezbediti da se korisnički program, njegova asemblirana verzija (odnosno simbolički mašinski kod preveden u „sirove“ nule i jedinice) i dibager, ne preklapaju. Na github strani se mogu naći tri verzije .gtp fajla dibagera koje ga smeštaju na tri različite lokacije u memoriji: heksadecimalno &3000, &6800 i &8800. Korisnik je dužan da obezbedi da korisnički program i njegova asemblirana verzija ne „pregaze“ dibager. Korisnički program, koji može biti mešavina BASIC i asemblerskog koda, Galaksija podrazumevano smešta počevši od adrese &2C3A. U okviru tog koda programer direktivom ORG određuje gde se smešta asemblirani program.
U korisničkom programu treba navesti direktivu OPT 2 ili OPT 3 da bi se obezbedilo da mašinski kod bude upisan u memoriju (asembliran), počevši od lokacije navedene u direktivi ORG. Onda treba izvršiti RUN da se program asemblira.
Sledeći korak je startovanje dibagera komandom A=USR(&8800) (ili &6800, odnosno &3000, zavisno od verzije koja se koristi). Dibager zatim treba usmeriti na početak asembliranog korisničkog programa, tako što se pritiskom na taster „I“ uđe u njegov komandni mod, a potom komandom D adresa zada početak korisničkog mašinskog programa (adresa navedena u direktivi ORG). Željeni opseg memorije koji se posmatra može biti izabran komandom M adresa.
Nadalje je sve jednostavno, pritiskom na ENTER, program se izvršava instrukciju po instrukciju, a asembler prikazuje vrednosti registara i memorije. Na slici 2 je dat primer dibagovanja jednostavnog test programa.
Dibager čuva sadržaj video-memorije koju formira korisnički program, tako da se, pritiskom na razmaknicu, umesto ekrana dibagera, dobija ekran koji je ispisao korisnički program. Pritiskom na isti taster na ekranu se ponovo prikazuje ekran dibagera.
Detaljno uputstvo za upotrebu dibagera i informacije o svim njegovim mogućnostima i ograničenjima mogu se naći na github stranici projekta. Jedno od ograničenja odnosi se na pokretanje dibagera na osnovnom modelu originalne Galaksije sa 6 KB RAM: iako će on raditi i na takvom računaru, neće ostati dovoljno prostora u memoriji za program koji se dibaguje.
Šta bi bilo da je bilo
Realizacija ovako sveobuhvatnog dibagera na platformi skromnih mogućnosti poput Galaksije bila je vrlo kompleksan zadatak. Za ovaj dibager se može reći da po složenosti realizacije, kvalitetu, upotrebnoj vrednosti i mogućnostima koje pruža, spada u sam vrh softvera pisanog za Galaksiju. Zanimljivo bi bilo razmisliti i o tome kakve bismo programe i igre danas imali da je on postojao u vreme kada je razvoj softvera za računar bio u punom zamahu. Možda će nam to uskoro pokazati neko iz nove generacije korisnika Galaksije, koristeći ga na računaru koji je sastavio kroz novi projekat samogradnje.




