Šta je novo?

Tim 011

Tetris je delo Ivana Gerenčira. Ovaj autor napravio je i logičku igricu Gomoku. Obe igrice nisu bile na "sistemskoj disketi", ali sam ih na neki volešbni ;) način nabavio i isprobao. I dalje se sećam da, kada posle više sati Tetrisa legnem da spavam, i u polusnu još "ređam kockice" :)

Ima li šanse da se nekako dođe do Tetrisa za TIM?

Usput, skenirao sam knjigu "Priručnik za TIM-011-DOS" koja se može preuzeti sa https://8bitchip.info/oub/TIM 011/Zoran_Micic_Prirucnik_za_tim-011-dos.pdf
 
Danas je napravljen novi alat za TIM-011, TimFont. Omogućava ekstrakciju fonta iz TIM-ovih ASC.COM i CIR.COM fajlova u PNG, kao i generisanje novog COM font fajla od PNG-a. Ovo omogućava da se lako redefinišu fontovi za TIM-a korišćenjem bilo kog programa za editovanje PNG-a. Alat je dodat u tim011-tools repozitorijum:
https://bitbucket.org/zzarko/tim011-tools/

timfont0.png
Marko je testirao alat i napravio par fotografija sa prave mašine:
timfont1.jpg timfont2.jpg

@istameni ako si još uvek na forumu, mogu li te zamoliti da me kontaktiraš, imam još pitanja oko TIM-a...
 
Posle dosta analize TIM hardvera i softvera od strane Marka i provaljivanja tačne organizacije video memorije, došao je red da se to znanje i upotrebi. Evo kako je memorija organizovana:

Screenshot at 2021-03-02 23-38-43.png

Marko je našao i Small C kompajler za CP/M koji može da se koristi i za pisanje programa za TIM-011:


Napravljene su dve funkcije za iscrtavanje tačke, jednu je Marko iščupao iz postojeće Pascal bibilioteke za TIM-011, a druga je sveže napisana na osnovu analize izgleda video memorije. I sve se lepo uklapa sa Small C-om što pokazuje i ova fotografija slike koju je proizveo Markov TIM-011 (slika je u boji jer tako trenutno radi mapiranje njegov custom hardver za video izlaz):

20210302_215741.jpg
a koja je izgenerisana sledećim C kodom:
for (i = 0; i < 100; ++i) { plotxy(i+0,i+0,3); plotxy(i+10,i,2); plotxy(i+20,i,1); }
Ukratko, radi se na rešenju za jednostavno pisanje programa za TIM-a...
 

Prilozi

  • Screenshot at 2021-03-02 23-35-03.png
    Screenshot at 2021-03-02 23-35-03.png
    44 KB · Pregleda: 19
Poslednja izmena:
Jos cete da vratite tim u skole i casove informatike :)

Samo napred.
 
Evo i kako simulacija TIM-011 video izlaza izgleda u praksi, sa novom Z80 rutinom za iscrtavanje sprajtova, zajednički produkt Markovog i mog rada poslednjih par dana
🙂
Izmenjeni kod emulatora je stavljen na:
https://bitbucket.org/zzarko/tim011-tools


A evo i kako izgleda iscrtavanje tile-ova na pravoj mašini:
tiles.png

E, sad, da bi se pravile igre za TIM-a, trebala bi neka vrsta sinhronizacije glavne petlje igre, kako bi akcija uvek išla istom brzinom. Na net-u sam video pominjanje HALT naredbe, ali mahom vezano za ZX jer se tamo generišu interapti za osvežavanje ekrana. Na drugim mestima su pominjani tajmeri, ali ne znam da li ih TIM ima... Ako neko zna nešto na ovu temu, a da se može primeniti na TIM, javite...
 
Poslednja izmena:
Napravljen je i TimTile, alat za konverziju PNG slika u tile-ove koji se mogu koristiti sa grafičkom bibliotekom:
1615032402174.png
Grafička biblioteka, kao i svi dosadašnji alati su postavljeni na:
 
