Delay loading of interrupt table functions until they are needed.

This commit is contained in:
Alexandre Julliard 2000-06-03 04:52:14 +00:00
parent de304909cd
commit 4324b4778b
5 changed files with 26 additions and 299 deletions

View File

@ -7,263 +7,24 @@ type win16
# Interrupt vectors 0-255 are ordinals 100-355
# The 'interrupt' keyword takes care of the flags pushed on the stack by the interrupt
100 interrupt INT_Int00Handler() BUILTIN_DefaultIntHandler
101 interrupt INT_Int01Handler() BUILTIN_DefaultIntHandler
102 interrupt INT_Int02Handler() BUILTIN_DefaultIntHandler
103 interrupt INT_Int03Handler() BUILTIN_DefaultIntHandler
104 interrupt INT_Int04Handler() BUILTIN_DefaultIntHandler
105 interrupt INT_Int05Handler() BUILTIN_DefaultIntHandler
106 interrupt INT_Int06Handler() BUILTIN_DefaultIntHandler
107 interrupt INT_Int07Handler() BUILTIN_DefaultIntHandler
108 interrupt INT_Int08Handler() BUILTIN_DefaultIntHandler
109 interrupt INT_Int09Handler() BUILTIN_DefaultIntHandler
110 interrupt INT_Int0aHandler() BUILTIN_DefaultIntHandler
111 interrupt INT_Int0bHandler() BUILTIN_DefaultIntHandler
112 interrupt INT_Int0cHandler() BUILTIN_DefaultIntHandler
113 interrupt INT_Int0dHandler() BUILTIN_DefaultIntHandler
114 interrupt INT_Int0eHandler() BUILTIN_DefaultIntHandler
115 interrupt INT_Int0fHandler() BUILTIN_DefaultIntHandler
116 interrupt INT_Int10Handler() INT_Int10Handler
117 interrupt INT_Int11Handler() INT_Int11Handler
118 interrupt INT_Int12Handler() INT_Int12Handler
119 interrupt INT_Int13Handler() INT_Int13Handler
120 interrupt INT_Int14Handler() BUILTIN_DefaultIntHandler
121 interrupt INT_Int15Handler() INT_Int15Handler
122 interrupt INT_Int16Handler() BUILTIN_DefaultIntHandler
123 interrupt INT_Int17Handler() BUILTIN_DefaultIntHandler
124 interrupt INT_Int18Handler() BUILTIN_DefaultIntHandler
125 interrupt INT_Int19Handler() BUILTIN_DefaultIntHandler
126 interrupt INT_Int1aHandler() INT_Int1aHandler
127 interrupt INT_Int1bHandler() BUILTIN_DefaultIntHandler
128 interrupt INT_Int1cHandler() BUILTIN_DefaultIntHandler
129 interrupt INT_Int1dHandler() BUILTIN_DefaultIntHandler
130 interrupt INT_Int1eHandler() BUILTIN_DefaultIntHandler
131 interrupt INT_Int1fHandler() BUILTIN_DefaultIntHandler
132 interrupt INT_Int20Handler() INT_Int20Handler
133 interrupt INT_Int21Handler() DOS3Call
134 interrupt INT_Int22Handler() BUILTIN_DefaultIntHandler
135 interrupt INT_Int23Handler() BUILTIN_DefaultIntHandler
136 interrupt INT_Int24Handler() BUILTIN_DefaultIntHandler
# Note: int 25 and 26 don't pop the flags from the stack
137 register INT_Int25Handler() INT_Int25Handler
138 register INT_Int26Handler() INT_Int26Handler
139 interrupt INT_Int27Handler() BUILTIN_DefaultIntHandler
140 interrupt INT_Int28Handler() BUILTIN_DefaultIntHandler
141 interrupt INT_Int29Handler() BUILTIN_DefaultIntHandler
142 interrupt INT_Int2aHandler() INT_Int2aHandler
143 interrupt INT_Int2bHandler() BUILTIN_DefaultIntHandler
144 interrupt INT_Int2cHandler() BUILTIN_DefaultIntHandler
145 interrupt INT_Int2dHandler() BUILTIN_DefaultIntHandler
146 interrupt INT_Int2eHandler() BUILTIN_DefaultIntHandler
147 interrupt INT_Int2fHandler() INT_Int2fHandler
148 interrupt INT_Int30Handler() BUILTIN_DefaultIntHandler
149 interrupt INT_Int31Handler() INT_Int31Handler
150 interrupt INT_Int32Handler() BUILTIN_DefaultIntHandler
151 interrupt INT_Int33Handler() BUILTIN_DefaultIntHandler
152 interrupt INT_Int34Handler() BUILTIN_DefaultIntHandler
153 interrupt INT_Int35Handler() BUILTIN_DefaultIntHandler
154 interrupt INT_Int36Handler() BUILTIN_DefaultIntHandler
155 interrupt INT_Int37Handler() BUILTIN_DefaultIntHandler
156 interrupt INT_Int38Handler() BUILTIN_DefaultIntHandler
157 interrupt INT_Int39Handler() BUILTIN_DefaultIntHandler
158 interrupt INT_Int3aHandler() BUILTIN_DefaultIntHandler
159 interrupt INT_Int3bHandler() BUILTIN_DefaultIntHandler
160 interrupt INT_Int3cHandler() BUILTIN_DefaultIntHandler
161 interrupt INT_Int3dHandler() INT_Int3dHandler
162 interrupt INT_Int3eHandler() BUILTIN_DefaultIntHandler
163 interrupt INT_Int3fHandler() BUILTIN_DefaultIntHandler
164 interrupt INT_Int40Handler() BUILTIN_DefaultIntHandler
165 interrupt INT_Int41Handler() INT_Int41Handler
166 interrupt INT_Int42Handler() BUILTIN_DefaultIntHandler
167 interrupt INT_Int43Handler() BUILTIN_DefaultIntHandler
168 interrupt INT_Int44Handler() BUILTIN_DefaultIntHandler
169 interrupt INT_Int45Handler() BUILTIN_DefaultIntHandler
170 interrupt INT_Int46Handler() BUILTIN_DefaultIntHandler
171 interrupt INT_Int47Handler() BUILTIN_DefaultIntHandler
172 interrupt INT_Int48Handler() BUILTIN_DefaultIntHandler
173 interrupt INT_Int49Handler() BUILTIN_DefaultIntHandler
174 interrupt INT_Int4aHandler() BUILTIN_DefaultIntHandler
175 interrupt INT_Int4bHandler() INT_Int4bHandler
176 interrupt INT_Int4cHandler() BUILTIN_DefaultIntHandler
177 interrupt INT_Int4dHandler() BUILTIN_DefaultIntHandler
178 interrupt INT_Int4eHandler() BUILTIN_DefaultIntHandler
179 interrupt INT_Int4fHandler() BUILTIN_DefaultIntHandler
180 interrupt INT_Int50Handler() BUILTIN_DefaultIntHandler
181 interrupt INT_Int51Handler() BUILTIN_DefaultIntHandler
182 interrupt INT_Int52Handler() BUILTIN_DefaultIntHandler
183 interrupt INT_Int53Handler() BUILTIN_DefaultIntHandler
184 interrupt INT_Int54Handler() BUILTIN_DefaultIntHandler
185 interrupt INT_Int55Handler() BUILTIN_DefaultIntHandler
186 interrupt INT_Int56Handler() BUILTIN_DefaultIntHandler
187 interrupt INT_Int57Handler() BUILTIN_DefaultIntHandler
188 interrupt INT_Int58Handler() BUILTIN_DefaultIntHandler
189 interrupt INT_Int59Handler() BUILTIN_DefaultIntHandler
190 interrupt INT_Int5aHandler() BUILTIN_DefaultIntHandler
191 interrupt INT_Int5bHandler() BUILTIN_DefaultIntHandler
192 interrupt INT_Int5cHandler() NetBIOSCall16
193 interrupt INT_Int5dHandler() BUILTIN_DefaultIntHandler
194 interrupt INT_Int5eHandler() BUILTIN_DefaultIntHandler
195 interrupt INT_Int5fHandler() BUILTIN_DefaultIntHandler
196 interrupt INT_Int60Handler() BUILTIN_DefaultIntHandler
197 interrupt INT_Int61Handler() BUILTIN_DefaultIntHandler
198 interrupt INT_Int62Handler() BUILTIN_DefaultIntHandler
199 interrupt INT_Int63Handler() BUILTIN_DefaultIntHandler
200 interrupt INT_Int64Handler() BUILTIN_DefaultIntHandler
201 interrupt INT_Int65Handler() BUILTIN_DefaultIntHandler
202 interrupt INT_Int66Handler() BUILTIN_DefaultIntHandler
203 interrupt INT_Int67Handler() BUILTIN_DefaultIntHandler
204 interrupt INT_Int68Handler() BUILTIN_DefaultIntHandler
205 interrupt INT_Int69Handler() BUILTIN_DefaultIntHandler
206 interrupt INT_Int6aHandler() BUILTIN_DefaultIntHandler
207 interrupt INT_Int6bHandler() BUILTIN_DefaultIntHandler
208 interrupt INT_Int6cHandler() BUILTIN_DefaultIntHandler
209 interrupt INT_Int6dHandler() BUILTIN_DefaultIntHandler
210 interrupt INT_Int6eHandler() BUILTIN_DefaultIntHandler
211 interrupt INT_Int6fHandler() BUILTIN_DefaultIntHandler
212 interrupt INT_Int70Handler() BUILTIN_DefaultIntHandler
213 interrupt INT_Int71Handler() BUILTIN_DefaultIntHandler
214 interrupt INT_Int72Handler() BUILTIN_DefaultIntHandler
215 interrupt INT_Int73Handler() BUILTIN_DefaultIntHandler
216 interrupt INT_Int74Handler() BUILTIN_DefaultIntHandler
217 interrupt INT_Int75Handler() BUILTIN_DefaultIntHandler
218 interrupt INT_Int76Handler() BUILTIN_DefaultIntHandler
219 interrupt INT_Int77Handler() BUILTIN_DefaultIntHandler
220 interrupt INT_Int78Handler() BUILTIN_DefaultIntHandler
221 interrupt INT_Int79Handler() BUILTIN_DefaultIntHandler
222 interrupt INT_Int7aHandler() BUILTIN_DefaultIntHandler
223 interrupt INT_Int7bHandler() BUILTIN_DefaultIntHandler
224 interrupt INT_Int7cHandler() BUILTIN_DefaultIntHandler
225 interrupt INT_Int7dHandler() BUILTIN_DefaultIntHandler
226 interrupt INT_Int7eHandler() BUILTIN_DefaultIntHandler
227 interrupt INT_Int7fHandler() BUILTIN_DefaultIntHandler
228 interrupt INT_Int80Handler() BUILTIN_DefaultIntHandler
229 interrupt INT_Int81Handler() BUILTIN_DefaultIntHandler
230 interrupt INT_Int82Handler() BUILTIN_DefaultIntHandler
231 interrupt INT_Int83Handler() BUILTIN_DefaultIntHandler
232 interrupt INT_Int84Handler() BUILTIN_DefaultIntHandler
233 interrupt INT_Int85Handler() BUILTIN_DefaultIntHandler
234 interrupt INT_Int86Handler() BUILTIN_DefaultIntHandler
235 interrupt INT_Int87Handler() BUILTIN_DefaultIntHandler
236 interrupt INT_Int88Handler() BUILTIN_DefaultIntHandler
237 interrupt INT_Int89Handler() BUILTIN_DefaultIntHandler
238 interrupt INT_Int8aHandler() BUILTIN_DefaultIntHandler
239 interrupt INT_Int8bHandler() BUILTIN_DefaultIntHandler
240 interrupt INT_Int8cHandler() BUILTIN_DefaultIntHandler
241 interrupt INT_Int8dHandler() BUILTIN_DefaultIntHandler
242 interrupt INT_Int8eHandler() BUILTIN_DefaultIntHandler
243 interrupt INT_Int8fHandler() BUILTIN_DefaultIntHandler
244 interrupt INT_Int90Handler() BUILTIN_DefaultIntHandler
245 interrupt INT_Int91Handler() BUILTIN_DefaultIntHandler
246 interrupt INT_Int92Handler() BUILTIN_DefaultIntHandler
247 interrupt INT_Int93Handler() BUILTIN_DefaultIntHandler
248 interrupt INT_Int94Handler() BUILTIN_DefaultIntHandler
249 interrupt INT_Int95Handler() BUILTIN_DefaultIntHandler
250 interrupt INT_Int96Handler() BUILTIN_DefaultIntHandler
251 interrupt INT_Int97Handler() BUILTIN_DefaultIntHandler
252 interrupt INT_Int98Handler() BUILTIN_DefaultIntHandler
253 interrupt INT_Int99Handler() BUILTIN_DefaultIntHandler
254 interrupt INT_Int9aHandler() BUILTIN_DefaultIntHandler
255 interrupt INT_Int9bHandler() BUILTIN_DefaultIntHandler
256 interrupt INT_Int9cHandler() BUILTIN_DefaultIntHandler
257 interrupt INT_Int9dHandler() BUILTIN_DefaultIntHandler
258 interrupt INT_Int9eHandler() BUILTIN_DefaultIntHandler
259 interrupt INT_Int9fHandler() BUILTIN_DefaultIntHandler
260 interrupt INT_Inta0Handler() BUILTIN_DefaultIntHandler
261 interrupt INT_Inta1Handler() BUILTIN_DefaultIntHandler
262 interrupt INT_Inta2Handler() BUILTIN_DefaultIntHandler
263 interrupt INT_Inta3Handler() BUILTIN_DefaultIntHandler
264 interrupt INT_Inta4Handler() BUILTIN_DefaultIntHandler
265 interrupt INT_Inta5Handler() BUILTIN_DefaultIntHandler
266 interrupt INT_Inta6Handler() BUILTIN_DefaultIntHandler
267 interrupt INT_Inta7Handler() BUILTIN_DefaultIntHandler
268 interrupt INT_Inta8Handler() BUILTIN_DefaultIntHandler
269 interrupt INT_Inta9Handler() BUILTIN_DefaultIntHandler
270 interrupt INT_IntaaHandler() BUILTIN_DefaultIntHandler
271 interrupt INT_IntabHandler() BUILTIN_DefaultIntHandler
272 interrupt INT_IntacHandler() BUILTIN_DefaultIntHandler
273 interrupt INT_IntadHandler() BUILTIN_DefaultIntHandler
274 interrupt INT_IntaeHandler() BUILTIN_DefaultIntHandler
275 interrupt INT_IntafHandler() BUILTIN_DefaultIntHandler
276 interrupt INT_Intb0Handler() BUILTIN_DefaultIntHandler
277 interrupt INT_Intb1Handler() BUILTIN_DefaultIntHandler
278 interrupt INT_Intb2Handler() BUILTIN_DefaultIntHandler
279 interrupt INT_Intb3Handler() BUILTIN_DefaultIntHandler
280 interrupt INT_Intb4Handler() BUILTIN_DefaultIntHandler
281 interrupt INT_Intb5Handler() BUILTIN_DefaultIntHandler
282 interrupt INT_Intb6Handler() BUILTIN_DefaultIntHandler
283 interrupt INT_Intb7Handler() BUILTIN_DefaultIntHandler
284 interrupt INT_Intb8Handler() BUILTIN_DefaultIntHandler
285 interrupt INT_Intb9Handler() BUILTIN_DefaultIntHandler
286 interrupt INT_IntbaHandler() BUILTIN_DefaultIntHandler
287 interrupt INT_IntbbHandler() BUILTIN_DefaultIntHandler
288 interrupt INT_IntbcHandler() BUILTIN_DefaultIntHandler
289 interrupt INT_IntbdHandler() BUILTIN_DefaultIntHandler
290 interrupt INT_IntbeHandler() BUILTIN_DefaultIntHandler
291 interrupt INT_IntbfHandler() BUILTIN_DefaultIntHandler
292 interrupt INT_Intc0Handler() BUILTIN_DefaultIntHandler
293 interrupt INT_Intc1Handler() BUILTIN_DefaultIntHandler
294 interrupt INT_Intc2Handler() BUILTIN_DefaultIntHandler
295 interrupt INT_Intc3Handler() BUILTIN_DefaultIntHandler
296 interrupt INT_Intc4Handler() BUILTIN_DefaultIntHandler
297 interrupt INT_Intc5Handler() BUILTIN_DefaultIntHandler
298 interrupt INT_Intc6Handler() BUILTIN_DefaultIntHandler
299 interrupt INT_Intc7Handler() BUILTIN_DefaultIntHandler
300 interrupt INT_Intc8Handler() BUILTIN_DefaultIntHandler
301 interrupt INT_Intc9Handler() BUILTIN_DefaultIntHandler
302 interrupt INT_IntcaHandler() BUILTIN_DefaultIntHandler
303 interrupt INT_IntcbHandler() BUILTIN_DefaultIntHandler
304 interrupt INT_IntccHandler() BUILTIN_DefaultIntHandler
305 interrupt INT_IntcdHandler() BUILTIN_DefaultIntHandler
306 interrupt INT_IntceHandler() BUILTIN_DefaultIntHandler
307 interrupt INT_IntcfHandler() BUILTIN_DefaultIntHandler
308 interrupt INT_Intd0Handler() BUILTIN_DefaultIntHandler
309 interrupt INT_Intd1Handler() BUILTIN_DefaultIntHandler
310 interrupt INT_Intd2Handler() BUILTIN_DefaultIntHandler
311 interrupt INT_Intd3Handler() BUILTIN_DefaultIntHandler
312 interrupt INT_Intd4Handler() BUILTIN_DefaultIntHandler
313 interrupt INT_Intd5Handler() BUILTIN_DefaultIntHandler
314 interrupt INT_Intd6Handler() BUILTIN_DefaultIntHandler
315 interrupt INT_Intd7Handler() BUILTIN_DefaultIntHandler
316 interrupt INT_Intd8Handler() BUILTIN_DefaultIntHandler
317 interrupt INT_Intd9Handler() BUILTIN_DefaultIntHandler
318 interrupt INT_IntdaHandler() BUILTIN_DefaultIntHandler
319 interrupt INT_IntdbHandler() BUILTIN_DefaultIntHandler
320 interrupt INT_IntdcHandler() BUILTIN_DefaultIntHandler
321 interrupt INT_IntddHandler() BUILTIN_DefaultIntHandler
322 interrupt INT_IntdeHandler() BUILTIN_DefaultIntHandler
323 interrupt INT_IntdfHandler() BUILTIN_DefaultIntHandler
324 interrupt INT_Inte0Handler() BUILTIN_DefaultIntHandler
325 interrupt INT_Inte1Handler() BUILTIN_DefaultIntHandler
326 interrupt INT_Inte2Handler() BUILTIN_DefaultIntHandler
327 interrupt INT_Inte3Handler() BUILTIN_DefaultIntHandler
328 interrupt INT_Inte4Handler() BUILTIN_DefaultIntHandler
329 interrupt INT_Inte5Handler() BUILTIN_DefaultIntHandler
330 interrupt INT_Inte6Handler() BUILTIN_DefaultIntHandler
331 interrupt INT_Inte7Handler() BUILTIN_DefaultIntHandler
332 interrupt INT_Inte8Handler() BUILTIN_DefaultIntHandler
333 interrupt INT_Inte9Handler() BUILTIN_DefaultIntHandler
334 interrupt INT_InteaHandler() BUILTIN_DefaultIntHandler
335 interrupt INT_IntebHandler() BUILTIN_DefaultIntHandler
336 interrupt INT_IntecHandler() BUILTIN_DefaultIntHandler
337 interrupt INT_IntedHandler() BUILTIN_DefaultIntHandler
338 interrupt INT_InteeHandler() BUILTIN_DefaultIntHandler
339 interrupt INT_IntefHandler() BUILTIN_DefaultIntHandler
340 interrupt INT_Intf0Handler() BUILTIN_DefaultIntHandler
341 interrupt INT_Intf1Handler() BUILTIN_DefaultIntHandler
342 interrupt INT_Intf2Handler() BUILTIN_DefaultIntHandler
343 interrupt INT_Intf3Handler() BUILTIN_DefaultIntHandler
344 interrupt INT_Intf4Handler() BUILTIN_DefaultIntHandler
345 interrupt INT_Intf5Handler() BUILTIN_DefaultIntHandler
346 interrupt INT_Intf6Handler() BUILTIN_DefaultIntHandler
347 interrupt INT_Intf7Handler() BUILTIN_DefaultIntHandler
348 interrupt INT_Intf8Handler() BUILTIN_DefaultIntHandler
349 interrupt INT_Intf9Handler() BUILTIN_DefaultIntHandler
350 interrupt INT_IntfaHandler() BUILTIN_DefaultIntHandler
351 interrupt INT_IntfbHandler() BUILTIN_DefaultIntHandler
352 interrupt INT_IntfcHandler() BUILTIN_DefaultIntHandler
353 interrupt INT_IntfdHandler() BUILTIN_DefaultIntHandler
354 interrupt INT_IntfeHandler() BUILTIN_DefaultIntHandler
355 interrupt INT_IntffHandler() BUILTIN_DefaultIntHandler
# VxDs. The first Vxd is at 400
#

