diff --git a/desmume/src/MMU.cpp b/desmume/src/MMU.cpp index 9cb3ccd40..70d53daee 100644 --- a/desmume/src/MMU.cpp +++ b/desmume/src/MMU.cpp @@ -39,13 +39,14 @@ #include "zero_private.h" #include "mc.h" -static const int save_types[6][2] = { +static const int save_types[7][2] = { {MC_TYPE_AUTODETECT,1}, {MC_TYPE_EEPROM1,MC_SIZE_4KBITS}, {MC_TYPE_EEPROM2,MC_SIZE_64KBITS}, {MC_TYPE_EEPROM2,MC_SIZE_512KBITS}, - {MC_TYPE_FLASH,MC_SIZE_256KBITS}, - {MC_TYPE_FRAM,MC_SIZE_2MBITS} + {MC_TYPE_FRAM,MC_SIZE_256KBITS}, + {MC_TYPE_FLASH,MC_SIZE_2MBITS}, + {MC_TYPE_FLASH,MC_SIZE_4MBITS} }; diff --git a/desmume/src/mc.cpp b/desmume/src/mc.cpp index e75d650a0..82fe91296 100644 --- a/desmume/src/mc.cpp +++ b/desmume/src/mc.cpp @@ -108,10 +108,19 @@ void mc_reset_com(memory_chip_t *mc) addr = (mc->autodetectbuf[0] << 8) | mc->autodetectbuf[1]; mc->type = MC_TYPE_FRAM; mc->size = MC_SIZE_256KBITS; + } + else if (mc->autodetectsize == (512+3)) + { + // Flash 4Mbit + addr = (mc->autodetectbuf[0] << 16) | + (mc->autodetectbuf[1] << 8) | + mc->autodetectbuf[2]; + mc->type = MC_TYPE_FLASH; + mc->size = MC_SIZE_4MBITS; } else if (mc->autodetectsize == (256+3)) { - // Flash + // Flash 2Mbit addr = (mc->autodetectbuf[0] << 16) | (mc->autodetectbuf[1] << 8) | mc->autodetectbuf[2]; @@ -213,6 +222,8 @@ void mc_load_file(memory_chip_t *mc, const char* filename) type = MC_TYPE_EEPROM2; else if (size >= MC_SIZE_2MBITS) type = MC_TYPE_FLASH; + else if (size >= MC_SIZE_4MBITS) + type = MC_TYPE_FLASH; if (type != -1) mc_realloc(mc, type, size); @@ -259,6 +270,8 @@ int mc_load_duc(memory_chip_t *mc, const char* filename) type = MC_TYPE_EEPROM2; else if (size >= MC_SIZE_2MBITS) type = MC_TYPE_FLASH; + else if (size >= MC_SIZE_4MBITS) + type = MC_TYPE_FLASH; if (type != -1) mc_realloc(mc, type, size); diff --git a/desmume/src/windows/disView.cpp b/desmume/src/windows/disView.cpp index 8c609bff2..874e14f9e 100644 --- a/desmume/src/windows/disView.cpp +++ b/desmume/src/windows/disView.cpp @@ -429,6 +429,10 @@ BOOL CALLBACK ViewDisasm_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA case IDC_AUTO_UPDATE_SECS: { u16 t = GetDlgItemInt(hwnd, IDC_AUTO_UPDATE_SECS, FALSE, TRUE); + if (!DisView7) + { + SendMessage(hwnd, WM_INITDIALOG, 0, 0); + } if (t != DisView7->autoup_secs) { DisView7->autoup_secs = t; @@ -665,6 +669,10 @@ BOOL CALLBACK ViewDisasm_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA case IDC_AUTO_UPDATE_SECS: { u16 t = GetDlgItemInt(hwnd, IDC_AUTO_UPDATE_SECS, FALSE, TRUE); + if (!DisView9) + { + SendMessage(hwnd, WM_INITDIALOG, 0, 0); + } if (t != DisView9->autoup_secs) { DisView9->autoup_secs = t; diff --git a/desmume/src/windows/lightView.cpp b/desmume/src/windows/lightView.cpp index 49bcd2c6c..dfa03e88d 100644 --- a/desmume/src/windows/lightView.cpp +++ b/desmume/src/windows/lightView.cpp @@ -161,6 +161,10 @@ BOOL CALLBACK ViewLightsProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa case IDC_AUTO_UPDATE_SECS: { int t = GetDlgItemInt(hwnd, IDC_AUTO_UPDATE_SECS, FALSE, TRUE); + if (!LightsView) + { + SendMessage(hwnd, WM_INITDIALOG, 0, 0); + } if (t != LightsView->autoup_secs) { LightsView->autoup_secs = t; diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp index 6386eb6f1..2e73565c4 100644 --- a/desmume/src/windows/main.cpp +++ b/desmume/src/windows/main.cpp @@ -2219,38 +2219,53 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM osd->clear(); return 0; - #define saver(one,two,three,four,five, six) \ - MainWindow->checkMenu(IDC_SAVETYPE1, MF_BYCOMMAND | one); \ - MainWindow->checkMenu(IDC_SAVETYPE2, MF_BYCOMMAND | two); \ - MainWindow->checkMenu(IDC_SAVETYPE3, MF_BYCOMMAND | three); \ - MainWindow->checkMenu(IDC_SAVETYPE4, MF_BYCOMMAND | four); \ - MainWindow->checkMenu(IDC_SAVETYPE5, MF_BYCOMMAND | five); \ - MainWindow->checkMenu(IDC_SAVETYPE6, MF_BYCOMMAND | six); + #define clearsaver() \ + MainWindow->checkMenu(IDC_SAVETYPE1, MF_BYCOMMAND | MF_UNCHECKED); \ + MainWindow->checkMenu(IDC_SAVETYPE2, MF_BYCOMMAND | MF_UNCHECKED); \ + MainWindow->checkMenu(IDC_SAVETYPE3, MF_BYCOMMAND | MF_UNCHECKED); \ + MainWindow->checkMenu(IDC_SAVETYPE4, MF_BYCOMMAND | MF_UNCHECKED); \ + MainWindow->checkMenu(IDC_SAVETYPE5, MF_BYCOMMAND | MF_UNCHECKED); \ + MainWindow->checkMenu(IDC_SAVETYPE6, MF_BYCOMMAND | MF_UNCHECKED); \ + MainWindow->checkMenu(IDC_SAVETYPE7, MF_BYCOMMAND | MF_UNCHECKED); + + #define saver(one) \ + MainWindow->checkMenu(one, MF_BYCOMMAND | MF_CHECKED); case IDC_SAVETYPE1: - saver(MF_CHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED); + clearsaver(); + saver(IDC_SAVETYPE1); mmu_select_savetype(0,&backupmemorytype,&backupmemorysize); return 0; case IDC_SAVETYPE2: - saver(MF_UNCHECKED,MF_CHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED); + clearsaver(); + saver(IDC_SAVETYPE2); mmu_select_savetype(1,&backupmemorytype,&backupmemorysize); return 0; case IDC_SAVETYPE3: - saver(MF_UNCHECKED,MF_UNCHECKED,MF_CHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED); + clearsaver(); + saver(IDC_SAVETYPE2); mmu_select_savetype(2,&backupmemorytype,&backupmemorysize); return 0; case IDC_SAVETYPE4: - saver(MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_CHECKED,MF_UNCHECKED,MF_UNCHECKED); + clearsaver(); + saver(IDC_SAVETYPE4); mmu_select_savetype(3,&backupmemorytype,&backupmemorysize); return 0; case IDC_SAVETYPE5: - saver(MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_CHECKED,MF_UNCHECKED); + clearsaver(); + saver(IDC_SAVETYPE5); mmu_select_savetype(4,&backupmemorytype,&backupmemorysize); return 0; case IDC_SAVETYPE6: - saver(MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_CHECKED); + clearsaver(); + saver(IDC_SAVETYPE6); mmu_select_savetype(5,&backupmemorytype,&backupmemorysize); return 0; + case IDC_SAVETYPE7: + clearsaver(); + saver(IDC_SAVETYPE7); + mmu_select_savetype(6,&backupmemorytype,&backupmemorysize); + return 0; case IDM_RESET: NDS_Reset(); diff --git a/desmume/src/windows/mapView.cpp b/desmume/src/windows/mapView.cpp index c82e69c97..12877d37d 100644 --- a/desmume/src/windows/mapView.cpp +++ b/desmume/src/windows/mapView.cpp @@ -285,6 +285,10 @@ BOOL CALLBACK ViewMapsProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lPara case IDC_AUTO_UPDATE_SECS: { int t = GetDlgItemInt(hwnd, IDC_AUTO_UPDATE_SECS, FALSE, TRUE); + if (!MapView) + { + SendMessage(hwnd, WM_INITDIALOG, 0, 0); + } if (t != MapView->autoup_secs) { MapView->autoup_secs = t; diff --git a/desmume/src/windows/matrixView.cpp b/desmume/src/windows/matrixView.cpp index ba534843c..95fe1fae7 100644 --- a/desmume/src/windows/matrixView.cpp +++ b/desmume/src/windows/matrixView.cpp @@ -227,6 +227,10 @@ BOOL CALLBACK ViewMatricesProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM l case IDC_AUTO_UPDATE_SECS: { int t = GetDlgItemInt(hwnd, IDC_AUTO_UPDATE_SECS, FALSE, TRUE); + if (!MatrixView) + { + SendMessage(hwnd, WM_INITDIALOG, 0, 0); + } if (t != MatrixView->autoup_secs) { MatrixView->autoup_secs = t; diff --git a/desmume/src/windows/memView.cpp b/desmume/src/windows/memView.cpp index 56943363d..c27bcb935 100644 --- a/desmume/src/windows/memView.cpp +++ b/desmume/src/windows/memView.cpp @@ -279,6 +279,10 @@ bool CALLBACK ViewMem_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM l case IDC_AUTO_UPDATE_SECS: { int t = GetDlgItemInt(hwnd, IDC_AUTO_UPDATE_SECS, FALSE, TRUE); + if (!MemView7) + { + SendMessage(hwnd, WM_INITDIALOG, 0, 0); + } if (t != MemView7->autoup_secs) { MemView7->autoup_secs = t; @@ -460,6 +464,10 @@ bool CALLBACK ViewMem_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM l case IDC_AUTO_UPDATE_SECS: { int t = GetDlgItemInt(hwnd, IDC_AUTO_UPDATE_SECS, FALSE, TRUE); + if (!MemView9) + { + SendMessage(hwnd, WM_INITDIALOG, 0, 0); + } if (t != MemView9->autoup_secs) { MemView9->autoup_secs = t; diff --git a/desmume/src/windows/oamView.cpp b/desmume/src/windows/oamView.cpp index 3b1cd4dc2..39bac287f 100644 --- a/desmume/src/windows/oamView.cpp +++ b/desmume/src/windows/oamView.cpp @@ -289,6 +289,10 @@ BOOL CALLBACK ViewOAMProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam case IDC_AUTO_UPDATE_SECS: { int t = GetDlgItemInt(hwnd, IDC_AUTO_UPDATE_SECS, FALSE, TRUE); + if (!OAMView) + { + SendMessage(hwnd, WM_INITDIALOG, 0, 0); + } if (t != OAMView->autoup_secs) { OAMView->autoup_secs = t; diff --git a/desmume/src/windows/palView.cpp b/desmume/src/windows/palView.cpp index 88fd1a2fd..dd20a081e 100644 --- a/desmume/src/windows/palView.cpp +++ b/desmume/src/windows/palView.cpp @@ -186,6 +186,10 @@ BOOL CALLBACK ViewPalProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam case IDC_AUTO_UPDATE_SECS: { int t = GetDlgItemInt(hwnd, IDC_AUTO_UPDATE_SECS, FALSE, TRUE); + if (!PalView) + { + SendMessage(hwnd, WM_INITDIALOG, 0, 0); + } if (t != PalView->autoup_secs) { PalView->autoup_secs = t; diff --git a/desmume/src/windows/resource.h b/desmume/src/windows/resource.h index 3b632983f..1995f56b5 100644 --- a/desmume/src/windows/resource.h +++ b/desmume/src/windows/resource.h @@ -349,13 +349,14 @@ #define ID_FILE_RECENTROM 40034 #define ID_FIL_RECENTROM 40035 #define ID_FICHIER_RECENTROM 40036 +#define IDC_SAVETYPE7 40037 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 107 -#define _APS_NEXT_COMMAND_VALUE 40037 +#define _APS_NEXT_COMMAND_VALUE 40038 #define _APS_NEXT_CONTROL_VALUE 1019 #define _APS_NEXT_SYMED_VALUE 112 #endif diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc index f2ffda357..fd1ebe93f 100644 --- a/desmume/src/windows/resources.rc +++ b/desmume/src/windows/resources.rc @@ -17,7 +17,7 @@ #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) #ifdef _WIN32 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#pragma code_page(1251) +#pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// @@ -764,6 +764,7 @@ BEGIN MENUITEM "EEPROM 512kbit", IDC_SAVETYPE4 MENUITEM "FRAM 256kbit", IDC_SAVETYPE5 MENUITEM "FLASH 2mbit", IDC_SAVETYPE6 + MENUITEM "FLASH 4mbit", IDC_SAVETYPE7 END MENUITEM "Control Config", IDM_CONFIG MENUITEM "Sound Settings", IDM_SOUNDSETTINGS diff --git a/desmume/src/windows/tileView.cpp b/desmume/src/windows/tileView.cpp index 73c510255..16841d72b 100644 --- a/desmume/src/windows/tileView.cpp +++ b/desmume/src/windows/tileView.cpp @@ -443,6 +443,10 @@ BOOL CALLBACK ViewTilesProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lPar case IDC_AUTO_UPDATE_SECS: { int t = GetDlgItemInt(hwnd, IDC_AUTO_UPDATE_SECS, FALSE, TRUE); + if (!TileView) + { + SendMessage(hwnd, WM_INITDIALOG, 0, 0); + } if (t != TileView->autoup_secs) { TileView->autoup_secs = t;