??Nova unita CRT pro PASCAL

Radek Benedikt benedikt
Středa Březen 17 11:44:29 CET 2004


> > No moc tomu taky nerozumim, ale pokusim se to vysvetlit:
> > Ta chyba spociva v tom, ze pri pouziti jednotky CRT se pri spusteni 
> > (ale pravdepodobne az v exe tvaru) prelozeneho programu kalibruje 
> > konstanta pro cas (vlastne je to asi proto, aby 1 sekunda trvala na 
> > vsech pocitacich stejne). Ta konstanta se zjisti tak, ze se pocita 
> > pocet impulsu (?z neceho?) za urcity cas. Logicky... na rychlejsim 
> > pocitaci se pocita rychleji, az to citane cislo i za kratky okamzik v 
> > pameti pretece => Runtime error.   OK? Myslim, ze to takhle nejak 
> > bude.
> > 
> > Karel N.
> 
> Doplnuji vyse uvedeny prispevek o to, ze na kazdem PC se kazdych 55ms
> inkrementuje bunka na adrese 40h:6ch. Tohoto se da vyuzit, pokud je 
> potreba vytvorit smycku, jejiz potrebna doba na vykonani nebude 
> zavisla na procesoru. Zjistime-li, kolikrat se tato smycka provede za 
> 55ms, je jednoduche zjistit, kolikrat ji musime vykonat, abychom 
> ziskali cas napr. 1ms. K tomu se ovsem musi vydelit 2 cisla a protoze
> registr procesoru ma konecnou velikost, tak na PII dojde k preteceni 
> po deleni, ktere se v tomto pripade hlasi jako deleni nulou.
> 
Je to prave obracene, meri se jaky cas uplyne za dobu vykonavani 
N-instrukci.

Z "volne" prelozene dokumentace od TPPATCH predkladam:
 (v originale je to podrobnenji i s vypisem casti kodu a bez ceskych 
prikladu programu)

TPPATCH je oprava chyby projevujici se ve vsech programech 
ktere jsou naprogramovany za pouziti prekladace Turbo Pascal a 
bezicich na pocitacich s procesorem Pentium Pro 200MHz nebo 
rychlejsim.

Tato chyba se projevuje hlasenim "runtime error 200" zpusobenym 
vykonanim inicializace procedury Delay(). Chyba zpusobi, ze 
vysledek po vykonani instrukce DIV se nevejde do ciloveho registru.

Chyba je zpusobena neustalym zrychlovanim pocitacu ze dne na 
den. Pro kalibraci procedury Delay() je vyuzito mereni kolik tiku 
casovace uplyne za dobu potrebnou pro vykonani kalibracniho 
poctu instrukci. Vzhledem k tomu, ze nove procesory jsou tak 
rychle, ze casovac nestihne vykonat za dobu mereni ani jedinny tik 
a ani Pentium Pro neni tak genialni aby umel delit nulou, skonci 
program chybou.

Vzhledem k teto chybe musite "ozaplatovat" vsechny soubory, 
ktere byly kompilovany Turbo Pascalem, napr. T602, M602,... Tato 
procedura je pouzitelna rovnez na aplikace zkompilovane pro 
chraneny mod.

Pro "ozaplatovani" software bez toho, ze by jste meli zdrojove 
texty, musite uplatnit jine metody, nez vymenu Delay() ci jine "low-
level" triky.

"Zaplata" Andrease Bauera <andi.tio@hit.handshake.de> osetruje 
tuto chybu testem na nulu pred delenim. Vzhledem k tomu, ze 
timto testem narusta delka programu, autor dovedne vyuzil mirnych 
laxnosti programatoru a byl donucen elegantne optimalizovat i cast 
nasledujiciho programu. Podrobnosti o teto uprave lze najit v 
originalni doprovodne dokumentaci.

Preklad prevzat z http://www.lphard.cz


bye, Radek (benedikt@lphard.cz)





Další informace o konferenci Hw-list