View File

@ -17,7 +17,6 @@
#include "heap.h"
#include "module.h"
#include "miscemu.h"
#include "neexe.h"
#include "stackframe.h"
#include "user.h"
#include "process.h"
@ -42,21 +41,11 @@ typedef struct
static const BUILTIN16_DESCRIPTOR *builtin_dlls[MAX_DLLS];
static int nb_dlls;
/* list of DLLs that should always be loaded at startup */
static const char * const always_load[] =
{
"system", "display", "wprocs", NULL
};
/* Ordinal number for interrupt 0 handler in WPROCS.DLL */
#define FIRST_INTERRUPT_ORDINAL 100
/***********************************************************************
* BUILTIN_DoLoadModule16
*
* Load a built-in Win16 module. Helper function for BUILTIN_LoadModule
* and BUILTIN_Init.
* Load a built-in Win16 module. Helper function for BUILTIN_LoadModule.
*/
static HMODULE16 BUILTIN_DoLoadModule16( const BUILTIN16_DESCRIPTOR *descr )
{
@ -143,38 +132,6 @@ static HMODULE16 BUILTIN_DoLoadModule16( const BUILTIN16_DESCRIPTOR *descr )
}
/***********************************************************************
* BUILTIN_Init
*
* Load all built-in modules marked as 'always used'.
*/
BOOL BUILTIN_Init(void)
{
WORD vector;
HMODULE16 hModule;
const char * const *ptr = always_load;
while (*ptr)
{
if (!BUILTIN_LoadModule( *ptr )) return FALSE;
ptr++;
}
/* Set interrupt vectors from entry points in WPROCS.DLL */
hModule = GetModuleHandle16( "WPROCS" );
for (vector = 0; vector < 256; vector++)
{
FARPROC16 proc = NE_GetEntryPoint( hModule,
FIRST_INTERRUPT_ORDINAL + vector );
assert(proc);
INT_SetPMHandler( vector, proc );
}
return TRUE;
}
/***********************************************************************
* BUILTIN_LoadModule
*
@ -288,17 +245,3 @@ void BUILTIN_RegisterDLL( const BUILTIN16_DESCRIPTOR *descr )
assert( nb_dlls < MAX_DLLS );
builtin_dlls[nb_dlls++] = descr;
}
/**********************************************************************
* BUILTIN_DefaultIntHandler
*
* Default interrupt handler.
*/
void WINAPI BUILTIN_DefaultIntHandler( CONTEXT86 *context )
{
WORD ordinal;
char name[80];
BUILTIN_GetEntryPoint16( CURRENT_STACK16, name, &ordinal );
INT_BARF( context, ordinal - FIRST_INTERRUPT_ORDINAL );
}