Svaka čast tebi i Maretu. Nisam pratio forum neko vreme i danas slučajno skoknem i naletim na temu. Tim mi je ostao u sećanju iz školskih dana i još uvek me malo "drmne" nostalgija kad se prisetim. Mislim da sam se i javljao u nekom od prvih postova. :)

Kako Tim 011 stoji sa pokretanjem CP/M softvera? Koliko je imao memorije po originalnoj dokumentaciji, a koliko ima mašina na kojoj ti radiš?

Ima dosta CP/M softvera koje je moguće skinuti sa weba. Tako, ukoliko je Tim dovoljno kompatibilan, postoji možda još koja opcija osim smallc. Koliko je meni poznato neki od C kompajlera koji su bili dostupni za CP/M su i DR C (normalno, jelte), BSD C, Aztech C i Pacific C. Na webu je moguće naći i C-Snippets kolekciju C izvornog koda. Rane verzije sadrže i dosta koda za CP/M.

Izmena:

Odličan emulator za CP/M za Linux (ili druge Unixoide) je Z80pack od Udo Munk-a. Može poslužiti za testiranje ili razvoj CP/M softvera. Mada je za to drugo možda bolje neki kros-kompajler ako postoji. :)
 
Odličan emulator za CP/M za Linux (ili druge Unixoide) je Z80pack od Udo Munk-a. Može poslužiti za testiranje ili razvoj CP/M softvera. Mada je za to drugo možda bolje neki kros-kompajler ako postoji. :)
E, gledao sam i taj, ali se taj malo komplikovanije podešava, bar koliko sam video. Ovaj CP/M emulator koji sam prepravljao izvršava Z80 kod punom brzinom host mašine koristeći fajl sistem host mašine, tako da ti tehnički cross-compiler i nije potreban jer se kompajliranje sa native kompajlerima odvija veoma brzo. Ako je CP/M kompajler Small C (izvršni fajl je CC), a program koji hoćeš da kompajliraš je test.c, možeš da napišeš u komandnoj liniji samo:
cpm cc program
što će pokrenuti CP/M Z80 emulaciju, izvršiti Z80 binarni kod CC kompajlera, iskompajlirati test.c i vratiti te u komandnu liniju host sistema. Odnosno, možeš da izvršiš bilo koji standardni CP/M Z80 izvšni kod što je prilično zgodna stvar, možeš da koristiš bilo koji tekst editor sa host mašine, a da i ne pominjem da sve te komande za kompajliranje možeš da ubaciš u bash/bat skriptu i sebi prilično skratiš posao oko kucanja.
 
To izgleda zanimljivo. Baciću pogled. :)

Čitam uputstvo i vidim da TIM 011 koristi ZCPR3. Onda mi je bilo jasno zašto je izbor komandi proširen u odnosu na CCP (CP/M-ov command.com). ZCPR je besplatni prošireni klon CCP-a.

Od arhiva CP/M softvera moja preporuka bi bila: The Humongous CP/M Archive (Offline mirror).

Uputstva za upotrebu za ZCPR3

CD-ovi sa izvornim kodom koji sadrže i izvorni kod za CP/M kompajlere/interpretere
 
Skapirao sam kasnije. Malo krоz čitanje dokumentacije, malo kroz čitanje ove strane teme, a malo kroz čačkanje tim011-tools arhive. Tim 011 ima specifičan grafički režim. O tome si pričao iznad i zato postoji specifičan emulator i c kompajler. :) U onom uputstvu koje je okačio Marko grafički režim se skoro i ne pominje, osim uz napomenu da postoji Turbo Pascal modul.

Tako da problematika nije opšti CP/M softver (uputstvo pominje podršku za dbase, wordstar, turbo pascal, itd), već razvoj igara za taj grafički režim.

