Posted By: jerg (jerg) on 'CZprogram'
Title: Re: Pascal&pentium II konecne reseni
Date: Wed Jan 27 16:19:18 1999
Ahoj vespolek,
altavistou jsem nasel stranku, ktera ukazovala na nasledujici stranku:
http://www.ced.co.uk/penbugu.htm
tuto doporucuji si precist. Je tam program na zvladnuti chyby u hotovych
programu a unita pro programatory. Umistuje se pred crt uses fdelay,crt;
Nemam s tim zatim zkusenosti. mejte se fajn.
jerg
Unit FDelay; { Place this before CRT. Real mode only }
(****************************************************************************
**
** All TP7 applications which are using the CRT library will not work
** on a fast PC - for instance on a Pentium II. This unit fixes
** that problem, and should be placed before the CRT unit in the USES
** list in all units that use CRT.
**
****************************************************************************)
interface
const dfix:word=1; { call delay() dfix times }
implementation
uses dos;
procedure oldints; assembler; { "variables" in the code segment }
asm dd 0,0 end;
Procedure error;
begin
runerror(200);
End;
Procedure Int0; assembler;
asm
cmp cx,55 { If CX<>55 we are at some other point }
je @ok
sti
call error
@ok:
shr dx,1 { divide dx:ax by 2 }
rcr ax,1
shl Dfix,1 { multiply Dfix by 2 }
iret { return to the DIV (286+) }
end;
{ Int21h handler removes the int0 handler (as well as itself) from
the memory when CtrlBreak vector is set by CRT right after
calculating the delay counter. Note DS does NOT point to the data
segment when this is called }
Procedure Int21h; assembler;
asm
cmp ax,$251B
jne @old { Not setint 1Bh? }
push es; push si; push di
mov si,offset oldints
xor di,di
mov es,di
cld
segcs; movsw
segcs; movsw { restore int 0 }
mov di,$21*4
segcs; movsw { restore int 21h }
segcs; movsw
pop di; pop si; pop es
@old: db $2e,$ff,$2e { jmp far indirect cs:[oldints+4] }
dw offset oldints+4
end;
type tr=record int0,int21:pointer; End;
pr=^tr;
begin
GetIntVec(0,pr(@oldints)^.int0);
GetIntVec($21,pr(@oldints)^.int21);
SetIntVec(0,@int0);
SetIntVec($21,@int21h);
end.
mrazek@usa.net