This patch makes some 32-bit DOS extenders almost work. Changelog: Ignore VCPI installation checks. Handle XMS query any extended memory function. Add stubs for get/set exception handler vector. Index: dlls/winedos/int67.c =================================================================== RCS file: /home/wine/wine/dlls/winedos/int67.c,v retrieving revision 1.7 diff -u -r1.7 int67.c --- dlls/winedos/int67.c 31 Aug 2002 18:47:00 -0000 1.7 +++ dlls/winedos/int67.c 1 Nov 2002 23:08:26 -0000 @@ -436,6 +436,21 @@ case 0x5b: /* EMS 4.0 - ALTERNATE MAP REGISTER SET */ case 0x5c: /* EMS 4.0 - PREPARE EXPANDED MEMORY HARDWARE FOR WARM BOOT */ case 0x5d: /* EMS 4.0 - ENABLE/DISABLE OS FUNCTION SET FUNCTIONS */ + INT_BARF(context,0x67); + break; + + case 0xde: /* Virtual Control Program Interface (VCPI) */ + if(AL_reg(context) == 0x00) { + /* + * VCPI INSTALLATION CHECK + * (AH_reg() != 0) means VCPI is not present + */ + TRACE("- VCPI installation check\n"); + return; + } else + INT_BARF(context,0x67); + break; + default: INT_BARF(context,0x67); } Index: dlls/winedos/xms.c =================================================================== RCS file: /home/wine/wine/dlls/winedos/xms.c,v retrieving revision 1.6 diff -u -r1.6 xms.c --- dlls/winedos/xms.c 31 Aug 2002 18:47:00 -0000 1.6 +++ dlls/winedos/xms.c 1 Nov 2002 23:07:22 -0000 @@ -104,6 +104,24 @@ if (move->Dest.Handle) GlobalUnlock16(move->Dest.Handle); break; } + case 0x88: /* Query Any Free Extended Memory */ + { + MEMORYSTATUS status; + SYSTEM_INFO info; + + TRACE("query any free extended memory\n"); + + GlobalMemoryStatus( &status ); + GetSystemInfo( &info ); + context->Eax = status.dwAvailVirtual >> 10; + context->Edx = status.dwAvailVirtual >> 10; + context->Ecx = (DWORD)info.lpMaximumApplicationAddress; + SET_BL( context, 0 ); /* No errors. */ + + TRACE("returning largest %ldK, total %ldK, highest 0x%lx\n", + context->Eax, context->Edx, context->Ecx); + } + break; default: INT_BARF( context, 0x31 ); SET_AX( context, 0x0000 ); /* failure */ Index: dlls/winedos/int31.c =================================================================== RCS file: /home/wine/wine/dlls/winedos/int31.c,v retrieving revision 1.11 diff -u -r1.11 int31.c --- dlls/winedos/int31.c 29 Oct 2002 23:09:30 -0000 1.11 +++ dlls/winedos/int31.c 1 Nov 2002 23:05:35 -0000 @@ -438,7 +438,8 @@ pm_ctx.SegFs = 0; pm_ctx.SegGs = 0; - TRACE("DOS program is now entering protected mode\n"); + TRACE("DOS program is now entering %d-bit protected mode\n", + DOSVM_IsDos32() ? 32 : 16); wine_call_to_16_regs_short(&pm_ctx, 0); /* in the current state of affairs, we won't ever actually return here... */ @@ -677,6 +678,32 @@ RESET_CFLAG(context); switch(AX_reg(context)) { + case 0x0008: /* Set selector limit */ + { + DWORD limit = MAKELONG( DX_reg(context), CX_reg(context) ); + TRACE( "set selector limit (0x%04x,0x%08lx)\n", + BX_reg(context), limit ); + SetSelectorLimit16( BX_reg(context), limit ); + } + break; + + case 0x0202: /* Get Processor Exception Handler Vector */ + FIXME( "Get Processor Exception Handler Vector (0x%02x)\n", + BL_reg(context) ); + if (DOSVM_IsDos32()) { + SET_CX( context, 0 ); + context->Edx = 0; + } else { + SET_CX( context, 0 ); + SET_DX( context, 0 ); + } + break; + + case 0x0203: /* Set Processor Exception Handler Vector */ + FIXME( "Set Processor Exception Handler Vector (0x%02x)\n", + BL_reg(context) ); + break; + case 0x0204: /* Get protected mode interrupt vector */ TRACE("get protected mode interrupt handler (0x%02x)\n", BL_reg(context)); -- Jukka Heinonen <http://www.iki.fi/jhei/>