Naravno, čim dođem do računara sa malim flopyyjem
Elem, imam nešto slobodnog vremena i dobre volje istovremeno, pa ću u ovom tekstu pisati o organizaciji Timove video memorije.
Dakle, kao što sigurno znate, rezolucija Timove grafike je 512 tačaka po horizontali i 256 po vertikali, u četiri boje (crna i tri nijanse zelene). Postojanje četiri boje znači da je svaki piksel predstavljen kombinacijom od dva bita, tj. svakom pikselu dodeljena su tačno dva bita. (Tim, za razliku od npr. Spektruma, ili mog prvog računara MSX-a, nema nikakve grafičke atribute, tako da su svi pikseli potpuno ravnopravni u pogledu toga kojom će bojom "sijati"
i ne zavise od stanja ostalih piksela.
Ti pikseli su "gusto pakovani" u okviru jednog bajta: budući da svakom pikselu odgovaraju dva bita, a u jednom bajtu ima osam bitova, to znači da jedan bajt čuva informaciju o četiri piksela. Kada se to izrazi u broju bajtova, dobija se da je video-memorija veličine 32 kilobajta: (512 * 256) / 4 == 32768 bajta, tj. 32 kilobajta.
Kada bi se tih 32 kilobajta nalazilo u okviru memorijskog adresnog prostora, a Z80 po definiciji adresira maksimalno 64 kilobajta, vidimo da bi video-memorija potrošila pola memorije
U stvarnosti, ovo je zakomplikovano činjenicom da Timov procesor HD64180 ima MMU (Memory Management Unit), koji mu omogućuje da adresira onoliko koliko ima linija na adresnoj magistrali, ali u "kriškama", tako da u jednom trenutku adresira 64 kilobajta od maksimalno mogućih 512 kilobajta, čime ipak ostaje Z80 kompatibilan.
Dakle, koncept da se video-memorija stavi u memorijski adresni prostor nije baš dobra, pa je primenjeno drugo rešenje -- da se video-memorija postavi u I/O adresnom prostoru
Zaista, video-memorija jeste postavljena u I/O adresnom prostoru (ako zanemarimo stanja adresnih linija A16, A17, i A18) i to u gornjih 32 kilobajta I/O adresnog prostora. Time je ušteđeno na memorijskom prostoru, ali je broj naredbi kojim se može pristupati I/O prostoru redukovan na IN i OUT naredbe, pa se pristup video-memoriji ne može vršiti npr. naredbama za prenos podataka. Pokazalo se da je ovaj koncept dobar...
E, sada, kada analizirate tabele instrukcija mikroprocesora Z80, videćete da on ima samo naredbe poput:
gde je A osmobitni akumulator, a C osmobitni registar opšte memorije. Kako se, dakle, jednim osmobitnim registrom može adresirati 32 kilobajta video-RAM-a? Tako što te naredbe nisu to na šta ukazuju njihovi mnemonici: piše se:
a funkcioniše kao:
Dakle, ove naredbe imaju šesnaestobitnu izvorišnu / odredišnu adresu -- šesnaestobitni registar BC -- čime se video-memorija može kako treba adresirati.
Zašto "piše C", a "čita se BC"? Asembler će sigurno prihvatiti adresiranje registrom C, čime se na nižih 8 bita adrese šalje sadržaj ovog registra, a na viših 8 bita sadržaj registra BC. Verovatno su u Zilogu pretpostavili da niko neće koristiti ništa osim najnižih 8 bitova I/O prostora (256 bajtova), i u svoje tabele instrukcija uneli samo adresiranje registrom C (a ne i BC). Bez obzira na to što piše po tabelama, adresa se određuje šesnaestobitnim registrom BC, a ne samo osmobitnim registrom C.
Dakle, jedan bajt u video-RAM-u sadrži informacije o četiri piksela. Pri tome, prvi bajt video RAM-a (lokacija &8000) nalazi se u gornjem levom ekranu monitora. Sledeći bajt nalazi se na I/O lokaciji &8001, i to su četiri piksela ispod prva četiri. Sledeći bajt je na lokaciji &8002 i nalazi se ispod prethodnih. Kada se izadresira prva kolona od po četiri piksela (&8000-&80FF), prelazi se na sledeću, koja je odmah desno od prethodne, i nalazi se u prostoru &8100-&81FF. Itd.
Poslednja četiri piksela, u desnom donjem uglu monitora, smeštena su u poslednjem bajtu I/O prostora, tj. na adresi &FFFF.
Znači, adresiranje video-memorije je vrlo jednostavno i intuitivno, ni nalik na npr. adresiranje Spectrumove video memorije
E, ali kako je organizovan raspored tačaka u okviru jednog bajta, tj. kojim redom je poređano četiri piksela u okviru jednog bajta? Na žalost, ne mogu da se setim!!! Bilo je suviše davno, ali se sećam da nije bilo nekih velikih iznenađenja. Sasvim sam siguran da su bitovi za jedan određen piksel "jedan pored drugog", i da je sve delovalo logiučno. Dakle, verovatno se piksel u samom levom gornjem uglu monitora nalazi na bitskim pozicijama b0-b1, sledeći piksel (desno od prvog) na b1-b2 itd. Ovo čovek mora da proba i da utvrdi, baš kao što sam i ja tada bio probao i utvrdio
Bio sam napisao u assembleru rutinu PutPixel koja je radila to što joj ime kaže, i mogu da je analiziram da bih utvrdio raspored bitova u video-RAM-u, ali je lakše to odrediti eksperimentalno
To je otprilike sve.
Nadam se da vam je bilo zanimljivo
Da li neko ima funkcionalnog Tima, da mu pošaljem neke programe da isproba? Da li bi se neko prihvatio posla da piše emulator?
Da li neko želi o nečem posebnom da pišem?
Da li ovo ikome išta znači?
Čitamo se...