home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* INTERRPT.PAS *)
- (* Inline-Code zum residenten Terminieren des Programmes *)
- (* ------------------------------------------------------ *)
- PROCEDURE Interrpt;
- BEGIN
- INLINE(
- $80/$FC/$00/ (* Cmp Ah,00 *)
- $74/$07/ (* Je ChrRqst *)
- $5D/$5D/ (* Pop Bp/Pop Bp *)
- (* else Restore Bp & *)
- $2E/ (* Jump *)
- $FF/$2E/TSR_IntIP/ (* Jmp Far Cs:[TSR_IntIp] *)
-
- $FA / (* Cli *)
- $55/ (* Push Bp *)
- $BD/Regs/ (* Mov Bp,offset *)
- $2E/$89/$46/$00/ (* CS:Mov [Bp+0],AX *)
- $2E/$89/$5E/$02/ (* Cs:Mov [Bp+2],Bx *)
- $2E/$89/$4E/$04/ (* CS:Mov [Bp+4],CX *)
- $2E/$89/$56/$06/ (* CS:Mov [Bp+6],DX *)
- $2E/$8F/$46/$08/ (* Pop Cs:[Bp+8] *)
- $2E/$89/$76/$0A/ (* CS:Mov [Bp+A],SI *)
- $2E/$89/$7E/$0C/ (* CS:Mov [Bp+C],DI *)
- $2E/$8C/$5E/$0E/ (* CS:Mov [Bp+E],DS *)
- $2E/$8C/$46/$10/ (* CS:Mov [Bp+10],ES *)
- $9C/ (* PUSHF *)
- $2E/$8F/$46/$12/ (* POP Cs:[Bp+12] *)
-
- $2E/$80/$3E/TSR_InUse/$01/ (* Cmp Cs:[Inuse],1 *)
- $74/$62/ (* Je ReCurin *)
-
- $2E/$8C/$16/DosSSeg/ (* Mov Cs:DosSSeg,SS *)
- $8C/$D6/ (* Mov Si,SS *)
- $8E/$C6/ (* Mov Es,Si *)
- $2E/$8E/$16/TSRSSeg/ (* Mov SS,Cs:TSRSSeg *)
- $2E/$8E/$1E/TSRDseg/ (* Mov Ds,Cs:TSR_Ds *)
-
- $2E/$3B/$36/TSRSSeg/ (* Cmp Si,Cs:TSRSSeg *)
- $89/$E6/ (* Mov Si,Sp *)
- $74/$05/ (* Je $+5 *)
- $3E/$8B/$36/$74/$01/ (* Mov Si,Ds:[174] *)
- $87/$F4/ (* Xchg Sp,Si *)
-
- $2E/$FF/$76/$00/ (* Push [Bp+0] Save Ax *)
- $2E/$FF/$76/$02/ (* Push [Bp+2] Save Bx *)
- $2E/$FF/$76/$04/ (* Push [Bp+4] Save Cx *)
- $2E/$FF/$76/$06/ (* Push [Bp+6] Save Dx *)
- $2E/$FF/$76/$0A/ (* Push [Bp+A] Save Si *)
- $2E/$FF/$76/$0C/ (* Push [Bp+C] Save Di *)
- $2E/$FF/$76/$0E/ (* Push [Bp+E] Save Ds *)
- $2E/$FF/$76/$10/ (* Push [Bp+10] Save Es *)
-
- $29/$C9/ (* Sub Cx,Cx *)
- $29/$F1/ (* Sub Cx,Si *)
- $D1/$E9/ (* Shr Cx,1 *)
- $83/$F9/$40/ (* Cmp Cx,+40 *)
- $7E/$03/ (* Jle $+3 *)
- $B9/$40/$00/ (* Mov Cx,40 *)
- $2E/$89/$0E/StackSize/ (* Mov Cs:StackSize,Cx *)
- $26/$FF/$34/ (* Push Es:[Si] *)
- $46/$46/ (* Inc Si/Inc Si *)
- $E2/$F9/
- $56/ (* Push Si *)
- $2E/$8C/$5E/$0E/ (* Mov Cs:[Bp+E],Ds *)
- $FB (* Sti *)
- );
-
- Intr (TSR_Int, Regs);
- IF (Halfregs.Ah = TSR_Char) THEN
- IF (NOT TSR_InUse) THEN
- BEGIN
- TSR_InUse := TRUE;
- TSRPgm;
- WHILE (NOT KeyPressed);
- SaveRegs.Ax := 0 ;
- Intr(TSR_Int,SaveRegs);
- Regs.Ax := SaveRegs.Ax;
- TSR_InUse := FALSE;
- END;
-
- INLINE(
- $BD/Regs/ (* Mov Bp,offset REGS *)
- $2E/$8B/$46/$00/ (* CS:Mov Ax,[Bp+0] *)
- $2E/$8B/$5E/$02/ (* Cs:Mov Bx,[Bp+2] *)
- $2E/$8B/$4E/$04/ (* CS:Mov Cx,[Bp+4] *)
- $2E/$8B/$56/$06/ (* CS:Mov Dx,[Bp+6] *)
- $2E/$8B/$76/$0A/ (* CS:Mov Si,[Bp+A] *)
- $2E/$8B/$7E/$0C/ (* CS:Mov Di,[Bp+C] *)
- $2E/$8E/$5E/$0E/ (* CS:Mov DS,[Bp+E] *)
- $2E/$8E/$46/$10/ (* CS:Mov ES,[Bp+10] *)
- $2E/$FF/$76/$12/ (* Push Cs:[Bp+12] *)
-
- $EB/$01/ (* JMP $+3 *)
- $CF/ (* IRET *)
- $0E/ (* PUSH CS *)
- $E8/$FB/$FF/ (* CALL CS:$-2 *)
- $2E/$80/$3E/TSR_InUse/$01/
- (* Cmp byte ptr Cs:[TSR_InUse],1 *)
- $74/$25/ (* Je *)
-
- $FA / (* Cli *)
- $5E/ (* Pop Si *)
- $2E/$8B/$0E/StackSize/ (* Mov Cx,Cs:StackSize *)
- $2E/$8E/$06/DosSSeg/ (* Mov ES,Cs:DosSSeg *)
- $4E/$4E/ (* Dec Si/Dec Si *)
- $26/$8F/$04/ (* Pop Es:[Si] *)
- $E2/$F9/ (* Loop *)
- $89/$F5/ (* Mov Bp,Si *)
- $07/ (* Pop Es *)
- $1F/ (* Pop Ds *)
- $5F/ (* Pop Di *)
- $5E/ (* Pop Si *)
- $5A/ (* Pop Dx *)
- $59/ (* Pop Cx *)
- $5B/ (* Pop Bx *)
- $44/$44/ (* Inc sp/Inc sp *)
- $89/$EC/ (* Mov Sp,Bp *)
- $2E/$8E/$16/DosSSeg/ (* Mov SS,Cs:DosSSeg *)
-
- $5D/ (* Pop Bp *)
- $BD/Regs/ (* Mov Bp,offset REGS *)
- $2E/$FF/$76/$12/ (* Push Cs:[Bp+12] *)
- $EB/$01/ (* JMP $+3 *)
- $CF/ (* IRET *)
- $0E/ (* PUSH CS *)
- $E8/$FB/$FF/ (* CALL CS:$-2 *)
-
- $5D/ (* Pop Bp *)
- $FB/ (* Sti *)
- $CA/$02/$00 (* Ret Far 002 *)
- );
- END;
- (* ------------------------------------------------------ *)
- (* Ende von INTERRPT.PAS *)
-