Variable Speed Gear Delphi implementation
{Delphi7 + Win98 can't run in Win2000}
Unit mainunit;
Interface
Uses
Windows, messages, sysutils, variants, classes, graphics, controls, forms,
Dialogs, stdctrls;
Type
Tform1 = Class (tform)
Button1: tbutton;
Button2: tbutton;
Button3: tbutton;
Procedure button1click (Sender: tobject );
Procedure button2click (Sender: tobject );
Procedure button3click (Sender: tobject );
Private
{Private Declarations}
Public
{Public declarations}
End;
VaR
Form1: tform1;
Implementation
{$ R *. DFM}
Procedure speed (count: Word); stdcall;
Const
Predictionused = $03;
VaR
IDT: array [0 .. 5] of byte;
Lpoldgate: DWORD;
Begin
ASM
Sidt IDT
MoV EBX, dword ptr [IDT + 2]
Add EBX, 8 * predictionused
CLI
MoV dx, word PTR [EBX + 6]
SHL edX, 16d
MoV dx, word PTR [EBX]
MoV [lpoldgate], EDX
MoV eax, offset @ ring0code
MoV word PTR [EBX], ax
SHR eax, 16d
MoV word PTR [EBX + 6], ax
Int predictionused
MoV EBX, dword ptr [IDT + 2]
Add EBX, 8 * predictionused
MoV edX, [lpoldgate]
MoV word PTR [EBX], DX
SHR edX, 16d
MoV word PTR [EBX + 6], DX
JMP @ exit
@ Ring0code:
MoV Al, $34
Out $43, Al
MoV ax, count
Out $40, Al
MoV Al, ah
Out $40, Al
Iretd
@ Exit:
End;
End;
Procedure tform1.button1click (Sender: tobject );
Begin
Speed ($6000); // slow
End;
Procedure tform1.button2click (Sender: tobject );
Begin
Speed ($1044 );
End;
Procedure tform1.button3click (Sender: tobject );
Begin
Speed ($500 );
End;
End.