From: <ade...@us...> - 2008-09-13 03:06:12
|
Revision: 939 http://desmume.svn.sourceforge.net/desmume/?rev=939&view=rev Author: adelikat Date: 2008-09-13 03:06:07 +0000 (Sat, 13 Sep 2008) Log Message: ----------- Win32: Desmume remembers window size. Game pauses while Desmume window is activated. Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2008-09-12 18:01:45 UTC (rev 938) +++ trunk/desmume/src/windows/main.cpp 2008-09-13 03:06:07 UTC (rev 939) @@ -136,6 +136,7 @@ unsigned int frameCounter=0; bool frameAdvance = false; bool frameCounterDisplay = false; +unsigned short windowSize = 1; /* the firmware settings */ struct NDS_fw_config_data win_fw_config; @@ -272,6 +273,11 @@ { SetWindowPos(hwnd, NULL, 0, 0, widthTradeOff + DefaultWidth * factor, heightTradeOff + DefaultHeight * factor, SWP_NOMOVE | SWP_NOZORDER); + if (windowSize != factor) + { + windowSize = factor; + WritePrivateProfileInt("Video","Window Size",windowSize,IniName); + } return; } @@ -1010,7 +1016,7 @@ static int tmp_execute; switch (message) // handle the messages { - /*case WM_ENTERMENULOOP: + case WM_ENTERMENULOOP: { if (execute) { @@ -1023,12 +1029,13 @@ { if (tmp_execute==2) NDS_UnPause(); return 0; - }*/ + } case WM_CREATE: { - RECT clientSize, fullSize; - HRESULT hr=Input_Init(hwnd); + windowSize = GetPrivateProfileInt("Video","Window Size", 1, IniName); + RECT clientSize, fullSize; + HRESULT hr=Input_Init(hwnd); #ifdef DEBUG if(FAILED(hr)) LOG("DirectInput init failed (0x%08x)\n",hr); else LOG("DirectInput init\n"); @@ -1039,7 +1046,9 @@ DefaultHeight = clientSize.bottom - clientSize.top; widthTradeOff = (fullSize.right - fullSize.left) - (clientSize.right - clientSize.left); heightTradeOff = (fullSize.bottom - fullSize.top) - (clientSize.bottom - clientSize.top); - return 0; + ScaleScreen(windowSize); + return 0; + } case WM_DESTROY: { @@ -1068,7 +1077,8 @@ if (ForceRatio) { RECT fullSize; GetWindowRect(hwnd, &fullSize); - ScaleScreen((fullSize.bottom - fullSize.top - heightTradeOff) / DefaultHeight); + ScaleScreen(windowSize); + //ScaleScreen((fullSize.bottom - fullSize.top - heightTradeOff) / DefaultHeight); } GetRect(hwnd); return 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mta...@us...> - 2008-09-14 08:12:13
|
Revision: 950 http://desmume.svn.sourceforge.net/desmume/?rev=950&view=rev Author: mtabachenko Date: 2008-09-14 08:12:10 +0000 (Sun, 14 Sep 2008) Log Message: ----------- - fix windows port compile (temporally); Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2008-09-14 07:40:12 UTC (rev 949) +++ trunk/desmume/src/windows/main.cpp 2008-09-14 08:12:10 UTC (rev 950) @@ -60,6 +60,8 @@ #include "snddx.h" #include <ddraw.h> +#include <GL/gl.h> +#include <GL/glext.h> #define GPU3D_NULL 0 #define GPU3D_OPENGL 1 @@ -426,9 +428,7 @@ return -1; } - NDS_3D_SetDriver (GPU3D_OPENGL); - - if (!gpu3D->NDS_3D_Init ()) + if (!oglrender_init()) { MessageBox(hwnd,"Unable to initialize openGL","Error",MB_OK); return -1; @@ -753,6 +753,48 @@ ColorCtrl_Register(); } +bool windows_opengl_init() +{ + HDC oglDC = NULL; + HGLRC hRC = NULL; + int pixelFormat; + PIXELFORMATDESCRIPTOR pfd; + + oglDC = GetDC (hwnd); + + memset(&pfd,0, sizeof(PIXELFORMATDESCRIPTOR)); + pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); + pfd.nVersion = 1; + pfd.dwFlags = PFD_DRAW_TO_BITMAP | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; + pfd.iPixelType = PFD_TYPE_RGBA; + pfd.cColorBits = 24; + pfd.cDepthBits = 24; + pfd.cAlphaBits = 8; + pfd.cStencilBits = 8; + pfd.iLayerType = PFD_MAIN_PLANE ; + + pixelFormat = ChoosePixelFormat(oglDC, &pfd); + if (pixelFormat == 0) return false; + + if(!SetPixelFormat(oglDC, pixelFormat, &pfd)) return false; + + hRC = wglCreateContext(oglDC); + if (!hRC) return false; + + if(!wglMakeCurrent(oglDC, hRC)) return false; + + return true; +} + +bool windows_opengl_begin() +{ + return false; +} + +void windows_opengl_end() +{ +} + int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, @@ -769,8 +811,10 @@ #endif struct configured_features my_config; - extern bool windows_opengl_init(); + //extern bool windows_opengl_init(); oglrender_init = windows_opengl_init; + oglrender_beginOpenGL = windows_opengl_begin; + oglrender_endOpenGL = windows_opengl_end; MSG messages; /* Here messages to the application are saved */ @@ -943,7 +987,7 @@ runthread = CreateThread(NULL, 0, run, NULL, 0, &threadID); //wait for the run thread to signal that it is initialized and ready to run - WaitForSingleObject(runthread_ready,INFINITE); + //WaitForSingleObject(runthread_ready,INFINITE); // Make sure any quotes from lpszArgument are removed @@ -1087,8 +1131,8 @@ if (ForceRatio) { RECT fullSize; GetWindowRect(hwnd, &fullSize); - ScaleScreen(windowSize); - //ScaleScreen((fullSize.bottom - fullSize.top - heightTradeOff) / DefaultHeight); + //ScaleScreen(windowSize); // why? this is broke free resize + ScaleScreen((fullSize.bottom - fullSize.top - heightTradeOff) / DefaultHeight); } GetRect(hwnd); return 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2008-11-02 20:24:40
|
Revision: 1069 http://desmume.svn.sourceforge.net/desmume/?rev=1069&view=rev Author: zeromus Date: 2008-11-02 20:24:35 +0000 (Sun, 02 Nov 2008) Log Message: ----------- fix SF [ 2216986 ] - Win32 - File > Quit does nothing Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2008-10-31 14:18:26 UTC (rev 1068) +++ trunk/desmume/src/windows/main.cpp 2008-11-02 20:24:35 UTC (rev 1069) @@ -1,116 +1,116 @@ -/* Copyright (C) 2006 yopyop - yop...@if... - yopyop156.ifrance.com - - Copyright 2006 Theo Berkau - - This file is part of DeSmuME - - DeSmuME is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - DeSmuME is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with DeSmuME; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#include "windriver.h" -#include <algorithm> -#include <shellapi.h> -#include <Winuser.h> -#include <commctrl.h> -#include <commdlg.h> -#include <stdio.h> -#include "CWindow.h" -#include "../MMU.h" -#include "../armcpu.h" -#include "../NDSSystem.h" -#include "../debug.h" -#include "../saves.h" -#include "../cflash.h" -#include "resource.h" -#include "memView.h" -#include "disView.h" -#include "ginfo.h" -#include "IORegView.h" -#include "palView.h" -#include "tileView.h" -#include "oamView.h" -#include "mapview.h" -#include "matrixview.h" -#include "lightview.h" -#include "inputdx.h" -#include "FirmConfig.h" -#include "AboutBox.h" -#include "OGLRender.h" -#include "../gfx3d.h" -#include "../render3D.h" -#include "../gdbstub.h" -#include "colorctrl.h" -#include "console.h" -#include "throttle.h" - +/* Copyright (C) 2006 yopyop + yop...@if... + yopyop156.ifrance.com + + Copyright 2006 Theo Berkau + + This file is part of DeSmuME + + DeSmuME is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DeSmuME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DeSmuME; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "windriver.h" +#include <algorithm> +#include <shellapi.h> +#include <Winuser.h> +#include <commctrl.h> +#include <commdlg.h> +#include <stdio.h> +#include "CWindow.h" +#include "../MMU.h" +#include "../armcpu.h" +#include "../NDSSystem.h" +#include "../debug.h" +#include "../saves.h" +#include "../cflash.h" +#include "resource.h" +#include "memView.h" +#include "disView.h" +#include "ginfo.h" +#include "IORegView.h" +#include "palView.h" +#include "tileView.h" +#include "oamView.h" +#include "mapview.h" +#include "matrixview.h" +#include "lightview.h" +#include "inputdx.h" +#include "FirmConfig.h" +#include "AboutBox.h" +#include "OGLRender.h" +#include "../gfx3d.h" +#include "../render3D.h" +#include "../gdbstub.h" +#include "colorctrl.h" +#include "console.h" +#include "throttle.h" + #include "../common.h" -#include "snddx.h" - -#include "directx/ddraw.h" - -#define GPU3D_NULL 0 -#define GPU3D_OPENGL 1 - +#include "snddx.h" + +#include "directx/ddraw.h" + +#define GPU3D_NULL 0 +#define GPU3D_OPENGL 1 + //------todo move these into a generic driver api bool DRV_AviBegin(const char* fname); void DRV_AviEnd(); void DRV_AviSoundUpdate(void* soundData, int soundLen); bool DRV_AviIsRecording(); -void DRV_AviVideoUpdate(const u16* buffer); -//------ - -CRITICAL_SECTION win_sync; -volatile int win_sound_samplecounter = 0; - -//===================== DirectDraw vars -LPDIRECTDRAW7 lpDDraw=NULL; -LPDIRECTDRAWSURFACE7 lpPrimarySurface=NULL; -LPDIRECTDRAWSURFACE7 lpBackSurface=NULL; -DDSURFACEDESC2 ddsd; -LPDIRECTDRAWCLIPPER lpDDClipPrimary=NULL; -LPDIRECTDRAWCLIPPER lpDDClipBack=NULL; - -//===================== Input vars -INPUTCLASS *input = NULL; - -/* The compact flash disk image file */ -static const char *bad_glob_cflash_disk_image_file; -static char cflash_filename_buffer[512]; - -/* Declare Windows procedure */ -LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); - -/* Make the class name into a global variable */ -char SavName[MAX_PATH] = ""; -char ImportSavName[MAX_PATH] = ""; -char szClassName[ ] = "DeSmuME"; -int romnum = 0; - -DWORD threadID; - +void DRV_AviVideoUpdate(const u16* buffer); +//------ + +CRITICAL_SECTION win_sync; +volatile int win_sound_samplecounter = 0; + +//===================== DirectDraw vars +LPDIRECTDRAW7 lpDDraw=NULL; +LPDIRECTDRAWSURFACE7 lpPrimarySurface=NULL; +LPDIRECTDRAWSURFACE7 lpBackSurface=NULL; +DDSURFACEDESC2 ddsd; +LPDIRECTDRAWCLIPPER lpDDClipPrimary=NULL; +LPDIRECTDRAWCLIPPER lpDDClipBack=NULL; + +//===================== Input vars +INPUTCLASS *input = NULL; + +/* The compact flash disk image file */ +static const char *bad_glob_cflash_disk_image_file; +static char cflash_filename_buffer[512]; + +/* Declare Windows procedure */ +LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); + +/* Make the class name into a global variable */ +char SavName[MAX_PATH] = ""; +char ImportSavName[MAX_PATH] = ""; +char szClassName[ ] = "DeSmuME"; +int romnum = 0; + +DWORD threadID; + WINCLASS *MainWindow=NULL; //HWND hwnd; //HDC hdc; -HACCEL hAccel; +HACCEL hAccel; HINSTANCE hAppInst; -RECT MainWindowRect; - +RECT MainWindowRect; + //=========================== view tools TOOLSCLASS *ViewDisasm_ARM7 = NULL; TOOLSCLASS *ViewDisasm_ARM9 = NULL; @@ -125,809 +125,809 @@ TOOLSCLASS *ViewLights = NULL; -volatile BOOL execute = FALSE; -volatile BOOL paused = TRUE; -u32 glock = 0; - -BOOL click = FALSE; - -BOOL finished = FALSE; -BOOL romloaded = FALSE; - +volatile BOOL execute = FALSE; +volatile BOOL paused = TRUE; +u32 glock = 0; + +BOOL click = FALSE; + +BOOL finished = FALSE; +BOOL romloaded = FALSE; + void SetRotate(HWND hwnd, int rot); - -BOOL ForceRatio = TRUE; -float DefaultWidth; -float DefaultHeight; -float widthTradeOff; -float heightTradeOff; - -HMENU menu; -HANDLE runthread_ready=INVALID_HANDLE_VALUE; -HANDLE runthread=INVALID_HANDLE_VALUE; - + +BOOL ForceRatio = TRUE; +float DefaultWidth; +float DefaultHeight; +float widthTradeOff; +float heightTradeOff; + +HMENU menu; +HANDLE runthread_ready=INVALID_HANDLE_VALUE; +HANDLE runthread=INVALID_HANDLE_VALUE; + //static char IniName[MAX_PATH]; -int sndcoretype=SNDCORE_DIRECTX; -int sndbuffersize=735*4; -int sndvolume=100; - -SoundInterface_struct *SNDCoreList[] = { -&SNDDummy, -&SNDFile, -&SNDDIRECTX, -NULL -}; - -GPU3DInterface *core3DList[] = { -&gpu3DNull, -&gpu3Dgl, -}; - -int autoframeskipenab=1; -int frameskiprate=0; -int emu_paused = 0; -static int backupmemorytype=MC_TYPE_AUTODETECT; -static u32 backupmemorysize=1; -unsigned int frameCounter=0; -bool frameAdvance = false; -bool frameCounterDisplay = false; +int sndcoretype=SNDCORE_DIRECTX; +int sndbuffersize=735*4; +int sndvolume=100; + +SoundInterface_struct *SNDCoreList[] = { +&SNDDummy, +&SNDFile, +&SNDDIRECTX, +NULL +}; + +GPU3DInterface *core3DList[] = { +&gpu3DNull, +&gpu3Dgl, +}; + +int autoframeskipenab=1; +int frameskiprate=0; +int emu_paused = 0; +static int backupmemorytype=MC_TYPE_AUTODETECT; +static u32 backupmemorysize=1; +unsigned int frameCounter=0; +bool frameAdvance = false; +bool frameCounterDisplay = false; bool FpsDisplay = false; -unsigned short windowSize = 0; - -/* the firmware settings */ -struct NDS_fw_config_data win_fw_config; - - -LRESULT CALLBACK SoundSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, - LPARAM lParam); - -struct configured_features { - u16 arm9_gdb_port; - u16 arm7_gdb_port; - - const char *cflash_disk_image_file; -}; - -static void -init_configured_features( struct configured_features *config) { - config->arm9_gdb_port = 0; - config->arm7_gdb_port = 0; - - config->cflash_disk_image_file = NULL; -} - - -static int -fill_configured_features( struct configured_features *config, LPSTR lpszArgument) { - int good_args = 0; - LPTSTR cmd_line; - LPWSTR *argv; - int argc; - - argv = CommandLineToArgvW( GetCommandLineW(), &argc); - - if ( argv != NULL) { - int i; - good_args = 1; - for ( i = 1; i < argc && good_args; i++) { - if ( wcsncmp( argv[i], L"--arm9gdb=", 10) == 0) { - wchar_t *end_char; - unsigned long port_num = wcstoul( &argv[i][10], &end_char, 10); - - if ( port_num > 0 && port_num < 65536) { - config->arm9_gdb_port = port_num; - } - else { - MessageBox(NULL,"ARM9 GDB stub port must be in the range 1 to 65535","Error",MB_OK); - good_args = 0; - } - } - else if ( wcsncmp( argv[i], L"--arm7gdb=", 10) == 0) { - wchar_t *end_char; - unsigned long port_num = wcstoul( &argv[i][10], &end_char, 10); - - if ( port_num > 0 && port_num < 65536) { - config->arm7_gdb_port = port_num; - } - else { - MessageBox(NULL,"ARM9 GDB stub port must be in the range 1 to 65535","Error",MB_OK); - good_args = 0; - } - } - else if ( wcsncmp( argv[i], L"--cflash=", 9) == 0) { - if ( config->cflash_disk_image_file == NULL) { - size_t convert_count = wcstombs( &cflash_filename_buffer[0], &argv[i][9], 512); - if ( convert_count > 0) { - config->cflash_disk_image_file = cflash_filename_buffer; - } - } - else { - MessageBox(NULL,"CFlash disk image file already set","Error",MB_OK); - good_args = 0; - } - } - } - LocalFree( argv); - } - - return good_args; -} - -// Rotation definitions -short GPU_rotation = 0; -DWORD GPU_width = 256; -DWORD GPU_height = 192*2; -DWORD rotationstartscan = 192; -DWORD rotationscanlines = 192*2; - -void SetWindowClientSize(HWND hwnd, int cx, int cy) //found at: http://blogs.msdn.com/oldnewthing/archive/2003/09/11/54885.aspx -{ - HMENU hmenu = GetMenu(hwnd); - RECT rcWindow = { 0, 0, cx, cy }; - - /* - * First convert the client rectangle to a window rectangle the - * menu-wrap-agnostic way. - */ - AdjustWindowRect(&rcWindow, WS_CAPTION| WS_SYSMENU |WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, hmenu != NULL); - - /* - * If there is a menu, then check how much wrapping occurs - * when we set a window to the width specified by AdjustWindowRect - * and an infinite amount of height. An infinite height allows - * us to see every single menu wrap. - */ - if (hmenu) { - RECT rcTemp = rcWindow; - rcTemp.bottom = 0x7FFF; /* "Infinite" height */ - SendMessage(hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)&rcTemp); - - /* - * Adjust our previous calculation to compensate for menu - * wrapping. - */ - rcWindow.bottom += rcTemp.top; - } - SetWindowPos(hwnd, NULL, 0, 0, rcWindow.right - rcWindow.left, - rcWindow.bottom - rcWindow.top, SWP_NOMOVE | SWP_NOZORDER); - - if (lpBackSurface!=NULL) - { - IDirectDrawSurface7_Release(lpBackSurface); - memset(&ddsd, 0, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; - ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; - ddsd.dwWidth = cx; - ddsd.dwHeight = cy; - - IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpBackSurface, NULL); - } -} - -void ResizingLimit(int wParam, RECT *rc) -{ - u32 width = (rc->right - rc->left); - u32 height = (rc->bottom - rc->top); - - u32 minX = 256; - u32 minY = 414; - - //printlog("width=%i; height=%i\n", width, height); - - if (GPU_rotation == 90 || GPU_rotation == 270) - { - minX = 390; - minY = 272; - } - switch (wParam) - { - case WMSZ_LEFT: - { - if (width<minX) rc->left=rc->left+(width-minX); - return; - } - - case WMSZ_RIGHT: - { - if (width<minX) rc->right=rc->left+minX; - return; - } - - case WMSZ_TOP: - { - if (height<minY) rc->top=rc->top+(height-minY); - return; - } - - case WMSZ_BOTTOM: - { - if (height<minY) rc->bottom=rc->top+minY; - return; - } - - case WMSZ_TOPLEFT: - { - if (height<minY) rc->top=rc->top+(height-minY); - if (width<minX) rc->left=rc->left+(width-minX); - return; - } - case WMSZ_BOTTOMLEFT: - { - if (height<minY) rc->bottom=rc->top+minY; - if (width<minX) rc->left=rc->left+(width-minX); - return; - } - - case WMSZ_TOPRIGHT: - { - if (height<minY) rc->top=rc->top+(height-minY); - if (width<minX) rc->right=rc->left+minX; - return; - } - - case WMSZ_BOTTOMRIGHT: - { - if (height<minY) rc->bottom=rc->top+minY; - if (width<minX) rc->right=rc->left+minX; - return; - } - } - -} - -void ScallingScreen(HWND hwnd, int wParam, RECT *rc) -{ - float aspect; - u32 width; - u32 height; - u32 width2; - u32 height2; - - width = (rc->right - rc->left - widthTradeOff); - height = (rc->bottom - rc->top - heightTradeOff); - - if (width == height) return; - - if (GPU_rotation == 0 || GPU_rotation == 180) - { - aspect = DefaultWidth / DefaultHeight; - } - else - { - aspect = DefaultHeight / DefaultWidth; - } - - switch (wParam) - { - case WMSZ_LEFT: - case WMSZ_RIGHT: - { - height = (int)(width / aspect); - rc->bottom=rc->top+height+heightTradeOff; - return; - } - - case WMSZ_TOP: - case WMSZ_BOTTOM: - { - width = (int)(height * aspect); - rc->right=rc->left+width+widthTradeOff; - return; - } - - case WMSZ_TOPLEFT: - { - width = (int)(height * aspect); - rc->left=rc->right-width-widthTradeOff; - return; - } - case WMSZ_BOTTOMLEFT: - { - height = (int)(width / aspect); - rc->bottom=rc->top + height + heightTradeOff; - return; - } - - case WMSZ_TOPRIGHT: - case WMSZ_BOTTOMRIGHT: - { - width = (int)(height * aspect); - rc->right=rc->left+width+widthTradeOff; - return; - } - } -} - -void ScaleScreen(HWND hwnd, float factor) -{ - - if ((GPU_rotation==0)||(GPU_rotation==180)) - { - SetWindowPos(hwnd, NULL, 0, 0, widthTradeOff + DefaultWidth * factor, - heightTradeOff + DefaultHeight * factor, SWP_NOMOVE | SWP_NOZORDER); - } - else - if ((GPU_rotation==90)||(GPU_rotation==270)) - { - SetWindowPos(hwnd, NULL, 0, 0, heightTradeOff + DefaultHeight * factor, - widthTradeOff + DefaultWidth * factor, SWP_NOMOVE | SWP_NOZORDER); - } -} - -void translateXY(s32 *x, s32*y) -{ - s32 tmp; - switch(GPU_rotation) - { - case 90: - tmp = *x; - *x = *y; - *y = 192*2 -tmp; - break; - case 180: - *x = 256-*x; - *y = 192*2-*y; - break; - case 270: - tmp = *x; - *x = 255-*y; - *y = tmp; - break; - } - *y-=192; -} - - // END Rotation definitions - -int CreateDDrawBuffers() -{ - if (lpDDClipPrimary!=NULL) IDirectDraw7_Release(lpDDClipPrimary); - if (lpPrimarySurface != NULL) IDirectDraw7_Release(lpPrimarySurface); - if (lpBackSurface != NULL) IDirectDraw7_Release(lpBackSurface); - - memset(&ddsd, 0, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; - ddsd.dwFlags = DDSD_CAPS; - if (IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpPrimarySurface, NULL) != DD_OK) return -1; - - memset(&ddsd, 0, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; - ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; - - if ( (GPU_rotation == 0) || (GPU_rotation == 180) ) - { - ddsd.dwWidth = 256; - ddsd.dwHeight = 384; - } - else - if ( (GPU_rotation == 90) || (GPU_rotation == 270) ) - { - ddsd.dwWidth = 384; - ddsd.dwHeight = 256; - } - - if (IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpBackSurface, NULL) != DD_OK) return -2; - - if (IDirectDraw7_CreateClipper(lpDDraw, 0, &lpDDClipPrimary, NULL) != DD_OK) return -3; - +unsigned short windowSize = 0; + +/* the firmware settings */ +struct NDS_fw_config_data win_fw_config; + + +LRESULT CALLBACK SoundSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, + LPARAM lParam); + +struct configured_features { + u16 arm9_gdb_port; + u16 arm7_gdb_port; + + const char *cflash_disk_image_file; +}; + +static void +init_configured_features( struct configured_features *config) { + config->arm9_gdb_port = 0; + config->arm7_gdb_port = 0; + + config->cflash_disk_image_file = NULL; +} + + +static int +fill_configured_features( struct configured_features *config, LPSTR lpszArgument) { + int good_args = 0; + LPTSTR cmd_line; + LPWSTR *argv; + int argc; + + argv = CommandLineToArgvW( GetCommandLineW(), &argc); + + if ( argv != NULL) { + int i; + good_args = 1; + for ( i = 1; i < argc && good_args; i++) { + if ( wcsncmp( argv[i], L"--arm9gdb=", 10) == 0) { + wchar_t *end_char; + unsigned long port_num = wcstoul( &argv[i][10], &end_char, 10); + + if ( port_num > 0 && port_num < 65536) { + config->arm9_gdb_port = port_num; + } + else { + MessageBox(NULL,"ARM9 GDB stub port must be in the range 1 to 65535","Error",MB_OK); + good_args = 0; + } + } + else if ( wcsncmp( argv[i], L"--arm7gdb=", 10) == 0) { + wchar_t *end_char; + unsigned long port_num = wcstoul( &argv[i][10], &end_char, 10); + + if ( port_num > 0 && port_num < 65536) { + config->arm7_gdb_port = port_num; + } + else { + MessageBox(NULL,"ARM9 GDB stub port must be in the range 1 to 65535","Error",MB_OK); + good_args = 0; + } + } + else if ( wcsncmp( argv[i], L"--cflash=", 9) == 0) { + if ( config->cflash_disk_image_file == NULL) { + size_t convert_count = wcstombs( &cflash_filename_buffer[0], &argv[i][9], 512); + if ( convert_count > 0) { + config->cflash_disk_image_file = cflash_filename_buffer; + } + } + else { + MessageBox(NULL,"CFlash disk image file already set","Error",MB_OK); + good_args = 0; + } + } + } + LocalFree( argv); + } + + return good_args; +} + +// Rotation definitions +short GPU_rotation = 0; +DWORD GPU_width = 256; +DWORD GPU_height = 192*2; +DWORD rotationstartscan = 192; +DWORD rotationscanlines = 192*2; + +void SetWindowClientSize(HWND hwnd, int cx, int cy) //found at: http://blogs.msdn.com/oldnewthing/archive/2003/09/11/54885.aspx +{ + HMENU hmenu = GetMenu(hwnd); + RECT rcWindow = { 0, 0, cx, cy }; + + /* + * First convert the client rectangle to a window rectangle the + * menu-wrap-agnostic way. + */ + AdjustWindowRect(&rcWindow, WS_CAPTION| WS_SYSMENU |WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, hmenu != NULL); + + /* + * If there is a menu, then check how much wrapping occurs + * when we set a window to the width specified by AdjustWindowRect + * and an infinite amount of height. An infinite height allows + * us to see every single menu wrap. + */ + if (hmenu) { + RECT rcTemp = rcWindow; + rcTemp.bottom = 0x7FFF; /* "Infinite" height */ + SendMessage(hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)&rcTemp); + + /* + * Adjust our previous calculation to compensate for menu + * wrapping. + */ + rcWindow.bottom += rcTemp.top; + } + SetWindowPos(hwnd, NULL, 0, 0, rcWindow.right - rcWindow.left, + rcWindow.bottom - rcWindow.top, SWP_NOMOVE | SWP_NOZORDER); + + if (lpBackSurface!=NULL) + { + IDirectDrawSurface7_Release(lpBackSurface); + memset(&ddsd, 0, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); + ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; + ddsd.dwWidth = cx; + ddsd.dwHeight = cy; + + IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpBackSurface, NULL); + } +} + +void ResizingLimit(int wParam, RECT *rc) +{ + u32 width = (rc->right - rc->left); + u32 height = (rc->bottom - rc->top); + + u32 minX = 256; + u32 minY = 414; + + //printlog("width=%i; height=%i\n", width, height); + + if (GPU_rotation == 90 || GPU_rotation == 270) + { + minX = 390; + minY = 272; + } + switch (wParam) + { + case WMSZ_LEFT: + { + if (width<minX) rc->left=rc->left+(width-minX); + return; + } + + case WMSZ_RIGHT: + { + if (width<minX) rc->right=rc->left+minX; + return; + } + + case WMSZ_TOP: + { + if (height<minY) rc->top=rc->top+(height-minY); + return; + } + + case WMSZ_BOTTOM: + { + if (height<minY) rc->bottom=rc->top+minY; + return; + } + + case WMSZ_TOPLEFT: + { + if (height<minY) rc->top=rc->top+(height-minY); + if (width<minX) rc->left=rc->left+(width-minX); + return; + } + case WMSZ_BOTTOMLEFT: + { + if (height<minY) rc->bottom=rc->top+minY; + if (width<minX) rc->left=rc->left+(width-minX); + return; + } + + case WMSZ_TOPRIGHT: + { + if (height<minY) rc->top=rc->top+(height-minY); + if (width<minX) rc->right=rc->left+minX; + return; + } + + case WMSZ_BOTTOMRIGHT: + { + if (height<minY) rc->bottom=rc->top+minY; + if (width<minX) rc->right=rc->left+minX; + return; + } + } + +} + +void ScallingScreen(HWND hwnd, int wParam, RECT *rc) +{ + float aspect; + u32 width; + u32 height; + u32 width2; + u32 height2; + + width = (rc->right - rc->left - widthTradeOff); + height = (rc->bottom - rc->top - heightTradeOff); + + if (width == height) return; + + if (GPU_rotation == 0 || GPU_rotation == 180) + { + aspect = DefaultWidth / DefaultHeight; + } + else + { + aspect = DefaultHeight / DefaultWidth; + } + + switch (wParam) + { + case WMSZ_LEFT: + case WMSZ_RIGHT: + { + height = (int)(width / aspect); + rc->bottom=rc->top+height+heightTradeOff; + return; + } + + case WMSZ_TOP: + case WMSZ_BOTTOM: + { + width = (int)(height * aspect); + rc->right=rc->left+width+widthTradeOff; + return; + } + + case WMSZ_TOPLEFT: + { + width = (int)(height * aspect); + rc->left=rc->right-width-widthTradeOff; + return; + } + case WMSZ_BOTTOMLEFT: + { + height = (int)(width / aspect); + rc->bottom=rc->top + height + heightTradeOff; + return; + } + + case WMSZ_TOPRIGHT: + case WMSZ_BOTTOMRIGHT: + { + width = (int)(height * aspect); + rc->right=rc->left+width+widthTradeOff; + return; + } + } +} + +void ScaleScreen(HWND hwnd, float factor) +{ + + if ((GPU_rotation==0)||(GPU_rotation==180)) + { + SetWindowPos(hwnd, NULL, 0, 0, widthTradeOff + DefaultWidth * factor, + heightTradeOff + DefaultHeight * factor, SWP_NOMOVE | SWP_NOZORDER); + } + else + if ((GPU_rotation==90)||(GPU_rotation==270)) + { + SetWindowPos(hwnd, NULL, 0, 0, heightTradeOff + DefaultHeight * factor, + widthTradeOff + DefaultWidth * factor, SWP_NOMOVE | SWP_NOZORDER); + } +} + +void translateXY(s32 *x, s32*y) +{ + s32 tmp; + switch(GPU_rotation) + { + case 90: + tmp = *x; + *x = *y; + *y = 192*2 -tmp; + break; + case 180: + *x = 256-*x; + *y = 192*2-*y; + break; + case 270: + tmp = *x; + *x = 255-*y; + *y = tmp; + break; + } + *y-=192; +} + + // END Rotation definitions + +int CreateDDrawBuffers() +{ + if (lpDDClipPrimary!=NULL) IDirectDraw7_Release(lpDDClipPrimary); + if (lpPrimarySurface != NULL) IDirectDraw7_Release(lpPrimarySurface); + if (lpBackSurface != NULL) IDirectDraw7_Release(lpBackSurface); + + memset(&ddsd, 0, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); + ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; + ddsd.dwFlags = DDSD_CAPS; + if (IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpPrimarySurface, NULL) != DD_OK) return -1; + + memset(&ddsd, 0, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); + ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; + + if ( (GPU_rotation == 0) || (GPU_rotation == 180) ) + { + ddsd.dwWidth = 256; + ddsd.dwHeight = 384; + } + else + if ( (GPU_rotation == 90) || (GPU_rotation == 270) ) + { + ddsd.dwWidth = 384; + ddsd.dwHeight = 256; + } + + if (IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpBackSurface, NULL) != DD_OK) return -2; + + if (IDirectDraw7_CreateClipper(lpDDraw, 0, &lpDDClipPrimary, NULL) != DD_OK) return -3; + if (IDirectDrawClipper_SetHWnd(lpDDClipPrimary, 0, MainWindow->getHWnd()) != DD_OK) return -4; - if (IDirectDrawSurface7_SetClipper(lpPrimarySurface, lpDDClipPrimary) != DD_OK) return -5; - - return 1; -} - - -void Display() -{ - int res; - memset(&ddsd, 0, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - ddsd.dwFlags=DDSD_ALL; - res=IDirectDrawSurface7_Lock(lpBackSurface,NULL,&ddsd,DDLOCK_WAIT, NULL); - - if (res == DD_OK) - { - char* buffer = (char*)ddsd.lpSurface; - - int i, j, sz=256*sizeof(u32); - if (ddsd.ddpfPixelFormat.dwRGBBitCount>16) - { - u16 *tmpGPU_Screen_src=(u16*)GPU_screen; - u32 tmpGPU_screen[98304]; - for(i=0; i<98304; i++) - tmpGPU_screen[i]= (((tmpGPU_Screen_src[i]>>10)&0x1F)<<3)| - (((tmpGPU_Screen_src[i]>>5)&0x1F)<<11)| - (((tmpGPU_Screen_src[i])&0x1F)<<19); - switch (GPU_rotation) - { - case 0: - { - for (i = 0; i < 98304; i+=256) //384*256 - { - memcpy(buffer,tmpGPU_screen+i,sz); - buffer += ddsd.lPitch; - } - break; - } - case 90: - { - u32 start; - memset(buffer,0,384*ddsd.lPitch); - for (j=0; j<256; j++) - { - start=98304+j; - for (i=0; i<384; i++) - { - start-=256; - ((u32*)buffer)[i]=((u32 *)tmpGPU_screen)[start]; - } - buffer += ddsd.lPitch; - } - break; - } - case 180: - { - u32 start=98300; - for (j=0; j<384; j++) - { - for (i=0; i<256; i++, --start) - ((u32*)buffer)[i]=((u32 *)tmpGPU_screen)[start]; - buffer += ddsd.lPitch; - } - break; - } - case 270: - { - u32 start; - memset(buffer,0,384*ddsd.lPitch); - for (j=0; j<256; j++) - { - start=256-j; - for (i=0; i<384; i++) - { - ((u32*)buffer)[i]=((u32 *)tmpGPU_screen)[start]; - start+=256; - } - buffer += ddsd.lPitch; - } - break; - } - } - } - else - printlog("16bit depth color not supported"); - IDirectDrawSurface7_Unlock(lpBackSurface,(LPRECT)ddsd.lpSurface); - - if (IDirectDrawSurface7_Blt(lpPrimarySurface,&MainWindowRect,lpBackSurface,0, DDBLT_WAIT,0)==DDERR_SURFACELOST) - { - printlog("DirectDraw buffers is lost\n"); - if (IDirectDrawSurface7_Restore(lpPrimarySurface)==DD_OK) - IDirectDrawSurface7_Restore(lpBackSurface); - } - } - else - { - if (res==DDERR_SURFACELOST) - { - printlog("DirectDraw buffers is lost\n"); - if (IDirectDrawSurface7_Restore(lpPrimarySurface)==DD_OK) - IDirectDrawSurface7_Restore(lpBackSurface); - } - } -} - -void CheckMessages() -{ + if (IDirectDrawSurface7_SetClipper(lpPrimarySurface, lpDDClipPrimary) != DD_OK) return -5; + + return 1; +} + + +void Display() +{ + int res; + memset(&ddsd, 0, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); + ddsd.dwFlags=DDSD_ALL; + res=IDirectDrawSurface7_Lock(lpBackSurface,NULL,&ddsd,DDLOCK_WAIT, NULL); + + if (res == DD_OK) + { + char* buffer = (char*)ddsd.lpSurface; + + int i, j, sz=256*sizeof(u32); + if (ddsd.ddpfPixelFormat.dwRGBBitCount>16) + { + u16 *tmpGPU_Screen_src=(u16*)GPU_screen; + u32 tmpGPU_screen[98304]; + for(i=0; i<98304; i++) + tmpGPU_screen[i]= (((tmpGPU_Screen_src[i]>>10)&0x1F)<<3)| + (((tmpGPU_Screen_src[i]>>5)&0x1F)<<11)| + (((tmpGPU_Screen_src[i])&0x1F)<<19); + switch (GPU_rotation) + { + case 0: + { + for (i = 0; i < 98304; i+=256) //384*256 + { + memcpy(buffer,tmpGPU_screen+i,sz); + buffer += ddsd.lPitch; + } + break; + } + case 90: + { + u32 start; + memset(buffer,0,384*ddsd.lPitch); + for (j=0; j<256; j++) + { + start=98304+j; + for (i=0; i<384; i++) + { + start-=256; + ((u32*)buffer)[i]=((u32 *)tmpGPU_screen)[start]; + } + buffer += ddsd.lPitch; + } + break; + } + case 180: + { + u32 start=98300; + for (j=0; j<384; j++) + { + for (i=0; i<256; i++, --start) + ((u32*)buffer)[i]=((u32 *)tmpGPU_screen)[start]; + buffer += ddsd.lPitch; + } + break; + } + case 270: + { + u32 start; + memset(buffer,0,384*ddsd.lPitch); + for (j=0; j<256; j++) + { + start=256-j; + for (i=0; i<384; i++) + { + ((u32*)buffer)[i]=((u32 *)tmpGPU_screen)[start]; + start+=256; + } + buffer += ddsd.lPitch; + } + break; + } + } + } + else + printlog("16bit depth color not supported"); + IDirectDrawSurface7_Unlock(lpBackSurface,(LPRECT)ddsd.lpSurface); + + if (IDirectDrawSurface7_Blt(lpPrimarySurface,&MainWindowRect,lpBackSurface,0, DDBLT_WAIT,0)==DDERR_SURFACELOST) + { + printlog("DirectDraw buffers is lost\n"); + if (IDirectDrawSurface7_Restore(lpPrimarySurface)==DD_OK) + IDirectDrawSurface7_Restore(lpBackSurface); + } + } + else + { + if (res==DDERR_SURFACELOST) + { + printlog("DirectDraw buffers is lost\n"); + if (IDirectDrawSurface7_Restore(lpPrimarySurface)==DD_OK) + IDirectDrawSurface7_Restore(lpBackSurface); + } + } +} + +void CheckMessages() +{ MSG msg; - HWND hwnd = MainWindow->getHWnd(); + HWND hwnd = MainWindow->getHWnd(); while( PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE ) ) { if( GetMessage( &msg, 0, 0, 0)>0 ) - { - if(!TranslateAccelerator(hwnd,hAccel,&msg)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - } -} - - -DWORD WINAPI run( LPVOID lpParameter) -{ - char txt[80]; - u32 cycles = 0; - int wait=0; - u64 freq; - u64 OneFrameTime; - int framestoskip=0; - int framesskipped=0; - int skipnextframe=0; - u64 lastticks=0; - u64 curticks=0; - u64 diffticks=0; - u32 framecount=0; - u64 onesecondticks=0; - int fps=0; - int fpsframecount=0; - u64 fpsticks=0; - int res; + { + if(!TranslateAccelerator(hwnd,hAccel,&msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + } +} + + +DWORD WINAPI run( LPVOID lpParameter) +{ + char txt[80]; + u32 cycles = 0; + int wait=0; + u64 freq; + u64 OneFrameTime; + int framestoskip=0; + int framesskipped=0; + int skipnextframe=0; + u64 lastticks=0; + u64 curticks=0; + u64 diffticks=0; + u32 framecount=0; + u64 onesecondticks=0; + int fps=0; + int fpsframecount=0; + u64 fpsticks=0; + int res; HWND hwnd = MainWindow->getHWnd(); - - DDCAPS hw_caps, sw_caps; - - InitSpeedThrottle(); - - if (DirectDrawCreateEx(NULL, (LPVOID*)&lpDDraw, IID_IDirectDraw7, NULL) != DD_OK) - { - MessageBox(hwnd,"Unable to initialize DirectDraw","Error",MB_OK); - return -1; - } - - if (IDirectDraw7_SetCooperativeLevel(lpDDraw,hwnd, DDSCL_NORMAL) != DD_OK) - { - MessageBox(hwnd,"Unable to set DirectDraw Cooperative Level","Error",MB_OK); - return -1; - } - - if (CreateDDrawBuffers()<1) - { - MessageBox(hwnd,"Unable to set DirectDraw buffers","Error",MB_OK); - return -1; - } - - NDS_3D_SetDriver (GPU3D_OPENGL); - - if (!gpu3D->NDS_3D_Init ()) - { - MessageBox(hwnd,"Unable to initialize openGL","Error",MB_OK); - return -1; - } - - QueryPerformanceFrequency((LARGE_INTEGER *)&freq); - QueryPerformanceCounter((LARGE_INTEGER *)&lastticks); - OneFrameTime = freq / 60; - - SetEvent(runthread_ready); - - while(!finished) - { - while(execute) - { - EnterCriticalSection(&win_sync); - cycles = NDS_exec((560190<<1)-cycles,FALSE); - win_sound_samplecounter = 735; - LeaveCriticalSection(&win_sync); - - SPU_Emulate_core(); - //avi writing - DRV_AviSoundUpdate(SPU_core->outbuf,spu_core_samples); - DRV_AviVideoUpdate((u16*)GPU_screen); - - if (!skipnextframe) - { - input->process(); - + + DDCAPS hw_caps, sw_caps; + + InitSpeedThrottle(); + + if (DirectDrawCreateEx(NULL, (LPVOID*)&lpDDraw, IID_IDirectDraw7, NULL) != DD_OK) + { + MessageBox(hwnd,"Unable to initialize DirectDraw","Error",MB_OK); + return -1; + } + + if (IDirectDraw7_SetCooperativeLevel(lpDDraw,hwnd, DDSCL_NORMAL) != DD_OK) + { + MessageBox(hwnd,"Unable to set DirectDraw Cooperative Level","Error",MB_OK); + return -1; + } + + if (CreateDDrawBuffers()<1) + { + MessageBox(hwnd,"Unable to set DirectDraw buffers","Error",MB_OK); + return -1; + } + + NDS_3D_SetDriver (GPU3D_OPENGL); + + if (!gpu3D->NDS_3D_Init ()) + { + MessageBox(hwnd,"Unable to initialize openGL","Error",MB_OK); + return -1; + } + + QueryPerformanceFrequency((LARGE_INTEGER *)&freq); + QueryPerformanceCounter((LARGE_INTEGER *)&lastticks); + OneFrameTime = freq / 60; + + SetEvent(runthread_ready); + + while(!finished) + { + while(execute) + { + EnterCriticalSection(&win_sync); + cycles = NDS_exec((560190<<1)-cycles,FALSE); + win_sound_samplecounter = 735; + LeaveCriticalSection(&win_sync); + + SPU_Emulate_core(); + //avi writing + DRV_AviSoundUpdate(SPU_core->outbuf,spu_core_samples); + DRV_AviVideoUpdate((u16*)GPU_screen); + + if (!skipnextframe) + { + input->process(); + if (FpsDisplay) osd->addFixed(10, 10, "%02d Fps", fps); osd->update(); - Display(); - osd->clear(); - - - fpsframecount++; - QueryPerformanceCounter((LARGE_INTEGER *)&curticks); - bool oneSecond = curticks >= fpsticks + freq; - if(oneSecond) // TODO: print fps on screen in DDraw - { - fps = fpsframecount; - fpsframecount = 0; - QueryPerformanceCounter((LARGE_INTEGER *)&fpsticks); - } - - if(nds.idleFrameCounter==0 || oneSecond) - { - //calculate a 16 frame arm9 load average - int load = 0; - for(int i=0;i<16;i++) - load = load/8 + nds.runCycleCollector[(i+nds.idleFrameCounter)&15]*7/8; - load = std::min(100,std::max(0,(int)(load*100/1120380))); - sprintf(txt,"(%02d%%) %s", load, DESMUME_NAME_AND_VERSION); - SetWindowText(hwnd, txt); - } - - framesskipped = 0; - - if (framestoskip > 0) - skipnextframe = 1; - } - else - { - framestoskip--; - - if (framestoskip < 1) - skipnextframe = 0; - else - skipnextframe = 1; - - framesskipped++; - } - - while(SpeedThrottle()) - { - } - - if (autoframeskipenab) - { - framecount++; - - if (framecount > 60) - { - framecount = 1; - onesecondticks = 0; - } - - QueryPerformanceCounter((LARGE_INTEGER *)&curticks); - diffticks = curticks-lastticks; - - if(ThrottleIsBehind() && framesskipped < 9) - { - skipnextframe = 1; - framestoskip = 1; - } - - onesecondticks += diffticks; - lastticks = curticks; - } - else - { - if (framestoskip < 1) - framestoskip += frameskiprate; - } - if (frameAdvance) - { - frameAdvance = false; - execute = FALSE; - SPU_Pause(1); - } - frameCounter++; - if (frameCounterDisplay) osd->addFixed(200, 30, "%d",frameCounter); - - CheckMessages(); - } - - paused = TRUE; - CheckMessages(); - Sleep(100); - } - if (lpDDClipPrimary!=NULL) IDirectDraw7_Release(lpDDClipPrimary); - if (lpPrimarySurface != NULL) IDirectDraw7_Release(lpPrimarySurface); - if (lpBackSurface != NULL) IDirectDraw7_Release(lpBackSurface); - if (lpDDraw != NULL) IDirectDraw7_Release(lpDDraw); - return 1; -} - -void NDS_Pause() -{ - execute = FALSE; - paused = TRUE; - SPU_Pause(1); - while (!paused) {} - printlog("Paused\n"); -} - -void NDS_UnPause() -{ - paused = FALSE; - execute = TRUE; - SPU_Pause(0); - printlog("Unpaused\n"); -} - -void StateSaveSlot(int num) -{ - NDS_Pause(); - savestate_slot(num); - NDS_UnPause(); -} - -void StateLoadSlot(int num) -{ - BOOL wasPaused = paused; - NDS_Pause(); - loadstate_slot(num); - if(!wasPaused) - NDS_UnPause(); - else - Display(); -} - -BOOL LoadROM(char * filename, const char *cflash_disk_image) -{ - NDS_Pause(); - if (strcmp(filename,"")!=0) printlog("Loading ROM: %s\n",filename); - - if (NDS_LoadROM(filename, backupmemorytype, backupmemorysize, cflash_disk_image) > 0) - return TRUE; - - return FALSE; -} - -/* - * The thread handling functions needed by the GDB stub code. - */ -void * -createThread_gdb( void (APIENTRY *thread_function)( void *data), - void *thread_data) { - void *new_thread = CreateThread( NULL, 0, - (LPTHREAD_START_ROUTINE)thread_function, thread_data, - 0, NULL); - - return new_thread; -} - -void -joinThread_gdb( void *thread_handle) { -} - - -void SetLanguage(int langid) -{ - switch(langid) - { - case 1: - // French - SetThreadLocale(MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH), - SORT_DEFAULT)); - break; - case 2: - // Danish - SetThreadLocale(MAKELCID(MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT), - SORT_DEFAULT)); - break; - case 0: - // English - SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), - SORT_DEFAULT)); - break; - default: break; - break; - } -} - -void SaveLanguage(int langid) -{ - char text[80]; - - sprintf(text, "%d", langid); - WritePrivateProfileString("General", "Language", text, IniName); -} - -void CheckLanguage(UINT id) -{ - int i; - for (i = IDC_LANGENGLISH; i < IDC_LANGFRENCH+1; i++) + Display(); + osd->clear(); + + + fpsframecount++; + QueryPerformanceCounter((LARGE_INTEGER *)&curticks); + bool oneSecond = curticks >= fpsticks + freq; + if(oneSecond) // TODO: print fps on screen in DDraw + { + fps = fpsframecount; + fpsframecount = 0; + QueryPerformanceCounter((LARGE_INTEGER *)&fpsticks); + } + + if(nds.idleFrameCounter==0 || oneSecond) + { + //calculate a 16 frame arm9 load average + int load = 0; + for(int i=0;i<16;i++) + load = load/8 + nds.runCycleCollector[(i+nds.idleFrameCounter)&15]*7/8; + load = std::min(100,std::max(0,(int)(load*100/1120380))); + sprintf(txt,"(%02d%%) %s", load, DESMUME_NAME_AND_VERSION); + SetWindowText(hwnd, txt); + } + + framesskipped = 0; + + if (framestoskip > 0) + skipnextframe = 1; + } + else + { + framestoskip--; + + if (framestoskip < 1) + skipnextframe = 0; + else + skipnextframe = 1; + + framesskipped++; + } + + while(SpeedThrottle()) + { + } + + if (autoframeskipenab) + { + framecount++; + + if (framecount > 60) + { + framecount = 1; + onesecondticks = 0; + } + + QueryPerformanceCounter((LARGE_INTEGER *)&curticks); + diffticks = curticks-lastticks; + + if(ThrottleIsBehind() && framesskipped < 9) + { + skipnextframe = 1; + framestoskip = 1; + } + + onesecondticks += diffticks; + lastticks = curticks; + } + else + { + if (framestoskip < 1) + framestoskip += frameskiprate; + } + if (frameAdvance) + { + frameAdvance = false; + execute = FALSE; + SPU_Pause(1); + } + frameCounter++; + if (frameCounterDisplay) osd->addFixed(200, 30, "%d",frameCounter); + + CheckMessages(); + } + + paused = TRUE; + CheckMessages(); + Sleep(100); + } + if (lpDDClipPrimary!=NULL) IDirectDraw7_Release(lpDDClipPrimary); + if (lpPrimarySurface != NULL) IDirectDraw7_Release(lpPrimarySurface); + if (lpBackSurface != NULL) IDirectDraw7_Release(lpBackSurface); + if (lpDDraw != NULL) IDirectDraw7_Release(lpDDraw); + return 1; +} + +void NDS_Pause() +{ + execute = FALSE; + paused = TRUE; + SPU_Pause(1); + while (!paused) {} + printlog("Paused\n"); +} + +void NDS_UnPause() +{ + paused = FALSE; + execute = TRUE; + SPU_Pause(0); + printlog("Unpaused\n"); +} + +void StateSaveSlot(int num) +{ + NDS_Pause(); + savestate_slot(num); + NDS_UnPause(); +} + +void StateLoadSlot(int num) +{ + BOOL wasPaused = paused; + NDS_Pause(); + loadstate_slot(num); + if(!wasPaused) + NDS_UnPause(); + else + Display(); +} + +BOOL LoadROM(char * filename, const char *cflash_disk_image) +{ + NDS_Pause(); + if (strcmp(filename,"")!=0) printlog("Loading ROM: %s\n",filename); + + if (NDS_LoadROM(filename, backupmemorytype, backupmemorysize, cflash_disk_image) > 0) + return TRUE; + + return FALSE; +} + +/* + * The thread handling functions needed by the GDB stub code. + */ +void * +createThread_gdb( void (APIENTRY *thread_function)( void *data), + void *thread_data) { + void *new_thread = CreateThread( NULL, 0, + (LPTHREAD_START_ROUTINE)thread_function, thread_data, + 0, NULL); + + return new_thread; +} + +void +joinThread_gdb( void *thread_handle) { +} + + +void SetLanguage(int langid) +{ + switch(langid) + { + case 1: + // French + SetThreadLocale(MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH), + SORT_DEFAULT)); + break; + case 2: + // Danish + SetThreadLocale(MAKELCID(MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT), + SORT_DEFAULT)); + break; + case 0: + // English + SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), + SORT_DEFAULT)); + break; + default: break; + break; + } +} + +void SaveLanguage(int langid) +{ + char text[80]; + + sprintf(text, "%d", langid); + WritePrivateProfileString("General", "Language", text, IniName); +} + +void CheckLanguage(UINT id) +{ + int i; + for (i = IDC_LANGENGLISH; i < IDC_LANGFRENCH+1; i++) MainWindow->checkMenu(i, MF_BYCOMMAND | MF_UNCHECKED); - + MainWindow->checkMenu(id, MF_BYCOMMAND | MF_CHECKED); -} - -void ChangeLanguage(int id) -{ - HMENU newmenu; - - SetLanguage(id); - newmenu = LoadMenu(hAppInst, "MENU_PRINCIPAL"); +} + +void ChangeLanguage(int id) +{ + HMENU newmenu; + + SetLanguage(id); + newmenu = LoadMenu(hAppInst, "MENU_PRINCIPAL"); SetMenu(MainWindow->getHWnd(), newmenu); - DestroyMenu(menu); - menu = newmenu; -} - + DestroyMenu(menu); + menu = newmenu; +} + int RegClass(WNDPROC Proc, LPCTSTR szName) -{ +{ WNDCLASS wc; wc.style = CS_DBLCLKS; @@ -943,50 +943,50 @@ wc.cbClsExtra = 0; wc.cbWndExtra = 0; return RegisterClass(&wc); -} - -static void ExitRunLoop() -{ - finished = TRUE; - execute = FALSE; -} - - -int WINAPI WinMain (HINSTANCE hThisInstance, - HINSTANCE hPrevInstance, - LPSTR lpszArgument, - int nFunsterStil) - -{ +} + +static void ExitRunLoop() +{ + finished = TRUE; + execute = FALSE; +} + + +int WINAPI WinMain (HINSTANCE hThisInstance, + HINSTANCE hPrevInstance, + LPSTR lpszArgument, + int nFunsterStil) + +{ InitializeCriticalSection(&win_sync); - -#ifdef GDB_STUB - gdbstub_handle_t arm9_gdb_stub; - gdbstub_handle_t arm7_gdb_stub; - struct armcpu_memory_iface *arm9_memio = &arm9_base_memory_iface; - struct armcpu_memory_iface *arm7_memio = &arm7_base_memory_iface; - struct armcpu_ctrl_iface *arm9_ctrl_iface; - struct armcpu_ctrl_iface *arm7_ctrl_iface; -#endif - struct configured_features my_config; - - extern bool windows_opengl_init(); - oglrender_init = windows_opengl_init; - - - MSG messages; /* Here messages to the application are saved */ - char text[80]; - hAppInst=hThisInstance; - + +#ifdef GDB_STUB + gdbstub_handle_t arm9_gdb_stub; + gdbstub_handle_t arm7_gdb_stub; + struct armcpu_memory_iface *arm9_memio = &arm9_base_memory_iface; + struct armcpu_memory_iface *arm7_memio = &arm7_base_memory_iface; + struct armcpu_ctrl_iface *arm9_ctrl_iface; + struct armcpu_ctrl_iface *arm7_ctrl_iface; +#endif + struct configured_features my_config; + + extern bool windows_opengl_init(); + oglrender_init = windows_opengl_init; + + + MSG messages; /* Here messages to the application are saved */ + char text[80]; + hAppInst=hThisInstance; + init_configured_features( &my_config); if ( !fill_configured_features( &my_config, lpszArgument)) { MessageBox(NULL,"Unable to parse command line arguments","Error",MB_OK); return 0; } ColorCtrl_Register(); - - OpenConsole(); // Init debug console - + + OpenConsole(); // Init debug console + if (!RegClass(WindowProcedure, "DeSmuME")) { MessageBox(NULL, "Error registering windows class", "DeSmuME", MB_OK); @@ -1013,44 +1013,44 @@ exit(-1); } - /* default the firmware settings, they may get changed later */ - NDS_FillDefaultFirmwareConfigData( &win_fw_config); - - GetPrivateProfileString("General", "Language", "-1", text, 80, IniName); - SetLanguage(atoi(text)); - - bad_glob_cflash_disk_image_file = my_config.cflash_disk_image_file; - - hAccel = LoadAccelerators(hAppInst, MAKEINTRESOURCE(IDR_MAIN_ACCEL)); - -#ifdef DEBUG - LogStart(); -#endif - + /* default the firmware settings, they may get changed later */ + NDS_FillDefaultFirmwareConfigData( &win_fw_config); + + GetPrivateProfileString("General", "Language", "-1", text, 80, IniName); + SetLanguage(atoi(text)); + + bad_glob_cflash_disk_image_file = my_config.cflash_disk_image_file; + + hAccel = LoadAccelerators(hAppInst, MAKEINTRESOURCE(IDR_MAIN_ACCEL)); + +#ifdef DEBUG + LogStart(); +#endif + if (!MainWindow->setMenu(LoadMenu(hThisInstance, "MENU_PRINCIPAL"))) { MessageBox(NULL, "Error creating main menu", "DeSmuME", MB_OK); delete MainWindow; exit(-1); } - - // menu checks + + // menu checks MainWindow->checkMenu(IDC_FORCERATIO, MF_BYCOMMAND | (ForceRatio==1?MF_CHECKED:MF_UNCHECKED)); - + MainWindow->checkMenu(ID_VIEW_DISPLAYFPS, FpsDisplay ? MF_CHECKED : MF_UNCHECKED); - + MainWindow->checkMenu(IDC_WINDOW1X, MF_BYCOMMAND | ((windowSize==1)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_WINDOW2X, MF_BYCOMMAND | ((windowSize==2)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_WINDOW3X, MF_BYCOMMAND | ((windowSize==3)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_WINDOW4X, MF_BYCOMMAND | ((windowSize==4)?MF_CHECKED:MF_UNCHECKED)); - + MainWindow->checkMenu(IDC_ROTATE0, MF_BYCOMMAND | ((GPU_rotation==0)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_ROTATE90, MF_BYCOMMAND | ((GPU_rotation==90)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_ROTATE180, MF_BYCOMMAND | ((GPU_rotation==180)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_ROTATE270, MF_BYCOMMAND | ((GPU_rotation==270)?MF_CHECKED:MF_UNCHECKED)); - + DragAcceptFiles(MainWindow->getHWnd(), TRUE); - + printlog("Init NDS\n"); input = new INPUTCLASS(); @@ -1073,163 +1073,163 @@ ViewMatrices = new TOOLSCLASS(hThisInstance, IDD_MATRIX_VIEWER, (DLGPROC) ViewMatricesProc); ViewLights = new TOOLSCLASS(hThisInstance, IDD_LIGHT_VIEWER, (DLGPROC) ViewLightsProc); -#ifdef GDB_STUB - if ( my_config.arm9_gdb_port != 0) { - arm9_gdb_stub = createStub_gdb( my_config.arm9_gdb_port, - &arm9_memio, &arm9_direct_memory_iface); - - if ( arm9_gdb_stub == NULL) { - MessageBox(hwnd,"Failed to create ARM9 gdbstub","Error",MB_OK); - return -1; - } - } - if ( my_config.arm7_gdb_port != 0) { - arm7_gdb_stub = createStub_gdb( my_config.arm7_gdb_port, - &arm7_memio, - &arm7_base_memory_iface); - - if ( arm7_gdb_stub == NULL) { - MessageBox(hwnd,"Failed to create ARM7 gdbstub","Error",MB_OK); - return -1; - } - } - - NDS_Init( arm9_memio, &arm9_ctrl_iface, - arm7_memio, &arm7_ctrl_iface); -#else - NDS_Init (); -#endif - - /* - * Activate the GDB stubs - * This has to come after the NDS_Init where the cpus are set up. - */ -#ifdef GDB_STUB - if ( my_config.arm9_gdb_port != 0) { - activateStub_gdb( arm9_gdb_stub, arm9_ctrl_iface); - } - if ( my_config.arm7_gdb_port != 0) { - activateStub_gdb( arm7_gdb_stub, arm7_ctrl_iface); - } -#endif +#ifdef GDB_STUB + if ( my_config.arm9_gdb_port != 0) { + arm9_gdb_stub = createStub_gdb( my_config.arm9_gdb_port, + &arm9_memio, &arm9_direct_memory_iface); + + if ( arm9_gdb_stub == NULL) { + MessageBox(hwnd,"Failed to create ARM9 gdbstub","Error",MB_OK); + return -1; + } + } + if ( my_config.arm7_gdb_port != 0) { + arm7_gdb_stub = createStub_gdb( my_config.arm7_gdb_port, + &arm7_memio, + &arm7_base_memory_iface); + + if ( arm7_gdb_stub == NULL) { + MessageBox(hwnd,"Failed to create ARM7 gdbstub","Error",MB_OK); + return -1; + } + } + + NDS_Init( arm9_memio, &arm9_ctrl_iface, + arm7_memio, &arm7_ctrl_iface); +#else + NDS_Init (); +#endif + + /* + * Activate the GDB stubs + * This has to come after the NDS_Init where the cpus are set up. + */ +#ifdef GDB_STUB + if ( my_config.arm9_gdb_port != 0) { + activateStub_gdb( arm9_gdb_stub, arm9_ctrl_iface); + } + if ( my_config.arm7_gdb_port != 0) { + activateStub_gdb( arm7_gdb_stub, arm7_ctrl_iface); + } +#endif GetPrivateProfileString("General", "Language", "0", text, 80, IniName); //================================================== ??? - CheckLanguage(IDC_LANGENGLISH+atoi(text)); - - GetPrivateProfileString("Video", "FrameSkip", "AUTO", text, 80, IniName); - - if (strcmp(text, "AUTO") == 0) - { - autoframeskipenab=1; - frameskiprate=0; + CheckLanguage(IDC_LANGENGLISH+atoi(text)); + + GetPrivateProfileString("Video", "FrameSkip", "AUTO", text, 80, IniName); + + if (strcmp(text, "AUTO") == 0) + { + autoframeskipenab=1; + frameskiprate=0; MainWindow->checkMenu(IDC_FRAMESKIPAUTO, MF_BYCOMMAND | MF_CHECKED); - } - else - { - autoframeskipenab=0; - frameskiprate=atoi(text); + } + else + { + autoframeskipenab=0; + frameskiprate=atoi(text); MainWindow->checkMenu(frameskiprate + IDC_FRAMESKIP0, MF_BYCOMMAND | MF_CHECKED); - } - -#ifdef BETA_VERSION - EnableMenuItem (menu, IDM_SUBMITBUGREPORT, MF_GRAYED); -#endif - printlog("Init sound core\n"); - sndcoretype = GetPrivateProfileInt("Sound","SoundCore", SNDCORE_DIRECTX, IniName); - sndbuffersize = GetPrivateProfileInt("Sound","SoundBufferSize", 735 * 4, IniName); - - EnterCriticalSection(&win_sync); - int spu_ret = SPU_ChangeSoundCore(sndcoretype, sndbuffersize); - LeaveCriticalSection(&win_sync); - if(spu_ret != 0) - { + } + +#ifdef BETA_VERSION + EnableMenuItem (menu, IDM_SUBMITBUGREPORT, MF_GRAYED); +#endif + printlog("Init sound core\n"); + sndcoretype = GetPrivateProfileInt("Sound","SoundCore", SNDCORE_DIRECTX, IniName); + sndbuffersize = GetPrivateProfileInt("Sound","SoundBufferSize", 735 * 4, IniName); + + EnterCriticalSection(&win_sync); + int spu_ret = SPU_ChangeSoundCore(sndcoretype, sndbuffersize); + LeaveCriticalSection(&win_sync); + if(spu_ret != 0) + { MessageBox(MainWindow->getHWnd(),"Unable to initialize DirectSound","Error",MB_OK); - return -1; - } - - sndvolume = GetPrivateProfileInt("Sound","Volume",100, IniName); - SPU_SetVolume(sndvolume); - - /* Read the firmware settings from the init file */ - win_fw_config.fav_colour = GetPrivateProfileInt("Firmware","favColor", 10, IniName); - win_fw_config.birth_month = GetPrivateProfileInt("Firmware","bMonth", 7, IniName); - win_fw_config.birth_day = GetPrivateProfileInt("Firmware","bDay", 15, IniName); - win_fw_config.language = GetPrivateProfileInt("Firmware","Language", 1, IniName); - - { - /* - * Read in the nickname and message. - * Convert the strings into Unicode UTF-16 characters. - */ - char temp_str[27]; - int char_index; - GetPrivateProfileString("Firmware","nickName", "yopyop", temp_str, 11, IniName); - win_fw_config.nickname_len = strlen( temp_str); - - if ( win_fw_config.nickname_len == 0) { - strcpy( temp_str, "yopyop"); - win_fw_config.nickname_len = strlen( temp_str); - } - - for ( char_index = 0; char_index < win_fw_config.nickname_len; char_index++) { - win_fw_config.nickname[char_index] = temp_str[char_index]; - } - - GetPrivateProfileString("Firmware","Message", "DeSmuME makes you happy!", temp_str, 27, IniName); - win_fw_config.message_len = strlen( temp_str); - for ( char_index = 0; char_index < win_fw_config.message_len; char_index++) { - win_fw_config.message[char_index] = temp_str[char_index]; - } - } - - /* Create the dummy firmware */ - NDS_CreateDummyFirmware( &win_fw_config); - - //runthread_ready = CreateEvent(NULL,TRUE,FALSE,0); - //runthread = CreateThread(NULL, 0, run, NULL, 0, &threadID); - - //wait for the run thread to signal that it is initialized and ready to run - //WaitForSingleObject(runthread_ready,INFINITE); - - // Make sure any quotes from lpszArgument are removed - if (lpszArgument[0] == '\"') - sscanf(lpszArgument, "\"%[^\"]\"", lpszArgument); - - if(LoadROM(lpszArgument, bad_glob_cflash_disk_image_file)) - { - EnableMenuItem(menu, IDM_EXEC, MF_GRAYED); - EnableMenuItem(menu, IDM_PAUSE, MF_ENABLED); - EnableMenuItem(menu, IDM_RESET, MF_ENABLED); - EnableMenuItem(menu, IDM_GAME_INFO, MF_ENABLED); - EnableMenuItem(menu, IDM_IMPORTBACKUPMEMORY, MF_ENABLED); - romloaded = TRUE; - NDS_UnPause(); - } - else - { - EnableMenuItem(menu, IDM_EXEC, MF_ENABLED); - EnableMenuItem(menu, IDM_PAUSE, MF_GRAYED); - EnableMenuItem(menu, IDM_RESET, MF_GRAYED); - EnableMenuItem(menu, IDM_GAME_INFO, MF_GRAYED); - EnableMenuItem(menu, IDM_IMPORTBACKUPMEMORY, MF_GRAYED); - } - + return -1; + } + + sndvolume = GetPrivateProfileInt("Sound","Volume",100, IniName); + SPU_SetVolume(sndvolume); + + /* Read the firmware settings from the init file */ + win_fw_config.fav_colour = GetPrivateProfileInt("Firmware","favColor", 10, IniName); + win_fw_config.birth_month = GetPrivateProfileInt("Firmware","bMonth", 7, IniName); + win_fw_config.birth_day = GetPrivateProfileInt("Firmware","bDay", 15, IniName); + win_fw_config.language = GetPrivateProfileInt("Firmware","Language", 1, IniName); + + { + /* + * Read in the nickname and message. + * Convert the strings into Unicode UTF-16 characters. + */ + char temp_str[27]; + int char_index; + GetPrivateProfileString("Firmware","nickName", "yopyop", temp_str, 11, IniName); + win_fw_config.nickname_len = strlen( temp_str); + + if ( win_fw_config.nickname_len == 0) { + strcpy( temp_str, "yopyop"); + win_fw_config.nickname_len = strlen( temp_str); + } + + for ( char_index = 0; char_index < win_fw_config.nickname_len; char_index++) { + win_fw_config.nickname[char_index] = temp_str[char_index]; + } + + GetPrivateProfileString("Firmware","Message", "DeSmuME makes you happy!", temp_str, 27, IniName); + win_fw_config.message_len = strlen( temp_str); + for ( char_index = 0; char_index < win_fw_config.message_len; char_index++) { + win_fw_config.message[char_index] = temp_str[char_index]; + } + } + + /* Create the dummy firmware */ + NDS_CreateDummyFirmware( &win_fw_config); + + //runthread_ready = CreateEvent(NULL,TRUE,FALSE,0); + //runthread = CreateThread(NULL, 0, run, NULL, 0, &threadID); + + //wait for the run thread to signal that it is initialized and ready to run + //WaitForSingleObject(runthread_ready,INFINITE); + + // Make sure any quotes from lpszArgument are removed + if (lpszArgument[0] == '\"') + sscanf(lpszArgument, "\"%[^\"]\"", lpszArgument); + + if(LoadROM(lpszArgument, bad_glob_cflash_disk_image_file)) + { + EnableMenuItem(menu, IDM_EXEC, MF_GRAYED); + EnableMenuItem(menu, IDM_PAUSE, MF_ENABLED); + EnableMenuItem(menu, IDM_RESET, MF_ENABLED); + EnableMenuItem(menu, IDM_GAME_INFO, MF_ENABLED); + EnableMenuItem(menu, IDM_IMPORTBACKUPMEMORY, MF_ENABLED); + romloaded = TRUE; + NDS_UnPause(); + } + else + { + EnableMenuItem(menu, IDM_EXEC, MF_ENABLED); + EnableMenuItem(menu, IDM_PAUSE, MF_GRAYED); + EnableMenuItem(menu, IDM_RESET, MF_GRAYED); + EnableMenuItem(menu, IDM_GAME_INFO, MF_GRAYED); + EnableMenuItem(menu, IDM_IMPORTBACKUPMEMORY, MF_GRAYED); + } + MainWindow->checkMenu(IDC_SAVETYPE1, MF_BYCOMMAND | MF_CHECKED); 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->Show(SW_NORMAL); - run(0); - DRV_AviEnd(); - - //------SHUTDOWN - -#ifdef DEBUG - LogStop(); -#endif - if (input!=NULL) delete input; + + MainWindow->Show(SW_NORMAL); + run(0); + DRV_AviEnd(); + + //------SHUTDOWN + +#ifdef DEBUG + LogStop(); +#endif + if (input!=NULL) delete input; if (ViewLights!=NULL) delete ViewLights; if (ViewMatrices!=NULL) delete ViewMatrices; if (ViewOAM!=NULL) delete ViewOAM; @@ -1244,83 +1244,83 @@ delete MainWindow; - CloseConsole(); - - return 0; -} - -void GetWndRect(HWND hwnd) -{ - POINT ptClient; - RECT rc; - - GetClientRect(hwnd,&rc); - ptClient.x=rc.left; - ptClient.y=rc.top; - ClientToScreen(hwnd,&ptClient); - MainWindowRect.left=ptClient.x; - MainWindowRect.top=ptClient.y; - ptClient.x=rc.right; - ptClient.y=rc.bottom; - ClientToScreen(hwnd,&ptClient); - MainWindowRect.right=ptClient.x; - MainWindowRect.bottom=ptClient.y; -} - -//======================================================================================== + CloseConsole(); + + return 0; +} + +void GetWndRect(HWND hwnd) +{ + POINT ptClient; + RECT rc; + + GetClientRect(hwnd,&rc); + ptClient.x=rc.left; + ptClient.y=rc.top; + ClientToScreen(hwnd,&ptClient); + MainWindowRect.left=ptClient.x; + MainWindowRect.top=ptClient.y; + ptClient.x=rc.right; + ptClient.y=rc.bottom; + ClientToScreen(hwnd,&ptClient); + MainWindowRect.right=ptClient.x; + MainWindowRect.bottom=ptClient.y; +} + +//=========================================... [truncated message content] |
From: <ade...@us...> - 2008-11-04 01:53:55
|
Revision: 1075 http://desmume.svn.sourceforge.net/desmume/?rev=1075&view=rev Author: adelikat Date: 2008-11-04 01:53:52 +0000 (Tue, 04 Nov 2008) Log Message: ----------- Windows - If the game is paused, savestate will not unpause automatically Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2008-11-03 14:53:20 UTC (rev 1074) +++ trunk/desmume/src/windows/main.cpp 2008-11-04 01:53:52 UTC (rev 1075) @@ -829,9 +829,14 @@ void StateSaveSlot(int num) { - NDS_Pause(); - savestate_slot(num); - NDS_UnPause(); + if (!paused) + { + NDS_Pause(); + savestate_slot(num); + NDS_UnPause(); + } + else + savestate_slot(num); } void StateLoadSlot(int num) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ade...@us...> - 2008-11-09 21:27:08
|
Revision: 1098 http://desmume.svn.sourceforge.net/desmume/?rev=1098&view=rev Author: adelikat Date: 2008-11-09 21:27:03 +0000 (Sun, 09 Nov 2008) Log Message: ----------- Windows - added a general messages display function. Savestate loaded/saved messages now displayed when saving states. Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2008-11-09 20:12:51 UTC (rev 1097) +++ trunk/desmume/src/windows/main.cpp 2008-11-09 21:27:03 UTC (rev 1098) @@ -28,6 +28,7 @@ #include <commdlg.h> #include <stdio.h> #include <string> +#include <sstream> #include "CWindow.h" #include "../MMU.h" #include "../armcpu.h" @@ -176,8 +177,9 @@ bool FpsDisplay = false; unsigned short windowSize = 0; -unsigned int lastSaveState = 0; //Keeps track of last savestate used for quick save/load functions -std::string MessageToDisplay = ""; //temp variable to store message that will be displayed via DisplayMessage function +unsigned int lastSaveState = 0; //Keeps track of last savestate used for quick save/load functions +std::stringstream MessageToDisplay; //temp variable to store message that will be displayed via DisplayMessage function +int displayMessageCounter = 0; //Counter to keep track with how long to display messages on screen /* the firmware settings */ struct NDS_fw_config_data win_fw_config; @@ -641,6 +643,34 @@ } } +void DisplayMessage() +{ + if (displayMessageCounter) + { + //By using stringstream, it leaves open the possibility to keep a series of message in queue + displayMessageCounter--; + osd->addFixed(0, 40, "%s",MessageToDisplay.str().c_str()); + } +} + +void SaveStateMessages(int slotnum, int whichMessage) +{ + MessageToDisplay.str(""); //Clear previous message + displayMessageCounter = 120; + switch (whichMessage) //Switch statement used so that future case additions can be made + { + case 0: //State saved + MessageToDisplay << "State " << slotnum << " saved."; + break; + case 1: + MessageToDisplay << "State " << slotnum << " loaded."; + break; + default: + break; + } + //DisplayMessage(); +} + DWORD WINAPI run( LPVOID lpParameter) { char txt[80]; @@ -799,7 +829,7 @@ } frameCounter++; if (frameCounterDisplay) osd->addFixed(0, 25, "%d",frameCounter); - + DisplayMessage(); CheckMessages(); } @@ -836,18 +866,24 @@ if (!paused) { NDS_Pause(); - savestate_slot(num); + savestate_slot(num); //Savestate NDS_UnPause(); } else - savestate_slot(num); + savestate_slot(num); //Savestate + + lastSaveState = num; //Set last savestate used + SaveStateMessages(num, 0); //Display state loaded message } void StateLoadSlot(int num) { BOOL wasPaused = paused; NDS_Pause(); - loadstate_slot(num); + loadstate_slot(num); //Loadstate + lastSaveState = num; //Set last savestate used + SaveStateMessages(num, 1); //Display state loaded message + if(!wasPaused) NDS_UnPause(); else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ade...@us...> - 2008-11-09 22:22:06
|
Revision: 1099 http://desmume.svn.sourceforge.net/desmume/?rev=1099&view=rev Author: adelikat Date: 2008-11-09 21:33:03 +0000 (Sun, 09 Nov 2008) Log Message: ----------- Windows - Added saveslot selected to messages Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2008-11-09 21:27:03 UTC (rev 1098) +++ trunk/desmume/src/windows/main.cpp 2008-11-09 21:33:03 UTC (rev 1099) @@ -657,14 +657,16 @@ { MessageToDisplay.str(""); //Clear previous message displayMessageCounter = 120; - switch (whichMessage) //Switch statement used so that future case additions can be made + switch (whichMessage) { case 0: //State saved MessageToDisplay << "State " << slotnum << " saved."; break; - case 1: + case 1: //State loaded MessageToDisplay << "State " << slotnum << " loaded."; break; + case 2: //Save slot selected + MessageToDisplay << "State " << slotnum << " selected."; default: break; } @@ -1827,31 +1829,41 @@ //Save slot selection case ACCEL_0: lastSaveState = 0; + SaveStateMessages(0,2); return 0; case ACCEL_1: lastSaveState = 1; + SaveStateMessages(1,2); return 0; case ACCEL_2: lastSaveState = 2; + SaveStateMessages(2,2); return 0; case ACCEL_3: lastSaveState = 3; + SaveStateMessages(3,2); return 0; case ACCEL_4: lastSaveState = 4; + SaveStateMessages(4,2); return 0; case ACCEL_5: lastSaveState = 5; + SaveStateMessages(5,2); case ACCEL_6: lastSaveState = 6; + SaveStateMessages(6,2); return 0; case ACCEL_7: lastSaveState = 7; + SaveStateMessages(7,2); case ACCEL_8: lastSaveState = 8; + SaveStateMessages(8,2); return 0; case ACCEL_9: lastSaveState = 9; + SaveStateMessages(9,2); return 0; case IDM_IMPORTBACKUPMEMORY: { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mta...@us...> - 2008-11-15 15:56:07
|
Revision: 1123 http://desmume.svn.sourceforge.net/desmume/?rev=1123&view=rev Author: mtabachenko Date: 2008-11-15 15:56:03 +0000 (Sat, 15 Nov 2008) Log Message: ----------- winport: - fix crash (RecentROM) Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2008-11-15 13:57:54 UTC (rev 1122) +++ trunk/desmume/src/windows/main.cpp 2008-11-15 15:56:03 UTC (rev 1123) @@ -504,6 +504,7 @@ //UpdateRecentRoms will always call this //This will be always called by GetRecentRoms on DesMume startup + if (RecentRoms.size() == 0) return; //---------------------------------------------------------------------- //Get Menu item info @@ -1035,7 +1036,7 @@ BOOL LoadROM(char * filename, const char *cflash_disk_image) { NDS_Pause(); - if (strcmp(filename,"")!=0) printlog("Atetmpting to load ROM: %s\n",filename); + if (strcmp(filename,"")!=0) printlog("Attempting to load ROM: %s\n",filename); if (NDS_LoadROM(filename, backupmemorytype, backupmemorysize, cflash_disk_image) > 0) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ade...@us...> - 2008-11-19 14:28:53
|
Revision: 1140 http://desmume.svn.sourceforge.net/desmume/?rev=1140&view=rev Author: adelikat Date: 2008-11-19 14:28:49 +0000 (Wed, 19 Nov 2008) Log Message: ----------- Win32 - frameCounter resets when loading a new rom. Removed some of my debugging printlog statements Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2008-11-19 07:56:57 UTC (rev 1139) +++ trunk/desmume/src/windows/main.cpp 2008-11-19 14:28:49 UTC (rev 1140) @@ -543,7 +543,7 @@ moo.fType = 0; moo.wID = baseid + x; moo.dwTypeData = (LPSTR)tmp.c_str(); - printlog("Inserting: %s\n",tmp.c_str()); //Debug + //printlog("Inserting: %s\n",tmp.c_str()); //Debug InsertMenuItem(recentromsmenu, 0, 1, &moo); } //----------------------------------------------------------------------- @@ -584,8 +584,8 @@ RecentRoms.pop_back(); //Debug - for (int x = 0; x < RecentRoms.size(); x++) - printlog("Recent ROM: %s\n",RecentRoms[x].c_str()); + //for (int x = 0; x < RecentRoms.size(); x++) + // printlog("Recent ROM: %s\n",RecentRoms[x].c_str()); UpdateRecentRomsMenu(); } @@ -1047,6 +1047,7 @@ if (NDS_LoadROM(filename, backupmemorytype, backupmemorysize, cflash_disk_image) > 0) { printlog("Loading %s was successful\n",filename); + frameCounter=0; UpdateRecentRoms(filename); return TRUE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2008-12-19 16:27:07
|
Revision: 1207 http://desmume.svn.sourceforge.net/desmume/?rev=1207&view=rev Author: luigi__ Date: 2008-12-19 16:27:01 +0000 (Fri, 19 Dec 2008) Log Message: ----------- Added the flag OFN_NOCHANGEDIR when opening a file (prevents changing the working directory). This prevents the config file from being exported to the ROM folder, resulting in config saving problems. Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2008-12-19 15:33:06 UTC (rev 1206) +++ trunk/desmume/src/windows/main.cpp 2008-12-19 16:27:01 UTC (rev 1207) @@ -1,73 +1,73 @@ -/* Copyright (C) 2006 yopyop - yop...@if... - yopyop156.ifrance.com - - Copyright 2006 Theo Berkau - - This file is part of DeSmuME - - DeSmuME is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - DeSmuME is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with DeSmuME; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ -#include "windriver.h" -#include <algorithm> -#include <shellapi.h> -#include <Winuser.h> -#include <commctrl.h> -#include <commdlg.h> -#include <stdio.h> +/* Copyright (C) 2006 yopyop + yop...@if... + yopyop156.ifrance.com + + Copyright 2006 Theo Berkau + + This file is part of DeSmuME + + DeSmuME is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DeSmuME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DeSmuME; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +#include "windriver.h" +#include <algorithm> +#include <shellapi.h> +#include <Winuser.h> +#include <commctrl.h> +#include <commdlg.h> +#include <stdio.h> #include <string> #include <vector> #include <sstream> -#include "CWindow.h" -#include "../MMU.h" -#include "../armcpu.h" -#include "../NDSSystem.h" -#include "../debug.h" -#include "../saves.h" -#include "../cflash.h" -#include "resource.h" -#include "memView.h" -#include "disView.h" -#include "ginfo.h" -#include "IORegView.h" -#include "palView.h" -#include "tileView.h" -#include "oamView.h" -#include "mapview.h" -#include "matrixview.h" -#include "lightview.h" -#include "inputdx.h" -#include "FirmConfig.h" -#include "AboutBox.h" -#include "OGLRender.h" -#include "../gfx3d.h" -#include "../render3D.h" -#include "../gdbstub.h" -#include "colorctrl.h" -#include "console.h" -#include "throttle.h" - +#include "CWindow.h" +#include "../MMU.h" +#include "../armcpu.h" +#include "../NDSSystem.h" +#include "../debug.h" +#include "../saves.h" +#include "../cflash.h" +#include "resource.h" +#include "memView.h" +#include "disView.h" +#include "ginfo.h" +#include "IORegView.h" +#include "palView.h" +#include "tileView.h" +#include "oamView.h" +#include "mapview.h" +#include "matrixview.h" +#include "lightview.h" +#include "inputdx.h" +#include "FirmConfig.h" +#include "AboutBox.h" +#include "OGLRender.h" +#include "../gfx3d.h" +#include "../render3D.h" +#include "../gdbstub.h" +#include "colorctrl.h" +#include "console.h" +#include "throttle.h" + #include "../common.h" -#include "snddx.h" - -#include "directx/ddraw.h" - -#define GPU3D_NULL 0 -#define GPU3D_OPENGL 1 +#include "snddx.h" +#include "directx/ddraw.h" + +#define GPU3D_NULL 0 +#define GPU3D_OPENGL 1 + using namespace std; //----Recent ROMs menu globals---------- @@ -84,51 +84,51 @@ void DRV_AviEnd(); void DRV_AviSoundUpdate(void* soundData, int soundLen); bool DRV_AviIsRecording(); -void DRV_AviVideoUpdate(const u16* buffer); -//------ - -CRITICAL_SECTION win_sync; -volatile int win_sound_samplecounter = 0; - -Lock::Lock() { EnterCriticalSection(&win_sync); } -Lock::~Lock() { LeaveCriticalSection(&win_sync); } - -//===================== DirectDraw vars -LPDIRECTDRAW7 lpDDraw=NULL; -LPDIRECTDRAWSURFACE7 lpPrimarySurface=NULL; -LPDIRECTDRAWSURFACE7 lpBackSurface=NULL; -DDSURFACEDESC2 ddsd; -LPDIRECTDRAWCLIPPER lpDDClipPrimary=NULL; -LPDIRECTDRAWCLIPPER lpDDClipBack=NULL; - -//===================== Input vars -INPUTCLASS *input = NULL; - -/* The compact flash disk image file */ -static const char *bad_glob_cflash_disk_image_file; -static char cflash_filename_buffer[512]; - -/* Declare Windows procedure */ -LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); - -/* Make the class name into a global variable */ -char SavName[MAX_PATH] = ""; -char ImportSavName[MAX_PATH] = ""; -char szClassName[ ] = "DeSmuME"; -int romnum = 0; - -DWORD threadID; - +void DRV_AviVideoUpdate(const u16* buffer); +//------ + +CRITICAL_SECTION win_sync; +volatile int win_sound_samplecounter = 0; + +Lock::Lock() { EnterCriticalSection(&win_sync); } +Lock::~Lock() { LeaveCriticalSection(&win_sync); } + +//===================== DirectDraw vars +LPDIRECTDRAW7 lpDDraw=NULL; +LPDIRECTDRAWSURFACE7 lpPrimarySurface=NULL; +LPDIRECTDRAWSURFACE7 lpBackSurface=NULL; +DDSURFACEDESC2 ddsd; +LPDIRECTDRAWCLIPPER lpDDClipPrimary=NULL; +LPDIRECTDRAWCLIPPER lpDDClipBack=NULL; + +//===================== Input vars +INPUTCLASS *input = NULL; + +/* The compact flash disk image file */ +static const char *bad_glob_cflash_disk_image_file; +static char cflash_filename_buffer[512]; + +/* Declare Windows procedure */ +LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); + +/* Make the class name into a global variable */ +char SavName[MAX_PATH] = ""; +char ImportSavName[MAX_PATH] = ""; +char szClassName[ ] = "DeSmuME"; +int romnum = 0; + +DWORD threadID; + WINCLASS *MainWindow=NULL; //HWND hwnd; //HDC hdc; -HACCEL hAccel; +HACCEL hAccel; HINSTANCE hAppInst; -RECT MainWindowRect; +RECT MainWindowRect; int WndX = 0; int WndY = 0; - + //=========================== view tools TOOLSCLASS *ViewDisasm_ARM7 = NULL; TOOLSCLASS *ViewDisasm_ARM9 = NULL; @@ -143,340 +143,340 @@ TOOLSCLASS *ViewLights = NULL; -volatile BOOL execute = FALSE; -volatile BOOL paused = TRUE; -u32 glock = 0; - -BOOL click = FALSE; - -BOOL finished = FALSE; -BOOL romloaded = FALSE; - +volatile BOOL execute = FALSE; +volatile BOOL paused = TRUE; +u32 glock = 0; + +BOOL click = FALSE; + +BOOL finished = FALSE; +BOOL romloaded = FALSE; + void SetRotate(HWND hwnd, int rot); - -BOOL ForceRatio = TRUE; -float DefaultWidth; -float DefaultHeight; -float widthTradeOff; -float heightTradeOff; - -HMENU menu; - + +BOOL ForceRatio = TRUE; +float DefaultWidth; +float DefaultHeight; +float widthTradeOff; +float heightTradeOff; + +HMENU menu; + //static char IniName[MAX_PATH]; -int sndcoretype=SNDCORE_DIRECTX; -int sndbuffersize=735*4; -int sndvolume=100; - -SoundInterface_struct *SNDCoreList[] = { -&SNDDummy, -&SNDFile, -&SNDDIRECTX, -NULL -}; - -GPU3DInterface *core3DList[] = { -&gpu3DNull, -&gpu3Dgl, -}; - -int autoframeskipenab=1; -int frameskiprate=0; -int emu_paused = 0; -static int backupmemorytype=MC_TYPE_AUTODETECT; -static u32 backupmemorysize=1; -unsigned int frameCounter=0; -bool frameAdvance = false; -bool frameCounterDisplay = false; +int sndcoretype=SNDCORE_DIRECTX; +int sndbuffersize=735*4; +int sndvolume=100; + +SoundInterface_struct *SNDCoreList[] = { +&SNDDummy, +&SNDFile, +&SNDDIRECTX, +NULL +}; + +GPU3DInterface *core3DList[] = { +&gpu3DNull, +&gpu3Dgl, +}; + +int autoframeskipenab=1; +int frameskiprate=0; +int emu_paused = 0; +static int backupmemorytype=MC_TYPE_AUTODETECT; +static u32 backupmemorysize=1; +unsigned int frameCounter=0; +bool frameAdvance = false; +bool frameCounterDisplay = false; bool FpsDisplay = false; -unsigned short windowSize = 0; - +unsigned short windowSize = 0; + unsigned int lastSaveState = 0; //Keeps track of last savestate used for quick save/load functions stringstream MessageToDisplay; //temp variable to store message that will be displayed via DisplayMessage function int displayMessageCounter = 0; //Counter to keep track with how long to display messages on screen -/* the firmware settings */ -struct NDS_fw_config_data win_fw_config; - - -LRESULT CALLBACK SoundSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, - LPARAM lParam); - -struct configured_features { - u16 arm9_gdb_port; - u16 arm7_gdb_port; - - const char *cflash_disk_image_file; -}; - -static void -init_configured_features( struct configured_features *config) { - config->arm9_gdb_port = 0; - config->arm7_gdb_port = 0; - - config->cflash_disk_image_file = NULL; -} - - -static int -fill_configured_features( struct configured_features *config, LPSTR lpszArgument) { - int good_args = 0; - LPTSTR cmd_line; - LPWSTR *argv; - int argc; - - argv = CommandLineToArgvW( GetCommandLineW(), &argc); - - if ( argv != NULL) { - int i; - good_args = 1; - for ( i = 1; i < argc && good_args; i++) { - if ( wcsncmp( argv[i], L"--arm9gdb=", 10) == 0) { - wchar_t *end_char; - unsigned long port_num = wcstoul( &argv[i][10], &end_char, 10); - - if ( port_num > 0 && port_num < 65536) { - config->arm9_gdb_port = port_num; - } - else { - MessageBox(NULL,"ARM9 GDB stub port must be in the range 1 to 65535","Error",MB_OK); - good_args = 0; - } - } - else if ( wcsncmp( argv[i], L"--arm7gdb=", 10) == 0) { - wchar_t *end_char; - unsigned long port_num = wcstoul( &argv[i][10], &end_char, 10); - - if ( port_num > 0 && port_num < 65536) { - config->arm7_gdb_port = port_num; - } - else { - MessageBox(NULL,"ARM9 GDB stub port must be in the range 1 to 65535","Error",MB_OK); - good_args = 0; - } - } - else if ( wcsncmp( argv[i], L"--cflash=", 9) == 0) { - if ( config->cflash_disk_image_file == NULL) { - size_t convert_count = wcstombs( &cflash_filename_buffer[0], &argv[i][9], 512); - if ( convert_count > 0) { - config->cflash_disk_image_file = cflash_filename_buffer; - } - } - else { - MessageBox(NULL,"CFlash disk image file already set","Error",MB_OK); - good_args = 0; - } - } - } - LocalFree( argv); - } - - return good_args; -} - -// Rotation definitions -short GPU_rotation = 0; -DWORD GPU_width = 256; -DWORD GPU_height = 192*2; -DWORD rotationstartscan = 192; -DWORD rotationscanlines = 192*2; - -void SetWindowClientSize(HWND hwnd, int cx, int cy) //found at: http://blogs.msdn.com/oldnewthing/archive/2003/09/11/54885.aspx -{ - HMENU hmenu = GetMenu(hwnd); - RECT rcWindow = { 0, 0, cx, cy }; - - /* - * First convert the client rectangle to a window rectangle the - * menu-wrap-agnostic way. - */ - AdjustWindowRect(&rcWindow, WS_CAPTION| WS_SYSMENU |WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, hmenu != NULL); - - /* - * If there is a menu, then check how much wrapping occurs - * when we set a window to the width specified by AdjustWindowRect - * and an infinite amount of height. An infinite height allows - * us to see every single menu wrap. - */ - if (hmenu) { - RECT rcTemp = rcWindow; - rcTemp.bottom = 0x7FFF; /* "Infinite" height */ - SendMessage(hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)&rcTemp); - - /* - * Adjust our previous calculation to compensate for menu - * wrapping. - */ - rcWindow.bottom += rcTemp.top; - } +/* the firmware settings */ +struct NDS_fw_config_data win_fw_config; + + +LRESULT CALLBACK SoundSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, + LPARAM lParam); + +struct configured_features { + u16 arm9_gdb_port; + u16 arm7_gdb_port; + + const char *cflash_disk_image_file; +}; + +static void +init_configured_features( struct configured_features *config) { + config->arm9_gdb_port = 0; + config->arm7_gdb_port = 0; + + config->cflash_disk_image_file = NULL; +} + + +static int +fill_configured_features( struct configured_features *config, LPSTR lpszArgument) { + int good_args = 0; + LPTSTR cmd_line; + LPWSTR *argv; + int argc; + + argv = CommandLineToArgvW( GetCommandLineW(), &argc); + + if ( argv != NULL) { + int i; + good_args = 1; + for ( i = 1; i < argc && good_args; i++) { + if ( wcsncmp( argv[i], L"--arm9gdb=", 10) == 0) { + wchar_t *end_char; + unsigned long port_num = wcstoul( &argv[i][10], &end_char, 10); + + if ( port_num > 0 && port_num < 65536) { + config->arm9_gdb_port = port_num; + } + else { + MessageBox(NULL,"ARM9 GDB stub port must be in the range 1 to 65535","Error",MB_OK); + good_args = 0; + } + } + else if ( wcsncmp( argv[i], L"--arm7gdb=", 10) == 0) { + wchar_t *end_char; + unsigned long port_num = wcstoul( &argv[i][10], &end_char, 10); + + if ( port_num > 0 && port_num < 65536) { + config->arm7_gdb_port = port_num; + } + else { + MessageBox(NULL,"ARM9 GDB stub port must be in the range 1 to 65535","Error",MB_OK); + good_args = 0; + } + } + else if ( wcsncmp( argv[i], L"--cflash=", 9) == 0) { + if ( config->cflash_disk_image_file == NULL) { + size_t convert_count = wcstombs( &cflash_filename_buffer[0], &argv[i][9], 512); + if ( convert_count > 0) { + config->cflash_disk_image_file = cflash_filename_buffer; + } + } + else { + MessageBox(NULL,"CFlash disk image file already set","Error",MB_OK); + good_args = 0; + } + } + } + LocalFree( argv); + } + + return good_args; +} + +// Rotation definitions +short GPU_rotation = 0; +DWORD GPU_width = 256; +DWORD GPU_height = 192*2; +DWORD rotationstartscan = 192; +DWORD rotationscanlines = 192*2; + +void SetWindowClientSize(HWND hwnd, int cx, int cy) //found at: http://blogs.msdn.com/oldnewthing/archive/2003/09/11/54885.aspx +{ + HMENU hmenu = GetMenu(hwnd); + RECT rcWindow = { 0, 0, cx, cy }; + + /* + * First convert the client rectangle to a window rectangle the + * menu-wrap-agnostic way. + */ + AdjustWindowRect(&rcWindow, WS_CAPTION| WS_SYSMENU |WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, hmenu != NULL); + + /* + * If there is a menu, then check how much wrapping occurs + * when we set a window to the width specified by AdjustWindowRect + * and an infinite amount of height. An infinite height allows + * us to see every single menu wrap. + */ + if (hmenu) { + RECT rcTemp = rcWindow; + rcTemp.bottom = 0x7FFF; /* "Infinite" height */ + SendMessage(hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)&rcTemp); + + /* + * Adjust our previous calculation to compensate for menu + * wrapping. + */ + rcWindow.bottom += rcTemp.top; + } SetWindowPos(hwnd, NULL, WndX, WndY, rcWindow.right - rcWindow.left, - rcWindow.bottom - rcWindow.top, SWP_NOMOVE | SWP_NOZORDER); - - if (lpBackSurface!=NULL) - { - IDirectDrawSurface7_Release(lpBackSurface); - memset(&ddsd, 0, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; - ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; - ddsd.dwWidth = cx; - ddsd.dwHeight = cy; - - IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpBackSurface, NULL); - } -} - -void ResizingLimit(int wParam, RECT *rc) -{ - u32 width = (rc->right - rc->left); - u32 height = (rc->bottom - rc->top); - - u32 minX = 256; - u32 minY = 414; - - //LOG("width=%i; height=%i\n", width, height); - - if (GPU_rotation == 90 || GPU_rotation == 270) - { - minX = 390; - minY = 272; - } - switch (wParam) - { - case WMSZ_LEFT: - { - if (width<minX) rc->left=rc->left+(width-minX); - return; - } - - case WMSZ_RIGHT: - { - if (width<minX) rc->right=rc->left+minX; - return; - } - - case WMSZ_TOP: - { - if (height<minY) rc->top=rc->top+(height-minY); - return; - } - - case WMSZ_BOTTOM: - { - if (height<minY) rc->bottom=rc->top+minY; - return; - } - - case WMSZ_TOPLEFT: - { - if (height<minY) rc->top=rc->top+(height-minY); - if (width<minX) rc->left=rc->left+(width-minX); - return; - } - case WMSZ_BOTTOMLEFT: - { - if (height<minY) rc->bottom=rc->top+minY; - if (width<minX) rc->left=rc->left+(width-minX); - return; - } - - case WMSZ_TOPRIGHT: - { - if (height<minY) rc->top=rc->top+(height-minY); - if (width<minX) rc->right=rc->left+minX; - return; - } - - case WMSZ_BOTTOMRIGHT: - { - if (height<minY) rc->bottom=rc->top+minY; - if (width<minX) rc->right=rc->left+minX; - return; - } - } - -} - -void ScaleScreen(HWND hwnd, int wParam, RECT *rc) -{ - float aspect; - u32 width; - u32 height; - u32 width2; - u32 height2; - - width = (rc->right - rc->left - widthTradeOff); - height = (rc->bottom - rc->top - heightTradeOff); - - if (width == height) return; - - if (GPU_rotation == 0 || GPU_rotation == 180) - { - aspect = DefaultWidth / DefaultHeight; - } - else - { - aspect = DefaultHeight / DefaultWidth; - } - - switch (wParam) - { - case WMSZ_LEFT: - case WMSZ_RIGHT: - { - height = (int)(width / aspect); - rc->bottom=rc->top+height+heightTradeOff; - return; - } - - case WMSZ_TOP: - case WMSZ_BOTTOM: - { - width = (int)(height * aspect); - rc->right=rc->left+width+widthTradeOff; - return; - } - - case WMSZ_TOPLEFT: - { - width = (int)(height * aspect); - rc->left=rc->right-width-widthTradeOff; - return; - } - case WMSZ_BOTTOMLEFT: - { - height = (int)(width / aspect); - rc->bottom=rc->top + height + heightTradeOff; - return; - } - - case WMSZ_TOPRIGHT: - case WMSZ_BOTTOMRIGHT: - { - width = (int)(height * aspect); - rc->right=rc->left+width+widthTradeOff; - return; - } - } -} - -void ScaleScreen(HWND hwnd, float factor) -{ - - if ((GPU_rotation==0)||(GPU_rotation==180)) - { + rcWindow.bottom - rcWindow.top, SWP_NOMOVE | SWP_NOZORDER); + + if (lpBackSurface!=NULL) + { + IDirectDrawSurface7_Release(lpBackSurface); + memset(&ddsd, 0, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); + ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; + ddsd.dwWidth = cx; + ddsd.dwHeight = cy; + + IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpBackSurface, NULL); + } +} + +void ResizingLimit(int wParam, RECT *rc) +{ + u32 width = (rc->right - rc->left); + u32 height = (rc->bottom - rc->top); + + u32 minX = 256; + u32 minY = 414; + + //LOG("width=%i; height=%i\n", width, height); + + if (GPU_rotation == 90 || GPU_rotation == 270) + { + minX = 390; + minY = 272; + } + switch (wParam) + { + case WMSZ_LEFT: + { + if (width<minX) rc->left=rc->left+(width-minX); + return; + } + + case WMSZ_RIGHT: + { + if (width<minX) rc->right=rc->left+minX; + return; + } + + case WMSZ_TOP: + { + if (height<minY) rc->top=rc->top+(height-minY); + return; + } + + case WMSZ_BOTTOM: + { + if (height<minY) rc->bottom=rc->top+minY; + return; + } + + case WMSZ_TOPLEFT: + { + if (height<minY) rc->top=rc->top+(height-minY); + if (width<minX) rc->left=rc->left+(width-minX); + return; + } + case WMSZ_BOTTOMLEFT: + { + if (height<minY) rc->bottom=rc->top+minY; + if (width<minX) rc->left=rc->left+(width-minX); + return; + } + + case WMSZ_TOPRIGHT: + { + if (height<minY) rc->top=rc->top+(height-minY); + if (width<minX) rc->right=rc->left+minX; + return; + } + + case WMSZ_BOTTOMRIGHT: + { + if (height<minY) rc->bottom=rc->top+minY; + if (width<minX) rc->right=rc->left+minX; + return; + } + } + +} + +void ScaleScreen(HWND hwnd, int wParam, RECT *rc) +{ + float aspect; + u32 width; + u32 height; + u32 width2; + u32 height2; + + width = (rc->right - rc->left - widthTradeOff); + height = (rc->bottom - rc->top - heightTradeOff); + + if (width == height) return; + + if (GPU_rotation == 0 || GPU_rotation == 180) + { + aspect = DefaultWidth / DefaultHeight; + } + else + { + aspect = DefaultHeight / DefaultWidth; + } + + switch (wParam) + { + case WMSZ_LEFT: + case WMSZ_RIGHT: + { + height = (int)(width / aspect); + rc->bottom=rc->top+height+heightTradeOff; + return; + } + + case WMSZ_TOP: + case WMSZ_BOTTOM: + { + width = (int)(height * aspect); + rc->right=rc->left+width+widthTradeOff; + return; + } + + case WMSZ_TOPLEFT: + { + width = (int)(height * aspect); + rc->left=rc->right-width-widthTradeOff; + return; + } + case WMSZ_BOTTOMLEFT: + { + height = (int)(width / aspect); + rc->bottom=rc->top + height + heightTradeOff; + return; + } + + case WMSZ_TOPRIGHT: + case WMSZ_BOTTOMRIGHT: + { + width = (int)(height * aspect); + rc->right=rc->left+width+widthTradeOff; + return; + } + } +} + +void ScaleScreen(HWND hwnd, float factor) +{ + + if ((GPU_rotation==0)||(GPU_rotation==180)) + { SetWindowPos(hwnd, NULL, WndX, WndY, widthTradeOff + DefaultWidth * factor, - heightTradeOff + DefaultHeight * factor, SWP_NOMOVE | SWP_NOZORDER); - } - else - if ((GPU_rotation==90)||(GPU_rotation==270)) - { + heightTradeOff + DefaultHeight * factor, SWP_NOMOVE | SWP_NOZORDER); + } + else + if ((GPU_rotation==90)||(GPU_rotation==270)) + { SetWindowPos(hwnd, NULL, WndX, WndY, heightTradeOff + DefaultHeight * factor, - widthTradeOff + DefaultWidth * factor, SWP_NOMOVE | SWP_NOZORDER); - } -} - + widthTradeOff + DefaultWidth * factor, SWP_NOMOVE | SWP_NOZORDER); + } +} + void translateXY(s32& x, s32& y) -{ +{ s32 tx=x, ty=y; switch(GPU_rotation) { @@ -494,21 +494,21 @@ y = (tx-192); break; } -} -// END Rotation definitions - -void UpdateRecentRomsMenu() -{ - //This function will be called to populate the Recent Menu - //The array must be in the proper order ahead of time - - //UpdateRecentRoms will always call this - //This will be always called by GetRecentRoms on DesMume startup - if (RecentRoms.size() == 0) return; - - //---------------------------------------------------------------------- - //Get Menu item info - +} +// END Rotation definitions + +void UpdateRecentRomsMenu() +{ + //This function will be called to populate the Recent Menu + //The array must be in the proper order ahead of time + + //UpdateRecentRoms will always call this + //This will be always called by GetRecentRoms on DesMume startup + if (RecentRoms.size() == 0) return; + + //---------------------------------------------------------------------- + //Get Menu item info + MENUITEMINFO moo; moo.cbSize = sizeof(moo); moo.fMask = MIIM_SUBMENU | MIIM_STATE; @@ -516,25 +516,25 @@ GetMenuItemInfo(GetSubMenu(mainMenu, 0), ID_FILE_RECENTROM, FALSE, &moo); moo.hSubMenu = recentromsmenu; moo.fState = RecentRoms[0].c_str() ? MFS_ENABLED : MFS_GRAYED; - SetMenuItemInfo(GetSubMenu(mainMenu, 0), ID_FILE_RECENTROM, FALSE, &moo); - - //----------------------------------------------------------------------- - - //----------------------------------------------------------------------- - //Clear the current menu items + SetMenuItemInfo(GetSubMenu(mainMenu, 0), ID_FILE_RECENTROM, FALSE, &moo); + + //----------------------------------------------------------------------- + + //----------------------------------------------------------------------- + //Clear the current menu items for(int x = 0; x < MAX_RECENT_ROMS; x++) { RemoveMenu(recentromsmenu, baseid + x, MF_BYCOMMAND); - } - - //----------------------------------------------------------------------- - //Update the list using RecentRoms vector - for(int x = RecentRoms.size()-1; x >= 0; x--) //Must loop in reverse order since InsertMenuItem will insert as the first on the list - { - //Let's Limit the Displayed Rom name to 128 characters - string tmp = RecentRoms[x]; + } + + //----------------------------------------------------------------------- + //Update the list using RecentRoms vector + for(int x = RecentRoms.size()-1; x >= 0; x--) //Must loop in reverse order since InsertMenuItem will insert as the first on the list + { + //Let's Limit the Displayed Rom name to 128 characters + string tmp = RecentRoms[x]; if(tmp.size()>128) - tmp = tmp.substr(0,128); + tmp = tmp.substr(0,128); moo.cbSize = sizeof(moo); moo.fMask = MIIM_DATA | MIIM_ID | MIIM_TYPE; @@ -544,248 +544,248 @@ moo.wID = baseid + x; moo.dwTypeData = (LPSTR)tmp.c_str(); //LOG("Inserting: %s\n",tmp.c_str()); //Debug - InsertMenuItem(recentromsmenu, 0, 1, &moo); - } - //----------------------------------------------------------------------- - - HWND temp = MainWindow->getHWnd(); - DrawMenuBar(temp); -} - -void UpdateRecentRoms(char* filename) -{ - //This function assumes filename is a ROM filename that was successfully loaded - - string newROM = filename; //Convert to std::string - - //-------------------------------------------------------------- - //Check to see if filename is in list - vector<string>::iterator x; - vector<string>::iterator theMatch; - bool match = false; - for (x = RecentRoms.begin(); x < RecentRoms.end(); ++x) - { - if (newROM == *x) - { - //We have a match - match = true; //Flag that we have a match - theMatch = x; //Hold on to the iterator (Note: the loop continues, so if for some reason we had a duplicate (which wouldn't happen under normal circumstances, it would pick the last one in the list) - } - } - //---------------------------------------------------------------- - //If there was a match, remove it - if (match) - RecentRoms.erase(theMatch); - - RecentRoms.insert(RecentRoms.begin(), newROM); //Add to the array - - //If over the max, we have too many, so remove the last entry - if (RecentRoms.size() == MAX_RECENT_ROMS) - RecentRoms.pop_back(); - - //Debug - //for (int x = 0; x < RecentRoms.size(); x++) - // LOG("Recent ROM: %s\n",RecentRoms[x].c_str()); - - UpdateRecentRomsMenu(); -} - -void GetRecentRoms() -{ - //This function retrieves the recent ROMs stored in the .ini file - //Then is populates the RecentRomsMenu array - //Then it calls Update RecentRomsMenu() to populate the menu - - stringstream temp; - char tempstr[256]; - - //Loops through all available recent slots - for (int x = 0; x < MAX_RECENT_ROMS; x++) - { - temp.str(""); - temp << "Recent Rom " << (x+1); - - GetPrivateProfileString("General",temp.str().c_str(),"", tempstr, 256, IniName); - if (tempstr[0]) - RecentRoms.push_back(tempstr); - } - UpdateRecentRomsMenu(); -} - -void SaveRecentRoms() -{ - //This function stores the RecentRomsMenu array to the .ini file - - stringstream temp; - - //Loops through all available recent slots - for (int x = 0; x < MAX_RECENT_ROMS; x++) - { - temp.str(""); - temp << "Recent Rom " << (x+1); - if (x < RecentRoms.size()) //If it exists in the array, save it - WritePrivateProfileString("General",temp.str().c_str(),RecentRoms[x].c_str(),IniName); - else //Else, make it empty - WritePrivateProfileString("General",temp.str().c_str(), "",IniName); - } -} - - - -int CreateDDrawBuffers() -{ - if (lpDDClipPrimary!=NULL) IDirectDraw7_Release(lpDDClipPrimary); - if (lpPrimarySurface != NULL) IDirectDraw7_Release(lpPrimarySurface); - if (lpBackSurface != NULL) IDirectDraw7_Release(lpBackSurface); - - memset(&ddsd, 0, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; - ddsd.dwFlags = DDSD_CAPS; - if (IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpPrimarySurface, NULL) != DD_OK) return -1; - - memset(&ddsd, 0, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; - ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; - - if ( (GPU_rotation == 0) || (GPU_rotation == 180) ) - { - ddsd.dwWidth = 256; - ddsd.dwHeight = 384; - } - else - if ( (GPU_rotation == 90) || (GPU_rotation == 270) ) - { - ddsd.dwWidth = 384; - ddsd.dwHeight = 256; - } - - if (IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpBackSurface, NULL) != DD_OK) return -2; - - if (IDirectDraw7_CreateClipper(lpDDraw, 0, &lpDDClipPrimary, NULL) != DD_OK) return -3; - + InsertMenuItem(recentromsmenu, 0, 1, &moo); + } + //----------------------------------------------------------------------- + + HWND temp = MainWindow->getHWnd(); + DrawMenuBar(temp); +} + +void UpdateRecentRoms(char* filename) +{ + //This function assumes filename is a ROM filename that was successfully loaded + + string newROM = filename; //Convert to std::string + + //-------------------------------------------------------------- + //Check to see if filename is in list + vector<string>::iterator x; + vector<string>::iterator theMatch; + bool match = false; + for (x = RecentRoms.begin(); x < RecentRoms.end(); ++x) + { + if (newROM == *x) + { + //We have a match + match = true; //Flag that we have a match + theMatch = x; //Hold on to the iterator (Note: the loop continues, so if for some reason we had a duplicate (which wouldn't happen under normal circumstances, it would pick the last one in the list) + } + } + //---------------------------------------------------------------- + //If there was a match, remove it + if (match) + RecentRoms.erase(theMatch); + + RecentRoms.insert(RecentRoms.begin(), newROM); //Add to the array + + //If over the max, we have too many, so remove the last entry + if (RecentRoms.size() == MAX_RECENT_ROMS) + RecentRoms.pop_back(); + + //Debug + //for (int x = 0; x < RecentRoms.size(); x++) + // LOG("Recent ROM: %s\n",RecentRoms[x].c_str()); + + UpdateRecentRomsMenu(); +} + +void GetRecentRoms() +{ + //This function retrieves the recent ROMs stored in the .ini file + //Then is populates the RecentRomsMenu array + //Then it calls Update RecentRomsMenu() to populate the menu + + stringstream temp; + char tempstr[256]; + + //Loops through all available recent slots + for (int x = 0; x < MAX_RECENT_ROMS; x++) + { + temp.str(""); + temp << "Recent Rom " << (x+1); + + GetPrivateProfileString("General",temp.str().c_str(),"", tempstr, 256, IniName); + if (tempstr[0]) + RecentRoms.push_back(tempstr); + } + UpdateRecentRomsMenu(); +} + +void SaveRecentRoms() +{ + //This function stores the RecentRomsMenu array to the .ini file + + stringstream temp; + + //Loops through all available recent slots + for (int x = 0; x < MAX_RECENT_ROMS; x++) + { + temp.str(""); + temp << "Recent Rom " << (x+1); + if (x < RecentRoms.size()) //If it exists in the array, save it + WritePrivateProfileString("General",temp.str().c_str(),RecentRoms[x].c_str(),IniName); + else //Else, make it empty + WritePrivateProfileString("General",temp.str().c_str(), "",IniName); + } +} + + + +int CreateDDrawBuffers() +{ + if (lpDDClipPrimary!=NULL) IDirectDraw7_Release(lpDDClipPrimary); + if (lpPrimarySurface != NULL) IDirectDraw7_Release(lpPrimarySurface); + if (lpBackSurface != NULL) IDirectDraw7_Release(lpBackSurface); + + memset(&ddsd, 0, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); + ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; + ddsd.dwFlags = DDSD_CAPS; + if (IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpPrimarySurface, NULL) != DD_OK) return -1; + + memset(&ddsd, 0, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); + ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; + + if ( (GPU_rotation == 0) || (GPU_rotation == 180) ) + { + ddsd.dwWidth = 256; + ddsd.dwHeight = 384; + } + else + if ( (GPU_rotation == 90) || (GPU_rotation == 270) ) + { + ddsd.dwWidth = 384; + ddsd.dwHeight = 256; + } + + if (IDirectDraw7_CreateSurface(lpDDraw, &ddsd, &lpBackSurface, NULL) != DD_OK) return -2; + + if (IDirectDraw7_CreateClipper(lpDDraw, 0, &lpDDClipPrimary, NULL) != DD_OK) return -3; + if (IDirectDrawClipper_SetHWnd(lpDDClipPrimary, 0, MainWindow->getHWnd()) != DD_OK) return -4; - if (IDirectDrawSurface7_SetClipper(lpPrimarySurface, lpDDClipPrimary) != DD_OK) return -5; - - return 1; -} - - -void Display() -{ - int res; - memset(&ddsd, 0, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - ddsd.dwFlags=DDSD_ALL; - res=IDirectDrawSurface7_Lock(lpBackSurface,NULL,&ddsd,DDLOCK_WAIT, NULL); - - if (res == DD_OK) - { - char* buffer = (char*)ddsd.lpSurface; - - int i, j, sz=256*sizeof(u32); - if (ddsd.ddpfPixelFormat.dwRGBBitCount>16) - { - u16 *tmpGPU_Screen_src=(u16*)GPU_screen; - u32 tmpGPU_screen[98304]; - for(i=0; i<98304; i++) - tmpGPU_screen[i]= (((tmpGPU_Screen_src[i]>>10)&0x1F)<<3)| - (((tmpGPU_Screen_src[i]>>5)&0x1F)<<11)| - (((tmpGPU_Screen_src[i])&0x1F)<<19); - switch (GPU_rotation) - { - case 0: - { - for (i = 0; i < 98304; i+=256) //384*256 - { - memcpy(buffer,tmpGPU_screen+i,sz); - buffer += ddsd.lPitch; - } - break; - } - case 90: - { - u32 start; - for (j=0; j<256; j++) - { - start=98304+j; - for (i=0; i<384; i++) - { - start-=256; - ((u32*)buffer)[i]=((u32 *)tmpGPU_screen)[start]; - } - buffer += ddsd.lPitch; - } - break; - } - case 180: - { - u32 start=98300; - for (j=0; j<384; j++) - { - for (i=0; i<256; i++, --start) - ((u32*)buffer)[i]=((u32 *)tmpGPU_screen)[start]; - buffer += ddsd.lPitch; - } - break; - } - case 270: - { - u32 start; - for (j=0; j<256; j++) - { - start=256-j; - for (i=0; i<384; i++) - { - ((u32*)buffer)[i]=((u32 *)tmpGPU_screen)[start]; - start+=256; - } - buffer += ddsd.lPitch; - } - break; - } - } - } - else - INFO("16bit depth color not supported"); - IDirectDrawSurface7_Unlock(lpBackSurface,(LPRECT)ddsd.lpSurface); - - if (IDirectDrawSurface7_Blt(lpPrimarySurface,&MainWindowRect,lpBackSurface,0, DDBLT_WAIT,0)==DDERR_SURFACELOST) - { - LOG("DirectDraw buffers is lost\n"); - if (IDirectDrawSurface7_Restore(lpPrimarySurface)==DD_OK) - IDirectDrawSurface7_Restore(lpBackSurface); - } - } - else - { - if (res==DDERR_SURFACELOST) - { - LOG("DirectDraw buffers is lost\n"); - if (IDirectDrawSurface7_Restore(lpPrimarySurface)==DD_OK) - IDirectDrawSurface7_Restore(lpBackSurface); - } - } -} - -void CheckMessages() -{ + if (IDirectDrawSurface7_SetClipper(lpPrimarySurface, lpDDClipPrimary) != DD_OK) return -5; + + return 1; +} + + +void Display() +{ + int res; + memset(&ddsd, 0, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); + ddsd.dwFlags=DDSD_ALL; + res=IDirectDrawSurface7_Lock(lpBackSurface,NULL,&ddsd,DDLOCK_WAIT, NULL); + + if (res == DD_OK) + { + char* buffer = (char*)ddsd.lpSurface; + + int i, j, sz=256*sizeof(u32); + if (ddsd.ddpfPixelFormat.dwRGBBitCount>16) + { + u16 *tmpGPU_Screen_src=(u16*)GPU_screen; + u32 tmpGPU_screen[98304]; + for(i=0; i<98304; i++) + tmpGPU_screen[i]= (((tmpGPU_Screen_src[i]>>10)&0x1F)<<3)| + (((tmpGPU_Screen_src[i]>>5)&0x1F)<<11)| + (((tmpGPU_Screen_src[i])&0x1F)<<19); + switch (GPU_rotation) + { + case 0: + { + for (i = 0; i < 98304; i+=256) //384*256 + { + memcpy(buffer,tmpGPU_screen+i,sz); + buffer += ddsd.lPitch; + } + break; + } + case 90: + { + u32 start; + for (j=0; j<256; j++) + { + start=98304+j; + for (i=0; i<384; i++) + { + start-=256; + ((u32*)buffer)[i]=((u32 *)tmpGPU_screen)[start]; + } + buffer += ddsd.lPitch; + } + break; + } + case 180: + { + u32 start=98300; + for (j=0; j<384; j++) + { + for (i=0; i<256; i++, --start) + ((u32*)buffer)[i]=((u32 *)tmpGPU_screen)[start]; + buffer += ddsd.lPitch; + } + break; + } + case 270: + { + u32 start; + for (j=0; j<256; j++) + { + start=256-j; + for (i=0; i<384; i++) + { + ((u32*)buffer)[i]=((u32 *)tmpGPU_screen)[start]; + start+=256; + } + buffer += ddsd.lPitch; + } + break; + } + } + } + else + INFO("16bit depth color not supported"); + IDirectDrawSurface7_Unlock(lpBackSurface,(LPRECT)ddsd.lpSurface); + + if (IDirectDrawSurface7_Blt(lpPrimarySurface,&MainWindowRect,lpBackSurface,0, DDBLT_WAIT,0)==DDERR_SURFACELOST) + { + LOG("DirectDraw buffers is lost\n"); + if (IDirectDrawSurface7_Restore(lpPrimarySurface)==DD_OK) + IDirectDrawSurface7_Restore(lpBackSurface); + } + } + else + { + if (res==DDERR_SURFACELOST) + { + LOG("DirectDraw buffers is lost\n"); + if (IDirectDrawSurface7_Restore(lpPrimarySurface)==DD_OK) + IDirectDrawSurface7_Restore(lpBackSurface); + } + } +} + +void CheckMessages() +{ MSG msg; - HWND hwnd = MainWindow->getHWnd(); + HWND hwnd = MainWindow->getHWnd(); while( PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE ) ) { if( GetMessage( &msg, 0, 0, 0)>0 ) - { - if(!TranslateAccelerator(hwnd,hAccel,&msg)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - } -} - + { + if(!TranslateAccelerator(hwnd,hAccel,&msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + } +} + void DisplayMessage() { if (displayMessageCounter) @@ -795,225 +795,225 @@ osd->addFixed(0, 40, "%s",MessageToDisplay.str().c_str()); } } - -void SaveStateMessages(int slotnum, int whichMessage) -{ - MessageToDisplay.str(""); //Clear previous message - displayMessageCounter = 120; - switch (whichMessage) - { - case 0: //State saved - MessageToDisplay << "State " << slotnum << " saved."; - break; - case 1: //State loaded - MessageToDisplay << "State " << slotnum << " loaded."; - break; - case 2: //Save slot selected - MessageToDisplay << "State " << slotnum << " selected."; - default: - break; - } - //DisplayMessage(); -} - -DWORD WINAPI run() -{ - char txt[80]; - u32 cycles = 0; - int wait=0; - u64 freq; - u64 OneFrameTime; - int framestoskip=0; - int framesskipped=0; - int skipnextframe=0; - u64 lastticks=0; - u64 curticks=0; - u64 diffticks=0; - u32 framecount=0; - u64 onesecondticks=0; - int fps=0; - int fpsframecount=0; - u64 fpsticks=0; - int res; + +void SaveStateMessages(int slotnum, int whichMessage) +{ + MessageToDisplay.str(""); //Clear previous message + displayMessageCounter = 120; + switch (whichMessage) + { + case 0: //State saved + MessageToDisplay << "State " << slotnum << " saved."; + break; + case 1: //State loaded + MessageToDisplay << "State " << slotnum << " loaded."; + break; + case 2: //Save slot selected + MessageToDisplay << "State " << slotnum << " selected."; + default: + break; + } + //DisplayMessage(); +} + +DWORD WINAPI run() +{ + char txt[80]; + u32 cycles = 0; + int wait=0; + u64 freq; + u64 OneFrameTime; + int framestoskip=0; + int framesskipped=0; + int skipnextframe=0; + u64 lastticks=0; + u64 curticks=0; + u64 diffticks=0; + u32 framecount=0; + u64 onesecondticks=0; + int fps=0; + int fpsframecount=0; + u64 fpsticks=0; + int res; HWND hwnd = MainWindow->getHWnd(); - - DDCAPS hw_caps, sw_caps; - - InitSpeedThrottle(); - - if (DirectDrawCreateEx(NULL, (LPVOID*)&lpDDraw, IID_IDirectDraw7, NULL) != DD_OK) - { - MessageBox(hwnd,"Unable to initialize DirectDraw","Error",MB_OK); - return -1; - } - - if (IDirectDraw7_SetCooperativeLevel(lpDDraw,hwnd, DDSCL_NORMAL) != DD_OK) - { - MessageBox(hwnd,"Unable to set DirectDraw Cooperative Level","Error",MB_OK); - return -1; - } - - if (CreateDDrawBuffers()<1) - { - MessageBox(hwnd,"Unable to set DirectDraw buffers","Error",MB_OK); - return -1; - } - - NDS_3D_SetDriver (GPU3D_OPENGL); - - if (!gpu3D->NDS_3D_Init ()) - { - MessageBox(hwnd,"Unable to initialize openGL","Error",MB_OK); - return -1; - } - - QueryPerformanceFrequency((LARGE_INTEGER *)&freq); - QueryPerformanceCounter((LARGE_INTEGER *)&lastticks); - OneFrameTime = freq / 60; - - while(!finished) - { - while(execute) - { - EnterCriticalSection(&win_sync); - cycles = NDS_exec((560190<<1)-cycles); - win_sound_samplecounter = 735; - LeaveCriticalSection(&win_sync); - - SPU_Emulate_core(); - //avi writing - DRV_AviSoundUpdate(SPU_core->outbuf,spu_core_samples); - DRV_AviVideoUpdate((u16*)GPU_screen); - - if (!skipnextframe) - { - input->process(); - + + DDCAPS hw_caps, sw_caps; + + InitSpeedThrottle(); + + if (DirectDrawCreateEx(NULL, (LPVOID*)&lpDDraw, IID_IDirectDraw7, NULL) != DD_OK) + { + MessageBox(hwnd,"Unable to initialize DirectDraw","Error",MB_OK); + return -1; + } + + if (IDirectDraw7_SetCooperativeLevel(lpDDraw,hwnd, DDSCL_NORMAL) != DD_OK) + { + MessageBox(hwnd,"Unable to set DirectDraw Cooperative Level","Error",MB_OK); + return -1; + } + + if (CreateDDrawBuffers()<1) + { + MessageBox(hwnd,"Unable to set DirectDraw buffers","Error",MB_OK); + return -1; + } + + NDS_3D_SetDriver (GPU3D_OPENGL); + + if (!gpu3D->NDS_3D_Init ()) + { + MessageBox(hwnd,"Unable to initialize openGL","Error",MB_OK); + return -1; + } + + QueryPerformanceFrequency((LARGE_INTEGER *)&freq); + QueryPerformanceCounter((LARGE_INTEGER *)&lastticks); + OneFrameTime = freq / 60; + + while(!finished) + { + while(execute) + { + EnterCriticalSection(&win_sync); + cycles = NDS_exec((560190<<1)-cycles); + win_sound_samplecounter = 735; + LeaveCriticalSection(&win_sync); + + SPU_Emulate_core(); + //avi writing + DRV_AviSoundUpdate(SPU_core->outbuf,spu_core_samples); + DRV_AviVideoUpdate((u16*)GPU_screen); + + if (!skipnextframe) + { + input->process(); + if (FpsDisplay) osd->addFixed(0, 5, "%02d Fps", fps); osd->update(); - Display(); - osd->clear(); - - - fpsframecount++; - QueryPerformanceCounter((LARGE_INTEGER *)&curticks); - bool oneSecond = curticks >= fpsticks + freq; - if(oneSecond) // TODO: print fps on screen in DDraw - { - fps = fpsframecount; - fpsframecount = 0; - QueryPerformanceCounter((LARGE_INTEGER *)&fpsticks); - } - - if(nds.idleFrameCounter==0 || oneSecond) - { - //calculate a 16 frame arm9 load average - int load = 0; - for(int i=0;i<16;i++) - load = load/8 + nds.runCycleCollector[(i+nds.idleFrameCounter)&15]*7/8; - load = std::min(100,std::max(0,(int)(load*100/1120380))); - sprintf(txt,"(%02d%%) %s", load, DESMUME_NAME_AND_VERSION); - SetWindowText(hwnd, txt); - } - - framesskipped = 0; - - if (framestoskip > 0) - skipnextframe = 1; - } - else - { - framestoskip--; - - if (framestoskip < 1) - skipnextframe = 0; - else - skipnextframe = 1; - - framesskipped++; - } - - while(SpeedThrottle()) - { - } - - if (autoframeskipenab) - { - framecount++; - - if (framecount > 60) - { - framecount = 1; - onesecondticks = 0; - } - - QueryPerformanceCounter((LARGE_INTEGER *)&curticks); - diffticks = curticks-lastticks; - - if(ThrottleIsBehind() && framesskipped < 9) - { - skipnextframe = 1; - framestoskip = 1; - } - - onesecondticks += diffticks; - lastticks = curticks; - } - else - { - if (framestoskip < 1) - framestoskip += frameskiprate; - } - if (frameAdvance) - { - frameAdvance = false; - execute = FALSE; - SPU_Pause(1); - } - frameCounter++; + Display(); + osd->clear(); + + + fpsframecount++; + QueryPerformanceCounter((LARGE_INTEGER *)&curticks); + bool oneSecond = curticks >= fpsticks + freq; + if(oneSecond) // TODO: print fps on screen in DDraw + { + fps = fpsframecount; + fpsframecount = 0; + QueryPerformanceCounter((LARGE_INTEGER *)&fpsticks); + } + + if(nds.idleFrameCounter==0 || oneSecond) + { + //calculate a 16 frame arm9 load average + int load = 0; + for(int i=0;i<16;i++) + load = load/8 + nds.runCycleCollector[(i+nds.idleFrameCounter)&15]*7/8; + load = std::min(100,std::max(0,(int)(load*100/1120380))); + sprintf(txt,"(%02d%%) %s", load, DESMUME_NAME_AND_VERSION); + SetWindowText(hwnd, txt); + } + + framesskipped = 0; + + if (framestoskip > 0) + skipnextframe = 1; + } + else + { + framestoskip--; + + if (framestoskip < 1) + skipnextframe = 0; + else + skipnextframe = 1; + + framesskipped++; + } + + while(SpeedThrottle()) + { + } + + if (autoframeskipenab) + { + framecount++; + + if (framecount > 60) + { + framecount = 1; + onesecondticks = 0; + } + + QueryPerformanceCounter((LARGE_INTEGER *)&curticks); + diffticks = curticks-lastticks; + + if(ThrottleIsBehind() && framesskipped < 9) + { + skipnextframe = 1; + framestoskip = 1; + } + + onesecondticks += diffticks; + lastticks = curticks; + } + else + { + if (framestoskip < 1) + framestoskip += frameskiprate; + } + if (frameAdvance) + { + frameAdvance = false; + execute = FALSE; + SPU_Pause(1); + } + frameCounter++; if (frameCounterDisplay) osd->addFixed(0, 25, "%d",frameCounter); DisplayMessage(); - CheckMessages(); - } - - paused = TRUE; - CheckMessages(); - Sleep(100); - } - if (lpDDClipPrimary!=NULL) IDirectDraw7_Release(lpDDClipPrimary); - if (lpPrimarySurface != NULL) IDirectDraw7_Release(lpPrimarySurface); - if (lpBackSurface != NULL) IDirectDraw7_Release(lpBackSurface); - if (lpDDraw != NULL) IDirectDraw7_Release(lpDDraw); - return 1; -} - -void NDS_Pause() -{ - if (!paused) - { - execute = FALSE; - paused = TRUE; - SPU_Pause(1); - while (!paused) {} - INFO("Emulation paused\n"); - } -} - -void NDS_UnPause() -{ - if (romloaded && paused) - { - paused = FALSE; - execute = TRUE; - SPU_Pause(0); - INFO("Emulation unpaused\n"); - } -} - -void StateSaveSlot(int num) -{ + CheckMessages(); + } + + paused = TRUE; + CheckMessages(); + Sleep(100); + } + if (lpDDClipPrimary!=NULL) IDirectDraw7_Release(lpDDClipPrimary); + if (lpPrimarySurface != NULL) IDirectDraw7_Release(lpPrimarySurface); + if (lpBackSurface != NULL) IDirectDraw7_Release(lpBackSurface); + if (lpDDraw != NULL) IDirectDraw7_Release(lpDDraw); + return 1; +} + +void NDS_Pause() +{ if (!paused) { + execute = FALSE; + paused = TRUE; + SPU_Pause(1); + while (!paused) {} + INFO("Emulation paused\n"); + } +} + +void NDS_UnPause() +{ + if (romloaded && paused) + { + paused = FALSE; + execute = TRUE; + SPU_Pause(0); + INFO("Emulation unpaused\n"); + } +} + +void StateSaveSlot(int num) +{ + if (!paused) + { NDS_Pause(); savestate_slot(num); //Savestate NDS_UnPause(); @@ -1023,110 +1023,110 @@ lastSaveState = num; //Set last savestate used SaveStateMessages(num, 0); //Display state loaded message -} - -void StateLoadSlot(int num) -{ - BOOL wasPaused = paused; - NDS_Pause(); +} + +void StateLoadSlot(int num) +{ + BOOL wasPaused = paused; + NDS_Pause(); loadstate_slot(num); //Loadstate lastSaveState = num; //Set last savestate used SaveStateMessages(num, 1); //Display state loaded message - if(!wasPaused) - NDS_UnPause(); - else - Display(); -} - -BOOL LoadROM(char * filename, const char *cflash_disk_image) -{ - NDS_Pause(); - //if (strcmp(filename,"")!=0) INFO("Attempting to load ROM: %s\n",filename); - - if (NDS_LoadROM(filename, backupmemorytype, backupmemorysize, cflash_disk_image) > 0) - { - INFO("Loading %s was successful\n",filename); - frameCounter=0; - UpdateRecentRoms(filename); - return TRUE; - } - INFO("Loading %s FAILED.\n",filename); - return FALSE; -} - -/* - * The thread handling functions needed by the GDB stub code. - */ -void * -createThread_gdb( void (APIENTRY *thread_function)( void *data), - void *thread_data) { - void *new_thread = CreateThread( NULL, 0, - (LPTHREAD_START_ROUTINE)thread_function, thread_data, - 0, NULL); - - return new_thread; -} - -void -joinThread_gdb( void *thread_handle) { -} - - -void SetLanguage(int langid) -{ - switch(langid) - { - case 1: - // French - SetThreadLocale(MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH), - SORT_DEFAULT)); - break; - case 2: - // Danish - SetThreadLocale(MAKELCID(MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT), - SORT_DEFAULT)); - break; - case 0: - // English - SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), - SORT_DEFAULT)); - break; - default: break; - break; - } -} - -void SaveLanguage(int langid) -{ - char text[80]; - - sprintf(text, "%d", langid); - WritePrivateProfileString("General", "Language", text, IniName); -} - -void CheckLanguage(UINT id) -{ - int i; - for (i = IDC_LANGENGLISH; i < IDC_LANGFRENCH+1; i++) + if(!wasPaused) + NDS_UnPause(); + else + Display(); +} + +BOOL LoadROM(char * filename, const char *cflash_disk_image) +{ + NDS_Pause(); + //if (strcmp(filename,"")!=0) INFO("Attempting to load ROM: %s\n",filename); + + if (NDS_LoadROM(filename, backupmemorytype, backupmemorysize, cflash_disk_image) > 0) + { + INFO("Loading %s was successful\n",filename); + frameCounter=0; + UpdateRecentRoms(filename); + return TRUE; + } + INFO("Loading %s FAILED.\n",filename); + return FALSE; +} + +/* + * The thread handling functions needed by the GDB stub code. + */ +void * +createThread_gdb( void (APIENTRY *thread_function)( void *data), + void *thread_data) { + void *new_thread = CreateThread( NULL, 0, + (LPTHREAD_START_ROUTINE)thread_function, thread_data, + 0, NULL); + + return new_thread; +} + +void +joinThread_gdb( void *thread_handle) { +} + + +void SetLanguage(int langid) +{ + switch(langid) + { + case 1: + // French + SetThreadLocale(MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH), + SORT_DEFAULT)); + break; + case 2: + // Danish + SetThreadLocale(MAKELCID(MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT), + SORT_DEFAULT)); + break; + case 0: + // English + SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), + SORT_DEFAULT)); + break; + default: break; + break; + } +} + +void SaveLanguage(int langid) +{ + char text[80]; + + sprintf(text, "%d", langid); + WritePrivateProfileString("General", "Language", text, IniName); +} + +void CheckLanguage(UINT id) +{ + int i; + for (i = IDC_LANGENGLISH; i < IDC_LANGFRENCH+1; i++) MainWindow->checkMenu(i, MF_BYCOMMAND | MF_UNCHECKED); - + MainWindow->checkMenu(id, MF_BYCOMMAND | MF_CHECKED); -} - -void ChangeLanguage(int id) -{ - HMENU newmenu; - - SetLanguage(id); - newmenu = LoadMenu(hAppInst, "MENU_PRINCIPAL"); +} + +void ChangeLanguage(int id) +{ + HMENU newmenu; + + SetLanguage(id); + newmenu = LoadMenu(hAppInst, "MENU_PRINCIPAL"); SetMenu(MainWindow->getHWnd(), newmenu); - DestroyMenu(menu); - menu = newmenu; -} - + DestroyMenu(menu); + menu = newmenu; +} + int RegClass(WNDPROC Proc, LPCTSTR szName) -{ +{ WNDCLASS wc; wc.style = CS_DBLCLKS; @@ -1142,48 +1142,48 @@ wc.cbClsExtra = 0; wc.cbWndExtra = 0; return RegisterClass(&wc); -} - -static void ExitRunLoop() -{ - finished = TRUE; - execute = FALSE; -} - -int WINAPI WinMain (HINSTANCE hThisInstance, - HINSTANCE hPrevInstance, - LPSTR lpszArgument, - int nFunsterStil) - -{ +} + +static void ExitRunLoop() +{ + finished = TRUE; + execute = FALSE; +} + +int WINAPI WinMain (HINSTANCE hThisInstance, + HINSTANCE hPrevInstance, + LPSTR lpszArgument, + int nFunsterStil) + +{ InitializeCriticalSection(&win_sync); -#ifdef GDB_STUB - gdbstub_handle_t arm9_gdb_stub; - gdbstub_handle_t arm7_gdb_stub; - struct armcpu_memory_iface *arm9_memio = &arm9_base_memory_iface; - struct armcpu_memory_iface *arm7_memio = &arm7_base_memory_iface; - struct armcpu_ctrl_iface *arm9_ctrl_iface; - struct armcpu_ctrl_iface *arm7_ctrl_iface; -#endif - struct configured_features my_config; - - extern bool windows_opengl_init(); - oglrender_init = windows_opengl_init; - - - char text[80]; - hAppInst=hThisInstance; - +#ifdef GDB_STUB + gdbstub_handle_t arm9_gdb_stub; + gdbstub_handle_t arm7_gdb_stub; + struct armcpu_memory_iface *arm9_memio = &arm9_base_memory_iface; + struct armcpu_memory_iface *arm7_memio = &arm7_base_memory_iface; + struct armcpu_ctrl_iface *arm9_ctrl_iface; + struct armcpu_ctrl_iface *arm7_ctrl_iface; +#endif + struct configured_features my_config; + + extern bool windows_opengl_init(); + oglrender_init = windows_opengl_init; + + + char text[80]; + hAppInst=hThisInstance; + init_configured_features( &my_config); if ( !fill_configured_features( &my_config, lpszArgument)) { MessageBox(NULL,"Unable to parse command line arguments","Error",MB_OK); return 0; } ColorCtrl_Register(); - - OpenConsole(); // Init debug console - + + OpenConsole(); // Init debug console + if (!RegClass(WindowProcedure, "DeSmuME")) { MessageBox(NULL, "Error registering windows class", "DeSmuME", MB_OK); @@ -1194,10 +1194,10 @@ windowSize = GetPrivateProfileInt("Video","Window Size", 0, IniName); GPU_rotation = GetPrivateProfileInt("Video","Window Rotate", 0, IniName); ForceRatio = GetPrivateProfileInt("Video","Window Force Ratio", 1, IniName); - FpsDisplay = GetPrivateProfileInt("Display","Display Fps", 0, IniName); - WndX = GetPrivateProfileInt("Video","WindowPosX", 0, IniName); - WndY = GetPrivateProfileInt("Video","WindowPosY", 0, IniName); - frameCounterDisplay = GetPrivateProfileInt("Display","FrameCounter", 0, IniName); + FpsDisplay = GetPrivateProfileInt("Display","Display Fps", 0, IniName); + WndX = GetPrivateProfileInt("Video","WindowPosX", 0, IniName); + WndY = GetPrivateProfileInt("Video","WindowPosY", 0, IniName); + frameCounterDisplay = GetPrivateProfileInt("Display","FrameCounter", 0, IniName); //sprintf(text, "%s", DESMUME_NAME_AND_VERSION); MainWindow = new WINCLASS(CLASSNAME, hThisInstance); RECT clientRect = {0,0,256,384}; @@ -1212,44 +1212,44 @@ exit(-1); } - /* default the firmware settings, they may get changed later */ - NDS_FillDefaultFirmwareConfigData( &win_fw_config); - - GetPrivateProfileString("General", "Language", "-1", text, 80, IniName); - SetLanguage(atoi(text)); - - bad_glob_cflash_disk_image_file = my_config.cflash_disk_image_file; - - hAccel = LoadAccelerators(hAppInst, MAKEINTRESOURCE(IDR_MAIN_ACCEL)); - - mainMenu = LoadMenu(hThisInstance, "MENU_PRINCIPAL"); //Load Menu, and store handle + /* default the firmware settings, they may get changed later */ + NDS_FillDefaultFirmwareConfigData( &win_fw_config); + + GetPrivateProfileString("General", "Language", "-1", text, 80, IniName); + SetLanguage(atoi(text)); + + bad_glob_cflash_disk_image_file = my_config.cflash_disk_image_file; + + hAccel = LoadAccelerators(hAppInst, MAKEINTRESOURCE(IDR_MAIN_ACCEL)); + + mainMenu = LoadMenu(hThisInstance, "MENU_PRINCIPAL"); //Load Menu, and store handle if (!MainWindow->setMenu(mainMenu)) { MessageBox(NULL, "Error creating main menu", "DeSmuME", MB_OK); delete MainWindow; exit(-1); } - - // menu checks + + // menu checks MainWindow->checkMenu(IDC_FORCERATIO, MF_BYCOMMAND | (ForceRatio==1?MF_CHECKED:MF_UNCHECKED)); - + MainWindow->checkMenu(ID_VIEW_DISPLAYFPS, FpsDisplay ? MF_CHECKED : MF_UNCHECKED); - + MainWindow->checkMenu(IDC_WINDOW1X, MF_BYCOMMAND | ((windowSize==1)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_WINDOW2X, MF_BYCOMMAND | ((windowSize==2)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_WINDOW3X, MF_BYCOMMAND | ((windowSize==3)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_WINDOW4X, MF_BYCOMMAND | ((windowSize==4)?MF_CHECKED:MF_UNCHECKED)); - + MainWindow->checkMenu(IDC_ROTATE0, MF_BYCOMMAND | ((GPU_rotation==0)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_ROTATE90, MF_BYCOMMAND | ((GPU_rotation==90)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_ROTATE180, MF_BYCOMMAND | ((GPU_rotation==180)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_ROTATE270, MF_BYCOMMAND | ((GPU_rotation==270)?MF_CHECKED:MF_UNCHECKED)); - + DragAcceptFiles(MainWindow->getHWnd(), TRUE); - - recentromsmenu = CreateMenu(); //Create recent Roms menu - GetRecentRoms(); //Populate the recent roms menu - + + recentromsmenu = CreateMenu(); //Create recent Roms menu + GetRecentRoms(); //Populate the recent roms menu + LOG("Init NDS\n"); input = new INPUTCLASS(); @@ -1272,159 +1272,159 @@ ViewMatrices = new TOOLSCLASS(hThisInstance, IDD_MATRIX_VIEWER, (DLGPROC) ViewMatricesProc); ViewLights = new TOOLSCLASS(hThisInstance, IDD_LIGHT_VIEWER, (DLGPROC) ViewLightsProc); -#ifdef GDB_STUB - if ( my_config.arm9_gdb_port != 0) { - arm9_gdb_stub = createStub_gdb( my_config.arm9_gdb_port, - &arm9_memio, &arm9_direct_memory_iface); - - if ( arm9_gdb_stub == NULL) { - MessageBox(hwnd,"Failed to create ARM9 gdbstub","Error",MB_OK); - return -1; - } - } - if ( my_config.arm7_gdb_port != 0) { - arm7_gdb_stub = createStub_gdb( my_config.arm7_gdb_port, - &arm7_memio, - &arm7_base_memory_iface); - - if ( arm7_gdb_stub == NULL) { - MessageBox(hwnd,"Failed to create ARM7 gdbstub","Error",MB_OK); - return -1; - } - } - - NDS_Init( arm9_memio, &arm9_ctrl_iface, - arm7_memio, &arm7_ctrl_iface); -#else - NDS_Init (); -#endif - - /* - * Activate the GDB stubs - * This has to come after the NDS_Init where the cpus are set up. - */ -#ifdef GDB_STUB - if ( my_config.arm9_gdb_port != 0) { - activateStub_gdb( arm9_gdb_stub, arm9_ctrl_iface); - } - if ( my_config.arm7_gdb_port != 0) { - activateStub_gdb( arm7_gdb_stub, arm7_ctrl_iface); - } -#endif +#ifdef GDB_STUB + if ( my_config.arm9_gdb_port != 0) { + arm9_gdb_st... [truncated message content] |
From: <lu...@us...> - 2008-12-27 00:50:01
|
Revision: 1250 http://desmume.svn.sourceforge.net/desmume/?rev=1250&view=rev Author: luigi__ Date: 2008-12-27 00:49:51 +0000 (Sat, 27 Dec 2008) Log Message: ----------- The default window position is now CW_USEDEFAULT instead of 0, so upon the first launch the window isn't placed in the top-left corner. Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2008-12-26 23:03:28 UTC (rev 1249) +++ trunk/desmume/src/windows/main.cpp 2008-12-27 00:49:51 UTC (rev 1250) @@ -1195,8 +1195,8 @@ GPU_rotation = GetPrivateProfileInt("Video","Window Rotate", 0, IniName); ForceRatio = GetPrivateProfileInt("Video","Window Force Ratio", 1, IniName); FpsDisplay = GetPrivateProfileInt("Display","Display Fps", 0, IniName); - WndX = GetPrivateProfileInt("Video","WindowPosX", 0, IniName); - WndY = GetPrivateProfileInt("Video","WindowPosY", 0, IniName); + WndX = GetPrivateProfileInt("Video","WindowPosX", CW_USEDEFAULT, IniName); + WndY = GetPrivateProfileInt("Video","WindowPosY", CW_USEDEFAULT, IniName); frameCounterDisplay = GetPrivateProfileInt("Display","FrameCounter", 0, IniName); //sprintf(text, "%s", DESMUME_NAME_AND_VERSION); MainWindow = new WINCLASS(CLASSNAME, hThisInstance); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2008-12-27 23:42:52
|
Revision: 1263 http://desmume.svn.sourceforge.net/desmume/?rev=1263&view=rev Author: luigi__ Date: 2008-12-27 23:42:50 +0000 (Sat, 27 Dec 2008) Log Message: ----------- Choosing Danish as language would save French instead of Danish. Fixed. Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2008-12-27 23:13:03 UTC (rev 1262) +++ trunk/desmume/src/windows/main.cpp 2008-12-27 23:42:50 UTC (rev 1263) @@ -2410,7 +2410,7 @@ CheckLanguage(LOWORD(wParam)); return 0; case IDC_LANGDANISH: - SaveLanguage(1); + SaveLanguage(2); ChangeLanguage(2); CheckLanguage(LOWORD(wParam)); return 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-01-22 06:00:16
|
Revision: 1516 http://desmume.svn.sourceforge.net/desmume/?rev=1516&view=rev Author: zeromus Date: 2009-01-22 05:59:45 +0000 (Thu, 22 Jan 2009) Log Message: ----------- I think we should throw out touch input when it is out of bounds of the touchscreen, instead of clamping it. what do other people think? Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-01-21 22:35:46 UTC (rev 1515) +++ trunk/desmume/src/windows/main.cpp 2009-01-22 05:59:45 UTC (rev 1516) @@ -1947,9 +1947,12 @@ translateXY(x,y); else y-=192; - if(x<0) x = 0; else if(x>255) x = 255; - if(y<0) y = 0; else if(y>192) y = 192; - NDS_setTouchPos(x, y); + //zero 21-01-2009 - if the touch is entirely out of bounds, + //I think we should throw it out instead of clamping it + //if(x<0) x = 0; else if(x>255) x = 255; + //if(y<0) y = 0; else if(y>192) y = 192; + if(x>=0 && x<=255 && y>=0 && y<=192) + NDS_setTouchPos(x, y); return 0; } NDS_releaseTouch(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-01-22 06:29:51
|
Revision: 1517 http://desmume.svn.sourceforge.net/desmume/?rev=1517&view=rev Author: zeromus Date: 2009-01-22 06:29:21 +0000 (Thu, 22 Jan 2009) Log Message: ----------- never mind. i was persuaded that i was wrong Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-01-22 05:59:45 UTC (rev 1516) +++ trunk/desmume/src/windows/main.cpp 2009-01-22 06:29:21 UTC (rev 1517) @@ -1947,12 +1947,9 @@ translateXY(x,y); else y-=192; - //zero 21-01-2009 - if the touch is entirely out of bounds, - //I think we should throw it out instead of clamping it - //if(x<0) x = 0; else if(x>255) x = 255; - //if(y<0) y = 0; else if(y>192) y = 192; - if(x>=0 && x<=255 && y>=0 && y<=192) - NDS_setTouchPos(x, y); + if(x<0) x = 0; else if(x>255) x = 255; + if(y<0) y = 0; else if(y>192) y = 192; + NDS_setTouchPos(x, y); return 0; } NDS_releaseTouch(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-01-31 16:44:09
|
Revision: 1562 http://desmume.svn.sourceforge.net/desmume/?rev=1562&view=rev Author: zeromus Date: 2009-01-31 16:44:06 +0000 (Sat, 31 Jan 2009) Log Message: ----------- re-add my change to stop throttling when frameskip is 0, but do it right this time, so that autoframeskip causes the throttling to enable as a limiter Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-01-31 13:23:31 UTC (rev 1561) +++ trunk/desmume/src/windows/main.cpp 2009-01-31 16:44:06 UTC (rev 1562) @@ -1027,7 +1027,7 @@ NDS_SkipFrame(true); } - // if(frameskiprate != 0) + if(frameskiprate != 0 || autoframeskipenab) while(SpeedThrottle()) { } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-02-01 23:22:10
|
Revision: 1571 http://desmume.svn.sourceforge.net/desmume/?rev=1571&view=rev Author: zeromus Date: 2009-02-01 23:21:41 +0000 (Sun, 01 Feb 2009) Log Message: ----------- windows: very slightly speed up rotation / final color conversion Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-02-01 02:13:22 UTC (rev 1570) +++ trunk/desmume/src/windows/main.cpp 2009-02-01 23:21:41 UTC (rev 1571) @@ -759,60 +759,70 @@ -void applyRotation_0deg(u32 *in, u32 *out, int pitch) +void applyRotation_0deg(u16 *in, u32 *out, int pitch) { + //this is the most normal case so we have a special branch for it if(pitch==1024) - memcpy(out,in,256*192*2*4); + for(int i=0; i<98304; i++) + out[i] = RGB15TO24_REVERSE(in[i]); else - for(int i = 0; i < (256 * 384); i += 256) + { + pitch>>=2; + for(int y=0,i=0;y<384;y++) { - memcpy(out, (in + i), 1024); - out = (u32*)(((u8*)out) + pitch); + int dst = y*(pitch); + for(int x=0;x<256;x++) + out[dst++] = RGB15TO24_REVERSE(in[i++]); } + } + } -void applyRotation_90deg(u32 *in, u32 *out, int pitch) +void applyRotation_90deg(u16 *in, u32 *out, int pitch) { - for(int i = 0; i < 256; i++) + pitch>>=2; + for(int y=0,dst=0;y<256;y++) { - for(int j = 0; j < 384; j++) + int i=y+383*256; + for(int x=0;x<384;x++) { - out[383 - j] = in[(j * 256) + i]; + out[dst++] = RGB15TO24_REVERSE(in[i]); + i -= 256; } - out = (u32*)(((u8*)out) + pitch); + dst += (pitch-384); } } -void applyRotation_180deg(u32 *in, u32 *out, int pitch) +void applyRotation_180deg(u16 *in, u32 *out, int pitch) { - for(int i = 0; i < 384; i++) + pitch>>=2; + int i = 256*384-1; + for(int y=0,dst=0;y<384;y++) { - for(int j = 0; j < 256; j++) + for(int x=0;x<256;x++) { - out[j] = in[98303 - ((i * 256) + j)]; + out[dst++] = RGB15TO24_REVERSE(in[i]); + i--; } - out = (u32*)(((u8*)out) + pitch); + dst += (pitch-256); } } -void applyRotation_270deg(u32 *in, u32 *out, int pitch) +void applyRotation_270deg(u16 *in, u32 *out, int pitch) { - for(int i = 0; i < 256; i++) + pitch>>=2; + for(int y=0,dst=0;y<256;y++) { - for(int j = 0; j < 384; j++) + int i=255-y; + for(int x=0;x<384;x++) { - out[j] = in[(j * 256) + (255 - i)]; + out[dst++] = RGB15TO24_REVERSE(in[i]); + i += 256; } - out = (u32*)(((u8*)out) + pitch); + dst += (pitch-384); } } -void (*applyRotation[4])(u32 *in, u32 *out, int pitch) = { - applyRotation_0deg, - applyRotation_90deg, - applyRotation_180deg, - applyRotation_270deg -}; void Display() { @@ -829,12 +839,13 @@ int i, j, sz=256*sizeof(u32); if (ddsd.ddpfPixelFormat.dwRGBBitCount>16) { - u16 *tmpGPU_Screen_src=(u16*)GPU_screen; - u32 tmpGPU_screen[98304]; - for(i=0; i<98304; i++) - tmpGPU_screen[i] = RGB15TO24_REVERSE(tmpGPU_Screen_src[i]); - - applyRotation[GPU_rotation / 90](tmpGPU_screen, (u32*)buffer, ddsd.lPitch); + switch(GPU_rotation) + { + case 0: applyRotation_0deg((u16*)GPU_screen,(u32*)buffer,ddsd.lPitch); break; + case 90: applyRotation_90deg((u16*)GPU_screen,(u32*)buffer,ddsd.lPitch); break; + case 180: applyRotation_180deg((u16*)GPU_screen,(u32*)buffer,ddsd.lPitch); break; + case 270: applyRotation_270deg((u16*)GPU_screen,(u32*)buffer,ddsd.lPitch); break; + } } else INFO("16bit depth color not supported"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2009-02-09 23:23:09
|
Revision: 1668 http://desmume.svn.sourceforge.net/desmume/?rev=1668&view=rev Author: luigi__ Date: 2009-02-09 22:21:14 +0000 (Mon, 09 Feb 2009) Log Message: ----------- The window is now refreshed even when resized or moved. Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-02-09 22:07:49 UTC (rev 1667) +++ trunk/desmume/src/windows/main.cpp 2009-02-09 22:21:14 UTC (rev 1668) @@ -1734,11 +1734,15 @@ ExitRunLoop(); return 0; } + case WM_MOVING: + SendMessage(hwnd, WM_PAINT, 0, 0x12345678); + return 0; case WM_MOVE: - GetWndRect(hwnd); - return 0; + GetWndRect(hwnd); + return 0; case WM_SIZING: { + SendMessage(hwnd, WM_PAINT, 0, 0x12345678); if(windowSize) { windowSize = 0; @@ -1769,7 +1773,7 @@ } return 0; case WM_PAINT: - if(paused) + if(paused || (lParam == 0x12345678)) { osd->update(); Display(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-02-10 22:56:03
|
Revision: 1675 http://desmume.svn.sourceforge.net/desmume/?rev=1675&view=rev Author: zeromus Date: 2009-02-10 21:45:30 +0000 (Tue, 10 Feb 2009) Log Message: ----------- win32: try this to fix compilation on older sdks Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-02-10 16:57:52 UTC (rev 1674) +++ trunk/desmume/src/windows/main.cpp 2009-02-10 21:45:30 UTC (rev 1675) @@ -25,6 +25,7 @@ #include <shellapi.h> #include <shlwapi.h> #include <Winuser.h> +#include <Winnls.h> #include <windowsx.h> #include <commctrl.h> #include <commdlg.h> @@ -1056,13 +1057,19 @@ void SetLanguage(int langid) { - OSVERSIONINFO info; - ZeroMemory(&info, sizeof(info)); - info.dwOSVersionInfoSize = sizeof(info); - GetVersionEx(&info); - setLanguageFunc setLanguage = ((info.dwMajorVersion >= 6) ? - (setLanguageFunc)SetThreadUILanguage : (setLanguageFunc)SetThreadLocale); + HMODULE kernel32 = LoadLibrary("kernel32.dll"); + FARPROC _setThreadUILanguage = (FARPROC)GetProcAddress(kernel32,"SetThreadUILanguage"); + + //OSVERSIONINFO info; + //ZeroMemory(&info, sizeof(info)); + //info.dwOSVersionInfoSize = sizeof(info); + //GetVersionEx(&info); + //setLanguageFunc setLanguage = ((info.dwMajorVersion >= 6) ? + // (setLanguageFunc)_setThreadUILanguage : (setLanguageFunc)SetThreadLocale); + + setLanguageFunc setLanguage = _setThreadUILanguage?(setLanguageFunc)_setThreadUILanguage:(setLanguageFunc)SetThreadLocale; + switch(langid) { case 1: @@ -1080,6 +1087,8 @@ default: break; break; } + + FreeLibrary(kernel32); } void SaveLanguage(int langid) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2009-02-16 23:01:08
|
Revision: 1699 http://desmume.svn.sourceforge.net/desmume/?rev=1699&view=rev Author: luigi__ Date: 2009-02-16 22:07:37 +0000 (Mon, 16 Feb 2009) Log Message: ----------- The WM_LBUTTONDBLCLK message is now handled. This makes the SPP puzzle mini-game much easier to play. Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-02-16 00:30:59 UTC (rev 1698) +++ trunk/desmume/src/windows/main.cpp 2009-02-16 22:07:37 UTC (rev 1699) @@ -931,6 +931,7 @@ CheckMessages(); Sleep(100); } + if (lpDDClipPrimary!=NULL) IDirectDraw7_Release(lpDDClipPrimary); if (lpPrimarySurface != NULL) IDirectDraw7_Release(lpPrimarySurface); if (lpBackSurface != NULL) IDirectDraw7_Release(lpBackSurface); @@ -2143,6 +2144,7 @@ return 0; case WM_MOUSEMOVE: case WM_LBUTTONDOWN: + case WM_LBUTTONDBLCLK: if (wParam & MK_LBUTTON) { RECT r ; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2009-03-05 22:47:20
|
Revision: 1728 http://desmume.svn.sourceforge.net/desmume/?rev=1728&view=rev Author: luigi__ Date: 2009-03-05 22:47:13 +0000 (Thu, 05 Mar 2009) Log Message: ----------- Fixed another bug. Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-03-05 22:44:18 UTC (rev 1727) +++ trunk/desmume/src/windows/main.cpp 2009-03-05 22:47:13 UTC (rev 1728) @@ -3063,7 +3063,7 @@ cur = GetDlgItem(hDlg, IDC_BIOSSWIS); EnableWindow(cur, enable); cur = GetDlgItem(hDlg, IDC_FIRMWAREBOOT); - EnableWindow(cur, enable); + EnableWindow(cur, (enable && IsDlgButtonChecked(hDlg, IDC_USEEXTFIRMWARE))); } return TRUE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-03-09 05:07:57
|
Revision: 1732 http://desmume.svn.sourceforge.net/desmume/?rev=1732&view=rev Author: zeromus Date: 2009-03-09 05:07:30 +0000 (Mon, 09 Mar 2009) Log Message: ----------- win32: fix a crash which happened randomly when the app exited Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-03-08 13:34:03 UTC (rev 1731) +++ trunk/desmume/src/windows/main.cpp 2009-03-09 05:07:30 UTC (rev 1732) @@ -1514,6 +1514,8 @@ MainWindow->Show(SW_NORMAL); run(); + SaveRecentRoms(); + NDS_DeInit(); DRV_AviEnd(); //------SHUTDOWN @@ -2119,8 +2121,6 @@ //Save frame counter status WritePrivateProfileInt("Display", "FrameCounter", frameCounterDisplay, IniName); WritePrivateProfileInt("Display", "ScreenGap", ScreenGap, IniName); - SaveRecentRoms(); - NDS_DeInit(); ExitRunLoop(); return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-03-26 20:52:39
|
Revision: 1771 http://desmume.svn.sourceforge.net/desmume/?rev=1771&view=rev Author: zeromus Date: 2009-03-26 20:52:01 +0000 (Thu, 26 Mar 2009) Log Message: ----------- [ 2710782 ] win32: saved window position gradually floats around the screen Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-03-26 16:51:55 UTC (rev 1770) +++ trunk/desmume/src/windows/main.cpp 2009-03-26 20:52:01 UTC (rev 1771) @@ -2154,11 +2154,14 @@ case WM_MOVING: SendMessage(hwnd, WM_PAINT, 0, 0x12345678); return 0; - case WM_MOVE: - WndY = HIWORD(lParam); - WndX = LOWORD(lParam); + case WM_MOVE: { + RECT rect; + GetWindowRect(MainWindow->getHWnd(),&rect); + WndX = rect.left; + WndY = rect.top; UpdateWndRects(hwnd); return 0; + } case WM_SIZING: { SendMessage(hwnd, WM_PAINT, 0, 0x12345678); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-04-08 18:52:56
|
Revision: 1858 http://desmume.svn.sourceforge.net/desmume/?rev=1858&view=rev Author: zeromus Date: 2009-04-08 18:52:55 +0000 (Wed, 08 Apr 2009) Log Message: ----------- win32: fix typo in error message and change the default frameskip options to 0, limit (desmume classic style) which people seem to like more Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-04-08 18:07:53 UTC (rev 1857) +++ trunk/desmume/src/windows/main.cpp 2009-04-08 18:52:55 UTC (rev 1858) @@ -155,7 +155,7 @@ int ScreenGap = 0; -static int FrameLimit = 0; +static int FrameLimit = 1; //=========================== view tools TOOLSCLASS *ViewDisasm_ARM7 = NULL; @@ -209,7 +209,7 @@ NULL }; -int autoframeskipenab=1; +int autoframeskipenab=0; int frameskiprate=0; int emu_paused = 0; static int backupmemorytype=MC_TYPE_AUTODETECT; @@ -1231,7 +1231,7 @@ //require wpcap.dll HMODULE temp = LoadLibrary("wpcap.dll"); if(temp == NULL) { - printf("Failed initializing winpcap.dll - softAP support disabled\n"); + printf("Failed initializing wpcap.dll - softAP support disabled\n"); return FALSE; } FreeLibrary(temp); @@ -1469,7 +1469,7 @@ GetPrivateProfileString("General", "Language", "0", text, 80, IniName); //================================================== ??? CheckLanguage(IDC_LANGENGLISH+atoi(text)); - GetPrivateProfileString("Video", "FrameSkip", "AUTO", text, 80, IniName); + GetPrivateProfileString("Video", "FrameSkip", "0", text, 80, IniName); if (strcmp(text, "AUTO") == 0) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ade...@us...> - 2009-04-13 14:51:16
|
Revision: 1919 http://desmume.svn.sourceforge.net/desmume/?rev=1919&view=rev Author: adelikat Date: 2009-04-13 14:51:07 +0000 (Mon, 13 Apr 2009) Log Message: ----------- Win32 - Gray out recent ROM menu item if there are no recent ROMs Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-04-13 14:46:41 UTC (rev 1918) +++ trunk/desmume/src/windows/main.cpp 2009-04-13 14:51:07 UTC (rev 1919) @@ -2285,6 +2285,9 @@ EnableMenuItem(mainMenu, IDM_STATE_LOAD_F1+x, MF_BYCOMMAND | (romloaded) ? MF_ENABLED : MF_GRAYED); } + //Gray the recent ROM menu item if there are no recent ROMs + EnableMenuItem(mainMenu, ID_FILE_RECENTROM, MF_BYCOMMAND | (RecentRoms.size()) ? MF_ENABLED : MF_GRAYED); + //Updated Checked menu items //Pause @@ -2317,8 +2320,7 @@ MainWindow->checkMenu(ID_VIEW_DISPLAYMICROPHONE, MF_BYCOMMAND | ((ShowMicrophone)?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(ID_VIEW_HUDEDITOR, MF_BYCOMMAND | ((HudEditorMode) ?MF_CHECKED:MF_UNCHECKED)); MainWindow->checkMenu(IDC_FRAMELIMIT, MF_BYCOMMAND | ((FrameLimit) ?MF_CHECKED:MF_UNCHECKED)); - - //TODO Recent ROMs gray if no recent roms + //Language selection //Frame Skip This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-04-18 21:26:17
|
Revision: 1967 http://desmume.svn.sourceforge.net/desmume/?rev=1967&view=rev Author: zeromus Date: 2009-04-18 21:25:41 +0000 (Sat, 18 Apr 2009) Log Message: ----------- [2750702] fixed: shift key is sticky in hotkeys, making you save sometimes when you meant to load Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-04-18 21:14:16 UTC (rev 1966) +++ trunk/desmume/src/windows/main.cpp 2009-04-18 21:25:41 UTC (rev 1967) @@ -2129,9 +2129,9 @@ if (key == VK_MENU || key == VK_CONTROL || key == VK_SHIFT) return 0; - if(GetAsyncKeyState(VK_MENU )) modifiers |= CUSTKEY_ALT_MASK; - if(GetAsyncKeyState(VK_CONTROL)) modifiers |= CUSTKEY_CTRL_MASK; - if(GetAsyncKeyState(VK_SHIFT )) modifiers |= CUSTKEY_SHIFT_MASK; + if(GetAsyncKeyState(VK_MENU )&0x8000) modifiers |= CUSTKEY_ALT_MASK; + if(GetAsyncKeyState(VK_CONTROL)&0x8000) modifiers |= CUSTKEY_CTRL_MASK; + if(GetAsyncKeyState(VK_SHIFT )&0x8000) modifiers |= CUSTKEY_SHIFT_MASK; return modifiers; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ze...@us...> - 2009-04-18 23:32:50
|
Revision: 1968 http://desmume.svn.sourceforge.net/desmume/?rev=1968&view=rev Author: zeromus Date: 2009-04-18 23:32:14 +0000 (Sat, 18 Apr 2009) Log Message: ----------- win32: try to fix language selection. works in xp; need to verify in vista Modified Paths: -------------- trunk/desmume/src/windows/main.cpp Modified: trunk/desmume/src/windows/main.cpp =================================================================== --- trunk/desmume/src/windows/main.cpp 2009-04-18 21:25:41 UTC (rev 1967) +++ trunk/desmume/src/windows/main.cpp 2009-04-18 23:32:14 UTC (rev 1968) @@ -1262,14 +1262,17 @@ case 1: // French setLanguage(MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH), SORT_DEFAULT)); + SetThreadLocale(MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH), SORT_DEFAULT)); break; case 2: // Danish setLanguage(MAKELCID(MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT), SORT_DEFAULT)); + SetThreadLocale(MAKELCID(MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT), SORT_DEFAULT)); break; case 0: // English setLanguage(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)); + SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)); break; default: break; break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |