e6f TITLE My_Int60.ASM ;===== Rutinen f”r 'CLS' placeras som en minnesresident rutin ;===== som kan anropas fr†n godtyckligt program med INT 60h ;--------------------------------------------------------------------- INCLUDE TSR.MAC ;--------------------------------------------------------------------- CSEG SEGMENT ASSUME CS:CSEG,DS:CSEG ORG 100H Start: jmp Install_TSR ;================================ Org_Rutin DD ? ;================================ ;------------------------------------------------------------------- Start_TSR: ;H„r startar den programkod som ;kommer att bli minnesresident Our_Layer PROC FAR ASSUME CS:CSEG,DS:CSEG ;M†ste deklareras i denna del som ;f”rblir i minnet push ds ;DS-registrets v„rde sparas f”r ;att †terh„mtas vid †terhoppet push cs ;Under arbetet i 'Our_Layer' m†ste pop ds ;DS ha samma v„rde som CS annars ;kommer l„sning/skrivning fr†n/till ;minne att g† till fel datasegment sti ;F”r ordningens skull f”r att ;m”jligg”ra nytt interrupt pushf ;ett INT simuleras call Org_Rutin ;Originalrutinen anropas ;--------------------------------------------------------------------- call My_Rutin ;--------------------------------------------------------------------- pop ds ;Det v„rde DS hade vid inhopp ;†terh„mtas iret ;Kontrollen tillbaka till ;anropande program (DOS) Our_Layer ENDP ;----------------------------------------------------------------------- My_Rutin PROC NEAR ;CLS (Medium Level) ASSUME CS:CSEG,DS:CSEG push ax mov ah,0fh int 10h mov ah,00h int 10h pop ax ret My_Rutin ENDP ;----------------------------------------------------------------------- End_TSR: ;Minnesresident del slut ;----------------------------------------------------------------------- ;======= Ladda 0000:03f0 med IRET och ;======= ladda 0000:0180-0000:0183 med f0 03 00 00 (Vektorn) Load_Vector PROC NEAR push ax push bx push es mov ax,0000h mov es,ax ;------ IRET ----------------------------------------------------------- mov bx,03f0h mov al,0cfh mov es:[bx],al ;------ Vektorn -------------------------------------------------------- mov ax,03f0h ;Offset mov bx,0180h mov es:[bx],ax mov ax,0000h ;Segment inc bx inc bx mov es:[bx],ax ;------------------------------------------------------------------------ pop es pop bx pop ax ret Load_Vector ENDP ;======================================================================== Install_TSR: call Load_Vector TSR_Inst 60h ;------------------------------------------------------------------------- CSEG ENDS END Start ;-------------------------------------------------------------------------- . 0