home *** CD-ROM | disk | FTP | other *** search
- (7219) Thu 29 Jul 93 6:07a
- By: Paul White
- To: Sunil Puri
- Re: RE: Interrupt Handling
- St:
- ---------------------------------------------------------------------------
- In a message to everyone written on Tuesday, July 27, 1993 at 8:02:38 PM,
- Sunil Puri writes:
-
- SP> Does anyone have general suggestions about writing int handlers? I have
- SP> written a TSR that displays the time in the corner of the screen. It
- SP> hooks int 1Ch (the timer-tick int). It displays the time once and is
- SP> correct, however, my system hangs. Could it be that is executes too
- SP> slowly (since it chains the
-
- Here is an example of a little routine I use in the 18.2 Hz DOS timer
- tick interrupt chain, to keep track of time-outs, etc. You could
- easily modify this for your on-screen clock program. The InsertWedge
- routine installs the new interrupt handler, and the RemoveWedge routine
- is used to remove the handler.
-
- ; Include file WEDGE.INC
- ; Interrupt chain insert and delete routines
-
- TimeLimit dw ?
- oldIRQ dd ? ; save address of normal IRQ 8
-
- ;---------------------------------------;
- InsertWedge proc near
- ;---------------------------------------;
- ; Insert process in DOS timer tick interrupt (8) chain
- ;
- push es
-
- mov ax,3508h ; Get interrupt vector (#8)
- int 21h ; returns es:bx pointing to IRQ
- ; routine
- mov word ptr [OldIRQ],bx
- mov word ptr [OldIRQ+2],es ; save original address
-
- mov dx,offset IntWedge ; ds:dx = new vector
- mov ax,2508h ; Set interrupt vector (#8)
- int 21h
-
- pop es
- ret
-
- InsertWedge endp
-
- ;---------------------------------------;
- RemoveWedge proc near
- ;---------------------------------------;
-
- push ds
- mov dx,word ptr [OldIRQ] ; get offset in DX
- mov ax,word ptr [OldIRQ+2] ; get segment in DS
- mov ds,ax ; ds:dx = new vector
- mov ax,2508h ; Set interrupt vector (#8)
- int 21h
-
- pop ds
- ret
-
- RemoveWedge endp
-
- ;---------------------------------------;
- IntWedge proc near
- ;---------------------------------------;
- ; This is the routine inserted in the DOS timer tick interrupt chain
- ;
- pushf ; save flags and register(s)
- push ax
-
- mov ax,cs:TimeLimit ; If TimeLimit <> 0, decrement it
- or ax,ax
- jz no_update ; (jump if already 0)
-
- sub ax,1
- mov cs:TimeLimit,ax ; Update counter
-
- no_update:
- pop ax ; restore register and flags
- popf
-
- jmp dword ptr cs:[OldIRQ] ; go on to the next event in chain
-
- IntWedge endp
-
- --- Tabby 3.0
- * Origin: The Mountain Air BBS, Cedar Glen, CA 909/336-6080 (1:207/226)
-
- @PATH: 207/226 8/8 13/13 260/1
-