Takođe, terminalski izlaz emulatora predstavlja tekstualni režim CP/M-a, dok je X11 prozor zapravo emulacija TIM 011 grafičkog režima.
 
Poslednja izmena:
Ne stignem sada, ali pročitaću ispočetka temu kad uhvatim vremena. Propustio sam jedan deo diskusije, a ostalo zaboravio. :) Sad sam čitao unazad i vidim da je Tim 011 imao 256kb memorije. Sad mi je jasno kako je bilo memorije za ram disk (o kome sam pročitao u upustvu). To je verovatno vrlo dobro za performanse, pošto CP/M dosta drlja po disketama.
 
Takođe, terminalski izlaz emulatora predstavlja tekstualni režim CP/M-a, dok je X11 prozor zapravo emulacija TIM 011 grafičkog režima.
Da, tako je, mada bi u pravom emulatoru to bila ista stvar. Taj zasebni prozor je samo prečica za razvoj grafike, dok pravi emulator iz MAME-a ne postane funkcionalan. Kad će to biti - ne znam, ali znam da se polako radi i na tome... Hvala puno za linkove koje si postavio, ima baš svačega tamo! :)
 
Što se tiče "pravog" emulatora, problem je što u MAME core-u procesor HD64180 (ili Z180, skoro pa ista stvar) nije u potpunosti emuliran, nedostaju sve interne periferije (MMU, DMA, CTC, SIO, tajmeri...). A što se tiče CP/M softvera uopšte, ako taj program poseduje svoj konfiguracioni fajl (ili se na bilo koji način mogu prilagoditi komande koje se šalju terminalu za brisanje ekrana, pomeranje kursora itd) onda taj program neće imati problema da radi na TIM011. Na primer, dve veoma poznate CP/M igre, CatChum i Ladder, kao i Quatris (Tetris) sam konfigurisao pa rade na TIM-u, dok, na primer, Turbo Pascal 3.0 nisam uspeo ni da pokrenem (mada, možda sam skinuo neodgovarajuću verziju, npr. za 8086).
Terminal na TIM-011 je softverski, njegov emulator pokreće se prilikom startovanja računara. Ekran je uvek u grafičkom režimu, terminal emulator "ucrtava" karaktere u njega. Koristi veoma mali set komandi koje jako podsećaju na VT-52 terminal, i to su:
ESC C - brisanje od kursora do kraja reda
ESC E - brisanje ekrana i pozicioniranje kursora na koordinatu 0,0
ESC Yxy - pozicioniranje kursora na lokaciju x,y (vrednosti x i y treba uvećati za 32)
ESC 3, ESC 4 - postavljanje i isključivanje naglašavanja teksta
Što se ZCPR3 i kompletnog operativnog sistema tiče, dobro je što postoji source, ali sam upoređivanjem sa postojećim binarnim verzijama došao do zaključka da je tu dosta toga izmenjeno za TIM-011... Na primer, TIM uopšte neće da radi (tj. zabaguje se u toku dizanja sistema) ako prva komanda u startnoj sekvenci nije komanda kojom se inicijalizuje RAM disk. U samom kodu programa kojim se inicijalizuje isti taj RAM disk nema ničega što bi sprečilo podizanje sistema, tako da pretpostavljam da se neki "osnovniji" deo ZCPR3 oslanja na to da RAM disk postoji i da je inicijalizovan.
 

Prilozi

  • 20210228_204946.jpg
    20210228_204946.jpg
    262.1 KB · Pregleda: 18
  • 20210228_204937.jpg
    20210228_204937.jpg
    249 KB · Pregleda: 18
  • 20210228_204851.jpg
    20210228_204851.jpg
    256.4 KB · Pregleda: 32
Ako se tekstualni režim emulira, onda fontovi moraju nekako da se učitaju. Možda zato ima toliko memorije: možda koristi ram disk za brže učitavanje i skladištenje fontova. Nagađam, ali ima nekog smisla.

