.386p

.MODEL TPASCAL
.DATA

 oldint3 dd ?
 alter_interrupt3 dd ?
.CODE

public protected_stopping
protected_stopping proc pascal
	pusha
	cli                         ; Interrupts ausschalten
	mov eax,cr0                 ; In den Protected-Mode schalten
	or eax,1
	mov cr0,eax
	jmp PROTECTION_ENABLED      ; Executionpipe l”schen
PROTECTION_ENABLED:

	and al,0FEh                 ; Wieder in den Real-Mode schalten
	mov cr0,eax                 ; CPU nicht resetten
	jmp PROTECTION_DISABLED     ; Executionpipe l”schen
PROTECTION_DISABLED:
	sti                         ; Interrupts wieder einschalten
	popa
  ret
protected_stopping endp

public Check_auf_vector
Check_auf_vector proc pascal check : dword;
  mov bx,0
  mov es,bx
  mov bx,18
  mov eax,es:[bx]
  mov oldint3,eax
  mov eax,check
  mov es:[bx],eax
  ret
Check_auf_vector endp

public Vector_ok
Vector_ok proc pascal check : dword;
  mov bx,0
  mov es,bx
  mov bx,18
  mov eax,es:[bx]
  cmp eax,check
  je  @check_ok
  mov al,0
  jmp @check_ende
@check_ok:
  mov al,1
@check_ende:
  ret
Vector_ok endp

public restore_Checkvector
restore_Checkvector proc pascal
  mov bx,0
  mov es,bx
  mov bx,18
  mov eax,oldint3
  mov es:[bx],eax
  ret
restore_Checkvector endp

public Copy_int21_int3
Copy_int21_int3 proc pascal
  mov bx,0
  mov es,bx
  mov bx,18
  mov eax,es:[bx]
  mov alter_interrupt3,eax              ; alten int3 sichern
  mov bx,84                             ; Int 21 laden
  mov eax,es:[bx]
  mov bx,18                             ; in int3 speichern
  mov es:[bx],eax
  ret
Copy_int21_int3 endp








END