Author: hbelusca Date: Sun Dec 15 15:35:38 2013 New Revision: 61277
URL: http://svn.reactos.org/svn/reactos?rev=61277&view=rev Log: [NTVDM]: Report the "correct" DOS version: 5.00 (or 5.50 depending on which DOS function you call) for NT+ compatibility (allows us to test windows' command.com, debug.com and so on... and therefore to know which BOPs they call).
Modified: branches/ntvdm/subsystems/ntvdm/bop.c branches/ntvdm/subsystems/ntvdm/dos.c branches/ntvdm/subsystems/ntvdm/dos.h
Modified: branches/ntvdm/subsystems/ntvdm/bop.c URL: http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/bop.c?rev... ============================================================================== --- branches/ntvdm/subsystems/ntvdm/bop.c [iso-8859-1] (original) +++ branches/ntvdm/subsystems/ntvdm/bop.c [iso-8859-1] Sun Dec 15 15:35:38 2013 @@ -24,262 +24,262 @@ */ EMULATOR_BOP_PROC BopProc[EMULATOR_MAX_BOP_NUM] = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - ControlBop + NULL, // 0x00 + NULL, // 0x01 + NULL, // 0x02 + NULL, // 0x03 + NULL, // 0x04 + NULL, // 0x05 + NULL, // 0x06 + NULL, // 0x07 + NULL, // 0x08 + NULL, // 0x09 + NULL, // 0x0A + NULL, // 0x0B + NULL, // 0x0C + NULL, // 0x0D + NULL, // 0x0E + NULL, // 0x0F + NULL, // 0x10 + NULL, // 0x11 + NULL, // 0x12 + NULL, // 0x13 + NULL, // 0x14 + NULL, // 0x15 + NULL, // 0x16 + NULL, // 0x17 + NULL, // 0x18 + NULL, // 0x19 + NULL, // 0x1A + NULL, // 0x1B + NULL, // 0x1C + NULL, // 0x1D + NULL, // 0x1E + NULL, // 0x1F + NULL, // 0x20 + NULL, // 0x21 + NULL, // 0x22 + NULL, // 0x23 + NULL, // 0x24 + NULL, // 0x25 + NULL, // 0x26 + NULL, // 0x27 + NULL, // 0x28 + NULL, // 0x29 + NULL, // 0x2A + NULL, // 0x2B + NULL, // 0x2C + NULL, // 0x2D + NULL, // 0x2E + NULL, // 0x2F + NULL, // 0x30 + NULL, // 0x31 + NULL, // 0x32 + NULL, // 0x33 + NULL, // 0x34 + NULL, // 0x35 + NULL, // 0x36 + NULL, // 0x37 + NULL, // 0x38 + NULL, // 0x39 + NULL, // 0x3A + NULL, // 0x3B + NULL, // 0x3C + NULL, // 0x3D + NULL, // 0x3E + NULL, // 0x3F + NULL, // 0x40 + NULL, // 0x41 + NULL, // 0x42 + NULL, // 0x43 + NULL, // 0x44 + NULL, // 0x45 + NULL, // 0x46 + NULL, // 0x47 + NULL, // 0x48 + NULL, // 0x49 + NULL, // 0x4A + NULL, // 0x4B + NULL, // 0x4C + NULL, // 0x4D + NULL, // 0x4E + NULL, // 0x4F + NULL, // 0x50 + NULL, // 0x51 + NULL, // 0x52 + NULL, // 0x53 + NULL, // 0x54 + NULL, // 0x55 + NULL, // 0x56 + NULL, // 0x57 + NULL, // 0x58 + NULL, // 0x59 + NULL, // 0x5A + NULL, // 0x5B + NULL, // 0x5C + NULL, // 0x5D + NULL, // 0x5E + NULL, // 0x5F + NULL, // 0x60 + NULL, // 0x61 + NULL, // 0x62 + NULL, // 0x63 + NULL, // 0x64 + NULL, // 0x65 + NULL, // 0x66 + NULL, // 0x67 + NULL, // 0x68 + NULL, // 0x69 + NULL, // 0x6A + NULL, // 0x6B + NULL, // 0x6C + NULL, // 0x6D + NULL, // 0x6E + NULL, // 0x6F + NULL, // 0x70 + NULL, // 0x71 + NULL, // 0x72 + NULL, // 0x73 + NULL, // 0x74 + NULL, // 0x75 + NULL, // 0x76 + NULL, // 0x77 + NULL, // 0x78 + NULL, // 0x79 + NULL, // 0x7A + NULL, // 0x7B + NULL, // 0x7C + NULL, // 0x7D + NULL, // 0x7E + NULL, // 0x7F + NULL, // 0x80 + NULL, // 0x81 + NULL, // 0x82 + NULL, // 0x83 + NULL, // 0x84 + NULL, // 0x85 + NULL, // 0x86 + NULL, // 0x87 + NULL, // 0x88 + NULL, // 0x89 + NULL, // 0x8A + NULL, // 0x8B + NULL, // 0x8C + NULL, // 0x8D + NULL, // 0x8E + NULL, // 0x8F + NULL, // 0x90 + NULL, // 0x91 + NULL, // 0x92 + NULL, // 0x93 + NULL, // 0x94 + NULL, // 0x95 + NULL, // 0x96 + NULL, // 0x97 + NULL, // 0x98 + NULL, // 0x99 + NULL, // 0x9A + NULL, // 0x9B + NULL, // 0x9C + NULL, // 0x9D + NULL, // 0x9E + NULL, // 0x9F + NULL, // 0xA0 + NULL, // 0xA1 + NULL, // 0xA2 + NULL, // 0xA3 + NULL, // 0xA4 + NULL, // 0xA5 + NULL, // 0xA6 + NULL, // 0xA7 + NULL, // 0xA8 + NULL, // 0xA9 + NULL, // 0xAA + NULL, // 0xAB + NULL, // 0xAC + NULL, // 0xAD + NULL, // 0xAE + NULL, // 0xAF + NULL, // 0xB0 + NULL, // 0xB1 + NULL, // 0xB2 + NULL, // 0xB3 + NULL, // 0xB4 + NULL, // 0xB5 + NULL, // 0xB6 + NULL, // 0xB7 + NULL, // 0xB8 + NULL, // 0xB9 + NULL, // 0xBA + NULL, // 0xBB + NULL, // 0xBC + NULL, // 0xBD + NULL, // 0xBE + NULL, // 0xBF + NULL, // 0xC0 + NULL, // 0xC1 + NULL, // 0xC2 + NULL, // 0xC3 + NULL, // 0xC4 + NULL, // 0xC5 + NULL, // 0xC6 + NULL, // 0xC7 + NULL, // 0xC8 + NULL, // 0xC9 + NULL, // 0xCA + NULL, // 0xCB + NULL, // 0xCC + NULL, // 0xCD + NULL, // 0xCE + NULL, // 0xCF + NULL, // 0xD0 + NULL, // 0xD1 + NULL, // 0xD2 + NULL, // 0xD3 + NULL, // 0xD4 + NULL, // 0xD5 + NULL, // 0xD6 + NULL, // 0xD7 + NULL, // 0xD8 + NULL, // 0xD9 + NULL, // 0xDA + NULL, // 0xDB + NULL, // 0xDC + NULL, // 0xDD + NULL, // 0xDE + NULL, // 0xDF + NULL, // 0xE0 + NULL, // 0xE1 + NULL, // 0xE2 + NULL, // 0xE3 + NULL, // 0xE4 + NULL, // 0xE5 + NULL, // 0xE6 + NULL, // 0xE7 + NULL, // 0xE8 + NULL, // 0xE9 + NULL, // 0xEA + NULL, // 0xEB + NULL, // 0xEC + NULL, // 0xED + NULL, // 0xEE + NULL, // 0xEF + NULL, // 0xF0 + NULL, // 0xF1 + NULL, // 0xF2 + NULL, // 0xF3 + NULL, // 0xF4 + NULL, // 0xF5 + NULL, // 0xF6 + NULL, // 0xF7 + NULL, // 0xF8 + NULL, // 0xF9 + NULL, // 0xFA + NULL, // 0xFB + NULL, // 0xFC + NULL, // 0xFD + NULL, // 0xFE + ControlBop // 0xFF };
/* PUBLIC FUNCTIONS ***********************************************************/
Modified: branches/ntvdm/subsystems/ntvdm/dos.c URL: http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/dos.c?rev... ============================================================================== --- branches/ntvdm/subsystems/ntvdm/dos.c [iso-8859-1] (original) +++ branches/ntvdm/subsystems/ntvdm/dos.c [iso-8859-1] Sun Dec 15 15:35:38 2013 @@ -1780,6 +1780,7 @@ PDOS_PSP PspBlock = SEGMENT_TO_PSP(CurrentPsp);
/* + * DOS 2+ - GET DOS VERSION * See Ralf Brown: http://www.ctyme.com/intr/rb-2711.htm * for more information. */ @@ -1808,8 +1809,45 @@ setBL(0x00); setCX(0x0000);
- /* Return DOS version: Minor:Major in AH:AL */ + /* + * Return DOS version: Minor:Major in AH:AL + * The Windows NT DOS box returns version 5.00, subject to SETVER. + */ setAX(PspBlock->DosVersion); + + break; + } + + /* Extended functionalities */ + case 0x33: + { + if (getAL() == 0x06) + { + /* + * DOS 5+ - GET TRUE VERSION NUMBER + * This function always returns the true version number, unlike + * AH=30h, whose return value may be changed with SETVER. + * See Ralf Brown: http://www.ctyme.com/intr/rb-2730.htm + * for more information. + */ + + /* + * Return the true DOS version: Minor:Major in BH:BL + * The Windows NT DOS box returns BX=3205h (version 5.50). + */ + setBX(NTDOS_VERSION); + + /* DOS revision 0 */ + setDL(0x00); + + /* Unpatched DOS */ + setDH(0x00); + } + // else + // { + // /* Invalid subfunction */ + // setAL(0xFF); + // }
break; } @@ -1873,10 +1911,11 @@ } else { + /* Invalid subfunction */ setAL(0xFF); }
- break; + break; }
/* Create Directory */
Modified: branches/ntvdm/subsystems/ntvdm/dos.h URL: http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/dos.h?rev... ============================================================================== --- branches/ntvdm/subsystems/ntvdm/dos.h [iso-8859-1] (original) +++ branches/ntvdm/subsystems/ntvdm/dos.h [iso-8859-1] Sun Dec 15 15:35:38 2013 @@ -16,9 +16,11 @@ /* DEFINES ********************************************************************/
// -// We are DOS 6.00 +// We are DOS 5.00 (reported by INT 21h, AH=30h) +// and DOS 5.50 (reported by INT 21h, AX=3306h) for Windows NT Compatibility // -#define DOS_VERSION MAKEWORD(6, 0) +#define DOS_VERSION MAKEWORD(5, 00) +#define NTDOS_VERSION MAKEWORD(5, 50)
#define DOS_CONFIG_PATH L"%SystemRoot%\system32\CONFIG.NT" #define DOS_COMMAND_INTERPRETER L"%SystemRoot%\system32\COMMAND.COM /k %SystemRoot%\system32\AUTOEXEC.NT"