Video sam da na linku sa člancima iz domaćih časopisa ima tabela kodova. Izgleda da su tu neki najosnovniji ANSI kodovi.

Ovde ima par linkova za Turbo Pascal: http://www.retroarchive.org/cpm/lang/lang.htm. Samo pazi da ne skineš verziju za CP/M-86 ili CP/M-68K

Hvala puno za linkove koje si postavio, ima baš svačega tamo! :)
Čovek (Humongous CP/M arhiva) se potrudio da pokupi gotove sve CP/M arhive koje postoje na netu. :)

CD-ove sa izvornim kodom sam izvukao sa Archive.org. Njihov sistem pretraživanja je jako loš, ali se ponešto i može naći. Samo je šteta što veliki broj softvera ostane zakopan jer nije dobro tagovan kad je uploadovan.

Možda nije loše navesti i ovo: https://github.com/agn453/UNZIP-CPM-Z80 - verzija unzipa koja podržava deflate algoritam (infozip, pkzip 2.04g). Sa ovim bi trebalo da rade i zipovi pravljeni sa modernim programima za arhiviranje.

Ovo verovatno znaš, ali rekoh da napomenem: na modernim operativnim sistemima se za stare lbr i squeeze arhive može koristiti lbrate, za arc i ark arhive nomarch. Oba se bez problema kompajliraju sa MinGW tako da je moguće izgraditi ih i za Windows. A i varijanta originalnog arc arhivera je dostupna u repoima Linuks distribucija, a Windows port je ovde. Ali on barata samo sa arc arhivama.

Pitanjce u vezi fontova: vidim na slici u postu #183 i karaktere za crtanje. Da li ih stvarno podržava? Ako da, onda aplikacije mogu i da sadrže kvazi grafiku kao u dosu (Norton Commander, Xtree, Borland Turbo C i Pascal IDE, itd).
 
Poslednja izmena:
Još jedno pitanje: Tim 011 podržava 4 boje. Da li su te 4 boje fiksne, ili postoji neka paleta? Napr. CGA može da prikaže 4 boje od 16 boja. Ili je ovde fiksirano 4 boje. Vidim da je output sa bojama na 1084. Na nekom od linkovanih članaka u ovoj temi je čak pisalo da Tim 011 podržava 4 nijanse sive. Da li to znači da je monitor bio monohrom, ali je izlaz bio obojen? Ili je Žarko ovde izveo neku magiju. ;)
 
Pitanjce u vezi fontova: vidim na slici u postu #183 i karaktere za crtanje. Da li ih stvarno podržava? Ako da, onda aplikacije mogu i da sadrže kvazi grafiku kao u dosu (Norton Commander, Xtree, Borland Turbo C i Pascal IDE, itd).
U tom postu je i alat koji je Žarko napravio, pa sam se ja igrao. Zamenio sam u karakter generatoru mala slova sa pseudografičkim karakterima.
Još jedno pitanje: Tim 011 podržava 4 boje. Da li su te 4 boje fiksne, ili postoji neka paleta?
Fiksno, 3 nijanse sive (tj. zelene) i crna. Pošto je originalni izlaz na TTL nivou, ja sam ga uvezao na TTL ulaz 1084-ke tako da mogu da imam neki uvid u te nijanse, ali se to manifestuje u bojama (bela, zelena, ljubičasta), dok ne napravim konverter u analogni video gde će stvarno biti 3 nijanse sive. Inače, moj TIM-011 je urađen u samogradnji, i ugrađen u kutiju tastature od Iskra Delta terminala. Unutar kutije je još bilo mesta da se uglavi i Gotek floppy emulator, i prilagodna ploča za video signal.

20210213_194338.jpg20210221_025229.jpg
 
