From 4324b4778b480d8d56b7079fa94dca72657c7e1c Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Sat, 3 Jun 2000 04:52:14 +0000 Subject: [PATCH] Delay loading of interrupt table functions until they are needed. --- dlls/kernel/wprocs.spec | 239 ---------------------------------------- if1632/builtin.c | 59 +--------- include/builtin16.h | 1 - memory/instr.c | 6 + msdos/interrupts.c | 20 +++- 5 files changed, 26 insertions(+), 299 deletions(-) diff --git a/dlls/kernel/wprocs.spec b/dlls/kernel/wprocs.spec index 1c038237d1a..5d8115a7863 100644 --- a/dlls/kernel/wprocs.spec +++ b/dlls/kernel/wprocs.spec @@ -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 # diff --git a/if1632/builtin.c b/if1632/builtin.c index 53da9f9296c..2f1c64b324d 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 @@ 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 ); -} diff --git a/include/builtin16.h b/include/builtin16.h index 9d2f0691dbb..3142e158c56 100644 --- a/include/builtin16.h +++ b/include/builtin16.h @@ -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 ); diff --git a/memory/instr.c b/memory/instr.c index a4a454736c3..098d61ae42b 100644 --- a/memory/instr.c +++ b/memory/instr.c @@ -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); diff --git a/msdos/interrupts.c b/msdos/interrupts.c index 734bbed2e13..fce08ddaa53 100644 --- a/msdos/interrupts.c +++ b/msdos/interrupts.c @@ -6,14 +6,19 @@ #include #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]; }