S..C..R..O..L..L..I..N..G Mnohý začínající programátor chce, aby mu v nějakém programu (např. plošinová skákačka) plynule scrolloval obraz na monitoru. Nejdříve to zkouší datově, třeba takhle: procedure Move386(source_seg,source_ofs,dest_seg,dest_ofs:word); assembler; asm mov ax,source_seg mov ds,ax mov si,source_ofs mov ax,dest_seg mov es,ax mov di,dest_ofs mov cx,count rep movsd end; Pokud to pustí na počítači s procesorem 486, řekne si: "nádhera" ! A hned vesele programuje dál. Když zdárně dokončí svoji plošinovku, jejíž virtualní obrazovka se krásně plynule (no občas trochu trhne) scrolluje, vypustí svůj nový produkt do světa a ouha ! Někdo mu pošle mejl, že si ji pustil na své 386 a že to skoro vůbec nejde hrát, protože v situacích, kdy je na obrazovce hodně sprajtů, se obraz neskutečně trhá a někdy se i sekne docela. Programátor nato: "To není možný, dyť to fachčilo perfektně, no ale na třílitru sem to nezkoušel." Když si to vyzkouší i na té nejlepší 386 (DX40MHz) zjistí, že podaná stížnost je opravdu na místě. (Z toho mimochodem plyne, že je záhodno programovat a odlaďovat program s instrukčním souborem 80386 na pravé 386 a ne se holedbat tím, jak je to všechno rychlé na mém Hexiu. Může to být ale i obchodní záměr, viz. Wing Commander 3.) Kdyby však náš programátor využil videopaměti a ke scrollování použil následujících pár instrukcí: procedure setstartaddr(new_addr:word); assembler; asm {----------------} mov dx,3dah @1: in al,dx and al,8 jz @1 @2: in al,dx and al,8 jnz @2 {----------------} mov cx,new_addr mov dx,03d4h mov al,0ch mov ah,ch out dx,ax inc al mov ah,cl out dx,ax end; Jde v podstatě o to, říci kartě, odkud má začít vyobrazovat videopaměť na stínítko monitoru. První část (vymezená čarami) je takzvaný wait-retrace cyklus (čekání na paprsek). Jedná se o jakýsi delay, který má opodstatnění při samotném scrollování. Pokud by jste jej nepoužili, došlo by k okamžitému přesunu začátku zobrazování a bylo by po scrollingu. Samotná funkce set-start-addr je vlastně hardwérová operace grafické karty a nejde tedy o přesun dat jako v minulém případě. K vlastnímu plynulému scrollingu už není daleko. Stačí nahodit grafiku, něčím zaplácat videopamět a použí např. tento cyklus: for Y:=0 to 199 do setstartaddr(Y*80); a měli byste vidět krásně plynulý scrolling i na PC-XT. Pokud je tohleto pro vás novinka a máte stejné problémy jako můj smyšlený programátor, zkuste to a když vás bude něco ohledně scrollingu zajímat více, napište mi o svém problému na jednu z mých E-mail adres. ReDox