winedos: Move 16-bit VxD support back into kernel.

This commit is contained in:
Alexandre Julliard 2009-12-29 12:32:36 +01:00
parent 475b7d226c
commit e7715126eb
8 changed files with 1698 additions and 1695 deletions

1
.gitignore vendored
View File

@ -118,7 +118,6 @@ dlls/sti/sti_wia.h
dlls/sti/sti_wia_p.c dlls/sti/sti_wia_p.c
dlls/urlmon/urlmon_urlmon.h dlls/urlmon/urlmon_urlmon.h
dlls/urlmon/urlmon_urlmon_p.c dlls/urlmon/urlmon_urlmon_p.c
dlls/wprocs.dll16
include/activaut.h include/activaut.h
include/activdbg.h include/activdbg.h
include/activscp.h include/activscp.h

View File

@ -18,7 +18,7 @@ DOCSUBDIRS = $(DLLSUBDIRS)
# 16-bit dlls # 16-bit dlls
WIN16_FILES = \ WIN16_FILES = \
wprocs.dll16
@MAKE_RULES@ @MAKE_RULES@
@ -28,9 +28,6 @@ all: $(BUILDSUBDIRS) @WIN16_FILES@
# Placeholders for 16-bit libraries # Placeholders for 16-bit libraries
wprocs.dll16:
echo "winedos.dll" >$@
# Import libraries # Import libraries
STATIC_IMPLIBEXT = $(IMPLIBEXT:def=def.a) STATIC_IMPLIBEXT = $(IMPLIBEXT:def=def.a)

View File

@ -298,4 +298,43 @@ static inline struct kernel_thread_data *kernel_get_thread_data(void)
"call " __ASM_NAME("__wine_call_from_32_regs") "\n\t" \ "call " __ASM_NAME("__wine_call_from_32_regs") "\n\t" \
"ret $(4*" #args ")" ) /* fake ret to make copy protections happy */ "ret $(4*" #args ")" ) /* fake ret to make copy protections happy */
#define AX_reg(context) ((WORD)(context)->Eax)
#define BX_reg(context) ((WORD)(context)->Ebx)
#define CX_reg(context) ((WORD)(context)->Ecx)
#define DX_reg(context) ((WORD)(context)->Edx)
#define SI_reg(context) ((WORD)(context)->Esi)
#define DI_reg(context) ((WORD)(context)->Edi)
#define AL_reg(context) ((BYTE)(context)->Eax)
#define AH_reg(context) ((BYTE)((context)->Eax >> 8))
#define BL_reg(context) ((BYTE)(context)->Ebx)
#define BH_reg(context) ((BYTE)((context)->Ebx >> 8))
#define CL_reg(context) ((BYTE)(context)->Ecx)
#define CH_reg(context) ((BYTE)((context)->Ecx >> 8))
#define DL_reg(context) ((BYTE)(context)->Edx)
#define DH_reg(context) ((BYTE)((context)->Edx >> 8))
#define SET_CFLAG(context) ((context)->EFlags |= 0x0001)
#define RESET_CFLAG(context) ((context)->EFlags &= ~0x0001)
#define SET_ZFLAG(context) ((context)->EFlags |= 0x0040)
#define RESET_ZFLAG(context) ((context)->EFlags &= ~0x0040)
#define ISV86(context) ((context)->EFlags & 0x00020000)
#define SET_AX(context,val) ((void)((context)->Eax = ((context)->Eax & ~0xffff) | (WORD)(val)))
#define SET_BX(context,val) ((void)((context)->Ebx = ((context)->Ebx & ~0xffff) | (WORD)(val)))
#define SET_CX(context,val) ((void)((context)->Ecx = ((context)->Ecx & ~0xffff) | (WORD)(val)))
#define SET_DX(context,val) ((void)((context)->Edx = ((context)->Edx & ~0xffff) | (WORD)(val)))
#define SET_SI(context,val) ((void)((context)->Esi = ((context)->Esi & ~0xffff) | (WORD)(val)))
#define SET_DI(context,val) ((void)((context)->Edi = ((context)->Edi & ~0xffff) | (WORD)(val)))
#define SET_AL(context,val) ((void)((context)->Eax = ((context)->Eax & ~0xff) | (BYTE)(val)))
#define SET_BL(context,val) ((void)((context)->Ebx = ((context)->Ebx & ~0xff) | (BYTE)(val)))
#define SET_CL(context,val) ((void)((context)->Ecx = ((context)->Ecx & ~0xff) | (BYTE)(val)))
#define SET_DL(context,val) ((void)((context)->Edx = ((context)->Edx & ~0xff) | (BYTE)(val)))
#define SET_AH(context,val) ((void)((context)->Eax = ((context)->Eax & ~0xff00) | (((BYTE)(val)) << 8)))
#define SET_BH(context,val) ((void)((context)->Ebx = ((context)->Ebx & ~0xff00) | (((BYTE)(val)) << 8)))
#define SET_CH(context,val) ((void)((context)->Ecx = ((context)->Ecx & ~0xff00) | (((BYTE)(val)) << 8)))
#define SET_DH(context,val) ((void)((context)->Edx = ((context)->Edx & ~0xff00) | (((BYTE)(val)) << 8)))
#endif /* __WINE_KERNEL16_PRIVATE_H */ #endif /* __WINE_KERNEL16_PRIVATE_H */

