2 * Interrupt vectors emulation
4 * Copyright 1995 Alexandre Julliard
14 #include "stackframe.h"
17 static FARPROC16 INT_Vectors
[256];
20 /**********************************************************************
23 * Return the protected mode interrupt vector for a given interrupt.
25 FARPROC16
INT_GetPMHandler( BYTE intnum
)
27 return INT_Vectors
[intnum
];
31 /**********************************************************************
34 * Set the protected mode interrupt handler for a given interrupt.
36 void INT_SetPMHandler( BYTE intnum
, FARPROC16 handler
)
38 TRACE(int, "Set protected mode interrupt vector %02x <- %04x:%04x\n",
39 intnum
, HIWORD(handler
), LOWORD(handler
) );
40 INT_Vectors
[intnum
] = handler
;
44 /**********************************************************************
47 * Return the real mode interrupt vector for a given interrupt.
49 FARPROC16
INT_GetRMHandler( BYTE intnum
)
51 return ((FARPROC16
*)DOSMEM_MemoryBase(0))[intnum
];
55 /**********************************************************************
58 * Set the real mode interrupt handler for a given interrupt.
60 void INT_SetRMHandler( BYTE intnum
, FARPROC16 handler
)
62 TRACE(int, "Set real mode interrupt vector %02x <- %04x:%04x\n",
63 intnum
, HIWORD(handler
), LOWORD(handler
) );
64 ((FARPROC16
*)DOSMEM_MemoryBase(0))[intnum
] = handler
;
68 /**********************************************************************
71 * Return the interrupt vector for a given interrupt.
73 FARPROC16
INT_CtxGetHandler( CONTEXT
*context
, BYTE intnum
)
76 return ((FARPROC16
*)V86BASE(context
))[intnum
];
78 return INT_GetPMHandler(intnum
);
82 /**********************************************************************
85 * Set the interrupt handler for a given interrupt.
87 void INT_CtxSetHandler( CONTEXT
*context
, BYTE intnum
, FARPROC16 handler
)
90 TRACE(int, "Set real mode interrupt vector %02x <- %04x:%04x\n",
91 intnum
, HIWORD(handler
), LOWORD(handler
) );
92 ((FARPROC16
*)V86BASE(context
))[intnum
] = handler
;
94 INT_SetPMHandler(intnum
, handler
);
98 /**********************************************************************
99 * INT_RealModeInterrupt
101 * Handle real mode interrupts
103 int INT_RealModeInterrupt( BYTE intnum
, PCONTEXT context
)
105 /* we should really map to if1632/wprocs.spec, but not all
106 * interrupt handlers are adapted to support real mode yet */
109 INT_Int10Handler(context
);
112 INT_Int11Handler(context
);
115 INT_Int12Handler(context
);
118 INT_Int13Handler(context
);
121 INT_Int15Handler(context
);
124 INT_Int16Handler(context
);
127 INT_Int17Handler(context
);
130 INT_Int1aHandler(context
);
133 INT_Int20Handler(context
);
139 INT_Int25Handler(context
);
142 INT_Int2fHandler(context
);
145 INT_Int31Handler(context
);
148 INT_Int29Handler(context
);
151 FIXME(int, "Unknown Interrupt in DOS mode: 0x%x\n", intnum
);