su - \mathfrak{M}ĦĒNJMARCHON (neregistrovaný)
Z Norton utilities ma fascinovali za cias DOSu len dve veci:
-diskedit, tam sa dalo smatrat pekne po disku a jak som poznal FAT, tak sa dalo trebars veci opravovat rucne, ked sa FS trocha rozsypal
-kurzor, ktory v textovom mode neskakal po znakoch, ale po pixeloch, podobnu haluz mal Dos Navigator ako screensaver (mix grafickeho modu s textovym, v pozadi behali take tri RGB pruhy)
S tou kombinaci grafiky a textu to neni uplne presne - ten mysoidni kurzor je delany v normalnim textovem rezimu tak, ze se ctyri znaky (treba prvni ctyri z ASCII, ty nejsou obsazeny nicim rozumnym) rezervuji pro zobrazeni sipky a pri posunu kurzoru po obrazovce se:
1) zjisti nad kterymi znaky se kurzor nachazi (jsou max 4)
2) bitove mapy techto znaku se zkopiruji do rezervovanych pozic
3) k temto bitovym mapam se priORuje bitmapa kurzoru
4) puvodni ASCII kody znaku na obrazovce se nahradi onou upravenou ctverici
Screensaver z DN je take delany v textovem rezimu - pouze se meni jedna ci dve barvy v palete a to tak, aby probehla synchronizace se zpetnym behem paprsku. Taky si vsimni, ze treba pod Windows se to trha, protoze se synchronizace plete s dalsimi prerusenimi, ktere nejdou maskovat.
su - \mathfrak{M}ĦĒNJMARCHON (neregistrovaný)
Jj, viem ze sa ten kurzor da tak robit. Ale velmi dobre si pamatam, ze VGA karty obsahovali taku featuru, ze rezim bol textovy a zaroven sa dali tusim priamo vkladat pixely alebo nieco, co normalne v textovom mode neslo (musel by som prehrabat stare interrupt listy, ale pamatam sa, ze nieco take existovalo). Potom je celkom tazke definovat, co to je textovy mod ;-)
Ad screamtracker: mna zo zaciatku trocha miatol font, ale videl som to dost rychlo.
Ja som na detekciu, ci ide o text/grafiku, pouzival asi 5-instrukciovu funkciu, ktora fungovala spolahlivo. Neviem to momentalne nejak vygrepovat zo svojich starych zdrojakov, asi preto, ze tam nie su vsetky (zbytok je dakde pod stolom v krabici).
To by me docela zajimalo, sam jsem VGAcko taky dost tweakoval, ale ke kombinaci text+grafika jsem se nedostal. Pokud bys nasel nejake informace o te kombinaci text+grafika, sem s nimi, zajima me, jak to funguje (jestli se treba jedna bitova rovina pouziva pro text, druha pro fonty a treti+ctvrta pro grafiku).
su - \mathfrak{M}ĦĒNJMARCHON (neregistrovaný)
OK, ja skusim prehrabat tie stare interrupt listy a stare programy. Ak si tu fintu spravne pamatam, tak karta si "myslela", ze je v textovom mode, je tam normalne textovy kurzor a zapis na 0xb800:0 (ci jak bola ta adresa) zobrazuje znaky, ale zaroven bolo mozne nejakym trikom davat tam pixely tusim.
to bude skor tym, ze ked sa pouzije rezim 640x480x4bpp je v nom k dispozicii znakovy generator a zapisom do segmentu 0xb800 reagoval a znak vykreslil do grafickej pamate, ktora zacinala kdesi okolo 0xa000, avsak tam ho uz bolo mozne uplne lubovolne prekreslovat grafikou...
su - \mathfrak{M}ĦĒNJMARCHON (neregistrovaný)
Toto som nemyslel. Ak sa pamatam, bol to mod 640x400 (tj. 80x25 znakov po 8x16 pixeloch), bol tam blikajuci kurzor (ako v textovom mode). Media so starymi programami som uz nasiel, este zohnat mechaniku a ci to po 10 rokoch precita. "Mladsie" media si to odputovali niekam, keby som si tak pamatal, kde som ich dal... Ked nas o 1000 rokov archeologovia vykopu, som zvedavy, co si pomyslia o tonach "placatych lesklych predmetov", asi si budu mysliet, ze sme ich uctievali. ;-)
su - \mathfrak{M}ĦĒNJMARCHON (neregistrovaný)
No aspon ze \pi sa spomina v dostatocne vela knihach, tak si mozno nebudu mysliet, ze sme boli az taki blbi ;-)
Spat k povodnemu problemu: Google je na slovo skupy a stare linky ma pred chvilou hodili namiesto hladaneho zip archivu na 'Seventh-day Adventist Church of Braintree'. Hm...
Ale mozno je to toto: http://www.ctyme.com/intr/rb-0169.htm ("alternative function select - video addressing" sa mi zda povedome...). Cely trik bol nejak zalozeny na tom, ze sa tusim najprv preplo do grafiky, tam sa urobila nejaka cierna magia, aby cez registre VGA slo sypat pixely aj v textovom mode. Ale je mozne, ze to fungovalo az u kariet s LFB (linear frame buffer), to som si uz neni isty.
Ak sa spravne pamatam, bol to velmi podobny trik ako pristup k 4GB RAM v realnom mode - najprv sa preplo do chraneneho modu, nasekali sa registre tak, aby "programatorsky nepristupne casti" registrov obsahovali "flat" deskriptory a preplo sa naspat do realneho modu. Do dokonalosti to doviedli nedokumentovane instrukcie LOADALL/SAVEALL.
Proboha, to snad ne. Zkusím to vysvětlit. VGA má možnost mít generátor znaků pro textový režim v RAM. Díky tomu bylo možné třeba zobrazovat češtinu na VGA (vždy tam byla utilita na natažení fontu, buď příkaz mode od MS, nebo jiná). Teď si představ, že si vezmeš znak číslo 255, a nakreslíš tam šipku. No a máš kurzor. Když chceš kurzor přes písmenko A, nakreslíš do definice znaku 255 kopii znaku A, a přes něj šipku. Ten znak A na příslušné pozici na obrazovce nahradíš znakem 255. Protože šipka může přesahovat na víc než jedno písmeno, musíš v praxi mít takové znaky čtyři. Ostatní efekty jsou dělané obdobně. Na nějakém 8-bitu byl takhle údajně udělaný i Manic Miner :)
su - \mathfrak{M}ĦĒNJMARCHON (neregistrovaný)
Zmena fontov v textovom mode je mi doverne znama, hral som sa s tym nejaky cas. To ale nie je to, co myslim. Urcite ide spravit "spojity" kurzor cez zmenu fontu, to nepopieram. Ale pokial sa pamatam dobre, tak v Parenisti niekedy medzi cca 1997-2001 sa objavil programek, ktory znasilnil (S)VGA kartu tak, ze po prepnuti grafika/cierna magia/text naspat dokazal hadzat pixely aj v textovom mode. Tusim na to treba bolo este ovladnut refresh obrazovky, aby nezmazal nakreslene pixely, ale to uz nebol taky problem.
Standardnou metodou google&click&click&click... sa mi nepodarilo dopatrat sa archivu Parenista, takze to nemozem potvrdit ani vyvratit.
Ale pre tu srandu som uploadol par vytvorov (vacsinou je ten kod tak 10-12 rokov stary, az na gr_edit, mypong a siddha2, tie su asi len 7 rokov stare). Tie programky su celkom sranda, je tam aj skompilovana verzia, spustitelna napr. pod dosboxom aj zdrojaky. Hlavne tie hlody co to hadze, mozu aspirovat na blbinku tydne :-)
Ad siddha2: skuste pre srandu najprv s defaultnym nastavenim, potom: bitova operacia: ziadna, midtwist: gradient, max velkost grafu: 150, tajne posolstvo: ano, pripadne pod dosboxom prestavka medzi obrazmi: 0
Neboj, CDcka uz v te dobe budou maximalne tak "placate pruhledne kotoucky", po laku ani kovu tam nebude ani stopy. Staci se mrknout na nejaka starsi (treba i namocena) cedecka, kde se datova vrstva odlupuje.
Ale mas pravdu v tom, ze dnesni "vek informaci" vek bude pro historiky zajimavy tim, ze jsme jako lidstvo spoustu informaci uz ztratili (procentuelne asi nejvic za celou svou historii) a jeste jich mnoho ztratime. Ja a ty mame uz dnes problemy s disketami a je to tak 10 let, co jsme je vsichni vesele pouzivali.
A uz dneska existuji specializovane firmy, ktere vyhledavaji, nakupuji a opravuji starsi datove mechaniky (stitkovace, derovacky pasek, starsi paskove a diskove mechaniky apod.) a docela dobre se zivi "zachranovanim" dat. To muze byt celkem zajimava prace - jak technicky, tak i programatorsky - prozkoumat stare souborove formaty nejakych proprietarnich aplikaci, oprasit EBCDIC apod.
su - \mathfrak{M}ĦĒNJMARCHON (neregistrovaný)
Nasiel som aj cca 9 rokov stare CD a este ide stale citat bez problemov :-)
Nasiel som zatial aspon tu detekcnu rutinu na zistenie text/grafika:
mov dx,0x3ce
mov al,5
out dx,al
inc dx
in al,dx
mov [result],al
ret
Ak to vratilo 0x10, mod je textovy, inak grafika (fungovalo co sa pamatam vzdy spolahlivo). Tiez som to musel teraz disassemblovat z *.obj, pretoze zdrojak sa stratil niekde v nedohladne. Hiew, aka nostalgia...
Obavam se, ze takto to na kartach VGA nemuze fungovat. V rezimu 640x480x4bpp (hi-res VGA) je cela obrazova pamet alokovana do ctyr bitovych rovin. Sice je z techto rovin viditelnych "pouze" 38400 bytu, tj. celkem 153600 (x4), ale ty zbyle pixely je take mozne uvidet klasickym skrolovanim (pouzival to napriklad jeden prehravac MODu). To znamena, ze VGAcko nema v tomto grafickem rezimu ani jeden volny bit na to, aby v nem byl znakovy generator, nehlede k tomu, ze na segmentu 0xb800 nic v teto chvili nebude (maximalne sekundarni adapter MDA nebo Hercules :-)
V chranenem rezimu tu funkci nasimulovat muzete - staci pri pristupu do segmentu 0xb800 vyhodit chybu strankovani a reagovat na ni tak, ze se prislusny znak vykresli, ovsem "rucne", s vyuzitim bitmap znaku ulozenych nekde v RAM.
su - \mathfrak{M}ĦĒNJMARCHON (neregistrovaný)
Myslim, ze s tym generatorom ma predrecnik pravdu, tusim sa dalo karte rozkazat, aby pri zapise na b800:0 kreslila pismena aj v grafike. Prave som to sice skusal pod dosboxom a nefunguje mi to, ale uz si nepamatam presne, jak ten generator zapnut. No ale mozno sa mylim.
Dobre, ale nemohlo to byt v realnem rezimu CPU na VGA v grafickem rezimu. Klasicke VGAcko s 256kB pameti proste vsechnu pamet alokovalo do bitovych rovin a na textove fonty uz nezbylo misto. Take sekvencer je v grafice totalne preprogramovan, takze do pameti saha jinak, nez v textovych rezimech (cte jinak treti bitovou rovinu, kde jsou v textovych rezimech bitove masky znaku, ktere tam vsak musi nacpat BIOS pri prepinani do textu, VGAcko si ty znaky z prstu nevycucne).
Nejedna se spis o nejake vychytavky treba Tridentu nebo VESA BIOSu (ten byl v protected mode docela vychytany a pres page-fault toho slo udelat hodne)?
Mam doma schovanou starou dobrou 486ku s VLB grafickou kartou a DOSem, takze muzu neco vyzkouset i na holem zeleze, v tomto pripade se asi DOSboxu moc verit neda.
su - \mathfrak{M}ĦĒNJMARCHON (neregistrovaný)
Jj, hole zelezo so starym dosom je zaklad.
Ad Trident BIOS a stara VGA: mal som najprv staru VGA (ISA, myslim prave s 256kB), ale tieto experimenty som robil vacsinou uz na Tridente a neskor S3. Takze najskor mas pravdu.
Ad spolahlivost dosboxu: urcite to neni DOS na holom zeleze, ale z vlastnej skusenosti "vernost emulacie" je celkom vysoka. Moje programky, ktore zasadne nefungovali pod win (test VM8086 modu via CR0/CR3, potom pokus o GPF, atd.) si v dosboxe nic nevsimnu. S casovanim interruptov je to uz trocha horsie, ale stale celkom ujde.
Naspat k hybridnemu modu text/grafika:
-vyhrabal som par veci, co sa na to podobaju, bohuzial komentarov je malo a uz im skoro nerozumiem
-myslim, ze ta finta hybridneho modu bola bud ukazana v nejakom Parenisti (najskor, jedno zrovna mam zachovale) alebo nejaky kus kodu z Assembly (pripadne vsetko co mam mozem dakde uploadnut)
který obsahuje popis převážně MS-DOS interruptů, ale najdou se tam i obecně interrupty pro x86(BIOS, DOS klony, ...) a také seznam/popis portů. Snad nikdy mne nezklamal a většinou jsem tam našel podrobnější informace než kde jinde.
Zhruba pred 2/3 roky jsem si programoval SVGA driver v DOSu. Precetl jsem mnoho ze SysManu, TechHelpu a Ralf Brown's interrupt listu i jinych zdroju, mel jsem v te dobe nejdrive 512Kb VGA Trident a pozdeji 1 MB, 2 MB a 4 MB graficke karty. Uz na te 512Kb (Trident) se mi podarilo naprogramovat funkce pro tvorbu vlastnich fontu v textovem rezimu, vlastne se o ne starala graficka karta a je jen zavolal a dodal jim mapu. Mel jsem na vyber mezi 8x16 a 16x16, cili nebyl by problem nahradit jeden konkretni znak ve videopameti mym vlastnim znakem, napr. tak, aby to vypadalo jako standardni graficky kurzor mysi (sipka) libovolnym znakem s rozmery 16x16. Pokud si dobre pamatuji vlastni znak jsem si nemohl vytvorit jeho pridanim, ale pouze bylo mozne upravit jiz existujici znak 0..255 (ASCII) a pak ho ulozit do videopameti (textovy rezim segb800), kde bylo vse ve formatu:
Znak Byte 0..255
Word Attribut (popredi a pozadi) 0..65535
Takze tam neslo o pixely, nybrz o upravu existujiciho znaku ve fontu, slo i predefinovat veskera pismena a tim vlastne vytvorit svuj vlastni font a v SysManu je vse perfektne dokumentovano
To je v poradku, mate naprostou pravdu, tvorbu SW fontu zvladala uz EGA, i kdyz tech 16x16 je trosku podezrele :-), mam dojem, ze byly povoleny velikosti od 8x1 do 8x32? (mezi to patri "klasiky" 8x8, 8x14 a 8x16). Ale predrecnici meli na mysli kombinaci textoveho a grafickeho rezimu, tj. zapis textu (treba od segmentu 0xb800) a soucasne i grafiky (segment 0xa000).