U tom postu je i alat koji je Žarko napravio, pa sam se ja igrao. Zamenio sam u karakter generatoru mala slova sa pseudografičkim karakterima.
Aha. Ali i to je super pošto se fontovi mogu dinamički menjati. CCP/ZCPR ne bi trebali biti case sensitive. Mislim (?), tako da je i to upotrebljivo. Mislim, u varijanti za file manager/lister program. Takođe bi verovatno bilo efikasno u igrama. Sa 4 boje može da se napravi nešto zanimljivo.

Inače, moj TIM-011 je urađen u samogradnji, i ugrađen u kutiju tastature od Iskra Delta terminala. Unutar kutije je još bilo mesta da se uglavi i Gotek floppy emulator, i prilagodna ploča za video signal.

Pogledajte prilog 300325Pogledajte prilog 300326

Lepo. :) Sam si ga sklopio na osnovu šema? Ploča deluje originalno. To je ona prazna ploča sa prethodnih strana teme? Može cela slika sa tastaturom (kućištem)? Čisto da vidimo kako to izgleda.

Izmena:

Da li mogu da se menjaju boja i pozadina teksta? Recimo, šta ako hoću da jedna reč ili jedna linija ima obrnute boje (crni tekst na beloj pozadini) - da li je to moguće?
 
Aha. Ali i to je super pošto se fontovi mogu dinamički menjati. CCP/ZCPR ne bi trebali biti case sensitive. Mislim (?), tako da je i to upotrebljivo. Mislim, u varijanti za file manager/lister program. Takođe bi verovatno bilo efikasno u igrama. Sa 4 boje može da se napravi nešto zanimljivo.
Za igre je mnogo efikasnije da se radi sa blokovima čija je širina umnožak od 4. To je i razlog zašto je napravljena ona mini-biblioteka za tile-ove koji su definisani kao 16x16 tačaka. Plan je i da se, takođe zbog brzine, naprave rutine za tekst koje bi radile sa 8x8 fontom, čime bi se dobilo 64x32 pozicije na ekranu. Tile-ovi se mogu definisati po želji, koristeći sve 4 nijanse, a ista stvar će biti i sa fontom kada bude zavšeno. Evo kako to može da izgleda u trenutnoj implementaciji:

Pozicioniranje tile-ova može da bude na svaka 4 piksela (polovina karaktera), pa je opseg koordinata 128x64.
Lepo. :) Sam si ga sklopio na osnovu šema? Ploča deluje originalno. To je ona prazna ploča sa prethodnih strana teme? Može cela slika sa tastaturom (kućištem)? Čisto da vidimo kako to izgleda.
Biće! Marko planira da sredi dosta dokumentacije koju je sam napravio analizirajući hardevr i softver TIM-a. Njegove analize su u osnovi svega što smo radili poslednjih nedelja.
Da li mogu da se menjaju boja i pozadina teksta? Recimo, šta ako hoću da jedna reč ili jedna linija ima obrnute boje (crni tekst na beloj pozadini) - da li je to moguće?
Sa originalnim terminal-emulatorom teško, koliko znam, jer ne podržava takve mogućnosti. Pošto source-a za to nema, napraviti izmene bi bilo prilično teško, bar Marku i meni. No, baš iz tog razloga je u planu font biblioteka za 64x32 režim koja se neće moći koristiti u radu sa ZCPR-om, ali će se moći koristiti iz programa za TIM koji je koriste. Šta bi sve bile mogućnosti takve biblioteke - videćemo, ali inicijlano samo osnovne. Svakako će sve biti open-source, bilo bi mi drago na ljudi dodaju mogućnosti koje im trebaju ili ih interesuju.
 
Konačno je završena i asemblerska rutina za iscrtavanje linija, evo koja brzina je na pravoj mašini (Markov snimak, pa zato u boji :) )
 
Osnovno ispisivanje stringova sa 8x8 fontom radi kako treba, kao i program za konverziju 8x8 fontova u PNG formatu (zasad po C64 rasporedu) u TIM 8x8 font.
1616046719888.png
 
