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

  1. ; ----------------------------
  2. ; CallMD
  3. ;
  4. ; Funktion: Aufruf von MDEBUG über den Userint (für TP 5.xx)
  5. ;
  6. ; Pascal-Deklaration:  {$F+} PROCEDURE CallMD(    intnr : BYTE,
  7. ;                                             VAR regs  : REGISTERS); EXTERNAL;
  8. ;                      {$F-}
  9. ;
  10. ; Eingabe:  intnr   - Nummer des Userints von MDEBUG
  11. ;           regs    - Register-Werte für den Aufruf
  12. ;
  13. ; Ausgabe:  regs  enthält die von MDEBUG gelieferten Register-Werte
  14. ;
  15. ; Übersetzen: A86 CALLMD.A86 to CALLMD.OBJ
  16. ; ----------------------------
  17.  
  18. PUBLIC CallMD
  19.  
  20. CODE SEGMENT BYTE PUBLIC
  21.          ASSUME  CS:CODE
  22.  
  23. Registers STRUC [BX]          ; Type-Definitions des Turbo-Pascal-Typs REGISTER
  24.          _AX    dw ?
  25.          _BX    dw ?
  26.          _CX    dw ?
  27.          _DX    dw ?
  28.          _BP    dw ?
  29.          _SI    dw ?
  30.          _DI    dw ?
  31.          _DS    dw ?
  32.          _ES    dw ?
  33.          _FLAGS dw ?
  34.           ENDS
  35.  
  36. _regs    EQU [BP+06h]         ; Offsets der Parameter auf dem Stack
  37. intnr    EQU [BP+0Ah]
  38.  
  39. savess   dw ?                 ; Hilfsvariablen
  40. savesp   dw ?
  41. savebp   dw ?
  42.  
  43. savebp1  dw ?
  44.  
  45. CallMD PROC FAR
  46.          push bp
  47.          mov bp,sp            ; Stack adressierbar machen
  48.  
  49.          pushf
  50.          push ds,es,si,di
  51.  
  52.          mov cs:savess,ss     ; Falls die Register SS, SP oder BP auch über
  53.          mov cs:savesp,sp     ; MDEBUG verändert werden sollen, müssen diese
  54.          mov cs:savebp,bp     ; Zuweisungen entfallen
  55. ; ------------------
  56.          mov ax,Intnr
  57.          mov b cs:userInt,al  ; Nummer des Int einpatchen
  58.  
  59.          lds bx,_regs         ; DS:BX -> Registerwerte
  60.          mov ax,_flags        ; Register laden
  61.          push ax
  62.          popf
  63.          mov ax,_bx
  64.          push ax
  65.          mov ax,_ds
  66.          push ax
  67.          mov ax,_ax
  68.          mov cx,_cx
  69.          mov dx,_dx
  70.          mov bp,_bp
  71.          mov si,_si
  72.          mov di,_di
  73.          mov es,_es
  74.          pop ds
  75.          pop bx
  76.  
  77.          db 0CDh              ; MDEBUG aufrufen (0CDh = INT-Befehl)
  78. UserInt  db 060h              ; wird gepatcht!
  79.  
  80.          mov cs:savebp1,bp
  81.  
  82.          cli
  83.          mov bp,cs:savebp     ; Falls die Register SS, SP oder BP auch über
  84.          mov ss,cs:savess     ; MDEBUG verändert werden sollen, müssen diese
  85.          mov sp,cs:savesp     ; Zuweisungen entfallen
  86.          sti
  87.  
  88.          push bx
  89.          push ds
  90.          mov bx,_regs+2       ; Register-Werte sichern
  91.          mov ds,bx
  92.          mov bx,_regs
  93.          mov _ax,ax
  94.          pop ax
  95.          mov _ds,ax
  96.          pop ax
  97.          mov _bx,ax
  98.          mov _cx,cx
  99.          mov _dx,dx
  100.          mov _di,di
  101.          mov _si,si
  102.          mov _es,es
  103.          mov ax,cs:Savebp1
  104.          mov _bp,ax
  105.          pushf
  106.          pop ax
  107.          mov _flags,ax
  108. l9:
  109.          pop di,si,es,ds
  110.          popf
  111.          pop bp
  112.          retf 06              ; Parameter vom Stack und raus
  113.  
  114.          CODE ENDS
  115.  
  116. ; ----------------------------
  117.  
  118.