View File

@ -523,11 +523,29 @@
703 stub CallProc32WFix 703 stub CallProc32WFix
704 pascal -register SSConfirmSmallStack() SSConfirmSmallStack 704 pascal -register SSConfirmSmallStack() SSConfirmSmallStack
# Win95 krnl386.exe also exports ordinals 802-864, # Win95 krnl386.exe also exports ordinals 802-864,
# however, those seem to be only callback stubs that are # however, those seem to be only callback stubs that are
# never called directly by other modules ... # never called directly by other modules ...
################################################################
# VxD entry points
#
901 pascal -register __wine_vxd_vmm() __wine_vxd_vmm
905 pascal -register __wine_vxd_timer() __wine_vxd_timer
909 pascal -register __wine_vxd_reboot() __wine_vxd_reboot
910 pascal -register __wine_vxd_vdd() __wine_vxd_vdd
912 pascal -register __wine_vxd_vmd() __wine_vxd_vmd
914 pascal -register __wine_vxd_comm() __wine_vxd_comm
#915 pascal -register __wine_vxd_printer() __wine_vxd_printer
923 pascal -register __wine_vxd_shell() __wine_vxd_shell
933 pascal -register __wine_vxd_pagefile() __wine_vxd_pagefile
938 pascal -register __wine_vxd_apm() __wine_vxd_apm
939 pascal -register __wine_vxd_vxdloader() __wine_vxd_vxdloader
945 pascal -register __wine_vxd_win32s() __wine_vxd_win32s
951 pascal -register __wine_vxd_configmg() __wine_vxd_configmg
955 pascal -register __wine_vxd_enable() __wine_vxd_enable
1990 pascal -register __wine_vxd_timerapi() __wine_vxd_timerapi
################################################################ ################################################################
# 32-bit version of the various 16-bit functions exported by kernel32 # 32-bit version of the various 16-bit functions exported by kernel32
# #

File diff suppressed because it is too large Load Diff

View File

@ -5,8 +5,6 @@ VPATH = @srcdir@
MODULE = winedos.dll MODULE = winedos.dll
IMPORTS = user32 kernel32 ntdll IMPORTS = user32 kernel32 ntdll
SPEC_SRCS16 = wprocs.spec
C_SRCS = \ C_SRCS = \
devices.c \ devices.c \
dma.c \ dma.c \
@ -36,7 +34,6 @@ C_SRCS = \
soundblaster.c \ soundblaster.c \
timer.c \ timer.c \
vga.c \ vga.c \
vxd.c \
xms.c xms.c
@MAKE_DLL_RULES@ @MAKE_DLL_RULES@

View File

@ -39,8 +39,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(int); WINE_DEFAULT_DEBUG_CHANNEL(int);
/* base WPROCS.DLL ordinal number for VxDs */ /* base KERNEL ordinal number for VxDs */
#define VXD_BASE 400 #define VXD_BASE 900
typedef struct typedef struct
{ {
@ -432,8 +432,7 @@ static void do_int2f_16( CONTEXT86 *context )
case 0x84: /* Get device API entry point */ case 0x84: /* Get device API entry point */
{ {
HMODULE16 mod = GetModuleHandle16("wprocs"); HMODULE16 mod = GetModuleHandle16("kernel");
if (mod < 32) mod = LoadLibrary16( "wprocs" );
addr = (DWORD)GetProcAddress16( mod, (LPCSTR)(VXD_BASE + BX_reg(context)) ); addr = (DWORD)GetProcAddress16( mod, (LPCSTR)(VXD_BASE + BX_reg(context)) );
if (!addr) /* not supported */ if (!addr) /* not supported */
ERR("Accessing unknown VxD %04x - Expect a failure now.\n", BX_reg(context) ); ERR("Accessing unknown VxD %04x - Expect a failure now.\n", BX_reg(context) );

File diff suppressed because it is too large Load Diff