2 * Interrupt vectors emulation
4 * Copyright 1995 Alexandre Julliard
13 static FARPROC16 INT_Vectors
[256];
16 /**********************************************************************
19 * Return the protected mode interrupt vector for a given interrupt.
21 FARPROC16
INT_GetPMHandler( BYTE intnum
)
23 return INT_Vectors
[intnum
];
27 /**********************************************************************
30 * Set the protected mode interrupt handler for a given interrupt.
32 void INT_SetPMHandler( BYTE intnum
, FARPROC16 handler
)
34 TRACE(int, "Set protected mode interrupt vector %02x <- %04x:%04x\n",
35 intnum
, HIWORD(handler
), LOWORD(handler
) );
36 INT_Vectors
[intnum
] = handler
;
40 /**********************************************************************
43 * Return the real mode interrupt vector for a given interrupt.
45 FARPROC16
INT_GetRMHandler( BYTE intnum
)
47 return ((FARPROC16
*)DOSMEM_MemoryBase(0))[intnum
];
51 /**********************************************************************
54 * Set the real mode interrupt handler for a given interrupt.
56 void INT_SetRMHandler( BYTE intnum
, FARPROC16 handler
)
58 TRACE(int, "Set real mode interrupt vector %02x <- %04x:%04x\n",
59 intnum
, HIWORD(handler
), LOWORD(handler
) );
60 ((FARPROC16
*)DOSMEM_MemoryBase(0))[intnum
] = handler
;
64 /**********************************************************************
67 * Return the interrupt vector for a given interrupt.
69 FARPROC16
INT_CtxGetHandler( CONTEXT
*context
, BYTE intnum
)
72 return ((FARPROC16
*)V86BASE(context
))[intnum
];
74 return INT_GetPMHandler(intnum
);
78 /**********************************************************************
81 * Set the interrupt handler for a given interrupt.
83 void INT_CtxSetHandler( CONTEXT
*context
, BYTE intnum
, FARPROC16 handler
)
86 TRACE(int, "Set real mode interrupt vector %02x <- %04x:%04x\n",
87 intnum
, HIWORD(handler
), LOWORD(handler
) );
88 ((FARPROC16
*)V86BASE(context
))[intnum
] = handler
;
90 INT_SetPMHandler(intnum
, handler
);
94 /**********************************************************************
95 * INT_RealModeInterrupt
97 * Handle real mode interrupts
99 int INT_RealModeInterrupt( BYTE intnum
, PCONTEXT context
)
101 /* we should really map to if1632/wprocs.spec, but not all
102 * interrupt handlers are adapted to support real mode yet */
105 INT_Int10Handler(context
);
108 INT_Int11Handler(context
);
111 INT_Int12Handler(context
);
114 INT_Int13Handler(context
);
117 INT_Int15Handler(context
);
120 INT_Int16Handler(context
);
123 INT_Int17Handler(context
);
126 INT_Int1aHandler(context
);
129 INT_Int20Handler(context
);
135 INT_Int25Handler(context
);
138 INT_Int2fHandler(context
);
141 INT_Int31Handler(context
);
144 INT_Int29Handler(context
);
147 FIXME(int, "Unknown Interrupt in DOS mode: 0x%x\n", intnum
);