// This function should be called once during program execution. void SysLogMachineCaps() { if ( !PCSX2_isReleaseVersion ) { Console.WriteLn(Color_StrongGreen, "PCSX2 %u.%u.%u.r%d %s - compiled on " __DATE__, PCSX2_VersionHi, PCSX2_VersionMid, PCSX2_VersionLo, SVN_REV, SVN_MODS ? "(modded)" : "" ); } else { // shorter release version string Console.WriteLn(Color_StrongGreen, "PCSX2 %u.%u.%u.r%d - compiled on " __DATE__, PCSX2_VersionHi, PCSX2_VersionMid, PCSX2_VersionLo, SVN_REV ); } Console.WriteLn( "Savestate version: 0x%x", g_SaveVersion); Console.Newline(); Console.WriteLn( Color_StrongBlack, "Host Machine Init:" ); Console.Indent().WriteLn( L"Operating System = %s\n" L"Physical RAM = %u MB", GetOSVersionString().c_str(), (u32)(GetPhysicalMemory() / _1mb) ); u32 speed = x86caps.CalculateMHz(); Console.Indent().WriteLn( L"CPU name = %s\n" L"Vendor/Model = %s (stepping %02X)\n" L"CPU speed = %u.%03u ghz (%u logical thread%s)\n" L"x86PType = %s\n" L"x86Flags = %08x %08x\n" L"x86EFlags = %08x", fromUTF8( x86caps.FamilyName ).Trim().Trim(false).c_str(), fromUTF8( x86caps.VendorName ).c_str(), x86caps.StepID, speed / 1000, speed % 1000, x86caps.LogicalCores, (x86caps.LogicalCores==1) ? L"" : L"s", x86caps.GetTypeName().c_str(), x86caps.Flags, x86caps.Flags2, x86caps.EFlags ); Console.Newline(); wxArrayString features[2]; // 2 lines, for readability! if( x86caps.hasMultimediaExtensions ) features[0].Add( L"MMX" ); if( x86caps.hasStreamingSIMDExtensions ) features[0].Add( L"SSE" ); if( x86caps.hasStreamingSIMD2Extensions ) features[0].Add( L"SSE2" ); if( x86caps.hasStreamingSIMD3Extensions ) features[0].Add( L"SSE3" ); if( x86caps.hasSupplementalStreamingSIMD3Extensions ) features[0].Add( L"SSSE3" ); if( x86caps.hasStreamingSIMD4Extensions ) features[0].Add( L"SSE4.1" ); if( x86caps.hasStreamingSIMD4Extensions2 ) features[0].Add( L"SSE4.2" ); if( x86caps.hasAVX ) features[0].Add( L"AVX" ); if( x86caps.hasFMA) features[0].Add( L"FMA" ); if( x86caps.hasMultimediaExtensionsExt ) features[1].Add( L"MMX2 " ); if( x86caps.has3DNOWInstructionExtensions ) features[1].Add( L"3DNOW " ); if( x86caps.has3DNOWInstructionExtensionsExt ) features[1].Add( L"3DNOW2" ); if( x86caps.hasStreamingSIMD4ExtensionsA ) features[1].Add( L"SSE4a " ); const wxString result[2] = { JoinString( features[0], L".. " ), JoinString( features[1], L".. " ) }; Console.WriteLn( Color_StrongBlack, L"x86 Features Detected:" ); Console.Indent().WriteLn( result[0] + (result[1].IsEmpty() ? L"" : (L"\n" + result[1])) ); Console.Newline(); }
int wmain(int argc, wchar_t *argv[]) { // // 打印当前操作系统的名字. // wchar_t szName[512]; if (GetOSName(szName, ARRAYSIZE(szName))) { setlocale(LC_CTYPE, ""); wprintf(L"当前的操作系统: %s\n", szName); } else { wprintf(L"无法获得操作系统名字\n"); } // // 打印当前操作系统的版本字符串. // wchar_t szVersionString[512]; if (GetOSVersionString(szVersionString, ARRAYSIZE(szVersionString))) { wprintf(L"版本: %s\n", szVersionString); } else { wprintf(L"无法获得操作系统版本\n"); } // // 确定当前操作系统是否是64位. // BOOL f64bitOS = Is64BitOS(); wprintf(L"当前的操作系统是 %s64位\n", f64bitOS ? L"" : L"不是"); // // 确定当前的进程是否是64位的. // BOOL f64bitProc = Is64BitProcess(); wprintf(L"当前的进程是 %s64位\n", f64bitProc ? L"" : L"不是 "); // // 确定运行在系统中的任意一个进程是否是64位进程. // if (argc > 1) { // 如果一个进程ID在命令行中被指定,则获取进程ID,并打开进程句柄. DWORD dwProcessId = _wtoi(argv[1]); if (dwProcessId != 0 /*conversion succeeds*/) { HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessId); if (hProcess != NULL) { // 检测指定进程是否是64位. BOOL f64bitProc = Is64BitProcess(hProcess); wprintf(L"进程 %d 是 %s64-bit\n", dwProcessId, f64bitProc ? L"" : L"不是 "); CloseHandle(hProcess); } else { wprintf(L"打开进程(%d) 失败 w/err 0x%08lx\n", dwProcessId, GetLastError()); } } else { wprintf(L"无效的进程 ID: %s\n", argv[1]); } } return 0; }