home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / tools / debugger / mdebug / mdebug1 / checkmd.a86 < prev    next >
Encoding:
Text File  |  1992-05-29  |  2.5 KB  |  103 lines

  1. ; ----------------------------
  2. ; CheckMD
  3. ;
  4. ; Funktion: Testen, ob MDEBUG installiert ist (für TP 5.xx)
  5. ;
  6. ; Pascal-Deklaration:  {$F+} FUNCTION CheckMD:BYTE; EXTERNAL; {$F-}
  7. ;
  8. ; Eingabe:  -
  9. ;
  10. ; Ausgabe:  -1 - MDEBUG nicht installiert
  11. ;            0 - MDEBUG ohne Userint installiert
  12. ;        sonst - Nummer des Userints
  13. ;
  14. ; Übersetzen: A86 CHECKMD.A86 to CHECKMD.OBJ
  15. ; ----------------------------
  16.  
  17. PUBLIC CheckMD
  18.  
  19. CODE SEGMENT BYTE PUBLIC
  20.      ASSUME CS:CODE
  21.  
  22. ; ----------------------------
  23.  
  24. v3       db 'MDEBUG  '        ; Kennung im MCB vom MDEBUG
  25. v3_LENGTH EQU $ - Offset v3
  26.  
  27. v5       db 'USERINT'         ; Kennung vor der Einsprung-Adresse des Userints
  28.  
  29. CheckMD PROC FAR
  30.          push si
  31.          push ds
  32.          push di
  33.          push es
  34.  
  35.          mov ah,052h          ; Adresse des DOS-Info-Blocks ermitteln
  36.          int 021h
  37.  
  38.          mov es,es:[bx-2]
  39.          xor bx,bx            ; ES:BX -> 1. MCB
  40.  
  41.          push cs
  42.          pop ds               ; DS = CS
  43.  
  44. Test_Mcbs:
  45.          mov di,bx
  46.          add di,8             ; ES:DI -> 'Namen-Feld' im MCB
  47.          mov si,offset v3
  48.          mov cx,4
  49. cmcb1:
  50.          repe cmpsw           ; Kennung vorhanden ?
  51.          je cmcb10            ; Name gefunden
  52.  
  53. cmcb2:
  54.          cmp byte ptr es:[bx],'Z'
  55.                   ; 'Z' -> letzter MCB
  56.          mov al,0FFh
  57.          je cmcbende          ; MDEBUG nicht gefunden
  58.  
  59.          mov ax,es            ; Nächsten MCB ermitteln
  60.          add ax,es:[bx+3]
  61.          inc ax
  62.          mov es,ax
  63.          xor bx,bx
  64.          jmp Test_MCBs
  65.  
  66. cmcb10:
  67.                               ; Eintrag gefunden, Version testen
  68.          mov dx,es
  69.          inc dx               ; DX = PSP von MDEBUG
  70.          mov al,05Fh          ; erster möglicher Interrupt ist der Int 60h
  71.          mov cx,8xD           ; 8 mögliche Interrupts
  72.          mov ah,035h          ; Funktion: Ermittle Int-Adresse
  73.          mov si,offset v5     ; SI -> Kennstring für den Userint
  74.  
  75. cmcb11:
  76.          push es
  77.          inc al               ; Interrupt-Nummer korrigieren
  78.          int 021h
  79.          mov di,bx
  80.  
  81.          push cx,si
  82.          mov cx,7xD
  83.          sub di,7xD           ; USERINT-Kennung vorhanden ?
  84.          repe cmpsb
  85.          pop si,cx
  86.          pop es
  87.          loopne cmcb11
  88.          je cmcbEnde          ; AL = Nummer des Userints
  89.  
  90.          mov al,0             ; MDEBUG noch nicht installiert oder kein Userint
  91.  
  92. cmcbende:
  93.          pop es
  94.          pop di
  95.          pop ds
  96.          pop si
  97.          retf
  98.  
  99.          CODE ENDS
  100.  
  101. ; ----------------------------
  102.  
  103.