Inače, zanimljiva je ta Timova grafika. Postoji "neki" I / O port -- nikako ne mogu da se setim koji je, sem što se svakako nalazio u opsegu $0000-$00FF, a mislim da je $C2 ili $C4, kojim se može podešavati pozicija početka ekranskog prikaza na monitoru... Naime, sva ova adresiranja koja smo pominjali na ovoj i prethodnoj stranici su tačna, i tu se manje-više nema šta dodati... Ali hardverski posmatrano, moguće je udesiti da bajt $8000 video-RAM-a ne počinje od levog gornjeg ugla monitora, već je nešto "spušten", pri čemu se to spuštanje moglo kontrolisati upisivanjem osmobitne vrednosti u taj nepoznati port.
Ovo mi je teško da opišem rečima, ali ako imate neki ispravan Tim, probajte da korišćenjem OUT naredbe iz GBASIC-a u port $C2 upišete neku jednobajtnu vrednost i ekran će naglo da odskroluje na neku poziciju ispod gornjeg dela monitora. Ako ovo radite u nekoj petlji (upisujete prvo $00, pa $01, pa $02, pa $03 sve do $FF), moraćete da ubacite i neku softversku zadršku, jer je proces munjevit.
Ova stvar se može koristiti za vrlo elegantno, kvalitetno i izrazito brzo vertikalno skrolovanje ekrana. Horizontalno skrolovanje je prava mora u poređenju sa vertikalnim, i tu već mora da se piše čitav kod koji bi to radilo.
E, kako je to implementirano kod Tima... Jednostavno. Pretpostavimo da ste napisali neki program koji nešto više (nekoliko desetina redova) ispisuje na ekran, npr. naredbom PRINT iz GBASIC-a, ili najobičnijim DIR-om diskete gde ima više datoteka da ne mogu sve stati na jedan ekran. Kada ispis dođe na samo dno ekrana, dešava se sledeće.
Prvo, upisivanjem u "onaj" nepoznati registar ekran odskroluje na gore, određen broj piksela, koji zavisi od toga koliko je visok font, plus, eventualno, koliko je rastojanje u pikselima između dva uzastopna reda. Time se gornji deo monitora (sam njegov vrh!) pojavi dole na dnu ekrana, onoliko piksela koliko je veliki font i koliko je rastojanje između redova.
(Ovo "premotavanje" vrši se kao da je sadržaj ekrana namotan na neku beskonačnu "rolnu", pri čemu se vidi cela "rolna", ali ne u kontinuitetu, nego kao kroz neki "prozor". Da bi se video pravi deo te "rolne", samo treba premotati toliko koliko treba. U ovom slučaju, premotava se za vrednost visine fonta + prostor između redova.)
Dakle, ovim "premotavanjem" veći deo ekrana potpuno hardverski odskroluje na gore, a samo se njegov vrh sada pojavi na dnu. Potom jednostavno treba intervenisati samo na donjem redu. Ne mogu da se setim da li se prvo obriše ceo red, pa onda napiše preko njega novi red, ili se neposredno zamenjuje znak po znak. Ja jesam to traceovao, i koliko se sećam reč je o drugoj varijanti, tj. da se zamenjuje znak po znak. Tako mi deluje logičnije.
Ovom mudrom strategijom postignuto je da se ispisivanje teksta na monitor obavlja vrlo efikasno, jer se ne interveniše na svim pikselima ekrana, nego samo na jednom jedinom redu.
Po svoj prilici trenutno stanje "onog" 😉 registra upisuje se i u neku sistemsku promenljivu u RAM-u, jer ako se upiše u registar, a izostavi ažuriranje u RAM-u, desi se da operativni sistem više ne zna gde je početak, pa računaru treba neko vreme da se sinhronizuje sa pravim stanjem -- obično je dovoljno jedno ili dva DIR. Naravno, ovo je samo hipotenuza 😉 Nemam predstavu da li je to stvarno tako, a tek nemam pojma koja je to memorijska lokacija koja sadrži kopiju "onog" 😉 registra.