iam@waikato.ac.nz (Ian McDonald) (01/11/91)
In an earlier (now cancelled) message I posted code for setting interrupts in
Windows code. Unforunately I missed an h off a int 21 call so here is the
correct (and a bit tidier) call. It doesn't seem to work with real mode at the
moment but I suspect that is lack of memory. (By real mode I mean windows real
mode not program code running in real mode - this will only work for code
running in real mode not protected mode - can someone point me in the direction
of DPMI specs). When using this code segments have to be preloaded and fixed.
/* winvect.c */
/* A replacement for Microsoft's routines which are not in Windows libraries
History
iam 08 Jan 91 Created
*/
#ifdef _WINDOWS
#include <windows.h>
#include "winvect.h"
void(_interrupt _far *_dos_getvect(unsigned intnum))() {
void _far *vect;
/* Dos function 35 is Get vector function. Specify the interrupt in al
and the vector will be returned in es:bx */
_asm {
mov ax,intnum
mov ah,35h
int 21h
mov vect+2,es
mov vect,bx
}
return(vect);
}
void _dos_setvect(unsigned intnum,void(_interrupt _far *handler)()) {
/* Dos function 25 is set vector. Put interrupt number in al,
vector in ds:dx */
_asm {
push ds
mov ax,intnum
mov ah,25h
lds dx,handler
int 21h
pop ds
}
}
#endif
--
-------------------------------------------------------------------------
Ian McDonald |
52 Cook Street| / /\ /\
Hamilton | This space free for advertising !! / / \/ \
New Zealand | / / \
+64-71-563438 | I can receive mail but can't reply to it.