??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