diff --git a/memory/instr.c b/memory/instr.c index c586cf40636..54162ea78c0 100644 --- a/memory/instr.c +++ b/memory/instr.c @@ -43,9 +43,7 @@ DECLARE_DEBUG_CHANNEL(io) (PTR_SEG_OFF_TO_LIN(SS_sig(context),STACK_sig(context))))) /* For invalid registers fixup */ -extern DWORD CallFrom16_Start,CallFrom16_End; -extern DWORD CALLTO16_Start,CALLTO16_End; - +int (*INSTR_IsRelay)( const void *addr ) = NULL; /*********************************************************************** * INSTR_ReplaceSelector @@ -60,11 +58,8 @@ extern DWORD CALLTO16_Start,CALLTO16_End; */ static BOOL INSTR_ReplaceSelector( SIGCONTEXT *context, WORD *sel ) { - if ( IS_SELECTOR_SYSTEM(CS_sig(context)) ) - if ( ( EIP_sig(context) >= (DWORD)&CallFrom16_Start && - EIP_sig(context) < (DWORD)&CallFrom16_End ) - || ( EIP_sig(context) >= (DWORD)&CALLTO16_Start && - EIP_sig(context) < (DWORD)&CALLTO16_End ) ) + if (IS_SELECTOR_SYSTEM(CS_sig(context))) + if (INSTR_IsRelay && INSTR_IsRelay( (void *)EIP_sig(context) )) { /* Saved selector may have become invalid when the relay code */ /* tries to restore it. We simply clear it. */ diff --git a/miscemu/main.c b/miscemu/main.c index c95d852411d..84f94ff3092 100644 --- a/miscemu/main.c +++ b/miscemu/main.c @@ -23,6 +23,18 @@ static int MAIN_argc; static char **MAIN_argv; +extern int (*INSTR_IsRelay)( const void *addr ); + +static int is_relay_addr( const void *addr ) +{ + extern char CallFrom16_Start, CallFrom16_End, CALLTO16_Start, CALLTO16_End; + + return ((((char *)addr >= &CallFrom16_Start) && + ((char *)addr < &CallFrom16_End)) || + (((char *)addr >= &CALLTO16_Start) && + ((char *)addr < &CALLTO16_End))); +} + /*********************************************************************** * Emulator initialisation */ @@ -141,6 +153,7 @@ int main( int argc, char *argv[] ) MAIN_argc = argc; MAIN_argv = argv; /* Set up debugger hook */ + INSTR_IsRelay = is_relay_addr; EXC_SetDebugEventHook( wine_debugger ); if (Options.debug) diff --git a/programs/clock/Wa.rc b/programs/clock/Wa.rc index 2d00d0aed2a..1ef7bdb6696 100644 --- a/programs/clock/Wa.rc +++ b/programs/clock/Wa.rc @@ -7,7 +7,7 @@ */ #define LANGUAGE_ID Wa -#define LANGUAGE_NUMBER 0x90 +#define LANGUAGE_NUMBER 90 /* System Menu */ diff --git a/programs/progman/Wa.rc b/programs/progman/Wa.rc index cb5dfb46d30..bb0e7aaf98a 100644 --- a/programs/progman/Wa.rc +++ b/programs/progman/Wa.rc @@ -6,7 +6,7 @@ */ #define LANGUAGE_ID Wa -#define LANGUAGE_NUMBER 0x90 +#define LANGUAGE_NUMBER 90 #define LANGUAGE_MENU_ITEM "&Walon" /* Menu */ diff --git a/programs/winhelp/Wa.rc b/programs/winhelp/Wa.rc index f1ff1baa0ad..16a38106600 100644 --- a/programs/winhelp/Wa.rc +++ b/programs/winhelp/Wa.rc @@ -8,7 +8,7 @@ /* This file is not yet complete !! */ #define LANGUAGE_ID Wa -#define LANGUAGE_NUMBER 0x90 +#define LANGUAGE_NUMBER 90 /* Menu */