🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
13 messages
13 total messages Started by =?ISO-8859-2?Q?A Fri, 16 Apr 2010 00:23
Nie zagadka, tylko pytanie
#2149
Author: =?ISO-8859-2?Q?A
Date: Fri, 16 Apr 2010 00:23
14 lines
766 bytes
Jaki proponujecie spos�b sprawdzenia, czy progam chodzi na Pentium czy
na starszym badziewiu?

Konkretnie problem jest taki: jest program DOSowy, ma ju� ze 25 lat,
jest troch� rozwijany. Niekt�rzy ludzie maj� jeszcze 486, s� nawet dwa
386DX40. Ja chcia�bym u�y� instrukcji RDTSC, oczywi�cie pod warunkiem,
�e procesor takow� posiada (konkretnie chodzi o reimplementacj�  funkcji
Delay() w Turbo Pascalu - gdy nie b�dzie RDTSC, wykonany zostanie
klasyczny wariant z p�tl� programow� przerobion� na 32 bity, �eby
unikn�� b��du 200, znana sprawa). Je�li b�die mo�na u�y� RDTSC, to
b�dzie lepiej, bo Delay() b�zie lizone w czasie rzeczywistym, a nie w
czasie, kt�ry procesor po�wi�ci zadaniu.

Re: Nie zagadka, tylko pytanie
#2150
Author: Bernard
Date: Fri, 16 Apr 2010 08:09
23 lines
1281 bytes
On 2010-04-16 00:23, Andrzej Gra�y�ski wrote:
>
> Jaki proponujecie spos�b sprawdzenia, czy progam chodzi na Pentium czy
> na starszym badziewiu?
>
> Konkretnie problem jest taki: jest program DOSowy, ma ju� ze 25 lat,
> jest troch� rozwijany. Niekt�rzy ludzie maj� jeszcze 486, s� nawet dwa
> 386DX40. Ja chcia�bym u�y� instrukcji RDTSC, oczywi�cie pod warunkiem,
> �e procesor takow� posiada (konkretnie chodzi o reimplementacj� funkcji
> Delay() w Turbo Pascalu - gdy nie b�dzie RDTSC, wykonany zostanie
> klasyczny wariant z p�tl� programow� przerobion� na 32 bity, �eby
> unikn�� b��du 200, znana sprawa). Je�li b�die mo�na u�y� RDTSC, to
> b�dzie lepiej, bo Delay() b�zie lizone w czasie rzeczywistym, a nie w
> czasie, kt�ry procesor po�wi�ci zadaniu.

Najpierw sprawdzamy, czy procesor ma CPUID (bit w EFLAGS). Je�li ma -
dalej jest prosto. Je�li nie ma - mo�e to by� najwy�ej 486 i TSC nie ma
na pewno.
Istnieje ca�a masa test�w umo�liwaj�cych stwierdzenie typu <= 486 na
podstawie zachowa� procesora przy wykonaniu instrukcji.
Niezale�nie od TSC istnieje jeszcze timer systemowy i zmienna timera
(zlicza interwa�y ok. 55 ms) w pami�ci, dost�pna dla apikacji DOSowych.

Re: Nie zagadka, tylko pytanie
#2151
Author: =?ISO-8859-2?Q?A
Date: Fri, 16 Apr 2010 13:41
97 lines
2189 bytes
Bernard pisze:
> On 2010-04-16 00:23, Andrzej Gra�y�ski wrote:
>>
>> Jaki proponujecie spos�b sprawdzenia, czy progam chodzi na Pentium czy
>> na starszym badziewiu?
>>

[CIACH]

>
> Najpierw sprawdzamy, czy procesor ma CPUID (bit w EFLAGS). Je�li ma -
> dalej jest prosto. Je�li nie ma - mo�e to by� najwy�ej 486 i TSC nie ma
> na pewno.

Dzi�kuj�, ten test ju� znam.



> Istnieje ca�a masa test�w umo�liwaj�cych stwierdzenie typu <= 486 na
> podstawie zachowa� procesora przy wykonaniu instrukcji.

To te� jest powszechnie znane, cho� teraz nie jest mi potrzebne.


> Niezale�nie od TSC istnieje jeszcze timer systemowy i zmienna timera
> (zlicza interwa�y ok. 55 ms) w pami�ci, dost�pna dla apikacji DOSowych.

Oczywi�cie, i gdy nie by�o RDTSC to by� jednyn ysposob odmierzania
czasu, cho� ma�o dok�adny. W Turbo Pascalu zaimplementowano programowo
dok�adniejszy zegarek: kr�ci si� pewn� wzorcow� p�tl�, zlicza jej obroty
mi�zy kolejnymi tylkni�ciami zegara pod adresem BIOS:$6C, a potem
przelicza jedn� milisekund� na liczb� obrot� tej p�tli. To by�o dobre
jeszcze dla 386, ale teraz jest do�� zawodne, bo:

