[Back to INTERRUP SWAG index] [Back to Main SWAG index] [Original]
{
Via SLMAIL v3.5C (#2081)
-=> Quoting Joe Irwin to Maynard Philbrook <=-
JI> either inline code or assembler that could be compiled to obj and
JI> linked that would read the keyboard and if a key is not pressed in a
JI> variable or set amount of time jump to a procedure. I'm talking about
JI> a tsr routine and what I have in mind is a tsr dos screensaver. I've
JI> been working on this forever and am just not good enough with interupts
JI> or assembler to do it. I'm using tp 5.5 which does not support the asm
JI> command but inline(/) only. Any help would be appreciated.
JI> Joe Irwin
JI> -!- FMail 0.92
JI> ! Origin: MK Tech BBS-MK Software (513)237-7737 Dayton,OH HST/v32
JI> (1:110/290)
}
Uses dos,crt;
Const Set_Time :Word = 100; { 0 for no blanking }
Var
Temp,Temp1 : Integer;
C :Char;
Old_Screen :Array[0..1999] of Word;
OLD_INT9, OLD_INT8 :Pointer;
NO_Pressed :Word; { Counter }
Saved_Flag :Word; { varifie Flag }
{$F+}
Procedure New_Int9; Assembler; { all of this could be done in TASM }
asm Push ES;
Push DS;
Push BX;
Push AX;
Mov AX, Seg NO_Pressed;
Mov DS, AX;
Mov AX, Set_TIme;
Mov NO_Pressed, AX;
Mov AX, Word [Old_INT9];
Mov Word ptr CS:@Return, AX;
Mov AX, Word [OLD_INT9+2];
Mov Word ptr CS:@Return+2, AX;
Cmp Word Ptr Saved_Flag, 00;
Je @Done;
Mov Word ptr Saved_Flag, 00;
Mov BX, 3999;
Mov AX, $B800;
Mov ES, AX;
@loop:
Mov AL, byte [OLD_SCREEN+BX];
Mov [ES:BX], AL;
Dec BX;
Jnz @Loop;
Mov AL, byte [OLD_SCREEN+BX];
Mov [ES:BX], AL;
@Done:
Pop AX;
Pop BX;
Pop DS;
Pop ES;
Jmp [Dword(@Return)];
@Return:
DD 0;
End;
Procedure New_Int8; Assembler;
ASm
Push ES;
Push DS;
Push BX;
Push AX;
Mov AX, Seg NO_Pressed;
Mov DS, AX;
Mov AX, Word [Old_INT8];
Mov Word ptr @Return, AX;
Mov AX, Word [OLD_INT8+2];
Mov Word ptr @Return+2, AX;
Cmp NO_PRESSED, $00;
Je @Done;
Dec Word Ptr NO_PRESSED;
Jnz @Done;
Mov Saved_Flag, $01;
Mov AX, $B800;
Mov ES, AX;
Mov BX, 3999;
@loop:
Mov AL, byte ptr [ES:BX];
Mov byte ptr OLD_SCREEN+BX, AL;
Mov byte [ES:BX], 0 ;
Dec BX;
Jnz @Loop;
Mov AL, byte ptr [ES:BX];
Mov byte ptr OLD_SCREEN+BX, AL;
@DONE:
Pop AX;
Pop BX;
Pop DS;
Pop ES;
Jmp [Dword(@Return)];
@Return:
DD 0;
End;
BEGIN
Val(Paramstr(1), Temp, Temp1);
If Temp1 = 0 Then Set_Time := temp*18;
NO_PRESSED := Set_Time;
SAVED_FLAG := 00;
GetIntVec($08, OLD_INT8);
GetIntVec($09, OLD_INT9);
SetIntVec($09, @New_Int9);
SetIntVec($08, @New_Int8);
While NOT Keypressed DO;
{ process your program here }
SetIntVec($08, old_int8); { to restore it back to normal }
SetIntVec($09, old_int9);
CLrScr;
WriteLn(' Program Writen Bye Maynard A. Phibrook Jr. ');
WriteLn(' 1-203-456-2521 (1993)');
END.
[Back to INTERRUP SWAG index] [Back to Main SWAG index] [Original]