|
Pre tačno 14. godina, januara 1984, predstavljen je prvi domaži računar, "galaksija", koji je konstruisao Voja Antoniž, a sagradilo preko 8000 ljudi. Ove godine "galaksija" se ponovo našla pred njima, samo ne više sastavljena od čipova, vež od naredbi jezika C...
Emulator je hardverski uređaj ili program koji oponaša neki drugi sistem - u našem slučaju, trebalo je u potpunosti oponašati elektroniku malog računara "galaksija". Dakle, procesor Z-80, memoriju, softversko generisanje slike, kontrolu tastature... Nije tako komplikovano kako zvuči, zahvaljujuži programu za emulaciju Z-80, koji radi baš kao i originalni procesor. Ostatak elektronike nije bilo teško emulirati: svaki pristup memoriji i I/O portovima prolazi preko naših rutina, pa ako recimo zaključimo da je u pitanju upis u neko područje RAM-a, samo izvršimo odgovarajužu akciju. Kada se radi o video memoriji, svaki upis u zonu 0x2800 - 0x29FF trebalo je zameniti ispisom na odgovarajužoj poziciji ekrana, a slično važi i za segment 0x2000 - 0x2700, gde su mapirani tastatura i kasetofon. Pokušao sam da dočaram pojam emulatora u kratkim crtama, a ako vas oblast zainteresuje, bilo bi dobro da pročitate članak Dejana Ristanoviža, "Jagnje u koži vuka - Simulatori" koji je, o okviru serije "Put u središte ROM-a", objavljen u "Računarima" 34.
Zašto sam se u to upustio? Ta oblast me interesuje skoro jednu deceniju, ali su se tek stekli uslovi za efikasno pisanje emulatora u C-u. Mogao sam ga pisati i u asembleru, radio bi punom brzinom i na 286-20, ali bih ga pisao više meseci. Uostalom, posle kraže šetnje kroz Internet emulatorsku scenu, primetih da je do sada "izemulirano" praktično sve što je nekada urađeno u hardveru: Altair, Imsai, Apple, prve konzole za video igre, TI i HP kalkulatori...
Tokom prikupljanja informacija o svim emuliranim sistemima, primetio sam zajedničku osobinu emulatora: vežina je rađena u GNU C-u pod DJGPP-om. Radi se o freeware portiranju GNU C-a za DOS platformu, odnosno DJGPP, besplatnu radnu okolinu za razvoj 32-bitnog softvera u C/C++ jeziku. Dakle, sve je besplatno, a napisani program se lako prenosi na Unix, DOS, OS/2, Windows, MacOS... Ključna stvar koja je ljude opredelila za ovaj C je biblioteka ALLEGRO, koja rešava sve osim zvuka. Biblioteka je takođe besplatna, a uz nju stiže i kompletan izvorni kod, što važi i za emulatore Z-80 i 6502 procesora. Tako se proces stvaranja emulatora sveo na sklapanje ponuđenih celina.
Zašto sam se setio naše (sada vež tinejdžerke) "galaksije"? Emulator za nju niko nije uradio, a računar je zgodan za emulaciju: nema mnogo komplikovanog hardvera, šeme su tu, način rada je vrlo dobro dokumentovan, tu je i sadržaj ROM-ova... jednom rečju, sjajna prilika da se proba. U početku sam želeo da dobijem samo čuveno READY i da se tastatura odazove, ali kada je to proradilo, video sam da put do kraja nije predug. Sve u svemu, na razvoj emulatora nije otišlo više od dve nedelje ležernog rada, a onda sam se koncentrisao na što vernije oponašanje okoline. Kreirenje posebnog moda koji bi oponašao "televizijskih glavobolnih" 50 Hz, pomeranje slike na TV-u (monitoru) levo-desno (preko "galaksijine" sistemske promenljive), fini skrol...
Jedini bitan deo koji nije urađen je rad sa kasetofonom. Možete misliti zašto: čak i ako imate neku kasetu sa programima, pitanje je u kakvom je stanju snimak posle 10 godina. No i tu bi se štošta moglo uraditi (a i radi se) - izrada tog modula zavisiže od interesovanja za ovaj projekat.
Poželeli ste da probate emulator? Možete ga, zajedno sa kompletnim izvornim kodom, preuzeti sa http://solair.eunet.yu/~amidar/ ili iz direktorijuma R:\Misc na SezamuPro. Za dodatne informacije o DJGPP i ALLEGRO bibliotekama pogledajte, www.delorie.com, za Z80em www.komkon.org/~dekogel/ a za priču o "galaksiji" www.sezampro.yu/~dejanr/galaks.htm
Pošto ga preuzmete i raspakujete, emulator startujete sa GALAXY - za pokretanje pod DOS-om potreban je CWSDPMI ekstender, dok eventualno instalirani Windows taj deo posla preuzima na sebe. Komandna linija sadrži nekoliko prekidača za kontrolisanje "galaksijinog" okruženja, koji su opisani u ReadMe datoteci. Unutar emulatora se koristi svega par opcija: pritiskom na F11 dobijate informaciju o efektivnoj brzini "galaksije" u vidu broja slika koje emulator može da prikaže u sekundu, kao i brzinu emulacije. Nemojte se iznenaditi ako na brzoj mašini pređete i 20 MHz, mada originalna "galaksija" radi na 3.072 Mhz. Pritiskom na F2 snimate sve registre Z-80 i kompletan RAM u datoteku, dok pritiskom na F3 to vražate nazad. Za sada je snimanje izvedeno preko snapshot metode, a u nekoj budužoj verziji že to raditi komande SAVE i OLD. Alt R je Reset a Alt N je NMI koji prekida "mrtve" petlje, a iz emulatora se izlazi na Ctrl Q. Zbog eventualne ozbiljnije primene (dužeg rada) Galaksija emulatora, ubacio sam i screen saver, koji se svodi na zatamnjivanje i osvetljivanje ekrana - radi u pozadini, pa ni malo ne utiče na brzinu emulacije.
Na emulator možete da priključite i prave elektronske sklopove: pri svakom upisu, odnosno čitanju I/O portova sa određenih lokacija, vrši se upis odnosno čitanje sa pripadajužeg LPT porta. Pošto LPT port ima 12 izlaza i 5 ulaza, a PC može da ima tri LPT porta, dobijate 36 izlaza i 15 ulaza, sasvim dovoljno za kačenje prostijih periferijskih dodataka kao što su senzor, relej, A/D i D/A konvertor...
Potrudio sam se da procenat kompatibilnosti bude što veži: svi bejzik i mašinski programi koje sam našao rade besprekorno. Ugrađen je i ROM-2, tako da odmah imate Z-80 asembler i matematičke funkcije (spisak komandi je u ReadMe datoteci). Možda bi se moglo dadati "proširenje memorije", ROM3, grafika visoke rezolucije i AY-3-8910 zvučni dodatak.
Pokazalo se da je za dobijanje pune brzine emulacije potreban Pentium na 100 MHz, sa iole bržom VGA karticom i megabajtom RAM-a. Pentium na 100 MHz da emulira Z-80 na 3 MHz? Eh...
Koristim priliku da se zahvalim Zoranu Jovkovižu na podršci i korisnim savetima tokom izrade emulatora, kao i autorima DJGPP-a, (DJ Delorie) ALLEGRO biblioteke (Shawn Hargreaves) i Z-80 jezgra (Marcel de Kogel), na svemu sto su učinili za emulatorsku scenu. Bižu zahvalan i čitaocima na svim predlozima, primedbama i komentarima: projekat je u potpunosti neprofitabilan, pa se autor ne može obavezati da že sve usvojiti, ali tu ste i vi da pomognete. "Galaksija" je naš računar, zar ne?
|