Inače, svakako da Tim nema hardverske fontove niti tekstuelni režim, već je sve grafika. Vidim da ste u međuvremenu pričali o tome, pa ću samo dodati nekoliko svojih iskustava.
Jednom prilikom, moja srednjoškolska profesorka Nevenka Spalević dala je drugaru iz odeljenja Milošu P. zadatak da napravi za Tima font sa francuskim slovima. Program je trebalo da služi profesorki francuskog jezika u nekoj srednjoj školi, da bi tamošnji đaci pisali software u verovatno GBASIC-u za (pretpostavljam) neku kombinaciju programiranja i učenja francuskog. Miloš nije bio zainteresovan, pa sam posao preuzeo ja.
Miloševa preporuka bila je da patchujem CIR.COM, LAT.COM i slične, i možda je bolje da sam tako i odradio, ali ja ipak hteo da pišem "od nule"...
Elem, pretpostavio sam da su fontovi definisani negde u RAM-u, i to verovatno u onoj procesorskoj "banki" koja ne mora da se menja, već je aplikativnom programu odmah pri ruci. Zato sam napravio program koji kreće od neke šesnaestobitne lokacije i dumpuje u jednom redu adresu i sadržaj svakog bajta u binarnom obliku, i potom prelazi u sledeći red; tako do kraja. Naravno, da bi output bio čitkiji, binarne nule sam menjao tačkom, a binarne jedinice verovatno zvezdicom. I posle nekog petljanja, naišao sam na početak definicije znakova. Nije posle bilo problema da napišem program koji jednostavno upisuje novokreirane znakove (one kojih ima u francuskom, a nema u engleskom) u memoriju. I, mislio sam -- tačka! Kad ono...
Posle izvesnog vremena, slučajno sam isprobao taj svoj program pod OS-om sa neke druge diskete, pozajmljene ko zna od koga, i dobio sam da su mi karakteri počeli da se prelivaju jedan preko drugog: npr. donja trećina slova A prelazila je u gornju trećinu slova B, donja trećina slova B u gornju trećinu slova C, itd. Dakle, očigledno je da su se u toj verziji OS-a fontovi nalazili nekoliko bajtova (reda 3-4) pomereni nego što je moja aplikacija to očekivala...
Onda sam dohvatio CIR.COM ili LAT.COM, da vidim kako je to neki meni nepoznati maestro rešio. I šta se ispostavilo: na jednoj fiksnoj dvobajtnoj lokaciji, u okviru RAM-a, nalaziuo se šesnaestobitni pointer na početak definicije znakova! Dakle, definicija znakova uopšte nije bila na fiksnoj lokaciji, već je na fisknoj lokaciji bio
pokazivač,
pointer na nju. Kada sam pročitao vrednost pokazivača, jednostavno sam dobio "baznu" adresu od koje počinje definicija fontova. Dalje nije bilo teško; modifikovani program proradio je na svim varijantama OS-eva do kojih sam mogao doći.
(Posredno naravoučenije: postojalo je tu nekoliko varijanti OS-a.)
Mana mog programa bila je u tome što aplikacija nije detektovala status Caps Locka, već je uvek prikazivala samo mala slova. Da bi se dobila velika slova, morao je da se pritisne Shift, i ako treba više velikih slova Shift je trebalo da se drži do kraja
A da sam patchovao CIR.COM i LAT.COM, kao što mi je drugar preporučivao, ovih problema ne bih imao
Dakle, jedino što treba iz ovog pisanija shvatiti je to da su fontovi bili potpuno grafički, i da je adresa njihove definicije smeštena na određenu šesnaestobitnu fiksnu lokaciju. Poslaću ceo kod, ali na prvu loptu reč je o lokacijama $E80F-$E810, a to ionako "piše"
u CIR.COM i LAT.COM. Naravno treba povesti računa o onim "Indijancima"
tj. o tome šta ide na nižu, a šta na višu adresu...
Epilog priče. Profesorka francuskog je bila veoma zadovoljna programom, htela je i da mi plati, ali joj je Spalevićka elegantno -- u svom stilu -- rekla da mi umesto plaćanja kada mi zatreba održi neki kurs francuskog
A što se mene tiče, imam sačuvan taj kod i daću vam ga na uvid; mož' dobijete nekad, negde, neki kurs francuskog...