1. W systemie wieloprogramowym p�tla kr�ci si� tylko wtedy, gdy zadanie
ma przydzielony czas procesora

2. W nowszych procesorach czas jednego obrotu p�tli mo�e by�
zr�nicowany, ze wzgl�du na mechanizmy optymalizacyjne (cacheowanie,
potok rozkaz�w).

W efekcie Delay(1000) nie zawsze daje jedn� sekund� oczekiwania. Te
mankamenty znikn�, je�li zamiast programowej p�tli u�yjemy RDTSC:


1. czekamy, a� zmieni si� warto�� zegara BIOS:$6C

2. Odczytujemy RDTSC i zapisujemy do TSCSTART

3. czekamy, a� zmieni si� warto�� zegara BIOS:$6C

4. Odczytujemy RDTSC i zapisujemy do TSCSEND

5. Obliczamy liczb� tykni�� TSC na milisekund�:

   TSCPERMSEC = (TSCEND-TSCSTART)*(1193180/65536/1000)

i odt�d mo�emy odmierza� interwa�y w czasie rzeczywistym.



Delay(MSec:Word):



TSCCOUNT := MSec * TSCPERMSEC;

TSC <- RDTSC
TSCEND <- TSC + TSCCOUNT-1

repeat
   TSC <- RDTSC
until TSC >= TSCEND;
























Re: Nie zagadka, tylko pytanie
#2152
Author: Wojciech =?ISO-8
Date: Fri, 16 Apr 2010 13:48
8 lines
120 bytes
Andrzej Gra¿yñski <grazynsk@petex.com.pl> wrote:

> [...]

Pytanie takie: te programy dzia³aj± pod DOS-em?

w.

Re: Nie zagadka, tylko pytanie
#2153
Author: =?ISO-8859-2?Q?A
Date: Fri, 16 Apr 2010 15:16
12 lines
369 bytes
Wojciech Mu�a pisze:
> Andrzej Gra�y�ski <grazynsk@petex.com.pl> wrote:
>
>> [...]
>
> Pytanie takie: te programy dzia�aj� pod DOS-em?
>
> w.
Niekt�re pod DOSem+DPMI inne w oknie DOSowym Windows, niekt�re w DOSemu.
1 760 000 linii w Pascalu nie op�aca si� przerabia� na co� nowszego.
Chodzi bez zarzutu, bez trudu daje si� rozbudowywa�.

Re: Nie zagadka, tylko pytanie
#2154
Author: Wojciech =?ISO-8
Date: Fri, 16 Apr 2010 15:35
16 lines
536 bytes
Andrzej Gra¿yñski <grazynsk@petex.com.pl> wrote:

> > Pytanie takie: te programy dzia³aj± pod DOS-em?
> 
> Niektóre pod DOSem+DPMI inne w oknie DOSowym Windows, niektóre w DOSemu. 
> 1 760 000 linii w Pascalu nie op³aca siê przerabiaæ na co¶ nowszego. 
> Chodzi bez zarzutu, bez trudu daje siê rozbudowywaæ.

Nie dlatego pyta³em. Gdyby dzia³a³y tylko pod DOS-em, to
mo¿naby spróbowaæ przeprogramowaæ zegarek RTC, ¿eby tyka³
szybciej i tylko zczytywaæ jaki¶ globalny licznik.

w.

Re: Nie zagadka, tylko pytanie
#2155
Author: Michal Schulz
Date: Fri, 16 Apr 2010 15:47
33 lines
1127 bytes
Andrzej Grażyński wrote:

> W efekcie Delay(1000) nie zawsze daje jedną sekundę oczekiwania. Te
> mankamenty znikną, jeśli zamiast programowej pętli użyjemy RDTSC:

za to pojawia sie inne problemy.

> 1. czekamy, aż zmieni się wartość zegara BIOS:$6C
>
> 2. Odczytujemy RDTSC i zapisujemy do TSCSTART
>
> 3. czekamy, aż zmieni się wartość zegara BIOS:$6C
>
> 4. Odczytujemy RDTSC i zapisujemy do TSCSEND
>
> 5. Obliczamy liczbę tyknięć TSC na milisekundę:
>
>    TSCPERMSEC = (TSCEND-TSCSTART)*(1193180/65536/1000)
>
> i odtąd możemy odmierzać interwały w czasie rzeczywistym.

Badz ostrozny. W niektorych procesorach RDTSC liczy cykle w rozny sposob. W
przypadku procesorow obslugujacych SpeedStep (Intel) albo Cool'n'Quiet (AMD)
rdtsc moze zliczac cykle zaleznie od tego, z jaka predkoscia pracuje CPU w
danej chwili. Twoja petla kontrolna zmierzy sie na przyklad przy 800MHz, a
pozniej np. CPU przelaczy sie na 1800MHz.

Jezeli to mozliwe, uzyj timera z lokalnego APIC. Jest troche mniej dokladny
(100MHz, na przyklad) ale za to niezalezny od predkosci taktowania CPU.

