void LoadMempak (void) { char File[256], Directory[256]; DWORD dwRead, count, count2; BYTE Initilize[] = { 0x81,0x01,0x02,0x03, 0x04,0x05,0x06,0x07, 0x08,0x09,0x0a,0x0b, 0x0C,0x0D,0x0E,0x0F, 0x10,0x11,0x12,0x13, 0x14,0x15,0x16,0x17, 0x18,0x19,0x1A,0x1B, 0x1C,0x1D,0x1E,0x1F, 0xFF,0xFF,0xFF,0xFF, 0x05,0x1A,0x5F,0x13, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x01,0xFF, 0x66,0x25,0x99,0xCD, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xFF, 0x05,0x1A,0x5F,0x13, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x01,0xFF, 0x66,0x25,0x99,0xCD, 0xFF,0xFF,0xFF,0xFF, 0x05,0x1A,0x5F,0x13, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x01,0xFF, 0x66,0x25,0x99,0xCD, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xFF, 0x05,0x1A,0x5F,0x13, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x01,0xFF, 0x66,0x25,0x99,0xCD, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x71,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, }; for (count = 0; count < 4; count ++) { for (count2 = 0; count2 < 0x8000; count2 += 2) { Mempak[count][count2] = 0x00; Mempak[count][count2 + 1] = 0x03; } memcpy(&Mempak[count][0],Initilize,sizeof(Initilize)); } GetAutoSaveDir(Directory); sprintf(File,"%s%s.mpk",Directory,RomName); hMempakFile = CreateFile(File,GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL); if (hMempakFile == INVALID_HANDLE_VALUE) { switch (GetLastError()) { case ERROR_PATH_NOT_FOUND: CreateDirectory(Directory,NULL); hMempakFile = CreateFile(File,GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL); if (hMempakFile == INVALID_HANDLE_VALUE) { DisplayError("Failed to open mempak"); } return; break; default: DisplayError("Failed to open mempak"); return; } } SetFilePointer(hMempakFile,0,NULL,FILE_BEGIN); ReadFile(hMempakFile,Mempak,sizeof(Mempak),&dwRead,NULL); WriteFile(hMempakFile,Mempak,sizeof(Mempak),&dwRead,NULL); }
BOOL LoadSram (void) { char File[255], Directory[255]; LPVOID lpMsgBuf; GetAutoSaveDir(Directory); sprintf(File,"%s%s.sra",Directory,RomName); hSramFile = CreateFile(File,GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL); if (hSramFile == INVALID_HANDLE_VALUE) { //Check me FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,0,NULL ); DisplayError((char*)lpMsgBuf); LocalFree( lpMsgBuf ); return FALSE; } return TRUE; }
BOOL CALLBACK DirSelectProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { HKEY hKeyResults = 0; char String[256]; char Directory[255]; long lResult; sprintf(String,"Software\\N64 Emulation\\%s",AppName); lResult = RegOpenKeyEx( HKEY_CURRENT_USER,String,0, KEY_ALL_ACCESS,&hKeyResults); if (lResult == ERROR_SUCCESS) { DWORD Type, Value, Bytes = 4; lResult = RegQueryValueEx(hKeyResults,"Use Default Plugin Dir",0,&Type,(LPBYTE)(&Value),&Bytes); if (Type != REG_DWORD || lResult != ERROR_SUCCESS) { Value = TRUE; } SendMessage(GetDlgItem(hDlg,Value?IDC_PLUGIN_DEFAULT:IDC_PLUGIN_OTHER),BM_SETCHECK, BST_CHECKED,0); lResult = RegQueryValueEx(hKeyResults,"Use Default Rom Dir",0,&Type,(LPBYTE)(&Value),&Bytes); if (Type != REG_DWORD || lResult != ERROR_SUCCESS) { Value = FALSE; } SendMessage(GetDlgItem(hDlg,Value?IDC_ROM_DEFAULT:IDC_ROM_OTHER),BM_SETCHECK, BST_CHECKED,0); lResult = RegQueryValueEx(hKeyResults,"Use Default Auto Save Dir",0,&Type,(LPBYTE)(&Value),&Bytes); if (Type != REG_DWORD || lResult != ERROR_SUCCESS) { Value = TRUE; } SendMessage(GetDlgItem(hDlg,Value?IDC_AUTO_DEFAULT:IDC_AUTO_OTHER),BM_SETCHECK, BST_CHECKED,0); lResult = RegQueryValueEx(hKeyResults,"Use Default Instant Save Dir",0,&Type,(LPBYTE)(&Value),&Bytes); if (Type != REG_DWORD || lResult != ERROR_SUCCESS) { Value = TRUE; } SendMessage(GetDlgItem(hDlg,Value?IDC_INSTANT_DEFAULT:IDC_INSTANT_OTHER),BM_SETCHECK, BST_CHECKED,0); lResult = RegQueryValueEx(hKeyResults,"Use Default Snap Shot Dir",0,&Type,(LPBYTE)(&Value),&Bytes); if (Type != REG_DWORD || lResult != ERROR_SUCCESS) { Value = TRUE; } SendMessage(GetDlgItem(hDlg,Value?IDC_SNAP_DEFAULT:IDC_SNAP_OTHER),BM_SETCHECK, BST_CHECKED,0); Bytes = sizeof(Directory); lResult = RegQueryValueEx(hKeyResults,"Plugin Directory",0,&Type,(LPBYTE)Directory,&Bytes); if (lResult != ERROR_SUCCESS) { GetPluginDir(Directory ); } SetDlgItemText(hDlg,IDC_PLUGIN_DIR,Directory); Bytes = sizeof(Directory); lResult = RegQueryValueEx(hKeyResults,"Instant Save Directory",0,&Type,(LPBYTE)Directory,&Bytes); if (lResult != ERROR_SUCCESS) { GetInstantSaveDir(Directory); } SetDlgItemText(hDlg,IDC_INSTANT_DIR,Directory); Bytes = sizeof(Directory); lResult = RegQueryValueEx(hKeyResults,"Auto Save Directory",0,&Type,(LPBYTE)Directory,&Bytes); if (lResult != ERROR_SUCCESS) { GetAutoSaveDir(Directory); } SetDlgItemText(hDlg,IDC_AUTO_DIR,Directory); Bytes = sizeof(Directory); lResult = RegQueryValueEx(hKeyResults,"Snap Shot Directory",0,&Type,(LPBYTE)Directory,&Bytes); if (lResult != ERROR_SUCCESS) { GetSnapShotDir(Directory); } SetDlgItemText(hDlg,IDC_SNAP_DIR,Directory); } else { SendMessage(GetDlgItem(hDlg,IDC_PLUGIN_DEFAULT),BM_SETCHECK, BST_CHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_ROM_DEFAULT),BM_SETCHECK, BST_CHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_AUTO_DEFAULT),BM_SETCHECK, BST_CHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_INSTANT_DEFAULT),BM_SETCHECK, BST_CHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_SNAP_DEFAULT),BM_SETCHECK, BST_CHECKED,0); GetPluginDir(Directory ); SetDlgItemText(hDlg,IDC_PLUGIN_DIR,Directory); GetInstantSaveDir(Directory); SetDlgItemText(hDlg,IDC_INSTANT_DIR,Directory); GetAutoSaveDir(Directory); SetDlgItemText(hDlg,IDC_AUTO_DIR,Directory); GetSnapShotDir(Directory); SetDlgItemText(hDlg,IDC_SNAP_DIR,Directory); } GetRomDirectory( Directory ); SetDlgItemText(hDlg,IDC_ROM_DIR,Directory); SetDlgItemText(hDlg,IDC_DIR_FRAME1,GS(DIR_PLUGIN)); SetDlgItemText(hDlg,IDC_DIR_FRAME2,GS(DIR_ROM)); SetDlgItemText(hDlg,IDC_DIR_FRAME3,GS(DIR_AUTO_SAVE)); SetDlgItemText(hDlg,IDC_DIR_FRAME4,GS(DIR_INSTANT_SAVE)); SetDlgItemText(hDlg,IDC_DIR_FRAME5,GS(DIR_SCREEN_SHOT)); SetDlgItemText(hDlg,IDC_ROM_DEFAULT,GS(DIR_ROM_DEFAULT)); } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_SELECT_PLUGIN_DIR: case IDC_SELECT_ROM_DIR: case IDC_SELECT_INSTANT_DIR: case IDC_SELECT_AUTO_DIR: case IDC_SELECT_SNAP_DIR: { char Buffer[MAX_PATH], Directory[255], Title[255]; LPITEMIDLIST pidl; BROWSEINFO bi; switch (LOWORD(wParam)) { case IDC_SELECT_PLUGIN_DIR: strcpy(Title,GS(DIR_SELECT_PLUGIN)); GetPluginDir(Directory); break; case IDC_SELECT_ROM_DIR: GetRomDirectory(Directory); strcpy(Title,GS(DIR_SELECT_ROM)); break; case IDC_SELECT_AUTO_DIR: GetAutoSaveDir(Directory); strcpy(Title,GS(DIR_SELECT_AUTO)); break; case IDC_SELECT_INSTANT_DIR: GetInstantSaveDir(Directory); strcpy(Title,GS(DIR_SELECT_INSTANT)); break; case IDC_SELECT_SNAP_DIR: GetSnapShotDir(Directory); strcpy(Title,GS(DIR_SELECT_SCREEN)); break; } bi.hwndOwner = hDlg; bi.pidlRoot = NULL; bi.pszDisplayName = Buffer; bi.lpszTitle = Title; bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS; bi.lpfn = (BFFCALLBACK)SelectDirCallBack; bi.lParam = (DWORD)Directory; if ((pidl = SHBrowseForFolder(&bi)) != NULL) { if (SHGetPathFromIDList(pidl, Directory)) { int len = strlen(Directory); if (Directory[len - 1] != '\\') { strcat(Directory,"\\"); } switch (LOWORD(wParam)) { case IDC_SELECT_PLUGIN_DIR: SetDlgItemText(hDlg,IDC_PLUGIN_DIR,Directory); SendMessage(GetDlgItem(hDlg,IDC_PLUGIN_DEFAULT),BM_SETCHECK, BST_UNCHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_PLUGIN_OTHER),BM_SETCHECK, BST_CHECKED,0); break; case IDC_SELECT_ROM_DIR: SetDlgItemText(hDlg,IDC_ROM_DIR,Directory); SendMessage(GetDlgItem(hDlg,IDC_ROM_DEFAULT),BM_SETCHECK, BST_UNCHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_ROM_OTHER),BM_SETCHECK, BST_CHECKED,0); break; case IDC_SELECT_INSTANT_DIR: SetDlgItemText(hDlg,IDC_INSTANT_DIR,Directory); SendMessage(GetDlgItem(hDlg,IDC_INSTANT_DEFAULT),BM_SETCHECK, BST_UNCHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_INSTANT_OTHER),BM_SETCHECK, BST_CHECKED,0); break; case IDC_SELECT_AUTO_DIR: SetDlgItemText(hDlg,IDC_AUTO_DIR,Directory); SendMessage(GetDlgItem(hDlg,IDC_AUTO_DEFAULT),BM_SETCHECK, BST_UNCHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_AUTO_OTHER),BM_SETCHECK, BST_CHECKED,0); break; case IDC_SELECT_SNAP_DIR: SetDlgItemText(hDlg,IDC_SNAP_DIR,Directory); SendMessage(GetDlgItem(hDlg,IDC_SNAP_DEFAULT),BM_SETCHECK, BST_UNCHECKED,0); SendMessage(GetDlgItem(hDlg,IDC_SNAP_OTHER),BM_SETCHECK, BST_CHECKED,0); break; } } } } break; } break; case WM_NOTIFY: if (((NMHDR FAR *) lParam)->code == PSN_APPLY) { long lResult; HKEY hKeyResults = 0; DWORD Disposition = 0; char String[200]; sprintf(String,"Software\\N64 Emulation\\%s",AppName); lResult = RegCreateKeyEx( HKEY_CURRENT_USER, String,0,"", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,NULL, &hKeyResults,&Disposition); if (lResult == ERROR_SUCCESS) { DWORD Value; Value = SendMessage(GetDlgItem(hDlg,IDC_PLUGIN_DEFAULT),BM_GETSTATE, 0,0) == BST_CHECKED?TRUE:FALSE; RegSetValueEx(hKeyResults,"Use Default Plugin Dir",0,REG_DWORD,(BYTE *)&Value,sizeof(DWORD)); if (Value == FALSE) { GetDlgItemText(hDlg,IDC_PLUGIN_DIR,String,sizeof(String)); RegSetValueEx(hKeyResults,"Plugin Directory",0,REG_SZ,(CONST BYTE *)String,strlen(String)); } Value = SendMessage(GetDlgItem(hDlg,IDC_ROM_DEFAULT),BM_GETSTATE, 0,0) == BST_CHECKED?TRUE:FALSE; RegSetValueEx(hKeyResults,"Use Default Rom Dir",0,REG_DWORD,(BYTE *)&Value,sizeof(DWORD)); if (Value == FALSE) { GetDlgItemText(hDlg,IDC_ROM_DIR,String,sizeof(String)); RegSetValueEx(hKeyResults,"Rom Directory",0,REG_SZ,(CONST BYTE *)String,strlen(String)); } Value = SendMessage(GetDlgItem(hDlg,IDC_AUTO_DEFAULT),BM_GETSTATE, 0,0) == BST_CHECKED?TRUE:FALSE; RegSetValueEx(hKeyResults,"Use Default Auto Save Dir",0,REG_DWORD,(BYTE *)&Value,sizeof(DWORD)); if (Value == FALSE) { GetDlgItemText(hDlg,IDC_AUTO_DIR,String,sizeof(String)); RegSetValueEx(hKeyResults,"Auto Save Directory",0,REG_SZ,(CONST BYTE *)String,strlen(String)); } Value = SendMessage(GetDlgItem(hDlg,IDC_INSTANT_DEFAULT),BM_GETSTATE, 0,0) == BST_CHECKED?TRUE:FALSE; RegSetValueEx(hKeyResults,"Use Default Instant Save Dir",0,REG_DWORD,(BYTE *)&Value,sizeof(DWORD)); if (Value == FALSE) { GetDlgItemText(hDlg,IDC_INSTANT_DIR,String,sizeof(String)); RegSetValueEx(hKeyResults,"Instant Save Directory",0,REG_SZ,(CONST BYTE *)String,strlen(String)); } Value = SendMessage(GetDlgItem(hDlg,IDC_SNAP_DEFAULT),BM_GETSTATE, 0,0) == BST_CHECKED?TRUE:FALSE; RegSetValueEx(hKeyResults,"Use Default Snap Shot Dir",0,REG_DWORD,(BYTE *)&Value,sizeof(DWORD)); if (Value == FALSE) { GetDlgItemText(hDlg,IDC_SNAP_DIR,String,sizeof(String)); RegSetValueEx(hKeyResults,"Snap Shot Directory",0,REG_SZ,(CONST BYTE *)String,strlen(String)); } } RegCloseKey(hKeyResults); } break; default: return FALSE; } return TRUE; }