View File

@ -81,7 +81,6 @@ typedef struct
const void *rsrc; /* resources data */
} BUILTIN16_DESCRIPTOR;
extern BOOL BUILTIN_Init(void);
extern HMODULE16 BUILTIN_LoadModule( LPCSTR name );
extern LPCSTR BUILTIN_GetEntryPoint16( struct _STACK16FRAME *frame, LPSTR name, WORD *pOrd );
extern void BUILTIN_RegisterDLL( const BUILTIN16_DESCRIPTOR *descr );

View File

@ -680,6 +680,12 @@ BOOL INSTR_EmulateInstruction( CONTEXT86 *context )
{
FARPROC16 addr = INT_GetPMHandler( instr[1] );
WORD *stack = (WORD *)STACK_PTR( context );
if (!addr)
{
FIXME("no handler for interrupt %02x, ignoring it\n", instr[1]);
EIP_reg(context) += prefixlen + 2;
return TRUE;
}
/* Push the flags and return address on the stack */
*(--stack) = LOWORD(EFL_reg(context));
*(--stack) = CS_reg(context);

View File

@ -6,14 +6,19 @@
#include <sys/types.h>
#include "windef.h"
#include "wine/winbase16.h"
#include "miscemu.h"
#include "msdos.h"
#include "module.h"
#include "debugtools.h"
DEFAULT_DEBUG_CHANNEL(int)
DEFAULT_DEBUG_CHANNEL(int);
static FARPROC16 INT_Vectors[256];
/* Ordinal number for interrupt 0 handler in WPROCS.DLL */
#define FIRST_INTERRUPT 100
/**********************************************************************
* INT_GetPMHandler
@ -22,6 +27,19 @@ static FARPROC16 INT_Vectors[256];
*/
FARPROC16 INT_GetPMHandler( BYTE intnum )
{
if (!INT_Vectors[intnum])
{
static HMODULE16 wprocs;
if (!wprocs)
{
if ((wprocs = GetModuleHandle16( "wprocs" )) < 32)
{
ERR("could not load wprocs.dll\n");
return 0;
}
}
INT_Vectors[intnum] = NE_GetEntryPoint( wprocs, FIRST_INTERRUPT + intnum );
}
return INT_Vectors[intnum];
}