From d5f17dbe6d0b33e1d4e9c6ffc1e528a0ed725c20 Mon Sep 17 00:00:00 2001 From: Emmet Young Date: Sat, 14 Feb 2015 22:17:45 +1100 Subject: [PATCH 1/3] Strip out Validate binary and beta release code. No longer needed, validate binary code could of been used for version testing but be cleaner to write it fresh. --- Project64.vs2013.sln | 12 +- Source/Project64/N64 System/N64 Class.cpp | 6 - Source/Project64/Project64.vcproj | 112 ----- Source/Project64/Project64.vcxproj | 16 - Source/Project64/Project64.vcxproj.filters | 6 - Source/Project64/Settings.h | 10 - Source/Project64/Settings/Settings Class.cpp | 10 - Source/Project64/User Interface/Gui Class.cpp | 138 ------ Source/Project64/User Interface/Gui Class.h | 5 +- .../User Interface/Main Menu Class.cpp | 10 - Source/Project64/Validate Binary.h | 20 - Source/Project64/ValidateBinary.cpp | 428 ------------------ Source/Project64/main.cpp | 18 +- Source/Project64/stdafx.h | 1 - 14 files changed, 10 insertions(+), 782 deletions(-) delete mode 100644 Source/Project64/Validate Binary.h delete mode 100644 Source/Project64/ValidateBinary.cpp diff --git a/Project64.vs2013.sln b/Project64.vs2013.sln index 3f0ebf5a9..5cf1ed910 100644 --- a/Project64.vs2013.sln +++ b/Project64.vs2013.sln @@ -1,6 +1,8 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3rd Party", "3rd Party", "{AA8F7F8E-5377-4911-859D-8A8817B0DB26}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wxWidgets", "wxWidgets", "{1379F817-7E3D-4F58-9C22-7E364E46E842}" @@ -52,8 +54,8 @@ Global {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Debug|Win32.Build.0 = Debug|Win32 {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Release|Win32.ActiveCfg = Release|Win32 {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Release|Win32.Build.0 = Release|Win32 - {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Beta Release|Win32.ActiveCfg = Beta Release|Win32 - {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Beta Release|Win32.Build.0 = Beta Release|Win32 + {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Beta Release|Win32.ActiveCfg = Release|Win32 + {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Beta Release|Win32.Build.0 = Release|Win32 {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Debug|Win32.ActiveCfg = Debug|Win32 {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Debug|Win32.Build.0 = Debug|Win32 {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Release|Win32.ActiveCfg = Release|Win32 @@ -149,12 +151,12 @@ Global {3326E128-33AF-422C-BB7C-67CC6B915610} = {AA8F7F8E-5377-4911-859D-8A8817B0DB26} {4BC6906B-213E-40D7-9FC7-1A93E228393D} = {AA8F7F8E-5377-4911-859D-8A8817B0DB26} {731BD205-2826-4631-B7AF-117658E88DBC} = {AA8F7F8E-5377-4911-859D-8A8817B0DB26} + {A4D13408-A794-4199-8FC7-4A9A32505005} = {9FE699A5-41C3-4441-92AB-639B3D77DE26} {93447136-FACD-4740-8F35-FC46FB4A9E82} = {1379F817-7E3D-4F58-9C22-7E364E46E842} {427F1DCD-3BED-4010-9322-077A4C06D871} = {1379F817-7E3D-4F58-9C22-7E364E46E842} {93CFEDF3-9A75-4484-B169-D9D8074F5AC2} = {1379F817-7E3D-4F58-9C22-7E364E46E842} {05B9CB11-12D1-47CD-8E4A-88E12162119B} = {1379F817-7E3D-4F58-9C22-7E364E46E842} {25A25249-C284-4C5A-8DC2-26FC3EB13703} = {1379F817-7E3D-4F58-9C22-7E364E46E842} - {A4D13408-A794-4199-8FC7-4A9A32505005} = {9FE699A5-41C3-4441-92AB-639B3D77DE26} {462C2608-182F-452C-944F-AF201E19300B} = {9FE699A5-41C3-4441-92AB-639B3D77DE26} {2DADDAA5-0F57-46ED-A974-747908DDC7F3} = {9FE699A5-41C3-4441-92AB-639B3D77DE26} EndGlobalSection diff --git a/Source/Project64/N64 System/N64 Class.cpp b/Source/Project64/N64 System/N64 Class.cpp index 3246112b6..a910ff498 100644 --- a/Source/Project64/N64 System/N64 Class.cpp +++ b/Source/Project64/N64 System/N64 Class.cpp @@ -331,12 +331,6 @@ void CN64System::StartEmulation2 ( bool NewThread ) } g_Notify->MakeWindowOnTop(g_Settings->LoadBool(UserInterface_AlwaysOnTop)); -#ifdef BETA_RELEASE - if (!g_Settings->LoadBool(Beta_IsValidExe)) - { - return; - } -#endif ThreadInfo * Info = new ThreadInfo; HANDLE * hThread = new HANDLE; diff --git a/Source/Project64/Project64.vcproj b/Source/Project64/Project64.vcproj index 600617864..beeb8d63d 100644 --- a/Source/Project64/Project64.vcproj +++ b/Source/Project64/Project64.vcproj @@ -135,65 +135,6 @@ Name="VCPostBuildEventTool" /> - - - - - - - - - - - - - - - - - - - @@ -225,14 +166,6 @@ UsePrecompiledHeader="1" /> - - - - - - - - - - - - - - - @@ -896,15 +793,6 @@ AdditionalIncludeDirectories="User Interface" /> - - - - - Beta Release - Win32 - Debug Win32 @@ -26,10 +22,6 @@ - - - - @@ -49,18 +41,12 @@ - - - BETA_RELEASE;%(PreprocessorDefinitions) - - Create - @@ -189,7 +175,6 @@ - User Interface;%(AdditionalIncludeDirectories) User Interface;%(AdditionalIncludeDirectories) User Interface;%(AdditionalIncludeDirectories) @@ -202,7 +187,6 @@ - diff --git a/Source/Project64/Project64.vcxproj.filters b/Source/Project64/Project64.vcxproj.filters index a9ca22038..70ef1bf15 100644 --- a/Source/Project64/Project64.vcxproj.filters +++ b/Source/Project64/Project64.vcxproj.filters @@ -114,9 +114,6 @@ Source Files - - Source Files - Source Files\Settings Files @@ -488,9 +485,6 @@ Header Files - - Header Files - Header Files diff --git a/Source/Project64/Settings.h b/Source/Project64/Settings.h index a1d31cf85..e13297b6a 100644 --- a/Source/Project64/Settings.h +++ b/Source/Project64/Settings.h @@ -219,16 +219,6 @@ enum SettingID { Debugger_ShowDListAListCount, Debugger_ShowRecompMemSize, -#ifdef BETA_RELEASE - //Beta Information - Beta_IsBetaVersion, - Beta_UserName, - Beta_UserNameMD5, - Beta_EmailAddress, - Beta_EmailAddressMD5, - Beta_IsValidExe, -#endif - //Plugins Plugin_RSP_Current, Plugin_RSP_CurVer, diff --git a/Source/Project64/Settings/Settings Class.cpp b/Source/Project64/Settings/Settings Class.cpp index 1cf6d56bd..a9baa97af 100644 --- a/Source/Project64/Settings/Settings Class.cpp +++ b/Source/Project64/Settings/Settings Class.cpp @@ -289,16 +289,6 @@ void CSettings::AddHowToHandleSetting () AddHandler(Debugger_AppLogFlush, new CSettingTypeApplication("Logging","Log Auto Flush",(DWORD)false)); AddHandler(Debugger_GenerateLogFiles, new CSettingTypeApplication("Debugger","Generate Log Files", false)); - -#ifdef BETA_RELEASE - AddHandler(Beta_IsBetaVersion, new CSettingTypeTempBool(true)); - AddHandler(Beta_UserName, new CSettingTypeTempString("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")); - AddHandler(Beta_EmailAddress, new CSettingTypeTempString("????????????????????????????????????????????????????????????????????????????????")); - AddHandler(Beta_UserNameMD5, new CSettingTypeTempString("CBBABA8D2262FF1F7A47CEAD87FC4304")); - AddHandler(Beta_EmailAddressMD5, new CSettingTypeTempString("47A3D7CBF1DA291D5EB30DCAAF21B9F8")); - AddHandler(Beta_IsValidExe, new CSettingTypeTempBool(true)); -#endif - //Plugin AddHandler(Plugin_RSP_Current, new CSettingTypeApplication("Plugin","RSP Dll", "RSP\\RSP 1.7.dll")); AddHandler(Plugin_GFX_Current, new CSettingTypeApplication("Plugin","Graphics Dll", "GFX\\Jabo_Direct3D8.dll")); diff --git a/Source/Project64/User Interface/Gui Class.cpp b/Source/Project64/User Interface/Gui Class.cpp index 1a7ce4a84..e4ad8a7de 100644 --- a/Source/Project64/User Interface/Gui Class.cpp +++ b/Source/Project64/User Interface/Gui Class.cpp @@ -29,17 +29,6 @@ CMainGui::CMainGui (bool bMainWindow, const char * WindowTitle ) : m_AttachingMenu(false), m_MakingVisible(false) { -#ifdef BETA_RELEASE - m_hacked = false; - if (g_Settings) - { - if (MD5(g_Settings->LoadString(Beta_UserName)).hex_digest() != g_Settings->LoadString(Beta_UserNameMD5) || - MD5(g_Settings->LoadString(Beta_EmailAddress)).hex_digest() != g_Settings->LoadString(Beta_EmailAddressMD5)) - { - m_hacked = true; - } - } -#endif m_Menu = NULL; m_hMainWindow = 0; @@ -52,10 +41,6 @@ CMainGui::CMainGui (bool bMainWindow, const char * WindowTitle ) : m_SaveRomBrowserTop = 0; m_SaveRomBrowserLeft = 0; -#ifdef BETA_RELEASE - m_InvalidExeMsg = RegisterWindowMessage("Invalid"); -#endif - if (m_bMainWindow) { g_Settings->RegisterChangeCB(RomBrowser_Enabled,this,(CSettings::SettingChangedFunc)RomBowserEnabledChanged); @@ -509,10 +494,6 @@ DWORD CALLBACK CMainGui::MainGui_Proc (HWND hWnd, DWORD uMsg, DWORD wParam, DWOR CMainGui * _this = (CMainGui *)lpcs->lpCreateParams; SetProp((HWND)hWnd,"Class",_this); -#if defined(BETA_RELEASE) || defined(VALIDATE_BIN_LOCAL) - TestValidBinary(); - SetTimer((HWND)hWnd,0,10000,NULL); -#endif _this->m_hMainWindow = hWnd; _this->CreateStatusBar(); @@ -525,12 +506,6 @@ DWORD CALLBACK CMainGui::MainGui_Proc (HWND hWnd, DWORD uMsg, DWORD wParam, DWOR _this->ChangeWinSize(640,480); -#ifdef BETA_RELEASE - if (_this->m_hacked) - { - MessageBox(NULL,"Exe has been corrupted","Stopping",MB_OK|MB_ICONEXCLAMATION); - } -#endif } break; case WM_SYSCOMMAND: @@ -620,28 +595,6 @@ DWORD CALLBACK CMainGui::MainGui_Proc (HWND hWnd, DWORD uMsg, DWORD wParam, DWOR _this->SaveWindowLoc(); break; } -#ifdef BETA_RELEASE - { - CMainGui * _this = (CMainGui *)GetProp((HWND)hWnd,"Class"); - static DWORD CallCount = 0; - if (!g_Settings->LoadBool(Beta_IsValidExe)) - { - if (CallCount == 0) - { - CallCount = 1; - PostMessage((HWND)hWnd,_this->m_InvalidExeMsg,0,0); - } - } - if (CallCount > 0) - { - if (CallCount == 9) - { - PostQuitMessage(0); - } - CallCount++; - } - } -#endif break; case WM_SIZE: { @@ -931,20 +884,6 @@ DWORD CALLBACK CMainGui::MainGui_Proc (HWND hWnd, DWORD uMsg, DWORD wParam, DWOR WriteTrace(TraceDebug,__FUNCTION__ ": WM_DESTROY - Done"); break; default: -#ifdef BETA_RELEASE - { - CMainGui * _this = (CMainGui *)GetProp((HWND)hWnd,"Class"); - if (_this) - { - if (uMsg == _this->m_InvalidExeMsg) - { - g_BaseSystem->CloseCpu(); - MessageBox((HWND)hWnd,GS(MSG_INVALID_EXE),GS(MSG_INVALID_EXE_TITLE),MB_OK|MB_ICONERROR); - PostQuitMessage(0); - } - } - } -#endif return DefWindowProc((HWND)hWnd,uMsg,wParam,lParam); } return TRUE; @@ -984,75 +923,6 @@ DWORD CALLBACK AboutBoxCancelProc (HWND hWnd, DWORD uMsg, DWORD wParam, DWORD lP return CallWindowProc(pfnWndAboutBoxCancelProc, hWnd, uMsg, wParam, lParam); } -#ifdef BETA_RELEASE -LPSTR ValidateDecryptString (LPSTR String, int Len); -LPSTR ValidateEncryptString (LPSTR String, int Len); - -LPSTR ValidateDecryptString2 (LPSTR String, int Len) -{ - BYTE PreviousChar = 0xAA; - for (int x = 0; x < Len; x++) - { - String[x] ^= (PreviousChar + x) & 0xFF; - PreviousChar = String[x]; - } - return String; -} - -DWORD CALLBACK AboutUserProc (HWND hWnd, DWORD uMsg, DWORD wParam, DWORD /*lParam*/) -{ - static char UserInfo[] = "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"; - - switch (uMsg) { - case WM_INITDIALOG: - { - char WindowTitleLabel[] = "\xff\x26\x16\x17\x52\x69\x27\x08\x09"; // "User Info"; - ValidateDecryptString(WindowTitleLabel,sizeof(WindowTitleLabel) - 1); - SetWindowText(hWnd,WindowTitleLabel); - - char UserIdLabel[] = "\xff\x26\x16\x17\x52\x69\x0d\x7e"; // "User ID:"; - ValidateDecryptString(UserIdLabel,sizeof(UserIdLabel) - 1); - SetWindowText(GetDlgItem(hWnd,IDC_LABEL1),UserIdLabel); - - char UserNameLabel[] = "\xff\x26\x16\x17\x52\x6e\x2f\x0c\x08\x5f"; // "User Name:"; - ValidateDecryptString(UserNameLabel,sizeof(UserNameLabel) - 1); - SetWindowText(GetDlgItem(hWnd,IDC_LABEL2),UserNameLabel); - - char UserEmailLabel[] = "\xef\x28\x0c\x08\x05\x56"; // "Email:"; - ValidateDecryptString(UserEmailLabel,sizeof(UserEmailLabel) - 1); - SetWindowText(GetDlgItem(hWnd,IDC_LABEL3),UserEmailLabel); - - typedef struct { - BYTE UserID[10]; - BYTE UserName[80]; - BYTE Email[80]; - } USER_INFO; - - USER_INFO * info = (USER_INFO *)UserInfo; - ValidateDecryptString2(UserInfo,sizeof(UserInfo) - 1); - info->UserID[sizeof(info->UserID) - 1] = 0; - info->UserName[sizeof(info->UserName) - 1] = 0; - info->Email[sizeof(info->Email) - 1] = 0; - SetWindowText(GetDlgItem(hWnd,IDC_INFO1),(char *)info->UserID); - SetWindowText(GetDlgItem(hWnd,IDC_INFO2),(char *)info->UserName); - SetWindowText(GetDlgItem(hWnd,IDC_INFO3),(char *)info->Email); - - } - break; - case WM_COMMAND: - switch (LOWORD(wParam)) { - case IDOK: - case IDCANCEL: - EndDialog(hWnd,0); - break; - } - default: - return FALSE; - } - return TRUE; -} -#endif - DWORD CALLBACK AboutBoxProc (HWND hWnd, DWORD uMsg, DWORD wParam, DWORD lParam) { static HBITMAP hbmpBackgroundTop = NULL; @@ -1271,14 +1141,6 @@ DWORD CALLBACK AboutBoxProc (HWND hWnd, DWORD uMsg, DWORD wParam, DWORD lParam) break; case WM_COMMAND: switch (LOWORD(wParam)) { -#ifdef BETA_RELEASE - case IDC_VERSION: - if ((GetKeyState(VK_CONTROL) & 0x80)) - { - DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_About_UserInfo), (HWND)hWnd, (DLGPROC)AboutUserProc); - } - break; -#endif case IDOK: case IDCANCEL: if (hbmpBackgroundTop) diff --git a/Source/Project64/User Interface/Gui Class.h b/Source/Project64/User Interface/Gui Class.h index eacd85c1a..0958e37e8 100644 --- a/Source/Project64/User Interface/Gui Class.h +++ b/Source/Project64/User Interface/Gui Class.h @@ -109,10 +109,7 @@ private: HWND m_hMainWindow, m_hStatusWnd; DWORD m_ThreadId; -#ifdef BETA_RELEASE - bool m_hacked; - DWORD m_InvalidExeMsg; -#endif + const bool m_bMainWindow; bool m_Created; bool m_AttachingMenu; diff --git a/Source/Project64/User Interface/Main Menu Class.cpp b/Source/Project64/User Interface/Main Menu Class.cpp index 8d4f5dd68..52f397cde 100644 --- a/Source/Project64/User Interface/Main Menu Class.cpp +++ b/Source/Project64/User Interface/Main Menu Class.cpp @@ -1128,16 +1128,6 @@ void CMainMenu::FillOutMenu ( HMENU hMenu ) { /* Help Menu ****************/ MenuItemList HelpMenu; -#ifdef BETA_RELEASE - if (g_Settings->LoadBool(Beta_IsBetaVersion)) - { - stdstr_f User("Beta For: %s",g_Settings->LoadString(Beta_UserName).c_str()); - stdstr_f Email("Email: %s",g_Settings->LoadString(Beta_EmailAddress).c_str()); - HelpMenu.push_back(MENU_ITEM(NO_ID, EMPTY_STRING,EMPTY_STDSTR,NULL,User )); - HelpMenu.push_back(MENU_ITEM(NO_ID, EMPTY_STRING,EMPTY_STDSTR,NULL,Email )); - HelpMenu.push_back(MENU_ITEM(SPLITER )); - } -#endif HelpMenu.push_back(MENU_ITEM(ID_HELP_CONTENTS, MENU_USER_MAN )); HelpMenu.push_back(MENU_ITEM(ID_HELP_GAMEFAQ, MENU_GAME_FAQ )); diff --git a/Source/Project64/Validate Binary.h b/Source/Project64/Validate Binary.h deleted file mode 100644 index 63399029e..000000000 --- a/Source/Project64/Validate Binary.h +++ /dev/null @@ -1,20 +0,0 @@ -/**************************************************************************** -* * -* Project 64 - A Nintendo 64 emulator. * -* http://www.pj64-emu.com/ * -* Copyright (C) 2012 Project64. All rights reserved. * -* * -* License: * -* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html * -* * -****************************************************************************/ -#pragma once - -#define VALIDATE_BIN_APP "PJ64" -//#define VALIDATE_BIN_APP "GFX DLL" - -//#define VALIDATE_BIN_LOCAL -//#define VALIDATE_DEBUG - -void TestValidBinary ( ); - diff --git a/Source/Project64/ValidateBinary.cpp b/Source/Project64/ValidateBinary.cpp deleted file mode 100644 index 4d5b3fc7c..000000000 --- a/Source/Project64/ValidateBinary.cpp +++ /dev/null @@ -1,428 +0,0 @@ -#include "stdafx.h" -#ifdef BETA_RELEASE - -#include -#pragma comment(lib, "Wininet.lib") - -LPSTR ValidateDecryptString (LPSTR String, int Len) -{ - BYTE PreviousChar = 0xAA; - for (int x = 0; x < Len; x++) - { - String[x] ^= PreviousChar; - PreviousChar = String[x]; - } - return String; -} - -LPSTR ValidateEncryptString (LPSTR String, int Len) -{ - BYTE EncryptChar = 0xAA; - for (int x = 0; x < Len; x++) - { - BYTE PreviousChar = String[x]; - String[x] ^= EncryptChar; - EncryptChar = PreviousChar; - } - return String; -} - -void TestValidBinaryThread ( ) -{ - typedef struct - { - BYTE File_md5[16]; - int RunTimes; - } INVALID_RUN_ITEM; - - enum { MAX_BAD_DATA = 50, FAILED_CHECK = 0x7FFFFFFF }; - - AUTO_PTR RunData; - INVALID_RUN_ITEM * RunItems = NULL; - int RunItemCount = 0; - bool DefaultResult = true; - - CPath ModuleFileName(CPath::MODULE_FILE); - MD5 File_md5(ModuleFileName); -#ifdef VALIDATE_DEBUG - WriteTraceF(TraceValidate,"v1: %s",File_md5.hex_digest()); -#endif - - // see if already invalid - char Subkey[] = "\x84\x5E\x1A\x5C\x02\x4E"; // ".pj64z"; - ValidateDecryptString(Subkey,sizeof(Subkey) - 1); - - char Subkey2[] = "\xF9\x1C\x09\x12\x03\x16\x13\x17\x19\x0C\x1A\x7C\x02"; // "SOFTWARE\PJ64"; - ValidateDecryptString(Subkey2,sizeof(Subkey2) - 1); - - CRegistry Registry; - BOOL bRes = Registry.Open(HKEY_LOCAL_MACHINE,Subkey2,KEY_ALL_ACCESS,true); - DWORD Length = 0; - if (bRes) - { - Length = Registry.GetValueSize("data"); - - if (Length == -1) - { - Length = 0; - bRes = false; - } - - if (bRes && Length > 0) - { - DWORD Type; - RunData.reset(new BYTE[Length]); - bRes = Registry.GetValue("data",RunData.get(),Length,&Type); - if (!bRes && Type != REG_BINARY) - { - bRes = false; - } - } - } - - if (!bRes) - { - bRes = Registry.Open(HKEY_CLASSES_ROOT,Subkey,KEY_ALL_ACCESS,true); - if (bRes) - { - Length = Registry.GetValueSize("data"); - - if (Length == -1) - { - Length = 0; - bRes = false; - } - - if (bRes) - { - DWORD Type; - RunData.reset(new BYTE[Length]); - bRes = Registry.GetValue("data",RunData.get(),Length,&Type); - if (!bRes && Type != REG_BINARY) - { - bRes = false; - } - } - } - } - - if (bRes && Length > 0) - { - RunItems = (INVALID_RUN_ITEM *)RunData.get(); - RunItemCount = Length / sizeof(INVALID_RUN_ITEM); - - for (int i = 0; i < RunItemCount; i ++) - { - if (memcmp(RunItems[i].File_md5,File_md5.raw_digest(),sizeof(RunItems[i].File_md5)) == 0) - { -#ifdef VALIDATE_DEBUG - WriteTraceF(TraceValidate,"v2: %d",RunItems[i].RunTimes); -#endif - if (RunItems[i].RunTimes >= MAX_BAD_DATA) - { - DefaultResult = false; - } - break; - } - } - } - - - //test to see if file has already been disabled - HINTERNET hSession = InternetOpen("project64", INTERNET_OPEN_TYPE_PRECONFIG,NULL, NULL, NULL); - if (hSession == NULL) - { -#ifdef VALIDATE_DEBUG - WriteTrace(TraceValidate,"v3"); -#endif - g_Settings->SaveBool(Beta_IsValidExe,DefaultResult); - return; - } - -#ifdef VALIDATE_BIN_LOCAL - char Site[] = { "www.local.pj64-emu.com" }; - ValidateEncryptString(Site,sizeof(Site) - 1); -#else - char Site[] = { "\xDD\x00\x00\x59\x5e\x1a\x5c\x02\x19\x48\x08\x18\x5b\x4d\x0c\x02" }; //"www.pj64-emu.com" -#endif - ValidateDecryptString(Site,sizeof(Site) - 1); - HINTERNET hConnect = InternetConnect(hSession, Site, 80, "", "", INTERNET_SERVICE_HTTP, 0, (LPARAM)0); - - if (hConnect == NULL) - { -#ifdef VALIDATE_DEBUG - WriteTrace(TraceValidate,"v4"); -#endif - g_Settings->SaveBool(Beta_IsValidExe,DefaultResult); - InternetCloseHandle (hSession); - hSession = NULL; - return; - } - - char AcceptText[] = "\xDE\x11\x1D\x0C\x5B\x05"; // "text/*"; - ValidateDecryptString(AcceptText,sizeof(AcceptText) - 1); - - LPCTSTR lpszAcceptTypes[] = - { - AcceptText, - NULL - }; - - char szPost[] = { "\xFA\x1F\x1C\x07" }; // "POST" - ValidateDecryptString(szPost,sizeof(szPost) - 1); - - // "index.php?option=com_validate_pj64" - char SiteLoc[] = { "\xc3\x07\x0a\x01\x1d\x56\x5e\x18\x18\x4f\x50\x1f\x04\x1d\x06\x01\x53\x5e\x0c\x02\x32\x29\x17\x0d\x05\x0d\x05\x15\x11\x3a\x2f\x1a\x5c\x02" }; -// char SiteLoc[] = { "index.php?option=com_validate_pj64" }; - -// ValidateEncryptString(SiteLoc,sizeof(SiteLoc) - 1); - ValidateDecryptString(SiteLoc,sizeof(SiteLoc) - 1); - - - HINTERNET hRequest = HttpOpenRequest(hConnect, szPost, SiteLoc, NULL, NULL, lpszAcceptTypes, INTERNET_FLAG_PRAGMA_NOCACHE, (LPARAM)0); - if (hRequest == NULL) - { -#ifdef VALIDATE_DEBUG - WriteTrace(TraceValidate,"v5"); -#endif - g_Settings->SaveBool(Beta_IsValidExe,DefaultResult); - InternetCloseHandle (hRequest); - return; - } - - stdstr ComputerName; - Length = 260; - ComputerName.resize(Length); - GetComputerName((char *)ComputerName.c_str(),&Length); - - ComputerName.ToLower(); - - stdstr_f PostInfo("1,%s,%s,%s,%s,%s,%s",VALIDATE_BIN_APP,File_md5.hex_digest(),ComputerName.c_str(),VersionInfo(VERSION_PRODUCT_VERSION).c_str(),g_Settings->LoadString(Beta_UserName).c_str(),g_Settings->LoadString(Beta_EmailAddress).c_str()); - - //"Content-Type: application/x-www-form-urlencoded" - char ContentType[] = { "\xE9\x2C\x01\x1A\x11\x0B\x1A\x59\x79\x2D\x09\x15\x5F\x1A\x41\x11\x00\x1C\x05\x0A\x02\x15\x1D\x06\x01\x41\x57\x55\x5A\x00\x00\x5A\x4B\x09\x1D\x1F\x40\x58\x07\x1E\x09\x0B\x0D\x0C\x0B\x01\x01" }; - ValidateDecryptString(ContentType,sizeof(ContentType) - 1); - - - //encrypt PostData - stdstr_f PostData("%s=","Data"); - BYTE * Input = (BYTE *)PostInfo.c_str(); - BYTE PreviousChar = 0xAA; - for (size_t x = 0; x < PostInfo.size(); x++) - { - PostData += stdstr_f("%02X",(BYTE)(Input[x] ^ PreviousChar)); - PreviousChar = Input[x]; - } - - BOOL Success = HttpSendRequest(hRequest, ContentType, sizeof(ContentType) - 1, (LPVOID)PostData.c_str(), PostData.length()); - if (!Success) - { -#ifdef VALIDATE_DEBUG - WriteTrace(TraceValidate,"v6"); -#endif - g_Settings->SaveBool(Beta_IsValidExe,DefaultResult); - InternetCloseHandle (hRequest); - return; - } - - -#ifdef VALIDATE_DEBUG - { - bool bGotHeaders = true; - DWORD dwBufferLength = 300; - std::auto_ptr Headers(new BYTE[dwBufferLength]); - if (!HttpQueryInfo(hRequest,HTTP_QUERY_RAW_HEADERS,Headers.get(),&dwBufferLength,NULL)) - { - if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) - { - Headers.reset(new BYTE[dwBufferLength]); - if (!HttpQueryInfo(hRequest,HTTP_QUERY_RAW_HEADERS,Headers.get(),&dwBufferLength,NULL)) - { - bGotHeaders = false; - } - } - } - - if (bGotHeaders) - { - for (LPCTSTR Header = (LPCTSTR)Headers.get(); Header != NULL && Header[0] != 0; Header += strlen(Header) + 1) - { - WriteTraceF(TraceValidate,"v6a: Header: %s",Header); - } - } else { - WriteTrace(TraceValidate,"v6b: Failed to get headers"); - } - } -#endif - - std::auto_ptr WebSiteData; - DWORD dwRead = 0; - ULONG DataLen = 0; - do{ - BYTE SiteData[0x1000]; - memset(SiteData,0,sizeof(SiteData)); - if (!InternetReadFile(hRequest,SiteData,sizeof(SiteData),&dwRead)) - { -#ifdef VALIDATE_DEBUG - WriteTrace(TraceValidate,"v7"); -#endif - g_Settings->SaveBool(Beta_IsValidExe,DefaultResult); - InternetCloseHandle (hRequest); - return; - } - - if (dwRead == 0) - { - break; - } - - std::auto_ptr NewSiteData(new BYTE[DataLen + dwRead + 1]); - if (DataLen > 0) - { - memcpy(NewSiteData.get(),WebSiteData.get(),DataLen); - } - memcpy(NewSiteData.get() + DataLen,SiteData,dwRead); - NewSiteData.get()[DataLen + dwRead] = 0; - WebSiteData = NewSiteData; - DataLen += dwRead; - - } while (dwRead > 0); - -#ifdef VALIDATE_DEBUG - WriteTraceF(TraceValidate,"v8: %s",WebSiteData.get()); -#endif - - MD5 Result_md5(WebSiteData.get(),DataLen); - - int LastRunItem = -1; - bool bSaveRunInfo = false; - for (int run = 0; run < RunItemCount; run ++) - { - if (memcmp(RunItems[run].File_md5,File_md5.raw_digest(),sizeof(RunItems[run].File_md5)) == 0) - { - LastRunItem = run; - break; - } - } - -#ifdef VALIDATE_DEBUG - WriteTraceF(TraceValidate,"v9: %s",Result_md5.hex_digest()); -#endif - //if good MD5 - if (_stricmp(Result_md5.hex_digest(),"FB2CDD258756A5472BD24BABF2EC9F66") == 0) // Good Md5 - { - if (LastRunItem > 0) - { - for (int i = (LastRunItem + 1); i < RunItemCount; i++) - { - memcpy(&RunItems[i - 1],&RunItems[i],sizeof(RunItems[i])); - } - RunItemCount -= 1; - bSaveRunInfo = true; - } - DefaultResult = true; - } - else if (_stricmp(Result_md5.hex_digest(),"9030FF575A9B687DC868B966CB7C02D4") == 0) // Bad MD5 - { - if (LastRunItem > 0) - { - if (RunItems[LastRunItem].RunTimes != FAILED_CHECK) - { - RunItems[LastRunItem].RunTimes = FAILED_CHECK; - bSaveRunInfo = true; - } - } else { - AUTO_PTR NewRunData(new BYTE[(RunItemCount + 1) * sizeof(INVALID_RUN_ITEM)]); - INVALID_RUN_ITEM * NewRunItems = (INVALID_RUN_ITEM *)NewRunData.get(); - for (int i = 0; i < RunItemCount; i++) - { - NewRunItems[i] = RunItems[i]; - } - LastRunItem = RunItemCount; - memcpy(NewRunItems[LastRunItem].File_md5,File_md5.raw_digest(),sizeof(NewRunItems[LastRunItem].File_md5)); - NewRunItems[LastRunItem].RunTimes = FAILED_CHECK; - - RunData = NewRunData; - RunItems = (INVALID_RUN_ITEM *)RunData.get(); - RunItemCount += 1; - bSaveRunInfo = true; - } - DefaultResult = false; - } - else - { - if (LastRunItem >= 0) - { - if (RunItems[LastRunItem].RunTimes != FAILED_CHECK) - { - RunItems[LastRunItem].RunTimes += 1; - if (RunItems[LastRunItem].RunTimes >= MAX_BAD_DATA) - { - DefaultResult = false; - RunItems[LastRunItem].RunTimes = MAX_BAD_DATA; - } - bSaveRunInfo = true; - } - } else { - AUTO_PTR NewRunData(new BYTE[(RunItemCount + 1) * sizeof(INVALID_RUN_ITEM)]); - INVALID_RUN_ITEM * NewRunItems = (INVALID_RUN_ITEM *)NewRunData.get(); - for (int i = 0; i < RunItemCount; i++) - { - NewRunItems[i] = RunItems[i]; - } - LastRunItem = RunItemCount; - memcpy(NewRunItems[LastRunItem].File_md5,File_md5.raw_digest(),sizeof(NewRunItems[LastRunItem].File_md5)); - NewRunItems[LastRunItem].RunTimes = 1; - - RunData = NewRunData; - RunItems = (INVALID_RUN_ITEM *)RunData.get(); - RunItemCount += 1; - bSaveRunInfo = true; - } - if (RunItems[LastRunItem].RunTimes >= MAX_BAD_DATA) - { - DefaultResult = false; - } - - } - - bSaveRunInfo = true; - if (bSaveRunInfo) - { - bRes = Registry.Open(HKEY_CLASSES_ROOT,Subkey,KEY_ALL_ACCESS,true); - if (bRes) - { - bRes = Registry.SetValue("data",(BYTE *)RunData.get(),RunItemCount * sizeof(INVALID_RUN_ITEM),REG_BINARY); - } - - if (bRes) - { - bRes = Registry.Open(HKEY_LOCAL_MACHINE,Subkey2,KEY_ALL_ACCESS); - if (bRes) - { - Registry.DeleteValue("data"); - } - }else { - bRes = Registry.Open(HKEY_LOCAL_MACHINE,Subkey2,KEY_ALL_ACCESS,true); - if (bRes) - { - bRes = Registry.SetValue("data",(BYTE *)RunData.get(),RunItemCount * sizeof(INVALID_RUN_ITEM),REG_BINARY); - } - } - } - g_Settings->SaveBool(Beta_IsValidExe,DefaultResult); -} - -void TestValidBinary ( ) -{ -#if defined(BETA_RELEASE) || defined(VALIDATE_BIN_LOCAL) - static DWORD ThreadID = 0; - if (ThreadID == 0) - { - HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)TestValidBinaryThread,(LPVOID)NULL,0,&ThreadID); - CloseHandle(hThread); - } -#endif -} - -#endif diff --git a/Source/Project64/main.cpp b/Source/Project64/main.cpp index b105b7b2c..bcbd90e76 100644 --- a/Source/Project64/main.cpp +++ b/Source/Project64/main.cpp @@ -225,28 +225,14 @@ int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR / //Create the main window with Menu WriteTrace(TraceDebug,__FUNCTION__ ": Create Main Window"); stdstr WinTitle(AppName()); -#ifdef BETA_RELEASE - WinTitle.Format("Project64 %s (%s)",VersionInfo(VERSION_PRODUCT_VERSION).c_str(),g_Settings->LoadString(Beta_UserName).c_str()); -#else + WinTitle.Format("Project64 %s",VersionInfo(VERSION_PRODUCT_VERSION).c_str()); -#endif + CMainGui MainWindow(true,WinTitle.c_str()), HiddenWindow(false); CMainMenu MainMenu(&MainWindow); g_Plugins->SetRenderWindows(&MainWindow,&HiddenWindow); g_Notify->SetMainWindow(&MainWindow); -#ifdef BETA_RELEASE - { - stdstr_f User("%s",g_Settings->LoadString(Beta_UserName).c_str()); - stdstr_f Email("%s",g_Settings->LoadString(Beta_EmailAddress).c_str()); - - if (MD5(User).hex_digest() != g_Settings->LoadString(Beta_UserNameMD5) || - MD5(Email).hex_digest() != g_Settings->LoadString(Beta_EmailAddressMD5)) - { - return false; - } - } -#endif if (__argc > 1) { WriteTraceF(TraceDebug,__FUNCTION__ ": Cmd line found \"%s\"",__argv[1]); MainWindow.Show(true); //Show the main window diff --git a/Source/Project64/stdafx.h b/Source/Project64/stdafx.h index bd245397a..48cd25920 100644 --- a/Source/Project64/stdafx.h +++ b/Source/Project64/stdafx.h @@ -23,7 +23,6 @@ #include "Support.h" #include #include -#include "Validate Binary.h" #include #include "3rd Party/Zip.h" From b10b268e1109d34756be6e811bc452f929bf6f81 Mon Sep 17 00:00:00 2001 From: Emmet Young Date: Sat, 14 Feb 2015 22:24:55 +1100 Subject: [PATCH 2/3] Remove the no longer used Processor Info.cpp and .h code --- Source/Project64/3rd Party/Processor Info.cpp | 1876 ----------------- Source/Project64/3rd Party/Processor Info.h | 1 - Source/Project64/Project64.vcproj | 24 - Source/Project64/Project64.vcxproj | 4 - Source/Project64/Project64.vcxproj.filters | 6 - 5 files changed, 1911 deletions(-) delete mode 100644 Source/Project64/3rd Party/Processor Info.cpp delete mode 100644 Source/Project64/3rd Party/Processor Info.h diff --git a/Source/Project64/3rd Party/Processor Info.cpp b/Source/Project64/3rd Party/Processor Info.cpp deleted file mode 100644 index b95e520b1..000000000 --- a/Source/Project64/3rd Party/Processor Info.cpp +++ /dev/null @@ -1,1876 +0,0 @@ -// Filename: Processor.h -// ===================== -// Author: Benjamin Jurke -// File history: 27.02.2002 File created. -/////////////////////////////////////////// - -// Options: -/////////// -#define PROCESSOR_FREQUENCY_MEASURE_AVAILABLE -// Includes --> code gets os-dependend (Win32) - - -typedef struct ProcessorExtensions -{ - bool FPU_FloatingPointUnit; - bool VME_Virtual8086ModeEnhancements; - bool DE_DebuggingExtensions; - bool PSE_PageSizeExtensions; - bool TSC_TimeStampCounter; - bool MSR_ModelSpecificRegisters; - bool PAE_PhysicalAddressExtension; - bool MCE_MachineCheckException; - bool CX8_COMPXCHG8B_Instruction; - bool APIC_AdvancedProgrammableInterruptController; - unsigned int APIC_ID; - bool SEP_FastSystemCall; - bool MTRR_MemoryTypeRangeRegisters; - bool PGE_PTE_GlobalFlag; - bool MCA_MachineCheckArchitecture; - bool CMOV_ConditionalMoveAndCompareInstructions; - bool FGPAT_PageAttributeTable; - bool PSE36_36bitPageSizeExtension; - bool PN_ProcessorSerialNumber; - bool CLFSH_CFLUSH_Instruction; - unsigned int CLFLUSH_InstructionCacheLineSize; - bool DS_DebugStore; - bool ACPI_ThermalMonitorAndClockControl; - bool EMMX_MultimediaExtensions; - bool MMX_MultimediaExtensions; - bool FXSR_FastStreamingSIMD_ExtensionsSaveRestore; - bool SSE_StreamingSIMD_Extensions; - bool SSE2_StreamingSIMD2_Extensions; - bool SS_SelfSnoop; - bool HT_HyperThreading; - unsigned int HT_HyterThreadingSiblings; - bool TM_ThermalMonitor; - bool IA64_Intel64BitArchitecture; - bool _3DNOW_InstructionExtensions; - bool _E3DNOW_InstructionExtensions; - bool AA64_AMD64BitArchitecture; -} ProcessorExtensions; - -typedef struct ProcessorCache -{ - bool bPresent; - char strSize[32]; - unsigned int uiAssociativeWays; - unsigned int uiLineSize; - bool bSectored; - char strCache[128]; -} ProcessorCache; - -typedef struct ProcessorL1Cache -{ - ProcessorCache Instruction; - ProcessorCache Data; -} ProcessorL1Cache; - -typedef struct ProcessorTLB -{ - bool bPresent; - char strPageSize[32]; - unsigned int uiAssociativeWays; - unsigned int uiEntries; - char strTLB[128]; -} ProcessorTLB; - -typedef struct ProcessorInfo -{ - char strVendor[16]; - unsigned int uiFamily; - unsigned int uiExtendedFamily; - char strFamily[64]; - unsigned int uiModel; - unsigned int uiExtendedModel; - char strModel[128]; - unsigned int uiStepping; - unsigned int uiType; - char strType[64]; - unsigned int uiBrandID; - char strBrandID[64]; - char strProcessorSerial[64]; - unsigned long MaxSupportedLevel; - unsigned long MaxSupportedExtendedLevel; - ProcessorExtensions _Ext; - ProcessorL1Cache _L1; - ProcessorCache _L2; - ProcessorCache _L3; - ProcessorCache _Trace; - ProcessorTLB _Instruction; - ProcessorTLB _Data; -} ProcessorInfo; - - -// CProcessor -// ========== -// Class for detecting the processor name, type and available -// extensions as long as it's speed. -///////////////////////////////////////////////////////////// -class CProcessor -{ -// Constructor / Destructor: -//////////////////////////// -public: - CProcessor(); - -// Private vars: -//////////////// -private: - __int64 uqwFrequency; - char strCPUName[128]; - ProcessorInfo CPUInfo; - -// Private functions: -///////////////////// -private: - bool AnalyzeIntelProcessor(); - bool AnalyzeAMDProcessor(); - bool AnalyzeUnknownProcessor(); - bool CheckCPUIDPresence(); - void DecodeProcessorConfiguration(unsigned int cfg); - void TranslateProcessorConfiguration(); - void GetStandardProcessorConfiguration(); - void GetStandardProcessorExtensions(); - -// Public functions: -//////////////////// -public: - __int64 GetCPUFrequency(unsigned int uiMeasureMSecs); - const ProcessorInfo *GetCPUInfo(); - bool CPUInfoToText(char *strBuffer, unsigned int uiMaxLen); - bool WriteInfoTextFile(const char *strFilename); -}; - -bool CPUInfoToText(char * /*strBuffer*/, unsigned int /*uiMaxLen*/) -{ - CProcessor cpu; - cpu.WriteInfoTextFile("D:\\cpu.txt"); - return false; - //return cpu.CPUInfoToText(strBuffer,uiMaxLen); -} - - -// Filename: Processor.cpp -// ======================= -// Author: Benjamin Jurke -// File history: 27.02.2002 - File created. Support for Intel and AMD processors -// 05.03.2002 - Fixed the CPUID bug: On Pre-Pentium CPUs the CPUID -// command is not available -// - The CProcessor::WriteInfoTextFile function do not -// longer use Win32 file functions (-> os independend) -// - Optional include of the windows.h header which is -// still need for CProcessor::GetCPUFrequency. -// 06.03.2002 - My birthday (18th :-)) -// - Replaced the '\r\n' line endings in function -// CProcessor::CPUInfoToText by '\n' -// - Replaced unsigned __int64 by signed __int64 for -// solving some compiler conversion problems -// - Fixed a bug at family=6, model=6 (Celeron -> P2) -////////////////////////////////////////////////////////////////////////////////// - - -#include -#include -#include - - -#ifdef PROCESSOR_FREQUENCY_MEASURE_AVAILABLE -#include -// We need the QueryPerformanceCounter and Sleep functions -#endif - - -// Some macros we often need -//////////////////////////// -#define CheckBit(var, bit) ((var & (1 << bit)) ? true : false) - - -// CProcessor::CProcessor -// ====================== -// Class constructor: -///////////////////////// -CProcessor::CProcessor() -{ - uqwFrequency = 0; - memset(&CPUInfo, 0, sizeof(CPUInfo)); -} - -// unsigned __int64 CProcessor::GetCPUFrequency(unsigned int uiMeasureMSecs) -// ========================================================================= -// Function to measure the current CPU frequency -//////////////////////////////////////////////////////////////////////////// -__int64 CProcessor::GetCPUFrequency(unsigned int uiMeasureMSecs) -{ -#ifndef PROCESSOR_FREQUENCY_MEASURE_AVAILABLE - return 0; -#else - // If there are invalid measure time parameters, zero msecs for example, - // we've to exit the function - if (uiMeasureMSecs < 1) - { - // If theres already a measured frequency available, we return it - if (uqwFrequency > 0) - return uqwFrequency; - else - return 0; - } - - // Now we check if the CPUID command is available - if (!CheckCPUIDPresence()) - return 0; - - // First we get the CPUID standard level 0x00000001 - unsigned long reg; - __asm - { - mov eax, 1 - cpuid - mov reg, edx - } - - // Then we check, if the RDTSC (Real Date Time Stamp Counter) is available. - // This function is necessary for our measure process. - if (!(reg & (1 << 4))) - return 0; - - // After that we declare some vars and check the frequency of the high - // resolution timer for the measure process. - // If there's no high-res timer, we exit. - __int64 starttime, endtime, timedif, freq, start, end, dif; - if (!QueryPerformanceFrequency((LARGE_INTEGER *) &freq)) - return 0; - - // Now we can init the measure process. We set the process and thread priority - // to the highest available level (Realtime priority). Also we focus the - // first processor in the multiprocessor system. - HANDLE hProcess = GetCurrentProcess(); - HANDLE hThread = GetCurrentThread(); - unsigned long dwCurPriorityClass = GetPriorityClass(hProcess); - int iCurThreadPriority = GetThreadPriority(hThread); - unsigned long dwProcessMask, dwSystemMask, dwNewMask = 1; - GetProcessAffinityMask(hProcess, &dwProcessMask, &dwSystemMask); - - SetPriorityClass(hProcess, REALTIME_PRIORITY_CLASS); - SetThreadPriority(hThread, THREAD_PRIORITY_TIME_CRITICAL); - SetProcessAffinityMask(hProcess, dwNewMask); - - // Now we call a CPUID to ensure, that all other prior called functions are - // completed now (serialization) - __asm cpuid - - // We ask the high-res timer for the start time - QueryPerformanceCounter((LARGE_INTEGER *) &starttime); - - // Then we get the current cpu clock and store it - __asm - { - rdtsc - mov dword ptr [start+4], edx - mov dword ptr [start], eax - } - - // Now we wart for some msecs - Sleep(uiMeasureMSecs); - - // We ask for the end time - QueryPerformanceCounter((LARGE_INTEGER *) &endtime); - - // And also for the end cpu clock - __asm - { - rdtsc - mov dword ptr [end+4], edx - mov dword ptr [end], eax - } - - // Now we can restore the default process and thread priorities - SetProcessAffinityMask(hProcess, dwProcessMask); - SetThreadPriority(hThread, iCurThreadPriority); - SetPriorityClass(hProcess, dwCurPriorityClass); - - // Then we calculate the time and clock differences - dif = end - start; - timedif = endtime - starttime; - - // And finally the frequency is the clock difference divided by the time - // difference. - uqwFrequency = (__int64) (((double) dif) / (((double) timedif) / (__int64)freq)); - - // At last we just return the frequency that is also stored in the call - // member var uqwFrequency - return uqwFrequency; -#endif -} - -// bool CProcessor::AnalyzeIntelProcessor() -// ======================================== -// Private class function for analyzing an Intel processor -////////////////////////////////////////////////////////// -bool CProcessor::AnalyzeIntelProcessor() -{ - unsigned long eaxreg, ebxreg, edxreg; - - // First we check if the CPUID command is available - if (!CheckCPUIDPresence()) - return false; - - // Now we get the CPUID standard level 0x00000001 - __asm - { - mov eax, 1 - cpuid - mov eaxreg, eax - mov ebxreg, ebx - mov edxreg, edx - } - - // Then get the cpu model, family, type, stepping and brand id by masking - // the eax and ebx register - CPUInfo.uiStepping = eaxreg & 0xF; - CPUInfo.uiModel = (eaxreg >> 4) & 0xF; - CPUInfo.uiFamily = (eaxreg >> 8) & 0xF; - CPUInfo.uiType = (eaxreg >> 12) & 0x3; - CPUInfo.uiBrandID = ebxreg & 0xF; - - // Now we can translate the type number to a more understandable string format - switch (CPUInfo.uiType) - { - case 0: // Type = 0: Original OEM processor - strcpy(CPUInfo.strType, "Original OEM"); - strcpy(strCPUName, CPUInfo.strType); - strcat(strCPUName, " "); - break; - case 1: // Type = 1: Overdrive processor - strcpy(CPUInfo.strType, "Overdrive"); - strcpy(strCPUName, CPUInfo.strType); - strcat(strCPUName, " "); - break; - case 2: // Type = 2: Dual-capable processor - strcpy(CPUInfo.strType, "Dual-capable"); - strcpy(strCPUName, CPUInfo.strType); - strcat(strCPUName, " "); - break; - case 3: // Type = 3: Reserved for future use - strcpy(CPUInfo.strType, "Reserved"); - break; - default: // This should be never called, cause we just mask 2 bits --> [0..3] - strcpy(CPUInfo.strType, "Unknown"); - break; - } - - // Then we translate the brand id: - switch (CPUInfo.uiBrandID) - { - case 0: // Brand id = 0: Brand id not supported on this processor - strcpy(CPUInfo.strBrandID, "Not supported"); - break; - case 1: // Brand id = 1: Intel Celeron (0.18 µm) processor - strcpy(CPUInfo.strBrandID, "0.18 µm Intel Celeron"); - break; - case 2: // Brand id = 2: Intel Pentium III (0.18 µm) processor - strcpy(CPUInfo.strBrandID, "0.18 µm Intel Pentium III"); - break; - case 3: // Brand id = 3: Model dependent - if (CPUInfo.uiModel == 6) // If the cpu model is Celeron (well, I'm NOT SURE!!!) - strcpy(CPUInfo.strBrandID, "0.13 µm Intel Celeron"); - else - strcpy(CPUInfo.strBrandID, "0.18 µm Intel Pentium III Xeon"); - break; - case 4: // Brand id = 4: Intel Pentium III Tualatin (0.13 µm) processor - strcpy(CPUInfo.strBrandID, "0.13 µm Intel Pentium III"); - break; - case 6: // Brand id = 6: Intel Pentium III mobile (0.13 µm) processor - strcpy(CPUInfo.strBrandID, "0.13 µm Intel Pentium III mobile"); - break; - case 7: // Brand id = 7: Intel Celeron mobile (0.13 µm) processor - strcpy(CPUInfo.strBrandID, "0.13 µm Intel Celeron mobile"); - break; - case 8: // Brand id = 8: Intel Pentium 4 Willamette (0.18 µm) processor - strcpy(CPUInfo.strBrandID, "0.18 µm Intel Pentium 4"); - break; - case 9: // Brand id = 9: Intel Pentium 4 Northwood (0.13 µm) processor - strcpy(CPUInfo.strBrandID, "0.13 µm Intel Pentium 4"); - break; - case 0xA: // Brand id = 0xA: Intel Pentium 4 Northwood (0.13 µm processor) - strcpy(CPUInfo.strBrandID, "0.13 µm Intel Pentium 4"); - break; // No idea, where the difference to id=9 is - case 0xB: // Brand id = 0xB: Intel Pentium 4 Northwood Xeon (0.13 µm processor) - strcpy(CPUInfo.strBrandID, "0.13 µm Intel Pentium 4 Xeon"); - break; - case 0xE: // Brand id = 0xE: Intel Pentium 4 Willamette Xeon (0.18 µm processor) - strcpy(CPUInfo.strBrandID, "0.18 µm Intel Pentium 4 Xeon"); - break; - default: // Should be never called, but sure is sure - strcpy(CPUInfo.strBrandID, "Unknown"); - break; - } - - // Then we translate the cpu family - switch (CPUInfo.uiFamily) - { - case 3: // Family = 3: i386 (80386) processor family - strcpy(CPUInfo.strFamily, "Intel i386"); - break; - case 4: // Family = 4: i486 (80486) processor family - strcpy(CPUInfo.strFamily, "Intel i486"); - break; - case 5: // Family = 5: Pentium (80586) processor family - strcpy(CPUInfo.strFamily, "Intel Pentium"); - break; - case 6: // Family = 6: Pentium Pro (80686) processor family - strcpy(CPUInfo.strFamily, "Intel Pentium Pro"); - break; - case 15: // Family = 15: Extended family specific - // Masking the extended family - CPUInfo.uiExtendedFamily = (eaxreg >> 20) & 0xFF; - switch (CPUInfo.uiExtendedFamily) - { - case 0: // Family = 15, Ext. Family = 0: Pentium 4 (80786 ??) processor family - strcpy(CPUInfo.strFamily, "Intel Pentium 4"); - break; - case 1: // Family = 15, Ext. Family = 1: McKinley (64-bit) processor family - strcpy(CPUInfo.strFamily, "Intel McKinley (IA-64)"); - break; - default: // Sure is sure - strcpy(CPUInfo.strFamily, "Unknown Intel Pentium 4+"); - break; - } - break; - default: // Failsave - strcpy(CPUInfo.strFamily, "Unknown"); - break; - } - - // Now we come to the big deal, the exact model name - switch (CPUInfo.uiFamily) - { - case 3: // i386 (80386) processor family - strcpy(CPUInfo.strModel, "Unknown Intel i386"); - strcat(strCPUName, "Intel i386"); - break; - case 4: // i486 (80486) processor family - switch (CPUInfo.uiModel) - { - case 0: // Model = 0: i486 DX-25/33 processor model - strcpy(CPUInfo.strModel, "Intel i486 DX-25/33"); - strcat(strCPUName, "Intel i486 DX-25/33"); - break; - case 1: // Model = 1: i486 DX-50 processor model - strcpy(CPUInfo.strModel, "Intel i486 DX-50"); - strcat(strCPUName, "Intel i486 DX-50"); - break; - case 2: // Model = 2: i486 SX processor model - strcpy(CPUInfo.strModel, "Intel i486 SX"); - strcat(strCPUName, "Intel i486 SX"); - break; - case 3: // Model = 3: i486 DX2 (with i487 numeric coprocessor) processor model - strcpy(CPUInfo.strModel, "Intel i486 487/DX2"); - strcat(strCPUName, "Intel i486 DX2 with i487 numeric coprocessor"); - break; - case 4: // Model = 4: i486 SL processor model (never heard ?!?) - strcpy(CPUInfo.strModel, "Intel i486 SL"); - strcat(strCPUName, "Intel i486 SL"); - break; - case 5: // Model = 5: i486 SX2 processor model - strcpy(CPUInfo.strModel, "Intel i486 SX2"); - strcat(strCPUName, "Intel i486 SX2"); - break; - case 7: // Model = 7: i486 write-back enhanced DX2 processor model - strcpy(CPUInfo.strModel, "Intel i486 write-back enhanced DX2"); - strcat(strCPUName, "Intel i486 write-back enhanced DX2"); - break; - case 8: // Model = 8: i486 DX4 processor model - strcpy(CPUInfo.strModel, "Intel i486 DX4"); - strcat(strCPUName, "Intel i486 DX4"); - break; - case 9: // Model = 9: i486 write-back enhanced DX4 processor model - strcpy(CPUInfo.strModel, "Intel i486 write-back enhanced DX4"); - strcat(strCPUName, "Intel i486 DX4"); - break; - default: // ... - strcpy(CPUInfo.strModel, "Unknown Intel i486"); - strcat(strCPUName, "Intel i486 (Unknown model)"); - break; - } - break; - case 5: // Pentium (80586) processor family - switch (CPUInfo.uiModel) - { - case 0: // Model = 0: Pentium (P5 A-Step) processor model - strcpy(CPUInfo.strModel, "Intel Pentium (P5 A-Step)"); - strcat(strCPUName, "Intel Pentium (P5 A-Step core)"); - break; // Famous for the DIV bug, as far as I know - case 1: // Model = 1: Pentium 60/66 processor model - strcpy(CPUInfo.strModel, "Intel Pentium 60/66 (P5)"); - strcat(strCPUName, "Intel Pentium 60/66 (P5 core)"); - break; - case 2: // Model = 2: Pentium 75-200 (P54C) processor model - strcpy(CPUInfo.strModel, "Intel Pentium 75-200 (P54C)"); - strcat(strCPUName, "Intel Pentium 75-200 (P54C core)"); - break; - case 3: // Model = 3: Pentium overdrive for 486 systems processor model - strcpy(CPUInfo.strModel, "Intel Pentium for 486 system (P24T Overdrive)"); - strcat(strCPUName, "Intel Pentium for 486 (P24T overdrive core)"); - break; - case 4: // Model = 4: Pentium MMX processor model - strcpy(CPUInfo.strModel, "Intel Pentium MMX (P55C)"); - strcat(strCPUName, "Intel Pentium MMX (P55C core)"); - break; - case 7: // Model = 7: Pentium processor model (don't know difference to Model=2) - strcpy(CPUInfo.strModel, "Intel Pentium (P54C)"); - strcat(strCPUName, "Intel Pentium (P54C core)"); - break; - case 8: // Model = 8: Pentium MMX (0.25 µm) processor model - strcpy(CPUInfo.strModel, "Intel Pentium MMX (P55C), 0.25 µm"); - strcat(strCPUName, "Intel Pentium MMX (P55C core), 0.25 µm"); - break; - default: // ... - strcpy(CPUInfo.strModel, "Unknown Intel Pentium"); - strcat(strCPUName, "Intel Pentium (Unknown P5-model)"); - break; - } - break; - case 6: // Pentium Pro (80686) processor family - switch (CPUInfo.uiModel) - { - case 0: // Model = 0: Pentium Pro (P6 A-Step) processor model - strcpy(CPUInfo.strModel, "Intel Pentium Pro (P6 A-Step)"); - strcat(strCPUName, "Intel Pentium Pro (P6 A-Step core)"); - break; - case 1: // Model = 1: Pentium Pro - strcpy(CPUInfo.strModel, "Intel Pentium Pro (P6)"); - strcat(strCPUName, "Intel Pentium Pro (P6 core)"); - break; - case 3: // Model = 3: Pentium II (66 MHz FSB, I think) processor model - strcpy(CPUInfo.strModel, "Intel Pentium II Model 3, 0.28 µm"); - strcat(strCPUName, "Intel Pentium II (Model 3 core, 0.28 µm process)"); - break; - case 5: // Model = 5: Pentium II/Xeon/Celeron (0.25 µm) processor model - strcpy(CPUInfo.strModel, "Intel Pentium II Model 5/Xeon/Celeron, 0.25 µm"); - strcat(strCPUName, "Intel Pentium II/Xeon/Celeron (Model 5 core, 0.25 µm process)"); - break; - case 6: // Model = 6: Pentium II with internal L2 cache - strcpy(CPUInfo.strModel, "Intel Pentium II - internal L2 cache"); - strcat(strCPUName, "Intel Pentium II with internal L2 cache"); - break; - case 7: // Model = 7: Pentium III/Xeon (extern L2 cache) processor model - strcpy(CPUInfo.strModel, "Intel Pentium III/Pentium III Xeon - external L2 cache, 0.25 µm"); - strcat(strCPUName, "Intel Pentium III/Pentium III Xeon (0.25 µm process) with external L2 cache"); - break; - case 8: // Model = 8: Pentium III/Xeon/Celeron (256 KB on-die L2 cache) processor model - strcpy(CPUInfo.strModel, "Intel Pentium III/Celeron/Pentium III Xeon - internal L2 cache, 0.18 µm"); - // We want to know it exactly: - switch (CPUInfo.uiBrandID) - { - case 1: // Model = 8, Brand id = 1: Celeron (on-die L2 cache) processor model - strcat(strCPUName, "Intel Celeron (0.18 µm process) with internal L2 cache"); - break; - case 2: // Model = 8, Brand id = 2: Pentium III (on-die L2 cache) processor model (my current cpu :-)) - strcat(strCPUName, "Intel Pentium III (0.18 µm process) with internal L2 cache"); - break; - case 3: // Model = 8, Brand id = 3: Pentium III Xeon (on-die L2 cache) processor model - strcat(strCPUName, "Intel Pentium III Xeon (0.18 µm process) with internal L2 cache"); - break; - default: // ...² - strcat(strCPUName, "Intel Pentium III core (unknown model, 0.18 µm process) with internal L2 cache"); - break; - } - break; - case 0xA: // Model = 0xA: Pentium III/Xeon/Celeron (1 or 2 MB on-die L2 cache) processor model - strcpy(CPUInfo.strModel, "Intel Pentium III/Celeron/Pentium III Xeon - internal L2 cache, 0.18 µm"); - // Exact detection: - switch (CPUInfo.uiBrandID) - { - case 1: // Model = 0xA, Brand id = 1: Celeron (1 or 2 MB on-die L2 cache (does it exist??)) processor model - strcat(strCPUName, "Intel Celeron (0.18 µm process) with internal L2 cache"); - break; - case 2: // Model = 0xA, Brand id = 2: Pentium III (1 or 2 MB on-die L2 cache (never seen...)) processor model - strcat(strCPUName, "Intel Pentium III (0.18 µm process) with internal L2 cache"); - break; - case 3: // Model = 0xA, Brand id = 3: Pentium III Xeon (1 or 2 MB on-die L2 cache) processor model - strcat(strCPUName, "Intel Pentium III Xeon (0.18 µm process) with internal L2 cache"); - break; - default: // Getting bored of this............ - strcat(strCPUName, "Intel Pentium III core (unknown model, 0.18 µm process) with internal L2 cache"); - break; - } - break; - case 0xB: // Model = 0xB: Pentium III/Xeon/Celeron (Tualatin core, on-die cache) processor model - strcpy(CPUInfo.strModel, "Intel Pentium III/Celeron/Pentium III Xeon - internal L2 cache, 0.13 µm"); - // Omniscient: ;-) - switch (CPUInfo.uiBrandID) - { - case 3: // Model = 0xB, Brand id = 3: Celeron (Tualatin core) processor model - strcat(strCPUName, "Intel Celeron (Tualatin core, 0.13 µm process) with internal L2 cache"); - break; - case 4: // Model = 0xB, Brand id = 4: Pentium III (Tualatin core) processor model - strcat(strCPUName, "Intel Pentium III (Tualatin core, 0.13 µm process) with internal L2 cache"); - break; - case 7: // Model = 0xB, Brand id = 7: Celeron mobile (Tualatin core) processor model - strcat(strCPUName, "Intel Celeron mobile (Tualatin core, 0.13 µm process) with internal L2 cache"); - break; - default: // *bored* - strcat(strCPUName, "Intel Pentium III Tualatin core (unknown model, 0.13 µm process) with internal L2 cache"); - break; - } - break; - default: // *more bored* - strcpy(CPUInfo.strModel, "Unknown Intel Pentium Pro"); - strcat(strCPUName, "Intel Pentium Pro (Unknown model)"); - break; - } - break; - case 15: // Extended processor family - // Masking the extended model - CPUInfo.uiExtendedModel = (eaxreg >> 16) & 0xFF; - switch (CPUInfo.uiModel) - { - case 0: // Model = 0: Pentium 4 Willamette (A-Step) core - if ((CPUInfo.uiBrandID) == 8) // Brand id = 8: P4 Willamette - { - strcpy(CPUInfo.strModel, "Intel Pentium 4 Willamette (A-Step)"); - strcat(strCPUName, "Intel Pentium 4 Willamette (A-Step)"); - } - else // else Xeon - { - strcpy(CPUInfo.strModel, "Intel Pentium 4 Willamette Xeon (A-Step)"); - strcat(strCPUName, "Intel Pentium 4 Willamette Xeon (A-Step)"); - } - break; - case 1: // Model = 1: Pentium 4 Willamette core - if ((CPUInfo.uiBrandID) == 8) // Brand id = 8: P4 Willamette - { - strcpy(CPUInfo.strModel, "Intel Pentium 4 Willamette"); - strcat(strCPUName, "Intel Pentium 4 Willamette"); - } - else // else Xeon - { - strcpy(CPUInfo.strModel, "Intel Pentium 4 Willamette Xeon"); - strcat(strCPUName, "Intel Pentium 4 Willamette Xeon"); - } - break; - case 2: // Model = 2: Pentium 4 Northwood core - if (((CPUInfo.uiBrandID) == 9) || ((CPUInfo.uiBrandID) == 0xA)) // P4 Willamette - { - strcpy(CPUInfo.strModel, "Intel Pentium 4 Northwood"); - strcat(strCPUName, "Intel Pentium 4 Northwood"); - } - else // Xeon - { - strcpy(CPUInfo.strModel, "Intel Pentium 4 Northwood Xeon"); - strcat(strCPUName, "Intel Pentium 4 Northwood Xeon"); - } - break; - default: // Silly stupid never used failsave option - strcpy(CPUInfo.strModel, "Unknown Intel Pentium 4"); - strcat(strCPUName, "Intel Pentium 4 (Unknown model)"); - break; - } - break; - default: // *grmpf* - strcpy(CPUInfo.strModel, "Unknown Intel model"); - strcat(strCPUName, "Intel (Unknown model)"); - break; - } - - // After the long processor model block we now come to the processors serial - // number. - // First of all we check if the processor supports the serial number - if (CPUInfo.MaxSupportedLevel >= 3) - { - // If it supports the serial number CPUID level 0x00000003 we read the data - unsigned long sig1, sig2, sig3; - __asm - { - mov eax, 1 - cpuid - mov sig1, eax - mov eax, 3 - cpuid - mov sig2, ecx - mov sig3, edx - } - // Then we convert the data to an readable string - sprintf(CPUInfo.strProcessorSerial, "%04lX-%04lX-%04lX-%04lX-%04lX-%04lX", sig1 >> 16, sig1 & 0xFFFF, sig3 >> 16, sig3 & 0xFFFF, sig2 >> 16, sig2 & 0xFFFF); - } - else - { - // If there's no serial number support we just mark put "No serial number" - strcpy(CPUInfo.strProcessorSerial, "No Processor Serial Number"); - } - - // Now we get the standard processor extensions - GetStandardProcessorExtensions(); - - // And finally the processor configuration (caches, TLBs, ...) and translate - // the data to readable strings - GetStandardProcessorConfiguration(); - TranslateProcessorConfiguration(); - - // At last... - return true; -} - -// bool CProcessor::AnalyzeAMDProcessor() -// ====================================== -// Private class function for analyzing an AMD processor -//////////////////////////////////////////////////////// -bool CProcessor::AnalyzeAMDProcessor() -{ - unsigned long eaxreg, ebxreg, ecxreg, edxreg; - - // First of all we check if the CPUID command is available - if (!CheckCPUIDPresence()) - return 0; - - // Now we get the CPUID standard level 0x00000001 - __asm - { - mov eax, 1 - cpuid - mov eaxreg, eax - mov ebxreg, ebx - mov edxreg, edx - } - - // Then we mask the model, family, stepping and type (AMD does not support brand id) - CPUInfo.uiStepping = eaxreg & 0xF; - CPUInfo.uiModel = (eaxreg >> 4) & 0xF; - CPUInfo.uiFamily = (eaxreg >> 8) & 0xF; - CPUInfo.uiType = (eaxreg >> 12) & 0x3; - - // After that, we translate the processor type (see CProcessor::AnalyzeIntelProcessor() - // for further comments on this) - switch (CPUInfo.uiType) - { - case 0: - strcpy(CPUInfo.strType, "Original OEM"); - strcpy(strCPUName, CPUInfo.strType); - strcat(strCPUName, " "); - break; - case 1: - strcpy(CPUInfo.strType, "Overdrive"); - strcpy(strCPUName, CPUInfo.strType); - strcat(strCPUName, " "); - break; - case 2: - strcpy(CPUInfo.strType, "Dual-capable"); - strcpy(strCPUName, CPUInfo.strType); - strcat(strCPUName, " "); - break; - case 3: - strcpy(CPUInfo.strType, "Reserved"); - break; - default: - strcpy(CPUInfo.strType, "Unknown"); - break; - } - - // Now we check if the processor supports the brand id string extended CPUID level - if (CPUInfo.MaxSupportedExtendedLevel >= 0x80000004) - { - // If it supports the extended CPUID level 0x80000004 we read the data - char tmp[52]; - memset(tmp, 0, sizeof(tmp)); - __asm - { - mov eax, 0x80000002 - cpuid - mov dword ptr [tmp], eax - mov dword ptr [tmp+4], ebx - mov dword ptr [tmp+8], ecx - mov dword ptr [tmp+12], edx - mov eax, 0x80000003 - cpuid - mov dword ptr [tmp+16], eax - mov dword ptr [tmp+20], ebx - mov dword ptr [tmp+24], ecx - mov dword ptr [tmp+28], edx - mov eax, 0x80000004 - cpuid - mov dword ptr [tmp+32], eax - mov dword ptr [tmp+36], ebx - mov dword ptr [tmp+40], ecx - mov dword ptr [tmp+44], edx - } - // And copy it to the brand id string - strcpy(CPUInfo.strBrandID, tmp); - } - else - { - // Or just tell there is no brand id string support - strcpy(CPUInfo.strBrandID, "Not supported"); - } - - // After that we translate the processor family - switch(CPUInfo.uiFamily) - { - case 4: // Family = 4: 486 (80486) or 5x86 (80486) processor family - switch (CPUInfo.uiModel) - { - case 3: // Thanks to AMD for this nice form of family - case 7: // detection.... *grmpf* - case 8: - case 9: - strcpy(CPUInfo.strFamily, "AMD 80486"); - break; - case 0xE: - case 0xF: - strcpy(CPUInfo.strFamily, "AMD 5x86"); - break; - default: - strcpy(CPUInfo.strFamily, "Unknown family"); - break; - } - break; - case 5: // Family = 5: K5 or K6 processor family - switch (CPUInfo.uiModel) - { - case 0: - case 1: - case 2: - case 3: - strcpy(CPUInfo.strFamily, "AMD K5"); - break; - case 6: - case 7: - case 8: - case 9: - strcpy(CPUInfo.strFamily, "AMD K6"); - break; - default: - strcpy(CPUInfo.strFamily, "Unknown family"); - break; - } - break; - case 6: // Family = 6: K7 (Athlon, ...) processor family - strcpy(CPUInfo.strFamily, "AMD K7"); - break; - default: // For security - strcpy(CPUInfo.strFamily, "Unknown family"); - break; - } - - // After the family detection we come to the specific processor model - // detection - switch (CPUInfo.uiFamily) - { - case 4: // Family = 4: 486 (80486) or 5x85 (80486) processor family - switch (CPUInfo.uiModel) - { - case 3: // Model = 3: 80486 DX2 - strcpy(CPUInfo.strModel, "AMD 80486 DX2"); - strcat(strCPUName, "AMD 80486 DX2"); - break; - case 7: // Model = 7: 80486 write-back enhanced DX2 - strcpy(CPUInfo.strModel, "AMD 80486 write-back enhanced DX2"); - strcat(strCPUName, "AMD 80486 write-back enhanced DX2"); - break; - case 8: // Model = 8: 80486 DX4 - strcpy(CPUInfo.strModel, "AMD 80486 DX4"); - strcat(strCPUName, "AMD 80486 DX4"); - break; - case 9: // Model = 9: 80486 write-back enhanced DX4 - strcpy(CPUInfo.strModel, "AMD 80486 write-back enhanced DX4"); - strcat(strCPUName, "AMD 80486 write-back enhanced DX4"); - break; - case 0xE: // Model = 0xE: 5x86 - strcpy(CPUInfo.strModel, "AMD 5x86"); - strcat(strCPUName, "AMD 5x86"); - break; - case 0xF: // Model = 0xF: 5x86 write-back enhanced (oh my god.....) - strcpy(CPUInfo.strModel, "AMD 5x86 write-back enhanced"); - strcat(strCPUName, "AMD 5x86 write-back enhanced"); - break; - default: // ... - strcpy(CPUInfo.strModel, "Unknown AMD 80486 or 5x86 model"); - strcat(strCPUName, "AMD 80486 or 5x86 (Unknown model)"); - break; - } - break; - case 5: // Family = 5: K5 / K6 processor family - switch (CPUInfo.uiModel) - { - case 0: // Model = 0: K5 SSA 5 (Pentium Rating *ggg* 75, 90 and 100 Mhz) - strcpy(CPUInfo.strModel, "AMD K5 SSA5 (PR75, PR90, PR100)"); - strcat(strCPUName, "AMD K5 SSA5 (PR75, PR90, PR100)"); - break; - case 1: // Model = 1: K5 5k86 (PR 120 and 133 MHz) - strcpy(CPUInfo.strModel, "AMD K5 5k86 (PR120, PR133)"); - strcat(strCPUName, "AMD K5 5k86 (PR120, PR133)"); - break; - case 2: // Model = 2: K5 5k86 (PR 166 MHz) - strcpy(CPUInfo.strModel, "AMD K5 5k86 (PR166)"); - strcat(strCPUName, "AMD K5 5k86 (PR166)"); - break; - case 3: // Model = 3: K5 5k86 (PR 200 MHz) - strcpy(CPUInfo.strModel, "AMD K5 5k86 (PR200)"); - strcat(strCPUName, "AMD K5 5k86 (PR200)"); - break; - case 6: // Model = 6: K6 - strcpy(CPUInfo.strModel, "AMD K6 (0.30 µm)"); - strcat(strCPUName, "AMD K6 (0.30 µm)"); - break; - case 7: // Model = 7: K6 (0.25 µm) - strcpy(CPUInfo.strModel, "AMD K6 (0.25 µm)"); - strcat(strCPUName, "AMD K6 (0.25 µm)"); - break; - case 8: // Model = 8: K6-2 - strcpy(CPUInfo.strModel, "AMD K6-2"); - strcat(strCPUName, "AMD K6-2"); - break; - case 9: // Model = 9: K6-III - strcpy(CPUInfo.strModel, "AMD K6-III"); - strcat(strCPUName, "AMD K6-III"); - break; - case 0xD: // Model = 0xD: K6-2+ / K6-III+ - strcpy(CPUInfo.strModel, "AMD K6-2+ or K6-III+ (0.18 µm)"); - strcat(strCPUName, "AMD K6-2+ or K6-III+ (0.18 µm)"); - break; - default: // ... - strcpy(CPUInfo.strModel, "Unknown AMD K5 or K6 model"); - strcat(strCPUName, "AMD K5 or K6 (Unknown model)"); - break; - } - break; - case 6: // Family = 6: K7 processor family (AMDs first good processors) - switch (CPUInfo.uiModel) - { - case 1: // Athlon - strcpy(CPUInfo.strModel, "AMD Athlon (0.25 µm)"); - strcat(strCPUName, "AMD Athlon (0.25 µm)"); - break; - case 2: // Athlon (0.18 µm) - strcpy(CPUInfo.strModel, "AMD Athlon (0.18 µm)"); - strcat(strCPUName, "AMD Athlon (0.18 µm)"); - break; - case 3: // Duron (Spitfire core) - strcpy(CPUInfo.strModel, "AMD Duron (Spitfire)"); - strcat(strCPUName, "AMD Duron (Spitfire core)"); - break; - case 4: // Athlon (Thunderbird core) - strcpy(CPUInfo.strModel, "AMD Athlon (Thunderbird)"); - strcat(strCPUName, "AMD Athlon (Thunderbird core)"); - break; - case 6: // Athlon MP / Mobile Athlon (Palomino core) - strcpy(CPUInfo.strModel, "AMD Athlon MP/Mobile Athlon (Palomino)"); - strcat(strCPUName, "AMD Athlon MP/Mobile Athlon (Palomino core)"); - break; - case 7: // Mobile Duron (Morgan core) - strcpy(CPUInfo.strModel, "AMD Mobile Duron (Morgan)"); - strcat(strCPUName, "AMD Mobile Duron (Morgan core)"); - break; - default: // ... - strcpy(CPUInfo.strModel, "Unknown AMD K7 model"); - strcat(strCPUName, "AMD K7 (Unknown model)"); - break; - } - break; - default: // ... - strcpy(CPUInfo.strModel, "Unknown AMD model"); - strcat(strCPUName, "AMD (Unknown model)"); - break; - } - - // Now we read the standard processor extension that are stored in the same - // way the Intel standard extensions are - GetStandardProcessorExtensions(); - - // Then we check if theres an extended CPUID level support - if (CPUInfo.MaxSupportedExtendedLevel >= 0x80000001) - { - // If we can access the extended CPUID level 0x80000001 we get the - // edx register - __asm - { - mov eax, 0x80000001 - cpuid - mov edxreg, edx - } - - // Now we can mask some AMD specific cpu extensions - CPUInfo._Ext.EMMX_MultimediaExtensions = CheckBit(edxreg, 22); - CPUInfo._Ext.AA64_AMD64BitArchitecture = CheckBit(edxreg, 29); - CPUInfo._Ext._E3DNOW_InstructionExtensions = CheckBit(edxreg, 30); - CPUInfo._Ext._3DNOW_InstructionExtensions = CheckBit(edxreg, 31); - } - - // After that we check if the processor supports the ext. CPUID level - // 0x80000006 - if (CPUInfo.MaxSupportedExtendedLevel >= 0x80000006) - { - // If it's present, we read it out - __asm - { - mov eax, 0x80000005 - cpuid - mov eaxreg, eax - mov ebxreg, ebx - mov ecxreg, ecx - mov edxreg, edx - } - - // Then we mask the L1 Data TLB information - if ((ebxreg >> 16) && (eaxreg >> 16)) - { - CPUInfo._Data.bPresent = true; - strcpy(CPUInfo._Data.strPageSize, "4 KB / 2 MB / 4MB"); - CPUInfo._Data.uiAssociativeWays = (eaxreg >> 24) & 0xFF; - CPUInfo._Data.uiEntries = (eaxreg >> 16) & 0xFF; - } - else if (eaxreg >> 16) - { - CPUInfo._Data.bPresent = true; - strcpy(CPUInfo._Data.strPageSize, "2 MB / 4MB"); - CPUInfo._Data.uiAssociativeWays = (eaxreg >> 24) & 0xFF; - CPUInfo._Data.uiEntries = (eaxreg >> 16) & 0xFF; - } - else if (ebxreg >> 16) - { - CPUInfo._Data.bPresent = true; - strcpy(CPUInfo._Data.strPageSize, "4 KB"); - CPUInfo._Data.uiAssociativeWays = (ebxreg >> 24) & 0xFF; - CPUInfo._Data.uiEntries = (ebxreg >> 16) & 0xFF; - } - if (CPUInfo._Data.uiAssociativeWays == 0xFF) - CPUInfo._Data.uiAssociativeWays = (unsigned int) -1; - - // Now the L1 Instruction/Code TLB information - if ((ebxreg & 0xFFFF) && (eaxreg & 0xFFFF)) - { - CPUInfo._Instruction.bPresent = true; - strcpy(CPUInfo._Instruction.strPageSize, "4 KB / 2 MB / 4MB"); - CPUInfo._Instruction.uiAssociativeWays = (eaxreg >> 8) & 0xFF; - CPUInfo._Instruction.uiEntries = eaxreg & 0xFF; - } - else if (eaxreg & 0xFFFF) - { - CPUInfo._Instruction.bPresent = true; - strcpy(CPUInfo._Instruction.strPageSize, "2 MB / 4MB"); - CPUInfo._Instruction.uiAssociativeWays = (eaxreg >> 8) & 0xFF; - CPUInfo._Instruction.uiEntries = eaxreg & 0xFF; - } - else if (ebxreg & 0xFFFF) - { - CPUInfo._Instruction.bPresent = true; - strcpy(CPUInfo._Instruction.strPageSize, "4 KB"); - CPUInfo._Instruction.uiAssociativeWays = (ebxreg >> 8) & 0xFF; - CPUInfo._Instruction.uiEntries = ebxreg & 0xFF; - } - if (CPUInfo._Instruction.uiAssociativeWays == 0xFF) - CPUInfo._Instruction.uiAssociativeWays = (unsigned int) -1; - - // Then we read the L1 data cache information - if ((ecxreg >> 24) > 0) - { - CPUInfo._L1.Data.bPresent = true; - sprintf(CPUInfo._L1.Data.strSize, "%d KB", ecxreg >> 24); - CPUInfo._L1.Data.uiAssociativeWays = (ecxreg >> 15) & 0xFF; - CPUInfo._L1.Data.uiLineSize = ecxreg & 0xFF; - } - // After that we read the L2 instruction/code cache information - if ((edxreg >> 24) > 0) - { - CPUInfo._L1.Instruction.bPresent = true; - sprintf(CPUInfo._L1.Instruction.strSize, "%d KB", edxreg >> 24); - CPUInfo._L1.Instruction.uiAssociativeWays = (edxreg >> 15) & 0xFF; - CPUInfo._L1.Instruction.uiLineSize = edxreg & 0xFF; - } - - // Note: I'm not absolutely sure that the L1 page size code (the - // 'if/else if/else if' structs above) really detects the real page - // size for the TLB. Somebody should check it.... - - // Now we read the ext. CPUID level 0x80000006 - __asm - { - mov eax, 0x80000006 - cpuid - mov eaxreg, eax - mov ebxreg, ebx - mov ecxreg, ecx - } - - // We only mask the unified L2 cache masks (never heard of an - // L2 cache that is divided in data and code parts) - if (((ecxreg >> 12) & 0xF) > 0) - { - CPUInfo._L2.bPresent = true; - sprintf(CPUInfo._L2.strSize, "%d KB", ecxreg >> 16); - switch ((ecxreg >> 12) & 0xF) - { - case 1: - CPUInfo._L2.uiAssociativeWays = 1; - break; - case 2: - CPUInfo._L2.uiAssociativeWays = 2; - break; - case 4: - CPUInfo._L2.uiAssociativeWays = 4; - break; - case 6: - CPUInfo._L2.uiAssociativeWays = 8; - break; - case 8: - CPUInfo._L2.uiAssociativeWays = 16; - break; - case 0xF: - CPUInfo._L2.uiAssociativeWays = (unsigned int) -1; - break; - default: - CPUInfo._L2.uiAssociativeWays = 0; - break; - } - CPUInfo._L2.uiLineSize = ecxreg & 0xFF; - } - } - else - { - // If we could not detect the ext. CPUID level 0x80000006 we - // try to read the standard processor configuration. - GetStandardProcessorConfiguration(); - } - // After reading we translate the configuration to strings - TranslateProcessorConfiguration(); - - // And finally exit - return true; -} - -// bool CProcessor::AnalyzeUnknownProcessor() -// ========================================== -// Private class function to analyze an unknown (No Intel or AMD) processor -/////////////////////////////////////////////////////////////////////////// -bool CProcessor::AnalyzeUnknownProcessor() -{ - unsigned long eaxreg, ebxreg; - - // We check if the CPUID command is available - if (!CheckCPUIDPresence()) - return false; - - // First of all we read the standard CPUID level 0x00000001 - // This level should be available on every x86-processor clone - __asm - { - mov eax, 1 - cpuid - mov eaxreg, eax - mov ebxreg, ebx - } - // Then we mask the processor model, family, type and stepping - CPUInfo.uiStepping = eaxreg & 0xF; - CPUInfo.uiModel = (eaxreg >> 4) & 0xF; - CPUInfo.uiFamily = (eaxreg >> 8) & 0xF; - CPUInfo.uiType = (eaxreg >> 12) & 0x3; - - // To have complete information we also mask the brand id - CPUInfo.uiBrandID = ebxreg & 0xF; - - // Then we get the standard processor extensions - GetStandardProcessorExtensions(); - - // Now we mark everything we do not know as unknown - strcpy(strCPUName, "Unknown"); - - strcpy(CPUInfo._Data.strTLB, "Unknown"); - strcpy(CPUInfo._Instruction.strTLB, "Unknown"); - - strcpy(CPUInfo._Trace.strCache, "Unknown"); - strcpy(CPUInfo._L1.Data.strCache, "Unknown"); - strcpy(CPUInfo._L1.Instruction.strCache, "Unknown"); - strcpy(CPUInfo._L2.strCache, "Unknown"); - strcpy(CPUInfo._L3.strCache, "Unknown"); - - strcpy(CPUInfo.strProcessorSerial, "Unknown / Not supported"); - - // For the family, model and brand id we can only print the numeric value - sprintf(CPUInfo.strBrandID, "Brand-ID number %d", CPUInfo.uiBrandID); - sprintf(CPUInfo.strFamily, "Family number %d", CPUInfo.uiFamily); - sprintf(CPUInfo.strModel, "Model number %d", CPUInfo.uiModel); - - // Nevertheless we can determine the processor type - switch (CPUInfo.uiType) - { - case 0: - strcpy(CPUInfo.strType, "Original OEM"); - break; - case 1: - strcpy(CPUInfo.strType, "Overdrive"); - break; - case 2: - strcpy(CPUInfo.strType, "Dual-capable"); - break; - case 3: - strcpy(CPUInfo.strType, "Reserved"); - break; - default: - strcpy(CPUInfo.strType, "Unknown"); - break; - } - - // And thats it - return true; -} - -// bool CProcessor::CheckCPUIDPresence() -// ===================================== -// This function checks if the CPUID command is available on the current -// processor -//////////////////////////////////////////////////////////////////////// -bool CProcessor::CheckCPUIDPresence() -{ - unsigned long BitChanged; - - // We've to check if we can toggle the flag register bit 21 - // If we can't the processor does not support the CPUID command - __asm - { - pushfd - pop eax - mov ebx, eax - xor eax, 0x00200000 - push eax - popfd - pushfd - pop eax - xor eax,ebx - mov BitChanged, eax - } - - return ((BitChanged) ? true : false); -} - -// void CProcessor::DecodeProcessorConfiguration(unsigned int cfg) -// =============================================================== -// This function (or switch ?!) just translates a one-byte processor configuration -// byte to understandable values -////////////////////////////////////////////////////////////////////////////////// -void CProcessor::DecodeProcessorConfiguration(unsigned int cfg) -{ - // First we ensure that there's only one single byte - cfg &= 0xFF; - - // Then we do a big switch - switch(cfg) - { - case 0: // cfg = 0: Unused - break; - case 0x1: // cfg = 0x1: code TLB present, 4 KB pages, 4 ways, 32 entries - CPUInfo._Instruction.bPresent = true; - strcpy(CPUInfo._Instruction.strPageSize, "4 KB"); - CPUInfo._Instruction.uiAssociativeWays = 4; - CPUInfo._Instruction.uiEntries = 32; - break; - case 0x2: // cfg = 0x2: code TLB present, 4 MB pages, fully associative, 2 entries - CPUInfo._Instruction.bPresent = true; - strcpy(CPUInfo._Instruction.strPageSize, "4 MB"); - CPUInfo._Instruction.uiAssociativeWays = 4; - CPUInfo._Instruction.uiEntries = 2; - break; - case 0x3: // cfg = 0x3: data TLB present, 4 KB pages, 4 ways, 64 entries - CPUInfo._Data.bPresent = true; - strcpy(CPUInfo._Data.strPageSize, "4 KB"); - CPUInfo._Data.uiAssociativeWays = 4; - CPUInfo._Data.uiEntries = 64; - break; - case 0x4: // cfg = 0x4: data TLB present, 4 MB pages, 4 ways, 8 entries - CPUInfo._Data.bPresent = true; - strcpy(CPUInfo._Data.strPageSize, "4 MB"); - CPUInfo._Data.uiAssociativeWays = 4; - CPUInfo._Data.uiEntries = 8; - break; - case 0x6: // cfg = 0x6: code L1 cache present, 8 KB, 4 ways, 32 byte lines - CPUInfo._L1.Instruction.bPresent = true; - strcpy(CPUInfo._L1.Instruction.strSize, "8 KB"); - CPUInfo._L1.Instruction.uiAssociativeWays = 4; - CPUInfo._L1.Instruction.uiLineSize = 32; - break; - case 0x8: // cfg = 0x8: code L1 cache present, 16 KB, 4 ways, 32 byte lines - CPUInfo._L1.Instruction.bPresent = true; - strcpy(CPUInfo._L1.Instruction.strSize, "16 KB"); - CPUInfo._L1.Instruction.uiAssociativeWays = 4; - CPUInfo._L1.Instruction.uiLineSize = 32; - break; - case 0xA: // cfg = 0xA: data L1 cache present, 8 KB, 2 ways, 32 byte lines - CPUInfo._L1.Data.bPresent = true; - strcpy(CPUInfo._L1.Data.strSize, "8 KB"); - CPUInfo._L1.Data.uiAssociativeWays = 2; - CPUInfo._L1.Data.uiLineSize = 32; - break; - case 0xC: // cfg = 0xC: data L1 cache present, 16 KB, 4 ways, 32 byte lines - CPUInfo._L1.Data.bPresent = true; - strcpy(CPUInfo._L1.Data.strSize, "16 KB"); - CPUInfo._L1.Data.uiAssociativeWays = 4; - CPUInfo._L1.Data.uiLineSize = 32; - break; - case 0x22: // cfg = 0x22: code and data L3 cache present, 512 KB, 4 ways, 64 byte lines, sectored - CPUInfo._L3.bPresent = true; - strcpy(CPUInfo._L3.strSize, "512 KB"); - CPUInfo._L3.uiAssociativeWays = 4; - CPUInfo._L3.uiLineSize = 64; - CPUInfo._L3.bSectored = true; - break; - case 0x23: // cfg = 0x23: code and data L3 cache present, 1024 KB, 8 ways, 64 byte lines, sectored - CPUInfo._L3.bPresent = true; - strcpy(CPUInfo._L3.strSize, "1024 KB"); - CPUInfo._L3.uiAssociativeWays = 8; - CPUInfo._L3.uiLineSize = 64; - CPUInfo._L3.bSectored = true; - break; - case 0x25: // cfg = 0x25: code and data L3 cache present, 2048 KB, 8 ways, 64 byte lines, sectored - CPUInfo._L3.bPresent = true; - strcpy(CPUInfo._L3.strSize, "2048 KB"); - CPUInfo._L3.uiAssociativeWays = 8; - CPUInfo._L3.uiLineSize = 64; - CPUInfo._L3.bSectored = true; - break; - case 0x29: // cfg = 0x29: code and data L3 cache present, 4096 KB, 8 ways, 64 byte lines, sectored - CPUInfo._L3.bPresent = true; - strcpy(CPUInfo._L3.strSize, "4096 KB"); - CPUInfo._L3.uiAssociativeWays = 8; - CPUInfo._L3.uiLineSize = 64; - CPUInfo._L3.bSectored = true; - break; - case 0x40: // cfg = 0x40: no integrated L2 cache (P6 core) or L3 cache (P4 core) - break; - case 0x41: // cfg = 0x41: code and data L2 cache present, 128 KB, 4 ways, 32 byte lines - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "128 KB"); - CPUInfo._L2.uiAssociativeWays = 4; - CPUInfo._L2.uiLineSize = 32; - break; - case 0x42: // cfg = 0x42: code and data L2 cache present, 256 KB, 4 ways, 32 byte lines - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "256 KB"); - CPUInfo._L2.uiAssociativeWays = 4; - CPUInfo._L2.uiLineSize = 32; - break; - case 0x43: // cfg = 0x43: code and data L2 cache present, 512 KB, 4 ways, 32 byte lines - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "512 KB"); - CPUInfo._L2.uiAssociativeWays = 4; - CPUInfo._L2.uiLineSize = 32; - break; - case 0x44: // cfg = 0x44: code and data L2 cache present, 1024 KB, 4 ways, 32 byte lines - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "1 MB"); - CPUInfo._L2.uiAssociativeWays = 4; - CPUInfo._L2.uiLineSize = 32; - break; - case 0x45: // cfg = 0x45: code and data L2 cache present, 2048 KB, 4 ways, 32 byte lines - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "2 MB"); - CPUInfo._L2.uiAssociativeWays = 4; - CPUInfo._L2.uiLineSize = 32; - break; - case 0x50: // cfg = 0x50: code TLB present, 4 KB / 4 MB / 2 MB pages, fully associative, 64 entries - CPUInfo._Instruction.bPresent = true; - strcpy(CPUInfo._Instruction.strPageSize, "4 KB / 2 MB / 4 MB"); - CPUInfo._Instruction.uiAssociativeWays = (unsigned int) -1; - CPUInfo._Instruction.uiEntries = 64; - break; - case 0x51: // cfg = 0x51: code TLB present, 4 KB / 4 MB / 2 MB pages, fully associative, 128 entries - CPUInfo._Instruction.bPresent = true; - strcpy(CPUInfo._Instruction.strPageSize, "4 KB / 2 MB / 4 MB"); - CPUInfo._Instruction.uiAssociativeWays = (unsigned int) -1; - CPUInfo._Instruction.uiEntries = 128; - break; - case 0x52: // cfg = 0x52: code TLB present, 4 KB / 4 MB / 2 MB pages, fully associative, 256 entries - CPUInfo._Instruction.bPresent = true; - strcpy(CPUInfo._Instruction.strPageSize, "4 KB / 2 MB / 4 MB"); - CPUInfo._Instruction.uiAssociativeWays = (unsigned int) -1; - CPUInfo._Instruction.uiEntries = 256; - break; - case 0x5B: // cfg = 0x5B: data TLB present, 4 KB / 4 MB pages, fully associative, 64 entries - CPUInfo._Data.bPresent = true; - strcpy(CPUInfo._Data.strPageSize, "4 KB / 4 MB"); - CPUInfo._Data.uiAssociativeWays = (unsigned int) -1; - CPUInfo._Data.uiEntries = 64; - break; - case 0x5C: // cfg = 0x5C: data TLB present, 4 KB / 4 MB pages, fully associative, 128 entries - CPUInfo._Data.bPresent = true; - strcpy(CPUInfo._Data.strPageSize, "4 KB / 4 MB"); - CPUInfo._Data.uiAssociativeWays = (unsigned int) -1; - CPUInfo._Data.uiEntries = 128; - break; - case 0x5d: // cfg = 0x5D: data TLB present, 4 KB / 4 MB pages, fully associative, 256 entries - CPUInfo._Data.bPresent = true; - strcpy(CPUInfo._Data.strPageSize, "4 KB / 4 MB"); - CPUInfo._Data.uiAssociativeWays = (unsigned int) -1; - CPUInfo._Data.uiEntries = 256; - break; - case 0x66: // cfg = 0x66: data L1 cache present, 8 KB, 4 ways, 64 byte lines, sectored - CPUInfo._L1.Data.bPresent = true; - strcpy(CPUInfo._L1.Data.strSize, "8 KB"); - CPUInfo._L1.Data.uiAssociativeWays = 4; - CPUInfo._L1.Data.uiLineSize = 64; - break; - case 0x67: // cfg = 0x67: data L1 cache present, 16 KB, 4 ways, 64 byte lines, sectored - CPUInfo._L1.Data.bPresent = true; - strcpy(CPUInfo._L1.Data.strSize, "16 KB"); - CPUInfo._L1.Data.uiAssociativeWays = 4; - CPUInfo._L1.Data.uiLineSize = 64; - break; - case 0x68: // cfg = 0x68: data L1 cache present, 32 KB, 4 ways, 64 byte lines, sectored - CPUInfo._L1.Data.bPresent = true; - strcpy(CPUInfo._L1.Data.strSize, "32 KB"); - CPUInfo._L1.Data.uiAssociativeWays = 4; - CPUInfo._L1.Data.uiLineSize = 64; - break; - case 0x70: // cfg = 0x70: trace L1 cache present, 12 KµOPs, 4 ways - CPUInfo._Trace.bPresent = true; - strcpy(CPUInfo._Trace.strSize, "12 K-micro-ops"); - CPUInfo._Trace.uiAssociativeWays = 4; - break; - case 0x71: // cfg = 0x71: trace L1 cache present, 16 KµOPs, 4 ways - CPUInfo._Trace.bPresent = true; - strcpy(CPUInfo._Trace.strSize, "16 K-micro-ops"); - CPUInfo._Trace.uiAssociativeWays = 4; - break; - case 0x72: // cfg = 0x72: trace L1 cache present, 32 KµOPs, 4 ways - CPUInfo._Trace.bPresent = true; - strcpy(CPUInfo._Trace.strSize, "32 K-micro-ops"); - CPUInfo._Trace.uiAssociativeWays = 4; - break; - case 0x79: // cfg = 0x79: code and data L2 cache present, 128 KB, 8 ways, 64 byte lines, sectored - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "128 KB"); - CPUInfo._L2.uiAssociativeWays = 8; - CPUInfo._L2.uiLineSize = 64; - CPUInfo._L2.bSectored = true; - break; - case 0x7A: // cfg = 0x7A: code and data L2 cache present, 256 KB, 8 ways, 64 byte lines, sectored - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "256 KB"); - CPUInfo._L2.uiAssociativeWays = 8; - CPUInfo._L2.uiLineSize = 64; - CPUInfo._L2.bSectored = true; - break; - case 0x7B: // cfg = 0x7B: code and data L2 cache present, 512 KB, 8 ways, 64 byte lines, sectored - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "512 KB"); - CPUInfo._L2.uiAssociativeWays = 8; - CPUInfo._L2.uiLineSize = 64; - CPUInfo._L2.bSectored = true; - break; - case 0x7C: // cfg = 0x7C: code and data L2 cache present, 1024 KB, 8 ways, 64 byte lines, sectored - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "1 MB"); - CPUInfo._L2.uiAssociativeWays = 8; - CPUInfo._L2.uiLineSize = 64; - CPUInfo._L2.bSectored = true; - break; - case 0x81: // cfg = 0x81: code and data L2 cache present, 128 KB, 8 ways, 32 byte lines - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "128 KB"); - CPUInfo._L2.uiAssociativeWays = 8; - CPUInfo._L2.uiLineSize = 32; - break; - case 0x82: // cfg = 0x82: code and data L2 cache present, 256 KB, 8 ways, 32 byte lines - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "256 KB"); - CPUInfo._L2.uiAssociativeWays = 8; - CPUInfo._L2.uiLineSize = 32; - break; - case 0x83: // cfg = 0x83: code and data L2 cache present, 512 KB, 8 ways, 32 byte lines - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "512 KB"); - CPUInfo._L2.uiAssociativeWays = 8; - CPUInfo._L2.uiLineSize = 32; - break; - case 0x84: // cfg = 0x84: code and data L2 cache present, 1024 KB, 8 ways, 32 byte lines - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "1 MB"); - CPUInfo._L2.uiAssociativeWays = 8; - CPUInfo._L2.uiLineSize = 32; - break; - case 0x85: // cfg = 0x85: code and data L2 cache present, 2048 KB, 8 ways, 32 byte lines - CPUInfo._L2.bPresent = true; - strcpy(CPUInfo._L2.strSize, "2 MB"); - CPUInfo._L2.uiAssociativeWays = 8; - CPUInfo._L2.uiLineSize = 32; - break; - } -} - -__forceinline static char *TranslateAssociativeWays(unsigned int uiWays, char *buf) -{ - // We define 0xFFFFFFFF (= -1) as fully associative - if (uiWays == ((unsigned int) -1)) - strcpy(buf, "fully associative"); - else - { - if (uiWays == 1) // A one way associative cache is just direct mapped - strcpy(buf, "direct mapped"); - else if (uiWays == 0) // This should not happen... - strcpy(buf, "unknown associative ways"); - else // The x-way associative cache - sprintf(buf, "%d ways associative", uiWays); - } - // To ease the function use we return the buffer - return buf; -} -__forceinline static void TranslateTLB(ProcessorTLB *tlb) -{ - char buf[64]; - - // We just check if the TLB is present - if (tlb->bPresent) - sprintf(tlb->strTLB, "%s page size, %s, %d entries", tlb->strPageSize, TranslateAssociativeWays(tlb->uiAssociativeWays, buf), tlb->uiEntries); - else - strcpy(tlb->strTLB, "Not present"); -} -__forceinline static void TranslateCache(ProcessorCache *cache) -{ - char buf[64]; - - // We just check if the cache is present - if (cache->bPresent) - { - // If present we construct the string - sprintf(cache->strCache, "%s cache size, %s, %d bytes line size", cache->strSize, TranslateAssociativeWays(cache->uiAssociativeWays, buf), cache->uiLineSize); - if (cache->bSectored) - strcat(cache->strCache, ", sectored"); - } - else - { - // Else we just say "Not present" - strcpy(cache->strCache, "Not present"); - } -} - -// void CProcessor::TranslateProcessorConfiguration() -// ================================================== -// Private class function to translate the processor configuration values -// to strings -///////////////////////////////////////////////////////////////////////// -void CProcessor::TranslateProcessorConfiguration() -{ - // We just call the small functions defined above - TranslateTLB(&CPUInfo._Data); - TranslateTLB(&CPUInfo._Instruction); - - TranslateCache(&CPUInfo._Trace); - - TranslateCache(&CPUInfo._L1.Instruction); - TranslateCache(&CPUInfo._L1.Data); - TranslateCache(&CPUInfo._L2); - TranslateCache(&CPUInfo._L3); -} - -// void CProcessor::GetStandardProcessorConfiguration() -// ==================================================== -// Private class function to read the standard processor configuration -////////////////////////////////////////////////////////////////////// -void CProcessor::GetStandardProcessorConfiguration() -{ - unsigned long eaxreg, ebxreg, ecxreg, edxreg; - - // We check if the CPUID function is available - if (!CheckCPUIDPresence()) - return; - - // First we check if the processor supports the standard - // CPUID level 0x00000002 - if (CPUInfo.MaxSupportedLevel >= 2) - { - // Now we go read the std. CPUID level 0x00000002 the first time - unsigned long count, num = 255; - for (count = 0; count < num; count++) - { - __asm - { - mov eax, 2 - cpuid - mov eaxreg, eax - mov ebxreg, ebx - mov ecxreg, ecx - mov edxreg, edx - } - // We have to repeat this reading for 'num' times - num = eaxreg & 0xFF; - - // Then we call the big decode switch function - DecodeProcessorConfiguration(eaxreg >> 8); - DecodeProcessorConfiguration(eaxreg >> 16); - DecodeProcessorConfiguration(eaxreg >> 24); - - // If ebx contains additional data we also decode it - if ((ebxreg & 0x80000000) == 0) - { - DecodeProcessorConfiguration(ebxreg); - DecodeProcessorConfiguration(ebxreg >> 8); - DecodeProcessorConfiguration(ebxreg >> 16); - DecodeProcessorConfiguration(ebxreg >> 24); - } - // And also the ecx register - if ((ecxreg & 0x80000000) == 0) - { - DecodeProcessorConfiguration(ecxreg); - DecodeProcessorConfiguration(ecxreg >> 8); - DecodeProcessorConfiguration(ecxreg >> 16); - DecodeProcessorConfiguration(ecxreg >> 24); - } - // At last the edx processor register - if ((edxreg & 0x80000000) == 0) - { - DecodeProcessorConfiguration(edxreg); - DecodeProcessorConfiguration(edxreg >> 8); - DecodeProcessorConfiguration(edxreg >> 16); - DecodeProcessorConfiguration(edxreg >> 24); - } - } - } -} - -// void CProcessor::GetStandardProcessorExtensions() -// ================================================= -// Private class function to read the standard processor extensions -/////////////////////////////////////////////////////////////////// -void CProcessor::GetStandardProcessorExtensions() -{ - unsigned long ebxreg, edxreg; - - // We check if the CPUID command is available - if (!CheckCPUIDPresence()) - return; - // We just get the standard CPUID level 0x00000001 which should be - // available on every x86 processor - __asm - { - mov eax, 1 - cpuid - mov ebxreg, ebx - mov edxreg, edx - } - - // Then we mask some bits - CPUInfo._Ext.FPU_FloatingPointUnit = CheckBit(edxreg, 0); - CPUInfo._Ext.VME_Virtual8086ModeEnhancements = CheckBit(edxreg, 1); - CPUInfo._Ext.DE_DebuggingExtensions = CheckBit(edxreg, 2); - CPUInfo._Ext.PSE_PageSizeExtensions = CheckBit(edxreg, 3); - CPUInfo._Ext.TSC_TimeStampCounter = CheckBit(edxreg, 4); - CPUInfo._Ext.MSR_ModelSpecificRegisters = CheckBit(edxreg, 5); - CPUInfo._Ext.PAE_PhysicalAddressExtension = CheckBit(edxreg, 6); - CPUInfo._Ext.MCE_MachineCheckException = CheckBit(edxreg, 7); - CPUInfo._Ext.CX8_COMPXCHG8B_Instruction = CheckBit(edxreg, 8); - CPUInfo._Ext.APIC_AdvancedProgrammableInterruptController = CheckBit(edxreg, 9); - CPUInfo._Ext.APIC_ID = (ebxreg >> 24) & 0xFF; - CPUInfo._Ext.SEP_FastSystemCall = CheckBit(edxreg, 11); - CPUInfo._Ext.MTRR_MemoryTypeRangeRegisters = CheckBit(edxreg, 12); - CPUInfo._Ext.PGE_PTE_GlobalFlag = CheckBit(edxreg, 13); - CPUInfo._Ext.MCA_MachineCheckArchitecture = CheckBit(edxreg, 14); - CPUInfo._Ext.CMOV_ConditionalMoveAndCompareInstructions = CheckBit(edxreg, 15); - CPUInfo._Ext.FGPAT_PageAttributeTable = CheckBit(edxreg, 16); - CPUInfo._Ext.PSE36_36bitPageSizeExtension = CheckBit(edxreg, 17); - CPUInfo._Ext.PN_ProcessorSerialNumber = CheckBit(edxreg, 18); - CPUInfo._Ext.CLFSH_CFLUSH_Instruction = CheckBit(edxreg, 19); - CPUInfo._Ext.CLFLUSH_InstructionCacheLineSize = (ebxreg >> 8) & 0xFF; - CPUInfo._Ext.DS_DebugStore = CheckBit(edxreg, 21); - CPUInfo._Ext.ACPI_ThermalMonitorAndClockControl = CheckBit(edxreg, 22); - CPUInfo._Ext.MMX_MultimediaExtensions = CheckBit(edxreg, 23); - CPUInfo._Ext.FXSR_FastStreamingSIMD_ExtensionsSaveRestore = CheckBit(edxreg, 24); - CPUInfo._Ext.SSE_StreamingSIMD_Extensions = CheckBit(edxreg, 25); - CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = CheckBit(edxreg, 26); - CPUInfo._Ext.SS_SelfSnoop = CheckBit(edxreg, 27); - CPUInfo._Ext.HT_HyperThreading = CheckBit(edxreg, 28); - CPUInfo._Ext.HT_HyterThreadingSiblings = (ebxreg >> 16) & 0xFF; - CPUInfo._Ext.TM_ThermalMonitor = CheckBit(edxreg, 29); - CPUInfo._Ext.IA64_Intel64BitArchitecture = CheckBit(edxreg, 30); -} - -// const ProcessorInfo *CProcessor::GetCPUInfo() -// ============================================= -// Calls all the other detection function to create an detailed -// processor information -/////////////////////////////////////////////////////////////// -const ProcessorInfo *CProcessor::GetCPUInfo() -{ - unsigned long eaxreg, ebxreg, ecxreg, edxreg; - - // First of all we check if the CPUID command is available - if (!CheckCPUIDPresence()) - return NULL; - - // We read the standard CPUID level 0x00000000 which should - // be available on every x86 processor - __asm - { - mov eax, 0 - cpuid - mov eaxreg, eax - mov ebxreg, ebx - mov edxreg, edx - mov ecxreg, ecx - } - // Then we connect the single register values to the vendor string - *((unsigned long *) CPUInfo.strVendor) = ebxreg; - *((unsigned long *) (CPUInfo.strVendor+4)) = edxreg; - *((unsigned long *) (CPUInfo.strVendor+8)) = ecxreg; - - // We can also read the max. supported standard CPUID level - CPUInfo.MaxSupportedLevel = eaxreg & 0xFFFF; - - // Then we read the ext. CPUID level 0x80000000 - __asm - { - mov eax, 0x80000000 - cpuid - mov eaxreg, eax - } - // ...to check the max. supportted extended CPUID level - CPUInfo.MaxSupportedExtendedLevel = eaxreg; - - // Then we switch to the specific processor vendors - switch (ebxreg) - { - case 0x756E6547: // GenuineIntel - AnalyzeIntelProcessor(); - break; - case 0x68747541: // AuthenticAMD - AnalyzeAMDProcessor(); - break; - case 0x69727943: // CyrixInstead - // I really do not know anyone owning such a piece of crab - // So we analyze it as an unknown processor *ggggg* - default: - AnalyzeUnknownProcessor(); - break; - } - - // After all we return the class CPUInfo member var - return (&CPUInfo); -} - -// bool CProcessor::CPUInfoToText(char *strBuffer, unsigned int uiMaxLen) -// ====================================================================== -// Gets the frequency and processor information and writes it to a string -///////////////////////////////////////////////////////////////////////// -bool CProcessor::CPUInfoToText(char *strBuffer, unsigned int uiMaxLen) -{ -#define LENCHECK len = (unsigned int) strlen(buf); if (len >= uiMaxLen) return false; strcpy(strBuffer, buf); strBuffer += len; -#define COPYADD(str) strcpy(buf, str); LENCHECK; -#define FORMATADD(format, var) sprintf(buf, format, var); LENCHECK; -#define BOOLADD(str, boolvar) COPYADD(str); if (boolvar) { COPYADD(" Yes\n"); } else { COPYADD(" No\n"); } - - char buf[1024]; - unsigned int len; - - // First we have to get the frequency - GetCPUFrequency(50); - - // Then we get the processor information - GetCPUInfo(); - - // Now we construct the string (see the macros at function beginning) - strBuffer[0] = 0; - - COPYADD("// CPU General Information\n//////////////////////////\n"); - FORMATADD("Processor name: %s\n", strCPUName); - FORMATADD("Frequency: %.2f MHz\n\n", (float) uqwFrequency / 1000000.0f); - FORMATADD("Vendor: %s\n", CPUInfo.strVendor); - FORMATADD("Family: %s\n", CPUInfo.strFamily); - FORMATADD("Extended family: %d\n", CPUInfo.uiExtendedFamily); - FORMATADD("Model: %s\n", CPUInfo.strModel); - FORMATADD("Extended model: %d\n", CPUInfo.uiExtendedModel); - FORMATADD("Type: %s\n", CPUInfo.strType); - FORMATADD("Brand ID: %s\n", CPUInfo.strBrandID); - if (CPUInfo._Ext.PN_ProcessorSerialNumber) - { - FORMATADD("Processor Serial: %s\n", CPUInfo.strProcessorSerial); - } - else - { - COPYADD("Processor Serial: Disabled\n"); - } - - COPYADD("\n\n// CPU Configuration\n////////////////////\n"); - FORMATADD("L1 instruction cache: %s\n", CPUInfo._L1.Instruction.strCache); - FORMATADD("L1 data cache: %s\n", CPUInfo._L1.Data.strCache); - FORMATADD("L2 cache: %s\n", CPUInfo._L2.strCache); - FORMATADD("L3 cache: %s\n", CPUInfo._L3.strCache); - FORMATADD("Trace cache: %s\n", CPUInfo._Trace.strCache); - FORMATADD("Instruction TLB: %s\n", CPUInfo._Instruction.strTLB); - FORMATADD("Data TLB: %s\n", CPUInfo._Data.strTLB); - FORMATADD("Max Supported CPUID-Level: 0x%08lX\n", CPUInfo.MaxSupportedLevel); - FORMATADD("Max Supported Ext. CPUID-Level: 0x%08lX\n", CPUInfo.MaxSupportedExtendedLevel); - - COPYADD("\n\n// CPU Extensions\n/////////////////\n"); - BOOLADD("AA64 AMD 64-bit Architecture: ", CPUInfo._Ext.AA64_AMD64BitArchitecture); - BOOLADD("ACPI Thermal Monitor And Clock Control: ", CPUInfo._Ext.ACPI_ThermalMonitorAndClockControl); - BOOLADD("APIC Advanced Programmable Interrupt Controller: ", CPUInfo._Ext.APIC_AdvancedProgrammableInterruptController); - FORMATADD(" APIC-ID: %d\n", CPUInfo._Ext.APIC_ID); - BOOLADD("CLFSH CLFLUSH Instruction Presence: ", CPUInfo._Ext.CLFSH_CFLUSH_Instruction); - FORMATADD(" CLFLUSH Instruction Cache Line Size: %d\n", CPUInfo._Ext.CLFLUSH_InstructionCacheLineSize); - BOOLADD("CMOV Conditional Move And Compare Instructions: ", CPUInfo._Ext.CMOV_ConditionalMoveAndCompareInstructions); - BOOLADD("CX8 COMPXCHG8B Instruction: ", CPUInfo._Ext.CX8_COMPXCHG8B_Instruction); - BOOLADD("DE Debugging Extensions: ", CPUInfo._Ext.DE_DebuggingExtensions); - BOOLADD("DS Debug Store: ", CPUInfo._Ext.DS_DebugStore); - BOOLADD("FGPAT Page Attribute Table: ", CPUInfo._Ext.FGPAT_PageAttributeTable); - BOOLADD("FPU Floating Point Unit: ", CPUInfo._Ext.FPU_FloatingPointUnit); - BOOLADD("FXSR Fast Streaming SIMD Extensions Save/Restore:", CPUInfo._Ext.FXSR_FastStreamingSIMD_ExtensionsSaveRestore); - BOOLADD("HT Hyper Threading: ", CPUInfo._Ext.HT_HyperThreading); - BOOLADD("IA64 Intel 64-Bit Architecture: ", CPUInfo._Ext.IA64_Intel64BitArchitecture); - BOOLADD("MCA Machine Check Architecture: ", CPUInfo._Ext.MCA_MachineCheckArchitecture); - BOOLADD("MCE Machine Check Exception: ", CPUInfo._Ext.MCE_MachineCheckException); - BOOLADD("MMX Multimedia Extensions: ", CPUInfo._Ext.MMX_MultimediaExtensions); - BOOLADD("MMX+ Multimedia Extensions: ", CPUInfo._Ext.EMMX_MultimediaExtensions); - BOOLADD("MSR Model Specific Registers: ", CPUInfo._Ext.MSR_ModelSpecificRegisters); - BOOLADD("MTRR Memory Type Range Registers: ", CPUInfo._Ext.MTRR_MemoryTypeRangeRegisters); - BOOLADD("PAE Physical Address Extension: ", CPUInfo._Ext.PAE_PhysicalAddressExtension); - BOOLADD("PGE PTE Global Flag: ", CPUInfo._Ext.PGE_PTE_GlobalFlag); - if (CPUInfo._Ext.PN_ProcessorSerialNumber) - { - FORMATADD("PN Processor Serial Number: %s\n", CPUInfo.strProcessorSerial); - } - else - { - COPYADD("PN Processor Serial Number: Disables\n"); - } - BOOLADD("PSE Page Size Extensions: ", CPUInfo._Ext.PSE_PageSizeExtensions); - BOOLADD("PSE36 36-bit Page Size Extension: ", CPUInfo._Ext.PSE36_36bitPageSizeExtension); - BOOLADD("SEP Fast System Call: ", CPUInfo._Ext.SEP_FastSystemCall); - BOOLADD("SS Self Snoop: ", CPUInfo._Ext.SS_SelfSnoop); - BOOLADD("SSE Streaming SIMD Extensions: ", CPUInfo._Ext.SSE_StreamingSIMD_Extensions); - BOOLADD("SSE2 Streaming SIMD 2 Extensions: ", CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions); - BOOLADD("TM Thermal Monitor: ", CPUInfo._Ext.TM_ThermalMonitor); - BOOLADD("TSC Time Stamp Counter: ", CPUInfo._Ext.TSC_TimeStampCounter); - BOOLADD("VME Virtual 8086 Mode Enhancements: ", CPUInfo._Ext.VME_Virtual8086ModeEnhancements); - BOOLADD("3DNow! Instructions: ", CPUInfo._Ext._3DNOW_InstructionExtensions); - BOOLADD("Enhanced 3DNow! Instructions: ", CPUInfo._Ext._E3DNOW_InstructionExtensions); - - // Yippie!!! - return true; -} - -// bool CProcessor::WriteInfoTextFile(const char *strFilename) -// =========================================================== -// Takes use of CProcessor::CPUInfoToText and saves the string to a -// file -/////////////////////////////////////////////////////////////////// -bool CProcessor::WriteInfoTextFile(const char *strFilename) -{ - char buf[16384]; - - // First we get the string - if (!CPUInfoToText(buf, 16383)) - return false; - - // Then we create a new file (CREATE_ALWAYS) - FILE *file = fopen(strFilename, "w"); - if (!file) - return false; - - // After that we write the string to the file - unsigned long dwBytesToWrite, dwBytesWritten; - dwBytesToWrite = (unsigned long) strlen(buf); - dwBytesWritten = (unsigned long) fwrite(buf, 1, dwBytesToWrite, file); - fclose(file); - if (dwBytesToWrite != dwBytesWritten) - return false; - - // Done - return true; -} \ No newline at end of file diff --git a/Source/Project64/3rd Party/Processor Info.h b/Source/Project64/3rd Party/Processor Info.h deleted file mode 100644 index 96f8063ba..000000000 --- a/Source/Project64/3rd Party/Processor Info.h +++ /dev/null @@ -1 +0,0 @@ -bool CPUInfoToText(char *strBuffer, unsigned int uiMaxLen); diff --git a/Source/Project64/Project64.vcproj b/Source/Project64/Project64.vcproj index beeb8d63d..e68dfbe3d 100644 --- a/Source/Project64/Project64.vcproj +++ b/Source/Project64/Project64.vcproj @@ -634,26 +634,6 @@ /> - - - - - - - - @@ -1330,10 +1310,6 @@ RelativePath="3rd Party\7zip.h" > - - diff --git a/Source/Project64/Project64.vcxproj b/Source/Project64/Project64.vcxproj index 1c5fa2d5a..439014453 100644 --- a/Source/Project64/Project64.vcxproj +++ b/Source/Project64/Project64.vcxproj @@ -146,9 +146,6 @@ NotUsing - - NotUsing - NotUsing @@ -297,7 +294,6 @@ - diff --git a/Source/Project64/Project64.vcxproj.filters b/Source/Project64/Project64.vcxproj.filters index 70ef1bf15..b65be5d00 100644 --- a/Source/Project64/Project64.vcxproj.filters +++ b/Source/Project64/Project64.vcxproj.filters @@ -405,9 +405,6 @@ Source Files\3rd Party Source - - Source Files\3rd Party Source - Source Files\3rd Party Source\ZLib Source @@ -815,9 +812,6 @@ Header Files\3rd Party Headers - - Header Files\3rd Party Headers - Header Files\3rd Party Headers From 352241726f5b55b540c009647a4cc197959d66c2 Mon Sep 17 00:00:00 2001 From: Emmet Young Date: Sun, 15 Feb 2015 23:37:57 +1100 Subject: [PATCH 3/3] Remove beta release from solution files. --- Project64.vs2008.sln | 36 ------------------------------------ Project64.vs2013.sln | 32 -------------------------------- 2 files changed, 68 deletions(-) diff --git a/Project64.vs2008.sln b/Project64.vs2008.sln index 605df1cda..469a57a49 100644 --- a/Project64.vs2008.sln +++ b/Project64.vs2008.sln @@ -80,113 +80,77 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NRage_Input_V2", "Source\nr EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Beta Release|Win32 = Beta Release|Win32 Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Beta Release|Win32.ActiveCfg = Release|Win32 - {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Beta Release|Win32.Build.0 = Release|Win32 {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Debug|Win32.ActiveCfg = Debug|Win32 {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Debug|Win32.Build.0 = Debug|Win32 {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Release|Win32.ActiveCfg = Release|Win32 {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Release|Win32.Build.0 = Release|Win32 - {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Beta Release|Win32.ActiveCfg = Beta Release|Win32 - {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Beta Release|Win32.Build.0 = Beta Release|Win32 {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Debug|Win32.ActiveCfg = Debug|Win32 {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Debug|Win32.Build.0 = Debug|Win32 {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Release|Win32.ActiveCfg = Release|Win32 {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Release|Win32.Build.0 = Release|Win32 - {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}.Beta Release|Win32.ActiveCfg = Release|Win32 - {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}.Beta Release|Win32.Build.0 = Release|Win32 {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}.Debug|Win32.ActiveCfg = Debug|Win32 {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}.Debug|Win32.Build.0 = Debug|Win32 {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}.Release|Win32.ActiveCfg = Release|Win32 {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}.Release|Win32.Build.0 = Release|Win32 - {8B9961B1-88D9-4EA3-A752-507A00DD9F3D}.Beta Release|Win32.ActiveCfg = Release|Win32 - {8B9961B1-88D9-4EA3-A752-507A00DD9F3D}.Beta Release|Win32.Build.0 = Release|Win32 {8B9961B1-88D9-4EA3-A752-507A00DD9F3D}.Debug|Win32.ActiveCfg = Debug|Win32 {8B9961B1-88D9-4EA3-A752-507A00DD9F3D}.Debug|Win32.Build.0 = Debug|Win32 {8B9961B1-88D9-4EA3-A752-507A00DD9F3D}.Release|Win32.ActiveCfg = Release|Win32 {8B9961B1-88D9-4EA3-A752-507A00DD9F3D}.Release|Win32.Build.0 = Release|Win32 - {3326E128-33AF-422C-BB7C-67CC6B915610}.Beta Release|Win32.ActiveCfg = Release|Win32 - {3326E128-33AF-422C-BB7C-67CC6B915610}.Beta Release|Win32.Build.0 = Release|Win32 {3326E128-33AF-422C-BB7C-67CC6B915610}.Debug|Win32.ActiveCfg = Debug|Win32 {3326E128-33AF-422C-BB7C-67CC6B915610}.Debug|Win32.Build.0 = Debug|Win32 {3326E128-33AF-422C-BB7C-67CC6B915610}.Release|Win32.ActiveCfg = Release|Win32 {3326E128-33AF-422C-BB7C-67CC6B915610}.Release|Win32.Build.0 = Release|Win32 - {4BC6906B-213E-40D7-9FC7-1A93E228393D}.Beta Release|Win32.ActiveCfg = Release|Win32 - {4BC6906B-213E-40D7-9FC7-1A93E228393D}.Beta Release|Win32.Build.0 = Release|Win32 {4BC6906B-213E-40D7-9FC7-1A93E228393D}.Debug|Win32.ActiveCfg = Debug|Win32 {4BC6906B-213E-40D7-9FC7-1A93E228393D}.Debug|Win32.Build.0 = Debug|Win32 {4BC6906B-213E-40D7-9FC7-1A93E228393D}.Release|Win32.ActiveCfg = Release|Win32 {4BC6906B-213E-40D7-9FC7-1A93E228393D}.Release|Win32.Build.0 = Release|Win32 - {731BD205-2826-4631-B7AF-117658E88DBC}.Beta Release|Win32.ActiveCfg = Release|Win32 - {731BD205-2826-4631-B7AF-117658E88DBC}.Beta Release|Win32.Build.0 = Release|Win32 {731BD205-2826-4631-B7AF-117658E88DBC}.Debug|Win32.ActiveCfg = Debug|Win32 {731BD205-2826-4631-B7AF-117658E88DBC}.Debug|Win32.Build.0 = Debug|Win32 {731BD205-2826-4631-B7AF-117658E88DBC}.Release|Win32.ActiveCfg = Release|Win32 {731BD205-2826-4631-B7AF-117658E88DBC}.Release|Win32.Build.0 = Release|Win32 - {360A34F3-3172-4B09-8BC9-B3FBEE677863}.Beta Release|Win32.ActiveCfg = Release|Win32 {360A34F3-3172-4B09-8BC9-B3FBEE677863}.Debug|Win32.ActiveCfg = Debug|Win32 {360A34F3-3172-4B09-8BC9-B3FBEE677863}.Release|Win32.ActiveCfg = Release|Win32 {360A34F3-3172-4B09-8BC9-B3FBEE677863}.Release|Win32.Build.0 = Release|Win32 - {A4D13408-A794-4199-8FC7-4A9A32505005}.Beta Release|Win32.ActiveCfg = Release|Win32 - {A4D13408-A794-4199-8FC7-4A9A32505005}.Beta Release|Win32.Build.0 = Release|Win32 {A4D13408-A794-4199-8FC7-4A9A32505005}.Debug|Win32.ActiveCfg = Debug|Win32 {A4D13408-A794-4199-8FC7-4A9A32505005}.Debug|Win32.Build.0 = Debug|Win32 {A4D13408-A794-4199-8FC7-4A9A32505005}.Release|Win32.ActiveCfg = Release|Win32 {A4D13408-A794-4199-8FC7-4A9A32505005}.Release|Win32.Build.0 = Release|Win32 - {93447136-FACD-4740-8F35-FC46FB4A9E82}.Beta Release|Win32.ActiveCfg = Release|Win32 - {93447136-FACD-4740-8F35-FC46FB4A9E82}.Beta Release|Win32.Build.0 = Release|Win32 {93447136-FACD-4740-8F35-FC46FB4A9E82}.Debug|Win32.ActiveCfg = Debug|Win32 {93447136-FACD-4740-8F35-FC46FB4A9E82}.Debug|Win32.Build.0 = Debug|Win32 {93447136-FACD-4740-8F35-FC46FB4A9E82}.Release|Win32.ActiveCfg = Release|Win32 {93447136-FACD-4740-8F35-FC46FB4A9E82}.Release|Win32.Build.0 = Release|Win32 - {427F1DCD-3BED-4010-9322-077A4C06D871}.Beta Release|Win32.ActiveCfg = Release|Win32 - {427F1DCD-3BED-4010-9322-077A4C06D871}.Beta Release|Win32.Build.0 = Release|Win32 {427F1DCD-3BED-4010-9322-077A4C06D871}.Debug|Win32.ActiveCfg = Debug|Win32 {427F1DCD-3BED-4010-9322-077A4C06D871}.Debug|Win32.Build.0 = Debug|Win32 {427F1DCD-3BED-4010-9322-077A4C06D871}.Release|Win32.ActiveCfg = Release|Win32 {427F1DCD-3BED-4010-9322-077A4C06D871}.Release|Win32.Build.0 = Release|Win32 - {93CFEDF3-9A75-4484-B169-D9D8074F5AC2}.Beta Release|Win32.ActiveCfg = Release|Win32 - {93CFEDF3-9A75-4484-B169-D9D8074F5AC2}.Beta Release|Win32.Build.0 = Release|Win32 {93CFEDF3-9A75-4484-B169-D9D8074F5AC2}.Debug|Win32.ActiveCfg = Debug|Win32 {93CFEDF3-9A75-4484-B169-D9D8074F5AC2}.Debug|Win32.Build.0 = Debug|Win32 {93CFEDF3-9A75-4484-B169-D9D8074F5AC2}.Release|Win32.ActiveCfg = Release|Win32 {93CFEDF3-9A75-4484-B169-D9D8074F5AC2}.Release|Win32.Build.0 = Release|Win32 - {05B9CB11-12D1-47CD-8E4A-88E12162119B}.Beta Release|Win32.ActiveCfg = Release|Win32 - {05B9CB11-12D1-47CD-8E4A-88E12162119B}.Beta Release|Win32.Build.0 = Release|Win32 {05B9CB11-12D1-47CD-8E4A-88E12162119B}.Debug|Win32.ActiveCfg = Debug|Win32 {05B9CB11-12D1-47CD-8E4A-88E12162119B}.Debug|Win32.Build.0 = Debug|Win32 {05B9CB11-12D1-47CD-8E4A-88E12162119B}.Release|Win32.ActiveCfg = Release|Win32 {05B9CB11-12D1-47CD-8E4A-88E12162119B}.Release|Win32.Build.0 = Release|Win32 - {25A25249-C284-4C5A-8DC2-26FC3EB13703}.Beta Release|Win32.ActiveCfg = Release|Win32 - {25A25249-C284-4C5A-8DC2-26FC3EB13703}.Beta Release|Win32.Build.0 = Release|Win32 {25A25249-C284-4C5A-8DC2-26FC3EB13703}.Debug|Win32.ActiveCfg = Debug|Win32 {25A25249-C284-4C5A-8DC2-26FC3EB13703}.Debug|Win32.Build.0 = Debug|Win32 {25A25249-C284-4C5A-8DC2-26FC3EB13703}.Release|Win32.ActiveCfg = Release|Win32 {25A25249-C284-4C5A-8DC2-26FC3EB13703}.Release|Win32.Build.0 = Release|Win32 - {462C2608-182F-452C-944F-AF201E19300B}.Beta Release|Win32.ActiveCfg = Release|Win32 - {462C2608-182F-452C-944F-AF201E19300B}.Beta Release|Win32.Build.0 = Release|Win32 {462C2608-182F-452C-944F-AF201E19300B}.Debug|Win32.ActiveCfg = Debug|Win32 {462C2608-182F-452C-944F-AF201E19300B}.Debug|Win32.Build.0 = Debug|Win32 {462C2608-182F-452C-944F-AF201E19300B}.Release|Win32.ActiveCfg = Release|Win32 {462C2608-182F-452C-944F-AF201E19300B}.Release|Win32.Build.0 = Release|Win32 - {2DADDAA5-0F57-46ED-A974-747908DDC7F3}.Beta Release|Win32.ActiveCfg = Release|Win32 - {2DADDAA5-0F57-46ED-A974-747908DDC7F3}.Beta Release|Win32.Build.0 = Release|Win32 {2DADDAA5-0F57-46ED-A974-747908DDC7F3}.Debug|Win32.ActiveCfg = Debug|Win32 {2DADDAA5-0F57-46ED-A974-747908DDC7F3}.Debug|Win32.Build.0 = Debug|Win32 {2DADDAA5-0F57-46ED-A974-747908DDC7F3}.Release|Win32.ActiveCfg = Release|Win32 {2DADDAA5-0F57-46ED-A974-747908DDC7F3}.Release|Win32.Build.0 = Release|Win32 - {5788717F-E3D4-40CF-9637-3A2AEE85BB81}.Beta Release|Win32.ActiveCfg = Release|Win32 - {5788717F-E3D4-40CF-9637-3A2AEE85BB81}.Beta Release|Win32.Build.0 = Release|Win32 {5788717F-E3D4-40CF-9637-3A2AEE85BB81}.Debug|Win32.ActiveCfg = Debug|Win32 {5788717F-E3D4-40CF-9637-3A2AEE85BB81}.Debug|Win32.Build.0 = Debug|Win32 {5788717F-E3D4-40CF-9637-3A2AEE85BB81}.Release|Win32.ActiveCfg = Release|Win32 {5788717F-E3D4-40CF-9637-3A2AEE85BB81}.Release|Win32.Build.0 = Release|Win32 - {FD617E80-9E40-4138-85DA-B94633972E6A}.Beta Release|Win32.ActiveCfg = Release|Win32 - {FD617E80-9E40-4138-85DA-B94633972E6A}.Beta Release|Win32.Build.0 = Release|Win32 {FD617E80-9E40-4138-85DA-B94633972E6A}.Debug|Win32.ActiveCfg = Debug|Win32 {FD617E80-9E40-4138-85DA-B94633972E6A}.Debug|Win32.Build.0 = Debug|Win32 {FD617E80-9E40-4138-85DA-B94633972E6A}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/Project64.vs2013.sln b/Project64.vs2013.sln index 5cf1ed910..9232e4ce5 100644 --- a/Project64.vs2013.sln +++ b/Project64.vs2013.sln @@ -43,101 +43,69 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GlideHQ", "Source\GlideHQ\G EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Beta Release|Win32 = Beta Release|Win32 Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Beta Release|Win32.ActiveCfg = Release|Win32 - {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Beta Release|Win32.Build.0 = Release|Win32 {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Debug|Win32.ActiveCfg = Debug|Win32 {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Debug|Win32.Build.0 = Debug|Win32 {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Release|Win32.ActiveCfg = Release|Win32 {B4A4B994-9111-42B1-93C2-6F1CA8BC4421}.Release|Win32.Build.0 = Release|Win32 - {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Beta Release|Win32.ActiveCfg = Release|Win32 - {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Beta Release|Win32.Build.0 = Release|Win32 {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Debug|Win32.ActiveCfg = Debug|Win32 {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Debug|Win32.Build.0 = Debug|Win32 {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Release|Win32.ActiveCfg = Release|Win32 {7E534C8E-1ACE-4A88-8807-39A11ED4DA18}.Release|Win32.Build.0 = Release|Win32 - {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}.Beta Release|Win32.ActiveCfg = Release|Win32 - {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}.Beta Release|Win32.Build.0 = Release|Win32 {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}.Debug|Win32.ActiveCfg = Debug|Win32 {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}.Debug|Win32.Build.0 = Debug|Win32 {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}.Release|Win32.ActiveCfg = Release|Win32 {A7ED562C-63F3-4B7E-B6B3-2CF7848752E1}.Release|Win32.Build.0 = Release|Win32 - {8B9961B1-88D9-4EA3-A752-507A00DD9F3D}.Beta Release|Win32.ActiveCfg = Release|Win32 - {8B9961B1-88D9-4EA3-A752-507A00DD9F3D}.Beta Release|Win32.Build.0 = Release|Win32 {8B9961B1-88D9-4EA3-A752-507A00DD9F3D}.Debug|Win32.ActiveCfg = Debug|Win32 {8B9961B1-88D9-4EA3-A752-507A00DD9F3D}.Debug|Win32.Build.0 = Debug|Win32 {8B9961B1-88D9-4EA3-A752-507A00DD9F3D}.Release|Win32.ActiveCfg = Release|Win32 {8B9961B1-88D9-4EA3-A752-507A00DD9F3D}.Release|Win32.Build.0 = Release|Win32 - {3326E128-33AF-422C-BB7C-67CC6B915610}.Beta Release|Win32.ActiveCfg = Release|Win32 - {3326E128-33AF-422C-BB7C-67CC6B915610}.Beta Release|Win32.Build.0 = Release|Win32 {3326E128-33AF-422C-BB7C-67CC6B915610}.Debug|Win32.ActiveCfg = Debug|Win32 {3326E128-33AF-422C-BB7C-67CC6B915610}.Debug|Win32.Build.0 = Debug|Win32 {3326E128-33AF-422C-BB7C-67CC6B915610}.Release|Win32.ActiveCfg = Release|Win32 {3326E128-33AF-422C-BB7C-67CC6B915610}.Release|Win32.Build.0 = Release|Win32 - {4BC6906B-213E-40D7-9FC7-1A93E228393D}.Beta Release|Win32.ActiveCfg = Release|Win32 - {4BC6906B-213E-40D7-9FC7-1A93E228393D}.Beta Release|Win32.Build.0 = Release|Win32 {4BC6906B-213E-40D7-9FC7-1A93E228393D}.Debug|Win32.ActiveCfg = Debug|Win32 {4BC6906B-213E-40D7-9FC7-1A93E228393D}.Debug|Win32.Build.0 = Debug|Win32 {4BC6906B-213E-40D7-9FC7-1A93E228393D}.Release|Win32.ActiveCfg = Release|Win32 {4BC6906B-213E-40D7-9FC7-1A93E228393D}.Release|Win32.Build.0 = Release|Win32 - {731BD205-2826-4631-B7AF-117658E88DBC}.Beta Release|Win32.ActiveCfg = Release|Win32 - {731BD205-2826-4631-B7AF-117658E88DBC}.Beta Release|Win32.Build.0 = Release|Win32 {731BD205-2826-4631-B7AF-117658E88DBC}.Debug|Win32.ActiveCfg = Debug|Win32 {731BD205-2826-4631-B7AF-117658E88DBC}.Debug|Win32.Build.0 = Debug|Win32 {731BD205-2826-4631-B7AF-117658E88DBC}.Release|Win32.ActiveCfg = Release|Win32 {731BD205-2826-4631-B7AF-117658E88DBC}.Release|Win32.Build.0 = Release|Win32 - {360A34F3-3172-4B09-8BC9-B3FBEE677863}.Beta Release|Win32.ActiveCfg = Release|Win32 {360A34F3-3172-4B09-8BC9-B3FBEE677863}.Debug|Win32.ActiveCfg = Debug|Win32 {360A34F3-3172-4B09-8BC9-B3FBEE677863}.Release|Win32.ActiveCfg = Release|Win32 {360A34F3-3172-4B09-8BC9-B3FBEE677863}.Release|Win32.Build.0 = Release|Win32 - {A4D13408-A794-4199-8FC7-4A9A32505005}.Beta Release|Win32.ActiveCfg = Release|Win32 - {A4D13408-A794-4199-8FC7-4A9A32505005}.Beta Release|Win32.Build.0 = Release|Win32 {A4D13408-A794-4199-8FC7-4A9A32505005}.Debug|Win32.ActiveCfg = Debug|Win32 {A4D13408-A794-4199-8FC7-4A9A32505005}.Debug|Win32.Build.0 = Debug|Win32 {A4D13408-A794-4199-8FC7-4A9A32505005}.Release|Win32.ActiveCfg = Release|Win32 {A4D13408-A794-4199-8FC7-4A9A32505005}.Release|Win32.Build.0 = Release|Win32 - {93447136-FACD-4740-8F35-FC46FB4A9E82}.Beta Release|Win32.ActiveCfg = Release|Win32 - {93447136-FACD-4740-8F35-FC46FB4A9E82}.Beta Release|Win32.Build.0 = Release|Win32 {93447136-FACD-4740-8F35-FC46FB4A9E82}.Debug|Win32.ActiveCfg = Debug|Win32 {93447136-FACD-4740-8F35-FC46FB4A9E82}.Debug|Win32.Build.0 = Debug|Win32 {93447136-FACD-4740-8F35-FC46FB4A9E82}.Release|Win32.ActiveCfg = Release|Win32 {93447136-FACD-4740-8F35-FC46FB4A9E82}.Release|Win32.Build.0 = Release|Win32 - {427F1DCD-3BED-4010-9322-077A4C06D871}.Beta Release|Win32.ActiveCfg = Release|Win32 - {427F1DCD-3BED-4010-9322-077A4C06D871}.Beta Release|Win32.Build.0 = Release|Win32 {427F1DCD-3BED-4010-9322-077A4C06D871}.Debug|Win32.ActiveCfg = Debug|Win32 {427F1DCD-3BED-4010-9322-077A4C06D871}.Debug|Win32.Build.0 = Debug|Win32 {427F1DCD-3BED-4010-9322-077A4C06D871}.Release|Win32.ActiveCfg = Release|Win32 {427F1DCD-3BED-4010-9322-077A4C06D871}.Release|Win32.Build.0 = Release|Win32 - {93CFEDF3-9A75-4484-B169-D9D8074F5AC2}.Beta Release|Win32.ActiveCfg = Release|Win32 - {93CFEDF3-9A75-4484-B169-D9D8074F5AC2}.Beta Release|Win32.Build.0 = Release|Win32 {93CFEDF3-9A75-4484-B169-D9D8074F5AC2}.Debug|Win32.ActiveCfg = Debug|Win32 {93CFEDF3-9A75-4484-B169-D9D8074F5AC2}.Debug|Win32.Build.0 = Debug|Win32 {93CFEDF3-9A75-4484-B169-D9D8074F5AC2}.Release|Win32.ActiveCfg = Release|Win32 {93CFEDF3-9A75-4484-B169-D9D8074F5AC2}.Release|Win32.Build.0 = Release|Win32 - {05B9CB11-12D1-47CD-8E4A-88E12162119B}.Beta Release|Win32.ActiveCfg = Release|Win32 - {05B9CB11-12D1-47CD-8E4A-88E12162119B}.Beta Release|Win32.Build.0 = Release|Win32 {05B9CB11-12D1-47CD-8E4A-88E12162119B}.Debug|Win32.ActiveCfg = Debug|Win32 {05B9CB11-12D1-47CD-8E4A-88E12162119B}.Debug|Win32.Build.0 = Debug|Win32 {05B9CB11-12D1-47CD-8E4A-88E12162119B}.Release|Win32.ActiveCfg = Release|Win32 {05B9CB11-12D1-47CD-8E4A-88E12162119B}.Release|Win32.Build.0 = Release|Win32 - {25A25249-C284-4C5A-8DC2-26FC3EB13703}.Beta Release|Win32.ActiveCfg = Release|Win32 - {25A25249-C284-4C5A-8DC2-26FC3EB13703}.Beta Release|Win32.Build.0 = Release|Win32 {25A25249-C284-4C5A-8DC2-26FC3EB13703}.Debug|Win32.ActiveCfg = Debug|Win32 {25A25249-C284-4C5A-8DC2-26FC3EB13703}.Debug|Win32.Build.0 = Debug|Win32 {25A25249-C284-4C5A-8DC2-26FC3EB13703}.Release|Win32.ActiveCfg = Release|Win32 {25A25249-C284-4C5A-8DC2-26FC3EB13703}.Release|Win32.Build.0 = Release|Win32 - {462C2608-182F-452C-944F-AF201E19300B}.Beta Release|Win32.ActiveCfg = Release|Win32 - {462C2608-182F-452C-944F-AF201E19300B}.Beta Release|Win32.Build.0 = Release|Win32 {462C2608-182F-452C-944F-AF201E19300B}.Debug|Win32.ActiveCfg = Debug|Win32 {462C2608-182F-452C-944F-AF201E19300B}.Debug|Win32.Build.0 = Debug|Win32 {462C2608-182F-452C-944F-AF201E19300B}.Release|Win32.ActiveCfg = Release|Win32 {462C2608-182F-452C-944F-AF201E19300B}.Release|Win32.Build.0 = Release|Win32 - {2DADDAA5-0F57-46ED-A974-747908DDC7F3}.Beta Release|Win32.ActiveCfg = Release|Win32 - {2DADDAA5-0F57-46ED-A974-747908DDC7F3}.Beta Release|Win32.Build.0 = Release|Win32 {2DADDAA5-0F57-46ED-A974-747908DDC7F3}.Debug|Win32.ActiveCfg = Debug|Win32 {2DADDAA5-0F57-46ED-A974-747908DDC7F3}.Debug|Win32.Build.0 = Debug|Win32 {2DADDAA5-0F57-46ED-A974-747908DDC7F3}.Release|Win32.ActiveCfg = Release|Win32