Nešto sam sređivao moju arhivu retro dokumentacije i naiđem na nešto vezano za Z180. HD64180 je direktna preteča Z180, tako da svaka Z180 varijanta podržava režim kompatibilnosti sa HD64180. HD64180/Z180 su u suštini proširene varijante Z80 sa nekim integrisanim mogućnostima (MMU, DMA, dva serijska porta).

Evo nešto malo dokumentacije za HD64180 i Z180. Možda nije ništa novo, ali možda bude i od koristi. Našao, pa delim dalje. :)
https://drive.google.com/drive/folders/1JnFKZAUF_IKB6Jsnhxhqvn6VY0ODqv87?usp=sharing

Među ovim papirima je vodič za prelazak sa HD64180 na Z180:
To ensure a more reliable source of Z80-based products, and avoid product obsolescence, ZiLOG recommends that customers migrate from Hitachi‘s HD64180 devices to ZiLOG’s Z80180 or Z8S180 embedded microprocessors. This Application Note documents the changes needed to seamlessly migrate from one chipset to the other. ZiLOG’s Z80180 is a pin-to-pin compatible part with Hitachi’s HD64180. The device resets to a 64180-compatible state, so that no changes are required to software developed on the 64180. ZiLOG also offers the Z8S180, which is
the enhanced static version of Z80180. Refer to the application note “Migrating from the Z80180 to Z8S180” on ZiLOG’s website for more information.
 
Poslednja izmena:
Hvala što si mi skrenuo pažnju. Ne bih ni primetio. Kod mene je otvaralo normalno. Pošto ne mogu više da promenim poruku (neko je odgovorio na nju), evo ga ispravan link u ovoj poruci:
 
Još jedan eksperiment sa TIM--011 grafikom, čisto da vidim koliko brzo može da ide. Nema nikakve logike, samo iscrtavanje u petlji. Gnjavio sam Marka da to pusti na TIM-u i da mi snimi (hvala puno još jednom!) da vidim kakvu brzinu mogu otprilike da očekujem. Nije loše :)
 
Tu sam ;) Izvinite na odsustvovanju sa nastave (TIM-011 je školski kompjuter! ;) Potrudiću se da budem malo aktivniji na Benchmarku.

Elem, vidim da ste dosta toga napisali, i svakako ću to detaljnije da proučim. Ali, na prvu loptu, navešću neke detalje kojih sam se u međuvremenu prisetio.

Najpre, nisam siguran da li HD64180 ima u sebi tajmere, a čini mi se da ih Tim nema kao eksterne čipove. Ipak, tu se svakako dešava nešto zanimljivo. Kada disableujete interapte (mašinskom naredbom DI), možete primetiti najmanje tri stvari. Prvo i očigledno: kursor prestaje da blinka. Drugo: časovnik realnog vremena se zaustavlja.

Treće je najzanimljivije. Kada pri normalnom radu (enableovani interrupti) odradite "nešto" sa floppyjem (običan DIR je dovoljan), pa odmah izvadite disketu, možete još nekoliko sekundi čuti (doduše vrlo, vrlo slabo) rad motora drivea, a može se i bez otvaranja računara kroz prorez za floppy videti da se "tu nešto vrti" ;) Potom se motor zaustavlja. E, toga nema pri disableovanim interruptima; motor se vrti "beskonačno".

Dakle, očigledno je da tu postoji "nešto" što radi u pozadini, i moguće je da se može koristiti i u razne druge svrhe, kao što je pomenuto mrdanje spriteova :)

P. S. Je l' probao neko da pravi ili instalira sa Interneta nešto poput Space Invadersa? Pitam zato što nisam siguran koliko je to svrsishodno, zbog tastature, koja možda nije baš pravljena za tako ozbiljne aplikativne programe ;)
 
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...
 
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.
 
Nazad
Vrh Dno