Delay loading of interrupt table functions until they are needed.
diff --git a/dlls/kernel/wprocs.spec b/dlls/kernel/wprocs.spec
index 1c03823..5d8115a 100644
--- a/dlls/kernel/wprocs.spec
+++ b/dlls/kernel/wprocs.spec
@@ -7,263 +7,24 @@
# 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
#
diff --git a/if1632/builtin.c b/if1632/builtin.c
index 53da9f9..2f1c64b 100644
--- a/if1632/builtin.c
+++ b/if1632/builtin.c
@@ -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 @@
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 )
{
@@ -144,38 +133,6 @@
/***********************************************************************
- * 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
*
* Load a built-in module.
@@ -288,17 +245,3 @@
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 );
-}
diff --git a/include/builtin16.h b/include/builtin16.h
index 9d2f069..3142e15 100644
--- a/include/builtin16.h
+++ b/include/builtin16.h
@@ -81,7 +81,6 @@
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 );
diff --git a/memory/instr.c b/memory/instr.c
index a4a4547..098d61a 100644
--- a/memory/instr.c
+++ b/memory/instr.c
@@ -680,6 +680,12 @@
{
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);
diff --git a/msdos/interrupts.c b/msdos/interrupts.c
index 734bbed..fce08dd 100644
--- a/msdos/interrupts.c
+++ b/msdos/interrupts.c
@@ -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 @@
*/
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];
}