home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 13 / tsr / interrpt.inc next >
Encoding:
Text File  |  1988-03-18  |  6.6 KB  |  136 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      INTERRPT.PAS                      *)
  3. (*  Inline-Code zum residenten Terminieren des Programmes *)
  4. (* ------------------------------------------------------ *)
  5. PROCEDURE Interrpt;
  6. BEGIN
  7.   INLINE(
  8.   $80/$FC/$00/                  (* Cmp Ah,00              *)
  9.   $74/$07/                      (* Je   ChrRqst           *)
  10.   $5D/$5D/                      (* Pop  Bp/Pop Bp         *)
  11.                                 (* else  Restore Bp &     *)
  12.   $2E/                          (* Jump                   *)
  13.   $FF/$2E/TSR_IntIP/            (* Jmp Far Cs:[TSR_IntIp] *)
  14.  
  15.   $FA /                         (* Cli                    *)
  16.   $55/                          (* Push   Bp              *)
  17.   $BD/Regs/                     (* Mov    Bp,offset       *)
  18.   $2E/$89/$46/$00/              (* CS:Mov [Bp+0],AX       *)
  19.   $2E/$89/$5E/$02/              (* Cs:Mov [Bp+2],Bx       *)
  20.   $2E/$89/$4E/$04/              (* CS:Mov [Bp+4],CX       *)
  21.   $2E/$89/$56/$06/              (* CS:Mov [Bp+6],DX       *)
  22.   $2E/$8F/$46/$08/              (* Pop    Cs:[Bp+8]       *)
  23.   $2E/$89/$76/$0A/              (* CS:Mov [Bp+A],SI       *)
  24.   $2E/$89/$7E/$0C/              (* CS:Mov [Bp+C],DI       *)
  25.   $2E/$8C/$5E/$0E/              (* CS:Mov [Bp+E],DS       *)
  26.   $2E/$8C/$46/$10/              (* CS:Mov [Bp+10],ES      *)
  27.   $9C/                          (* PUSHF                  *)
  28.   $2E/$8F/$46/$12/              (* POP Cs:[Bp+12]         *)
  29.  
  30.   $2E/$80/$3E/TSR_InUse/$01/    (* Cmp  Cs:[Inuse],1      *)
  31.   $74/$62/                      (* Je   ReCurin           *)
  32.  
  33.   $2E/$8C/$16/DosSSeg/          (* Mov  Cs:DosSSeg,SS     *)
  34.   $8C/$D6/                      (* Mov  Si,SS             *)
  35.   $8E/$C6/                      (* Mov  Es,Si             *)
  36.   $2E/$8E/$16/TSRSSeg/          (* Mov  SS,Cs:TSRSSeg     *)
  37.   $2E/$8E/$1E/TSRDseg/          (* Mov  Ds,Cs:TSR_Ds      *)
  38.  
  39.   $2E/$3B/$36/TSRSSeg/          (* Cmp  Si,Cs:TSRSSeg     *)
  40.   $89/$E6/                      (* Mov  Si,Sp             *)
  41.   $74/$05/                      (* Je   $+5               *)
  42.   $3E/$8B/$36/$74/$01/          (* Mov  Si,Ds:[174]       *)
  43.   $87/$F4/                      (* Xchg Sp,Si             *)
  44.  
  45.   $2E/$FF/$76/$00/              (* Push [Bp+0]  Save Ax   *)
  46.   $2E/$FF/$76/$02/              (* Push [Bp+2]  Save Bx   *)
  47.   $2E/$FF/$76/$04/              (* Push [Bp+4]  Save Cx   *)
  48.   $2E/$FF/$76/$06/              (* Push [Bp+6]  Save Dx   *)
  49.   $2E/$FF/$76/$0A/              (* Push [Bp+A]  Save Si   *)
  50.   $2E/$FF/$76/$0C/              (* Push [Bp+C]  Save Di   *)
  51.   $2E/$FF/$76/$0E/              (* Push [Bp+E]  Save Ds   *)
  52.   $2E/$FF/$76/$10/              (* Push [Bp+10] Save Es   *)
  53.  
  54.   $29/$C9/                      (* Sub  Cx,Cx             *)
  55.   $29/$F1/                      (* Sub  Cx,Si             *)
  56.   $D1/$E9/                      (* Shr  Cx,1              *)
  57.   $83/$F9/$40/                  (* Cmp  Cx,+40            *)
  58.   $7E/$03/                      (* Jle  $+3               *)
  59.   $B9/$40/$00/                  (* Mov  Cx,40             *)
  60.   $2E/$89/$0E/StackSize/        (* Mov  Cs:StackSize,Cx   *)
  61.   $26/$FF/$34/                  (* Push Es:[Si]           *)
  62.   $46/$46/                      (* Inc  Si/Inc Si         *)
  63.   $E2/$F9/
  64.   $56/                          (* Push Si                *)
  65.   $2E/$8C/$5E/$0E/              (* Mov  Cs:[Bp+E],Ds      *)
  66.   $FB                           (* Sti                    *)
  67.   );
  68.  
  69.   Intr (TSR_Int, Regs);
  70.   IF (Halfregs.Ah = TSR_Char) THEN
  71.     IF (NOT TSR_InUse) THEN
  72.       BEGIN
  73.         TSR_InUse := TRUE;
  74.         TSRPgm;
  75.         WHILE (NOT KeyPressed);
  76.         SaveRegs.Ax := 0 ;
  77.         Intr(TSR_Int,SaveRegs);
  78.         Regs.Ax := SaveRegs.Ax;
  79.         TSR_InUse := FALSE;
  80.       END;
  81.  
  82.   INLINE(
  83.   $BD/Regs/                    (* Mov    Bp,offset REGS   *)
  84.   $2E/$8B/$46/$00/             (* CS:Mov Ax,[Bp+0]        *)
  85.   $2E/$8B/$5E/$02/             (* Cs:Mov Bx,[Bp+2]        *)
  86.   $2E/$8B/$4E/$04/             (* CS:Mov Cx,[Bp+4]        *)
  87.   $2E/$8B/$56/$06/             (* CS:Mov Dx,[Bp+6]        *)
  88.   $2E/$8B/$76/$0A/             (* CS:Mov Si,[Bp+A]        *)
  89.   $2E/$8B/$7E/$0C/             (* CS:Mov Di,[Bp+C]        *)
  90.   $2E/$8E/$5E/$0E/             (* CS:Mov DS,[Bp+E]        *)
  91.   $2E/$8E/$46/$10/             (* CS:Mov ES,[Bp+10]       *)
  92.   $2E/$FF/$76/$12/             (* Push Cs:[Bp+12]         *)
  93.  
  94.   $EB/$01/                     (* JMP $+3                 *)
  95.   $CF/                         (* IRET                    *)
  96.   $0E/                         (* PUSH CS                 *)
  97.   $E8/$FB/$FF/                 (* CALL CS:$-2             *)
  98.   $2E/$80/$3E/TSR_InUse/$01/
  99.                         (* Cmp  byte ptr Cs:[TSR_InUse],1 *)
  100.   $74/$25/                     (* Je                      *)
  101.  
  102.   $FA /                        (* Cli                     *)
  103.   $5E/                         (* Pop Si                  *)
  104.   $2E/$8B/$0E/StackSize/       (* Mov Cx,Cs:StackSize     *)
  105.   $2E/$8E/$06/DosSSeg/         (* Mov ES,Cs:DosSSeg       *)
  106.   $4E/$4E/                     (* Dec Si/Dec Si           *)
  107.   $26/$8F/$04/                 (* Pop Es:[Si]             *)
  108.   $E2/$F9/                     (* Loop                    *)
  109.   $89/$F5/                     (* Mov Bp,Si               *)
  110.   $07/                         (* Pop  Es                 *)
  111.   $1F/                         (* Pop  Ds                 *)
  112.   $5F/                         (* Pop  Di                 *)
  113.   $5E/                         (* Pop  Si                 *)
  114.   $5A/                         (* Pop  Dx                 *)
  115.   $59/                         (* Pop  Cx                 *)
  116.   $5B/                         (* Pop  Bx                 *)
  117.   $44/$44/                     (* Inc sp/Inc sp           *)
  118.   $89/$EC/                     (* Mov  Sp,Bp              *)
  119.   $2E/$8E/$16/DosSSeg/         (* Mov  SS,Cs:DosSSeg      *)
  120.  
  121.   $5D/                         (* Pop Bp                  *)
  122.   $BD/Regs/                    (* Mov Bp,offset REGS      *)
  123.   $2E/$FF/$76/$12/             (* Push Cs:[Bp+12]         *)
  124.   $EB/$01/                     (* JMP $+3                 *)
  125.   $CF/                         (* IRET                    *)
  126.   $0E/                         (* PUSH CS                 *)
  127.   $E8/$FB/$FF/                 (* CALL CS:$-2             *)
  128.  
  129.   $5D/                         (* Pop Bp                  *)
  130.   $FB/                         (* Sti                     *)
  131.   $CA/$02/$00                  (* Ret Far 002             *)
  132.   );
  133. END;
  134. (* ------------------------------------------------------ *)
  135. (*                Ende von INTERRPT.PAS                   *)
  136.