--
Michal Schulz

Re: Nie zagadka, tylko pytanie
#2156
Author: "Bogdan (bogdro)
Date: Fri, 16 Apr 2010 17:26
23 lines
1173 bytes
W dniu 16.04.2010 00:23, Andrzej Gra�y�ski pisze:
>
> Jaki proponujecie spos�b sprawdzenia, czy progam chodzi na Pentium czy
> na starszym badziewiu?
>
> Konkretnie problem jest taki: jest program DOSowy, ma ju� ze 25 lat,
> jest troch� rozwijany. Niekt�rzy ludzie maj� jeszcze 486, s� nawet dwa
> 386DX40. Ja chcia�bym u�y� instrukcji RDTSC, oczywi�cie pod warunkiem,
> �e procesor takow� posiada (konkretnie chodzi o reimplementacj�  funkcji
> Delay() w Turbo Pascalu - gdy nie b�dzie RDTSC, wykonany zostanie
> klasyczny wariant z p�tl� programow� przerobion� na 32 bity, �eby
> unikn�� b��du 200, znana sprawa). Je�li b�die mo�na u�y� RDTSC, to
> b�dzie lepiej, bo Delay() b�zie lizone w czasie rzeczywistym, a nie w
> czasie, kt�ry procesor po�wi�ci zadaniu.

http://rudy.mif.pg.gda.pl/~bogdro/dos/cpu_tut.htm

--
Pozdrawiam/Regards - Bogdan                     (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm:  pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft

Re: Nie zagadka, tylko pytanie
#2159
Author: =?UTF-8?B?QW5kcn
Date: Sat, 17 Apr 2010 00:06
6 lines
233 bytes
> Jezeli to mozliwe, uzyj timera z lokalnego APIC. Jest troche mniej dokladny
> (100MHz, na przyklad) ale za to niezalezny od predkosci taktowania CPU.
>

Ba, ale jak to zrobić, żeby aplikacja chodziła w oknie DOSowym WIndows?

Re: Nie zagadka, tylko pytanie
#2162
Author: =?ISO-8859-2?Q?A
Date: Sat, 17 Apr 2010 00:29
6 lines
70 bytes
>
> http://rudy.mif.pg.gda.pl/~bogdro/dos/cpu_tut.htm
>

Dzi�ki.

Re: Nie zagadka, tylko pytanie
#2164
Author: "Remek"
Date: Wed, 21 Apr 2010 11:22
10 lines
196 bytes
U�ytkownik "Andrzej Gra�y�ski" napisa�:

> �eby unikn�� b��du 200

Czy remedium nie jest kompilacja we Free Pascalu? Nie sprawdza�em. Czyta�em
co� na ten temat.

Remek


Re: Nie zagadka, tylko pytanie
#2165
Author: =?ISO-8859-2?Q?A
Date: Thu, 22 Apr 2010 09:34
46 lines
825 bytes
Remek pisze:
> U�ytkownik "Andrzej Gra�y�ski" napisa�:
>
>> �eby unikn�� b��du 200
>
> Czy remedium nie jest kompilacja we Free Pascalu? Nie sprawdza�em.
> Czyta�em co� na ten temat.
>
> Remek

A zagwarantujesz mi, �e wszystko co do ka�dego szczeg�u chodzi tak
samo? Oto prosty przyk�ad r�nicy:

var
   W, M: Word;
   L: Longint;

...

W = 5;
M = 7;

L := W-M;

if L < 0 then
begin
   { jeste�my we FreePascalu }
end
else
begin
   { jeste�my w Turbo Pascalu }
end;


Takich kwiatk�w jest mn�stwo. Ryzyko zbyt du�e. Pomijaj�c ju� fakt, �e
trzeba doprowadzi� kod do mo�liwo�ci skompilowania w FP.

A w�tek obiektowy - uzale�nienie od konkretnego layoutu obiektu w BP7?
Pewnie w FP jest zupe�nie inny. Wi�c nawet jak si� teoretycznie
skompiluje...






Re: Nie zagadka, tylko pytanie
#2166
Author: =?ISO-8859-2?Q?A
Date: Thu, 22 Apr 2010 09:36
14 lines
528 bytes
Remek pisze:
> U�ytkownik "Andrzej Gra�y�ski" napisa�:
>
>> �eby unikn�� b��du 200
>
> Czy remedium nie jest kompilacja we Free Pascalu? Nie sprawdza�em.
> Czyta�em co� na ten temat.
>
> Remek
A propos b��du 200 - to dzi� nie jest ju� problem. kto chce grzeba� w
�r�d�ach CRT, sam sobie poradzi w ci�gu p� godziny. Kto nie chce, ma
gotowe narz�dzie z Borlanda patchuj�ce EXEki. Mnie chodzi�o o co�
zupe�nie innego - o jako tak� adekwatno�� odmierzanego czasu.

Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads