Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pascal: Kysymys Turbo Pascalista ja PC:n timeristä

toivma [25.09.2016 13:00:04]

#

Pieni ongelma Turbo Pascalin kanssa. TP:ssä on bugi Delay-proseduurissa mikä ei toimi nopeilla koneilla (esim. Pentium 2 ja ylöspäin). Nykykoneista puhumattakaan.

Kun korvaa alkuperäisen Delay-proseduurin tällä alla olevalla, niin 1000 millisekunnin viive viiyttääkin oikeasti vain 500 millisekuntia.

Tuossa yhdessä kommentissa lukee "The system timer normally runs in mode 3, which counts down by twos, so Delay(1193180) may be only a half a second."

Mikä on mode 3 ja mistä tietää mikä tila on normaalisti käytössä jos haluan saada tehdä ohjelman joka toimii oikein vanhoilla ja uudemmilla koneila?

Tässä on vielä se juttu että virtuaalikoneilla esimerkiksi 10 sekunnin delay toimii oikein, oikeilla koneilla delay onkin sitten vaan 5 sekuntia.

procedure ShortDelay(Interval: Word); assembler;
{ Interval = number of ticks
  Note: About 1193180 ticks/s }
asm
  push ax
  push bx
  cmp  Interval,0FFFFh  { otherwise 0FFFFh will end in an infinite loop }
  jne  @start
  dec  Interval
@start:
  in   al,040h          { save initial time in bx }
  mov  bl,al
  in   al,040h
  mov  bh,al
@delayloop:
  in   al,040h          { get current time }
  xchg al,ah
  in   al,040h
  xchg al,ah
  sub  ax,bx            { calculate the difference }
  neg  ax
  cmp  ax,Interval      { are we done? }
  jb   @delayloop
  pop  bx
  pop  ax
end;

procedure delay(ms: Word);
{ identical to the faulty Borland delay procedure }
var
  A : Word;
begin
  for A := 1 to ms do
    ShortDelay(1193);  { pause for 1 ms }
end;
CONST Windows31Second = 1193180;
      OneSecondDelay  = 2386360;

PROCEDURE Delay(Tics: Longint);
{ =========================================================== }
{ Wait specified number of 1.193180 MHz clock tics to elapse. }
{ The system timer normally runs in mode 3, which counts down }
{ by twos, so Delay(1193180) may be only a half a second.     }
{ =========================================================== }

http://www.delphigroups.info/2/d2/16758.html

http://mtech.dk/thomsen/program/pasbug.php

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta