home *** CD-ROM | disk | FTP | other *** search
- ; ----------------------------
- ; CallMD
- ;
- ; Funktion: Aufruf von MDEBUG über den Userint (für TP 5.xx)
- ;
- ; Pascal-Deklaration: {$F+} PROCEDURE CallMD( intnr : BYTE,
- ; VAR regs : REGISTERS); EXTERNAL;
- ; {$F-}
- ;
- ; Eingabe: intnr - Nummer des Userints von MDEBUG
- ; regs - Register-Werte für den Aufruf
- ;
- ; Ausgabe: regs enthält die von MDEBUG gelieferten Register-Werte
- ;
- ; Übersetzen: A86 CALLMD.A86 to CALLMD.OBJ
- ; ----------------------------
-
- PUBLIC CallMD
-
- CODE SEGMENT BYTE PUBLIC
- ASSUME CS:CODE
-
- Registers STRUC [BX] ; Type-Definitions des Turbo-Pascal-Typs REGISTER
- _AX dw ?
- _BX dw ?
- _CX dw ?
- _DX dw ?
- _BP dw ?
- _SI dw ?
- _DI dw ?
- _DS dw ?
- _ES dw ?
- _FLAGS dw ?
- ENDS
-
- _regs EQU [BP+06h] ; Offsets der Parameter auf dem Stack
- intnr EQU [BP+0Ah]
-
- savess dw ? ; Hilfsvariablen
- savesp dw ?
- savebp dw ?
-
- savebp1 dw ?
-
- CallMD PROC FAR
- push bp
- mov bp,sp ; Stack adressierbar machen
-
- pushf
- push ds,es,si,di
-
- mov cs:savess,ss ; Falls die Register SS, SP oder BP auch über
- mov cs:savesp,sp ; MDEBUG verändert werden sollen, müssen diese
- mov cs:savebp,bp ; Zuweisungen entfallen
- ; ------------------
- mov ax,Intnr
- mov b cs:userInt,al ; Nummer des Int einpatchen
-
- lds bx,_regs ; DS:BX -> Registerwerte
- mov ax,_flags ; Register laden
- push ax
- popf
- mov ax,_bx
- push ax
- mov ax,_ds
- push ax
- mov ax,_ax
- mov cx,_cx
- mov dx,_dx
- mov bp,_bp
- mov si,_si
- mov di,_di
- mov es,_es
- pop ds
- pop bx
-
- db 0CDh ; MDEBUG aufrufen (0CDh = INT-Befehl)
- UserInt db 060h ; wird gepatcht!
-
- mov cs:savebp1,bp
-
- cli
- mov bp,cs:savebp ; Falls die Register SS, SP oder BP auch über
- mov ss,cs:savess ; MDEBUG verändert werden sollen, müssen diese
- mov sp,cs:savesp ; Zuweisungen entfallen
- sti
-
- push bx
- push ds
- mov bx,_regs+2 ; Register-Werte sichern
- mov ds,bx
- mov bx,_regs
- mov _ax,ax
- pop ax
- mov _ds,ax
- pop ax
- mov _bx,ax
- mov _cx,cx
- mov _dx,dx
- mov _di,di
- mov _si,si
- mov _es,es
- mov ax,cs:Savebp1
- mov _bp,ax
- pushf
- pop ax
- mov _flags,ax
- l9:
- pop di,si,es,ds
- popf
- pop bp
- retf 06 ; Parameter vom Stack und raus
-
- CODE ENDS
-
- ; ----------------------------
-
-