From 76c0c2d24583629547e8c653bd250ed7f1727301 Mon Sep 17 00:00:00 2001 From: zeromus Date: Sat, 2 May 2009 04:30:16 +0000 Subject: [PATCH] integrate changes from rerecording branch --- src/GPU.cpp | 1090 ++++--- src/GPU.h | 103 +- src/GPU_osd.cpp | 6 +- src/MMU.cpp | 1 + src/NDSSystem.cpp | 92 +- src/NDSSystem.h | 9 + src/OGLRender.cpp | 217 +- src/SPU.cpp | 8 +- src/SPU.h | 2 +- src/gfx3d.cpp | 186 +- src/gfx3d.h | 76 +- src/mc.cpp | 10 +- src/movie.cpp | 408 ++- src/movie.h | 22 +- src/rasterize.cpp | 210 +- src/render3D.cpp | 4 - src/render3D.h | 9 +- src/rtc.cpp | 25 +- src/rtc.h | 2 + src/saves.cpp | 86 +- src/texcache.cpp | 55 +- src/texcache.h | 13 +- src/types.h | 9 +- src/wifi.cpp | 2 +- src/windows/DeSmuME_2005.vcproj | 16 + src/windows/DeSmuME_2008.vcproj | 42 +- src/windows/aviout.cpp | 6 +- src/windows/hotkey.cpp | 45 +- src/windows/hotkey.h | 3 +- src/windows/main.cpp | 213 +- src/windows/main.h | 7 +- src/windows/ram_search.cpp | 1932 +++++++++++++ src/windows/ram_search.h | 49 + src/windows/ramwatch.cpp | 1171 ++++++++ src/windows/ramwatch.h | 39 + src/windows/replay.cpp | 157 + src/windows/replay.h | 2 + src/windows/resource.h | 1147 ++++---- src/windows/resources.rc | 4735 ++++++++++++++++--------------- src/windows/targetver.h | 24 + 40 files changed, 8329 insertions(+), 3904 deletions(-) create mode 100644 src/windows/ram_search.cpp create mode 100644 src/windows/ram_search.h create mode 100644 src/windows/ramwatch.cpp create mode 100644 src/windows/ramwatch.h create mode 100644 src/windows/replay.cpp create mode 100644 src/windows/replay.h create mode 100644 src/windows/targetver.h diff --git a/src/GPU.cpp b/src/GPU.cpp index b2bc0a800..9ce8c314d 100644 --- a/src/GPU.cpp +++ b/src/GPU.cpp @@ -49,9 +49,11 @@ #include "GPU.h" #include "debug.h" #include "render3D.h" +#include "gfx3d.h" #include "GPU_osd.h" #include "debug.h" #include "NDSSystem.h" +#include "readwrite.h" ARM9_struct ARM9Mem; @@ -77,15 +79,6 @@ OSDCLASS *osdB = NULL; u16 gpu_angle = 0; -const short sizeTab[4][4][2] = -{ - {{256,256}, {512, 256}, {256, 512}, {512, 512}}, - {{128,128}, {256, 256}, {512, 512}, {1024, 1024}}, - {{128,128}, {256, 256}, {512, 256}, {512, 512}}, - {{512,1024}, {1024, 512}, {0, 0}, {0, 0}}, -// {{0, 0}, {0, 0}, {0, 0}, {0, 0}} -}; - const size sprSizeTab[4][4] = { {{8, 8}, {16, 8}, {8, 16}, {8, 8}}, @@ -94,34 +87,51 @@ const size sprSizeTab[4][4] = {{64, 64}, {64, 32}, {32, 64}, {8, 8}}, }; -const s8 mode2type[8][4] = + + +static const BGType mode2type[8][4] = { - {0, 0, 0, 0}, - {0, 0, 0, 1}, - {0, 0, 1, 1}, - {0, 0, 0, 1}, - {0, 0, 1, 1}, - {0, 0, 1, 1}, - {3, 3, 2, 3}, - {0, 0, 0, 0} + {BGType_Text, BGType_Text, BGType_Text, BGType_Text}, + {BGType_Text, BGType_Text, BGType_Text, BGType_Affine}, + {BGType_Text, BGType_Text, BGType_Affine, BGType_Affine}, + {BGType_Text, BGType_Text, BGType_Text, BGType_AffineExt}, + {BGType_Text, BGType_Text, BGType_Affine, BGType_AffineExt}, + {BGType_Text, BGType_Text, BGType_AffineExt, BGType_AffineExt}, + {BGType_Invalid, BGType_Invalid, BGType_Large8bpp, BGType_Invalid}, + {BGType_Invalid, BGType_Invalid, BGType_Invalid, BGType_Invalid} +}; + +const short sizeTab[8][4][2] = +{ + {{0, 0}, {0, 0}, {0, 0}, {0, 0}}, //Invalid + {{256,256}, {512,256}, {256,512}, {512,512}}, //text + {{128,128}, {256,256}, {512,512}, {1024,1024}}, //affine + {{512,1024}, {1024,512}, {0,0}, {0,0}}, //large 8bpp + {{0, 0}, {0, 0}, {0, 0}, {0, 0}}, //affine ext (to be elaborated with another value) + {{128,128}, {256,256}, {512,512}, {1024,1024}}, //affine ext 256x16 + {{128,128}, {256,256}, {512,256}, {512,512}}, //affine ext 256x1 + {{128,128}, {256,256}, {512,256}, {512,512}}, //affine ext direct }; void lineText(GPU * gpu); void lineRot(GPU * gpu); void lineExtRot(GPU * gpu); +void lineNull(GPU * gpu); +void lineLarge8bpp(GPU * gpu); -typedef void (*TModeRender)(GPU * gpu); -TModeRender modeRender[8][4] = +void GPU::modeRender(int layer) { - {lineText, lineText, lineText, lineText}, //0 - {lineText, lineText, lineText, lineRot}, //1 - {lineText, lineText, lineRot, lineRot}, //2 - {lineText, lineText, lineText, lineExtRot}, //3 - {lineText, lineText, lineRot, lineExtRot}, //4 - {lineText, lineText, lineExtRot, lineExtRot}, //5 - {lineText, lineText, lineText, lineText}, //6 - {lineText, lineText, lineText, lineText}, //7 -}; + switch(mode2type[dispCnt().BG_Mode][layer]) + { + case BGType_Text: lineText(this); break; + case BGType_Affine: lineRot(this); break; + case BGType_AffineExt: lineExtRot(this); break; + case BGType_Large8bpp: lineExtRot(this); break; + case BGType_Invalid: + PROGINFO("Attempting to render an invalid BG type\n"); + break; + } +} static GraphicsInterface_struct *GFXCore=NULL; @@ -131,6 +141,397 @@ GraphicsInterface_struct *GFXCoreList[] = { NULL }; +static const CACHE_ALIGN u8 win_empty[256] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +static CACHE_ALIGN u16 fadeInColors[17][0x8000]; +static CACHE_ALIGN u16 fadeOutColors[17][0x8000]; + +//this should be public, because it gets used somewhere else +CACHE_ALIGN u8 gpuBlendTable555[17][17][32][32]; + + +/*****************************************************************************/ +// PIXEL RENDERING - 3D +/*****************************************************************************/ + +#define DECL3D \ + int x = dstX; \ + int passing = dstX<<1; \ + u16 color = _3dColorLine[srcX]; \ + u8 alpha = _3dAlphaLine[srcX]; \ + u8* dst = currDst; + +FORCEINLINE void GPU::setFinal3DColorSpecialNone(int dstX, int srcX) +{ + DECL3D; + + // We must blend if the 3D layer has the highest prio + if((alpha < 16) && bg0HasHighestPrio) + { + int bg_under = bgPixels[dstX]; + u16 final = color; + + // If the layer we are drawing on is selected as 2nd source, we can blend + if(BLDCNT & (0x100 << bg_under)) + { + { + COLOR c1, c2, cfinal; + + c1.val = color; + c2.val = T2ReadWord(dst, passing); + + cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); + cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); + cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); + + final = cfinal.val; + } + } + + T2WriteWord(dst, passing, (final | 0x8000)); + bgPixels[x] = 0; + } + else + { + T2WriteWord(dst, passing, (color | 0x8000)); + bgPixels[x] = 0; + } +} + +FORCEINLINE void GPU::setFinal3DColorSpecialBlend(int dstX, int srcX) +{ + DECL3D; + + // We can blend if the 3D layer is selected as 1st target, + //but also if the 3D layer has the highest prio. + if((alpha < 16) && ((BLDCNT & 0x1) || bg0HasHighestPrio)) + { + int bg_under = bgPixels[x]; + u16 final = color; + + //If the layer we are drawing on is selected as 2nd source, we can blend + if(BLDCNT & (0x100 << bg_under)) + { + { + COLOR c1, c2, cfinal; + + c1.val = color; + c2.val = T2ReadWord(dst, passing); + + cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); + cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); + cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); + + final = cfinal.val; + } + } + + T2WriteWord(dst, passing, (final | 0x8000)); + bgPixels[x] = 0; + } + else + { + T2WriteWord(dst, passing, (color | 0x8000)); + bgPixels[x] = 0; + } +} + +FORCEINLINE void GPU::setFinal3DColorSpecialIncrease(int dstX, int srcX) +{ + DECL3D; + u16 final = color; + + // We must blend if the 3D layer has the highest prio + // But it doesn't seem to have priority over fading, + // unlike semi-transparent sprites + if((alpha < 16) && bg0HasHighestPrio) + { + int bg_under = bgPixels[x]; + + /* If the layer we are drawing on is selected as 2nd source, we can blend */ + if(BLDCNT & (0x100 << bg_under)) + { + { + COLOR c1, c2, cfinal; + + c1.val = color; + c2.val = T2ReadWord(dst, passing); + + cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); + cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); + cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); + + final = cfinal.val; + } + } + } + + if(BLDCNT & 0x1) + { + if (BLDY_EVY != 0x0) + { + final = fadeInColors[BLDY_EVY][final&0x7FFF]; + } + + T2WriteWord(dst, passing, (final | 0x8000)); + bgPixels[x] = 0; + } + else + { + T2WriteWord(dst, passing, (final | 0x8000)); + bgPixels[x] = 0; + } +} + +FORCEINLINE void GPU::setFinal3DColorSpecialDecrease(int dstX, int srcX) +{ + DECL3D; + + u16 final = color; + + // We must blend if the 3D layer has the highest prio + // But it doesn't seem to have priority over fading + // unlike semi-transparent sprites + if((alpha < 16) && bg0HasHighestPrio) + { + int bg_under = bgPixels[x]; + + // If the layer we are drawing on is selected as 2nd source, we can blend + if(BLDCNT & (0x100 << bg_under)) + { + { + COLOR c1, c2, cfinal; + + c1.val = color; + c2.val = T2ReadWord(dst, passing); + + cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); + cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); + cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); + + final = cfinal.val; + } + } + } + + if(BLDCNT & 0x1) + { + if (BLDY_EVY != 0x0) + { + final = fadeOutColors[BLDY_EVY][final&0x7FFF]; + } + + T2WriteWord(dst, passing, (final | 0x8000)); + bgPixels[x] = 0; + } + else + { + T2WriteWord(dst, passing, (final | 0x8000)); + bgPixels[x] = 0; + } +} + +FORCEINLINE void GPU::setFinal3DColorSpecialNoneWnd(int dstX, int srcX) +{ + DECL3D; + + bool windowDraw = true, windowEffect = true; + + renderline_checkWindows(x, windowDraw, windowEffect); + + if(windowDraw) + { + // We must blend if the 3D layer has the highest prio + if((alpha < 16) && bg0HasHighestPrio) + { + int bg_under = bgPixels[x]; + u16 final = color; + + // If the layer we are drawing on is selected as 2nd source, we can blend + if(BLDCNT & (0x100 << bg_under)) + { + { + COLOR c1, c2, cfinal; + + c1.val = color; + c2.val = T2ReadWord(dst, passing); + + cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); + cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); + cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); + + final = cfinal.val; + } + } + + T2WriteWord(dst, passing, (final | 0x8000)); + bgPixels[x] = 0; + } + else + { + T2WriteWord(dst, passing, (color | 0x8000)); + bgPixels[x] = 0; + } + } +} + +FORCEINLINE void GPU::setFinal3DColorSpecialBlendWnd(int dstX, int srcX) +{ + DECL3D; + + bool windowDraw = true, windowEffect = true; + + renderline_checkWindows(x, windowDraw, windowEffect); + + if(windowDraw) + { + // We can blend if the 3D layer is selected as 1st target, + // but also if the 3D layer has the highest prio. + if((alpha < 16) && (((BLDCNT & 0x1) && windowEffect) || bg0HasHighestPrio)) + { + int bg_under = bgPixels[x]; + u16 final = color; + + // If the layer we are drawing on is selected as 2nd source, we can blend + if(BLDCNT & (0x100 << bg_under)) + { + { + COLOR c1, c2, cfinal; + + c1.val = color; + c2.val = T2ReadWord(dst, passing); + + cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); + cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); + cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); + + final = cfinal.val; + } + } + + T2WriteWord(dst, passing, (final | 0x8000)); + bgPixels[x] = 0; + } + else + { + T2WriteWord(dst, passing, (color | 0x8000)); + bgPixels[x] = 0; + } + } +} + +FORCEINLINE void GPU::setFinal3DColorSpecialIncreaseWnd(int dstX, int srcX) +{ + DECL3D; + + bool windowDraw = true, windowEffect = true; + u16 final = color; + + renderline_checkWindows(x, windowDraw, windowEffect); + + if(windowDraw) + { + // We must blend if the 3D layer has the highest prio + // But it doesn't seem to have priority over fading, + // unlike semi-transparent sprites + if((alpha < 16) && bg0HasHighestPrio) + { + int bg_under = bgPixels[x]; + + // If the layer we are drawing on is selected as 2nd source, we can blend + if(BLDCNT & (0x100 << bg_under)) + { + { + COLOR c1, c2, cfinal; + + c1.val = color; + c2.val = T2ReadWord(dst, passing); + + cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); + cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); + cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); + + final = cfinal.val; + } + } + } + + if((BLDCNT & 0x1) && windowEffect) + { + if (BLDY_EVY != 0x0) + { + final = fadeInColors[BLDY_EVY][final&0x7FFF]; + } + + T2WriteWord(dst, passing, (final | 0x8000)); + bgPixels[x] = 0; + } + else + { + T2WriteWord(dst, passing, (final | 0x8000)); + bgPixels[x] = 0; + } + } +} + +FORCEINLINE void GPU::setFinal3DColorSpecialDecreaseWnd(int dstX, int srcX) +{ + DECL3D; + + bool windowDraw = true, windowEffect = true; + u16 final = color; + + renderline_checkWindows(x, windowDraw, windowEffect); + + if(windowDraw) + { + // We must blend if the 3D layer has the highest prio + // But it doesn't seem to have priority over fading, + // unlike semi-transparent sprites + if((alpha < 16) && bg0HasHighestPrio) + { + int bg_under = bgPixels[x]; + + // If the layer we are drawing on is selected as 2nd source, we can blend + if(BLDCNT & (0x100 << bg_under)) + { + { + COLOR c1, c2, cfinal; + + c1.val = color; + c2.val = T2ReadWord(dst, passing); + + cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); + cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); + cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); + + final = cfinal.val; + } + } + } + + if((BLDCNT & 0x1) && windowEffect) + { + if (BLDY_EVY != 0x0) + { + final = fadeOutColors[BLDY_EVY][final&0x7FFF]; + } + + T2WriteWord(dst, passing, (final | 0x8000)); + bgPixels[x] = 0; + } + else + { + T2WriteWord(dst, passing, (final | 0x8000)); + bgPixels[x] = 0; + } + } +} + + static void setFinalOBJColorSpecialNone (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u8 type, u16 x); static void setFinalOBJColorSpecialBlend (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u8 type, u16 x); static void setFinalOBJColorSpecialIncrease (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u8 type, u16 x); @@ -140,16 +541,6 @@ static void setFinalOBJColorSpecialBlendWnd (GPU *gpu, u32 passing, u8 *dst, u1 static void setFinalOBJColorSpecialIncreaseWnd (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u8 type, u16 x); static void setFinalOBJColorSpecialDecreaseWnd (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u8 type, u16 x); -static void setFinal3DColorSpecialNone (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x); -static void setFinal3DColorSpecialBlend (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x); -static void setFinal3DColorSpecialIncrease (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x); -static void setFinal3DColorSpecialDecrease (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x); -static void setFinal3DColorSpecialNoneWnd (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x); -static void setFinal3DColorSpecialBlendWnd (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x); -static void setFinal3DColorSpecialIncreaseWnd (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x); -static void setFinal3DColorSpecialDecreaseWnd (GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x); - - const GPU::FinalOBJColFunct pixelBlittersOBJ[8] = { setFinalOBJColorSpecialNone, setFinalOBJColorSpecialBlend, @@ -160,24 +551,6 @@ const GPU::FinalOBJColFunct pixelBlittersOBJ[8] = { setFinalOBJColorSpecialIncreaseWnd, setFinalOBJColorSpecialDecreaseWnd,}; -const GPU::Final3DColFunct pixelBlitters3D[8] = { - setFinal3DColorSpecialNone, - setFinal3DColorSpecialBlend, - setFinal3DColorSpecialIncrease, - setFinal3DColorSpecialDecrease, - setFinal3DColorSpecialNoneWnd, - setFinal3DColorSpecialBlendWnd, - setFinal3DColorSpecialIncreaseWnd, - setFinal3DColorSpecialDecreaseWnd}; - -static const CACHE_ALIGN u8 win_empty[256] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; -static CACHE_ALIGN u16 fadeInColors[17][0x8000]; -static CACHE_ALIGN u16 fadeOutColors[17][0x8000]; -CACHE_ALIGN u8 gpuBlendTable555[17][17][32][32]; /*****************************************************************************/ // INITIALIZATION @@ -236,9 +609,6 @@ static void GPU_InitFadeColors() } } -static u16 line3Dcolor[512]; -static u8 line3Dalpha[512]; - GPU * GPU_Init(u8 l) { GPU * g; @@ -249,17 +619,13 @@ GPU * GPU_Init(u8 l) GPU_Reset(g, l); GPU_InitFadeColors(); - //clear out the excess line buffers (beyond x=255) - memset(line3Dcolor+256, 0, 256*sizeof(u16)); - memset(line3Dalpha+256, 0, 256*sizeof(u8)); - g->curr_win[0] = win_empty; g->curr_win[1] = win_empty; g->need_update_winh[0] = true; g->need_update_winh[1] = true; g->setFinalColorBck_funcNum = 0; + g->setFinalColor3d_funcNum = 0; g->setFinalColorSpr = setFinalOBJColorSpecialNone; - g->setFinalColor3D = setFinal3DColorSpecialNone; return g; } @@ -269,8 +635,8 @@ void GPU_Reset(GPU *g, u8 l) memset(g, 0, sizeof(GPU)); g->setFinalColorBck_funcNum = 0; + g->setFinalColor3d_funcNum = 0; g->setFinalColorSpr = setFinalOBJColorSpecialNone; - g->setFinalColor3D = setFinal3DColorSpecialNone; g->core = l; g->BGSize[0][0] = g->BGSize[1][0] = g->BGSize[2][0] = g->BGSize[3][0] = 256; g->BGSize[0][1] = g->BGSize[1][1] = g->BGSize[2][1] = g->BGSize[3][1] = 256; @@ -413,7 +779,7 @@ void SetupFinalPixelBlitter (GPU *gpu) gpu->setFinalColorSpr = pixelBlittersOBJ[windowUsed*4 + blendMode]; gpu->setFinalColorBck_funcNum = windowUsed*4 + blendMode; - gpu->setFinalColor3D = pixelBlitters3D[windowUsed*4 + blendMode]; + gpu->setFinalColor3d_funcNum = windowUsed*4 + blendMode; } @@ -484,13 +850,11 @@ void GPU_setVideoProp(GPU * gpu, u32 p) //GPU_resortBGs(gpu); } -/* this is writing in BGxCNT */ -/* FIXME: all DEBUG_TRI are broken */ +//this handles writing in BGxCNT void GPU_setBGProp(GPU * gpu, u16 num, u16 p) { struct _BGxCNT * cnt = &((gpu->dispx_st)->dispx_BGxCNT[num].bits); struct _DISPCNT * dispCnt = &(gpu->dispx_st)->dispx_DISPCNT.bits; - int mode; T1WriteWord((u8 *)&(gpu->dispx_st)->dispx_BGxCNT[num].val, 0, p); @@ -500,13 +864,15 @@ void GPU_setBGProp(GPU * gpu, u16 num, u16 p) { gpu->BG_tile_ram[num] = ARM9MEM_BBG; gpu->BG_bmp_ram[num] = ARM9MEM_BBG; + gpu->BG_bmp_large_ram[num] = ARM9MEM_BBG; gpu->BG_map_ram[num] = ARM9MEM_BBG; } else { - gpu->BG_tile_ram[num] = ARM9MEM_ABG + dispCnt->CharacBase_Block * ADDRESS_STEP_64kB ; + gpu->BG_tile_ram[num] = ARM9MEM_ABG + dispCnt->CharacBase_Block * ADDRESS_STEP_64KB ; gpu->BG_bmp_ram[num] = ARM9MEM_ABG; - gpu->BG_map_ram[num] = ARM9MEM_ABG + dispCnt->ScreenBase_Block * ADDRESS_STEP_64kB; + gpu->BG_bmp_large_ram[num] = ARM9MEM_ABG; + gpu->BG_map_ram[num] = ARM9MEM_ABG + dispCnt->ScreenBase_Block * ADDRESS_STEP_64KB; } gpu->BG_tile_ram[num] += (cnt->CharacBase_Block * ADDRESS_STEP_16KB); @@ -525,7 +891,30 @@ void GPU_setBGProp(GPU * gpu, u16 num, u16 p) break; } - mode = mode2type[dispCnt->BG_Mode][num]; + BGType mode = mode2type[dispCnt->BG_Mode][num]; + + //clarify affine ext modes + if(mode == BGType_AffineExt) + { + //see: http://nocash.emubase.de/gbatek.htm#dsvideobgmodescontrol + u8 affineModeSelection = (cnt->Palette_256 << 1) | (cnt->CharacBase_Block & 1) ; + switch(affineModeSelection) + { + case 0: + case 1: + mode = BGType_AffineExt_256x16; + break; + case 2: + mode = BGType_AffineExt_256x1; + break; + case 3: + mode = BGType_AffineExt_Direct; + break; + } + } + + gpu->BGTypes[num] = mode; + gpu->BGSize[num][0] = sizeTab[mode][cnt->ScreenSize][0]; gpu->BGSize[num][1] = sizeTab[mode][cnt->ScreenSize][1]; @@ -1035,364 +1424,9 @@ static void setFinalOBJColorSpecialDecreaseWnd(GPU *gpu, u32 passing, u8 *dst, u } } -/*****************************************************************************/ -// PIXEL RENDERING - 3D -/*****************************************************************************/ - -static void setFinal3DColorSpecialNone(GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x) -{ - /* We must blend if the 3D layer has the highest prio */ - if((alpha < 16) && gpu->bg0HasHighestPrio) - { - int bg_under = gpu->bgPixels[x]; - u16 final = color; - - /* If the layer we are drawing on is selected as 2nd source, we can blend */ - if(gpu->BLDCNT & (0x100 << bg_under)) - { - { - COLOR c1, c2, cfinal; - - c1.val = color; - c2.val = T2ReadWord(dst, passing); - - cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); - cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); - cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); - - final = cfinal.val; - } - } - - T2WriteWord(dst, passing, (final | 0x8000)); - gpu->bgPixels[x] = 0; - } - else - { - T2WriteWord(dst, passing, (color | 0x8000)); - gpu->bgPixels[x] = 0; - } -} - -static void setFinal3DColorSpecialBlend(GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x) -{ - /* We can blend if the 3D layer is selected as 1st target, */ - /* but also if the 3D layer has the highest prio. */ - if((alpha < 16) && ((gpu->BLDCNT & 0x1) || gpu->bg0HasHighestPrio)) - { - int bg_under = gpu->bgPixels[x]; - u16 final = color; - - /* If the layer we are drawing on is selected as 2nd source, we can blend */ - if(gpu->BLDCNT & (0x100 << bg_under)) - { - { - COLOR c1, c2, cfinal; - - c1.val = color; - c2.val = T2ReadWord(dst, passing); - - cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); - cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); - cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); - - final = cfinal.val; - } - } - - T2WriteWord(dst, passing, (final | 0x8000)); - gpu->bgPixels[x] = 0; - } - else - { - T2WriteWord(dst, passing, (color | 0x8000)); - gpu->bgPixels[x] = 0; - } -} - -static void setFinal3DColorSpecialIncrease(GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x) -{ - u16 final = color; - - /* We must blend if the 3D layer has the highest prio */ - /* But it doesn't seem to have priority over fading, */ - /* unlike semi-transparent sprites */ - if((alpha < 16) && gpu->bg0HasHighestPrio) - { - int bg_under = gpu->bgPixels[x]; - - /* If the layer we are drawing on is selected as 2nd source, we can blend */ - if(gpu->BLDCNT & (0x100 << bg_under)) - { - { - COLOR c1, c2, cfinal; - - c1.val = color; - c2.val = T2ReadWord(dst, passing); - - cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); - cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); - cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); - - final = cfinal.val; - } - } - } - - if(gpu->BLDCNT & 0x1) - { - if (gpu->BLDY_EVY != 0x0) - { - final = fadeInColors[gpu->BLDY_EVY][final&0x7FFF]; - } - - T2WriteWord(dst, passing, (final | 0x8000)); - gpu->bgPixels[x] = 0; - } - else - { - T2WriteWord(dst, passing, (final | 0x8000)); - gpu->bgPixels[x] = 0; - } -} - -static void setFinal3DColorSpecialDecrease(GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x) -{ - u16 final = color; - - /* We must blend if the 3D layer has the highest prio */ - /* But it doesn't seem to have priority over fading, */ - /* unlike semi-transparent sprites */ - if((alpha < 16) && gpu->bg0HasHighestPrio) - { - int bg_under = gpu->bgPixels[x]; - - /* If the layer we are drawing on is selected as 2nd source, we can blend */ - if(gpu->BLDCNT & (0x100 << bg_under)) - { - { - COLOR c1, c2, cfinal; - - c1.val = color; - c2.val = T2ReadWord(dst, passing); - - cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); - cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); - cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); - - final = cfinal.val; - } - } - } - - if(gpu->BLDCNT & 0x1) - { - if (gpu->BLDY_EVY != 0x0) - { - final = fadeOutColors[gpu->BLDY_EVY][final&0x7FFF]; - } - - T2WriteWord(dst, passing, (final | 0x8000)); - gpu->bgPixels[x] = 0; - } - else - { - T2WriteWord(dst, passing, (final | 0x8000)); - gpu->bgPixels[x] = 0; - } -} - -static void setFinal3DColorSpecialNoneWnd(GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x) -{ - bool windowDraw = true, windowEffect = true; - - gpu->renderline_checkWindows(x, windowDraw, windowEffect); - - if(windowDraw) - { - /* We must blend if the 3D layer has the highest prio */ - if((alpha < 16) && gpu->bg0HasHighestPrio) - { - int bg_under = gpu->bgPixels[x]; - u16 final = color; - - /* If the layer we are drawing on is selected as 2nd source, we can blend */ - if(gpu->BLDCNT & (0x100 << bg_under)) - { - { - COLOR c1, c2, cfinal; - - c1.val = color; - c2.val = T2ReadWord(dst, passing); - - cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); - cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); - cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); - - final = cfinal.val; - } - } - - T2WriteWord(dst, passing, (final | 0x8000)); - gpu->bgPixels[x] = 0; - } - else - { - T2WriteWord(dst, passing, (color | 0x8000)); - gpu->bgPixels[x] = 0; - } - } -} - -static void setFinal3DColorSpecialBlendWnd(GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x) -{ - bool windowDraw = true, windowEffect = true; - - gpu->renderline_checkWindows(x, windowDraw, windowEffect); - - if(windowDraw) - { - /* We can blend if the 3D layer is selected as 1st target, */ - /* but also if the 3D layer has the highest prio. */ - if((alpha < 16) && (((gpu->BLDCNT & 0x1) && windowEffect) || gpu->bg0HasHighestPrio)) - { - int bg_under = gpu->bgPixels[x]; - u16 final = color; - - /* If the layer we are drawing on is selected as 2nd source, we can blend */ - if(gpu->BLDCNT & (0x100 << bg_under)) - { - { - COLOR c1, c2, cfinal; - - c1.val = color; - c2.val = T2ReadWord(dst, passing); - - cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); - cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); - cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); - - final = cfinal.val; - } - } - - T2WriteWord(dst, passing, (final | 0x8000)); - gpu->bgPixels[x] = 0; - } - else - { - T2WriteWord(dst, passing, (color | 0x8000)); - gpu->bgPixels[x] = 0; - } - } -} - -static void setFinal3DColorSpecialIncreaseWnd(GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x) -{ - bool windowDraw = true, windowEffect = true; - u16 final = color; - - gpu->renderline_checkWindows(x, windowDraw, windowEffect); - - if(windowDraw) - { - /* We must blend if the 3D layer has the highest prio */ - /* But it doesn't seem to have priority over fading, */ - /* unlike semi-transparent sprites */ - if((alpha < 16) && gpu->bg0HasHighestPrio) - { - int bg_under = gpu->bgPixels[x]; - - /* If the layer we are drawing on is selected as 2nd source, we can blend */ - if(gpu->BLDCNT & (0x100 << bg_under)) - { - { - COLOR c1, c2, cfinal; - - c1.val = color; - c2.val = T2ReadWord(dst, passing); - - cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); - cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); - cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); - - final = cfinal.val; - } - } - } - - if((gpu->BLDCNT & 0x1) && windowEffect) - { - if (gpu->BLDY_EVY != 0x0) - { - final = fadeInColors[gpu->BLDY_EVY][final&0x7FFF]; - } - - T2WriteWord(dst, passing, (final | 0x8000)); - gpu->bgPixels[x] = 0; - } - else - { - T2WriteWord(dst, passing, (final | 0x8000)); - gpu->bgPixels[x] = 0; - } - } -} - -static void setFinal3DColorSpecialDecreaseWnd(GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x) -{ - bool windowDraw = true, windowEffect = true; - u16 final = color; - - gpu->renderline_checkWindows(x, windowDraw, windowEffect); - - if(windowDraw) - { - /* We must blend if the 3D layer has the highest prio */ - /* But it doesn't seem to have priority over fading, */ - /* unlike semi-transparent sprites */ - if((alpha < 16) && gpu->bg0HasHighestPrio) - { - int bg_under = gpu->bgPixels[x]; - - /* If the layer we are drawing on is selected as 2nd source, we can blend */ - if(gpu->BLDCNT & (0x100 << bg_under)) - { - { - COLOR c1, c2, cfinal; - - c1.val = color; - c2.val = T2ReadWord(dst, passing); - - cfinal.bits.red = ((c1.bits.red * alpha / 16) + (c2.bits.red * (16 - alpha) / 16)); - cfinal.bits.green = ((c1.bits.green * alpha / 16) + (c2.bits.green * (16 - alpha) / 16)); - cfinal.bits.blue = ((c1.bits.blue * alpha / 16) + (c2.bits.blue * (16 - alpha) / 16)); - - final = cfinal.val; - } - } - } - - if((gpu->BLDCNT & 0x1) && windowEffect) - { - if (gpu->BLDY_EVY != 0x0) - { - final = fadeOutColors[gpu->BLDY_EVY][final&0x7FFF]; - } - - T2WriteWord(dst, passing, (final | 0x8000)); - gpu->bgPixels[x] = 0; - } - else - { - T2WriteWord(dst, passing, (final | 0x8000)); - gpu->bgPixels[x] = 0; - } - } -} - FORCEINLINE void GPU::setFinalColorBG(u16 color, u8 x) { + //if someone disagrees with these, they could be reimplemented as a function pointer easily switch(setFinalColorBck_funcNum | (blend1?8:0)) { case 0x0: setFinalBGColorSpecialNone(color,x,false); break; @@ -1415,6 +1449,22 @@ FORCEINLINE void GPU::setFinalColorBG(u16 color, u8 x) } +FORCEINLINE void GPU::setFinalColor3d(int dstX, int srcX) +{ + //if someone disagrees with these, they could be reimplemented as a function pointer easily + switch(setFinalColor3d_funcNum) + { + case 0x0: setFinal3DColorSpecialNone(dstX,srcX); break; + case 0x1: setFinal3DColorSpecialBlend(dstX,srcX); break; + case 0x2: setFinal3DColorSpecialIncrease(dstX,srcX); break; + case 0x3: setFinal3DColorSpecialDecrease(dstX,srcX); break; + case 0x4: setFinal3DColorSpecialNoneWnd(dstX,srcX); break; + case 0x5: setFinal3DColorSpecialBlendWnd(dstX,srcX); break; + case 0x6: setFinal3DColorSpecialIncreaseWnd(dstX,srcX); break; + case 0x7: setFinal3DColorSpecialDecreaseWnd(dstX,srcX); break; + }; +} + //this was forced inline because most of the time it just falls through to setFinalColorBck() and the function call //overhead was ridiculous and terrible FORCEINLINE void GPU::__setFinalColorBck(u16 color, u8 x, bool opaque) @@ -1495,6 +1545,39 @@ static void mosaicSpriteLine(GPU * gpu, u16 l, u8 * dst, u8 * dst_alpha, u8 * ty mosaicSpriteLinePixel(gpu,i,l,dst,dst_alpha,typeTab,prioTab); } +void lineLarge8bpp(GPU * gpu) +{ + if(gpu->core == 1) { + PROGINFO("Cannot use large 8bpp screen on sub core\n"); + return; + } + + BGxOFS * ofs = &gpu->dispx_st->dispx_BGxOFS[gpu->currBgNum]; + u8 num = gpu->currBgNum; + u16 XBG = T1ReadWord((u8 *)&ofs->BGxHOFS, 0); + u16 YBG = gpu->currLine + T1ReadWord((u8 *)&ofs->BGxVOFS, 0); + u16 lg = gpu->BGSize[num][0]; + u16 ht = gpu->BGSize[num][1]; + u16 wmask = (lg-1); + u16 hmask = (ht-1); + YBG &= hmask; + + //TODO - handle wrapping / out of bounds correctly from rot_scale_op? + + u32 tmp_map = gpu->BG_bmp_large_ram[num] + lg * YBG; + u8* map = MMU_RenderMapToLCD(tmp_map); + + u8* pal = ARM9Mem.ARM9_VMEM + gpu->core * ADDRESS_STEP_1KB; + + for(int x = 0; x < lg; ++x, ++XBG) + { + XBG &= wmask; + u8 pixel = map[XBG]; + u16 color = T1ReadWord(pal, pixel<<1); + gpu->__setFinalColorBck(color,x,color!=0); + } + +} /*****************************************************************************/ // BACKGROUND RENDERING -TEXT- @@ -1750,15 +1833,10 @@ FORCEINLINE void extRotBG2(GPU * gpu, s32 X, s32 Y, s16 PA, s16 PB, s16 PC, s16 struct _DISPCNT * dispCnt = &(gpu->dispx_st)->dispx_DISPCNT.bits; u8 *map, *tile, *pal; - u8 affineModeSelection ; - /* see: http://nocash.emubase.de/gbatek.htm#dsvideobgmodescontrol */ - affineModeSelection = (bgCnt->Palette_256 << 1) | (bgCnt->CharacBase_Block & 1) ; -// printf("extrot mode %d\n", affineModeSelection); - switch(affineModeSelection) + switch(gpu->BGTypes[num]) { - case 0 : - case 1 : + case BGType_AffineExt_256x16: map = (u8 *)MMU_RenderMapToLCD(gpu->BG_map_ram[num]); if (!map) return; tile = (u8 *)MMU_RenderMapToLCD(gpu->BG_tile_ram[num]); @@ -1771,19 +1849,26 @@ FORCEINLINE void extRotBG2(GPU * gpu, s32 X, s32 Y, s16 PA, s16 PB, s16 PC, s16 // 16 bit bgmap entries apply_rot_fun(gpu,X,Y,PA,PB,PC,PD,LG, map, tile, pal, dispCnt->ExBGxPalette_Enable); return; - case 2 : + case BGType_AffineExt_256x1: // 256 colors map = (u8 *)MMU_RenderMapToLCD(gpu->BG_bmp_ram[num]); if (!map) return; pal = ARM9Mem.ARM9_VMEM + gpu->core * 0x400; apply_rot_fun(gpu,X,Y,PA,PB,PC,PD,LG, map, NULL, pal, 0); return; - case 3 : + case BGType_AffineExt_Direct: // direct colors / BMP map = (u8 *)MMU_RenderMapToLCD(gpu->BG_bmp_ram[num]); if (!map) return; apply_rot_fun(gpu,X,Y,PA,PB,PC,PD,LG, map, NULL, NULL, 0); return; + case BGType_Large8bpp: + // large screen 256 colors + map = (u8 *)MMU_RenderMapToLCD(gpu->BG_bmp_large_ram[num]); + if (!map) return; + pal = ARM9Mem.ARM9_VMEM + gpu->core * 0x400; + apply_rot_fun(gpu,X,Y,PA,PB,PC,PD,LG, map, NULL, pal, 0); + return; } } @@ -1791,6 +1876,10 @@ FORCEINLINE void extRotBG2(GPU * gpu, s32 X, s32 Y, s16 PA, s16 PB, s16 PC, s16 // BACKGROUND RENDERING -HELPER FUNCTIONS- /*****************************************************************************/ +void lineNull(GPU * gpu) +{ +} + void lineText(GPU * gpu) { BGxOFS * ofs = &gpu->dispx_st->dispx_BGxOFS[gpu->currBgNum]; @@ -2346,7 +2435,10 @@ void GPU::_spriteRender(u8 * dst, u8 * dst_alpha, u8 * typeTab, u8 * prioTab) //NOT TESTED: if (dispCnt->OBJ_BMP_2D_dim) // 256*256 + { + //verified by heroes of mana FMV intro src = (u8 *)MMU_RenderMapToLCD(gpu->sprMem + (((spriteInfo->TileIndex&0x3E0) * 64 + (spriteInfo->TileIndex&0x1F) *8 + ( y << 8)) << 1)); + } else // 128 * 512 src = (u8 *)MMU_RenderMapToLCD(gpu->sprMem + (((spriteInfo->TileIndex&0x3F0) * 64 + (spriteInfo->TileIndex&0x0F) *8 + ( y << 8)) << 1)); } @@ -2687,23 +2779,21 @@ static void GPU_ligne_layer(NDS_Screen * screen, u16 l) BGxOFS *bgofs = &gpu->dispx_st->dispx_BGxOFS[i16]; u16 hofs = (T1ReadWord((u8*)&bgofs->BGxHOFS, 0) & 0x1FF); - //line3Dcolor and line3Dalpha are left cleared by GPU initialization, - //and they always stay that way. - - gpu3D->NDS_3D_GetLine(l, line3Dcolor, line3Dalpha); + gfx3d_GetLineData(l, &gpu->_3dColorLine, &gpu->_3dAlphaLine); + u16* colorLine = gpu->_3dColorLine; for(int k = 0; k < 256; k++) { int q = ((k + hofs) & 0x1FF); - if(line3Dcolor[q] & 0x8000) - gpu->setFinalColor3D(gpu, (k << 1), gpu->currDst, line3Dcolor[q], line3Dalpha[q], k); + if(colorLine[q] & 0x8000) + gpu->setFinalColor3d(k, q); } continue; } } - modeRender[dispCnt->BG_Mode][i16](gpu); + gpu->modeRender(i16); } //layer enabled } } @@ -2785,9 +2875,9 @@ static void GPU_ligne_DispCapture(u16 l) case 1: // Capture 3D { //INFO("Capture 3D\n"); - u16 cap3DLine[512]; - gpu3D->NDS_3D_GetLineCaptured(l, (u16*)cap3DLine); - CAPCOPY(((u8*)cap3DLine),cap_dst); + u16* colorLine; + gfx3d_GetLineData(l, &colorLine, NULL); + CAPCOPY(((u8*)colorLine),cap_dst); } break; } @@ -2818,7 +2908,6 @@ static void GPU_ligne_DispCapture(u16 l) //INFO("Capture source is SourceA+B blended\n"); u16 *srcA = NULL; u16 *srcB = NULL; - u16 cap3DLine[512]; if (gpu->dispCapCnt.srcA == 0) { @@ -2830,12 +2919,11 @@ static void GPU_ligne_DispCapture(u16 l) } else { - gpu3D->NDS_3D_GetLineCaptured(l, (u16*)cap3DLine); - srcA = (u16 *)cap3DLine; // 3D screen + gfx3d_GetLineData(l, &srcA, NULL); } if (gpu->dispCapCnt.srcB == 0) // VRAM screen - srcB = (u16 *)(gpu->dispCapCnt.src) + (l * 512); + srcB = (u16 *)((gpu->dispCapCnt.src) + (l * 512)); else srcB = NULL; // DISP FIFOS @@ -2892,11 +2980,12 @@ static INLINE void GPU_ligne_MasterBrightness(NDS_Screen * screen, u16 l) u8 * dst = GPU_tempScreen + (screen->offset + l) * 512; u16 i16; - if (!gpu->MasterBrightFactor) return; + //isn't it odd that we can set uselessly high factors here? + //factors above 16 change nothing. curious. + int factor = gpu->MasterBrightFactor; + if(factor==0) return; + if(factor>16) factor=16; -#ifdef BRIGHT_TABLES - calc_bright_colors(); -#endif // Apply final brightness adjust (MASTER_BRIGHT) // Reference: http://nocash.emubase.de/gbatek.htm#dsvideo (Under MASTER_BRIGHTNESS) @@ -2914,7 +3003,7 @@ static INLINE void GPU_ligne_MasterBrightness(NDS_Screen * screen, u16 l) { for(i16 = 0; i16 < 256; ++i16) { - ((u16*)dst)[i16] = fadeInColors[gpu->MasterBrightFactor][((u16*)dst)[i16]&0x7FFF]; + ((u16*)dst)[i16] = fadeInColors[factor][((u16*)dst)[i16]&0x7FFF]; } break; } @@ -2924,7 +3013,7 @@ static INLINE void GPU_ligne_MasterBrightness(NDS_Screen * screen, u16 l) { for(i16 = 0; i16 < 256; ++i16) { - ((u16*)dst)[i16] = fadeOutColors[gpu->MasterBrightFactor][((u16*)dst)[i16]&0x7FFF]; + ((u16*)dst)[i16] = fadeOutColors[factor][((u16*)dst)[i16]&0x7FFF]; } break; } @@ -3029,17 +3118,16 @@ void GPU_ligne(NDS_Screen * screen, u16 l) //here is some setup which is only done on line 0 if(l == 0) { - for(int num=2;num<=3;num++) - { - BGxPARMS * parms; - if (num==2) - parms = &(gpu->dispx_st)->dispx_BG2PARMS; - else - parms = &(gpu->dispx_st)->dispx_BG3PARMS; - - parms->BGxX = gpu->affineInfo[num-2].x; - parms->BGxY = gpu->affineInfo[num-2].y; - } + //this is speculative. the idea is as follows: + //whenever the user updates the affine start position regs, it goes into the active regs immediately + //(this is handled on the set event from MMU) + //maybe it shouldnt take effect until the next hblank or something.. + //this is a based on a combination of: + //heroes of mana intro FMV + //SPP level 3-8 rotoscale room + //NSMB raster fx backdrops + //bubble bobble revolution classic mode + gpu->refreshAffineStartRegs(); } //cache some parameters which are assumed to be stable throughout the rendering of the entire line @@ -3123,21 +3211,79 @@ void GPU_ligne(NDS_Screen * screen, u16 l) void gpu_savestate(std::ostream* os) { - os->write((char*)GPU_tempScreen,sizeof(GPU_tempScreen)); + //version + write32le(0,os); + + os->write((char*)GPU_screen,sizeof(GPU_screen)); + + write32le(MainScreen.gpu->affineInfo[0].x,os); + write32le(MainScreen.gpu->affineInfo[0].y,os); + write32le(MainScreen.gpu->affineInfo[1].x,os); + write32le(MainScreen.gpu->affineInfo[1].y,os); + write32le(SubScreen.gpu->affineInfo[0].x,os); + write32le(SubScreen.gpu->affineInfo[0].y,os); + write32le(SubScreen.gpu->affineInfo[1].x,os); + write32le(SubScreen.gpu->affineInfo[1].y,os); } -bool gpu_loadstate(std::istream* is) +bool gpu_loadstate(std::istream* is, int size) { - is->read((char*)GPU_tempScreen,sizeof(GPU_tempScreen)); + //read version + int version; + if(read32le(&version,is) != 1) return false; + if(version != 0) return false; + + is->read((char*)GPU_screen,sizeof(GPU_screen)); + read32le(&MainScreen.gpu->affineInfo[0].x,is); + read32le(&MainScreen.gpu->affineInfo[0].y,is); + read32le(&MainScreen.gpu->affineInfo[1].x,is); + read32le(&MainScreen.gpu->affineInfo[1].y,is); + read32le(&SubScreen.gpu->affineInfo[0].x,is); + read32le(&SubScreen.gpu->affineInfo[0].y,is); + read32le(&SubScreen.gpu->affineInfo[1].x,is); + read32le(&SubScreen.gpu->affineInfo[1].y,is); + + MainScreen.gpu->refreshAffineStartRegs(); + SubScreen.gpu->refreshAffineStartRegs(); MainScreen.gpu->updateBLDALPHA(); SubScreen.gpu->updateBLDALPHA(); return !is->fail(); } +u32 GPU::getAffineStart(int layer, int xy) +{ + if(xy==0) return affineInfo[layer-2].x; + else return affineInfo[layer-2].y; +} + +void GPU::setAffineStartWord(int layer, int xy, u16 val, int word) +{ + u32 curr = getAffineStart(layer,xy); + if(word==0) curr = (curr&0xFFFF0000)|val; + else curr = (curr&0x0000FFFF)|(((u32)val)<<16); + setAffineStart(layer,xy,curr); +} + void GPU::setAffineStart(int layer, int xy, u32 val) { if(xy==0) affineInfo[layer-2].x = val; else affineInfo[layer-2].y = val; + refreshAffineStartRegs(); +} + +void GPU::refreshAffineStartRegs() +{ + for(int num=2;num<=3;num++) + { + BGxPARMS * parms; + if (num==2) + parms = &(dispx_st)->dispx_BG2PARMS; + else + parms = &(dispx_st)->dispx_BG3PARMS; + + parms->BGxX = affineInfo[num-2].x; + parms->BGxY = affineInfo[num-2].y; + } } void gpu_UpdateRender() diff --git a/src/GPU.h b/src/GPU.h index 936273531..c4279a39d 100644 --- a/src/GPU.h +++ b/src/GPU.h @@ -36,7 +36,7 @@ #include void gpu_savestate(std::ostream* os); -bool gpu_loadstate(std::istream* is); +bool gpu_loadstate(std::istream* is, int size); /******************************************************************************* this structure is for display control, @@ -402,7 +402,7 @@ void register_gl_fun(fun_gl_Begin beg,fun_gl_End end); #define ADDRESS_STEP_8KB 0x02000 #define ADDRESS_STEP_16KB 0x04000 #define ADDRESS_STEP_32KB 0x08000 -#define ADDRESS_STEP_64kB 0x10000 +#define ADDRESS_STEP_64KB 0x10000 #define ADDRESS_STEP_128KB 0x20000 #define ADDRESS_STEP_256KB 0x40000 #define ADDRESS_STEP_512KB 0x80000 @@ -598,12 +598,21 @@ typedef struct extern CACHE_ALIGN u8 gpuBlendTable555[17][17][32][32]; +enum BGType { + BGType_Invalid=0, BGType_Text=1, BGType_Affine=2, BGType_Large8bpp=3, + BGType_AffineExt=4, BGType_AffineExt_256x16=5, BGType_AffineExt_256x1=6, BGType_AffineExt_Direct=7 +}; + struct GPU { // some structs are becoming redundant // some functions too (no need to recopy some vars as it is done by MMU) REG_DISPx * dispx_st; + _BGxCNT & bgcnt(int num) { return (dispx_st)->dispx_BGxCNT[num].bits; } + _DISPCNT & dispCnt() { return dispx_st->dispx_DISPCNT.bits; } + void modeRender(int layer); + DISPCAPCNT dispCapCnt; BOOL LayersEnable[5]; itemsForPriority_t itemsForPriority[NB_PRIORITIES]; @@ -611,12 +620,14 @@ struct GPU #define BGBmpBB BG_bmp_ram #define BGChBB BG_tile_ram + u32 BG_bmp_large_ram[4]; u32 BG_bmp_ram[4]; u32 BG_tile_ram[4]; u32 BG_map_ram[4]; u8 BGExtPalSlot[4]; u32 BGSize[4][2]; + BGType BGTypes[4]; struct MosaicColor { u16 bg[4][256]; @@ -695,6 +706,9 @@ struct GPU bool blend1; u8* currDst; + u16* _3dColorLine; + u8* _3dAlphaLine; + static struct MosaicLookup { @@ -721,11 +735,12 @@ struct GPU u16 blend(u16 colA, u16 colB); typedef void (*FinalOBJColFunct)(GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u8 type, u16 x); - typedef void (*Final3DColFunct)(GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x); + typedef void (*Final3DColFunct)(GPU *gpu, int dstX, int srcX); int setFinalColorBck_funcNum; + int setFinalColor3d_funcNum; FinalOBJColFunct setFinalColorSpr; - Final3DColFunct setFinalColor3D; + //Final3DColFunct setFinalColor3D; enum SpriteRenderMode { SPRITE_1D, SPRITE_2D } spriteRenderMode; @@ -735,6 +750,8 @@ struct GPU void spriteRender(u8 * dst, u8 * dst_alpha, u8 * typeTab, u8 * prioTab); void setFinalColorBG(u16 color, u8 x); + void setFinalColor3d(int dstX, int srcX); + FORCEINLINE void setFinalBGColorSpecialNone(u16 color, u8 x, bool blend1); FORCEINLINE void setFinalBGColorSpecialBlend(u16 color, u8 x, bool blend1); FORCEINLINE void setFinalBGColorSpecialIncrease(u16 color, u8 x, bool blend1); @@ -743,9 +760,22 @@ struct GPU FORCEINLINE void setFinalBGColorSpecialBlendWnd(u16 color, u8 x, bool blend1); FORCEINLINE void setFinalBGColorSpecialIncreaseWnd(u16 color, u8 x, bool blend1); FORCEINLINE void setFinalBGColorSpecialDecreaseWnd(u16 color, u8 x, bool blend1); + + FORCEINLINE void setFinal3DColorSpecialNone(int dstX, int srcX); + FORCEINLINE void setFinal3DColorSpecialBlend(int dstX, int srcX); + FORCEINLINE void setFinal3DColorSpecialIncrease(int dstX, int srcX); + FORCEINLINE void setFinal3DColorSpecialDecrease(int dstX, int srcX); + FORCEINLINE void setFinal3DColorSpecialNoneWnd(int dstX, int srcX); + FORCEINLINE void setFinal3DColorSpecialBlendWnd(int dstX, int srcX); + FORCEINLINE void setFinal3DColorSpecialIncreaseWnd(int dstX, int srcX); + FORCEINLINE void setFinal3DColorSpecialDecreaseWnd(int dstX, int srcX); + void __setFinalColorBck(u16 color, u8 x, bool opaque); void setAffineStart(int layer, int xy, u32 val); + void setAffineStartWord(int layer, int xy, u16 val, int word); + u32 getAffineStart(int layer, int xy); + void refreshAffineStartRegs(); struct AffineInfo { AffineInfo() : x(0), y(0) {} @@ -824,9 +854,7 @@ namespace GPU_EXT void sprite1D(GPU * gpu, u16 l, u8 * dst, u8 * dst_alpha, u8 * typeTab, u8 * prioTab); void sprite2D(GPU * gpu, u16 l, u8 * dst, u8 * dst_alpha, u8 * typeTab, u8 * prioTab); -extern const short sizeTab[4][4][2]; extern const size sprSizeTab[4][4]; -extern const s8 mode2type[8][4]; typedef struct { GPU * gpu; @@ -849,7 +877,7 @@ extern MMU_struct MMU; #define GFXCORE_FULLSCREEN (1 << 0) -typedef struct +struct GraphicsInterface_struct { int id; // ID number for core(see above defines) const char *Name; // Name of core @@ -858,7 +886,7 @@ typedef struct void (*DeInit)(); // Deinitializes stuff related to core void (*Resize)(int width, int height, BOOL fullscreen); // Resizes window or fullscreen void (*OnScreenText)(char *string, ...); // For handling save state messages, etc. -} GraphicsInterface_struct; +} ; extern GraphicsInterface_struct GFXDummy; @@ -879,43 +907,46 @@ void GPU_set_DISPCAPCNT(u32 val) ; void GPU_ligne(NDS_Screen * screen, u16 l) ; void GPU_setMasterBrightness (GPU *gpu, u16 val); -#define GPU_setWIN0_H(gpu, val) {gpu->WIN0H0 = val >> 8; gpu->WIN0H1 = val&0xFF; gpu->need_update_winh[0] = true; } -#define GPU_setWIN0_H0(gpu, val) { gpu->WIN0H0 = val; gpu->need_update_winh[0] = true; } -#define GPU_setWIN0_H1(gpu, val) { gpu->WIN0H1 = val; gpu->need_update_winh[0] = true; } +inline void GPU_setWIN0_H(GPU* gpu, u16 val) { gpu->WIN0H0 = val >> 8; gpu->WIN0H1 = val&0xFF; gpu->need_update_winh[0] = true; } +inline void GPU_setWIN0_H0(GPU* gpu, u8 val) { gpu->WIN0H0 = val; gpu->need_update_winh[0] = true; } +inline void GPU_setWIN0_H1(GPU* gpu, u8 val) { gpu->WIN0H1 = val; gpu->need_update_winh[0] = true; } -#define GPU_setWIN0_V(gpu, val) {gpu->WIN0V0 = val >> 8; gpu->WIN0V1 = val&0xFF;} -#define GPU_setWIN0_V0(gpu, val) gpu->WIN0V0 = val -#define GPU_setWIN0_V1(gpu, val) gpu->WIN0V1 = val +inline void GPU_setWIN0_V(GPU* gpu, u16 val) { gpu->WIN0V0 = val >> 8; gpu->WIN0V1 = val&0xFF;} +inline void GPU_setWIN0_V0(GPU* gpu, u8 val) { gpu->WIN0V0 = val; } +inline void GPU_setWIN0_V1(GPU* gpu, u8 val) { gpu->WIN0V1 = val; } -#define GPU_setWIN1_H(gpu, val) {gpu->WIN1H0 = val >> 8; gpu->WIN1H1 = val&0xFF; gpu->need_update_winh[1] = true; } -#define GPU_setWIN1_H0(gpu, val) { gpu->WIN1H0 = val; gpu->need_update_winh[1] = true; } -#define GPU_setWIN1_H1(gpu, val) { gpu->WIN1H1 = val; gpu->need_update_winh[1] = true; } +inline void GPU_setWIN1_H(GPU* gpu, u16 val) {gpu->WIN1H0 = val >> 8; gpu->WIN1H1 = val&0xFF; gpu->need_update_winh[1] = true; } +inline void GPU_setWIN1_H0(GPU* gpu, u8 val) { gpu->WIN1H0 = val; gpu->need_update_winh[1] = true; } +inline void GPU_setWIN1_H1(GPU* gpu, u8 val) { gpu->WIN1H1 = val; gpu->need_update_winh[1] = true; } -#define GPU_setWIN1_V(gpu, val) {gpu->WIN1V0 = val >> 8; gpu->WIN1V1 = val&0xFF;} -#define GPU_setWIN1_V0(gpu, val) gpu->WIN1V0 = val -#define GPU_setWIN1_V1(gpu, val) gpu->WIN1V1 = val +inline void GPU_setWIN1_V(GPU* gpu, u16 val) { gpu->WIN1V0 = val >> 8; gpu->WIN1V1 = val&0xFF; } +inline void GPU_setWIN1_V0(GPU* gpu, u8 val) { gpu->WIN1V0 = val; } +inline void GPU_setWIN1_V1(GPU* gpu, u8 val) { gpu->WIN1V1 = val; } -#define GPU_setWININ(gpu, val) {gpu->WININ0=val&0x1F;\ - gpu->WININ0_SPECIAL=(val>>5)&1;\ - gpu->WININ1=(val>>8)&0x1F;\ - gpu->WININ1_SPECIAL=(val>>13)&1;\ - } -#define GPU_setWININ0(gpu, val) {gpu->WININ0 = val&0x1F; gpu->WININ0_SPECIAL = (val>>5)&1;} -#define GPU_setWININ1(gpu, val) {gpu->WININ1 = val&0x1F; gpu->WININ1_SPECIAL = (val>>5)&1;} +inline void GPU_setWININ(GPU* gpu, u16 val) { + gpu->WININ0=val&0x1F; + gpu->WININ0_SPECIAL=(val>>5)&1; + gpu->WININ1=(val>>8)&0x1F; + gpu->WININ1_SPECIAL=(val>>13)&1; +} -#define GPU_setWINOUT16(gpu, val) { gpu->WINOUT=val&0x1F;\ - gpu->WINOUT_SPECIAL=(val>>5)&1;\ - gpu->WINOBJ=(val>>8)&0x1F;\ - gpu->WINOBJ_SPECIAL=(val>>13)&1;\ - } -#define GPU_setWINOUT(gpu, val) {gpu->WINOUT = val&0x1F; gpu->WINOUT_SPECIAL = (val>>5)&1;} -#define GPU_setWINOBJ(gpu, val) {gpu->WINOBJ = val&0x1F; gpu->WINOBJ_SPECIAL = (val>>5)&1;} +inline void GPU_setWININ0(GPU* gpu, u8 val) { gpu->WININ0 = val&0x1F; gpu->WININ0_SPECIAL = (val>>5)&1; } +inline void GPU_setWININ1(GPU* gpu, u8 val) { gpu->WININ1 = val&0x1F; gpu->WININ1_SPECIAL = (val>>5)&1; } + +inline void GPU_setWINOUT16(GPU* gpu, u16 val) { + gpu->WINOUT=val&0x1F; + gpu->WINOUT_SPECIAL=(val>>5)&1; + gpu->WINOBJ=(val>>8)&0x1F; + gpu->WINOBJ_SPECIAL=(val>>13)&1; +} +inline void GPU_setWINOUT(GPU* gpu, u8 val) { gpu->WINOUT = val&0x1F; gpu->WINOUT_SPECIAL = (val>>5)&1; } +inline void GPU_setWINOBJ(GPU* gpu, u8 val) { gpu->WINOBJ = val&0x1F; gpu->WINOBJ_SPECIAL = (val>>5)&1; } // Blending void SetupFinalPixelBlitter (GPU *gpu); -#define GPU_setBLDCNT_LOW(gpu, val) {gpu->BLDCNT = (gpu->BLDCNT&0xFF00) | val; SetupFinalPixelBlitter (gpu);} +#define GPU_setBLDCNT_LOW(gpu, val) {gpu->BLDCNT = (gpu->BLDCNT&0xFF00) | (val); SetupFinalPixelBlitter (gpu);} #define GPU_setBLDCNT_HIGH(gpu, val) {gpu->BLDCNT = (gpu->BLDCNT&0xFF) | (val<<8); SetupFinalPixelBlitter (gpu);} -#define GPU_setBLDCNT(gpu, val) {gpu->BLDCNT = val; SetupFinalPixelBlitter (gpu);} +#define GPU_setBLDCNT(gpu, val) {gpu->BLDCNT = (val); SetupFinalPixelBlitter (gpu);} diff --git a/src/GPU_osd.cpp b/src/GPU_osd.cpp index a3787d3e1..8d8a98ce3 100644 --- a/src/GPU_osd.cpp +++ b/src/GPU_osd.cpp @@ -180,7 +180,11 @@ void OSDCLASS::addFixed(u16 x, u16 y, const char *fmt, ...) if (strcmp(msg, old_msg) == 0) return; - render51.PrintString(1,x,y,render51.MakeColor(128,0,0),msg,&screenshell); + render51.PrintString(1,x-1,y-1,render51.MakeColor(0,0,0),msg,&screenshell); + render51.PrintString(1,x+1,y-1,render51.MakeColor(0,0,0),msg,&screenshell); + render51.PrintString(1,x-1,y+1,render51.MakeColor(0,0,0),msg,&screenshell); + render51.PrintString(1,x+1,y+1,render51.MakeColor(0,0,0),msg,&screenshell); + render51.PrintString(1,x,y,render51.MakeColor(255,255,255),msg,&screenshell); needUpdate = true; } diff --git a/src/MMU.cpp b/src/MMU.cpp index 753e4c89e..df08ab890 100644 --- a/src/MMU.cpp +++ b/src/MMU.cpp @@ -46,6 +46,7 @@ #include "mc.h" #include "addons.h" #include "mic.h" +#include "movie.h" #ifdef DO_ASSERT_UNALIGNED #define ASSERT_UNALIGNED(x) assert(x) diff --git a/src/NDSSystem.cpp b/src/NDSSystem.cpp index d9a0ec3b1..f8f1fb1ed 100644 --- a/src/NDSSystem.cpp +++ b/src/NDSSystem.cpp @@ -40,6 +40,7 @@ #include "bios.h" #include "debug.h" #include "cheatSystem.h" +#include "movie.h" #ifdef _WIN32 #include "./windows/disView.h" @@ -844,6 +845,23 @@ int NDS_LoadROM( const char *filename, int bmtype, u32 bmsize, return ret; } +void MovieSRAM(int bmtype, u32 bmsize) { + + char buf[MAX_PATH]; + + memset(buf, 0, MAX_PATH); + strcpy(buf, pathFilenameToROMwithoutExt); + strcat(buf, ".sav"); // DeSmuME memory card :) + + if(movieMode != MOVIEMODE_INACTIVE) { + strcat(buf, "movie"); + } + + mc_realloc(&MMU.bupmem, bmtype, bmsize); + mc_load_file(&MMU.bupmem, buf); + +} + void NDS_FreeROM(void) { if (MMU.CART_ROM != MMU.UNUSED_RAM) @@ -869,6 +887,8 @@ void NDS_Reset( void) lastLag=0; TotalLagFrames=0; + currFrameCounter=0; + MMU_clearMem(); //ARM7 BIOS IRQ HANDLER @@ -1564,10 +1584,9 @@ u32 NDS_exec(s32 nb) { int i, j; - //TODO - since NDS_exec is not necessarily called one frame at a time, this could be wrong. - LagFrameFlag=1; + nb = 560190<<1; - nb += nds.cycles;//(nds.cycles>>26)<<26; + LagFrameFlag=1; //increase this to execute more instructions in each batch (reducing overhead) //the value of 4 seems to optimize speed.. do lower values increase precision? @@ -2392,23 +2411,30 @@ static std::string MakeInputDisplayString(u16 pad, u16 padExt) { return s; } +void ClearAutoHold(void) { + + for (int i=0; i < 10; i++) { + AutoHold.hold(i)=false; + } +} + void NDS_setPadFromMovie(u16 pad) { #define FIX(b,n) (((pad>>n)&1)!=0) NDS_setPad( - FIX(pad,0), - FIX(pad,1), + FIX(pad,12), //R + FIX(pad,11), //L + FIX(pad,10), //D + FIX(pad,9), //U + FIX(pad,7), //Select + FIX(pad,8), //Start + FIX(pad,6), //B + FIX(pad,5), //A + FIX(pad,4), //Y + FIX(pad,3), //X FIX(pad,2), - FIX(pad,3), - FIX(pad,4), - FIX(pad,5), - FIX(pad,6), - FIX(pad,7), - FIX(pad,8), - FIX(pad,9), - FIX(pad,10), - FIX(pad,11), - FIX(pad,12), + FIX(pad,1), + FIX(pad,0), FIX(pad,13) ); #undef FIX @@ -2417,12 +2443,12 @@ void NDS_setPadFromMovie(u16 pad) turbo Turbo; turbotime TurboTime; -static void SetTurbo(bool (&pad) [10]) { +static void SetTurbo(bool (&pad) [12]) { bool turbo[4] = {true, false, true, false}; bool currentbutton; - - for (int i=0; i < 10; i++) { + + for (int i=0; i < 12; i++) { currentbutton=Turbo.button(i); if(currentbutton) { @@ -2434,7 +2460,7 @@ static void SetTurbo(bool (&pad) [10]) { else TurboTime.time(i)=0; //reset timer if the button isn't pressed } - for (int i=0; i<10; i++) + for (int i=0; i<12; i++) TurboTime.time(i)++; } @@ -2443,7 +2469,7 @@ autohold AutoHold; void NDS_setPad(bool R,bool L,bool D,bool U,bool T,bool S,bool B,bool A,bool Y,bool X,bool W,bool E,bool G, bool F) { - bool padarray[10] = {R, L, D, U, T, S, B, A, Y, X}; + bool padarray[12] = {R, L, D, U, T, S, B, A, Y, X, W, E}; SetTurbo(padarray); @@ -2457,6 +2483,8 @@ void NDS_setPad(bool R,bool L,bool D,bool U,bool T,bool S,bool B,bool A,bool Y,b A=padarray[7]; Y=padarray[8]; X=padarray[9]; + W=padarray[10]; + E=padarray[11]; if(AutoHold.Right) R=!padarray[0]; if(AutoHold.Left) L=!padarray[1]; @@ -2555,20 +2583,18 @@ void NDS_setPad(bool R,bool L,bool D,bool U,bool T,bool S,bool B,bool A,bool Y,b nds.pad = - (FIX(r)<<0)| - (FIX(l)<<1)| - (FIX(d)<<2)| - (FIX(u)<<3)| - (FIX(t)<<4)| - (FIX(s)<<5)| + (FIX(r)<<12)| + (FIX(l)<<11)| + (FIX(d)<<10)| + (FIX(u)<<9)| + (FIX(s)<<8)| + (FIX(t)<<7)| (FIX(b)<<6)| - (FIX(a)<<7)| - (FIX(y)<<8)| - (FIX(x)<<9)| - (FIX(w)<<10)| - (FIX(e)<<11)| - (FIX(g)<<12)| - (FIX(f)<<13); + (FIX(a)<<5)| + (FIX(y)<<4)| + (FIX(x)<<3)| + (FIX(w)<<2)| + (FIX(e)<<1); // TODO: low power IRQ } diff --git a/src/NDSSystem.h b/src/NDSSystem.h index 2cfefa3fd..83fca58e3 100644 --- a/src/NDSSystem.h +++ b/src/NDSSystem.h @@ -45,6 +45,8 @@ struct turbo { bool A; bool Y; bool X; + bool L; + bool R; bool &button(int i) { return ((bool*)this)[i]; } }; @@ -62,6 +64,8 @@ struct turbotime { int A; int Y; int X; + int L; + int R; int &time(int i) { return ((int*)this)[i]; } }; @@ -380,6 +384,7 @@ class Driver { public: virtual BOOL WIFI_Host_InitSystem() { return FALSE; } virtual void WIFI_Host_ShutdownSystem() {} + virtual BOOL AVI_IsRecording() { return FALSE; } }; extern Driver* driver; @@ -387,6 +392,10 @@ extern std::string InputDisplayString; extern int LagFrameFlag; extern int lastLag, TotalLagFrames; +void MovieSRAM(int bmtype, u32 bmsize); + +void ClearAutoHold(void); + #endif diff --git a/src/OGLRender.cpp b/src/OGLRender.cpp index da136c3b0..8d77d4685 100644 --- a/src/OGLRender.cpp +++ b/src/OGLRender.cpp @@ -75,19 +75,12 @@ static void ENDGL() { #define CTASSERT(x) typedef char __assert ## y[(x) ? 1 : -1] #endif -static ALIGN(16) u8 GPU_screen3D [256*192*4]; -//static ALIGN(16) unsigned char GPU_screenStencil[256*256]; +static ALIGN(16) u8 GPU_screen3D [256*192*4]; + static const unsigned short map3d_cull[4] = {GL_FRONT_AND_BACK, GL_FRONT, GL_BACK, 0}; static const int texEnv[4] = { GL_MODULATE, GL_DECAL, GL_MODULATE, GL_MODULATE }; static const int depthFunc[2] = { GL_LESS, GL_EQUAL }; -static bool needRefreshFramebuffer = false; - - -float clearAlpha; - - - //derived values extracted from polyattr etc static bool wireframe=false, alpha31=false; @@ -346,7 +339,6 @@ static void OGLReset() // memset(GPU_screenStencil,0,sizeof(GPU_screenStencil)); memset(GPU_screen3D,0,sizeof(GPU_screen3D)); - needRefreshFramebuffer = false; } @@ -474,11 +466,6 @@ static char OGLInit(void) glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP); //clamp so that we dont run off the edges due to 1.0 -> [0,31] math } - if(glBlendFuncSeparateEXT == NULL) - clearAlpha = 1; - else - clearAlpha = 0; - OGLReset(); ENDGL(); @@ -536,7 +523,7 @@ static void setTexture(unsigned int format, unsigned int texpal) } - TexCache_SetTexture(format, texpal); + TexCache_SetTexture(format, texpal); } @@ -687,6 +674,49 @@ static void Control() } } + +static void GL_ReadFramebuffer() +{ + if(!BEGINGL()) return; + glFinish(); +// glReadPixels(0,0,256,192,GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, GPU_screenStencil); + glReadPixels(0,0,256,192,GL_BGRA_EXT, GL_UNSIGNED_BYTE, GPU_screen3D); + ENDGL(); + + //convert the pixels to a different format which is more convenient + //is it safe to modify the screen buffer? if not, we could make a temp copy + for(int i=0,y=191;y>=0;y--) + { + u16* dst = gfx3d_convertedScreen + (y<<8); + u8* dstAlpha = gfx3d_convertedAlpha + (y<<8); + + #ifndef NOSSE2 + //I dont know much about this kind of stuff, but this seems to help + //for some reason I couldnt make the intrinsics work + u8* wanx = (u8*)&((u32*)GPU_screen3D)[i]; + #define ASS(X,Y) __asm { prefetchnta [wanx+32*0x##X##Y] } + #define PUNK(X) ASS(X,0) ASS(X,1) ASS(X,2) ASS(X,3) ASS(X,4) ASS(X,5) ASS(X,6) ASS(X,7) ASS(X,8) ASS(X,9) ASS(X,A) ASS(X,B) ASS(X,C) ASS(X,D) ASS(X,E) ASS(X,F) + PUNK(0); PUNK(1); + #endif + + for(int x=0;x<256;x++,i++) + { + u32 &u32screen3D = ((u32*)GPU_screen3D)[i]; + u32screen3D>>=3; + u32screen3D &= 0x1F1F1F1F; + + const int t = i<<2; + const u8 a = GPU_screen3D[t+3]; + const u8 r = GPU_screen3D[t+2]; + const u8 g = GPU_screen3D[t+1]; + const u8 b = GPU_screen3D[t+0]; + dst[x] = R5G5B5TORGB15(r,g,b) | alpha_lookup[a]; + dstAlpha[x] = alpha_5bit_to_4bit[a]; + } + } +} + + static void OGLRender() { if(!BEGINGL()) return; @@ -828,10 +858,9 @@ static void OGLRender() } } - //since we just redrew, we need to refresh the framebuffers - needRefreshFramebuffer = true; - ENDGL(); + + GL_ReadFramebuffer(); } static void OGLVramReconfigureSignal() @@ -839,151 +868,6 @@ static void OGLVramReconfigureSignal() TexCache_Invalidate(); } -static void GL_ReadFramebuffer() -{ - if(!BEGINGL()) return; - glFinish(); -// glReadPixels(0,0,256,192,GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, GPU_screenStencil); - glReadPixels(0,0,256,192,GL_BGRA_EXT, GL_UNSIGNED_BYTE, GPU_screen3D); - ENDGL(); - - //convert the pixels to a different format which is more convenient - //is it safe to modify the screen buffer? if not, we could make a temp copy - for(int i=0;i<256*192;i++) { - u32 &u32screen3D = ((u32*)GPU_screen3D)[i]; - u32screen3D>>=3; - u32screen3D &= 0x1F1F1F1F; - } - - -//debug: view depth buffer via color buffer for debugging - //int ctr=0; - //for(ctr=0;ctr<256*192;ctr++) { - // float zval = GPU_screen3Ddepth[ctr]; - // u8* colorPtr = GPU_screen3D+ctr*3; - // if(zval<0) { - // colorPtr[0] = 255; - // colorPtr[1] = 0; - // colorPtr[2] = 0; - // } else if(zval>1) { - // colorPtr[0] = 0; - // colorPtr[1] = 0; - // colorPtr[2] = 255; - // } else { - // colorPtr[0] = colorPtr[1] = colorPtr[2] = zval*255; - // //INFO("%f %f %d\n",zval, zval*255,colorPtr[0]); - // } - - //} -} - -static void OGLGetLineCaptured(int line, u16* dst) -{ - if(needRefreshFramebuffer) { - needRefreshFramebuffer = false; - GL_ReadFramebuffer(); - } - - u8 *screen3D = (u8*)GPU_screen3D+((191-line)<<10); -// u8 *screenStencil = (u8*)GPU_screenStencil+((191-line)<<8); - - for(int i = 0; i < 256; i++) - { - /* u32 stencil = screenStencil[i]; - - if(!stencil) - { - dst[i] = 0x0000; - continue; - }*/ - - int t=i<<2; - /* u8 r = screen3D[t+2]; - u8 g = screen3D[t+1]; - u8 b = screen3D[t+0];*/ - - //if this math strikes you as wrong, be sure to look at GL_ReadFramebuffer() where the pixel format in screen3D is changed - //dst[i] = (b<<10) | (g<<5) | (r) | 0x8000; - dst[i] = (screen3D[t+2] | (screen3D[t+1] << 5) | (screen3D[t+0] << 10) | ((screen3D[t+3] > 0) ? 0x8000 : 0x0000)); - } -} - - -static void OGLGetLine(int line, u16* dst, u8* dstAlpha) -{ - assert(line<192 && line>=0); - - if(needRefreshFramebuffer) { - needRefreshFramebuffer = false; - GL_ReadFramebuffer(); - } - - u8 *screen3D = (u8*)GPU_screen3D+((191-line)<<10); - //u8 *screenStencil = (u8*)GPU_screenStencil+((191-line)<<8); - - //the renderer clears the stencil to 0 - //then it sets it to 1 whenever it renders a pixel that passes the alpha test - //(it also sets it to 2 under some circumstances when rendering shadow volumes) - //so, we COULD use a zero stencil value to indicate that nothing should get composited. - //in fact, we are going to do that to fix some problems. - //but beware that it i figure it might could CAUSE some problems - - //this alpha compositing blending logic isnt thought through very much - //someone needs to think about what bitdepth it should take place at and how to do it efficiently - - for(int i=0;i<256;i++) - { - // u32 stencil = screenStencil[i]; - - //you would use this if you wanted to use the stencil buffer to make decisions here - // if(!stencil) continue; - - // u16 oldcolor = dst[j]; - - int t=i<<2; - // u32 dstpixel; - - dst[i] = (screen3D[t+2] | (screen3D[t+1] << 5) | (screen3D[t+0] << 10) | ((screen3D[t+3] > 0) ? 0x8000 : 0x0000)); - dstAlpha[i] = alpha_5bit_to_4bit[screen3D[t+3]]; - - //old debug reminder: display alpha channel - //u32 r = screen3D[t+3]; - //u32 g = screen3D[t+3]; - //u32 b = screen3D[t+3]; - - //if this math strikes you as wrong, be sure to look at GL_ReadFramebuffer() where the pixel format in screen3D is changed - - /* u32 a = screen3D[t+3]; - - typedef u8 mixtbl[32][32]; - mixtbl & mix = mixTable555[a]; - - //r - u32 newpix = screen3D[t+2]; - u32 oldpix = oldcolor&0x1F; - newpix = mix[newpix][oldpix]; - dstpixel = newpix; - - //g - newpix = screen3D[t+1]; - oldpix = (oldcolor>>5)&0x1F; - newpix = mix[newpix][oldpix]; - dstpixel |= (newpix<<5); - - //b - newpix = screen3D[t+0]; - oldpix = (oldcolor>>10)&0x1F; - newpix = mix[newpix][oldpix]; - dstpixel |= (newpix<<10); - - dst[j] = dstpixel;*/ - } -} - - - - - GPU3DInterface gpu3Dgl = { "OpenGL", OGLInit, @@ -991,9 +875,4 @@ GPU3DInterface gpu3Dgl = { OGLClose, OGLRender, OGLVramReconfigureSignal, - OGLGetLine, - OGLGetLineCaptured }; - - - diff --git a/src/SPU.cpp b/src/SPU.cpp index e0d4e9ee5..bcb4d5d2d 100644 --- a/src/SPU.cpp +++ b/src/SPU.cpp @@ -32,6 +32,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "mem.h" #include "readwrite.h" #include "armcpu.h" +#include "NDSSystem.h" SPU_struct *SPU_core = 0; SPU_struct *SPU_user = 0; @@ -1034,7 +1035,10 @@ void SPU_Emulate_core() spu_core_samples = (int)(samples); samples -= spu_core_samples; - SPU_MixAudio(SPU_core,spu_core_samples); + if(driver->AVI_IsRecording()) + SPU_MixAudio(SPU_core,spu_core_samples); + else + SPU_MixAudio(SPU_core,spu_core_samples); } void SPU_Emulate_user() @@ -1300,7 +1304,7 @@ void spu_savestate(std::ostream* os) } } -bool spu_loadstate(std::istream* is) +bool spu_loadstate(std::istream* is, int size) { //read version int version; diff --git a/src/SPU.h b/src/SPU.h index 3279ce6db..6fc34b217 100644 --- a/src/SPU.h +++ b/src/SPU.h @@ -112,6 +112,6 @@ extern SPU_struct *SPU_core, *SPU_user; extern int spu_core_samples; void spu_savestate(std::ostream* os); -bool spu_loadstate(std::istream* is); +bool spu_loadstate(std::istream* is, int size); #endif diff --git a/src/gfx3d.cpp b/src/gfx3d.cpp index 429a3c1f2..a924df224 100644 --- a/src/gfx3d.cpp +++ b/src/gfx3d.cpp @@ -41,6 +41,9 @@ #include "readwrite.h" #include "FIFO.h" +using std::max; +using std::min; + GFX3D gfx3d; //tables that are provided to anyone @@ -79,6 +82,11 @@ CACHE_ALIGN const u8 material_3bit_to_8bit[] = { 0x00, 0x24, 0x49, 0x6D, 0x92, 0xB6, 0xDB, 0xFF }; +//maybe not very precise +CACHE_ALIGN const u8 material_3bit_to_5bit[] = { + 0, 4, 8, 13, 17, 22, 26, 31 +}; + CACHE_ALIGN const u8 alpha_5bit_to_4bit[] = { 0x00, 0x00, 0x01, 0x01, @@ -98,6 +106,13 @@ CACHE_ALIGN const u8 alpha_5bit_to_4bit[] = { 0x10, 0x10 }; +CACHE_ALIGN const u16 alpha_lookup[] = { + 0x0000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000, + 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000, + 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000, + 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000}; + + //private acceleration tables static float float16table[65536]; static float float10Table[1024]; @@ -107,6 +122,9 @@ static float normalTable[1024]; #define fix2float(v) (((float)((s32)(v))) / (float)(1<<12)) #define fix10_2float(v) (((float)((s32)(v))) / (float)(1<<9)) +CACHE_ALIGN u16 gfx3d_convertedScreen[256*192]; +CACHE_ALIGN u8 gfx3d_convertedAlpha[256*192]; + // Matrix stack handling static CACHE_ALIGN MatrixStack mtxStack[4] = { MatrixStack(1), // Projection stack @@ -165,7 +183,7 @@ static u32 lightColor[4] = {0,0,0,0}; static u32 lightDirection[4] = {0,0,0,0}; //material state: static u16 dsDiffuse, dsAmbient, dsSpecular, dsEmission; -/* Shininess */ +// Shininess static float shininessTable[128] = {0}; static int shininessInd = 0; @@ -297,6 +315,9 @@ void gfx3d_reset() last_t = 0; last_s = 0; viewport = 0xBFFF0000; + + memset(gfx3d_convertedScreen,0,sizeof(gfx3d_convertedScreen)); + memset(gfx3d_convertedAlpha,0,sizeof(gfx3d_convertedAlpha)); GFX_FIFOclear(); } @@ -396,6 +417,8 @@ void gfx3d_glStoreMatrix(u32 v) if(mymode==0) v = 0; + if(v==31) v=30; //? what should happen in this case? + MatrixStackLoadMatrix (&mtxStack[mymode], v&31, mtxCurrent[mymode]); if(mymode==2) MatrixStackLoadMatrix (&mtxStack[1], v&31, mtxCurrent[1]); @@ -410,6 +433,8 @@ void gfx3d_glRestoreMatrix(u32 v) if(mymode==0) v = 0; + if(v==31) v=30; //? what should happen in this case? + MatrixCopy (mtxCurrent[mymode], MatrixStackGetPos(&mtxStack[mymode], v&31)); if (mymode == 2) MatrixCopy (mtxCurrent[1], MatrixStackGetPos(&mtxStack[1], v&31)); @@ -1343,43 +1368,32 @@ static void gfx3d_FlushFIFO() void gfx3d_glFlush(u32 v) { - gfx3d.frameCtr++; - - gfx3d_FlushFIFO(); - - //assert(!flushPending); flushPending = TRUE; gfx3d.sortmode = BIT0(v); gfx3d.wbuffer = BIT1(v); - - // reset - clInd = 0; - clCmd = 0; - - //the renderer wil lget the lists we just built - gfx3d.polylist = polylist; - gfx3d.vertlist = vertlist; - - //we need to sort the poly list with alpha polys last - //first, look for opaque polys - int polycount = polylist->count; - int ctr=0; - for(int i=0;ilist[i]; - if(!poly.isTranslucent()) - gfx3d.indexlist[ctr++] = i; - } - //then look for translucent polys - for(int i=0;ilist[i]; - if(poly.isTranslucent()) - gfx3d.indexlist[ctr++] = i; - } - - //switch to the new lists - twiddleLists(); } +static int _CDECL_ gfx3d_ysort_compare(const void * elem1, const void * elem2) +{ + int num1 = *(int*)elem1; + int num2 = *(int*)elem2; + + POLY &poly1 = polylist->list[num1]; + POLY &poly2 = polylist->list[num2]; + + if(poly1.maxy > poly2.maxy) + return 1; + else if(poly1.maxy < poly2.maxy) + return -1; + else if(poly1.miny < poly2.miny) + return 1; + else if(poly1.miny > poly2.miny) + return -1; + else + return 0; +} + + void gfx3d_VBlankSignal() { //the 3d buffers are swapped when a vblank begins. @@ -1390,6 +1404,62 @@ void gfx3d_VBlankSignal() return; } + gfx3d.frameCtr++; + + gfx3d_FlushFIFO(); + + // reset + clInd = 0; + clCmd = 0; + + //the renderer wil lget the lists we just built + gfx3d.polylist = polylist; + gfx3d.vertlist = vertlist; + + int polycount = polylist->count; + + //find the min and max y values for each poly. + //TODO - this could be a small waste of time if we are manual sorting the translucent polys + for(int i=0;ilist[i]; + for(int j=0;jlist[poly.vertIndexes[j]]; + poly.miny = j==0?vert.y:min(poly.miny,vert.y); + poly.maxy = j==0?vert.y:max(poly.maxy,vert.y); + } + } + + //we need to sort the poly list with alpha polys last + //first, look for opaque polys + int ctr=0; + for(int i=0;ilist[i]; + if(!poly.isTranslucent()) + gfx3d.indexlist[ctr++] = i; + } + int opaqueCount = ctr; + //then look for translucent polys + for(int i=0;ilist[i]; + if(poly.isTranslucent()) + gfx3d.indexlist[ctr++] = i; + } + + //now we have to sort the opaque polys by y-value. + //should this be done after clipping?? + //test case: harvest moon island of happiness character cretor UI + qsort(gfx3d.indexlist, opaqueCount, 4, gfx3d_ysort_compare); + + if(!gfx3d.sortmode) + { + //if we are autosorting translucent polys, we need to do this also + //TODO - this is unverified behavior. need a test case + qsort(gfx3d.indexlist + opaqueCount, polycount - opaqueCount, 4, gfx3d_ysort_compare); + } + + //switch to the new lists + twiddleLists(); + flushPending = FALSE; drawPending = TRUE; } @@ -1403,6 +1473,13 @@ void gfx3d_VBlankEndSignal(bool skipFrame) drawPending = FALSE; gpu3D->NDS_3D_Render(); + + //if the null 3d core is chosen, then we need to clear out the 3d buffers to keep old data from being rendered + if(gpu3D == &gpu3DNull) + { + memset(gfx3d_convertedScreen,0,sizeof(gfx3d_convertedScreen)); + memset(gfx3d_convertedScreen,0,sizeof(gfx3d_convertedAlpha)); + } } #ifdef USE_GEOMETRY_FIFO_EMULATION @@ -2152,6 +2229,15 @@ void gfx3d_glGetLightColor(unsigned int index, unsigned int* dest) *dest = lightColor[index]; } +void gfx3d_GetLineData(int line, u16** dst, u8** dstAlpha) +{ + *dst = gfx3d_convertedScreen+((line)<<8); + if(dstAlpha != NULL) + { + *dstAlpha = gfx3d_convertedAlpha+((line)<<8); + } +} + //http://www.opengl.org/documentation/specs/version1.1/glspec1.1/node17.html //talks about the state required to process verts in quadlists etc. helpful ideas. @@ -2209,11 +2295,6 @@ SFORMAT SF_GFX3D[]={ { "GMAM", 2, 1, &dsAmbient}, { "GMSP", 2, 1, &dsSpecular}, { "GMEM", 2, 1, &dsEmission}, - { "GTST", 4, 1, &triStripToggle}, - { "GTVC", 4, 1, &tempVertInfo.count}, - { "GTVM", 4, 4, &tempVertInfo.map[0]}, - { "GTVF", 4, 1, &tempVertInfo.first}, - { "GLTW", 4, 1, &listTwiddle}, { "GFLP", 4, 1, &flushPending}, { "GDRP", 4, 1, &drawPending}, { "GSET", 4, 1, &gfx3d.enableTexturing}, @@ -2233,6 +2314,13 @@ SFORMAT SF_GFX3D[]={ { "GSTT", 4, 32, gfx3d.rgbToonTable}, { "GSST", 4, 128, shininessTable}, { "GSSI", 4, 1, &shininessInd}, + //------------------------ + { "GTST", 4, 1, &triStripToggle}, + { "GTVC", 4, 1, &tempVertInfo.count}, + { "GTVM", 4, 4, tempVertInfo.map}, + { "GTVF", 4, 1, &tempVertInfo.first}, + { "G3CS", 2, 256*192, gfx3d_convertedScreen}, + { "G3CA", 2, 256*192, gfx3d_convertedAlpha}, { 0 } }; @@ -2240,10 +2328,15 @@ SFORMAT SF_GFX3D[]={ void gfx3d_savestate(std::ostream* os) { //dump the render lists - //TODO!!!! + OSWRITE(vertlist->count); + for(int i=0;icount;i++) + vertlist->list[i].save(os); + OSWRITE(polylist->count); + for(int i=0;icount;i++) + polylist->list[i].save(os); } -bool gfx3d_loadstate(std::istream* is) +bool gfx3d_loadstate(std::istream* is, int size) { gfx3d_glPolygonAttrib_cache(); gfx3d_glTexImage_cache(); @@ -2254,14 +2347,21 @@ bool gfx3d_loadstate(std::istream* is) gfx3d_glLightDirection_cache(3); //jiggle the lists. and also wipe them. this is clearly not the best thing to be doing. + listTwiddle = 0; polylist = &polylists[listTwiddle]; vertlist = &vertlists[listTwiddle]; - polylist->count = 0; - vertlist->count = 0; + + OSREAD(vertlist->count); + for(int i=0;icount;i++) + vertlist->list[i].load(is); + OSREAD(polylist->count); + for(int i=0;icount;i++) + polylist->list[i].load(is); + gfx3d.polylist = &polylists[listTwiddle^1]; gfx3d.vertlist = &vertlists[listTwiddle^1]; gfx3d.polylist->count=0; gfx3d.vertlist->count=0; return true; -} +} \ No newline at end of file diff --git a/src/gfx3d.h b/src/gfx3d.h index a83b42560..b612c7980 100644 --- a/src/gfx3d.h +++ b/src/gfx3d.h @@ -26,6 +26,8 @@ #include "types.h" #include +#include +#include //produce a 32bpp color from a DS RGB16 #define RGB16TO32(col,alpha) (((alpha)<<24) | ((((col) & 0x7C00)>>7)<<16) | ((((col) & 0x3E0)>>2)<<8) | (((col) & 0x1F)<<3)) @@ -33,6 +35,9 @@ //produce a 32bpp color from a ds RGB15 plus an 8bit alpha, using a table #define RGB15TO32(col,alpha8) ( ((alpha8)<<24) | color_15bit_to_24bit[col&0x7FFF] ) +//produce a 5555 32bit color from a ds RGB15 plus an 5bit alpha +#define RGB15TO5555(col,alpha5) (((alpha5)<<24) | ((((col) & 0x7C00)>>10)<<16) | ((((col) & 0x3E0)>>5)<<8) | (((col) & 0x1F))) + //produce a 24bpp color from a ds RGB15, using a table #define RGB15TO24_REVERSE(col) ( color_15bit_to_24bit_reverse[col&0x7FFF] ) @@ -58,13 +63,15 @@ void gfx3d_init(); void gfx3d_reset(); +#define OSWRITE(x) os->write((char*)&(x),sizeof((x))); +#define OSREAD(x) is->read((char*)&(x),sizeof((x))); + struct POLY { int type; //tri or quad u16 vertIndexes[4]; //up to four verts can be referenced by this poly u32 polyAttr, texParam, texPalette; //the hardware rendering params -// int projIndex; //the index into the projlist that this poly uses - u32 pad; u32 viewport; + float miny, maxy; bool isTranslucent() { @@ -81,6 +88,26 @@ struct POLY { } int getAlpha() { return (polyAttr>>16)&0x1F; } + + void save(std::ostream* os) + { + OSWRITE(type); + OSWRITE(vertIndexes[0]); OSWRITE(vertIndexes[1]); OSWRITE(vertIndexes[2]); OSWRITE(vertIndexes[3]); + OSWRITE(polyAttr); OSWRITE(texParam); OSWRITE(texPalette); + OSWRITE(viewport); + OSWRITE(miny); + OSWRITE(maxy); + } + + void load(std::istream* is) + { + OSREAD(type); + OSREAD(vertIndexes[0]); OSREAD(vertIndexes[1]); OSREAD(vertIndexes[2]); OSREAD(vertIndexes[3]); + OSREAD(polyAttr); OSREAD(texParam); OSREAD(texPalette); + OSREAD(viewport); + OSREAD(miny); + OSREAD(maxy); + } }; #define POLYLIST_SIZE 100000 @@ -110,6 +137,20 @@ struct VERT { fcolor[1] = color[1]; fcolor[2] = color[2]; } + void save(std::ostream* os) + { + OSWRITE(x); OSWRITE(y); OSWRITE(z); OSWRITE(w); + OSWRITE(u); OSWRITE(v); + OSWRITE(color[0]); OSWRITE(color[1]); OSWRITE(color[2]); + OSWRITE(fcolor[0]); OSWRITE(fcolor[1]); OSWRITE(fcolor[2]); + } + void load(std::istream* is) + { + OSREAD(x); OSREAD(y); OSREAD(z); OSREAD(w); + OSREAD(u); OSREAD(v); + OSREAD(color[0]); OSREAD(color[1]); OSREAD(color[2]); + OSREAD(fcolor[0]); OSREAD(fcolor[1]); OSREAD(fcolor[2]); + } }; #define VERTLIST_SIZE 400000 @@ -177,15 +218,22 @@ extern GFX3D gfx3d; //--------------------- +extern CACHE_ALIGN const u16 alpha_lookup[32]; extern CACHE_ALIGN u32 color_15bit_to_24bit[32768]; extern CACHE_ALIGN u32 color_15bit_to_24bit_reverse[32768]; extern CACHE_ALIGN u16 color_15bit_to_16bit_reverse[32768]; extern CACHE_ALIGN u8 mixTable555[32][32][32]; extern CACHE_ALIGN const int material_5bit_to_31bit[32]; extern CACHE_ALIGN const u8 material_5bit_to_8bit[32]; +extern CACHE_ALIGN const u8 material_3bit_to_5bit[8]; extern CACHE_ALIGN const u8 material_3bit_to_8bit[8]; extern CACHE_ALIGN const u8 alpha_5bit_to_4bit[32]; +//these contain the 3d framebuffer converted into the most useful format +//they are stored here instead of in the renderers in order to consolidate the buffers +extern CACHE_ALIGN u16 gfx3d_convertedScreen[256*192]; +extern CACHE_ALIGN u8 gfx3d_convertedAlpha[256*192]; + //GE commands: void gfx3d_glViewPort(u32 v); void gfx3d_glClearColor(u32 v); @@ -208,11 +256,11 @@ BOOL gfx3d_glMultMatrix4x4(s32 v); void gfx3d_glBegin(u32 v); void gfx3d_glEnd(void); void gfx3d_glColor3b(u32 v); -BOOL gfx3d_glVertex16b(unsigned int v); +BOOL gfx3d_glVertex16b(u32 v); void gfx3d_glVertex10b(u32 v); -void gfx3d_glVertex3_cord(unsigned int one, unsigned int two, unsigned int v); +void gfx3d_glVertex3_cord(u32 one, u32 two, u32 v); void gfx3d_glVertex_rel(u32 v); -void gfx3d_glSwapScreen(unsigned int screen); +void gfx3d_glSwapScreen(u32 screen); int gfx3d_GetNumPolys(); int gfx3d_GetNumVertex(); void gfx3d_glPolygonAttrib (u32 val); @@ -225,16 +273,16 @@ void gfx3d_glTexImage(u32 val); void gfx3d_glTexPalette(u32 val); void gfx3d_glTexCoord(u32 val); void gfx3d_glNormal(u32 v); -s32 gfx3d_GetClipMatrix (unsigned int index); -s32 gfx3d_GetDirectionalMatrix (unsigned int index); +s32 gfx3d_GetClipMatrix (u32 index); +s32 gfx3d_GetDirectionalMatrix (u32 index); void gfx3d_glLightDirection (u32 v); void gfx3d_glLightColor (u32 v); void gfx3d_glAlphaFunc(u32 v); BOOL gfx3d_glBoxTest(u32 v); BOOL gfx3d_glPosTest(u32 v); void gfx3d_glVecTest(u32 v); -unsigned int gfx3d_glGetPosRes(unsigned int index); -unsigned short gfx3d_glGetVecRes(unsigned int index); +u32 gfx3d_glGetPosRes(u32 index); +u16 gfx3d_glGetVecRes(u32 index); void gfx3d_glFlush(u32 v); void gfx3d_VBlankSignal(); void gfx3d_VBlankEndSignal(bool skipFrame); @@ -244,13 +292,15 @@ void gfx3d_sendCommandToFIFO(u32 val); void gfx3d_sendCommand(u32 cmd, u32 param); //other misc stuff -void gfx3d_glGetMatrix(unsigned int mode, int index, float* dest); -void gfx3d_glGetLightDirection(unsigned int index, unsigned int* dest); -void gfx3d_glGetLightColor(unsigned int index, unsigned int* dest); +void gfx3d_glGetMatrix(u32 mode, int index, float* dest); +void gfx3d_glGetLightDirection(u32 index, u32* dest); +void gfx3d_glGetLightColor(u32 index, u32* dest); + +void gfx3d_GetLineData(int line, u16** dst, u8** dstAlpha); struct SFORMAT; extern SFORMAT SF_GFX3D[]; void gfx3d_savestate(std::ostream* os); -bool gfx3d_loadstate(std::istream* is); +bool gfx3d_loadstate(std::istream* is, int size); #endif diff --git a/src/mc.cpp b/src/mc.cpp index a439b3768..69af93a48 100644 --- a/src/mc.cpp +++ b/src/mc.cpp @@ -23,6 +23,7 @@ #include "debug.h" #include "types.h" #include "mc.h" +#include "movie.h" #define FW_CMD_READ 0x3 #define FW_CMD_WRITEDISABLE 0x4 @@ -207,9 +208,16 @@ void mc_load_file(memory_chip_t *mc, const char* filename) { long size; int type = -1; - FILE* file = fopen(filename, "rb+"); + FILE* file; size_t elems_read; + if(movieMode != MOVIEMODE_INACTIVE) { + mc->filename = strdup(filename); + return; + } + else + file = fopen(filename, "rb+"); + if(file == NULL) { mc->filename = strdup(filename); diff --git a/src/movie.cpp b/src/movie.cpp index d507eeeb7..471301658 100644 --- a/src/movie.cpp +++ b/src/movie.cpp @@ -1,6 +1,6 @@ /* movie.cpp * - * Copyright (C) 2006-2008 Zeromus + * Copyright (C) 2006-2009 DeSmuME team * * This file is part of DeSmuME * @@ -22,14 +22,18 @@ #include #include #include - +#include "main.h" #include "utils/guid.h" #include "utils/xstring.h" #include "movie.h" #include "NDSSystem.h" +#include "readwrite.h" #include "debug.h" +#include "rtc.h" using namespace std; +bool freshMovie = false; //True when a movie loads, false when movie is altered. Used to determine if a movie has been altered since opening +bool autoMovieBackup = true; #define FCEU_PrintError LOG @@ -189,6 +193,8 @@ void MovieData::installValue(std::string& key, std::string& val) guid = Desmume_Guid::fromString(val); else if(key == "comment") comments.push_back(mbstowcs(val)); + else if(key == "binary") + installBool(val,binaryFlag); else if(key == "savestate") { int len = Base64StringToBytesLength(val); @@ -222,10 +228,10 @@ int MovieData::dump(std::ostream *os, bool binary) *os << "savestate " << BytesToString(&savestate[0],savestate.size()) << endl; if(binary) { - ////put one | to start the binary dump - //os->put('|'); - //for(int i=0;i<(int)records.size();i++) - // records[i].dumpBinary(this,os,i); + //put one | to start the binary dump + os->put('|'); + for(int i=0;i<(int)records.size();i++) + records[i].dumpBinary(this,os,i); } else for(int i=0;i<(int)records.size();i++) @@ -268,8 +274,8 @@ static bool LoadFM2(MovieData& movieData, std::istream* fp, int size, bool stopA isnewline = (c==10||c==13); if(isrecchar && movieData.binaryFlag && !stopAfterHeader) { - //LoadFM2_binarychunk(movieData, fp, size); - return false; + LoadFM2_binarychunk(movieData, fp, size); + return true; } switch(state) { @@ -349,7 +355,7 @@ static void closeRecordingMovie() /// Stop movie playback. static void StopPlayback() { - //FCEU_DispMessageOnMovie("Movie playback stopped."); + SetMessageToDisplay("Movie playback stopped."); movieMode = MOVIEMODE_INACTIVE; } @@ -357,8 +363,7 @@ static void StopPlayback() /// Stop movie recording static void StopRecording() { - //FCEU_DispMessage("Movie recording stopped."); - + SetMessageToDisplay("Movie recording stopped."); movieMode = MOVIEMODE_INACTIVE; closeRecordingMovie(); @@ -366,7 +371,7 @@ static void StopRecording() -static void FCEUI_StopMovie() +void FCEUI_StopMovie() { //if(suppressMovieStop) // return; @@ -377,11 +382,12 @@ static void FCEUI_StopMovie() StopRecording(); curMovieFilename[0] = 0; + freshMovie = false; } //begin playing an existing movie -static void FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, int _pauseframe) +void FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, int _pauseframe) { //if(!tasedit && !FCEU_IsValidUI(FCEUI_PLAYMOVIE)) // return; @@ -416,6 +422,7 @@ static void FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, in //fully reload the game to reinitialize everything before playing any movie //poweron(true); + NDS_Reset(); ////WE NEED TO LOAD A SAVESTATE //if(currMovieData.savestate.size() != 0) //{ @@ -428,11 +435,15 @@ static void FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, in movie_readonly = _read_only; movieMode = MOVIEMODE_PLAY; currRerecordCount = currMovieData.rerecordCount; + InitMovieTime(); + MovieSRAM(backupmemorytype, backupmemorysize); + freshMovie = true; + ClearAutoHold(); - //if(movie_readonly) - // FCEU_DispMessage("Replay started Read-Only."); - //else - // FCEU_DispMessage("Replay started Read+Write."); + if(movie_readonly) + SetMessageToDisplay("Replay started Read-Only."); + else + SetMessageToDisplay("Replay started Read+Write."); } static void openRecordingMovie(const char* fname) @@ -447,7 +458,7 @@ static void openRecordingMovie(const char* fname) //begin recording a new movie //TODO - BUG - the record-from-another-savestate doesnt work. -static void FCEUI_SaveMovie(const char *fname, std::wstring author) + void FCEUI_SaveMovie(const char *fname, std::wstring author) { //if(!FCEU_IsValidUI(FCEUI_RECORDMOVIE)) // return; @@ -468,6 +479,7 @@ static void FCEUI_SaveMovie(const char *fname, std::wstring author) //currMovieData.romChecksum = GameInfo->MD5; //currMovieData.romFilename = FileBase; + NDS_Reset(); //todo ? //poweron(true); //else @@ -479,81 +491,109 @@ static void FCEUI_SaveMovie(const char *fname, std::wstring author) movieMode = MOVIEMODE_RECORD; movie_readonly = false; currRerecordCount = 0; + InitMovieTime(); + MovieSRAM(backupmemorytype, backupmemorysize); - //FCEU_DispMessage("Movie recording started."); + SetMessageToDisplay("Movie recording started."); } + void NDS_setTouchFromMovie(void) { -//the main interaction point between the emulator and the movie system. -//either dumps the current joystick state or loads one state from the movie -static void FCEUMOV_AddInputState() -{ - //todo - for tasedit, either dump or load depending on whether input recording is enabled - //or something like that - //(input recording is just like standard read+write movie recording with input taken from gamepad) - //otherwise, it will come from the tasedit data. + if(movieMode == MOVIEMODE_PLAY) + { - if(movieMode == MOVIEMODE_PLAY) - { - //stop when we run out of frames - if(currFrameCounter == (int)currMovieData.records.size()) - { - StopPlayback(); - } - else - { - MovieRecord* mr = &currMovieData.records[currFrameCounter]; - - //reset if necessary - if(mr->command_reset()) - {} - //ResetNES(); + MovieRecord* mr = &currMovieData.records[currFrameCounter]; + nds.touchX=mr->touch.x << 4; + nds.touchY=mr->touch.y << 4; - NDS_setPadFromMovie(mr->pad); - } + if(mr->touch.touch) { + nds.isTouch=mr->touch.touch; + MMU.ARM7_REG[0x136] &= 0xBF; + } + else { + nds.touchX=0; + nds.touchY=0; + nds.isTouch=0; - //if we are on the last frame, then pause the emulator if the player requested it - if(currFrameCounter == (int)currMovieData.records.size()-1) - { - /*if(FCEUD_PauseAfterPlayback()) - { - FCEUI_ToggleEmulationPause(); - }*/ - } + MMU.ARM7_REG[0x136] |= 0x40; + } + osd->addFixed(mr->touch.x, mr->touch.y, "%s", "X"); + } + } - //pause the movie at a specified frame - //if(FCEUMOV_ShouldPause() && FCEUI_EmulationPaused()==0) - //{ - // FCEUI_ToggleEmulationPause(); - // FCEU_DispMessage("Paused at specified movie frame"); - //} - - } - else if(movieMode == MOVIEMODE_RECORD) - { - MovieRecord mr; + //the main interaction point between the emulator and the movie system. + //either dumps the current joystick state or loads one state from the movie + void FCEUMOV_AddInputState() + { + //todo - for tasedit, either dump or load depending on whether input recording is enabled + //or something like that + //(input recording is just like standard read+write movie recording with input taken from gamepad) + //otherwise, it will come from the tasedit data. - mr.commands = 0; - mr.pad = nds.pad; - if(nds.isTouch) { - mr.touch.x = nds.touchX; - mr.touch.y = nds.touchY; - mr.touch.touch = 1; - } else { - mr.touch.x = 0; - mr.touch.y = 0; - mr.touch.touch = 0; - } + if(movieMode == MOVIEMODE_PLAY) + { + //stop when we run out of frames + if(currFrameCounter == (int)currMovieData.records.size()) + { + StopPlayback(); + } + else + { + MovieRecord* mr = &currMovieData.records[currFrameCounter]; - mr.dump(&currMovieData, osRecordingMovie,currMovieData.records.size()); - currMovieData.records.push_back(mr); - } + //reset if necessary + if(mr->command_reset()) + {} + //ResetNES(); - currFrameCounter++; + NDS_setPadFromMovie(mr->pad); + NDS_setTouchFromMovie(); + } - /*extern uint8 joy[4]; - memcpy(&cur_input_display,joy,4);*/ -} + //if we are on the last frame, then pause the emulator if the player requested it + if(currFrameCounter == (int)currMovieData.records.size()-1) + { + /*if(FCEUD_PauseAfterPlayback()) + { + FCEUI_ToggleEmulationPause(); + }*/ + } + + //pause the movie at a specified frame + //if(FCEUMOV_ShouldPause() && FCEUI_EmulationPaused()==0) + //{ + // FCEUI_ToggleEmulationPause(); + // FCEU_DispMessage("Paused at specified movie frame"); + //} + osd->addFixed(180, 176, "%s", "Playback"); + + } + else if(movieMode == MOVIEMODE_RECORD) + { + MovieRecord mr; + + mr.commands = 0; + mr.pad = nds.pad; + if(nds.isTouch) { + mr.touch.x = nds.touchX >> 4; + mr.touch.y = nds.touchY >> 4; + mr.touch.touch = 1; + } else { + mr.touch.x = 0; + mr.touch.y = 0; + mr.touch.touch = 0; + } + + mr.dump(&currMovieData, osRecordingMovie,currMovieData.records.size()); + currMovieData.records.push_back(mr); + osd->addFixed(180, 176, "%s", "Recording"); + } + + currFrameCounter++; + + /*extern uint8 joy[4]; + memcpy(&cur_input_display,joy,4);*/ + } //TODO @@ -570,38 +610,60 @@ static void FCEUMOV_AddCommand(int cmd) } -static int FCEUMOV_WriteState(std::ostream* os) +void mov_savestate(std::ostream* os) { //we are supposed to dump the movie data into the savestate + //if(movieMode == MOVIEMODE_RECORD || movieMode == MOVIEMODE_PLAY) + // return currMovieData.dump(os, true); + //else return 0; if(movieMode == MOVIEMODE_RECORD || movieMode == MOVIEMODE_PLAY) - return currMovieData.dump(os, true); - else return 0; + { + write32le('MOVI',os); + currMovieData.dump(os, true); + } + else + { + write32le('NOMO',os); + } } -//TODO EVERYTHING BELOW static bool load_successful; -static bool FCEUMOV_ReadState(std::istream* is, uint32 size) +bool mov_loadstate(std::istream* is, int size) { load_successful = false; + int cookie; + if(read32le(&cookie,is) != 1) return false; + if(cookie == 'NOMO') + return true; + else if(cookie != 'MOVI') + return false; + + size -= 4; + + if (!movie_readonly && autoMovieBackup && freshMovie) //If auto-backup is on, movie has not been altered this session and the movie is in read+write mode + { + FCEUI_MakeBackupMovie(false); //Backup the movie before the contents get altered, but do not display messages + } + //a little rule: cant load states in read+write mode with a movie from an archive. //so we are going to switch it to readonly mode in that case - if(!movie_readonly - //*&& FCEU_isFileInArchive(curMovieFilename)*/ - ) { - FCEU_PrintError("Cannot loadstate in Read+Write with movie from archive. Movie is now Read-Only."); - movie_readonly = true; - } +// if(!movie_readonly +// //*&& FCEU_isFileInArchive(curMovieFilename)*/ +// ) { +// FCEU_PrintError("Cannot loadstate in Read+Write with movie from archive. Movie is now Read-Only."); +// movie_readonly = true; +// } MovieData tempMovieData = MovieData(); std::ios::pos_type curr = is->tellg(); if(!LoadFM2(tempMovieData, is, size, false)) { - /*is->seekg((uint32)curr+size); - extern bool FCEU_state_loading_old_format; + // is->seekg((uint32)curr+size); + /* extern bool FCEU_state_loading_old_format; if(FCEU_state_loading_old_format) { if(movieMode == MOVIEMODE_PLAY || movieMode == MOVIEMODE_RECORD) { FCEUI_StopMovie(); @@ -652,12 +714,29 @@ static bool FCEUMOV_ReadState(std::istream* is, uint32 size) if(movie_readonly) { + //------------------------------------------------------------- + //this code would reload the movie from disk. allegedly it is helpful to hexers, but + //it is way too slow with dsm format. so it is only here as a reminder, and in case someone + //wants to play with it + //------------------------------------------------------------- + //{ + // fstream fs (curMovieFilename); + // if(!LoadFM2(tempMovieData, &fs, INT_MAX, false)) + // { + // FCEU_PrintError("Failed to reload DSM after loading savestate"); + // } + // fs.close(); + // currMovieData = tempMovieData; + //} + //------------------------------------------------------------- + //if the frame counter is longer than our current movie, then error if(currFrameCounter > (int)currMovieData.records.size()) { FCEU_PrintError("Savestate is from a frame (%d) after the final frame in the movie (%d). This is not permitted.", currFrameCounter, currMovieData.records.size()-1); return false; } + movieMode = MOVIEMODE_PLAY; } else @@ -666,10 +745,10 @@ static bool FCEUMOV_ReadState(std::istream* is, uint32 size) tempMovieData.truncateAt(currFrameCounter); currMovieData = tempMovieData; - #ifdef _S9XLUA_H - if(!FCEU_LuaRerecordCountSkip()) + // #ifdef _S9XLUA_H + // if(!FCEU_LuaRerecordCountSkip()) currRerecordCount++; - #endif + // #endif currMovieData.rerecordCount = currRerecordCount; @@ -680,6 +759,7 @@ static bool FCEUMOV_ReadState(std::istream* is, uint32 size) } load_successful = true; + freshMovie = false; //// Maximus: Show the last input combination entered from the //// movie within the state @@ -722,3 +802,137 @@ bool FCEUI_MovieGetInfo(std::istream* fp, MOVIE_INFO& info, bool skipFrameCount) return true; } + +bool MovieRecord::parseBinary(MovieData* md, std::istream* is) +{ + commands=is->get(); + is->read((char *) &pad, sizeof pad); + is->read((char *) &touch.x, sizeof touch.x); + is->read((char *) &touch.y, sizeof touch.y); + is->read((char *) &touch.touch, sizeof touch.touch); + return true; +} + + +void MovieRecord::dumpBinary(MovieData* md, std::ostream* os, int index) +{ + os->put(md->records[index].commands); + os->write((char *) &md->records[index].pad, sizeof md->records[index].pad); + os->write((char *) &md->records[index].touch.x, sizeof md->records[index].touch.x); + os->write((char *) &md->records[index].touch.y, sizeof md->records[index].touch.y); + os->write((char *) &md->records[index].touch.touch, sizeof md->records[index].touch.touch); +} + +void LoadFM2_binarychunk(MovieData& movieData, std::istream* fp, int size) +{ + int recordsize = 1; //1 for the command + + recordsize = 6; + + assert(size%6==0); + + //find out how much remains in the file + int curr = fp->tellg(); + fp->seekg(0,std::ios::end); + int end = fp->tellg(); + int flen = end-curr; + fp->seekg(curr,std::ios::beg); + + //the amount todo is the min of the limiting size we received and the remaining contents of the file + int todo = std::min(size, flen); + + int numRecords = todo/recordsize; + movieData.records.resize(numRecords); + for(int i=0;i + +bool CheckFileExists(const char* filename) +{ + //This function simply checks to see if the given filename exists + string checkFilename; + + if (filename) + checkFilename = filename; + + //Check if this filename exists + fstream test; + test.open(checkFilename.c_str(),fstream::in); + + if (test.fail()) + { + test.close(); + return false; + } + else + { + test.close(); + return true; + } +} + +void FCEUI_MakeBackupMovie(bool dispMessage) +{ + //This function generates backup movie files + string currentFn; //Current movie fillename + string backupFn; //Target backup filename + string tempFn; //temp used in back filename creation + stringstream stream; + int x; //Temp variable for string manip + bool exist = false; //Used to test if filename exists + bool overflow = false; //Used for special situation when backup numbering exceeds limit + + currentFn = curMovieFilename; //Get current moviefilename + backupFn = curMovieFilename; //Make backup filename the same as current moviefilename + x = backupFn.find_last_of("."); //Find file extension + backupFn = backupFn.substr(0,x); //Remove extension + tempFn = backupFn; //Store the filename at this point + for (unsigned int backNum=0;backNum<999;backNum++) //999 = arbituary limit to backup files + { + stream.str(""); //Clear stream + if (backNum > 99) + stream << "-" << backNum; //assign backNum to stream + else if (backNum <=99 && backNum >= 10) + stream << "-0"; //Make it 010, etc if two digits + else + stream << "-00" << backNum; //Make it 001, etc if single digit + backupFn.append(stream.str()); //add number to bak filename + backupFn.append(".bak"); //add extension + + exist = CheckFileExists(backupFn.c_str()); //Check if file exists + + if (!exist) + break; //Yeah yeah, I should use a do loop or something + else + { + backupFn = tempFn; //Before we loop again, reset the filename + + if (backNum == 999) //If 999 exists, we have overflowed, let's handle that + { + backupFn.append("-001.bak"); //We are going to simply overwrite 001.bak + overflow = true; //Flag that we have exceeded limit + break; //Just in case + } + } + } + + MovieData md = currMovieData; //Get current movie data + std::fstream* outf = new fstream(backupFn.c_str(),std::ios_base::out); //FCEUD_UTF8_fstream(backupFn, "wb"); //open/create file + md.dump(outf,false); //dump movie data + delete outf; //clean up, delete file object + + //TODO, decide if fstream successfully opened the file and print error message if it doesn't + + if (dispMessage) //If we should inform the user + { +// if (overflow) +// FCEUI_DispMessage("Backup overflow, overwriting %s",backupFn.c_str()); //Inform user of overflow +// else +// FCEUI_DispMessage("%s created",backupFn.c_str()); //Inform user of backup filename + } +} + diff --git a/src/movie.h b/src/movie.h index 3935971eb..0f637c031 100644 --- a/src/movie.h +++ b/src/movie.h @@ -21,6 +21,7 @@ typedef struct std::string name_of_rom_used; std::vector comments; + std::vector subtitles; } MOVIE_INFO; enum EMOVIEMODE @@ -88,12 +89,12 @@ public: void clear(); //a waste of memory in lots of cases.. maybe make it a pointer later? - std::vector savestate; + //std::vector savestate; void parse(MovieData* md, std::istream* is); - //bool parseBinary(MovieData* md, std::istream* is); + bool parseBinary(MovieData* md, std::istream* is); void dump(MovieData* md, std::ostream* os, int index); - //void dumpBinary(MovieData* md, std::ostream* os, int index); + void dumpBinary(MovieData* md, std::ostream* os, int index); void parsePad(std::istream* is, u16& pad); void dumpPad(std::ostream* os, u16 pad); @@ -178,6 +179,19 @@ private: } }; -bool FCEUI_MovieGetInfo(std::istream* fp, MOVIE_INFO& info, bool skipFrameCount); +extern int currFrameCounter; +extern EMOVIEMODE movieMode; //adelikat: main needs this for frame counter display +extern MovieData currMovieData; //adelikat: main needs this for frame counter display +bool FCEUI_MovieGetInfo(std::istream* fp, MOVIE_INFO& info, bool skipFrameCount); +void FCEUI_SaveMovie(const char *fname, std::wstring author); +void FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, int _pauseframe); +void FCEUI_StopMovie(); +void FCEUMOV_AddInputState(); +void NDS_setTouchFromMovie(void); +void mov_savestate(std::ostream* os); +bool mov_loadstate(std::istream* is, int size); +void LoadFM2_binarychunk(MovieData& movieData, std::istream* fp, int size); +extern bool movie_readonly; +void FCEUI_MakeBackupMovie(bool dispMessage); #endif diff --git a/src/rasterize.cpp b/src/rasterize.cpp index 87971143e..d04e1468c 100644 --- a/src/rasterize.cpp +++ b/src/rasterize.cpp @@ -202,16 +202,16 @@ struct PolyAttr } polyAttr; +union FragmentColor { + u32 color; + struct { + //#ifdef WORDS_BIGENDIAN ? + u8 r,g,b,a; + }; +}; + struct Fragment { - union Color { - u32 color; - struct { - //#ifdef WORDS_BIGENDIAN ? - u8 r,g,b,a; - } components; - } color; - u32 depth; struct { @@ -220,7 +220,7 @@ struct Fragment u8 stencil; - u8 pad[5]; + u8 pad; }; static VERT* verts[MAX_CLIPPED_VERTS]; @@ -231,6 +231,8 @@ INLINE static void SubmitVertex(int vert_index, VERT& rawvert) } static Fragment screen[256*192]; +static FragmentColor screenColor[256*192]; + FORCEINLINE int iround(float f) { return (int)f; //lol @@ -300,7 +302,7 @@ static struct Sampler } } - FORCEINLINE Fragment::Color sample(float u, float v) + FORCEINLINE FragmentColor sample(float u, float v) { //finally, we can use floor here. but, it is slower than we want. //the best solution is probably to wait until the pipeline is full of fixed point @@ -308,13 +310,8 @@ static struct Sampler int iv = floorf(v); dowrap(iu,iv); - Fragment::Color color; - u32 col32 = ((u32*)textures.currentData)[(iv<>= 3; - col32 &= 0x1F1F1F1F; - color.color = col32; - + FragmentColor color; + color.color = ((u32*)textures.currentData)[(iv<> 3); - toonColor.components.g = ((toonColorVal & 0x00FF00) >> 11); - toonColor.components.b = ((toonColorVal & 0xFF0000) >> 19); - dst.color.components.r = modulate_table[texColor.components.r][toonColor.components.r]; - dst.color.components.g = modulate_table[texColor.components.g][toonColor.components.g]; - dst.color.components.b = modulate_table[texColor.components.b][toonColor.components.b]; - dst.color.components.a = modulate_table[texColor.components.a][materialColor.components.a]; + u32 toonColorVal; toonColorVal = gfx3d.rgbToonTable[materialColor.r]; + FragmentColor toonColor; + toonColor.r = ((toonColorVal & 0x0000FF) >> 3); + toonColor.g = ((toonColorVal & 0x00FF00) >> 11); + toonColor.b = ((toonColorVal & 0xFF0000) >> 19); + dst.r = modulate_table[texColor.r][toonColor.r]; + dst.g = modulate_table[texColor.g][toonColor.g]; + dst.b = modulate_table[texColor.b][toonColor.b]; + dst.a = modulate_table[texColor.a][materialColor.a]; if(gfx3d.shading == GFX3D::HIGHLIGHT) { - dst.color.components.r = min(31, (dst.color.components.r + toonColor.components.r)); - dst.color.components.g = min(31, (dst.color.components.g + toonColor.components.g)); - dst.color.components.b = min(31, (dst.color.components.b + toonColor.components.b)); + dst.r = min(31, (dst.r + toonColor.r)); + dst.g = min(31, (dst.g + toonColor.g)); + dst.b = min(31, (dst.b + toonColor.b)); } break; case 3: //shadows //is this right? only with the material color? - dst.color = materialColor; + dst = materialColor; break; case 4: //our own special mode which only uses the material color (for when texturing is disabled) - dst.color = materialColor; + dst = materialColor; break; } @@ -404,44 +401,45 @@ struct Shader } shader; -static FORCEINLINE void alphaBlend(Fragment::Color & dst, const Fragment::Color & src) +static FORCEINLINE void alphaBlend(FragmentColor & dst, const FragmentColor & src) { if(gfx3d.enableAlphaBlending) { - if(src.components.a == 0) + if(src.a == 0) { - dst.components.a = max(src.components.a,dst.components.a); + dst.a = max(src.a,dst.a); } - else if(src.components.a == 31 || dst.components.a == 0) + else if(src.a == 31 || dst.a == 0) { - dst.color = src.color; - dst.components.a = max(src.components.a,dst.components.a); + dst = src; + dst.a = max(src.a,dst.a); } else { - u8 alpha = src.components.a+1; + u8 alpha = src.a+1; u8 invAlpha = 32 - alpha; - dst.components.r = (alpha*src.components.r + invAlpha*dst.components.r)>>5; - dst.components.g = (alpha*src.components.g + invAlpha*dst.components.g)>>5; - dst.components.b = (alpha*src.components.b + invAlpha*dst.components.b)>>5; - dst.components.a = max(src.components.a,dst.components.a); + dst.r = (alpha*src.r + invAlpha*dst.r)>>5; + dst.g = (alpha*src.g + invAlpha*dst.g)>>5; + dst.b = (alpha*src.b + invAlpha*dst.b)>>5; + dst.a = max(src.a,dst.a); } } else { - if(src.components.a == 0) + if(src.a == 0) { //do nothing; the fragment is totally transparent } else { - dst.color = src.color; + dst = src; } } } static FORCEINLINE void pixel(int adr,float r, float g, float b, float invu, float invv, float w, float z) { Fragment &destFragment = screen[adr]; + FragmentColor &destFragmentColor = screenColor[adr]; //depth test u32 depth; @@ -483,25 +481,25 @@ static FORCEINLINE void pixel(int adr,float r, float g, float b, float invu, flo //this is a HACK: //we are being very sloppy with our interpolation precision right now //and rather than fix it, i just want to clamp it - shader.materialColor.components.r = max(0,min(31,(int)r)); - shader.materialColor.components.g = max(0,min(31,(int)g)); - shader.materialColor.components.b = max(0,min(31,(int)b)); + shader.materialColor.r = max(0,min(31,(int)r)); + shader.materialColor.g = max(0,min(31,(int)g)); + shader.materialColor.b = max(0,min(31,(int)b)); - shader.materialColor.components.a = polyAttr.alpha; + shader.materialColor.a = polyAttr.alpha; //pixel shader - Fragment shaderOutput; + FragmentColor shaderOutput; shader.shade(shaderOutput); //alpha test if(gfx3d.enableAlphaTest) { - if(shaderOutput.color.components.a < gfx3d.alphaTestRef) + if(shaderOutput.a < gfx3d.alphaTestRef) goto rejected_fragment; } //we shouldnt do any of this if we generated a totally transparent pixel - if(shaderOutput.color.components.a != 0) + if(shaderOutput.a != 0) { //handle shadow polys if(shader.mode == 3) @@ -538,7 +536,7 @@ static FORCEINLINE void pixel(int adr,float r, float g, float b, float invu, flo } //handle polyids - bool isOpaquePixel = shaderOutput.color.components.a == 31; + bool isOpaquePixel = shaderOutput.a == 31; if(isOpaquePixel) { destFragment.polyid.opaque = polyAttr.polyid; @@ -566,7 +564,7 @@ static FORCEINLINE void pixel(int adr,float r, float g, float b, float invu, flo } //alpha blending and write color - alphaBlend(destFragment.color, shaderOutput.color); + alphaBlend(destFragmentColor, shaderOutput); //depth writing if(isOpaquePixel || polyAttr.translucentDepthWrite) @@ -930,7 +928,8 @@ static char SoftRastInit(void) return 1; } -static void SoftRastReset() {} +static void SoftRastReset() { +} static void SoftRastClose() { @@ -940,45 +939,32 @@ static void SoftRastVramReconfigureSignal() { TexCache_Invalidate(); } -static void SoftRastGetLine(int line, u16* dst, u8* dstAlpha) +static void SoftRastConvertFramebuffer() { - Fragment* src = screen+((line)<<8); - for(int i=0;i<256;i++) - { - const bool testRenderAlpha = false; - u8 r = src->color.components.r; - u8 g = src->color.components.g; - u8 b = src->color.components.b; - *dst = R5G5B5TORGB15(r,g,b); - if(src->color.components.a > 0) - *dst |= 0x8000; - *dstAlpha = alpha_5bit_to_4bit[src->color.components.a]; + FragmentColor* src = screenColor; + u16* dst = gfx3d_convertedScreen; + u8* dstAlpha = gfx3d_convertedAlpha; - if(testRenderAlpha) + //in an effort to speed this up, the misc pixel buffers and the color buffer were separated. + + for(int i=0,y=0;y<192;y++) + { + #ifndef NOSSE2 + u8* wanx = (u8*)&src[i]; + #define ASS(X,Y) __asm { prefetchnta [wanx+32*0x##X##Y] } + #define PUNK(X) ASS(X,0) ASS(X,1) ASS(X,2) ASS(X,3) ASS(X,4) ASS(X,5) ASS(X,6) ASS(X,7) ASS(X,8) ASS(X,9) ASS(X,A) ASS(X,B) ASS(X,C) ASS(X,D) ASS(X,E) ASS(X,F) + PUNK(0); PUNK(1); + #endif + + for(int x=0;x<256;x++,i++) { - *dst = 0x8000 | R5G5B5TORGB15(src->color.components.a,src->color.components.a,src->color.components.a); - *dstAlpha = 16; + const u8 r = src[i].r; + const u8 g = src[i].g; + const u8 b = src[i].b; + const u8 a = src[i].a; + dst[i] = R5G5B5TORGB15(r,g,b) | alpha_lookup[a]; + dstAlpha[i] = alpha_5bit_to_4bit[a]; } - - src++; - dst++; - dstAlpha++; - } - -} - -static void SoftRastGetLineCaptured(int line, u16* dst) { - Fragment* src = screen+((line)<<8); - for(int i=0;i<256;i++) - { - u8 r = src->color.components.r; - u8 g = src->color.components.g; - u8 b = src->color.components.b; - *dst = R5G5B5TORGB15(r,g,b); - if(src->color.components.a > 0) - *dst |= 0x8000; - src++; - dst++; } } @@ -1158,10 +1144,11 @@ static void clipPoly(POLY* poly) static void SoftRastRender() { Fragment clearFragment; - clearFragment.color.components.r = gfx3d.clearColor&0x1F; - clearFragment.color.components.g = (gfx3d.clearColor>>5)&0x1F; - clearFragment.color.components.b = (gfx3d.clearColor>>10)&0x1F; - clearFragment.color.components.a = (gfx3d.clearColor>>16)&0x1F; + FragmentColor clearFragmentColor; + clearFragmentColor.r = gfx3d.clearColor&0x1F; + clearFragmentColor.g = (gfx3d.clearColor>>5)&0x1F; + clearFragmentColor.b = (gfx3d.clearColor>>10)&0x1F; + clearFragmentColor.a = (gfx3d.clearColor>>16)&0x1F; clearFragment.polyid.opaque = (gfx3d.clearColor>>24)&0x3F; //special value for uninitialized translucent polyid. without this, fires in spiderman2 dont display //I am not sure whether it is right, though. previously this was cleared to 0, as a guess, @@ -1171,6 +1158,8 @@ static void SoftRastRender() clearFragment.stencil = 0; for(int i=0;i<256*192;i++) screen[i] = clearFragment; + for(int i=0;i<256*192;i++) + screenColor[i] = clearFragmentColor; //convert colors to float to get more precision in case we need it for(int i=0;icount;i++) @@ -1269,7 +1258,7 @@ static void SoftRastRender() if(needInitTexture || lastTextureFormat != poly->texParam || lastTexturePalette != poly->texPalette) { - TexCache_SetTexture(poly->texParam,poly->texPalette); + TexCache_SetTexture(poly->texParam,poly->texPalette); sampler.setup(poly->texParam); lastTextureFormat = poly->texParam; lastTexturePalette = poly->texPalette; @@ -1294,6 +1283,7 @@ static void SoftRastRender() // printf("rendered %d of %d polys after backface culling\n",gfx3d.polylist->count-culled,gfx3d.polylist->count); + SoftRastConvertFramebuffer(); } GPU3DInterface gpu3DRasterize = { @@ -1303,6 +1293,4 @@ GPU3DInterface gpu3DRasterize = { SoftRastClose, SoftRastRender, SoftRastVramReconfigureSignal, - SoftRastGetLine, - SoftRastGetLineCaptured }; diff --git a/src/render3D.cpp b/src/render3D.cpp index 8ef8c0c50..03650a2f0 100644 --- a/src/render3D.cpp +++ b/src/render3D.cpp @@ -24,8 +24,6 @@ int cur3DCore = GPU3D_NULL; static void NDS_nullFunc1 (void){} static char NDS_nullFunc2 (void){ return 1; } -static void NDS_nullFunc3 (int,unsigned short*) {} -static void NDS_nullFunc4 (int,unsigned short*,unsigned char*) {} GPU3DInterface gpu3DNull = { "None", @@ -34,8 +32,6 @@ GPU3DInterface gpu3DNull = { NDS_nullFunc1, //NDS_3D_Close NDS_nullFunc1, //NDS_3D_Render NDS_nullFunc1, //NDS_3D_VramReconfigureSignal - NDS_nullFunc4, //NDS_3D_GetLine - NDS_nullFunc3 //NDS_3D_GetLineCaptured }; GPU3DInterface *gpu3D = &gpu3DNull; diff --git a/src/render3D.h b/src/render3D.h index 8df9133c4..877afa4d8 100644 --- a/src/render3D.h +++ b/src/render3D.h @@ -21,6 +21,8 @@ #ifndef RENDER3D_H #define RENDER3D_H +#include "types.h" + //not using this right now #define CALL_CONVENTION @@ -44,13 +46,6 @@ typedef struct Render3DInterface //called when the emulator reconfigures its vram. you may need to invalidate your texture cache. void (CALL_CONVENTION* NDS_3D_VramReconfigureSignal) (); - //Retrieves a line of color buffer data - void (CALL_CONVENTION* NDS_3D_GetLine) (int line, unsigned short* dst, unsigned char* dstAlpha); - - //Retrieves a line of color buffer data for capture - void (CALL_CONVENTION* NDS_3D_GetLineCaptured) (int line, unsigned short* dst); - - } GPU3DInterface; extern int cur3DCore; diff --git a/src/rtc.cpp b/src/rtc.cpp index 39e95f480..ddac69bcb 100644 --- a/src/rtc.cpp +++ b/src/rtc.cpp @@ -33,6 +33,7 @@ #ifdef WIN32 #include "windows/main.h" #endif +#include "movie.h" typedef struct { @@ -81,24 +82,26 @@ struct movietime movie; int oldframeCounter; u64 totalcycles=2904024960000ULL;//noon int totalseconds; -bool init=false; bool moviemode=false; -#ifdef WIN32 -static void MovieTime(void) { - if(!init) { + +void InitMovieTime(void) { + movie.year=9; movie.month=1; movie.monthday=1; movie.weekday=4; oldframeCounter=0; - init=true; - } - if(frameCounter > oldframeCounter) { +} + +#ifdef WIN32 +static void MovieTime(void) { + + if(currFrameCounter > oldframeCounter) { int difference; - difference=frameCounter-oldframeCounter; - oldframeCounter=frameCounter; + difference=currFrameCounter-oldframeCounter; + oldframeCounter=currFrameCounter; totalcycles+=((560190<<1)*difference); } @@ -143,7 +146,7 @@ static void rtcRecv() tm_local->tm_year %= 100; tm_local->tm_mon++; - if(moviemode) { + if(movieMode != MOVIEMODE_INACTIVE) { MovieTime(); @@ -177,7 +180,7 @@ static void rtcRecv() time(&tm); struct tm *tm_local= localtime(&tm); - if(moviemode) { + if(movieMode != MOVIEMODE_INACTIVE) { MovieTime(); diff --git a/src/rtc.h b/src/rtc.h index 193c7f1a1..f1b6765ae 100644 --- a/src/rtc.h +++ b/src/rtc.h @@ -30,4 +30,6 @@ extern void rtcInit(); extern u16 rtcRead(); extern void rtcWrite(u16 val); + +void InitMovieTime(void); #endif diff --git a/src/saves.cpp b/src/saves.cpp index 38ab97f14..5255144a8 100644 --- a/src/saves.cpp +++ b/src/saves.cpp @@ -36,6 +36,8 @@ #include "memorystream.h" #include "readwrite.h" #include "gfx3d.h" +#include "movie.h" +#include "windows/main.h" //void*v is actually a void** which will be indirected before reading @@ -129,8 +131,8 @@ SFORMAT SF_ARM9[]={ }; SFORMAT SF_MEM[]={ - { "ITCM", 1, 0x8000, ARM9Mem.ARM9_ITCM}, - { "DTCM", 1, 0x4000, ARM9Mem.ARM9_DTCM}, + { "ITCM", 1, sizeof(ARM9Mem.ARM9_ITCM), ARM9Mem.ARM9_ITCM}, + { "DTCM", 1, sizeof(ARM9Mem.ARM9_DTCM), ARM9Mem.ARM9_DTCM}, //for legacy purposes, WRAX is a separate variable. shouldnt be a problem. { "WRAM", 1, 0x400000, ARM9Mem.MAIN_MEM}, @@ -141,9 +143,9 @@ SFORMAT SF_MEM[]={ //but there are actually no more registers than this { "9REG", 1, 0x2000, ARM9Mem.ARM9_REG}, - { "VMEM", 1, 0x800, ARM9Mem.ARM9_VMEM}, - { "OAMS", 1, 0x800, ARM9Mem.ARM9_OAM}, - { "LCDM", 1, 0xA4000, ARM9Mem.ARM9_LCD}, + { "VMEM", 1, sizeof(ARM9Mem.ARM9_VMEM), ARM9Mem.ARM9_VMEM}, + { "OAMS", 1, sizeof(ARM9Mem.ARM9_OAM), ARM9Mem.ARM9_OAM}, + { "LCDM", 1, sizeof(ARM9Mem.ARM9_LCD), ARM9Mem.ARM9_LCD}, { 0 } }; @@ -169,15 +171,12 @@ extern u32 DMASrc[2][4]; extern u32 DMADst[2][4]; SFORMAT SF_MMU[]={ - { "M7BI", 1, 0x4000, MMU.ARM7_BIOS}, - { "M7ER", 1, 0x10000, MMU.ARM7_ERAM}, - { "M7RG", 1, 0x10000, MMU.ARM7_REG}, - { "M7WI", 1, 0x10000, MMU.ARM7_WIRAM}, - { "MVRM", 1, 4, MMU.VRAM_MAP}, - { "MVRM", 4, 9, MMU.LCD_VRAM_ADDR}, - { "MVRM", 1, 9, MMU.LCDCenable}, - { "MSWI", 1, 0x8000, MMU.SWIRAM}, - { "MCRA", 1, 0x10000, MMU.CART_RAM}, + { "M7BI", 1, sizeof(MMU.ARM7_BIOS), MMU.ARM7_BIOS}, + { "M7ER", 1, sizeof(MMU.ARM7_ERAM), MMU.ARM7_ERAM}, + { "M7RG", 1, sizeof(MMU.ARM7_REG), MMU.ARM7_REG}, + { "M7WI", 1, sizeof(MMU.ARM7_WIRAM), MMU.ARM7_WIRAM}, + { "MSWI", 1, sizeof(MMU.SWIRAM), MMU.SWIRAM}, + { "MCRA", 1, sizeof(MMU.CART_RAM), MMU.CART_RAM}, { "M9RW", 1, 1, &MMU.ARM9_RW_MODE}, { "MDTC", 4, 1, &MMU.DTCMRegion}, { "MITC", 4, 1, &MMU.ITCMRegion}, @@ -229,37 +228,46 @@ SFORMAT SF_MMU[]={ //fifos { "F0TL", 1, 1, &ipc_fifo[0].tail}, - { "F0BF", 4, 16, &ipc_fifo[0].buf[0]}, + { "F0BF", 4, 16, ipc_fifo[0].buf}, { "F1TL", 1, 1, &ipc_fifo[1].tail}, - { "F1BF", 4, 16, &ipc_fifo[1].buf[0]}, + { "F1BF", 4, 16, ipc_fifo[1].buf}, { "FDHD", 4, 1, &disp_fifo.head}, { "FDTL", 4, 1, &disp_fifo.tail}, - { "FDBF", 4, 0x6000, &disp_fifo.buf[0]}, + { "FDBF", 4, 0x6000, disp_fifo.buf}, { 0 } }; +SFORMAT SF_MOVIE[]={ + { "FRAC", 4, 1, &currFrameCounter}, + { "LAGC", 4, 1, &TotalLagFrames}, + { 0 } +}; static void mmu_savestate(std::ostream* os) { //version write32le(0,os); + write32le(MMU.bupmem.type,os); write32le(MMU.bupmem.size,os); os->write((char*)MMU.bupmem.data,MMU.bupmem.size); } -static bool mmu_loadstate(std::istream* is) +static bool mmu_loadstate(std::istream* is, int size) { //read version int version; if(read32le(&version,is) != 1) return false; if(version != 0) return false; + int bupmem_type; u32 bupmem_size; + if(read32le(&bupmem_type,is) != 1) return false; if(read32le(&bupmem_size,is) != 1) return false; - if(bupmem_size != MMU.bupmem.size) return false; //mismatch between current initialized and saved size + + mc_realloc(&MMU.bupmem,bupmem_type,bupmem_size); is->read((char*)MMU.bupmem.data,bupmem_size); if(is->fail()) return false; @@ -364,7 +372,7 @@ static bool cp15_loadone(armcp15_t *cp15, std::istream* is) return true; } -static bool cp15_loadstate(std::istream* is) +static bool cp15_loadstate(std::istream* is, int size) { //read version int version; @@ -633,6 +641,9 @@ static int savestate_WriteChunk(std::ostream* os, int type, SFORMAT *sf) return (bsize+8); } +//TODO TODO TODO TODO TODO TODO TODO +// - this is retarded. why not write placeholders for size and then write directly to the stream +//and then go back and fill them in static void savestate_WriteChunk(std::ostream* os, int type, void (*saveproc)(std::ostream* os)) { //get the size @@ -657,6 +668,16 @@ static bool savestate_save(std::ostream* outstream, int compressionLevel) writechunks(os); ms.flush(); + for(int i=0x2000;i<0x1000000;i++) + if(ARM9Mem.ARM9_REG[i] != 0) { + MessageBox(0,"Debug check fail: ARM9Mem.ARM9_REG",0,0); + } + + for(int i=0;i<0x20000;i++) + if(ARM9Mem.blank_memory[i] != 0) { + MessageBox(0,"Debug check fail: ARM9Mem.blank_memory",0,0); + } + //save the length of the file u32 len = ms.size(); @@ -730,6 +751,8 @@ static void writechunks(std::ostream* os) { savestate_WriteChunk(os,8,spu_savestate); savestate_WriteChunk(os,90,SF_GFX3D); savestate_WriteChunk(os,91,gfx3d_savestate); + savestate_WriteChunk(os,100,SF_MOVIE); + savestate_WriteChunk(os,101,mov_savestate); savestate_WriteChunk(os,0xFFFFFFFF,(SFORMAT*)0); } @@ -747,15 +770,17 @@ static bool ReadStateChunks(std::istream* is, s32 totalsize) { case 1: if(!ReadStateChunk(is,SF_ARM9,size)) ret=false; break; case 2: if(!ReadStateChunk(is,SF_ARM7,size)) ret=false; break; - case 3: if(!cp15_loadstate(is)) ret=false; break; + case 3: if(!cp15_loadstate(is,size)) ret=false; break; case 4: if(!ReadStateChunk(is,SF_MEM,size)) ret=false; break; case 5: if(!ReadStateChunk(is,SF_NDS,size)) ret=false; break; case 60: if(!ReadStateChunk(is,SF_MMU,size)) ret=false; break; - case 61: if(!mmu_loadstate(is)) ret=false; break; - case 7: if(!gpu_loadstate(is)) ret=false; break; - case 8: if(!spu_loadstate(is)) ret=false; break; + case 61: if(!mmu_loadstate(is,size)) ret=false; break; + case 7: if(!gpu_loadstate(is,size)) ret=false; break; + case 8: if(!spu_loadstate(is,size)) ret=false; break; case 90: if(!ReadStateChunk(is,SF_GFX3D,size)) ret=false; break; - case 91: if(!gfx3d_loadstate(is)) ret=false; break; + case 91: if(!gfx3d_loadstate(is,size)) ret=false; break; + case 100: if(!ReadStateChunk(is,SF_MOVIE, size)) ret=false; break; + case 101: if(!mov_loadstate(is, size)) ret=false; break; default: ret=false; break; @@ -842,13 +867,22 @@ static bool savestate_load(std::istream* is) memorystream mstemp(&buf); bool x = ReadStateChunks(&mstemp,(s32)len); + if(!x) + { + printf("Error loading savestate. It failed halfway through;\nSince there is no savestate backup system, your current game session is wrecked"); +#ifdef _MSC_VER + MessageBox(0,"Error loading savestate. It failed halfway through;\nSince there is no savestate backup system, your current game session is wrecked",0,0); +#endif + return false; + } + loadstate(); if((nds.debugConsole!=0) != CommonSettings.DebugConsole) { printf("WARNING: forcing console debug mode to: debugmode=%s\n",nds.debugConsole?"TRUE":"FALSE"); } - return x; + return true; } bool savestate_load(const char *file_name) diff --git a/src/texcache.cpp b/src/texcache.cpp index 1f14115ed..0adfac384 100644 --- a/src/texcache.cpp +++ b/src/texcache.cpp @@ -12,6 +12,7 @@ using std::min; using std::max; +//only dump this from ogl renderer. for now, softrasterizer creates things in an incompatible pixel format //#define DEBUG_DUMP_TEXTURE //This class represents a number of regions of memory which should be viewed as contiguous @@ -150,7 +151,11 @@ static void DebugDumpTexture(int which) static int lastTexture = -1; -void TexCache_SetTexture(unsigned int format, unsigned int texpal) + +#define CONVERT(color,alpha) ((TEXFORMAT == TexFormat_32bpp)?(RGB15TO32(color,alpha)):RGB15TO5555(color,alpha)) + +template +void TexCache_SetTexture(u32 format, u32 texpal) { //for each texformat, number of palette entries const int palSizes[] = {0, 32, 4, 16, 256, 0, 8, 0}; @@ -309,7 +314,8 @@ REJECT: //INFO("Texture %03i - format=%08X; pal=%04X (mode %X, width %04i, height %04i)\n",i, texcache[i].frm, texcache[i].pal, texcache[i].mode, sizeX, sizeY); //============================================================================ Texture conversion - u32 palZeroTransparent = (1-((format>>29)&1))*255; // shash: CONVERT THIS TO A TABLE :) + const u32 opaqueColor = TEXFORMAT==TexFormat_32bpp?255:31; + u32 palZeroTransparent = (1-((format>>29)&1))*opaqueColor; switch (texcache[tx].mode) { @@ -321,7 +327,10 @@ REJECT: { u16 c = pal[*adr&31]; u8 alpha = *adr>>5; - *dwdst++ = RGB15TO32(c,material_3bit_to_8bit[alpha]); + if(TEXFORMAT == TexFormat_15bpp) + *dwdst++ = RGB15TO5555(c,material_3bit_to_5bit[alpha]); + else + *dwdst++ = RGB15TO32(c,material_3bit_to_8bit[alpha]); adr++; } } @@ -339,19 +348,19 @@ REJECT: bits = (*adr)&0x3; c = pal[bits]; - *dwdst++ = RGB15TO32(c,(bits == 0) ? palZeroTransparent : 255); + *dwdst++ = CONVERT(c,(bits == 0) ? palZeroTransparent : opaqueColor); bits = ((*adr)>>2)&0x3; c = pal[bits]; - *dwdst++ = RGB15TO32(c,(bits == 0) ? palZeroTransparent : 255); + *dwdst++ = CONVERT(c,(bits == 0) ? palZeroTransparent : opaqueColor); bits = ((*adr)>>4)&0x3; c = pal[bits]; - *dwdst++ = RGB15TO32(c,(bits == 0) ? palZeroTransparent : 255); + *dwdst++ = CONVERT(c,(bits == 0) ? palZeroTransparent : opaqueColor); bits = ((*adr)>>6)&0x3; c = pal[bits]; - *dwdst++ = RGB15TO32(c,(bits == 0) ? palZeroTransparent : 255); + *dwdst++ = CONVERT(c,(bits == 0) ? palZeroTransparent : opaqueColor); adr++; } @@ -369,11 +378,11 @@ REJECT: bits = (*adr)&0xF; c = pal[bits]; - *dwdst++ = RGB15TO32(c,(bits == 0) ? palZeroTransparent : 255); + *dwdst++ = CONVERT(c,(bits == 0) ? palZeroTransparent : opaqueColor); bits = ((*adr)>>4); c = pal[bits]; - *dwdst++ = RGB15TO32(c,(bits == 0) ? palZeroTransparent : 255); + *dwdst++ = CONVERT(c,(bits == 0) ? palZeroTransparent : opaqueColor); adr++; } } @@ -386,7 +395,7 @@ REJECT: for(u32 x = 0; x < ms.items[j].len; ++x) { u16 c = pal[*adr]; - *dwdst++ = RGB15TO32(c,(*adr == 0) ? palZeroTransparent : 255); + *dwdst++ = CONVERT(c,(*adr == 0) ? palZeroTransparent : opaqueColor); adr++; } } @@ -444,7 +453,7 @@ REJECT: u16 pal1offset = (pal1 & 0x3FFF)<<1; u8 mode = pal1>>14; u32 tmp_col[4]; - + tmp_col[0]=RGB16TO32(PAL4X4(pal1offset),255); tmp_col[1]=RGB16TO32(PAL4X4(pal1offset+1),255); @@ -492,6 +501,17 @@ REJECT: } } + if(TEXFORMAT==TexFormat_15bpp) + { + for(int i=0;i<4;i++) + { + tmp_col[i] >>= 3; + tmp_col[i] &= 0x1F1F1F1F; + } + } + + //TODO - this could be more precise for 32bpp mode (run it through the color separation table) + //set all 16 texels for (int sy = 0; sy < 4; sy++) { @@ -520,7 +540,10 @@ REJECT: { u16 c = pal[*adr&0x07]; u8 alpha = (*adr>>3); - *dwdst++ = RGB15TO32(c,material_5bit_to_8bit[alpha]); + if(TEXFORMAT == TexFormat_15bpp) + *dwdst++ = RGB15TO5555(c,alpha); + else + *dwdst++ = RGB15TO32(c,material_5bit_to_8bit[alpha]); adr++; } } @@ -533,8 +556,8 @@ REJECT: for(u32 x = 0; x < ms.items[j].len; ++x) { u16 c = map[x]; - int alpha = ((c&0x8000)?255:0); - *dwdst++ = RGB15TO32(c&0x7FFF,alpha); + int alpha = ((c&0x8000)?opaqueColor:0); + *dwdst++ = CONVERT(c&0x7FFF,alpha); } } break; @@ -585,3 +608,7 @@ void TexCache_Invalidate() void (*TexCache_BindTexture)(u32 texnum) = NULL; void (*TexCache_BindTextureData)(u32 texnum, u8* data); + +//these templates needed to be instantiated manually +template void TexCache_SetTexture(u32 format, u32 texpal); +template void TexCache_SetTexture(u32 format, u32 texpal); \ No newline at end of file diff --git a/src/texcache.h b/src/texcache.h index f018667ef..c350a2fe4 100644 --- a/src/texcache.h +++ b/src/texcache.h @@ -3,8 +3,14 @@ #include "common.h" +enum TexCache_TexFormat +{ + TexFormat_32bpp, + TexFormat_15bpp +}; + #define MAX_TEXTURE 500 -#ifdef SSE2 +#ifndef NOSSE2 struct ALIGN(16) TextureCache #else struct ALIGN(8) TextureCache @@ -36,7 +42,10 @@ extern void (*TexCache_BindTexture)(u32 texnum); extern void (*TexCache_BindTextureData)(u32 texnum, u8* data); void TexCache_Reset(); -void TexCache_SetTexture(unsigned int format, unsigned int texpal); + +template +void TexCache_SetTexture(u32 format, u32 texpal); + void TexCache_Invalidate(); extern u8 TexCache_texMAP[1024*2048*4]; diff --git a/src/types.h b/src/types.h index ea9c82eeb..847bb5a4c 100644 --- a/src/types.h +++ b/src/types.h @@ -76,7 +76,7 @@ #endif #define DESMUME_VERSION_NUMERIC 90300 -#define DESMUME_VERSION_STRING " " "0.9.3 svn" DESMUME_FEATURE_STRING DESMUME_PLATFORM_STRING DESMUME_CPUEXT_STRING DESMUME_SUBVERSION_STRING DESMUME_COMPILER +#define DESMUME_VERSION_STRING " " "0.9.2-rr" DESMUME_FEATURE_STRING DESMUME_PLATFORM_STRING DESMUME_CPUEXT_STRING DESMUME_SUBVERSION_STRING DESMUME_COMPILER #define DESMUME_NAME_AND_VERSION " " DESMUME_NAME DESMUME_VERSION_STRING #ifdef _WIN32 @@ -112,6 +112,13 @@ #endif #endif +#ifdef _MSC_VER +#define _CDECL_ __cdecl +#else +#define _CDECL_ +#endif + + #ifndef INLINE #if defined(_MSC_VER) || defined(__INTEL_COMPILER) #define INLINE _inline diff --git a/src/wifi.cpp b/src/wifi.cpp index 0214262f4..0db58ca69 100644 --- a/src/wifi.cpp +++ b/src/wifi.cpp @@ -927,7 +927,7 @@ u16 WIFI_read16(wifimac_t *wifi,u32 address) //printf("wifi: read reg 0x0214\n"); return 0x0009; case 0x19C: - assert(false); //luigi, please pick something to return from here + //assert(false); //luigi, please pick something to return from here return 0; default: // printf("wifi: read unhandled reg %03X\n", address); diff --git a/src/windows/DeSmuME_2005.vcproj b/src/windows/DeSmuME_2005.vcproj index 822cf0241..674e3a5c2 100644 --- a/src/windows/DeSmuME_2005.vcproj +++ b/src/windows/DeSmuME_2005.vcproj @@ -647,6 +647,22 @@ RelativePath=".\palView.h" > + + + + + + + + diff --git a/src/windows/DeSmuME_2008.vcproj b/src/windows/DeSmuME_2008.vcproj index d0f3c12e2..5d6b88010 100644 --- a/src/windows/DeSmuME_2008.vcproj +++ b/src/windows/DeSmuME_2008.vcproj @@ -52,7 +52,7 @@ EnableFiberSafeOptimizations="false" WholeProgramOptimization="false" AdditionalIncludeDirectories=".;..;.\zlib123;.\zziplib;.\winpcap" - PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;BETA_VERSION;SPU_INTERPOLATE;NOMINMAX;EXPERIMENTAL_WIFI" + PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;BETA_VERSION;SPU_INTERPOLATE;NOMINMAX;EXPERIMENTAL_WIFI;HAVE_LIBZZIP;HAVE_LIBZ" ExceptionHandling="1" BufferSecurityCheck="false" EnableEnhancedInstructionSet="0" @@ -550,6 +550,10 @@ RelativePath="..\MMU.cpp" > + + @@ -964,6 +968,22 @@ RelativePath=".\palView.cpp" > + + + + + + + + @@ -1074,6 +1094,14 @@ RelativePath=".\palView.h" > + + + + @@ -1202,6 +1230,10 @@ RelativePath="..\MMU.h" > + + @@ -1277,6 +1309,10 @@ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" > + + @@ -1288,5 +1324,9 @@ + diff --git a/src/windows/aviout.cpp b/src/windows/aviout.cpp index fe396d8dd..c663822d8 100644 --- a/src/windows/aviout.cpp +++ b/src/windows/aviout.cpp @@ -414,11 +414,15 @@ void DRV_AviVideoUpdate(const u16* buffer) AviNextSegment(); } +BOOL AVI_IsRecording() +{ + return avi_file && avi_file->valid; +} void DRV_AviSoundUpdate(void* soundData, int soundLen) { int nBytes; - if(!avi_file || !avi_file->valid || !avi_file->sound_added) + if(!AVI_IsRecording() || !avi_file->sound_added) return; nBytes = soundLen * avi_file->wave_format.nBlockAlign; diff --git a/src/windows/hotkey.cpp b/src/windows/hotkey.cpp index 4d823deb6..9bbf56e38 100644 --- a/src/windows/hotkey.cpp +++ b/src/windows/hotkey.cpp @@ -27,6 +27,7 @@ #include "render3d.h" #include "throttle.h" #include "../mic.h" +#include "../movie.h" extern LRESULT OpenFile(); //adelikat: Made this an extern here instead of main.h Seemed icky not to limit the scope of this function @@ -154,9 +155,7 @@ void HK_MicrophoneKeyUp(int) {MicButtonPressed =0;} void HK_AutoHoldClearKeyDown(int) { - for (int i=0; i < 10; i++) { - AutoHold.hold(i)=false; - } + ClearAutoHold(); } void HK_Reset(int) {ResetGame();} @@ -168,6 +167,13 @@ void HK_ToggleFrame(int) {frameCounterDisplay ^= true;} void HK_ToggleFPS(int) {FpsDisplay ^= true;} void HK_ToggleInput(int) {ShowInputDisplay ^= true;} void HK_ToggleLag(int) {ShowLagFrameCounter ^= true;} +void HK_ToggleReadOnly(int) { + movie_readonly ^= true; + if(movie_readonly) + SetMessageToDisplay("Read Only"); + else + SetMessageToDisplay("Read+Write"); +} void HK_AutoHoldKeyDown(int) {AutoHoldPressed = true;} void HK_AutoHoldKeyUp(int) {AutoHoldPressed = false;} @@ -178,6 +184,12 @@ void HK_TurboRightKeyUp(int) { Turbo.Right = false; } void HK_TurboLeftKeyDown(int) { Turbo.Left = true; } void HK_TurboLeftKeyUp(int) { Turbo.Left = false; } +void HK_TurboRKeyDown(int) { Turbo.R = true; } +void HK_TurboRKeyUp(int) { Turbo.R = false; } + +void HK_TurboLKeyDown(int) { Turbo.L = true; } +void HK_TurboLKeyUp(int) { Turbo.L = false; } + void HK_TurboDownKeyDown(int) { Turbo.Down = true; } void HK_TurboDownKeyUp(int) { Turbo.Down = false; } @@ -208,7 +220,9 @@ void HK_FastForwardKeyDown(int) { FastForward = 1; } void HK_FastForwardKeyUp(int) { FastForward = 0; } void HK_IncreaseSpeed(int) { IncreaseSpeed(); } void HK_DecreaseSpeed(int) { DecreaseSpeed(); } -void HK_FrameAdvance(int) { FrameAdvance(); } +void HK_FrameAdvanceKeyDown(int) { FrameAdvance(true); } +void HK_FrameAdvanceKeyUp(int) { FrameAdvance(false); } + void HK_ToggleRasterizer(int) { if(cur3DCore == GPU3D_OPENGL) cur3DCore = GPU3D_SWRAST; @@ -261,7 +275,8 @@ void InitCustomKeys (SCustomKeys *keys) keys->Pause.page = HOTKEY_PAGE_MAIN; keys->Pause.key = VK_SPACE; - keys->FrameAdvance.handleKeyDown = HK_FrameAdvance; + keys->FrameAdvance.handleKeyDown = HK_FrameAdvanceKeyDown; + keys->FrameAdvance.handleKeyUp = HK_FrameAdvanceKeyUp; keys->FrameAdvance.code = "FrameAdvance"; keys->FrameAdvance.name = L"Frame Advance"; keys->FrameAdvance.page = HOTKEY_PAGE_MAIN; @@ -348,6 +363,12 @@ void InitCustomKeys (SCustomKeys *keys) keys->ToggleLag.page = HOTKEY_PAGE_MAIN; keys->ToggleLag.key = NULL; + keys->ToggleReadOnly.handleKeyDown = HK_ToggleReadOnly; + keys->ToggleReadOnly.code = "ToggleReadOnly"; + keys->ToggleReadOnly.name = L"Toggle Read Only"; + keys->ToggleReadOnly.page = HOTKEY_PAGE_MAIN; + keys->ToggleReadOnly.key = NULL; + keys->RecordAVI.handleKeyDown = HK_RecordAVI; keys->RecordAVI.code = "RecordAVI"; keys->RecordAVI.name = L"Record AVI"; @@ -375,6 +396,20 @@ void InitCustomKeys (SCustomKeys *keys) keys->TurboLeft.page = HOTKEY_PAGE_TURBO; keys->TurboLeft.key = NULL; + keys->TurboR.handleKeyDown = HK_TurboRKeyDown; + keys->TurboR.handleKeyUp = HK_TurboRKeyUp; + keys->TurboR.code = "TurboR"; + keys->TurboR.name = L"Turbo R"; + keys->TurboR.page = HOTKEY_PAGE_TURBO; + keys->TurboR.key = NULL; + + keys->TurboL.handleKeyDown = HK_TurboLKeyDown; + keys->TurboL.handleKeyUp = HK_TurboLKeyUp; + keys->TurboL.code = "TurboL"; + keys->TurboL.name = L"Turbo L"; + keys->TurboL.page = HOTKEY_PAGE_TURBO; + keys->TurboL.key = NULL; + keys->TurboDown.handleKeyDown = HK_TurboDownKeyDown; keys->TurboDown.handleKeyUp = HK_TurboDownKeyUp; keys->TurboDown.code = "TurboDown"; diff --git a/src/windows/hotkey.h b/src/windows/hotkey.h index 397cef441..c40625d7f 100644 --- a/src/windows/hotkey.h +++ b/src/windows/hotkey.h @@ -67,7 +67,7 @@ struct SCustomKeys SCustomKey OpenROM, Reset, Pause, FrameAdvance, FastForward, FastForwardToggle, IncreaseSpeed, DecreaseSpeed, Microphone; - SCustomKey TurboRight, TurboLeft, TurboDown, TurboUp, TurboSelect, TurboStart, TurboB, TurboA, TurboY, TurboX; + SCustomKey TurboRight, TurboLeft, TurboDown, TurboUp, TurboSelect, TurboStart, TurboB, TurboA, TurboY, TurboX, TurboR, TurboL; SCustomKey AutoHold, AutoHoldClear; @@ -80,6 +80,7 @@ struct SCustomKeys SCustomKey ToggleFPS; SCustomKey ToggleInput; SCustomKey ToggleLag; + SCustomKey ToggleReadOnly; SCustomKey LastItem; // dummy, must be last //--methods-- diff --git a/src/windows/main.cpp b/src/windows/main.cpp index e38288da1..cf4852234 100644 --- a/src/windows/main.cpp +++ b/src/windows/main.cpp @@ -69,13 +69,17 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "throttle.h" #include "gbaslot_config.h" #include "cheatsWin.h" - +#include "Mmsystem.h" #include "../mic.h" #include "../common.h" #include "main.h" #include "hotkey.h" - +#include "../movie.h" +#include "../replay.h" #include "snddx.h" +#include "ramwatch.h" +#include "ram_search.h" + #include "directx/ddraw.h" @@ -91,8 +95,8 @@ using namespace std; //----Recent ROMs menu globals---------- vector RecentRoms; //The list of recent ROM filenames const unsigned int MAX_RECENT_ROMS = 10; //To change the recent rom max, simply change this number -const unsigned int clearid = 600; // ID for the Clear recent ROMs item -const unsigned int baseid = 601; //Base identifier for the recent ROMs items +const unsigned int clearid = IDM_RECENT_RESERVED0; // ID for the Clear recent ROMs item +const unsigned int baseid = IDM_RECENT_RESERVED1; //Base identifier for the recent ROMs items static HMENU recentromsmenu; //Handle to the recent ROMs submenu //-------------------------------------- @@ -107,6 +111,10 @@ void DRV_AviSoundUpdate(void* soundData, int soundLen); bool DRV_AviIsRecording(); void DRV_AviVideoUpdate(const u16* buffer); //------ +DWORD hKeyInputTimer; + +extern LRESULT CALLBACK RamSearchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + CRITICAL_SECTION win_sync; volatile int win_sound_samplecounter = 0; @@ -157,6 +165,7 @@ int WndX = 0; int WndY = 0; int ScreenGap = 0; +extern HWND RamSearchHWnd; static int FrameLimit = 1; @@ -215,9 +224,8 @@ GPU3DInterface *core3DList[] = { int autoframeskipenab=0; int frameskiprate=0; int emu_paused = 0; -static int backupmemorytype=MC_TYPE_AUTODETECT; -static u32 backupmemorysize=1; -unsigned int frameCounter=0; +int backupmemorytype=MC_TYPE_AUTODETECT; +u32 backupmemorysize=1; bool frameAdvance = false; bool frameCounterDisplay = false; bool FpsDisplay = false; @@ -343,10 +351,10 @@ void ResetHud(HudStruct *hudstruct) { SetHudDummy(&hudstruct->Dummy); } -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 - +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 +bool NewMessageToDisplay = false; //Flag to indicate a new message is in queue /* the firmware settings */ struct NDS_fw_config_data win_fw_config; @@ -382,6 +390,79 @@ struct configured_features { const char *cflash_disk_image_file; }; +int KeyInDelayInCount=10; + +static int lastTime = timeGetTime(); +int repeattime; + +VOID CALLBACK KeyInputTimer( UINT idEvent, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2) +{ + // +// if(timeGetTime() - lastTime > 5) +// { + bool S9xGetState (WORD KeyIdent); + + /* if(GUI.JoystickHotkeys) + { + static uint32 joyState [256]; + + for(int i = 0 ; i < 255 ; i++) + { + bool active = !S9xGetState(0x8000|i); + + if(active) + { + if(joyState[i] < ULONG_MAX) // 0xffffffffUL + joyState[i]++; + if(joyState[i] == 1 || joyState[i] >= (unsigned) KeyInDelayInCount) + PostMessage(GUI.hWnd, WM_CUSTKEYDOWN, (WPARAM)(0x8000|i),(LPARAM)(NULL)); + } + else + { + if(joyState[i]) + { + joyState[i] = 0; + PostMessage(GUI.hWnd, WM_CUSTKEYUP, (WPARAM)(0x8000|i),(LPARAM)(NULL)); + } + } + } + }*/ + // if((!GUI.InactivePause || !Settings.ForcedPause) + // || (GUI.BackgroundInput || !(Settings.ForcedPause & (PAUSE_INACTIVE_WINDOW | PAUSE_WINDOW_ICONISED)))) + // { + static uint32 joyState [256]; + for(int i = 0 ; i < 255 ; i++) + { + bool active = !S9xGetState(i); + if(active) + { + if(joyState[i] < ULONG_MAX) // 0xffffffffUL + joyState[i]++; + if(joyState[i] == 1 || joyState[i] >= (unsigned) KeyInDelayInCount) { + //sort of fix the auto repeating + //TODO find something better + // repeattime++; + // if(repeattime % 10 == 0) { + + PostMessage(MainWindow->getHWnd(), WM_CUSTKEYDOWN, (WPARAM)(i),(LPARAM)(NULL)); + repeattime=0; + // } + } + } + else + { + if(joyState[i]) + { + joyState[i] = 0; + PostMessage(MainWindow->getHWnd(), WM_CUSTKEYUP, (WPARAM)(i),(LPARAM)(NULL)); + } + } + } + // } + // lastTime = timeGetTime(); +// } +} + static void init_configured_features( struct configured_features *config) { config->arm9_gdb_port = 0; @@ -920,7 +1001,8 @@ void DisplayMessage() { //adelikat - 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()); + osd->addFixed(0, 120, "%s",MessageToDisplay.str().c_str()); + NewMessageToDisplay = false; } } @@ -932,12 +1014,15 @@ void SaveStateMessages(int slotnum, int whichMessage) { case 0: //State saved MessageToDisplay << "State " << slotnum << " saved."; + NewMessageToDisplay = true; //adelikat: TODO: make these call SetMessageToDisplay instead break; case 1: //State loaded MessageToDisplay << "State " << slotnum << " loaded."; + NewMessageToDisplay = true; break; case 2: //Save slot selected MessageToDisplay << "State " << slotnum << " selected."; + NewMessageToDisplay = true; default: break; } @@ -999,12 +1084,13 @@ DWORD WINAPI run() while(execute) { input_process(); + FCEUMOV_AddInputState(); if (ShowInputDisplay) osd->addFixed(Hud.InputDisplay.x, Hud.InputDisplay.y, "%s",InputDisplayString.c_str()); { Lock lock; - cycles = NDS_exec((560190<<1)-cycles); + NDS_exec(0); win_sound_samplecounter = 735; } @@ -1025,7 +1111,17 @@ DWORD WINAPI run() static int fps3d = 0; if (FpsDisplay) osd->addFixed(Hud.FpsDisplay.x, Hud.FpsDisplay.y, "%02d Fps / %02d 3d", fps, fps3d); - osd->update(); + if (frameCounterDisplay) + { + if (movieMode == MOVIEMODE_PLAY) + osd->addFixed(Hud.FrameCounter.x, Hud.FrameCounter.y, "%d/%d",currFrameCounter,currMovieData.records.size()); + else if(movieMode == MOVIEMODE_RECORD) + osd->addFixed(Hud.FrameCounter.x, Hud.FrameCounter.y, "%d",currFrameCounter); + else + osd->addFixed(Hud.FrameCounter.x, Hud.FrameCounter.y, "%d (no movie)",currFrameCounter); + } + + if(!DRV_AviIsRecording()) osd->update(); Display(); osd->clear(); @@ -1047,6 +1143,8 @@ DWORD WINAPI run() } + Update_RAM_Watch(); + Update_RAM_Search(); fpsframecount++; QueryPerformanceCounter((LARGE_INTEGER *)&curticks); @@ -1141,14 +1239,19 @@ DWORD WINAPI run() emu_halt(); SPU_Pause(1); } - frameCounter++; - if (frameCounterDisplay) osd->addFixed(Hud.FrameCounter.x, Hud.FrameCounter.y, "%d",frameCounter); if (ShowLagFrameCounter) osd->addFixed(Hud.LagFrameCounter.x, Hud.LagFrameCounter.y, "%d",TotalLagFrames); if (ShowMicrophone) osd->addFixed(Hud.Microphone.x, Hud.Microphone.y, "%d",MicDisplay); - DisplayMessage(); +// DisplayMessage(); CheckMessages(); } + if (NewMessageToDisplay) + { + DisplayMessage(); + osd->update(); + Display(); + osd->clear(); + } paused = TRUE; CheckMessages(); Sleep(100); @@ -1203,7 +1306,6 @@ BOOL LoadROM(char * filename, const char *cflash_disk_image) #endif { INFO("Loading %s was successful\n",filename); - frameCounter=0; lagframecounter=0; UpdateRecentRoms(filename); osd->setRotate(GPU_rotation); @@ -1327,6 +1429,7 @@ static void ExitRunLoop() emu_halt(); } +BOOL AVI_IsRecording(); class WinDriver : public Driver { virtual BOOL WIFI_Host_InitSystem() { @@ -1356,6 +1459,11 @@ class WinDriver : public Driver WSACleanup() ; #endif } + + virtual BOOL AVI_IsRecording() + { + return ::AVI_IsRecording(); + } }; int WINAPI WinMain (HINSTANCE hThisInstance, @@ -1594,6 +1702,10 @@ int WINAPI WinMain (HINSTANCE hThisInstance, MainWindow->checkMenu(frameskiprate + IDC_FRAMESKIP0, MF_BYCOMMAND | MF_CHECKED); } + int KeyInRepeatMSec=20; + + hKeyInputTimer = timeSetEvent (KeyInRepeatMSec, 0, KeyInputTimer, 0, TIME_PERIODIC); + cur3DCore = GetPrivateProfileInt("3D", "Renderer", GPU3D_OPENGL, IniName); CommonSettings.HighResolutionInterpolateColor = GetPrivateProfileInt("3D", "HighResolutionInterpolateColor", 1, IniName); NDS_3D_ChangeCore(cur3DCore); @@ -2183,11 +2295,24 @@ void Pause() emu_paused ^= 1; } -void FrameAdvance() +bool first; + +void FrameAdvance(bool state) { - frameAdvance = true; - execute = TRUE; - emu_paused = 1; + if(state) { + if(first) { + frameAdvance=true; + } + else { + execute = TRUE; + first=false; + } + } + else { + emu_halt(); + SPU_Pause(1); + emu_paused = 1; + } } enum CONFIGSCREEN @@ -2282,6 +2407,10 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM EnableMenuItem(mainMenu, IDM_CHEATS_SEARCH, MF_BYCOMMAND | (romloaded) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(mainMenu, IDM_WIFISETTINGS, MF_BYCOMMAND | (romloaded) ? MF_ENABLED : MF_GRAYED); + EnableMenuItem(mainMenu, IDM_RECORD_MOVIE, MF_BYCOMMAND | (romloaded && movieMode == MOVIEMODE_INACTIVE) ? MF_ENABLED : MF_GRAYED); + EnableMenuItem(mainMenu, IDM_PLAY_MOVIE, MF_BYCOMMAND | (romloaded && movieMode == MOVIEMODE_INACTIVE) ? MF_ENABLED : MF_GRAYED); + EnableMenuItem(mainMenu, IDM_STOPMOVIE, MF_BYCOMMAND | (romloaded && movieMode != MOVIEMODE_INACTIVE) ? MF_ENABLED : MF_GRAYED); + //Update savestate slot items based on ROM loaded for (int x = 0; x < 10; x++) { @@ -2413,6 +2542,7 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM //break; case WM_KEYDOWN: + break; case WM_SYSKEYDOWN: case WM_CUSTKEYDOWN: { @@ -2906,7 +3036,15 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM case IDM_CHEATS_SEARCH: CheatsSearchDialog(hwnd); return 0; - + case IDM_RECORD_MOVIE: + MovieRecordTo(); + return 0; + case IDM_PLAY_MOVIE: + Replay_LoadMovie(); + return 0; + case IDM_STOPMOVIE: + FCEUI_StopMovie(); + return 0; case ID_VIEW_FRAMECOUNTER: frameCounterDisplay ^= 1; MainWindow->checkMenu(ID_VIEW_FRAMECOUNTER, frameCounterDisplay ? MF_CHECKED : MF_UNCHECKED); @@ -2946,6 +3084,25 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM osd->clear(); return 0; + case ID_RAM_SEARCH: + if(!RamSearchHWnd) + { + RamSearchHWnd = CreateDialog(hAppInst, MAKEINTRESOURCE(IDD_RAMSEARCH), hwnd, (DLGPROC) RamSearchProc); + } + else + SetForegroundWindow(RamSearchHWnd); + break; + + case ID_RAM_WATCH: + if(!RamWatchHWnd) + { + RamWatchHWnd = CreateDialog(hAppInst, MAKEINTRESOURCE(IDD_RAMWATCH), hwnd, (DLGPROC) RamWatchProc); + // DialogsOpen++; + } + else + SetForegroundWindow(RamWatchHWnd); + return 0; + #define clearsaver() \ MainWindow->checkMenu(IDC_SAVETYPE1, MF_BYCOMMAND | MF_UNCHECKED); \ MainWindow->checkMenu(IDC_SAVETYPE2, MF_BYCOMMAND | MF_UNCHECKED); \ @@ -3185,7 +3342,6 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM } } - return DefWindowProc (hwnd, message, wParam, lParam); } @@ -3327,7 +3483,6 @@ LRESULT CALLBACK EmulationSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, L { CheatsSearchReset(); NDS_Reset(); - frameCounter = 0; } } } @@ -3561,7 +3716,6 @@ LRESULT CALLBACK WifiSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM { CheatsSearchReset(); NDS_Reset(); - frameCounter = 0; } } } @@ -3683,7 +3837,6 @@ void ResetGame() { CheatsSearchReset(); NDS_Reset(); - frameCounter=0; } //adelikat: This function allows another file to add a message to the screen @@ -3693,6 +3846,7 @@ void SetMessageToDisplay(const char *message) //adelikat: TODO: set up a function that does the clearing and setting of the counter, so this code doesn't have to be done all over the place // make the function receive an int for the counter, but overload so that if no int, 120 is used MessageToDisplay << message; + NewMessageToDisplay = true; displayMessageCounter = 120;// } @@ -3729,4 +3883,9 @@ void UpdateHotkeyAssignments() text = text.substr(0,truncate); text.append("\tCtrl+O"); //TODO: Append actual hotkey assignment ChangeMenuItemText(IDM_OPEN, text); //Set Menu item text +} + +HWND GetMainHWND() +{ + return MainWindow->getHWnd(); } \ No newline at end of file diff --git a/src/windows/main.h b/src/windows/main.h index bcb29d147..40e250c5b 100644 --- a/src/windows/main.h +++ b/src/windows/main.h @@ -11,14 +11,13 @@ extern unsigned int lastSaveState; void SaveStateMessages(int slotnum, int whichMessage); void Display(); void Pause(); -void FrameAdvance(); +void FrameAdvance(bool state); void ResetGame(); //Resets game (for the menu item & hotkey void AviRecordTo(); void AviEnd(); void SetMessageToDisplay(const char *message); //For sending output to the main screen extern bool ShowInputDisplay; -extern unsigned int frameCounter; extern bool frameCounterDisplay; extern bool FpsDisplay; extern bool ShowInputDisplay; @@ -28,5 +27,9 @@ extern bool ShowLagFrameCounter; #define GPU3D_OPENGL 1 #define GPU3D_SWRAST 2 +extern int backupmemorytype; +extern u32 backupmemorysize; + +HWND GetMainHWND(); //adelikat: returns the main window handle #endif diff --git a/src/windows/ram_search.cpp b/src/windows/ram_search.cpp new file mode 100644 index 000000000..16daf0c25 --- /dev/null +++ b/src/windows/ram_search.cpp @@ -0,0 +1,1932 @@ +// A few notes about this implementation of a RAM search window: +// +// Speed of update was one of the highest priories. +// This is because I wanted the RAM search window to be able to +// update every single value in RAM every single frame, and +// keep track of the exact number of frames across which each value has changed, +// without causing the emulation to run noticeably slower than normal. +// +// The data representation was changed from one entry per valid address +// to one entry per contiguous range of uneliminated addresses +// which references uniform pools of per-address properties. +// - This saves time when there are many items because +// it minimizes the amount of data that needs to be stored and processed per address. +// - It also saves time when there are few items because +// it ensures that no time is wasted in iterating through +// addresses that have already been eliminated from the search. +// +// The worst-case scenario is when every other item has been +// eliminated from the search, maximizing the number of regions. +// This implementation manages to handle even that pathological case +// acceptably well. In fact, it still updates faster than the previous implementation. +// The time spent setting up or clearing such a large number of regions +// is somewhat horrendous, but it seems reasonable to have poor worst-case speed +// during these sporadic "setup" steps to achieve an all-around faster per-update speed. +// (You can test this case by performing the search: Modulo 2 Is Specific Address 0) + +#include "resource.h" + +#include "common.h" +#include "NDSSystem.h" +#include "ramwatch.h" + +#include "ram_search.h" +#include +#include +#include "ramwatch.h" +#include +#include +#ifdef _WIN32 + #include "BaseTsd.h" + typedef INT_PTR intptr_t; +#else + #include "stdint.h" +#endif + +HWND RamSearchHWnd; + +extern HWND RamWatchHWnd; + +extern char Str_Tmp[1024]; + +int Rom_Size; //TODO +unsigned char* Rom_Data; //TODO + +struct MemoryRegion +{ + unsigned int hardwareAddress; // hardware address of the start of this region + unsigned int size; // number of bytes to the end of this region + unsigned char* softwareAddress; // pointer to the start of the live emulator source values for this region + BOOL byteSwapped; // true if this is a byte-swapped region of memory + + unsigned int virtualIndex; // index into s_prevValues, s_curValues, and s_numChanges, valid after being initialized in ResetMemoryRegions() + unsigned int itemIndex; // index into listbox items, valid when s_itemIndicesInvalid is false +}; + +static unsigned char s_prevValues [MAX_RAM_SIZE+4] = {0}; // values at last search or reset +static unsigned char s_curValues [MAX_RAM_SIZE+4] = {0}; // values at last frame update +static unsigned short s_numChanges [MAX_RAM_SIZE+4] = {0}; // number of changes of the item starting at this virtual index address +static MemoryRegion* s_itemIndexToRegionPointer [MAX_RAM_SIZE+4] = {0}; // used for random access into the memory list (trading memory size to get speed here, too bad it's so much memory), only valid when s_itemIndicesInvalid is false +static BOOL s_itemIndicesInvalid = true; // if true, the link from listbox items to memory regions (s_itemIndexToRegionPointer) and the link from memory regions to list box items (MemoryRegion::itemIndex) both need to be recalculated +static BOOL s_prevValuesNeedUpdate = true; // if true, the "prev" values should be updated using the "cur" values on the next frame update signaled +static unsigned int s_maxItemIndex = 0; // max currently valid item index, the listbox sometimes tries to update things past the end of the list so we need to know this to ignore those attempts + +static const MemoryRegion s_prgRegion = { 0x02000000, 0x400000, (unsigned char*)ARM9Mem.MAIN_MEM, true}; + +/* +static const MemoryRegion s_prgRegion = { 0x020000, SEGACD_RAM_PRG_SIZE, (unsigned char*)Ram_Prg, true}; +static const MemoryRegion s_word1MRegion = { 0x200000, SEGACD_1M_RAM_SIZE, (unsigned char*)Ram_Word_1M, true}; +static const MemoryRegion s_word2MRegion = { 0x200000, SEGACD_2M_RAM_SIZE, (unsigned char*)Ram_Word_2M, true}; +static const MemoryRegion s_z80Region = { 0xA00000, Z80_RAM_SIZE, (unsigned char*)Ram_Z80, true}; +static const MemoryRegion s_68kRegion = { 0xFF0000, _68K_RAM_SIZE, (unsigned char*)Ram_68k, true}; +static const MemoryRegion s_32xRegion = {0x06000000, _32X_RAM_SIZE, (unsigned char*)_32X_Ram, false}; +*/ +// list of contiguous uneliminated memory regions +typedef std::list MemoryList; +static MemoryList s_activeMemoryRegions; + +// for undo support (could be better, but this way was really easy) +static MemoryList s_activeMemoryRegionsBackup; +static int s_undoType = 0; // 0 means can't undo, 1 means can undo, 2 means can redo + +void RamSearchSaveUndoStateIfNotTooBig(HWND hDlg); +static const int tooManyRegionsForUndo = 10000; + +void ResetMemoryRegions() +{ +// Clear_Sound_Buffer(); + + s_activeMemoryRegions.clear(); + + s_activeMemoryRegions.push_back(s_prgRegion); + + /*if(Genesis_Started || _32X_Started || SegaCD_Started) + { + s_activeMemoryRegions.push_back(s_68kRegion); + s_activeMemoryRegions.push_back(s_z80Region); + if(SegaCD_Started) + { + s_activeMemoryRegions.push_back(s_prgRegion); + s_activeMemoryRegions.push_back((Ram_Word_State & 0x2) ? s_word1MRegion : s_word2MRegion); + } + if(_32X_Started) + { + s_activeMemoryRegions.push_back(s_32xRegion); + } + }*/ + + int nextVirtualIndex = 0; + for(MemoryList::iterator iter = s_activeMemoryRegions.begin(); iter != s_activeMemoryRegions.end(); ++iter) + { + MemoryRegion& region = *iter; + region.virtualIndex = nextVirtualIndex; + assert(((intptr_t)region.softwareAddress & 1) == 0 && "somebody need to reimplement ReadValueAtSoftwareAddress()"); + nextVirtualIndex = region.virtualIndex + region.size; + } +// assert(nextVirtualIndex <= MAX_RAM_SIZE); TODO +} + +// eliminates a range of hardware addresses from the search results +// returns 2 if it changed the region and moved the iterator to another region +// returns 1 if it changed the region but didn't move the iterator +// returns 0 if it had no effect +// warning: don't call anything that takes an itemIndex in a loop that calls DeactivateRegion... +// doing so would be tremendously slow because DeactivateRegion invalidates the index cache +int DeactivateRegion(MemoryRegion& region, MemoryList::iterator& iter, unsigned int hardwareAddress, unsigned int size) +{ + if(hardwareAddress + size <= region.hardwareAddress || hardwareAddress >= region.hardwareAddress + region.size) + { + // region is unaffected + return 0; + } + else if(hardwareAddress > region.hardwareAddress && hardwareAddress + size >= region.hardwareAddress + region.size) + { + // erase end of region + region.size = hardwareAddress - region.hardwareAddress; + return 1; + } + else if(hardwareAddress <= region.hardwareAddress && hardwareAddress + size < region.hardwareAddress + region.size) + { + // erase start of region + int eraseSize = (hardwareAddress + size) - region.hardwareAddress; + region.hardwareAddress += eraseSize; + region.size -= eraseSize; + region.softwareAddress += eraseSize; + region.virtualIndex += eraseSize; + return 1; + } + else if(hardwareAddress <= region.hardwareAddress && hardwareAddress + size >= region.hardwareAddress + region.size) + { + // erase entire region + iter = s_activeMemoryRegions.erase(iter); + s_itemIndicesInvalid = TRUE; + return 2; + } + else //if(hardwareAddress > region.hardwareAddress && hardwareAddress + size < region.hardwareAddress + region.size) + { + // split region + int eraseSize = (hardwareAddress + size) - region.hardwareAddress; + MemoryRegion region2 = {region.hardwareAddress + eraseSize, region.size - eraseSize, region.softwareAddress + eraseSize, region.byteSwapped, region.virtualIndex + eraseSize}; + region.size = hardwareAddress - region.hardwareAddress; + iter = s_activeMemoryRegions.insert(++iter, region2); + s_itemIndicesInvalid = TRUE; + return 2; + } +} + +/* +// eliminates a range of hardware addresses from the search results +// this is a simpler but usually slower interface for the above function +void DeactivateRegion(unsigned int hardwareAddress, unsigned int size) +{ + for(MemoryList::iterator iter = s_activeMemoryRegions.begin(); iter != s_activeMemoryRegions.end(); ) + { + MemoryRegion& region = *iter; + if(2 != DeactivateRegion(region, iter, hardwareAddress, size)) + ++iter; + } +} +*/ + +// warning: can be slow +void CalculateItemIndices(int itemSize) +{ + unsigned int itemIndex = 0; + for(MemoryList::iterator iter = s_activeMemoryRegions.begin(); iter != s_activeMemoryRegions.end(); ++iter) + { + MemoryRegion& region = *iter; + region.itemIndex = itemIndex; + int startSkipSize = ((unsigned int)(itemSize - region.hardwareAddress)) % itemSize; + unsigned int start = startSkipSize; + unsigned int end = region.size; + for(unsigned int i = start; i < end; i += itemSize) + s_itemIndexToRegionPointer[itemIndex++] = ®ion; + } + s_maxItemIndex = itemIndex; + s_itemIndicesInvalid = FALSE; +} + +template +void UpdateRegionT(const MemoryRegion& region, const MemoryRegion* nextRegionPtr) +{ + if(s_prevValuesNeedUpdate) + memcpy(s_prevValues + region.virtualIndex, s_curValues + region.virtualIndex, region.size + sizeof(compareType) - sizeof(stepType)); + + unsigned int startSkipSize = ((unsigned int)(sizeof(stepType) - region.hardwareAddress)) % sizeof(stepType); + + unsigned char* sourceAddr = region.softwareAddress - region.virtualIndex; + unsigned int indexStart = region.virtualIndex + startSkipSize; + unsigned int indexEnd = region.virtualIndex + region.size; + + if(sizeof(compareType) == 1) + { + for(unsigned int i = indexStart; i < indexEnd; i++) + { + if(s_curValues[i] != sourceAddr[i^swapXOR]) // if value changed + { + s_curValues[i] = sourceAddr[i^swapXOR]; // update value + //if(s_numChanges[i] != 0xFFFF) + s_numChanges[i]++; // increase change count + } + } + } + else // it's more complicated for non-byte sizes because: + { // - more than one byte can affect a given change count entry + // - when more than one of those bytes changes simultaneously the entry's change count should only increase by 1 + // - a few of those bytes can be outside the region + + unsigned int endSkipSize = ((unsigned int)(startSkipSize - region.size)) % sizeof(stepType); + unsigned int lastIndexToRead = indexEnd + endSkipSize + sizeof(compareType) - sizeof(stepType); + unsigned int lastIndexToCopy = lastIndexToRead; + if(nextRegionPtr) + { + const MemoryRegion& nextRegion = *nextRegionPtr; + int nextStartSkipSize = ((unsigned int)(sizeof(stepType) - nextRegion.hardwareAddress)) % sizeof(stepType); + unsigned int nextIndexStart = nextRegion.virtualIndex + nextStartSkipSize; + if(lastIndexToCopy > nextIndexStart) + lastIndexToCopy = nextIndexStart; + } + + unsigned int nextValidChange [sizeof(compareType)]; + for(unsigned int i = 0; i < sizeof(compareType); i++) + nextValidChange[i] = indexStart + i; + + for(unsigned int i = indexStart, j = 0; i < lastIndexToRead; i++, j++) + { + if(s_curValues[i] != sourceAddr[i^swapXOR]) // if value of this byte changed + { + if(i < lastIndexToCopy) + s_curValues[i] = sourceAddr[i^swapXOR]; // update value + for(int k = 0; k < sizeof(compareType); k++) // loop through the previous entries that contain this byte + { + if(i >= indexEnd+k) + continue; + int m = (j-k+sizeof(compareType)) & (sizeof(compareType)-1); + if(nextValidChange[m]+sizeof(compareType) <= i+sizeof(compareType)) // if we didn't already increase the change count for this entry + { + //if(s_numChanges[i-k] != 0xFFFF) + s_numChanges[i-k]++; // increase the change count for this entry + nextValidChange[m] = i+sizeof(compareType); // and remember not to increase it again + } + } + } + } + } +} + +template +void UpdateRegionsT() +{ + for(MemoryList::iterator iter = s_activeMemoryRegions.begin(); iter != s_activeMemoryRegions.end();) + { + const MemoryRegion& region = *iter; + ++iter; + const MemoryRegion* nextRegion = (iter == s_activeMemoryRegions.end()) ? NULL : &*iter; + + if(region.byteSwapped) + UpdateRegionT(region, nextRegion); + else + UpdateRegionT(region, nextRegion); + } + + s_prevValuesNeedUpdate = false; +} + +template +int CountRegionItemsT() +{ + if(sizeof(stepType) == 1) + { + if(s_activeMemoryRegions.empty()) + return 0; + + if(s_itemIndicesInvalid) + CalculateItemIndices(sizeof(stepType)); + + MemoryRegion& lastRegion = s_activeMemoryRegions.back(); + return lastRegion.itemIndex + lastRegion.size; + } + else // the branch above is faster but won't work if the step size isn't 1 + { + int total = 0; + for(MemoryList::iterator iter = s_activeMemoryRegions.begin(); iter != s_activeMemoryRegions.end(); ++iter) + { + MemoryRegion& region = *iter; + int startSkipSize = ((unsigned int)(sizeof(stepType) - region.hardwareAddress)) % sizeof(stepType); + total += (region.size - startSkipSize + (sizeof(stepType)-1)) / sizeof(stepType); + } + return total; + } +} + +// returns information about the item in the form of a "fake" region +// that has the item in it and nothing else +template +void ItemIndexToVirtualRegion(unsigned int itemIndex, MemoryRegion& virtualRegion) +{ + if(s_itemIndicesInvalid) + CalculateItemIndices(sizeof(stepType)); + + if(itemIndex >= s_maxItemIndex) + { + memset(&virtualRegion, 0, sizeof(MemoryRegion)); + return; + } + + const MemoryRegion* regionPtr = s_itemIndexToRegionPointer[itemIndex]; + const MemoryRegion& region = *regionPtr; + + int bytesWithinRegion = (itemIndex - region.itemIndex) * sizeof(stepType); + int startSkipSize = ((unsigned int)(sizeof(stepType) - region.hardwareAddress)) % sizeof(stepType); + bytesWithinRegion += startSkipSize; + + virtualRegion.size = sizeof(compareType); + virtualRegion.hardwareAddress = region.hardwareAddress + bytesWithinRegion; + virtualRegion.softwareAddress = region.softwareAddress + bytesWithinRegion; + virtualRegion.virtualIndex = region.virtualIndex + bytesWithinRegion; + virtualRegion.byteSwapped = region.byteSwapped; + virtualRegion.itemIndex = itemIndex; + return; +} + +template +unsigned int ItemIndexToVirtualIndex(unsigned int itemIndex) +{ + MemoryRegion virtualRegion; + ItemIndexToVirtualRegion(itemIndex, virtualRegion); + return virtualRegion.virtualIndex; +} + +template +T ReadBigEndian(const unsigned char* data) +{ + T rv = 0; + for(int i = 0; i < sizeof(T); i++) + { + rv <<= 8; + rv |= *data++; + } + return rv; +} +template<> signed char ReadBigEndian(const unsigned char* data) { return *data; } +template<> unsigned char ReadBigEndian(const unsigned char* data) { return *data; } + + +template +compareType GetPrevValueFromVirtualIndex(unsigned int virtualIndex) +{ + return ReadBigEndian(s_prevValues + virtualIndex); + //return *(compareType*)(s_prevValues+virtualIndex); +} +template +compareType GetCurValueFromVirtualIndex(unsigned int virtualIndex) +{ + return ReadBigEndian(s_curValues + virtualIndex); +// return *(compareType*)(s_curValues+virtualIndex); +} +template +unsigned short GetNumChangesFromVirtualIndex(unsigned int virtualIndex) +{ + unsigned short num = s_numChanges[virtualIndex]; + //for(unsigned int i = 1; i < sizeof(stepType); i++) + // if(num < s_numChanges[virtualIndex+i]) + // num = s_numChanges[virtualIndex+i]; + return num; +} + +template +compareType GetPrevValueFromItemIndex(unsigned int itemIndex) +{ + int virtualIndex = ItemIndexToVirtualIndex(itemIndex); + return GetPrevValueFromVirtualIndex(virtualIndex); +} +template +compareType GetCurValueFromItemIndex(unsigned int itemIndex) +{ + int virtualIndex = ItemIndexToVirtualIndex(itemIndex); + return GetCurValueFromVirtualIndex(virtualIndex); +} +template +unsigned short GetNumChangesFromItemIndex(unsigned int itemIndex) +{ + int virtualIndex = ItemIndexToVirtualIndex(itemIndex); + return GetNumChangesFromVirtualIndex(virtualIndex); +} +template +unsigned int GetHardwareAddressFromItemIndex(unsigned int itemIndex) +{ + MemoryRegion virtualRegion; + ItemIndexToVirtualRegion(itemIndex, virtualRegion); + return virtualRegion.hardwareAddress; +} + +// this one might be unreliable, haven't used it much +template +unsigned int HardwareAddressToItemIndex(unsigned int hardwareAddress) +{ + if(s_itemIndicesInvalid) + CalculateItemIndices(sizeof(stepType)); + + for(MemoryList::iterator iter = s_activeMemoryRegions.begin(); iter != s_activeMemoryRegions.end(); ++iter) + { + MemoryRegion& region = *iter; + if(hardwareAddress >= region.hardwareAddress && hardwareAddress < region.hardwareAddress + region.size) + { + int indexWithinRegion = (hardwareAddress - region.hardwareAddress) / sizeof(stepType); + return region.itemIndex + indexWithinRegion; + } + } + + return -1; +} + + + + +// workaround for a parser error in MSVC that sometimes deletes a comma preceeding a macro +// this macro takes a type and a signed/unsigned modifier, and returns the same type with that modifier whether or not the compiler decides to delete the comma between them +template +struct DummyType { typedef T t; }; +#define COMMAHACK(sign, type) DummyType::t +#ifdef _MSC_VER +#pragma warning(disable : 4114) // disable "same modifier used twice" warning that otherwise would get issued when the compiler bug happens +#endif + +// it's ugly but I can't think of a better way to call these functions that isn't also slower, since +// I need the current values of these arguments to determine which primitive types are used within the function +#define CALL_WITH_T_SIZE_TYPES(functionName, sizeTypeID, isSigned, requireAligned, ...) \ + (sizeTypeID == 'b' \ + ? (isSigned \ + ? functionName(__VA_ARGS__) \ + : functionName(__VA_ARGS__)) \ + : sizeTypeID == 'w' \ + ? (isSigned \ + ? (requireAligned \ + ? functionName(__VA_ARGS__) \ + : functionName(__VA_ARGS__)) \ + : (requireAligned \ + ? functionName(__VA_ARGS__) \ + : functionName(__VA_ARGS__))) \ + : sizeTypeID == 'd' \ + ? (isSigned \ + ? (requireAligned \ + ? functionName(__VA_ARGS__) \ + : functionName(__VA_ARGS__)) \ + : (requireAligned \ + ? functionName(__VA_ARGS__) \ + : functionName(__VA_ARGS__))) \ + : functionName(__VA_ARGS__)) + +// version that takes a forced comparison type +#define CALL_WITH_T_STEP(functionName, sizeTypeID, sign,type, requireAligned, ...) \ + (sizeTypeID == 'b' \ + ? functionName(__VA_ARGS__) \ + : sizeTypeID == 'w' \ + ? (requireAligned \ + ? functionName(__VA_ARGS__) \ + : functionName(__VA_ARGS__)) \ + : sizeTypeID == 'd' \ + ? (requireAligned \ + ? functionName(__VA_ARGS__) \ + : functionName(__VA_ARGS__)) \ + : functionName(__VA_ARGS__)) + + +// basic comparison functions: +template inline bool LessCmp (T x, T y, T i) { return x < y; } +template inline bool MoreCmp (T x, T y, T i) { return x > y; } +template inline bool LessEqualCmp (T x, T y, T i) { return x <= y; } +template inline bool MoreEqualCmp (T x, T y, T i) { return x >= y; } +template inline bool EqualCmp (T x, T y, T i) { return x == y; } +template inline bool UnequalCmp (T x, T y, T i) { return x != y; } +template inline bool DiffByCmp (T x, T y, T p) { return x - y == p || y - x == p; } +template inline bool ModIsCmp (T x, T y, T p) { return p && x % p == y; } + +// compare-to type functions: +template +void SearchRelative (bool(*cmpFun)(T,T,T), T ignored, T param) +{ + for(MemoryList::iterator iter = s_activeMemoryRegions.begin(); iter != s_activeMemoryRegions.end(); ) + { + MemoryRegion& region = *iter; + int startSkipSize = ((unsigned int)(sizeof(stepType) - region.hardwareAddress)) % sizeof(stepType); + unsigned int start = region.virtualIndex + startSkipSize; + unsigned int end = region.virtualIndex + region.size; + for(unsigned int i = start, hwaddr = region.hardwareAddress; i < end; i += sizeof(stepType), hwaddr += sizeof(stepType)) + if(!cmpFun(GetCurValueFromVirtualIndex(i), GetPrevValueFromVirtualIndex(i), param)) + if(2 == DeactivateRegion(region, iter, hwaddr, sizeof(stepType))) + goto outerContinue; + ++iter; +outerContinue: + continue; + } +} +template +void SearchSpecific (bool(*cmpFun)(T,T,T), T value, T param) +{ + for(MemoryList::iterator iter = s_activeMemoryRegions.begin(); iter != s_activeMemoryRegions.end(); ) + { + MemoryRegion& region = *iter; + int startSkipSize = ((unsigned int)(sizeof(stepType) - region.hardwareAddress)) % sizeof(stepType); + unsigned int start = region.virtualIndex + startSkipSize; + unsigned int end = region.virtualIndex + region.size; + for(unsigned int i = start, hwaddr = region.hardwareAddress; i < end; i += sizeof(stepType), hwaddr += sizeof(stepType)) + if(!cmpFun(GetCurValueFromVirtualIndex(i), value, param)) + if(2 == DeactivateRegion(region, iter, hwaddr, sizeof(stepType))) + goto outerContinue; + ++iter; +outerContinue: + continue; + } +} +template +void SearchAddress (bool(*cmpFun)(T,T,T), T address, T param) +{ + for(MemoryList::iterator iter = s_activeMemoryRegions.begin(); iter != s_activeMemoryRegions.end(); ) + { + MemoryRegion& region = *iter; + int startSkipSize = ((unsigned int)(sizeof(stepType) - region.hardwareAddress)) % sizeof(stepType); + unsigned int start = region.virtualIndex + startSkipSize; + unsigned int end = region.virtualIndex + region.size; + for(unsigned int i = start, hwaddr = region.hardwareAddress; i < end; i += sizeof(stepType), hwaddr += sizeof(stepType)) + if(!cmpFun(hwaddr, address, param)) + if(2 == DeactivateRegion(region, iter, hwaddr, sizeof(stepType))) + goto outerContinue; + ++iter; +outerContinue: + continue; + } +} +template +void SearchChanges (bool(*cmpFun)(T,T,T), T changes, T param) +{ + for(MemoryList::iterator iter = s_activeMemoryRegions.begin(); iter != s_activeMemoryRegions.end(); ) + { + MemoryRegion& region = *iter; + int startSkipSize = ((unsigned int)(sizeof(stepType) - region.hardwareAddress)) % sizeof(stepType); + unsigned int start = region.virtualIndex + startSkipSize; + unsigned int end = region.virtualIndex + region.size; + for(unsigned int i = start, hwaddr = region.hardwareAddress; i < end; i += sizeof(stepType), hwaddr += sizeof(stepType)) + if(!cmpFun(GetNumChangesFromVirtualIndex(i), changes, param)) + if(2 == DeactivateRegion(region, iter, hwaddr, sizeof(stepType))) + goto outerContinue; + ++iter; +outerContinue: + continue; + } +} + +char rs_c='s'; +char rs_o='='; +char rs_t='s'; +int rs_param=0, rs_val=0, rs_val_valid=0; +char rs_type_size = 'b', rs_last_type_size = rs_type_size; +bool noMisalign = true, rs_last_no_misalign = noMisalign; +bool littleEndian = false; +int last_rs_possible = -1; +int last_rs_regions = -1; + +void prune(char c,char o,char t,int v,int p) +{ + // repetition-reducing macros + #define DO_SEARCH(sf) \ + switch (o) \ + { \ + case '<': DO_SEARCH_2(LessCmp,sf); break; \ + case '>': DO_SEARCH_2(MoreCmp,sf); break; \ + case '=': DO_SEARCH_2(EqualCmp,sf); break; \ + case '!': DO_SEARCH_2(UnequalCmp,sf); break; \ + case 'l': DO_SEARCH_2(LessEqualCmp,sf); break; \ + case 'm': DO_SEARCH_2(MoreEqualCmp,sf); break; \ + case 'd': DO_SEARCH_2(DiffByCmp,sf); break; \ + case '%': DO_SEARCH_2(ModIsCmp,sf); break; \ + default: assert(!"Invalid operator for this search type."); break; \ + } + + // perform the search, eliminating nonmatching values + switch (c) + { + #define DO_SEARCH_2(CmpFun,sf) CALL_WITH_T_SIZE_TYPES(sf, rs_type_size, t, noMisalign, CmpFun,v,p) + case 'r': DO_SEARCH(SearchRelative); break; + case 's': DO_SEARCH(SearchSpecific); break; + + #undef DO_SEARCH_2 + #define DO_SEARCH_2(CmpFun,sf) CALL_WITH_T_STEP(sf, rs_type_size, unsigned,int, noMisalign, CmpFun,v,p); + case 'a': DO_SEARCH(SearchAddress); break; + + #undef DO_SEARCH_2 + #define DO_SEARCH_2(CmpFun,sf) CALL_WITH_T_STEP(sf, rs_type_size, unsigned,short, noMisalign, CmpFun,v,p); + case 'n': DO_SEARCH(SearchChanges); break; + + default: assert(!"Invalid search comparison type."); break; + } + + s_prevValuesNeedUpdate = true; + + int prevNumItems = last_rs_possible; + + CompactAddrs(); + + if(prevNumItems == last_rs_possible) + { + SetRamSearchUndoType(RamSearchHWnd, 0); // nothing to undo + } +} + + + + +template +bool CompareRelativeAtItem (bool(*cmpFun)(T,T,T), int itemIndex, T ignored, T param) +{ + return cmpFun(GetCurValueFromItemIndex(itemIndex), GetPrevValueFromItemIndex(itemIndex), param); +} +template +bool CompareSpecificAtItem (bool(*cmpFun)(T,T,T), int itemIndex, T value, T param) +{ + return cmpFun(GetCurValueFromItemIndex(itemIndex), value, param); +} +template +bool CompareAddressAtItem (bool(*cmpFun)(T,T,T), int itemIndex, T address, T param) +{ + return cmpFun(GetHardwareAddressFromItemIndex(itemIndex), address, param); +} +template +bool CompareChangesAtItem (bool(*cmpFun)(T,T,T), int itemIndex, T changes, T param) +{ + return cmpFun(GetNumChangesFromItemIndex(itemIndex), changes, param); +} + +int ReadControlInt(int controlID, bool forceHex, BOOL& success) +{ + int rv = 0; + BOOL ok = false; + + if(!forceHex) + { + rv = GetDlgItemInt(RamSearchHWnd,controlID,&ok,(rs_t == 's')); + } + + if(!ok) + { + if(GetDlgItemText(RamSearchHWnd,controlID,Str_Tmp,16)) + { + for(int i = 0; Str_Tmp[i]; i++) {if(toupper(Str_Tmp[i]) == 'O') Str_Tmp[i] = '0';} + const char* strPtr = Str_Tmp; + bool negate = false; + while(strPtr[0] == '-') + strPtr++, negate = !negate; + if(strPtr[0] == '+') + strPtr++; + if(strPtr[0] == '0' && tolower(strPtr[1]) == 'x') + strPtr += 2, forceHex = true; + if(strPtr[0] == '$') + strPtr++, forceHex = true; + if(!forceHex) + { + const char* strSearchPtr = strPtr; + while(*strSearchPtr) + { + int c = tolower(*strSearchPtr++); + if(c >= 'a' && c <= 'f') + forceHex = true; + } + } + const char* formatString = forceHex ? "%X" : ((rs_t=='s') ? "%d" : "%u"); + if(sscanf(strPtr, formatString, &rv) > 0) + ok = true; + if(negate) + rv = -rv; + } + } + + success = ok; + return rv; +} + + +bool Set_RS_Val() +{ + BOOL success; + + // update rs_val + switch(rs_c) + { + case 'r': + default: + rs_val = 0; + break; + case 's': + rs_val = ReadControlInt(IDC_EDIT_COMPAREVALUE, rs_t == 'h', success); + if(!success) + return false; + if((rs_type_size == 'b' && rs_t == 's' && (rs_val < -128 || rs_val > 127)) || + (rs_type_size == 'b' && rs_t != 's' && (rs_val < 0 || rs_val > 255)) || + (rs_type_size == 'w' && rs_t == 's' && (rs_val < -32768 || rs_val > 32767)) || + (rs_type_size == 'w' && rs_t != 's' && (rs_val < 0 || rs_val > 65535))) + return false; + break; + case 'a': + rs_val = ReadControlInt(IDC_EDIT_COMPAREADDRESS, true, success); + if(!success || rs_val < 0 || rs_val > 0x06040000) + return false; + break; + case 'n': { + rs_val = ReadControlInt(IDC_EDIT_COMPARECHANGES, false, success); + if(!success || rs_val < 0 || rs_val > 0xFFFF) + return false; + } break; + } + + // also update rs_param + switch(rs_o) + { + default: + rs_param = 0; + break; + case 'd': + rs_param = ReadControlInt(IDC_EDIT_DIFFBY, false, success); + if(!success) + return false; + if(rs_param < 0) + rs_param = -rs_param; + break; + case '%': + rs_param = ReadControlInt(IDC_EDIT_MODBY, false, success); + if(!success || rs_param == 0) + return false; + break; + } + + // validate that rs_param fits in the comparison data type + { + int appliedSize = rs_type_size; + int appliedSign = rs_t; + if(rs_c == 'n') + appliedSize = 'w', appliedSign = 'u'; + if(rs_c == 'a') + appliedSize = 'd', appliedSign = 'u'; + if((appliedSize == 'b' && appliedSize == 's' && (rs_param < -128 || rs_param > 127)) || + (appliedSize == 'b' && appliedSize != 's' && (rs_param < 0 || rs_param > 255)) || + (appliedSize == 'w' && appliedSize == 's' && (rs_param < -32768 || rs_param > 32767)) || + (appliedSize == 'w' && appliedSize != 's' && (rs_param < 0 || rs_param > 65535))) + return false; + } + + return true; +} + +bool IsSatisfied(int itemIndex) +{ + if(!rs_val_valid) + return true; + int o = rs_o; + switch (rs_c) + { + #undef DO_SEARCH_2 + #define DO_SEARCH_2(CmpFun,sf) return CALL_WITH_T_SIZE_TYPES(sf, rs_type_size,(rs_t=='s'),noMisalign, CmpFun,itemIndex,rs_val,rs_param); + case 'r': DO_SEARCH(CompareRelativeAtItem); break; + case 's': DO_SEARCH(CompareSpecificAtItem); break; + + #undef DO_SEARCH_2 + #define DO_SEARCH_2(CmpFun,sf) return CALL_WITH_T_STEP(sf, rs_type_size, unsigned,int, noMisalign, CmpFun,itemIndex,rs_val,rs_param); + case 'a': DO_SEARCH(CompareAddressAtItem); break; + + #undef DO_SEARCH_2 + #define DO_SEARCH_2(CmpFun,sf) return CALL_WITH_T_STEP(sf, rs_type_size, unsigned,short, noMisalign, CmpFun,itemIndex,rs_val,rs_param); + case 'n': DO_SEARCH(CompareChangesAtItem); break; + } + return false; +} + + + +// this is mainly for the RAM watch window +unsigned int ReadValueAtSoftwareAddress(const unsigned char* address, unsigned int size, int byteSwapped = false) +{ + unsigned int value = 0; + if(!byteSwapped) + { + // convert to current endianness + for(unsigned int i = 0; i < size; i++) + { + value <<= 8; + value |= *address++; + } + } + else + { + // byte-swap and convert to current endianness at the same time + for(unsigned int i = 0; i < size; i++) + { + value <<= 8; + value |= *((unsigned char*)((intptr_t)address++^1)); + } + } + return value; +} +void WriteValueAtSoftwareAddress(unsigned char* address, unsigned int value, unsigned int size, int byteSwapped = false) +{ + if(!byteSwapped) + { + // write as big endian + for(int i = size-1; i >= 0; i--) + { + address[i] = value & 0xFF; + value >>= 8; + } + } + else + { + // byte-swap and write as big endian at the same time + for(int i = size-1; i >= 0; i--) + { + *((unsigned char*)((intptr_t)(address+i)^1)) = value & 0xFF; + value >>= 8; + } + } +} +inline bool IsInRange(unsigned int x, unsigned int min, unsigned int size) +{ + x -= min; + return x < size; +} +unsigned int ReadValueAtHardwareAddress(unsigned int address, unsigned int size) +{ + if((address & ~0xFFFFFF) == ~0xFFFFFF) + address &= 0xFFFFFF; + + + char buf[4]; + MMU_DumpMemBlock(0, address, 4, (u8*)buf); + + u32 val_u32 = *(u32*)buf; + u16 val_u16 = *(u16*)buf; + u8 val_u8 = *(u8*)buf; + + switch (size) + { + case 1: return val_u8; + case 2: return val_u16; + case 4: return val_u32; + } +// if(IsInRange(address, 0xFF0000, _68K_RAM_SIZE)) +// return ReadValueAtSoftwareAddress(Ram_68k + address - 0xFF0000, size, true); +/* if(IsInRange(address, 0xFF0000, _68K_RAM_SIZE)) TODO + return ReadValueAtSoftwareAddress(Ram_68k + address - 0xFF0000, size, true); + if(IsInRange(address, 0xA00000, Z80_RAM_SIZE)) + return ReadValueAtSoftwareAddress(Ram_Z80 + address - 0xA00000, size, true); + if(SegaCD_Started && IsInRange(address, 0x020000, SEGACD_RAM_PRG_SIZE)) + return ReadValueAtSoftwareAddress(Ram_Prg + address - 0x020000, size, true); + if(SegaCD_Started && IsInRange(address, 0x200000, SEGACD_1M_RAM_SIZE)) + return ReadValueAtSoftwareAddress(((Ram_Word_State & 0x2) ? Ram_Word_1M : Ram_Word_2M) + address - 0x200000, size, true); + if(IsInRange(address, 0x0, Rom_Size)) + return ReadValueAtSoftwareAddress(Rom_Data + address, size, true); + if(_32X_Started && IsInRange(address, 0x06000000, _32X_RAM_SIZE)) + return ReadValueAtSoftwareAddress(_32X_Ram + address - 0x06000000, size, false);*/ + return 0; +} +bool WriteValueAtHardwareRAMAddress(unsigned int address, unsigned int value, unsigned int size, bool hookless) +{ + if((address & ~0xFFFFFF) == ~0xFFFFFF) + address &= 0xFFFFFF; +/* if(IsInRange(address, 0xFF0000, _68K_RAM_SIZE)) TODO + WriteValueAtSoftwareAddress(Ram_68k + address - 0xFF0000, value, size, true); + else if(IsInRange(address, 0xA00000, Z80_RAM_SIZE)) + WriteValueAtSoftwareAddress(Ram_Z80 + address - 0xA00000, value, size, true); + else if(SegaCD_Started && IsInRange(address, 0x020000, SEGACD_RAM_PRG_SIZE)) + WriteValueAtSoftwareAddress(Ram_Prg + address - 0x020000, value, size, true); + else if(SegaCD_Started && IsInRange(address, 0x200000, SEGACD_1M_RAM_SIZE)) + WriteValueAtSoftwareAddress(((Ram_Word_State & 0x2) ? Ram_Word_1M : Ram_Word_2M) + address - 0x200000, value, size, true); + else if(_32X_Started && IsInRange(address, 0x06000000, _32X_RAM_SIZE)) + WriteValueAtSoftwareAddress(_32X_Ram + address - 0x06000000, value, size, false);*/ +// else return false; +// if(!hookless) // a script that calls e.g. memory.writebyte() should trigger write hooks +// CallRegisteredLuaMemHook(address, size, value, LUAMEMHOOK_WRITE); + return true; +} +bool WriteValueAtHardwareROMAddress(unsigned int address, unsigned int value, unsigned int size) +{ + if(IsInRange(address, 0x0, Rom_Size)) + WriteValueAtSoftwareAddress(Rom_Data + address, value, size, true); + else return false; + return true; +} +bool WriteValueAtHardwareAddress(unsigned int address, unsigned int value, unsigned int size, bool hookless=false) +{ + return WriteValueAtHardwareRAMAddress(address, value, size, hookless) || + WriteValueAtHardwareROMAddress(address, value, size); +} +bool IsHardwareRAMAddressValid(unsigned int address) +{ + if((address & ~0xFFFFFF) == ~0xFFFFFF) + address &= 0xFFFFFF; +// if(IsInRange(address, 0xFF0000, _68K_RAM_SIZE)) +// return true; +// if(IsInRange(address, 0xA00000, Z80_RAM_SIZE)) +// return true; + + return true; //TODO +/* if(SegaCD_Started && IsInRange(address, 0x020000, SEGACD_RAM_PRG_SIZE)) TODO + return true; + if(SegaCD_Started && IsInRange(address, 0x200000, SEGACD_1M_RAM_SIZE)) + return true; + if(_32X_Started && IsInRange(address, 0x06000000, _32X_RAM_SIZE)) + return true;*/ + return false; +} +bool IsHardwareROMAddressValid(unsigned int address) +{ + return IsInRange(address, 0x0, Rom_Size); +} +bool IsHardwareAddressValid(unsigned int address) +{ + return IsHardwareROMAddressValid(address) || IsHardwareRAMAddressValid(address); +} + + + +int ResultCount=0; +bool AutoSearch=false; +bool AutoSearchAutoRetry=false; +LRESULT CALLBACK PromptWatchNameProc(HWND, UINT, WPARAM, LPARAM); +void UpdatePossibilities(int rs_possible, int regions); + + +void CompactAddrs() +{ + int size = (rs_type_size=='b' || !noMisalign) ? 1 : 2; + int prevResultCount = ResultCount; + + CalculateItemIndices(size); + + ResultCount = CALL_WITH_T_SIZE_TYPES(CountRegionItemsT, rs_type_size,rs_t=='s',noMisalign); + UpdatePossibilities(ResultCount, (int)s_activeMemoryRegions.size()); + + if(ResultCount != prevResultCount) + ListView_SetItemCount(GetDlgItem(RamSearchHWnd,IDC_RAMLIST),ResultCount); +} + +void soft_reset_address_info () +{ + ResetMemoryRegions(); + memset(s_numChanges, 0, sizeof(s_numChanges)); + CompactAddrs(); +} +void reset_address_info () +{ + SetRamSearchUndoType(RamSearchHWnd, 0); + s_activeMemoryRegionsBackup.clear(); // not necessary, but we'll take the time hit here instead of at the next thing that sets up an undo + memcpy(s_prevValues, s_curValues, sizeof(s_prevValues)); + s_prevValuesNeedUpdate = false; + ResetMemoryRegions(); + if(!RamSearchHWnd) + { + s_activeMemoryRegions.clear(); + ResultCount = 0; + } + else + { + // force s_prevValues to be valid + signal_new_frame(); + s_prevValuesNeedUpdate = true; + signal_new_frame(); + } + memset(s_numChanges, 0, sizeof(s_numChanges)); + CompactAddrs(); +} + +void signal_new_frame () +{ + CALL_WITH_T_SIZE_TYPES(UpdateRegionsT, rs_type_size,rs_t=='s',noMisalign); +} + + + + + + + +void RefreshRamListSelectedCountControlStatus(HWND hDlg) +{ + static int prevSelCount=-1; + int selCount = ListView_GetSelectedCount(GetDlgItem(hDlg,IDC_RAMLIST)); + if(selCount != prevSelCount) + { + if(selCount < 2 || prevSelCount < 2) + { + EnableWindow(GetDlgItem(hDlg, IDC_C_WATCH), (selCount == 1 && WatchCount < MAX_WATCH_COUNT) ? TRUE : FALSE); + EnableWindow(GetDlgItem(hDlg, IDC_C_ADDCHEAT), (selCount == 1) ? /*TRUE*/FALSE : FALSE); + EnableWindow(GetDlgItem(hDlg, IDC_C_ELIMINATE), (selCount >= 1) ? TRUE : FALSE); + } + prevSelCount = selCount; + } +} + + + + +struct AddrRange +{ + unsigned int addr; + unsigned int size; + unsigned int End() const { return addr + size; } + AddrRange(unsigned int a, unsigned int s) : addr(a),size(s){} +}; + +void signal_new_size () +{ + HWND lv = GetDlgItem(RamSearchHWnd,IDC_RAMLIST); + + int oldSize = (rs_last_type_size=='b' || !rs_last_no_misalign) ? 1 : 2; + int newSize = (rs_type_size=='b' || !noMisalign) ? 1 : 2; + bool numberOfItemsChanged = (oldSize != newSize); + + unsigned int itemsPerPage = ListView_GetCountPerPage(lv); + unsigned int oldTopIndex = ListView_GetTopIndex(lv); + unsigned int oldSelectionIndex = ListView_GetSelectionMark(lv); + unsigned int oldTopAddr = CALL_WITH_T_SIZE_TYPES(GetHardwareAddressFromItemIndex, rs_last_type_size,rs_t=='s',rs_last_no_misalign, oldTopIndex); + unsigned int oldSelectionAddr = CALL_WITH_T_SIZE_TYPES(GetHardwareAddressFromItemIndex, rs_last_type_size,rs_t=='s',rs_last_no_misalign, oldSelectionIndex); + + std::vector selHardwareAddrs; + if(numberOfItemsChanged) + { + // store selection ranges + // unfortunately this can take a while if the user has a huge range of items selected +// Clear_Sound_Buffer(); + int selCount = ListView_GetSelectedCount(lv); + int size = (rs_last_type_size=='b' || !rs_last_no_misalign) ? 1 : 2; + int watchIndex = -1; + for(int i = 0; i < selCount; ++i) + { + watchIndex = ListView_GetNextItem(lv, watchIndex, LVNI_SELECTED); + int addr = CALL_WITH_T_SIZE_TYPES(GetHardwareAddressFromItemIndex, rs_last_type_size,rs_t=='s',rs_last_no_misalign, watchIndex); + if(!selHardwareAddrs.empty() && addr == selHardwareAddrs.back().End()) + selHardwareAddrs.back().size += size; + else + selHardwareAddrs.push_back(AddrRange(addr,size)); + } + } + + CompactAddrs(); + + rs_last_type_size = rs_type_size; + rs_last_no_misalign = noMisalign; + + if(numberOfItemsChanged) + { + // restore selection ranges + unsigned int newTopIndex = CALL_WITH_T_SIZE_TYPES(HardwareAddressToItemIndex, rs_type_size,rs_t=='s',noMisalign, oldTopAddr); + unsigned int newBottomIndex = newTopIndex + itemsPerPage - 1; + SendMessage(lv, WM_SETREDRAW, FALSE, 0); + ListView_SetItemState(lv, -1, 0, LVIS_SELECTED|LVIS_FOCUSED); // deselect all + for(unsigned int i = 0; i < selHardwareAddrs.size(); i++) + { + // calculate index ranges of this selection + const AddrRange& range = selHardwareAddrs[i]; + int selRangeTop = CALL_WITH_T_SIZE_TYPES(HardwareAddressToItemIndex, rs_type_size,rs_t=='s',noMisalign, range.addr); + int selRangeBottom = -1; + for(int endAddr = range.End()-1; endAddr >= selRangeTop && selRangeBottom == -1; endAddr--) + selRangeBottom = CALL_WITH_T_SIZE_TYPES(HardwareAddressToItemIndex, rs_type_size,rs_t=='s',noMisalign, endAddr); + if(selRangeBottom == -1) + selRangeBottom = selRangeTop; + if(selRangeTop == -1) + continue; + + // select the entire range at once without deselecting the other ranges + // looks hacky but it works, and the only documentation I found on how to do this was blatantly false and equally hacky anyway + POINT pos; + ListView_EnsureVisible(lv, selRangeTop, 0); + ListView_GetItemPosition(lv, selRangeTop, &pos); + SendMessage(lv, WM_LBUTTONDOWN, MK_LBUTTON|MK_CONTROL, MAKELONG(pos.x,pos.y)); + ListView_EnsureVisible(lv, selRangeBottom, 0); + ListView_GetItemPosition(lv, selRangeBottom, &pos); + SendMessage(lv, WM_LBUTTONDOWN, MK_LBUTTON|MK_CONTROL|MK_SHIFT, MAKELONG(pos.x,pos.y)); + } + + // restore previous scroll position + if(newBottomIndex != -1) + ListView_EnsureVisible(lv, newBottomIndex, 0); + if(newTopIndex != -1) + ListView_EnsureVisible(lv, newTopIndex, 0); + + SendMessage(lv, WM_SETREDRAW, TRUE, 0); + + RefreshRamListSelectedCountControlStatus(RamSearchHWnd); + + EnableWindow(GetDlgItem(RamSearchHWnd,IDC_MISALIGN), rs_type_size != 'b'); + } + else + { + ListView_Update(lv, -1); + } +} + + + + +LRESULT CustomDraw (LPARAM lParam) +{ + LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam; + + switch(lplvcd->nmcd.dwDrawStage) + { + case CDDS_PREPAINT : + return CDRF_NOTIFYITEMDRAW; + + case CDDS_ITEMPREPAINT: + { + int rv = CDRF_DODEFAULT; + + if(lplvcd->nmcd.dwItemSpec % 2) + { + // alternate the background color slightly + lplvcd->clrTextBk = RGB(248,248,255); + rv = CDRF_NEWFONT; + } + + if(!IsSatisfied(lplvcd->nmcd.dwItemSpec)) + { + // tint red any items that would be eliminated if a search were to run now + lplvcd->clrText = RGB(192,64,64); + rv = CDRF_NEWFONT; + } + + return rv; + } break; + } + return CDRF_DODEFAULT; +} + +//extern "C" int disableRamSearchUpdate; +void Update_RAM_Search() //keeps RAM values up to date in the search and watch windows +{ + +// if(disableRamSearchUpdate) +// return; + + if (AutoSearch && !ResultCount) + { + if(!AutoSearchAutoRetry) + { +// Clear_Sound_Buffer(); + int answer = MessageBox(RamSearchHWnd,"Choosing Retry will reset the search once and continue autosearching.\nChoose Ignore will reset the search whenever necessary and continue autosearching.\nChoosing Abort will reset the search once and stop autosearching.","Autosearch - out of results.",MB_ABORTRETRYIGNORE|MB_DEFBUTTON2|MB_ICONINFORMATION); + if(answer == IDABORT) + { + SendDlgItemMessage(RamSearchHWnd, IDC_C_AUTOSEARCH, BM_SETCHECK, BST_UNCHECKED, 0); + SendMessage(RamSearchHWnd, WM_COMMAND, IDC_C_AUTOSEARCH, 0); + } + if(answer == IDIGNORE) + AutoSearchAutoRetry = true; + } + reset_address_info(); + } + + int prevValuesNeededUpdate = s_prevValuesNeedUpdate; + if (RamSearchHWnd) + { + // update active RAM values + signal_new_frame(); + } + + if (AutoSearch && ResultCount) + { + //Clear_Sound_Buffer(); + if(!rs_val_valid) + rs_val_valid = Set_RS_Val(); + if(rs_val_valid) + prune(rs_c,rs_o,rs_t=='s',rs_val,rs_param); + } + + if(RamSearchHWnd) + { + HWND lv = GetDlgItem(RamSearchHWnd,IDC_RAMLIST); + if(prevValuesNeededUpdate != s_prevValuesNeedUpdate) + { + // previous values got updated, refresh everything visible + ListView_Update(lv, -1); + } + else + { + // refresh any visible parts of the listview box that changed + static int changes[128]; + int top = ListView_GetTopIndex(lv); + int count = ListView_GetCountPerPage(lv); + int start = -1; + for(int i = top; i <= top+count; i++) + { + int changeNum = CALL_WITH_T_SIZE_TYPES(GetNumChangesFromItemIndex, rs_type_size,rs_t=='s',noMisalign, i); //s_numChanges[i]; + int changed = changeNum != changes[i-top]; + if(changed) + changes[i-top] = changeNum; + + if(start == -1) + { + if(i != top+count && changed) + { + start = i; + //somethingChanged = true; + } + } + else + { + if(i == top+count || !changed) + { + ListView_RedrawItems(lv, start, i-1); + start = -1; + } + } + } + } + } + + if(RamWatchHWnd) + { + Update_RAM_Watch(); + } +} + +static int rs_lastPercent = -1; +inline void UpdateRamSearchProgressBar(int percent) +{ + if(rs_lastPercent != percent) + { + rs_lastPercent = percent; + UpdateRamSearchTitleBar(percent); + } +} + +static void SelectEditControl(int controlID) +{ + HWND hEdit = GetDlgItem(RamSearchHWnd,controlID); + SetFocus(hEdit); + SendMessage(hEdit, EM_SETSEL, 0, -1); +} + +static BOOL SelectingByKeyboard() +{ + int a = GetKeyState(VK_LEFT); + int b = GetKeyState(VK_RIGHT); + int c = GetKeyState(VK_UP); + int d = GetKeyState(VK_DOWN); // space and tab are intentionally omitted + return (a | b | c | d) & 0x80; +} + +extern void init_list_box(HWND Box, const char* Strs[], int numColumns, int *columnWidths); + +LRESULT CALLBACK RamSearchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + RECT r; + RECT r2; + int dx1, dy1, dx2, dy2; + static int watchIndex=0; + + switch(uMsg) + { + case WM_INITDIALOG: { + RamSearchHWnd = hDlg; +/* if (Full_Screen) + { + while (ShowCursor(false) >= 0); + while (ShowCursor(true) < 0); + }*/ + + GetWindowRect(MainWindow->getHWnd(), &r); + dx1 = (r.right - r.left) / 2; + dy1 = (r.bottom - r.top) / 2; + + GetWindowRect(hDlg, &r2); + dx2 = (r2.right - r2.left) / 2; + dy2 = (r2.bottom - r2.top) / 2; + + // push it away from the main window if we can + const int width = (r.right-r.left); + const int width2 = (r2.right-r2.left); + if(r.left+width2 + width < GetSystemMetrics(SM_CXSCREEN)) + { + r.right += width; + r.left += width; + } + else if((int)r.left - (int)width2 > 0) + { + r.right -= width2; + r.left -= width2; + } + + SetWindowPos(hDlg, NULL, r.left, r.top, NULL, NULL, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); + switch(rs_o) + { + case '<': + SendDlgItemMessage(hDlg, IDC_LESSTHAN, BM_SETCHECK, BST_CHECKED, 0); + break; + case '>': + SendDlgItemMessage(hDlg, IDC_MORETHAN, BM_SETCHECK, BST_CHECKED, 0); + break; + case 'l': + SendDlgItemMessage(hDlg, IDC_NOMORETHAN, BM_SETCHECK, BST_CHECKED, 0); + break; + case 'm': + SendDlgItemMessage(hDlg, IDC_NOLESSTHAN, BM_SETCHECK, BST_CHECKED, 0); + break; + case '=': + SendDlgItemMessage(hDlg, IDC_EQUALTO, BM_SETCHECK, BST_CHECKED, 0); + break; + case '!': + SendDlgItemMessage(hDlg, IDC_DIFFERENTFROM, BM_SETCHECK, BST_CHECKED, 0); + break; + case 'd': + SendDlgItemMessage(hDlg, IDC_DIFFERENTBY, BM_SETCHECK, BST_CHECKED, 0); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_DIFFBY),true); + break; + case '%': + SendDlgItemMessage(hDlg, IDC_MODULO, BM_SETCHECK, BST_CHECKED, 0); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_MODBY),true); + break; + } + switch (rs_c) + { + case 'r': + SendDlgItemMessage(hDlg, IDC_PREVIOUSVALUE, BM_SETCHECK, BST_CHECKED, 0); + break; + case 's': + SendDlgItemMessage(hDlg, IDC_SPECIFICVALUE, BM_SETCHECK, BST_CHECKED, 0); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPAREVALUE),true); + break; + case 'a': + SendDlgItemMessage(hDlg, IDC_SPECIFICADDRESS, BM_SETCHECK, BST_CHECKED, 0); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPAREADDRESS),true); + break; + case 'n': + SendDlgItemMessage(hDlg, IDC_NUMBEROFCHANGES, BM_SETCHECK, BST_CHECKED, 0); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPARECHANGES),true); + break; + } + switch (rs_t) + { + case 's': + SendDlgItemMessage(hDlg, IDC_SIGNED, BM_SETCHECK, BST_CHECKED, 0); + break; + case 'u': + SendDlgItemMessage(hDlg, IDC_UNSIGNED, BM_SETCHECK, BST_CHECKED, 0); + break; + case 'h': + SendDlgItemMessage(hDlg, IDC_HEX, BM_SETCHECK, BST_CHECKED, 0); + break; + } + switch (rs_type_size) + { + case 'b': + SendDlgItemMessage(hDlg, IDC_1_BYTE, BM_SETCHECK, BST_CHECKED, 0); + break; + case 'w': + SendDlgItemMessage(hDlg, IDC_2_BYTES, BM_SETCHECK, BST_CHECKED, 0); + break; + case 'd': + SendDlgItemMessage(hDlg, IDC_4_BYTES, BM_SETCHECK, BST_CHECKED, 0); + break; + } + + s_prevValuesNeedUpdate = true; + + SendDlgItemMessage(hDlg,IDC_C_AUTOSEARCH,BM_SETCHECK,AutoSearch?BST_CHECKED:BST_UNCHECKED,0); + //const char* names[5] = {"Address","Value","Previous","Changes","Notes"}; + //int widths[5] = {62,64,64,55,55}; + const char* names[] = {"Address","Value","Previous","Changes"}; + int widths[4] = {68,76,76,68}; + if (!ResultCount) + reset_address_info(); + else + { + signal_new_frame(); + CompactAddrs(); + } + init_list_box(GetDlgItem(hDlg,IDC_RAMLIST),names,4,widths); + //ListView_SetItemCount(GetDlgItem(hDlg,IDC_RAMLIST),ResultCount); + if (!noMisalign) SendDlgItemMessage(hDlg, IDC_MISALIGN, BM_SETCHECK, BST_CHECKED, 0); +// if (littleEndian) SendDlgItemMessage(hDlg, IDC_ENDIAN, BM_SETCHECK, BST_CHECKED, 0); + last_rs_possible = -1; + RefreshRamListSelectedCountControlStatus(hDlg); + + // force misalign checkbox to refresh + signal_new_size(); + + // force undo button to refresh + int undoType = s_undoType; + SetRamSearchUndoType(hDlg, -2); + SetRamSearchUndoType(hDlg, undoType); + + // force possibility count to refresh + last_rs_possible--; + UpdatePossibilities(ResultCount, (int)s_activeMemoryRegions.size()); + + rs_val_valid = Set_RS_Val(); + + ListView_SetCallbackMask(GetDlgItem(hDlg,IDC_RAMLIST), LVIS_FOCUSED|LVIS_SELECTED); + + return true; + } break; + + case WM_NOTIFY: + { + LPNMHDR lP = (LPNMHDR) lParam; + switch (lP->code) + { + case LVN_ITEMCHANGED: // selection changed event + { + NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)lP; + if(pNMListView->uNewState & LVIS_FOCUSED) + { + // disable buttons that we don't have the right number of selected items for + RefreshRamListSelectedCountControlStatus(hDlg); + } + } break; + + case LVN_GETDISPINFO: + { + LV_DISPINFO *Item = (LV_DISPINFO *)lParam; + Item->item.mask = LVIF_TEXT; + Item->item.state = 0; + Item->item.iImage = 0; + const unsigned int iNum = Item->item.iItem; + static char num[11]; + switch (Item->item.iSubItem) + { + case 0: + { + int addr = CALL_WITH_T_SIZE_TYPES(GetHardwareAddressFromItemIndex, rs_type_size,rs_t=='s',noMisalign, iNum); + sprintf(num,"%08X",addr); + Item->item.pszText = num; + } return true; + case 1: + { + int i = CALL_WITH_T_SIZE_TYPES(GetCurValueFromItemIndex, rs_type_size,rs_t=='s',noMisalign, iNum); + const char* formatString = ((rs_t=='s') ? "%d" : (rs_t=='u') ? "%u" : (rs_type_size=='d' ? "%08X" : rs_type_size=='w' ? "%04X" : "%02X")); + switch (rs_type_size) + { + case 'b': + default: sprintf(num, formatString, rs_t=='s' ? (char)(i&0xff) : (unsigned char)(i&0xff)); break; + case 'w': sprintf(num, formatString, rs_t=='s' ? (short)(i&0xffff) : (unsigned short)(i&0xffff)); break; + case 'd': sprintf(num, formatString, rs_t=='s' ? (long)(i&0xffffffff) : (unsigned long)(i&0xffffffff)); break; + } + Item->item.pszText = num; + } return true; + case 2: + { + int i = CALL_WITH_T_SIZE_TYPES(GetPrevValueFromItemIndex, rs_type_size,rs_t=='s',noMisalign, iNum); + const char* formatString = ((rs_t=='s') ? "%d" : (rs_t=='u') ? "%u" : (rs_type_size=='d' ? "%08X" : rs_type_size=='w' ? "%04X" : "%02X")); + switch (rs_type_size) + { + case 'b': + default: sprintf(num, formatString, rs_t=='s' ? (char)(i&0xff) : (unsigned char)(i&0xff)); break; + case 'w': sprintf(num, formatString, rs_t=='s' ? (short)(i&0xffff) : (unsigned short)(i&0xffff)); break; + case 'd': sprintf(num, formatString, rs_t=='s' ? (long)(i&0xffffffff) : (unsigned long)(i&0xffffffff)); break; + } + Item->item.pszText = num; + } return true; + case 3: + { + int i = CALL_WITH_T_SIZE_TYPES(GetNumChangesFromItemIndex, rs_type_size,rs_t=='s',noMisalign, iNum); + sprintf(num,"%d",i); + + Item->item.pszText = num; + } return true; + //case 4: + // Item->item.pszText = rsaddrs[rsresults[iNum].Index].comment ? rsaddrs[rsresults[iNum].Index].comment : ""; + // return true; + default: + return false; + } + } + + case NM_CUSTOMDRAW: + { + SetWindowLong(hDlg, DWL_MSGRESULT, CustomDraw(lParam)); + return TRUE; + } break; + + //case LVN_ODCACHEHINT: //Copied this bit from the MSDN virtual listbox code sample. Eventually it should probably do something. + //{ + // LPNMLVCACHEHINT lpCacheHint = (LPNMLVCACHEHINT)lParam; + // return 0; + //} + //case LVN_ODFINDITEM: //Copied this bit from the MSDN virtual listbox code sample. Eventually it should probably do something. + //{ + // LPNMLVFINDITEM lpFindItem = (LPNMLVFINDITEM)lParam; + // return 0; + //} + } + } break; + + case WM_COMMAND: + { + int rv = false; + switch(LOWORD(wParam)) + { + case IDC_SIGNED: + rs_t='s'; + signal_new_size(); + {rv = true; break;} + case IDC_UNSIGNED: + rs_t='u'; + signal_new_size(); + {rv = true; break;} + case IDC_HEX: + rs_t='h'; + signal_new_size(); + {rv = true; break;} + case IDC_1_BYTE: + rs_type_size = 'b'; + signal_new_size(); + {rv = true; break;} + case IDC_2_BYTES: + rs_type_size = 'w'; + signal_new_size(); + {rv = true; break;} + case IDC_4_BYTES: + rs_type_size = 'd'; + signal_new_size(); + {rv = true; break;} + case IDC_MISALIGN: + noMisalign = !noMisalign; + //CompactAddrs(); + signal_new_size(); + {rv = true; break;} +// case IDC_ENDIAN: +// littleEndian = !littleEndian; +// signal_new_size(); + {rv = true; break;} + case IDC_LESSTHAN: + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_DIFFBY),false); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_MODBY),false); + rs_o = '<'; + {rv = true; break;} + case IDC_MORETHAN: + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_DIFFBY),false); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_MODBY),false); + rs_o = '>'; + {rv = true; break;} + case IDC_NOMORETHAN: + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_DIFFBY),false); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_MODBY),false); + rs_o = 'l'; + {rv = true; break;} + case IDC_NOLESSTHAN: + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_DIFFBY),false); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_MODBY),false); + rs_o = 'm'; + {rv = true; break;} + case IDC_EQUALTO: + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_DIFFBY),false); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_MODBY),false); + rs_o = '='; + {rv = true; break;} + case IDC_DIFFERENTFROM: + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_DIFFBY),false); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_MODBY),false); + rs_o = '!'; + {rv = true; break;} + case IDC_DIFFERENTBY: + { + rs_o = 'd'; + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_DIFFBY),true); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_MODBY),false); + if(!SelectingByKeyboard()) + SelectEditControl(IDC_EDIT_DIFFBY); + } {rv = true; break;} + case IDC_MODULO: + { + rs_o = '%'; + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_DIFFBY),false); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_MODBY),true); + if(!SelectingByKeyboard()) + SelectEditControl(IDC_EDIT_MODBY); + } {rv = true; break;} + case IDC_PREVIOUSVALUE: + rs_c='r'; + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPAREVALUE),false); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPAREADDRESS),false); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPARECHANGES),false); + {rv = true; break;} + case IDC_SPECIFICVALUE: + { + rs_c = 's'; + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPAREVALUE),true); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPAREADDRESS),false); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPARECHANGES),false); + if(!SelectingByKeyboard()) + SelectEditControl(IDC_EDIT_COMPAREVALUE); + {rv = true; break;} + } + case IDC_SPECIFICADDRESS: + { + rs_c = 'a'; + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPAREADDRESS),true); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPAREVALUE),false); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPARECHANGES),false); + if(!SelectingByKeyboard()) + SelectEditControl(IDC_EDIT_COMPAREADDRESS); + } {rv = true; break;} + case IDC_NUMBEROFCHANGES: + { + rs_c = 'n'; + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPARECHANGES),true); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPAREVALUE),false); + EnableWindow(GetDlgItem(hDlg,IDC_EDIT_COMPAREADDRESS),false); + if(!SelectingByKeyboard()) + SelectEditControl(IDC_EDIT_COMPARECHANGES); + } {rv = true; break;} + case IDC_C_ADDCHEAT: + { +// watchIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_RAMLIST)); +// Liste_GG[CheatCount].restore = Liste_GG[CheatCount].data = rsresults[watchIndex].cur; +// Liste_GG[CheatCount].addr = rsresults[watchIndex].Address; +// Liste_GG[CheatCount].size = rs_type_size; +// Liste_GG[CheatCount].Type = rs_t; +// Liste_GG[CheatCount].oper = '='; +// Liste_GG[CheatCount].mode = 0; +// DialogBoxParam(ghInstance, MAKEINTRESOURCE(IDD_EDITCHEAT), hDlg, (DLGPROC) EditCheatProc,(LPARAM) 0); + } + case IDC_C_RESET: + { + RamSearchSaveUndoStateIfNotTooBig(RamSearchHWnd); + int prevNumItems = last_rs_possible; + + soft_reset_address_info(); + + if(prevNumItems == last_rs_possible) + SetRamSearchUndoType(RamSearchHWnd, 0); // nothing to undo + + ListView_SetItemState(GetDlgItem(hDlg,IDC_RAMLIST), -1, 0, LVIS_SELECTED); // deselect all + //ListView_SetItemCount(GetDlgItem(hDlg,IDC_RAMLIST),ResultCount); + ListView_SetSelectionMark(GetDlgItem(hDlg,IDC_RAMLIST), 0); + RefreshRamListSelectedCountControlStatus(hDlg); + {rv = true; break;} + } + case IDC_C_RESET_CHANGES: + memset(s_numChanges, 0, sizeof(s_numChanges)); + ListView_Update(GetDlgItem(hDlg,IDC_RAMLIST), -1); + //SetRamSearchUndoType(hDlg, 0); + {rv = true; break;} + case IDC_C_UNDO: + if(s_undoType>0) + { +// Clear_Sound_Buffer(); + if(s_activeMemoryRegions.size() < tooManyRegionsForUndo) + { + MemoryList tempMemoryList = s_activeMemoryRegions; + s_activeMemoryRegions = s_activeMemoryRegionsBackup; + s_activeMemoryRegionsBackup = tempMemoryList; + SetRamSearchUndoType(hDlg, 3 - s_undoType); + } + else + { + s_activeMemoryRegions = s_activeMemoryRegionsBackup; + SetRamSearchUndoType(hDlg, -1); + } + CompactAddrs(); + ListView_SetItemState(GetDlgItem(hDlg,IDC_RAMLIST), -1, 0, LVIS_SELECTED); // deselect all + ListView_SetSelectionMark(GetDlgItem(hDlg,IDC_RAMLIST), 0); + RefreshRamListSelectedCountControlStatus(hDlg); + } + {rv = true; break;} + case IDC_C_AUTOSEARCH: + AutoSearch = SendDlgItemMessage(hDlg, IDC_C_AUTOSEARCH, BM_GETCHECK, 0, 0) != 0; + AutoSearchAutoRetry = false; + if (!AutoSearch) {rv = true; break;} + case IDC_C_SEARCH: + { +// Clear_Sound_Buffer(); + + if(!rs_val_valid && !(rs_val_valid = Set_RS_Val())) + goto invalid_field; + + if(ResultCount) + { + RamSearchSaveUndoStateIfNotTooBig(hDlg); + + prune(rs_c,rs_o,rs_t=='s',rs_val,rs_param); + + RefreshRamListSelectedCountControlStatus(hDlg); + } + + if(!ResultCount) + { + + MessageBox(RamSearchHWnd,"Resetting search.","Out of results.",MB_OK|MB_ICONINFORMATION); + soft_reset_address_info(); + } + + {rv = true; break;} + +invalid_field: + MessageBox(RamSearchHWnd,"Invalid or out-of-bound entered value.","Error",MB_OK|MB_ICONSTOP); + if(AutoSearch) // stop autosearch if it just started + { + SendDlgItemMessage(hDlg, IDC_C_AUTOSEARCH, BM_SETCHECK, BST_UNCHECKED, 0); + SendMessage(hDlg, WM_COMMAND, IDC_C_AUTOSEARCH, 0); + } + {rv = true; break;} + } + case IDC_C_WATCH: + { + int watchItemIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_RAMLIST)); + if(watchItemIndex >= 0) + { + AddressWatcher tempWatch; + tempWatch.Address = CALL_WITH_T_SIZE_TYPES(GetHardwareAddressFromItemIndex, rs_type_size,rs_t=='s',noMisalign, watchItemIndex); + tempWatch.Size = rs_type_size; + tempWatch.Type = rs_t; + tempWatch.WrongEndian = 0; //Replace when I get little endian working + tempWatch.comment = NULL; + + bool inserted = InsertWatch(tempWatch, hDlg); + //ListView_Update(GetDlgItem(hDlg,IDC_RAMLIST), -1); + + // bring up the ram watch window if it's not already showing so the user knows where the watch went + if(inserted && !RamWatchHWnd) + SendMessage(MainWindow->getHWnd(), WM_COMMAND, ID_RAM_WATCH, 0); + SetForegroundWindow(RamSearchHWnd); + } + {rv = true; break;} + } + + // eliminate all selected items + case IDC_C_ELIMINATE: + { + RamSearchSaveUndoStateIfNotTooBig(hDlg); + + HWND ramListControl = GetDlgItem(hDlg,IDC_RAMLIST); + int size = (rs_type_size=='b' || !noMisalign) ? 1 : 2; + int selCount = ListView_GetSelectedCount(ramListControl); + int watchIndex = -1; + + // time-saving trick #1: + // condense the selected items into an array of address ranges + std::vector selHardwareAddrs; + for(int i = 0, j = 1024; i < selCount; ++i, --j) + { + watchIndex = ListView_GetNextItem(ramListControl, watchIndex, LVNI_SELECTED); + int addr = CALL_WITH_T_SIZE_TYPES(GetHardwareAddressFromItemIndex, rs_type_size,rs_t=='s',noMisalign, watchIndex); + if(!selHardwareAddrs.empty() && addr == selHardwareAddrs.back().End()) + selHardwareAddrs.back().size += size; + else + selHardwareAddrs.push_back(AddrRange(addr,size)); + + if(!j) UpdateRamSearchProgressBar(i * 50 / selCount), j = 1024; + } + + // now deactivate the ranges + + // time-saving trick #2: + // take advantage of the fact that the listbox items must be in the same order as the regions + MemoryList::iterator iter = s_activeMemoryRegions.begin(); + int numHardwareAddrRanges = selHardwareAddrs.size(); + for(int i = 0, j = 16; i < numHardwareAddrRanges; ++i, --j) + { + int addr = selHardwareAddrs[i].addr; + int size = selHardwareAddrs[i].size; + bool affected = false; + while(iter != s_activeMemoryRegions.end()) + { + MemoryRegion& region = *iter; + int affNow = DeactivateRegion(region, iter, addr, size); + if(affNow) + affected = true; + else if(affected) + break; + if(affNow != 2) + ++iter; + } + + if(!j) UpdateRamSearchProgressBar(50 + (i * 50 / selCount)), j = 16; + } + UpdateRamSearchTitleBar(); + + // careful -- if the above two time-saving tricks aren't working, + // the runtime can absolutely explode (seconds -> hours) when there are lots of regions + + ListView_SetItemState(ramListControl, -1, 0, LVIS_SELECTED); // deselect all + signal_new_size(); + {rv = true; break;} + } + //case IDOK: + case IDCANCEL: +/* if (Full_Screen) + { + while (ShowCursor(true) < 0); + while (ShowCursor(false) >= 0); + }*/ +// DialogsOpen--; + RamSearchHWnd = NULL; + EndDialog(hDlg, true); + {rv = true; break;} + } + + // check refresh for comparison preview color update + // also, update rs_val if needed + bool needRefresh = false; + switch(LOWORD(wParam)) + { + case IDC_LESSTHAN: + case IDC_MORETHAN: + case IDC_NOMORETHAN: + case IDC_NOLESSTHAN: + case IDC_EQUALTO: + case IDC_DIFFERENTFROM: + case IDC_DIFFERENTBY: + case IDC_MODULO: + case IDC_PREVIOUSVALUE: + case IDC_SPECIFICVALUE: + case IDC_SPECIFICADDRESS: + case IDC_NUMBEROFCHANGES: + case IDC_SIGNED: + case IDC_UNSIGNED: + case IDC_HEX: + rs_val_valid = Set_RS_Val(); + needRefresh = true; + break; + case IDC_EDIT_COMPAREVALUE: + case IDC_EDIT_COMPAREADDRESS: + case IDC_EDIT_COMPARECHANGES: + case IDC_EDIT_DIFFBY: + case IDC_EDIT_MODBY: + if(HIWORD(wParam) == EN_CHANGE) + { + rs_val_valid = Set_RS_Val(); + needRefresh = true; + } + break; + } + if(needRefresh) + ListView_Update(GetDlgItem(hDlg,IDC_RAMLIST), -1); + + + return rv; + } break; + + case WM_CLOSE: +/* if (Full_Screen) + { + while (ShowCursor(true) < 0); + while (ShowCursor(false) >= 0); + } + DialogsOpen--;*/ + RamSearchHWnd = NULL; + EndDialog(hDlg, true); + return true; + } + + return false; +} + +void UpdateRamSearchTitleBar(int percent) +{ +#define HEADER_STR " RAM Search - " +#define PROGRESS_STR " %d%% ... " +#define STATUS_STR "%d Possibilit%s (%d Region%s)" + + int poss = last_rs_possible; + int regions = last_rs_regions; + if(poss <= 0) + strcpy(Str_Tmp," RAM Search"); + else if(percent <= 0) + sprintf(Str_Tmp, HEADER_STR STATUS_STR, poss, poss==1?"y":"ies", regions, regions==1?"":"s"); + else + sprintf(Str_Tmp, PROGRESS_STR STATUS_STR, percent, poss, poss==1?"y":"ies", regions, regions==1?"":"s"); + SetWindowText(RamSearchHWnd, Str_Tmp); +} + +void UpdatePossibilities(int rs_possible, int regions) +{ + if(rs_possible != last_rs_possible) + { + last_rs_possible = rs_possible; + last_rs_regions = regions; + UpdateRamSearchTitleBar(); + } +} + +void SetRamSearchUndoType(HWND hDlg, int type) +{ + if(s_undoType != type) + { + if((s_undoType!=2 && s_undoType!=-1)!=(type!=2 && type!=-1)) + SendDlgItemMessage(hDlg,IDC_C_UNDO,WM_SETTEXT,0,(LPARAM)((type == 2 || type == -1) ? "Redo" : "Undo")); + if((s_undoType>0)!=(type>0)) + EnableWindow(GetDlgItem(hDlg,IDC_C_UNDO),type>0); + s_undoType = type; + } +} + +void RamSearchSaveUndoStateIfNotTooBig(HWND hDlg) +{ + if(s_activeMemoryRegions.size() < tooManyRegionsForUndo) + { + s_activeMemoryRegionsBackup = s_activeMemoryRegions; + SetRamSearchUndoType(hDlg, 1); + } + else + { + SetRamSearchUndoType(hDlg, 0); + } +} diff --git a/src/windows/ram_search.h b/src/windows/ram_search.h new file mode 100644 index 000000000..bdf14e407 --- /dev/null +++ b/src/windows/ram_search.h @@ -0,0 +1,49 @@ +#ifndef RAM_SEARCH_H +#define RAM_SEARCH_H + + +//64k in Ram_68k[], 8k in Ram_Z80[] +//#define _68K_RAM_SIZE 64*1024 +//#define Z80_RAM_SIZE 8*1024 +/*#define SRAM_SIZE (((SRAM_End - SRAM_Start) > 2) ? SRAM_End - SRAM_Start : 0) +#define BRAM_SIZE ((8 << BRAM_Ex_Size) * 1024)*/ +//#define GENESIS_RAM_SIZE (_68K_RAM_SIZE + Z80_RAM_SIZE) + +//_32X_Ram[] +//#define _32X_RAM_SIZE 256*1024 + +//512k in Ram_Prg, 256k in Ram_Word_1M and Ram_Word_2M +//(docs say 6Mbit of ram, but I'm not sure what's used when) +//#define SEGACD_RAM_PRG_SIZE 512*1024 +//#define SEGACD_1M_RAM_SIZE 256*1024 +//#define SEGACD_2M_RAM_SIZE 256*1024 +//#define SEGACD_RAM_SIZE (SEGACD_RAM_PRG_SIZE + SEGACD_2M_RAM_SIZE) + + +//#define MAX_RAM_SIZE (0x112000) +//#define MAX_RAM_SIZE (0xD2000) +#define MAX_RAM_SIZE (0x400000) + +extern char rs_type_size; +extern int ResultCount; + +unsigned int sizeConv(unsigned int index,char size, char *prevSize = &rs_type_size, bool usePrev = false); +unsigned int GetRamValue(unsigned int Addr,char Size); +void prune(char Search, char Operater, char Type, int Value, int OperatorParameter); +void CompactAddrs(); +void reset_address_info(); +void signal_new_frame(); +void signal_new_size(); +void UpdateRamSearchTitleBar(int percent = 0); +void Update_RAM_Search(); +void SetRamSearchUndoType(HWND hDlg, int type); +unsigned int ReadValueAtHardwareAddress(unsigned int address, unsigned int size); +bool WriteValueAtHardwareRAMAddress(unsigned int address, unsigned int value, unsigned int size, bool hookless=false); +bool IsHardwareRAMAddressValid(unsigned int address); +extern int curr_ram_size; +extern bool noMisalign; +extern bool littleEndian; + + +#endif + diff --git a/src/windows/ramwatch.cpp b/src/windows/ramwatch.cpp new file mode 100644 index 000000000..c2f9a2bed --- /dev/null +++ b/src/windows/ramwatch.cpp @@ -0,0 +1,1171 @@ + +#include "resource.h" +#include "common.h" +#include "NDSSystem.h" +#include "ramwatch.h" +#include "ram_search.h" +#include +#include +#include +#include + +HWND RamWatchHWnd; + +char Str_Tmp[1024]; +char Rom_Name[64] = "test"; + +static HMENU ramwatchmenu; +static HMENU rwrecentmenu; +static HACCEL RamWatchAccels = NULL; +char rw_recent_files[MAX_RECENT_WATCHES][1024]; +char Watch_Dir[1024]=""; +const unsigned int RW_MENU_FIRST_RECENT_FILE = 600; +bool RWfileChanged = false; //Keeps track of whether the current watch file has been changed, if so, ramwatch will prompt to save changes +bool AutoRWLoad = false; //Keeps track of whether Auto-load is checked +bool RWSaveWindowPos = false; //Keeps track of whether Save Window position is checked +char currentWatch[1024]; +int ramw_x, ramw_y; //Used to store ramwatch dialog window positions +AddressWatcher rswatches[MAX_WATCH_COUNT]; +int WatchCount=0; + +#define MESSAGEBOXPARENT (RamWatchHWnd ? RamWatchHWnd : MainWindow->getHWnd()) + +bool QuickSaveWatches(); +bool ResetWatches(); +//extern "C" int Clear_Sound_Buffer(void); + +unsigned int GetCurrentValue(AddressWatcher& watch) +{ + char buf[4]; + MMU_DumpMemBlock(0, watch.Address, 4, (u8*)buf); + + u32 val_u32 = *(u32*)buf; + u16 val_u16 = *(u16*)buf; + u8 val_u8 = *(u8*)buf; + + switch (watch.Size) + { + case 0x62: return val_u8; + case 0x77: return val_u16; + case 0x64: return val_u32; + } +// return ReadValueAtHardwareAddress(watch.Address, watch.Size == 'd' ? 4 : watch.Size == 'w' ? 2 : 1); +} + +bool IsSameWatch(const AddressWatcher& l, const AddressWatcher& r) +{ + return ((l.Address == r.Address) && (l.Size == r.Size) && (l.Type == r.Type)/* && (l.WrongEndian == r.WrongEndian)*/); +} + +bool VerifyWatchNotAlreadyAdded(const AddressWatcher& watch) +{ + for (int j = 0; j < WatchCount; j++) + { + if (IsSameWatch(rswatches[j], watch)) + { + if(RamWatchHWnd) + SetForegroundWindow(RamWatchHWnd); + return false; + } + } + return true; +} + + +bool InsertWatch(const AddressWatcher& Watch, char *Comment) +{ + if(!VerifyWatchNotAlreadyAdded(Watch)) + return false; + + if(WatchCount >= MAX_WATCH_COUNT) + return false; + + int i = WatchCount++; + AddressWatcher& NewWatch = rswatches[i]; + NewWatch = Watch; + //if (NewWatch.comment) free(NewWatch.comment); + NewWatch.comment = (char *) malloc(strlen(Comment)+2); + NewWatch.CurValue = GetCurrentValue(NewWatch); + strcpy(NewWatch.comment, Comment); + ListView_SetItemCount(GetDlgItem(RamWatchHWnd,IDC_WATCHLIST),WatchCount); + RWfileChanged=true; + + return true; +} + +LRESULT CALLBACK PromptWatchNameProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) //Gets the description of a watched address +{ + RECT r; + RECT r2; + int dx1, dy1, dx2, dy2; + + switch(uMsg) + { + case WM_INITDIALOG: +// Clear_Sound_Buffer(); + +/* if (Full_Screen) + { + while (ShowCursor(false) >= 0); + while (ShowCursor(true) < 0); + }*/ + + GetWindowRect(MainWindow->getHWnd(), &r); + dx1 = (r.right - r.left) / 2; + dy1 = (r.bottom - r.top) / 2; + + GetWindowRect(hDlg, &r2); + dx2 = (r2.right - r2.left) / 2; + dy2 = (r2.bottom - r2.top) / 2; + + //SetWindowPos(hDlg, NULL, max(0, r.left + (dx1 - dx2)), max(0, r.top + (dy1 - dy2)), NULL, NULL, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); + SetWindowPos(hDlg, NULL, r.left, r.top, NULL, NULL, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); + strcpy(Str_Tmp,"Enter a name for this RAM address."); + // SendDlgItemMessage(hDlg,IDC_PROMPT_TEXT,WM_SETTEXT,0,(LPARAM)Str_Tmp); + strcpy(Str_Tmp,""); + // SendDlgItemMessage(hDlg,IDC_PROMPT_TEXT2,WM_SETTEXT,0,(LPARAM)Str_Tmp); + return true; + break; + + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDOK: + { +/* if (Full_Screen) + { + while (ShowCursor(true) < 0); + while (ShowCursor(false) >= 0); + }*/ + GetDlgItemText(hDlg,IDC_PROMPT_EDIT,Str_Tmp,80); + InsertWatch(rswatches[WatchCount],Str_Tmp); +// DialogsOpen--; + EndDialog(hDlg, true); + return true; + break; + } + // case ID_CANCEL: + case IDCANCEL: +/* if (Full_Screen) + { + while (ShowCursor(true) < 0); + while (ShowCursor(false) >= 0); + }*/ + +// DialogsOpen--; + EndDialog(hDlg, false); + return false; + break; + } + break; + + case WM_CLOSE: +/* if (Full_Screen) + { + while (ShowCursor(true) < 0); + while (ShowCursor(false) >= 0); + }*/ +// DialogsOpen--; + EndDialog(hDlg, false); + return false; + break; + } + + return false; +} + +bool InsertWatch(const AddressWatcher& Watch, HWND parent) +{ + if(!VerifyWatchNotAlreadyAdded(Watch)) + return false; + + if(!parent) + parent = RamWatchHWnd; + if(!parent) + parent = MainWindow->getHWnd(); + + int prevWatchCount = WatchCount; + + rswatches[WatchCount] = Watch; + rswatches[WatchCount].CurValue = GetCurrentValue(rswatches[WatchCount]); +// DialogBox(hAppInst, MAKEINTRESOURCE(IDD_PROMPT), parent, (DLGPROC) PromptWatchNameProc); TODO + + return WatchCount > prevWatchCount; +} + +void Update_RAM_Watch() +{ + // update cached values and detect changes to displayed listview items + BOOL watchChanged[MAX_WATCH_COUNT] = {0}; + for(int i = 0; i < WatchCount; i++) + { + unsigned int prevCurValue = rswatches[i].CurValue; + unsigned int newCurValue = GetCurrentValue(rswatches[i]); + if(prevCurValue != newCurValue) + { + rswatches[i].CurValue = newCurValue; + watchChanged[i] = TRUE; + } + } + + // refresh any visible parts of the listview box that changed + HWND lv = GetDlgItem(RamWatchHWnd,IDC_WATCHLIST); + int top = ListView_GetTopIndex(lv); + int bottom = top + ListView_GetCountPerPage(lv) + 1; // +1 is so we will update a partially-displayed last item + if(top < 0) top = 0; + if(bottom > WatchCount) bottom = WatchCount; + int start = -1; + for(int i = top; i <= bottom; i++) + { + if(start == -1) + { + if(i != bottom && watchChanged[i]) + { + start = i; + //somethingChanged = true; + } + } + else + { + if(i == bottom || !watchChanged[i]) + { + ListView_RedrawItems(lv, start, i-1); + start = -1; + } + } + } +} + +bool AskSave() +{ + //This function asks to save changes if the watch file contents have changed + //returns false only if a save was attempted but failed or was cancelled + if (RWfileChanged) + { + int answer = MessageBox(MESSAGEBOXPARENT, "Save Changes?", "Ram Watch", MB_YESNOCANCEL); + if(answer == IDYES) + if(!QuickSaveWatches()) + return false; + return (answer != IDCANCEL); + } + return true; +} + + +void UpdateRW_RMenu(HMENU menu, unsigned int mitem, unsigned int baseid) +{ + MENUITEMINFO moo; + int x; + + moo.cbSize = sizeof(moo); + moo.fMask = MIIM_SUBMENU | MIIM_STATE; + + GetMenuItemInfo(GetSubMenu(ramwatchmenu, 0), mitem, FALSE, &moo); + moo.hSubMenu = menu; + moo.fState = strlen(rw_recent_files[0]) ? MFS_ENABLED : MFS_GRAYED; + + SetMenuItemInfo(GetSubMenu(ramwatchmenu, 0), mitem, FALSE, &moo); + + // Remove all recent files submenus + for(x = 0; x < MAX_RECENT_WATCHES; x++) + { + RemoveMenu(menu, baseid + x, MF_BYCOMMAND); + } + + // Recreate the menus + for(x = MAX_RECENT_WATCHES - 1; x >= 0; x--) + { + char tmp[128 + 5]; + + // Skip empty strings + if(!strlen(rw_recent_files[x])) + { + continue; + } + + moo.cbSize = sizeof(moo); + moo.fMask = MIIM_DATA | MIIM_ID | MIIM_TYPE; + + // Fill in the menu text. + if(strlen(rw_recent_files[x]) < 128) + { + sprintf(tmp, "&%d. %s", ( x + 1 ) % 10, rw_recent_files[x]); + } + else + { + sprintf(tmp, "&%d. %s", ( x + 1 ) % 10, rw_recent_files[x] + strlen( rw_recent_files[x] ) - 127); + } + + // Insert the menu item + moo.cch = strlen(tmp); + moo.fType = 0; + moo.wID = baseid + x; + moo.dwTypeData = tmp; + InsertMenuItem(menu, 0, 1, &moo); + } +} + +void UpdateRWRecentArray(const char* addString, unsigned int arrayLen, HMENU menu, unsigned int menuItem, unsigned int baseId) +{ + // Try to find out if the filename is already in the recent files list. + for(unsigned int x = 0; x < arrayLen; x++) + { + if(strlen(rw_recent_files[x])) + { + if(!strcmp(rw_recent_files[x], addString)) // Item is already in list. + { + // If the filename is in the file list don't add it again. + // Move it up in the list instead. + + int y; + char tmp[1024]; + + // Save pointer. + strcpy(tmp,rw_recent_files[x]); + + for(y = x; y; y--) + { + // Move items down. + strcpy(rw_recent_files[y],rw_recent_files[y - 1]); + } + + // Put item on top. + strcpy(rw_recent_files[0],tmp); + + // Update the recent files menu + UpdateRW_RMenu(menu, menuItem, baseId); + + return; + } + } + } + + // The filename wasn't found in the list. That means we need to add it. + + // Move the other items down. + for(unsigned int x = arrayLen - 1; x; x--) + { + strcpy(rw_recent_files[x],rw_recent_files[x - 1]); + } + + // Add the new item. + strcpy(rw_recent_files[0], addString); + + // Update the recent files menu + UpdateRW_RMenu(menu, menuItem, baseId); +} + + +void RWAddRecentFile(const char *filename) +{ +// UpdateRWRecentArray(filename, MAX_RECENT_WATCHES, rwrecentmenu, RAMMENU_FILE_RECENT, RW_MENU_FIRST_RECENT_FILE); +} + +void OpenRWRecentFile(int memwRFileNumber) +{ + if(!ResetWatches()) + return; + + int rnum = memwRFileNumber; + if ((unsigned int)rnum >= MAX_RECENT_WATCHES) + return; //just in case + + char* x; + + while(true) + { + x = rw_recent_files[rnum]; + if (!*x) + return; //If no recent files exist just return. Useful for Load last file on startup (or if something goes screwy) + + if (rnum) //Change order of recent files if not most recent + { + RWAddRecentFile(x); + rnum = 0; + } + else + { + break; + } + } + + strcpy(currentWatch,x); + strcpy(Str_Tmp,currentWatch); + + //loadwatches here + FILE *WatchFile = fopen(Str_Tmp,"rb"); + if (!WatchFile) + { + int answer = MessageBox(MESSAGEBOXPARENT,"Error opening file.","ERROR",MB_OKCANCEL); + if (answer == IDOK) + { + rw_recent_files[rnum][0] = '\0'; //Clear file from list + if (rnum) //Update the ramwatch list + RWAddRecentFile(rw_recent_files[0]); + else + RWAddRecentFile(rw_recent_files[1]); + } + return; + } + const char DELIM = '\t'; + AddressWatcher Temp; + char mode; + fgets(Str_Tmp,1024,WatchFile); + sscanf(Str_Tmp,"%c%*s",&mode); +/* if ((mode == '1' && !(SegaCD_Started)) || (mode == '2' && !(_32X_Started))) + { + char Device[8]; + strcpy(Device,(mode > '1')?"32X":"SegaCD"); + sprintf(Str_Tmp,"Warning: %s not started. \nWatches for %s addresses will be ignored.",Device,Device); + MessageBox(MESSAGEBOXPARENT,Str_Tmp,"Possible Device Mismatch",MB_OK); + }*/ + int WatchAdd; + fgets(Str_Tmp,1024,WatchFile); + sscanf(Str_Tmp,"%d%*s",&WatchAdd); + WatchAdd+=WatchCount; + for (int i = WatchCount; i < WatchAdd; i++) + { + while (i < 0) + i++; + do { + fgets(Str_Tmp,1024,WatchFile); + } while (Str_Tmp[0] == '\n'); + sscanf(Str_Tmp,"%*05X%*c%08X%*c%c%*c%c%*c%d",&(Temp.Address),&(Temp.Size),&(Temp.Type),&(Temp.WrongEndian)); + Temp.WrongEndian = 0; + char *Comment = strrchr(Str_Tmp,DELIM) + 1; + *strrchr(Comment,'\n') = '\0'; + InsertWatch(Temp,Comment); + } + + fclose(WatchFile); + if (RamWatchHWnd) + ListView_SetItemCount(GetDlgItem(RamWatchHWnd,IDC_WATCHLIST),WatchCount); + RWfileChanged=false; + return; +} + +char Gens_Path[64]= "M:\\"; //TODO + +int Change_File_S(char *Dest, char *Dir, char *Titre, char *Filter, char *Ext, HWND hwnd) +{ + OPENFILENAME ofn; + + SetCurrentDirectory(Gens_Path); + + if (!strcmp(Dest, "")) + { + strcpy(Dest, "default."); + strcat(Dest, Ext); + } + + memset(&ofn, 0, sizeof(OPENFILENAME)); + + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = hwnd; + ofn.hInstance = hAppInst; + ofn.lpstrFile = Dest; + ofn.nMaxFile = 2047; + ofn.lpstrFilter = Filter; + ofn.nFilterIndex = 1; + ofn.lpstrInitialDir = Dir; + ofn.lpstrTitle = Titre; + ofn.lpstrDefExt = Ext; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY; + + if (GetSaveFileName(&ofn)) return 1; + + return 0; +} + + +bool Save_Watches() +{ + strncpy(Str_Tmp,Rom_Name,512); + strcat(Str_Tmp,".wch"); + if(Change_File_S(Str_Tmp, Gens_Path, "Save Watches", "GENs Watchlist\0*.wch\0All Files\0*.*\0\0", "wch", RamWatchHWnd)) + { + FILE *WatchFile = fopen(Str_Tmp,"r+b"); + if (!WatchFile) WatchFile = fopen(Str_Tmp,"w+b"); +// fputc(SegaCD_Started?'1':(_32X_Started?'2':'0'),WatchFile); + fputc('\n',WatchFile); + strcpy(currentWatch,Str_Tmp); + RWAddRecentFile(currentWatch); + sprintf(Str_Tmp,"%d\n",WatchCount); + fputs(Str_Tmp,WatchFile); + const char DELIM = '\t'; + for (int i = 0; i < WatchCount; i++) + { + sprintf(Str_Tmp,"%05X%c%08X%c%c%c%c%c%d%c%s\n",i,DELIM,rswatches[i].Address,DELIM,rswatches[i].Size,DELIM,rswatches[i].Type,DELIM,rswatches[i].WrongEndian,DELIM,rswatches[i].comment); + fputs(Str_Tmp,WatchFile); + } + + fclose(WatchFile); + RWfileChanged=false; + //TODO: Add to recent list function call here + return true; + } + return false; +} + +bool QuickSaveWatches() +{ +if (RWfileChanged==false) return true; //If file has not changed, no need to save changes +if (currentWatch[0] == NULL) //If there is no currently loaded file, run to Save as and then return + { + return Save_Watches(); + } + + strcpy(Str_Tmp,currentWatch); + FILE *WatchFile = fopen(Str_Tmp,"r+b"); + if (!WatchFile) WatchFile = fopen(Str_Tmp,"w+b"); +// fputc(SegaCD_Started?'1':(_32X_Started?'2':'0'),WatchFile); + fputc('\n',WatchFile); + sprintf(Str_Tmp,"%d\n",WatchCount); + fputs(Str_Tmp,WatchFile); + const char DELIM = '\t'; + for (int i = 0; i < WatchCount; i++) + { + sprintf(Str_Tmp,"%05X%c%08X%c%c%c%c%c%d%c%s\n",i,DELIM,rswatches[i].Address,DELIM,rswatches[i].Size,DELIM,rswatches[i].Type,DELIM,rswatches[i].WrongEndian,DELIM,rswatches[i].comment); + fputs(Str_Tmp,WatchFile); + } + fclose(WatchFile); + RWfileChanged=false; + return true; +} + +bool Load_Watches(bool clear, const char* filename) +{ + const char DELIM = '\t'; + FILE* WatchFile = fopen(filename,"rb"); + if (!WatchFile) + { + MessageBox(MESSAGEBOXPARENT,"Error opening file.","ERROR",MB_OK); + return false; + } + if(clear) + { + if(!ResetWatches()) + { + fclose(WatchFile); + return false; + } + } + strcpy(currentWatch,filename); + RWAddRecentFile(currentWatch); + AddressWatcher Temp; + char mode; + fgets(Str_Tmp,1024,WatchFile); + sscanf(Str_Tmp,"%c%*s",&mode); +/* if ((mode == '1' && !(SegaCD_Started)) || (mode == '2' && !(_32X_Started))) + { + char Device[8]; + strcpy(Device,(mode > '1')?"32X":"SegaCD"); + sprintf(Str_Tmp,"Warning: %s not started. \nWatches for %s addresses will be ignored.",Device,Device); + MessageBox(MESSAGEBOXPARENT,Str_Tmp,"Possible Device Mismatch",MB_OK); + }*/ + int WatchAdd; + fgets(Str_Tmp,1024,WatchFile); + sscanf(Str_Tmp,"%d%*s",&WatchAdd); + WatchAdd+=WatchCount; + for (int i = WatchCount; i < WatchAdd; i++) + { + while (i < 0) + i++; + do { + fgets(Str_Tmp,1024,WatchFile); + } while (Str_Tmp[0] == '\n'); + sscanf(Str_Tmp,"%*05X%*c%08X%*c%c%*c%c%*c%d",&(Temp.Address),&(Temp.Size),&(Temp.Type),&(Temp.WrongEndian)); + Temp.WrongEndian = 0; + char *Comment = strrchr(Str_Tmp,DELIM) + 1; + *strrchr(Comment,'\n') = '\0'; + InsertWatch(Temp,Comment); + } + + fclose(WatchFile); + if (RamWatchHWnd) + ListView_SetItemCount(GetDlgItem(RamWatchHWnd,IDC_WATCHLIST),WatchCount); + RWfileChanged=false; + return true; +} + + + +int Change_File_L(char *Dest, char *Dir, char *Titre, char *Filter, char *Ext, HWND hwnd) +{ + OPENFILENAME ofn; + + SetCurrentDirectory(Gens_Path); + + if (!strcmp(Dest, "")) + { + strcpy(Dest, "default."); + strcat(Dest, Ext); + } + + memset(&ofn, 0, sizeof(OPENFILENAME)); + + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = hwnd; + ofn.hInstance = hAppInst; + ofn.lpstrFile = Dest; + ofn.nMaxFile = 2047; + ofn.lpstrFilter = Filter; + ofn.nFilterIndex = 1; + ofn.lpstrInitialDir = Dir; + ofn.lpstrTitle = Titre; + ofn.lpstrDefExt = Ext; + ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; + + if (GetOpenFileName(&ofn)) return 1; + + return 0; +} + +bool Load_Watches(bool clear) +{ + strncpy(Str_Tmp,Rom_Name,512); + strcat(Str_Tmp,".wch"); + if(Change_File_L(Str_Tmp, Watch_Dir, "Load Watches", "GENs Watchlist\0*.wch\0All Files\0*.*\0\0", "wch", RamWatchHWnd)) + { + return Load_Watches(clear, Str_Tmp); + } + return false; +} + +bool ResetWatches() +{ + if(!AskSave()) + return false; + for (;WatchCount>=0;WatchCount--) + { + free(rswatches[WatchCount].comment); + rswatches[WatchCount].comment = NULL; + } + WatchCount++; + if (RamWatchHWnd) + ListView_SetItemCount(GetDlgItem(RamWatchHWnd,IDC_WATCHLIST),WatchCount); + RWfileChanged = false; + currentWatch[0] = NULL; + return true; +} + +void RemoveWatch(int watchIndex) +{ + free(rswatches[watchIndex].comment); + rswatches[watchIndex].comment = NULL; + for (int i = watchIndex; i <= WatchCount; i++) + rswatches[i] = rswatches[i+1]; + WatchCount--; +} +/* +bool IsHardwareRAMAddressValid(unsigned int address) { + + return true; + + +};*/ + +LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) //Gets info for a RAM Watch, and then inserts it into the Watch List +{ + RECT r; + RECT r2; + int dx1, dy1, dx2, dy2; + static int index; + static char s,t = s = 0; + + switch(uMsg) + { + case WM_INITDIALOG: +// Clear_Sound_Buffer(); + +/* if (Full_Screen) + { + while (ShowCursor(false) >= 0); + while (ShowCursor(true) < 0); + }*/ + + GetWindowRect(MainWindow->getHWnd(), &r); + dx1 = (r.right - r.left) / 2; + dy1 = (r.bottom - r.top) / 2; + + GetWindowRect(hDlg, &r2); + dx2 = (r2.right - r2.left) / 2; + dy2 = (r2.bottom - r2.top) / 2; + + //SetWindowPos(hDlg, NULL, max(0, r.left + (dx1 - dx2)), max(0, r.top + (dy1 - dy2)), NULL, NULL, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); + SetWindowPos(hDlg, NULL, r.left, r.top, NULL, NULL, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); + index = (int)lParam; + sprintf(Str_Tmp,"%08X",rswatches[index].Address); + SetDlgItemText(hDlg,IDC_EDIT_COMPAREADDRESS,Str_Tmp); + if (rswatches[index].comment != NULL) + SetDlgItemText(hDlg,IDC_PROMPT_EDIT,rswatches[index].comment); + s = rswatches[index].Size; + t = rswatches[index].Type; + switch (s) + { + case 'b': + SendDlgItemMessage(hDlg, IDC_1_BYTE, BM_SETCHECK, BST_CHECKED, 0); + break; + case 'w': + SendDlgItemMessage(hDlg, IDC_2_BYTES, BM_SETCHECK, BST_CHECKED, 0); + break; + case 'd': + SendDlgItemMessage(hDlg, IDC_4_BYTES, BM_SETCHECK, BST_CHECKED, 0); + break; + default: + s = 0; + break; + } + switch (t) + { + case 's': + SendDlgItemMessage(hDlg, IDC_SIGNED, BM_SETCHECK, BST_CHECKED, 0); + break; + case 'u': + SendDlgItemMessage(hDlg, IDC_UNSIGNED, BM_SETCHECK, BST_CHECKED, 0); + break; + case 'h': + SendDlgItemMessage(hDlg, IDC_HEX, BM_SETCHECK, BST_CHECKED, 0); + break; + default: + t = 0; + break; + } + + return true; + break; + + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDC_SIGNED: + t='s'; + return true; + case IDC_UNSIGNED: + t='u'; + return true; + case IDC_HEX: + t='h'; + return true; + case IDC_1_BYTE: + s = 'b'; + return true; + case IDC_2_BYTES: + s = 'w'; + return true; + case IDC_4_BYTES: + s = 'd'; + return true; + case IDOK: + { +/* if (Full_Screen) + { + while (ShowCursor(true) < 0); + while (ShowCursor(false) >= 0); + }*/ + if (s && t) + { + AddressWatcher Temp; + Temp.Size = s; + Temp.Type = t; + Temp.WrongEndian = false; //replace this when I get little endian working properly + GetDlgItemText(hDlg,IDC_EDIT_COMPAREADDRESS,Str_Tmp,1024); + char *addrstr = Str_Tmp; + if (strlen(Str_Tmp) > 8) addrstr = &(Str_Tmp[strlen(Str_Tmp) - 9]); + for(int i = 0; addrstr[i]; i++) {if(toupper(addrstr[i]) == 'O') addrstr[i] = '0';} + sscanf(addrstr,"%08X",&(Temp.Address)); + + if((Temp.Address & ~0xFFFFFF) == ~0xFFFFFF) + Temp.Address &= 0xFFFFFF; + + if(IsHardwareRAMAddressValid(Temp.Address)) + { + GetDlgItemText(hDlg,IDC_PROMPT_EDIT,Str_Tmp,80); + if (index < WatchCount) RemoveWatch(index); + InsertWatch(Temp,Str_Tmp); + if(RamWatchHWnd) + { + ListView_SetItemCount(GetDlgItem(RamWatchHWnd,IDC_WATCHLIST),WatchCount); + } +// DialogsOpen--; + EndDialog(hDlg, true); + } + else + { + MessageBox(hDlg,"Invalid Address","ERROR",MB_OK); + } + } + else + { + strcpy(Str_Tmp,"Error:"); + if (!s) + strcat(Str_Tmp," Size must be specified."); + if (!t) + strcat(Str_Tmp," Type must be specified."); + MessageBox(hDlg,Str_Tmp,"ERROR",MB_OK); + } + RWfileChanged=true; + return true; + break; + } +// case ID_CANCEL: + case IDCANCEL: +/* if (Full_Screen) + { + while (ShowCursor(true) < 0); + while (ShowCursor(false) >= 0); + }*/ +// DialogsOpen--; + EndDialog(hDlg, false); + return false; + break; + } + break; + + case WM_CLOSE: +/* if (Full_Screen) + { + while (ShowCursor(true) < 0); + while (ShowCursor(false) >= 0); + }*/ +// DialogsOpen--; + EndDialog(hDlg, false); + return false; + break; + } + + return false; +} + +void init_list_box(HWND Box, const char* Strs[], int numColumns, int *columnWidths) //initializes the ram search and/or ram watch listbox +{ + LVCOLUMN Col; + Col.mask = LVCF_FMT | LVCF_ORDER | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH; + Col.fmt = LVCFMT_CENTER; + for (int i = 0; i < numColumns; i++) + { + Col.iOrder = i; + Col.iSubItem = i; + Col.pszText = (LPSTR)(Strs[i]); + Col.cx = columnWidths[i]; + ListView_InsertColumn(Box,i,&Col); + } + + ListView_SetExtendedListViewStyle(Box, LVS_EX_FULLROWSELECT); +} + +//int ResultCount = 0; //TODO make sure this isn't breaking anything + +LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + RECT r; + RECT r2; + int dx1, dy1, dx2, dy2; + static int watchIndex=0; + + Update_RAM_Watch(); + + switch(uMsg) + { + case WM_MOVE: { + RECT wrect; + GetWindowRect(hDlg,&wrect); + ramw_x = wrect.left; + ramw_y = wrect.top; + break; + }; + + case WM_INITDIALOG: { +/* if (Full_Screen) + { + while (ShowCursor(false) >= 0); + while (ShowCursor(true) < 0); + }*/ + + GetWindowRect(MainWindow->getHWnd(), &r); //Ramwatch window + dx1 = (r.right - r.left) / 2; + dy1 = (r.bottom - r.top) / 2; + + GetWindowRect(hDlg, &r2); // Gens window + dx2 = (r2.right - r2.left) / 2; + dy2 = (r2.bottom - r2.top) / 2; + + + // push it away from the main window if we can + const int width = (r.right-r.left); + const int height = (r.bottom - r.top); + const int width2 = (r2.right-r2.left); + if(r.left+width2 + width < GetSystemMetrics(SM_CXSCREEN)) + { + r.right += width; + r.left += width; + } + else if((int)r.left - (int)width2 > 0) + { + r.right -= width2; + r.left -= width2; + } + + //----------------------------------------------------------------------------------- + //If user has Save Window Pos selected, override default positioning + if (RWSaveWindowPos) + { + //If ramwindow is for some reason completely off screen, use default instead + if (ramw_x > (-width*2) || ramw_x < (width*2 + GetSystemMetrics(SM_CYSCREEN)) ) + r.left = ramw_x; //This also ignores cases of windows -32000 error codes + //If ramwindow is for some reason completely off screen, use default instead + if (ramw_y > (0-height*2) ||ramw_y < (height*2 + GetSystemMetrics(SM_CYSCREEN)) ) + r.top = ramw_y; //This also ignores cases of windows -32000 error codes + } + //------------------------------------------------------------------------------------- + SetWindowPos(hDlg, NULL, r.left, r.top, NULL, NULL, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); + + ramwatchmenu=GetMenu(hDlg); + rwrecentmenu=CreateMenu(); + UpdateRW_RMenu(rwrecentmenu, RAMMENU_FILE_RECENT, RW_MENU_FIRST_RECENT_FILE); + + const char* names[3] = {"Address","Value","Notes"}; + int widths[3] = {62,64,64+51+53}; + init_list_box(GetDlgItem(hDlg,IDC_WATCHLIST),names,3,widths); +/* if (!ResultCount) //TODO what do these do + reset_address_info(); + else + signal_new_frame();*/ + ListView_SetItemCount(GetDlgItem(hDlg,IDC_WATCHLIST),WatchCount); +// if (!noMisalign) SendDlgItemMessage(hDlg, IDC_MISALIGN, BM_SETCHECK, BST_CHECKED, 0); +// if (littleEndian) SendDlgItemMessage(hDlg, IDC_ENDIAN, BM_SETCHECK, BST_CHECKED, 0); + +//TODO what? RamWatchAccels = LoadAccelerators(hAppInst, MAKEINTRESOURCE(IDR_ACCELERATOR1)); + + // due to some bug in windows, the arrow button width from the resource gets ignored, so we have to set it here + SetWindowPos(GetDlgItem(hDlg,ID_WATCHES_UPDOWN), 0,0,0, 30,60, SWP_NOMOVE); + + Update_RAM_Watch(); + + DragAcceptFiles(hDlg, TRUE); + + return true; + break; + } + + case WM_INITMENU: + CheckMenuItem(ramwatchmenu, RAMMENU_FILE_AUTOLOAD, AutoRWLoad ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(ramwatchmenu, RAMMENU_FILE_SAVEWINDOW, RWSaveWindowPos ? MF_CHECKED : MF_UNCHECKED); + break; + + case WM_MENUSELECT: + case WM_ENTERSIZEMOVE: +// Clear_Sound_Buffer(); + break; + + case WM_NOTIFY: + { + LPNMHDR lP = (LPNMHDR) lParam; + switch (lP->code) + { + case LVN_GETDISPINFO: + { + LV_DISPINFO *Item = (LV_DISPINFO *)lParam; + Item->item.mask = LVIF_TEXT; + Item->item.state = 0; + Item->item.iImage = 0; + const unsigned int iNum = Item->item.iItem; + static char num[11]; + switch (Item->item.iSubItem) + { + case 0: + sprintf(num,"%08X",rswatches[iNum].Address); + Item->item.pszText = num; + return true; + case 1: { + int i = rswatches[iNum].CurValue; + int t = rswatches[iNum].Type; + int size = rswatches[iNum].Size; + const char* formatString = ((t=='s') ? "%d" : (t=='u') ? "%u" : (size=='d' ? "%08X" : size=='w' ? "%04X" : "%02X")); + switch (size) + { + case 'b': + default: sprintf(num, formatString, t=='s' ? (char)(i&0xff) : (unsigned char)(i&0xff)); break; + case 'w': sprintf(num, formatString, t=='s' ? (short)(i&0xffff) : (unsigned short)(i&0xffff)); break; + case 'd': sprintf(num, formatString, t=='s' ? (long)(i&0xffffffff) : (unsigned long)(i&0xffffffff)); break; + } + + Item->item.pszText = num; + } return true; + case 2: + Item->item.pszText = rswatches[iNum].comment ? rswatches[iNum].comment : ""; + return true; + + default: + return false; + } + } + case LVN_ODFINDITEM: + { + // disable search by keyboard typing, + // because it interferes with some of the accelerators + // and it isn't very useful here anyway + SetWindowLong(hDlg, DWL_MSGRESULT, ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST))); + return 1; + } + } + break; + } + + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case RAMMENU_FILE_SAVE: + QuickSaveWatches(); + break; + + case RAMMENU_FILE_SAVEAS: + //case IDC_C_SAVE: + return Save_Watches(); + case RAMMENU_FILE_OPEN: + return Load_Watches(true); + case RAMMENU_FILE_APPEND: + //case IDC_C_LOAD: + return Load_Watches(false); + case RAMMENU_FILE_NEW: + //case IDC_C_RESET: + ResetWatches(); + return true; + case IDC_C_WATCH_REMOVE: + watchIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST)); + RemoveWatch(watchIndex); + ListView_SetItemCount(GetDlgItem(hDlg,IDC_WATCHLIST),WatchCount); + RWfileChanged=true; + SetFocus(GetDlgItem(hDlg,IDC_WATCHLIST)); + return true; + case IDC_C_WATCH_EDIT: + watchIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST)); + DialogBoxParam(hAppInst, MAKEINTRESOURCE(IDD_EDITWATCH), hDlg, (DLGPROC) EditWatchProc,(LPARAM) watchIndex); + SetFocus(GetDlgItem(hDlg,IDC_WATCHLIST)); + return true; + case IDC_C_WATCH: + rswatches[WatchCount].Address = rswatches[WatchCount].WrongEndian = 0; + rswatches[WatchCount].Size = 'b'; + rswatches[WatchCount].Type = 's'; + DialogBoxParam(hAppInst, MAKEINTRESOURCE(IDD_EDITWATCH), hDlg, (DLGPROC) EditWatchProc,(LPARAM) WatchCount); + SetFocus(GetDlgItem(hDlg,IDC_WATCHLIST)); + return true; + case IDC_C_WATCH_DUPLICATE: + watchIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST)); + rswatches[WatchCount].Address = rswatches[watchIndex].Address; + rswatches[WatchCount].WrongEndian = rswatches[watchIndex].WrongEndian; + rswatches[WatchCount].Size = rswatches[watchIndex].Size; + rswatches[WatchCount].Type = rswatches[watchIndex].Type; + DialogBoxParam(hAppInst, MAKEINTRESOURCE(IDD_EDITWATCH), hDlg, (DLGPROC) EditWatchProc,(LPARAM) WatchCount); + SetFocus(GetDlgItem(hDlg,IDC_WATCHLIST)); + return true; + case IDC_C_WATCH_UP: + { + watchIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST)); + if (watchIndex == 0 || watchIndex == -1) + return true; + void *tmp = malloc(sizeof(AddressWatcher)); + memcpy(tmp,&(rswatches[watchIndex]),sizeof(AddressWatcher)); + memcpy(&(rswatches[watchIndex]),&(rswatches[watchIndex - 1]),sizeof(AddressWatcher)); + memcpy(&(rswatches[watchIndex - 1]),tmp,sizeof(AddressWatcher)); + free(tmp); + ListView_SetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST),watchIndex-1); + ListView_SetItemState(GetDlgItem(hDlg,IDC_WATCHLIST),watchIndex-1,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|LVIS_SELECTED); + ListView_SetItemCount(GetDlgItem(hDlg,IDC_WATCHLIST),WatchCount); + RWfileChanged=true; + return true; + } + case IDC_C_WATCH_DOWN: + { + watchIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST)); + if (watchIndex >= WatchCount - 1 || watchIndex == -1) + return true; + void *tmp = malloc(sizeof(AddressWatcher)); + memcpy(tmp,&(rswatches[watchIndex]),sizeof(AddressWatcher)); + memcpy(&(rswatches[watchIndex]),&(rswatches[watchIndex + 1]),sizeof(AddressWatcher)); + memcpy(&(rswatches[watchIndex + 1]),tmp,sizeof(AddressWatcher)); + free(tmp); + ListView_SetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST),watchIndex+1); + ListView_SetItemState(GetDlgItem(hDlg,IDC_WATCHLIST),watchIndex+1,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|LVIS_SELECTED); + ListView_SetItemCount(GetDlgItem(hDlg,IDC_WATCHLIST),WatchCount); + RWfileChanged=true; + return true; + } + case ID_WATCHES_UPDOWN: + { + int delta = ((LPNMUPDOWN)lParam)->iDelta; + SendMessage(hDlg, WM_COMMAND, delta<0 ? IDC_C_WATCH_UP : IDC_C_WATCH_DOWN,0); + break; + } + case RAMMENU_FILE_AUTOLOAD: + { + AutoRWLoad ^= 1; + CheckMenuItem(ramwatchmenu, RAMMENU_FILE_AUTOLOAD, AutoRWLoad ? MF_CHECKED : MF_UNCHECKED); + break; + } + case RAMMENU_FILE_SAVEWINDOW: + { + RWSaveWindowPos ^=1; + CheckMenuItem(ramwatchmenu, RAMMENU_FILE_SAVEWINDOW, RWSaveWindowPos ? MF_CHECKED : MF_UNCHECKED); + break; + } + case IDC_C_ADDCHEAT: + { + watchIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST)) | (1 << 24); +// DialogBoxParam(hAppInst, MAKEINTRESOURCE(IDD_EDITCHEAT), hDlg, (DLGPROC) EditCheatProc,(LPARAM) searchIndex); + break; + } + case IDOK: + case IDCANCEL: //TODO this immediately activates and closes the window if you uncomment it +/* if (Full_Screen) + { + while (ShowCursor(true) < 0); + while (ShowCursor(false) >= 0); + }*/ +// DialogsOpen--; + RamWatchHWnd = NULL; + DragAcceptFiles(hDlg, FALSE); + EndDialog(hDlg, true); + return true; + default: + if (LOWORD(wParam) >= RW_MENU_FIRST_RECENT_FILE && LOWORD(wParam) < RW_MENU_FIRST_RECENT_FILE+MAX_RECENT_WATCHES) + OpenRWRecentFile(LOWORD(wParam) - RW_MENU_FIRST_RECENT_FILE); + } + break; + + case WM_KEYDOWN: // handle accelerator keys + { + SetFocus(GetDlgItem(hDlg,IDC_WATCHLIST)); + MSG msg; + msg.hwnd = hDlg; + msg.message = uMsg; + msg.wParam = wParam; + msg.lParam = lParam; + if(RamWatchAccels && TranslateAccelerator(hDlg, RamWatchAccels, &msg)) + return true; + } break; + + case WM_CLOSE: +/* if (Full_Screen) + { + while (ShowCursor(true) < 0); + while (ShowCursor(false) >= 0); + }*/ +// DialogsOpen--; + RamWatchHWnd = NULL; + DragAcceptFiles(hDlg, FALSE); + EndDialog(hDlg, true); + return true; + + case WM_DROPFILES: + { + HDROP hDrop = (HDROP)wParam; + DragQueryFile(hDrop, 0, Str_Tmp, 1024); + DragFinish(hDrop); + return Load_Watches(true, Str_Tmp); + } break; + } + + return false; +} + diff --git a/src/windows/ramwatch.h b/src/windows/ramwatch.h new file mode 100644 index 000000000..b8c588d23 --- /dev/null +++ b/src/windows/ramwatch.h @@ -0,0 +1,39 @@ +#ifndef RAMWATCH_H +#define RAMWATCH_H +#include "windows.h" +bool ResetWatches(); +void OpenRWRecentFile(int memwRFileNumber); +extern bool AutoRWLoad; +extern bool RWSaveWindowPos; +#define MAX_RECENT_WATCHES 5 +extern char rw_recent_files[MAX_RECENT_WATCHES][1024]; +extern bool AskSave(); +extern int ramw_x; +extern int ramw_y; +extern bool RWfileChanged; + +// AddressWatcher is self-contained now +struct AddressWatcher +{ + unsigned int Address; // hardware address + char Size; + char Type; + char* comment; // NULL means no comment, non-NULL means allocated comment + bool WrongEndian; + unsigned int CurValue; +}; +#define MAX_WATCH_COUNT 256 +extern AddressWatcher rswatches[MAX_WATCH_COUNT]; +extern int WatchCount; // number of valid items in rswatches + +extern char Watch_Dir[1024]; + +bool InsertWatch(const AddressWatcher& Watch, char *Comment); +bool InsertWatch(const AddressWatcher& Watch, HWND parent=NULL); // asks user for comment +void Update_RAM_Watch(); +bool Load_Watches(bool clear, const char* filename); + +LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +extern HWND RamWatchHWnd; + +#endif diff --git a/src/windows/replay.cpp b/src/windows/replay.cpp new file mode 100644 index 000000000..6a75cc70b --- /dev/null +++ b/src/windows/replay.cpp @@ -0,0 +1,157 @@ +#include +#include "resource.h" +#include "replay.h" +#include "common.h" +#include "main.h" +#include "movie.h" +#include "utils/xstring.h" + +bool replayreadonly=1; + +//adelikat: TODO: put this in one of the header files +template +inline std::wstring GetDlgItemTextW(HWND hDlg, int nIDDlgItem) { + wchar_t buf[BUFSIZE]; + GetDlgItemTextW(hDlg, nIDDlgItem, buf, BUFSIZE); + return buf; +} + +template +inline std::string GetDlgItemText(HWND hDlg, int nIDDlgItem) { + char buf[BUFSIZE]; + GetDlgItemText(hDlg, nIDDlgItem, buf, BUFSIZE); + return buf; +} + + +char playfilename[MAX_PATH] = ""; + +//Replay movie dialog +BOOL CALLBACK ReplayDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + OPENFILENAME ofn; + char szChoice[MAX_PATH]={0}; + char filename[MAX_PATH] = ""; + + switch(uMsg) + { + case WM_INITDIALOG: + SendDlgItemMessage(hwndDlg, IDC_CHECK_READONLY, BM_SETCHECK, replayreadonly?BST_CHECKED:BST_UNCHECKED, 0); + return FALSE; + + case WM_COMMAND: + int wID = LOWORD(wParam); + switch(wID) + { + case ID_BROWSE: + + ZeroMemory(&ofn, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = MainWindow->getHWnd(); + ofn.lpstrFilter = "Desmume Movie File (*.dsm)\0*.dsm\0All files(*.*)\0*.*\0\0"; + ofn.nFilterIndex = 1; + ofn.lpstrFile = filename; + ofn.lpstrTitle = "Replay Movie from File"; + ofn.nMaxFile = MAX_PATH; + ofn.lpstrDefExt = "dsm"; + GetOpenFileName(&ofn); + strcpy(playfilename, filename); + SetDlgItemText(hwndDlg, PM_FILENAME, playfilename); + return true; + + case IDC_CHECK_READONLY: + replayreadonly ^= 1; + return true; + + case IDOK: + FCEUI_LoadMovie(playfilename, replayreadonly, false, 80000); + ZeroMemory(&playfilename, sizeof(playfilename)); + EndDialog(hwndDlg, 0); + return true; + + case IDCANCEL: + ZeroMemory(&playfilename, sizeof(playfilename)); + EndDialog(hwndDlg, 0); + return true; + } + } + + return false; +} + +//Record movie dialog +static BOOL CALLBACK RecordDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + static struct CreateMovieParameters* p = NULL; + std::wstring author = L""; + switch(uMsg) + { + case WM_INITDIALOG: + + return false; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDOK: { + author = GetDlgItemTextW<500>(hwndDlg,IDC_EDIT_AUTHOR); + std::string fname = GetDlgItemText(hwndDlg,IDC_EDIT_FILENAME); + FCEUI_SaveMovie(fname.c_str(), author); + EndDialog(hwndDlg, 0); + return true; + } + + case IDCANCEL: + EndDialog(hwndDlg, 0); + return true; + + case IDC_BUTTON_BROWSEFILE: + { + OPENFILENAME ofn; + char szChoice[MAX_PATH]={0}; + char recordfilename[MAX_PATH]; + + // browse button + ZeroMemory(&ofn, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = MainWindow->getHWnd(); + ofn.lpstrFilter = "Desmume Movie File (*.dsm)\0*.dsm\0All files(*.*)\0*.*\0\0"; + ofn.lpstrFile = szChoice; + ofn.lpstrTitle = "Record a new movie"; + ofn.lpstrDefExt = "dsm"; + ofn.nMaxFile = MAX_PATH; + ofn.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; + GetSaveFileName(&ofn); + strcpy(recordfilename, szChoice); + SetDlgItemText(hwndDlg, IDC_EDIT_FILENAME, recordfilename); + //if(GetSaveFileName(&ofn)) + // UpdateRecordDialogPath(hwndDlg,szChoice); + + return true; + } + + } + + } + + return false; +} + + +//Show the play movie dialog and play a movie +void Replay_LoadMovie() +{ + char* fn = (char*)DialogBoxParam(hAppInst, "IDD_REPLAYINP", GetMainHWND(), ReplayDialogProc, false); + + if(fn) + { + FCEUI_LoadMovie(fn, movie_readonly, false, 100000); + + free(fn); + } +} + +//Show the record movie dialog and record a movie. +void MovieRecordTo() +{ + DialogBoxParam(hAppInst, MAKEINTRESOURCE(IDD_RECORDMOVIE), GetMainHWND(), RecordDialogProc, (LPARAM)0); +} diff --git a/src/windows/replay.h b/src/windows/replay.h new file mode 100644 index 000000000..6a0880b94 --- /dev/null +++ b/src/windows/replay.h @@ -0,0 +1,2 @@ +void Replay_LoadMovie(); +void MovieRecordTo(); diff --git a/src/windows/resource.h b/src/windows/resource.h index 5f26d4430..d93343017 100644 --- a/src/windows/resource.h +++ b/src/windows/resource.h @@ -1,521 +1,628 @@ -#ifndef IDC_STATIC -#define IDC_STATIC (-1) -#endif +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by resources.rc +// +#define IDM_OPEN 101 +#define IDD_RECORDMOVIE 101 +#define IDM_QUIT 102 +#define IDC_FERMER 103 +#define IDD_DESASSEMBLEUR_VIEWER7 103 +#define IDC_STEP 104 +#define IDC_SETPNUM 105 +#define IDC_SCROLLER 106 +#define IDD_SOUNDSETTINGS 106 +#define IDC_GO 107 +#define IDC_AUTO_UPDATE 108 +#define IDM_MEMORY 109 +#define IDM_DISASSEMBLER 110 +#define IDC_AUTO_UPDATE2 111 +#define IDD_3DSETTINGS 111 +#define IDM_GAME_INFO 111 +#define IDD_GBASLOT 113 +#define IDM_PAUSE 113 +#define IDD_GBASLOT_CFLASH 114 +#define IDM_RESET 114 +#define IDD_CHEAT_SEARCH_VIEW 115 +#define IDM_IOREG 115 +#define IDD_CHEAT_LIST 116 +#define IDD_CHEAT_ADD 117 +#define IDM_PAL 117 +#define IDM_TILE 118 +#define IDM_MAP 119 +#define IDM_MBG0 120 +#define IDM_MBG1 121 +#define IDM_MBG2 122 +#define IDM_MBG3 123 +#define IDM_SBG0 124 +#define IDM_SBG1 125 +#define IDM_SBG2 126 +#define IDM_SBG3 127 +#define IDM_OAM 128 +#define IDM_PRINTSCREEN 129 +#define IDM_QUICK_PRINTSCREEN 130 +#define IDM_SOUNDSETTINGS 131 +#define IDM_WEBSITE 132 +#define lala 132 +#define IDM_FORUM 133 +#define IDM_SUBMITBUGREPORT 134 +#define IDM_STATE_LOAD 135 +#define IDM_STATE_SAVE 136 +#define IDR_MAIN_ACCEL 137 +#define IDM_STATE_SAVE_F1 140 +#define IDM_STATE_SAVE_F2 141 +#define IDM_STATE_SAVE_F3 142 +#define IDM_STATE_SAVE_F4 143 +#define IDM_STATE_SAVE_F5 144 +#define IDM_STATE_SAVE_F6 145 +#define IDM_STATE_SAVE_F7 146 +#define IDM_STATE_SAVE_F8 147 +#define IDM_STATE_SAVE_F9 148 +#define IDM_STATE_SAVE_F10 149 +#define IDM_STATE_LOAD_F1 150 +#define IDM_STATE_LOAD_F2 151 +#define IDM_STATE_LOAD_F3 152 +#define IDM_STATE_LOAD_F4 153 +#define IDM_STATE_LOAD_F5 154 +#define IDM_STATE_LOAD_F6 155 +#define IDM_STATE_LOAD_F7 156 +#define IDM_STATE_LOAD_F8 157 +#define IDM_STATE_LOAD_F9 158 +#define IDM_STATE_LOAD_F10 159 +#define IDC_COMBO1 160 +#define IDC_COMBO2 161 +#define IDC_COMBO3 162 +#define IDC_COMBO4 163 +#define IDM_CONFIG 180 +#define IDD_INPUT 181 +#define IDC_SAVETYPE1 182 +#define IDC_SAVETYPE2 183 +#define IDC_SAVETYPE3 184 +#define IDC_SAVETYPE4 185 +#define IDC_SAVETYPE5 186 +#define IDC_SAVETYPE6 187 +#define IDC_FRAMESKIPAUTO 190 +#define IDC_FRAMESKIP0 191 +#define IDC_FRAMESKIP1 192 +#define IDC_FRAMESKIP2 193 +#define IDC_FRAMESKIP3 194 +#define IDC_FRAMESKIP4 195 +#define IDC_FRAMESKIP5 196 +#define IDC_FRAMESKIP6 197 +#define IDC_FRAMESKIP7 198 +#define IDC_FRAMESKIP8 199 +#define IDC_FRAMESKIP9 200 +#define IDC_EDIT_FILENAME 200 +#define IDC_COMBO_FILENAME 200 +#define IDM_IMPORTBACKUPMEMORY 201 +#define IDC_BUTTON_BROWSEFILE 201 +#define IDC_CHECK_READONLY 201 +#define IDC_LANGENGLISH 210 +#define IDC_LANGFRENCH 211 +#define IDC_LANGDANISH 212 +#define IDC_LABEL_LENGTH 300 +#define IDC_COMBO_RECORDFROM 301 +#define IDC_LABEL_FRAMES 301 +#define IDC_8_BIT 302 +#define IDC_LABEL_UNDOCOUNT 302 +#define IDC_16_BIT 303 +#define IDC_32_BIT 304 +#define IDC_LABEL_ROMUSED 304 +#define IDC_LABEL_ROMCHECKSUM 305 +#define IDC_LABEL_RECORDEDFROM 306 +#define IDC_LABEL_EMULATORUSED 307 +#define IDC_LABEL_CURRCHECKSUM 308 +#define IDC_DES_BOX 402 +#define IDC_R0 403 +#define IDC_R1 404 +#define IDC_R2 405 +#define IDC_R3 406 +#define IDC_R4 407 +#define IDC_R5 408 +#define IDC_R6 409 +#define IDC_R7 410 +#define IDC_R8 411 +#define IDC_R9 412 +#define IDC_R10 413 +#define IDC_R11 414 +#define IDC_R12 415 +#define IDC_R13 416 +#define IDC_R14 417 +#define IDC_R15 418 +#define IDC_MODE 419 +#define IDC_AUTO_DES 420 +#define IDC_ARM 421 +#define IDC_THUMB 422 +#define IDC_GOTODES 423 +#define IDC_TMP 424 +#define IDD_GAME_INFO 501 +#define ID_RAM_WATCH 550 +#define IDD_IO_REG 601 +#define IDM_RECORD_MOVIE 602 +#define IDM_PLAY_MOVIE 603 +#define IDD_PAL 703 +#define IDD_TILE 704 +#define IDC_PAL_SELECT 705 +#define IDC_PALNUM 706 +#define IDC_MEM_SELECT 707 +#define IDC_Tile_BOX 708 +#define IDC_BITMAP 709 +#define IDC_256COUL 710 +#define IDC_16COUL 711 +#define IDC_MINI_TILE 712 +#define IDC_TILENUM 713 +#define IDD_MAP 800 +#define IDC_BG_SELECT 801 +#define IDC_PAL 803 +#define IDC_PRIO 804 +#define IDC_CHAR 805 +#define IDC_SCR 806 +#define IDC_MSIZE 807 +#define IDC_SCROLL 808 +#define IDD_OAM 900 +#define IDC_SCR_SELECT 901 +#define IDC_TILE 902 +#define IDC_OAMNUM 903 +#define IDC_COOR 904 +#define IDC_DIM 905 +#define IDC_ROT 906 +#define IDC_MOS 907 +#define IDC_PROP0 908 +#define IDC_PROP1 909 +#define IDD_BGMAP_VIEWER 911 +#define IDB_BGTILES 913 +#define IDD_EMULATIONSETTINGS 916 +#define IDD_WIFISETTINGS 918 +#define IDD_MEM_VIEW 920 +#define IDC_DIFFERENTFROM 921 +#define IDC_DIFFERENTBY 922 +#define IDC_MODULO 923 +#define IDC_EDIT_DIFFBY 924 +#define IDC_EDIT_MODBY 925 +#define IDC_PREVIOUSVALUE 926 +#define IDC_SPECIFICVALUE 927 +#define IDC_NUMBEROFCHANGES 928 +#define IDC_EDIT_COMPAREVALUE 929 +#define IDC_EDIT_COMPARECHANGES 930 +#define IDC_C_AUTOSEARCH 931 +#define IDC_MISALIGN 932 +#define IDC_C_RESET_CHANGES 933 +#define IDC_C_UNDO 934 +#define ID_RAM_SEARCH 935 +#define IDD_RAMSEARCH 945 +#define IDC_SPECIFICADDRESS 950 +#define IDC_EDIT_COMPAREADDRESS 951 +#define IDC_PROMPT_TEXT 952 +#define IDC_PROMPT_EDIT 953 +#define IDC_SIGNED 954 +#define IDC_UNSIGNED 955 +#define IDC_HEX 956 +#define IDC_1_BYTE 957 +#define IDC_2_BYTES 958 +#define IDC_4_BYTES 959 +#define IDC_WATCHLIST 960 +#define IDC_C_WATCH_EDIT 961 +#define IDC_C_WATCH_REMOVE 962 +#define IDC_C_WATCH 963 +#define IDC_C_WATCH_DUPLICATE 964 +#define IDC_C_ADDCHEAT 965 +#define ID_WATCHES_UPDOWN 966 +#define IDD_RAMWATCH 967 +#define IDD_EDITWATCH 980 +#define IDC_C_WATCH_UP 980 +#define IDC_C_WATCH_DOWN 981 +#define RAMMENU_FILE_AUTOLOAD 982 +#define RAMMENU_FILE_SAVEWINDOW 983 +#define RAMMENU_FILE_SAVE 984 +#define RAMMENU_FILE_SAVEAS 985 +#define RAMMENU_FILE_OPEN 986 +#define RAMMENU_FILE_APPEND 987 +#define RAMMENU_FILE_NEW 988 +#define RAMMENU_FILE_RECENT 990 +#define IDC_RAMLIST 991 +#define IDC_C_SEARCH 992 +#define IDC_C_RESET 993 +#define IDC_C_ELIMINATE 994 +#define IDC_LESSTHAN 995 +#define IDC_MORETHAN 996 +#define IDC_NOMORETHAN 997 +#define IDC_NOLESSTHAN 998 +#define IDC_EQUALTO 999 +#define IDC_BGMAP_SEL 1000 +#define IDC_BRIDGEADAPTER 1000 +#define IDC_EDIT03 1000 +#define IDC_SOUNDCORECB 1000 +#define IDC_USEEXTBIOS 1000 +#define ID_BROWSE 1000 +#define IDC_BGMAP_BGXCNT 1001 +#define IDC_CHECKBOX_DEBUGGERMODE 1001 +#define IDC_EDIT01 1001 +#define IDC_SOUNDBUFFERET 1001 +#define PM_FILENAME 1001 +#define IDC_ARM9BIOS 1002 +#define IDC_EDIT05 1002 +#define IDC_SLVOLUME 1002 +#define IDC_CHECK_STOPMOVIE 1002 +#define IDC_BGMAP_TYPE 1003 +#define IDC_EDIT08 1003 +#define IDC_GI_GAMETITLE 1003 +#define IDC_ROTATE0 1003 +#define IDC_EDIT_STOPFRAME 1003 +#define IDC_ARM9BIOSBROWSE 1004 +#define IDC_EDIT11 1004 +#define IDC_GI_GAMECODE 1004 +#define IDC_ROTATE90 1004 +#define IDC_ARM7BIOS 1005 +#define IDC_EDIT07 1005 +#define IDC_ROTATE180 1005 +#define IDC_EDIT12 1006 +#define IDC_ROTATE270 1006 +#define IDC_ARM7BIOSBROWSE 1007 +#define IDC_EDIT06 1007 +#define IDC_EDIT09 1008 +#define IDC_MEMVIEWBOX 1008 +#define IDC_ADDRESS 1009 +#define IDC_BIOSSWIS 1009 +#define IDC_EDIT10 1009 +#define IDC_FORCERATIO 1009 +#define IDC_AUTO_UPDATE_SPIN 1010 +#define IDC_EDIT15 1010 +#define IDC_TEXTDUMP 1010 +#define IDC_WINDOW1X 1010 +#define IDC_AUTO_UPDATE_SECS 1011 +#define IDC_USEEXTFIRMWARE 1011 +#define IDC_WINDOW2X 1011 +#define IDC_FIRMWARE 1012 +#define IDC_RAWDUMP 1012 +#define IDC_REFRESH 1012 +#define IDC_WINDOW3X 1012 +#define IDC_EDIT02 1013 +#define IDC_WINDOW4X 1013 +#define IDC_EDIT04 1014 +#define IDC_FIRMWAREBROWSE 1014 +#define IDC_BGMAP_CHARBASE 1016 +#define IDC_FIRMWAREBOOT 1016 +#define IDC_BGMAP_SCRBASE 1017 +#define IDC_AUTOUPDATE_ASM 1018 +#define IDC_BGMAP_PRIO 1018 +#define IDC_BGMAP_PAL 1019 +#define IDC_VISIBLE 1019 +#define IDC_BGMAP_SIZE 1020 +#define IDC_IPCFIFO9 1020 +#define IDC_BGMAP_SCROLL 1021 +#define IDC_IPCSYNC9 1021 +#define IDC_IF9 1022 +#define IDC_INTHAND9 1023 +#define IDC_IE9 1024 +#define IDC_BGMAP_MOSAIC 1025 +#define IDC_DISPCNTA9 1025 +#define IDC_BGMAP_SPECEFF 1026 +#define IDC_DISPSTATA9 1026 +#define IDC_BGMAP_WINDOWS 1027 +#define IDC_DEFAULT 1027 +#define IDC_DISPCNTB9 1027 +#define IDC_3DCORE 1028 +#define IDC_DISPSTATB9 1028 +#define IDC_IME9 1029 +#define IDC_TXT_COMPILED 1029 +#define IDC_GXSTAT9 1030 +#define IDC_TXT_VERSION 1030 +#define IDC_IE7 1032 +#define IDC_ADDONS_LIST 1033 +#define IDC_IF7 1033 +#define IDC_ADDONS_INFO 1034 +#define IDC_IME7 1034 +#define IDC_BBROWSE 1035 +#define IDC_IPCSYNC7 1035 +#define IDC_IPCFIFO7 1036 +#define IDC_PATHIMG 1036 +#define IDC_PATH 1037 +#define IDC_PATHGAME 1037 +#define IDC_RFILE 1038 +#define IDC_RFOLDER 1039 +#define IDC_BBROWSE2 1040 +#define IDC_PATHDESMUME 1041 +#define IDC_BRESTART 1042 +#define IDC_BVIEW 1043 +#define IDC_BSEARCH 1044 +#define IDC_RADIO1 1045 +#define IDC_RADIO2 1046 +#define IDC_RADIO3 1047 +#define IDC_RADIO4 1048 +#define IDC_RADIO5 1049 +#define IDC_RADIO6 1050 +#define IDC_RADIO7 1051 +#define IDC_RADIO8 1052 +#define IDC_LIST1 1056 +#define IDC_BADD_AR 1057 +#define IDC_BADD_CB 1058 +#define IDC_BREMOVE 1060 +#define IDC_BEDIT 1061 +#define IDC_STATIC_S1 1061 +#define IDC_STATIC_S2 1062 +#define IDC_STATIC_S3 1063 +#define IDC_STATIC_S4 1064 +#define IDC_EVALUE 1065 +#define IDC_STATIC_RANGE 1066 +#define IDC_BADD 1068 +#define IDC_LIST 1069 +#define IDC_SNUMBER 1071 +#define IDC_CHECK1 1074 +#define IDM_FIRMSETTINGS 1100 +#define IDD_FIRMSETTINGS 1101 +#define IDC_EDIT1 1102 +#define IDC_EDIT2 1103 +#define IDC_EDIT13 1104 +#define IDC_EDIT3 1104 +#define IDC_EDIT14 1105 +#define IDC_BUTTON_METADATA 1132 +#define IDC_EDIT_AUTHOR 1180 +#define IDD_MATRIX_VIEWER 1200 +#define IDM_MATRIX_VIEWER 1200 +#define IDC_MATRIX_VIEWER_COORD_GROUP 1201 +#define IDC_MATRIX_VIEWER_COORD_COMBO 1202 +#define IDC_MATRIX_VIEWER_COORD_11_EDIT 1203 +#define IDC_MATRIX_VIEWER_COORD_12_EDIT 1204 +#define IDC_MATRIX_VIEWER_COORD_13_EDIT 1205 +#define IDC_MATRIX_VIEWER_COORD_14_EDIT 1206 +#define IDC_MATRIX_VIEWER_COORD_21_EDIT 1207 +#define IDC_MATRIX_VIEWER_COORD_22_EDIT 1208 +#define IDC_MATRIX_VIEWER_COORD_23_EDIT 1209 +#define IDC_MATRIX_VIEWER_COORD_24_EDIT 1210 +#define IDC_MATRIX_VIEWER_COORD_31_EDIT 1211 +#define IDC_MATRIX_VIEWER_COORD_32_EDIT 1212 +#define IDC_MATRIX_VIEWER_COORD_33_EDIT 1213 +#define IDC_MATRIX_VIEWER_COORD_34_EDIT 1214 +#define IDC_MATRIX_VIEWER_COORD_41_EDIT 1215 +#define IDC_MATRIX_VIEWER_COORD_42_EDIT 1216 +#define IDC_MATRIX_VIEWER_COORD_43_EDIT 1217 +#define IDC_MATRIX_VIEWER_COORD_44_EDIT 1218 +#define IDC_MATRIX_VIEWER_DIR_GROUP 1221 +#define IDC_MATRIX_VIEWER_DIR_COMBO 1222 +#define IDC_MATRIX_VIEWER_DIR_11_EDIT 1223 +#define IDC_MATRIX_VIEWER_DIR_12_EDIT 1224 +#define IDC_MATRIX_VIEWER_DIR_13_EDIT 1225 +#define IDC_MATRIX_VIEWER_DIR_14_EDIT 1226 +#define IDC_MATRIX_VIEWER_DIR_21_EDIT 1227 +#define IDC_MATRIX_VIEWER_DIR_22_EDIT 1228 +#define IDC_MATRIX_VIEWER_DIR_23_EDIT 1229 +#define IDC_MATRIX_VIEWER_DIR_24_EDIT 1230 +#define IDC_MATRIX_VIEWER_DIR_31_EDIT 1231 +#define IDC_MATRIX_VIEWER_DIR_32_EDIT 1232 +#define IDC_MATRIX_VIEWER_DIR_33_EDIT 1233 +#define IDC_MATRIX_VIEWER_DIR_34_EDIT 1234 +#define IDC_MATRIX_VIEWER_DIR_41_EDIT 1235 +#define IDC_MATRIX_VIEWER_DIR_42_EDIT 1236 +#define IDC_MATRIX_VIEWER_DIR_43_EDIT 1237 +#define IDC_MATRIX_VIEWER_DIR_44_EDIT 1238 +#define IDC_MATRIX_VIEWER_PROJ_GROUP 1241 +#define IDC_MATRIX_VIEWER_PROJ_11_EDIT 1243 +#define IDC_MATRIX_VIEWER_PROJ_12_EDIT 1244 +#define IDC_MATRIX_VIEWER_PROJ_13_EDIT 1245 +#define IDC_MATRIX_VIEWER_PROJ_14_EDIT 1246 +#define IDC_MATRIX_VIEWER_PROJ_21_EDIT 1247 +#define IDC_MATRIX_VIEWER_PROJ_22_EDIT 1248 +#define IDC_MATRIX_VIEWER_PROJ_23_EDIT 1249 +#define IDC_MATRIX_VIEWER_PROJ_24_EDIT 1250 +#define IDC_MATRIX_VIEWER_PROJ_31_EDIT 1251 +#define IDC_MATRIX_VIEWER_PROJ_32_EDIT 1252 +#define IDC_MATRIX_VIEWER_PROJ_33_EDIT 1253 +#define IDC_MATRIX_VIEWER_PROJ_34_EDIT 1254 +#define IDC_MATRIX_VIEWER_PROJ_41_EDIT 1255 +#define IDC_MATRIX_VIEWER_PROJ_42_EDIT 1256 +#define IDC_MATRIX_VIEWER_PROJ_43_EDIT 1257 +#define IDC_MATRIX_VIEWER_PROJ_44_EDIT 1258 +#define IDC_MATRIX_VIEWER_TEX_GROUP 1261 +#define IDC_MATRIX_VIEWER_TEX_11_EDIT 1263 +#define IDC_MATRIX_VIEWER_TEX_12_EDIT 1264 +#define IDC_MATRIX_VIEWER_TEX_13_EDIT 1265 +#define IDC_MATRIX_VIEWER_TEX_14_EDIT 1266 +#define IDC_MATRIX_VIEWER_TEX_21_EDIT 1267 +#define IDC_MATRIX_VIEWER_TEX_22_EDIT 1268 +#define IDC_MATRIX_VIEWER_TEX_23_EDIT 1269 +#define IDC_MATRIX_VIEWER_TEX_24_EDIT 1270 +#define IDC_MATRIX_VIEWER_TEX_31_EDIT 1271 +#define IDC_MATRIX_VIEWER_TEX_32_EDIT 1272 +#define IDC_MATRIX_VIEWER_TEX_33_EDIT 1273 +#define IDC_MATRIX_VIEWER_TEX_34_EDIT 1274 +#define IDC_MATRIX_VIEWER_TEX_41_EDIT 1275 +#define IDC_MATRIX_VIEWER_TEX_42_EDIT 1276 +#define IDC_MATRIX_VIEWER_TEX_43_EDIT 1277 +#define IDC_MATRIX_VIEWER_TEX_44_EDIT 1278 +#define IDD_LIGHT_VIEWER 1300 +#define IDM_LIGHT_VIEWER 1300 +#define IDC_LIGHT_VIWER_LIGHT0_GROUP 1301 +#define IDD_ABOUT_BOX 1301 +#define IDC_AUTHORS_LIST 1302 +#define IDC_LIGHT_VIEWER_LIGHT0COLOR_COLORCTRL 1302 +#define IDD_DESASSEMBLEUR_VIEWER9 1302 +#define IDC_LIGHT_VIEWER_LIGHT0COLOR_EDIT 1303 +#define IDC_LIGHT_VIEWER_LIGHT0VECTOR_EDIT 1304 +#define IDD_GBASLOT_NONE 1304 +#define IDD_GBASLOT_RUMBLEPAK 1305 +#define IDD_GBASLOT_GBAGAME 1306 +#define IDD_CHEAT_SEARCH_COMP 1307 +#define IDD_CHEAT_SEARCH_MAIN 1308 +#define IDD_CHEAT_SEARCH_RESULT 1310 +#define IDC_LIGHT_VIWER_LIGHT1_GROUP 1311 +#define IDD_CHEAT_SEARCH_EXACT 1311 +#define IDC_LIGHT_VIEWER_LIGHT1COLOR_COLORCTRL 1312 +#define IDD_CHEAT_SEARCH 1312 +#define IDC_LIGHT_VIEWER_LIGHT1COLOR_EDIT 1313 +#define IDD_CHEAT_ADD_AR_CODE 1313 +#define IDC_LIGHT_VIEWER_LIGHT1VECTOR_EDIT 1314 +#define IDD_CHEAT_ADD_BC_CODE 1314 +#define IDC_LIGHT_VIWER_LIGHT2_GROUP 1321 +#define IDC_LIGHT_VIEWER_LIGHT2COLOR_COLORCTRL 1322 +#define IDC_LIGHT_VIEWER_LIGHT2COLOR_EDIT 1323 +#define IDC_LIGHT_VIEWER_LIGHT2VECTOR_EDIT 1324 +#define IDC_LIGHT_VIWER_LIGHT3_GROUP 1331 +#define IDC_LIGHT_VIEWER_LIGHT3COLOR_COLORCTRL 1332 +#define IDC_LIGHT_VIEWER_LIGHT3COLOR_EDIT 1333 +#define IDC_LIGHT_VIEWER_LIGHT3VECTOR_EDIT 1334 +#define IDC_GI_FATOFS 4464 +#define IDC_INTERPOLATECOLOR 4464 +#define IDC_GI_FATSIZE 4465 +#define IDC_GI_ICONTITLEOFS 4466 +#define IDC_GI_USEDROMSIZE 4467 +#define IDC_GI_ICON 4469 +#define IDC_GI_TITLE 4470 +#define IDC_GI_TITLEEN 4471 +#define IDC_GI_TITLEFR 4472 +#define IDC_GI_TITLEGE 4473 +#define IDC_GI_TITLEIT 4474 +#define IDC_GI_TITLESP 4475 +#define IDC_GI_MAKERCODE 4476 +#define IDC_GI_TITLEJP 4477 +#define IDC_GI_CHIPSIZE 4478 +#define IDC_GI_ARM9START 4479 +#define IDC_GI_ARM9ENTRY 4480 +#define IDC_GI_ARM9ROM 4481 +#define IDC_GI_ARM9SIZE 4482 +#define IDC_GI_ARM7ROM 4483 +#define IDC_GI_ARM7ENTRY 4484 +#define IDC_GI_ARM7START 4485 +#define IDC_GI_ARM7SIZE 4486 +#define IDC_GI_FNTOFS 4487 +#define IDC_GI_FNTSIZE 4488 +#define IDD_MICROPHONE 5000 +#define IDM_MICROPHONESETTINGS 5001 +#define IDC_MICSAMPLEBROWSE 5003 +#define IDC_MICSAMPLE 5004 +#define IDC_USEMICSAMPLE 5005 +#define IDM_SCREENSEP_NONE 40000 +#define IDM_SCREENSEP_BORDER 40001 +#define IDM_SCREENSEP_NDSGAP 40002 +#define IDM_ABOUT 40003 +#define IDM_EMULATIONSETTINGS 40004 +#define IDC_FRAMELIMIT 40005 +#define IDC_WINDOW1_5X 40006 +#define IDM_WIFISETTINGS 40007 +#define ID_VIEW_FRAMECOUNTER 40009 +#define ID_VIEW_DISPLAYFPS 40010 +#define ID_VIEW_DISPLAYINPUT 40011 +#define ID_VIEW_DISPLAYLAG 40012 +#define ID_VIEW_HUDEDITOR 40013 +#define ID_VIEW_DISPLAYMICROPHONE 40014 +#define IDM_FILE_RECORDAVI 40015 +#define IDM_FILE_STOPAVI 40016 +#define ID_QUICKRECORD 40017 +#define ID_QUICKPLAY 40018 +#define IDM_STOPMOVIE 40019 +#define ID_FILE_RECENTROM 40034 +#define IDC_SAVETYPE7 40037 +#define IDM_DEFSIZE 40038 +#define IDM_3DCONFIG 40040 +#define IDM_GBASLOT 40042 +#define IDM_CHEATS_LIST 40050 +#define IDC_BGMAP_ROTSCALEPARAMS 40051 +#define IDM_CHEATS_SEARCH 40051 +#define IDC_BGMAP_ROTSCALE 40052 +#define IDM_SHUT_UP 40053 +#define IDC_LABEL_UP 50000 +#define IDC_LABEL_RIGHT 50001 +#define IDC_LABEL_LEFT 50002 +#define IDC_LABEL_DOWN 50003 +#define IDC_LABEL_A 50004 +#define IDC_LABEL_X 50005 +#define IDC_LABEL_B 50006 +#define IDC_LABEL_Y 50007 +#define IDC_LABEL_L 50008 +#define IDC_LABEL_START 50009 +#define IDC_LABEL_R 50010 +#define IDC_LABEL_SELECT 50011 +#define IDC_LABEL_UPLEFT 50012 +#define IDC_LABEL_DOWNRIGHT 50013 +#define IDC_LABEL_UPRIGHT 50014 +#define IDC_LABEL_DOWNLEFT 50015 +#define IDC_ALLOWLEFTRIGHT 50016 +#define IDC_LABEL_X3 50017 +#define IDC_LABEL_X2 50018 +#define IDC_DEBUG 50019 +#define IDC_UP 50020 +#define IDC_LEFT 50021 +#define IDC_DOWN 50022 +#define IDC_RIGHT 50023 +#define IDC_B 50024 +#define IDC_A 50025 +#define IDC_Y 50026 +#define IDC_X 50027 +#define IDC_START 50028 +#define IDC_SELECT 50029 +#define IDC_L 50030 +#define IDC_R 50031 +#define IDC_UPLEFT 50032 +#define IDC_UPRIGHT 50033 +#define IDC_DWNRIGHT 50034 +#define IDC_DWNLEFT 50035 +#define IDC_LABEL_BLUE 50036 +#define IDC_LID 50037 +#define IDD_INPUTCONFIG 50038 +#define IDC_LABEL_HK1 60001 +#define IDC_LABEL_HK2 60002 +#define IDC_LABEL_HK3 60003 +#define IDC_LABEL_HK4 60004 +#define IDC_LABEL_HK5 60005 +#define IDC_LABEL_HK6 60006 +#define IDC_LABEL_HK7 60007 +#define IDC_LABEL_HK8 60008 +#define IDC_LABEL_HK9 60009 +#define IDC_HOTKEY1 60011 +#define IDC_HOTKEY2 60012 +#define IDC_HOTKEY3 60013 +#define IDC_HOTKEY4 60014 +#define IDC_HOTKEY5 60015 +#define IDC_HOTKEY6 60016 +#define IDC_HOTKEY7 60017 +#define IDC_HOTKEY8 60018 +#define IDC_HOTKEY9 60019 +#define IDC_HOTKEY10 60020 +#define IDC_HOTKEY11 60021 +#define IDC_HOTKEY12 60022 +#define IDC_HOTKEY13 60023 +#define IDC_HOTKEY14 60024 +#define IDC_HOTKEY15 60025 +#define IDC_HOTKEY16 60026 +#define IDC_HOTKEY17 60027 +#define IDC_HOTKEY18 60028 +#define IDC_HOTKEY19 60029 +#define IDC_HOTKEY20 60030 +#define IDC_LABEL_HK10 60031 +#define IDC_LABEL_HK11 60032 +#define IDC_LABEL_HK12 60033 +#define IDC_LABEL_HK13 60034 +#define IDC_LABEL_HK14 60035 +#define IDC_LABEL_HK15 60036 +#define IDC_LABEL_HK16 60037 +#define IDC_LABEL_HK17 60038 +#define IDC_LABEL_HK19 60040 +#define IDC_LABEL_HK20 60041 +#define IDC_LABEL_HK18 60049 +#define IDC_HKCOMBO 60077 +#define IDD_KEYCUSTOM 60078 +#define IDM_HOTKEY_CONFIG 60079 +#define IDM_RECENT_RESERVED0 65500 +#define IDM_RECENT_RESERVED1 65501 +#define IDM_RECENT_RESERVED2 65502 +#define IDM_RECENT_RESERVED3 65503 +#define IDM_RECENT_RESERVED4 65504 +#define IDM_RECENT_RESERVED5 65505 +#define IDM_RECENT_RESERVED6 65506 +#define IDM_RECENT_RESERVED7 65507 +#define IDM_RECENT_RESERVED8 65508 +#define IDM_RECENT_RESERVED9 65509 +#define IDM_RECENT_RESERVED10 65510 +#define IDM_RECENT_RESERVED11 65511 +#define IDM_RECENT_RESERVED12 65512 +#define IDM_RECENT_RESERVED13 65513 +#define IDC_STATIC -1 -#define IDM_OPEN 101 -#define IDM_QUIT 102 -#define IDC_FERMER 103 -#define IDD_DESASSEMBLEUR_VIEWER7 103 -#define IDC_STEP 104 -#define IDC_SETPNUM 105 -#define IDC_SCROLLER 106 -#define IDD_SOUNDSETTINGS 106 -#define IDC_GO 107 -#define IDC_AUTO_UPDATE 108 -#define IDM_MEMORY 109 -#define IDM_DISASSEMBLER 110 -#define IDC_AUTO_UPDATE2 111 -#define IDD_3DSETTINGS 111 -#define IDM_GAME_INFO 111 -#define IDD_GBASLOT 113 -#define IDM_PAUSE 113 -#define IDD_GBASLOT_CFLASH 114 -#define IDM_RESET 114 -#define IDD_CHEAT_SEARCH_VIEW 115 -#define IDM_IOREG 115 -#define IDD_CHEAT_LIST 116 -#define IDD_CHEAT_ADD 117 -#define IDM_PAL 117 -#define IDM_TILE 118 -#define IDM_MAP 119 -#define IDM_MBG0 120 -#define IDM_MBG1 121 -#define IDM_MBG2 122 -#define IDM_MBG3 123 -#define IDM_SBG0 124 -#define IDM_SBG1 125 -#define IDM_SBG2 126 -#define IDM_SBG3 127 -#define IDM_OAM 128 -#define IDM_PRINTSCREEN 129 -#define IDM_QUICK_PRINTSCREEN 130 -#define IDM_SOUNDSETTINGS 131 -#define IDM_WEBSITE 132 -#define IDM_FORUM 133 -#define IDM_SUBMITBUGREPORT 134 -#define IDM_STATE_LOAD 135 -#define IDM_STATE_SAVE 136 -#define IDR_MAIN_ACCEL 137 -#define IDM_STATE_SAVE_F1 140 -#define IDM_STATE_SAVE_F2 141 -#define IDM_STATE_SAVE_F3 142 -#define IDM_STATE_SAVE_F4 143 -#define IDM_STATE_SAVE_F5 144 -#define IDM_STATE_SAVE_F6 145 -#define IDM_STATE_SAVE_F7 146 -#define IDM_STATE_SAVE_F8 147 -#define IDM_STATE_SAVE_F9 148 -#define IDM_STATE_SAVE_F10 149 -#define IDM_STATE_LOAD_F1 150 -#define IDM_STATE_LOAD_F2 151 -#define IDM_STATE_LOAD_F3 152 -#define IDM_STATE_LOAD_F4 153 -#define IDM_STATE_LOAD_F5 154 -#define IDM_STATE_LOAD_F6 155 -#define IDM_STATE_LOAD_F7 156 -#define IDM_STATE_LOAD_F8 157 -#define IDM_STATE_LOAD_F9 158 -#define IDM_STATE_LOAD_F10 159 -#define IDC_COMBO1 160 -#define IDC_COMBO2 161 -#define IDC_COMBO3 162 -#define IDC_COMBO4 163 -#define IDM_CONFIG 180 -#define IDD_INPUT 181 -#define IDC_SAVETYPE1 182 -#define IDC_SAVETYPE2 183 -#define IDC_SAVETYPE3 184 -#define IDC_SAVETYPE4 185 -#define IDC_SAVETYPE5 186 -#define IDC_SAVETYPE6 187 -#define IDC_FRAMESKIPAUTO 190 -#define IDC_FRAMESKIP0 191 -#define IDC_FRAMESKIP1 192 -#define IDC_FRAMESKIP2 193 -#define IDC_FRAMESKIP3 194 -#define IDC_FRAMESKIP4 195 -#define IDC_FRAMESKIP5 196 -#define IDC_FRAMESKIP6 197 -#define IDC_FRAMESKIP7 198 -#define IDC_FRAMESKIP8 199 -#define IDC_FRAMESKIP9 200 -#define IDM_IMPORTBACKUPMEMORY 201 -#define IDC_LANGENGLISH 210 -#define IDC_LANGFRENCH 211 -#define IDC_LANGDANISH 212 -#define IDC_8_BIT 302 -#define IDC_16_BIT 303 -#define IDC_32_BIT 304 -#define IDC_DES_BOX 402 -#define IDC_R0 403 -#define IDC_R1 404 -#define IDC_R2 405 -#define IDC_R3 406 -#define IDC_R4 407 -#define IDC_R5 408 -#define IDC_R6 409 -#define IDC_R7 410 -#define IDC_R8 411 -#define IDC_R9 412 -#define IDC_R10 413 -#define IDC_R11 414 -#define IDC_R12 415 -#define IDC_R13 416 -#define IDC_R14 417 -#define IDC_R15 418 -#define IDC_MODE 419 -#define IDC_AUTO_DES 420 -#define IDC_ARM 421 -#define IDC_THUMB 422 -#define IDC_GOTODES 423 -#define IDC_TMP 424 -#define IDD_GAME_INFO 501 -#define IDD_IO_REG 601 -#define IDD_PAL 703 -#define IDD_TILE 704 -#define IDC_PAL_SELECT 705 -#define IDC_PALNUM 706 -#define IDC_MEM_SELECT 707 -#define IDC_Tile_BOX 708 -#define IDC_BITMAP 709 -#define IDC_256COUL 710 -#define IDC_16COUL 711 -#define IDC_MINI_TILE 712 -#define IDC_TILENUM 713 -#define IDD_MAP 800 -#define IDC_BG_SELECT 801 -#define IDC_PAL 803 -#define IDC_PRIO 804 -#define IDC_CHAR 805 -#define IDC_SCR 806 -#define IDC_MSIZE 807 -#define IDC_SCROLL 808 -#define IDD_OAM 900 -#define IDC_SCR_SELECT 901 -#define IDC_TILE 902 -#define IDC_OAMNUM 903 -#define IDC_COOR 904 -#define IDC_DIM 905 -#define IDC_ROT 906 -#define IDC_MOS 907 -#define IDC_PROP0 908 -#define IDC_PROP1 909 -#define IDD_BGMAP_VIEWER 911 -#define IDB_BGTILES 913 -#define IDD_EMULATIONSETTINGS 916 -#define IDD_WIFISETTINGS 918 -#define IDD_MEM_VIEW 920 -#define IDC_BGMAP_SEL 1000 -#define IDC_BRIDGEADAPTER 1000 -#define IDC_EDIT03 1000 -#define IDC_SOUNDCORECB 1000 -#define IDC_USEEXTBIOS 1000 -#define IDC_BGMAP_BGXCNT 1001 -#define IDC_CHECKBOX_DEBUGGERMODE 1001 -#define IDC_EDIT01 1001 -#define IDC_SOUNDBUFFERET 1001 -#define IDC_ARM9BIOS 1002 -#define IDC_EDIT05 1002 -#define IDC_SLVOLUME 1002 -#define IDC_BGMAP_TYPE 1003 -#define IDC_EDIT08 1003 -#define IDC_GI_GAMETITLE 1003 -#define IDC_ROTATE0 1003 -#define IDC_ARM9BIOSBROWSE 1004 -#define IDC_EDIT11 1004 -#define IDC_GI_GAMECODE 1004 -#define IDC_ROTATE90 1004 -#define IDC_ARM7BIOS 1005 -#define IDC_EDIT07 1005 -#define IDC_ROTATE180 1005 -#define IDC_EDIT12 1006 -#define IDC_ROTATE270 1006 -#define IDC_ARM7BIOSBROWSE 1007 -#define IDC_EDIT06 1007 -#define IDC_EDIT09 1008 -#define IDC_MEMVIEWBOX 1008 -#define IDC_ADDRESS 1009 -#define IDC_BIOSSWIS 1009 -#define IDC_EDIT10 1009 -#define IDC_FORCERATIO 1009 -#define IDC_AUTO_UPDATE_SPIN 1010 -#define IDC_EDIT15 1010 -#define IDC_TEXTDUMP 1010 -#define IDC_WINDOW1X 1010 -#define IDC_AUTO_UPDATE_SECS 1011 -#define IDC_USEEXTFIRMWARE 1011 -#define IDC_WINDOW2X 1011 -#define IDC_FIRMWARE 1012 -#define IDC_RAWDUMP 1012 -#define IDC_REFRESH 1012 -#define IDC_WINDOW3X 1012 -#define IDC_EDIT02 1013 -#define IDC_WINDOW4X 1013 -#define IDC_EDIT04 1014 -#define IDC_FIRMWAREBROWSE 1014 -#define IDC_BGMAP_CHARBASE 1016 -#define IDC_FIRMWAREBOOT 1016 -#define IDC_BGMAP_SCRBASE 1017 -#define IDC_AUTOUPDATE_ASM 1018 -#define IDC_BGMAP_PRIO 1018 -#define IDC_BGMAP_PAL 1019 -#define IDC_VISIBLE 1019 -#define IDC_BGMAP_SIZE 1020 -#define IDC_IPCFIFO9 1020 -#define IDC_BGMAP_SCROLL 1021 -#define IDC_IPCSYNC9 1021 -#define IDC_IF9 1022 -#define IDC_INTHAND9 1023 -#define IDC_IE9 1024 -#define IDC_BGMAP_MOSAIC 1025 -#define IDC_DISPCNTA9 1025 -#define IDC_BGMAP_SPECEFF 1026 -#define IDC_DISPSTATA9 1026 -#define IDC_BGMAP_WINDOWS 1027 -#define IDC_DEFAULT 1027 -#define IDC_DISPCNTB9 1027 -#define IDC_3DCORE 1028 -#define IDC_DISPSTATB9 1028 -#define IDC_IME9 1029 -#define IDC_TXT_COMPILED 1029 -#define IDC_GXSTAT9 1030 -#define IDC_TXT_VERSION 1030 -#define IDC_IE7 1032 -#define IDC_ADDONS_LIST 1033 -#define IDC_IF7 1033 -#define IDC_ADDONS_INFO 1034 -#define IDC_IME7 1034 -#define IDC_BBROWSE 1035 -#define IDC_IPCSYNC7 1035 -#define IDC_IPCFIFO7 1036 -#define IDC_PATHIMG 1036 -#define IDC_PATH 1037 -#define IDC_PATHGAME 1037 -#define IDC_RFILE 1038 -#define IDC_RFOLDER 1039 -#define IDC_BBROWSE2 1040 -#define IDC_PATHDESMUME 1041 -#define IDC_BRESTART 1042 -#define IDC_BVIEW 1043 -#define IDC_BSEARCH 1044 -#define IDC_RADIO1 1045 -#define IDC_RADIO2 1046 -#define IDC_RADIO3 1047 -#define IDC_RADIO4 1048 -#define IDC_RADIO5 1049 -#define IDC_RADIO6 1050 -#define IDC_RADIO7 1051 -#define IDC_RADIO8 1052 -#define IDC_LIST1 1056 -#define IDC_BADD_AR 1057 -#define IDC_BADD_CB 1058 -#define IDC_BREMOVE 1060 -#define IDC_BEDIT 1061 -#define IDC_STATIC_S1 1061 -#define IDC_STATIC_S2 1062 -#define IDC_STATIC_S3 1063 -#define IDC_STATIC_S4 1064 -#define IDC_EVALUE 1065 -#define IDC_STATIC_RANGE 1066 -#define IDC_BADD 1068 -#define IDC_LIST 1069 -#define IDC_SNUMBER 1071 -#define IDC_CHECK1 1074 -#define IDM_FIRMSETTINGS 1100 -#define IDD_FIRMSETTINGS 1101 -#define IDC_EDIT1 1102 -#define IDC_EDIT2 1103 -#define IDC_EDIT13 1104 -#define IDC_EDIT3 1104 -#define IDC_EDIT14 1105 -#define IDD_MATRIX_VIEWER 1200 -#define IDM_MATRIX_VIEWER 1200 -#define IDC_MATRIX_VIEWER_COORD_GROUP 1201 -#define IDC_MATRIX_VIEWER_COORD_COMBO 1202 -#define IDC_MATRIX_VIEWER_COORD_11_EDIT 1203 -#define IDC_MATRIX_VIEWER_COORD_12_EDIT 1204 -#define IDC_MATRIX_VIEWER_COORD_13_EDIT 1205 -#define IDC_MATRIX_VIEWER_COORD_14_EDIT 1206 -#define IDC_MATRIX_VIEWER_COORD_21_EDIT 1207 -#define IDC_MATRIX_VIEWER_COORD_22_EDIT 1208 -#define IDC_MATRIX_VIEWER_COORD_23_EDIT 1209 -#define IDC_MATRIX_VIEWER_COORD_24_EDIT 1210 -#define IDC_MATRIX_VIEWER_COORD_31_EDIT 1211 -#define IDC_MATRIX_VIEWER_COORD_32_EDIT 1212 -#define IDC_MATRIX_VIEWER_COORD_33_EDIT 1213 -#define IDC_MATRIX_VIEWER_COORD_34_EDIT 1214 -#define IDC_MATRIX_VIEWER_COORD_41_EDIT 1215 -#define IDC_MATRIX_VIEWER_COORD_42_EDIT 1216 -#define IDC_MATRIX_VIEWER_COORD_43_EDIT 1217 -#define IDC_MATRIX_VIEWER_COORD_44_EDIT 1218 -#define IDC_MATRIX_VIEWER_DIR_GROUP 1221 -#define IDC_MATRIX_VIEWER_DIR_COMBO 1222 -#define IDC_MATRIX_VIEWER_DIR_11_EDIT 1223 -#define IDC_MATRIX_VIEWER_DIR_12_EDIT 1224 -#define IDC_MATRIX_VIEWER_DIR_13_EDIT 1225 -#define IDC_MATRIX_VIEWER_DIR_14_EDIT 1226 -#define IDC_MATRIX_VIEWER_DIR_21_EDIT 1227 -#define IDC_MATRIX_VIEWER_DIR_22_EDIT 1228 -#define IDC_MATRIX_VIEWER_DIR_23_EDIT 1229 -#define IDC_MATRIX_VIEWER_DIR_24_EDIT 1230 -#define IDC_MATRIX_VIEWER_DIR_31_EDIT 1231 -#define IDC_MATRIX_VIEWER_DIR_32_EDIT 1232 -#define IDC_MATRIX_VIEWER_DIR_33_EDIT 1233 -#define IDC_MATRIX_VIEWER_DIR_34_EDIT 1234 -#define IDC_MATRIX_VIEWER_DIR_41_EDIT 1235 -#define IDC_MATRIX_VIEWER_DIR_42_EDIT 1236 -#define IDC_MATRIX_VIEWER_DIR_43_EDIT 1237 -#define IDC_MATRIX_VIEWER_DIR_44_EDIT 1238 -#define IDC_MATRIX_VIEWER_PROJ_GROUP 1241 -#define IDC_MATRIX_VIEWER_PROJ_11_EDIT 1243 -#define IDC_MATRIX_VIEWER_PROJ_12_EDIT 1244 -#define IDC_MATRIX_VIEWER_PROJ_13_EDIT 1245 -#define IDC_MATRIX_VIEWER_PROJ_14_EDIT 1246 -#define IDC_MATRIX_VIEWER_PROJ_21_EDIT 1247 -#define IDC_MATRIX_VIEWER_PROJ_22_EDIT 1248 -#define IDC_MATRIX_VIEWER_PROJ_23_EDIT 1249 -#define IDC_MATRIX_VIEWER_PROJ_24_EDIT 1250 -#define IDC_MATRIX_VIEWER_PROJ_31_EDIT 1251 -#define IDC_MATRIX_VIEWER_PROJ_32_EDIT 1252 -#define IDC_MATRIX_VIEWER_PROJ_33_EDIT 1253 -#define IDC_MATRIX_VIEWER_PROJ_34_EDIT 1254 -#define IDC_MATRIX_VIEWER_PROJ_41_EDIT 1255 -#define IDC_MATRIX_VIEWER_PROJ_42_EDIT 1256 -#define IDC_MATRIX_VIEWER_PROJ_43_EDIT 1257 -#define IDC_MATRIX_VIEWER_PROJ_44_EDIT 1258 -#define IDC_MATRIX_VIEWER_TEX_GROUP 1261 -#define IDC_MATRIX_VIEWER_TEX_11_EDIT 1263 -#define IDC_MATRIX_VIEWER_TEX_12_EDIT 1264 -#define IDC_MATRIX_VIEWER_TEX_13_EDIT 1265 -#define IDC_MATRIX_VIEWER_TEX_14_EDIT 1266 -#define IDC_MATRIX_VIEWER_TEX_21_EDIT 1267 -#define IDC_MATRIX_VIEWER_TEX_22_EDIT 1268 -#define IDC_MATRIX_VIEWER_TEX_23_EDIT 1269 -#define IDC_MATRIX_VIEWER_TEX_24_EDIT 1270 -#define IDC_MATRIX_VIEWER_TEX_31_EDIT 1271 -#define IDC_MATRIX_VIEWER_TEX_32_EDIT 1272 -#define IDC_MATRIX_VIEWER_TEX_33_EDIT 1273 -#define IDC_MATRIX_VIEWER_TEX_34_EDIT 1274 -#define IDC_MATRIX_VIEWER_TEX_41_EDIT 1275 -#define IDC_MATRIX_VIEWER_TEX_42_EDIT 1276 -#define IDC_MATRIX_VIEWER_TEX_43_EDIT 1277 -#define IDC_MATRIX_VIEWER_TEX_44_EDIT 1278 -#define IDD_LIGHT_VIEWER 1300 -#define IDM_LIGHT_VIEWER 1300 -#define IDC_LIGHT_VIWER_LIGHT0_GROUP 1301 -#define IDD_ABOUT_BOX 1301 -#define IDC_AUTHORS_LIST 1302 -#define IDC_LIGHT_VIEWER_LIGHT0COLOR_COLORCTRL 1302 -#define IDD_DESASSEMBLEUR_VIEWER9 1302 -#define IDC_LIGHT_VIEWER_LIGHT0COLOR_EDIT 1303 -#define IDC_LIGHT_VIEWER_LIGHT0VECTOR_EDIT 1304 -#define IDD_GBASLOT_NONE 1304 -#define IDD_GBASLOT_RUMBLEPAK 1305 -#define IDD_GBASLOT_GBAGAME 1306 -#define IDD_CHEAT_SEARCH_COMP 1307 -#define IDD_CHEAT_SEARCH_MAIN 1308 -#define IDD_CHEAT_SEARCH_RESULT 1310 -#define IDC_LIGHT_VIWER_LIGHT1_GROUP 1311 -#define IDD_CHEAT_SEARCH_EXACT 1311 -#define IDC_LIGHT_VIEWER_LIGHT1COLOR_COLORCTRL 1312 -#define IDD_CHEAT_SEARCH 1312 -#define IDC_LIGHT_VIEWER_LIGHT1COLOR_EDIT 1313 -#define IDD_CHEAT_ADD_AR_CODE 1313 -#define IDC_LIGHT_VIEWER_LIGHT1VECTOR_EDIT 1314 -#define IDD_CHEAT_ADD_BC_CODE 1314 -#define IDC_LIGHT_VIWER_LIGHT2_GROUP 1321 -#define IDC_LIGHT_VIEWER_LIGHT2COLOR_COLORCTRL 1322 -#define IDC_LIGHT_VIEWER_LIGHT2COLOR_EDIT 1323 -#define IDC_LIGHT_VIEWER_LIGHT2VECTOR_EDIT 1324 -#define IDC_LIGHT_VIWER_LIGHT3_GROUP 1331 -#define IDC_LIGHT_VIEWER_LIGHT3COLOR_COLORCTRL 1332 -#define IDC_LIGHT_VIEWER_LIGHT3COLOR_EDIT 1333 -#define IDC_LIGHT_VIEWER_LIGHT3VECTOR_EDIT 1334 -#define IDC_GI_FATOFS 4464 -#define IDC_GI_FATSIZE 4465 -#define IDC_GI_ICONTITLEOFS 4466 -#define IDC_GI_USEDROMSIZE 4467 -#define IDC_GI_ICON 4469 -#define IDC_GI_TITLE 4470 -#define IDC_GI_TITLEEN 4471 -#define IDC_GI_TITLEFR 4472 -#define IDC_GI_TITLEGE 4473 -#define IDC_GI_TITLEIT 4474 -#define IDC_GI_TITLESP 4475 -#define IDC_GI_MAKERCODE 4476 -#define IDC_GI_TITLEJP 4477 -#define IDC_GI_CHIPSIZE 4478 -#define IDC_GI_ARM9START 4479 -#define IDC_GI_ARM9ENTRY 4480 -#define IDC_GI_ARM9ROM 4481 -#define IDC_GI_ARM9SIZE 4482 -#define IDC_GI_ARM7ROM 4483 -#define IDC_GI_ARM7ENTRY 4484 -#define IDC_GI_ARM7START 4485 -#define IDC_GI_ARM7SIZE 4486 -#define IDC_GI_FNTOFS 4487 -#define IDC_GI_FNTSIZE 4488 -#define IDD_MICROPHONE 5000 -#define IDM_MICROPHONESETTINGS 5001 -#define IDC_MICSAMPLEBROWSE 5003 -#define IDC_MICSAMPLE 5004 -#define IDC_USEMICSAMPLE 5005 -#define IDM_SCREENSEP_NONE 40000 -#define IDM_SCREENSEP_BORDER 40001 -#define IDM_SCREENSEP_NDSGAP 40002 -#define IDM_ABOUT 40003 -#define IDM_EMULATIONSETTINGS 40004 -#define IDC_FRAMELIMIT 40005 -#define IDC_WINDOW1_5X 40006 -#define IDM_WIFISETTINGS 40007 -#define ID_VIEW_FRAMECOUNTER 40009 -#define ID_VIEW_DISPLAYFPS 40010 -#define ID_VIEW_DISPLAYINPUT 40011 -#define ID_VIEW_DISPLAYLAG 40012 -#define ID_VIEW_HUDEDITOR 40013 -#define ID_VIEW_DISPLAYMICROPHONE 40014 -#define IDM_FILE_RECORDAVI 40015 -#define IDM_FILE_STOPAVI 40016 -#define ID_FILE_RECENTROM 40034 -#define IDC_SAVETYPE7 40037 -#define IDM_DEFSIZE 40038 -#define IDM_3DCONFIG 40040 -#define IDM_GBASLOT 40042 -#define IDM_CHEATS_LIST 40050 -#define IDC_BGMAP_ROTSCALEPARAMS 40051 -#define IDM_CHEATS_SEARCH 40051 -#define IDC_BGMAP_ROTSCALE 40052 -#define IDM_SHUT_UP 40053 -#define IDC_LABEL_UP 50000 -#define IDC_LABEL_RIGHT 50001 -#define IDC_LABEL_LEFT 50002 -#define IDC_LABEL_DOWN 50003 -#define IDC_LABEL_A 50004 -#define IDC_LABEL_X 50005 -#define IDC_LABEL_B 50006 -#define IDC_LABEL_Y 50007 -#define IDC_LABEL_L 50008 -#define IDC_LABEL_START 50009 -#define IDC_LABEL_R 50010 -#define IDC_LABEL_SELECT 50011 -#define IDC_LABEL_UPLEFT 50012 -#define IDC_LABEL_DOWNRIGHT 50013 -#define IDC_LABEL_UPRIGHT 50014 -#define IDC_LABEL_DOWNLEFT 50015 -#define IDC_ALLOWLEFTRIGHT 50016 -#define IDC_LABEL_X3 50017 -#define IDC_LABEL_X2 50018 -#define IDC_DEBUG 50019 -#define IDC_UP 50020 -#define IDC_LEFT 50021 -#define IDC_DOWN 50022 -#define IDC_RIGHT 50023 -#define IDC_B 50024 -#define IDC_A 50025 -#define IDC_Y 50026 -#define IDC_X 50027 -#define IDC_START 50028 -#define IDC_SELECT 50029 -#define IDC_L 50030 -#define IDC_R 50031 -#define IDC_UPLEFT 50032 -#define IDC_UPRIGHT 50033 -#define IDC_DWNRIGHT 50034 -#define IDC_DWNLEFT 50035 -#define IDC_LABEL_BLUE 50036 -#define IDC_LID 50037 -#define IDD_INPUTCONFIG 50038 -#define IDC_LABEL_HK1 60001 -#define IDC_LABEL_HK2 60002 -#define IDC_LABEL_HK3 60003 -#define IDC_LABEL_HK4 60004 -#define IDC_LABEL_HK5 60005 -#define IDC_LABEL_HK6 60006 -#define IDC_LABEL_HK7 60007 -#define IDC_LABEL_HK8 60008 -#define IDC_LABEL_HK9 60009 -#define IDC_HOTKEY1 60011 -#define IDC_HOTKEY2 60012 -#define IDC_HOTKEY3 60013 -#define IDC_HOTKEY4 60014 -#define IDC_HOTKEY5 60015 -#define IDC_HOTKEY6 60016 -#define IDC_HOTKEY7 60017 -#define IDC_HOTKEY8 60018 -#define IDC_HOTKEY9 60019 -#define IDC_HOTKEY10 60020 -#define IDC_HOTKEY11 60021 -#define IDC_HOTKEY12 60022 -#define IDC_HOTKEY13 60023 -#define IDC_HOTKEY14 60024 -#define IDC_HOTKEY15 60025 -#define IDC_HOTKEY16 60026 -#define IDC_HOTKEY17 60027 -#define IDC_HOTKEY18 60028 -#define IDC_HOTKEY19 60029 -#define IDC_HOTKEY20 60030 -#define IDC_LABEL_HK10 60031 -#define IDC_LABEL_HK11 60032 -#define IDC_LABEL_HK12 60033 -#define IDC_LABEL_HK13 60034 -#define IDC_LABEL_HK14 60035 -#define IDC_LABEL_HK15 60036 -#define IDC_LABEL_HK16 60037 -#define IDC_LABEL_HK17 60038 -#define IDC_LABEL_HK19 60040 -#define IDC_LABEL_HK20 60041 -#define IDC_LABEL_HK18 60049 -#define IDC_HKCOMBO 60077 -#define IDD_KEYCUSTOM 60078 -#define IDM_HOTKEY_CONFIG 60079 -#define IDC_INTERPOLATECOLOR 70000 +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 103 +#define _APS_NEXT_COMMAND_VALUE 40008 +#define _APS_NEXT_CONTROL_VALUE 1002 +#define _APS_NEXT_SYMED_VALUE 135 +#endif +#endif diff --git a/src/windows/resources.rc b/src/windows/resources.rc index 6b1758a9a..7cf4ba639 100644 --- a/src/windows/resources.rc +++ b/src/windows/resources.rc @@ -1,2450 +1,2589 @@ -// Generated by ResEdit 1.4.4.19 -// Copyright (C) 2006-2008 -// http://www.resedit.net - +// Microsoft Visual C++ generated resource script. +// #include "resource.h" -#include "afxres.h" - +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// // -// Bitmap resources +// Generated from the TEXTINCLUDE 2 resource. // -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDB_BGTILES BITMAP "bitmap1.bmp" +#ifndef APSTUDIO_INVOKED +#include "targetver.h" +#endif +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// Neutral resources +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// // -// Icon resources +// TEXTINCLUDE // -LANGUAGE LANG_GERMAN, SUBLANG_GERMAN -ICONDESMUME ICON "DeSmuME.ico" + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#ifndef APSTUDIO_INVOKED\r\n" + "#include ""targetver.h""\r\n" + "#endif\r\n" + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// +IDD_REPLAYINP DIALOGEX 0, 0, 300, 79 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Play Movie" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",1,186,60,50,14 + GROUPBOX "",65497,3,0,293,57 + RTEXT "File:",65498,7,14,24,10,SS_CENTERIMAGE | NOT WS_GROUP + PUSHBUTTON "Cancel",2,246,60,50,14 + CONTROL "Open &Read-Only",IDC_CHECK_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,33,69,10 + PUSHBUTTON "Browse...",ID_BROWSE,224,12,50,14 + EDITTEXT PM_FILENAME,35,12,184,14,ES_AUTOHSCROLL | ES_READONLY +END + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Danish resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DAN) +#ifdef _WIN32 +LANGUAGE LANG_DANISH, SUBLANG_DEFAULT +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// // -// Menu resources +// Dialog // -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK -MENU_PRINCIPAL MENU -{ + +IDD_3DSETTINGS DIALOG 0, 0, 174, 120 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "3D settings" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,62,92,50,14 + PUSHBUTTON "Cancel",IDCANCEL,117,92,50,14 + PUSHBUTTON "Default",IDC_DEFAULT,7,92,50,14 + GROUPBOX "Renderer:",IDC_STATIC,7,7,160,39 + COMBOBOX IDC_3DCORE,15,23,146,138,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Unrealistically High-Precision Color Interpolation",IDC_INTERPOLATECOLOR, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,55,165,10 + LTEXT "(Presently only effective for SoftRasterizer)",IDC_STATIC,21,65,134,8 +END + +IDD_DESASSEMBLEUR_VIEWER7 DIALOGEX 0, 0, 380, 186 +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION +CAPTION "Disassembler" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + CONTROL "Auto ",IDC_AUTO_DES,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,10,4,35,10 + CONTROL "ARM",IDC_ARM,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,44,4,35,10 + CONTROL "Thumb",IDC_THUMB,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,82,4,40,10 + LTEXT "Gå til:",IDC_STATIC,130,4,33,10 + EDITTEXT IDC_GOTODES,155,1,82,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP + PUSHBUTTON "&Start",IDC_GO,240,1,20,14 + CONTROL "Rediger",IDC_DES_BOX,"DesViewBox7",WS_VSCROLL | WS_TABSTOP,4,16,296,150,WS_EX_CLIENTEDGE + PUSHBUTTON "&Luk",IDC_FERMER,246,170,50,14 + LTEXT "R0 :",IDC_STATIC,304,16,17,8 + LTEXT "R1 :",IDC_STATIC,304,24,17,8 + LTEXT "R2 :",IDC_STATIC,304,32,17,8 + LTEXT "R3 :",IDC_STATIC,304,40,17,8 + LTEXT "R4 :",IDC_STATIC,304,48,17,8 + LTEXT "R5 :",IDC_STATIC,304,56,17,8 + LTEXT "R6 :",IDC_STATIC,304,64,17,8 + LTEXT "R7 :",IDC_STATIC,304,72,17,8 + LTEXT "R8 :",IDC_STATIC,304,80,17,8 + LTEXT "R9 :",IDC_STATIC,304,88,17,8 + LTEXT "R10 :",IDC_STATIC,304,96,17,8 + LTEXT "R11 :",IDC_STATIC,304,104,17,8 + LTEXT "R12 :",IDC_STATIC,304,112,17,8 + LTEXT "SP :",IDC_STATIC,304,120,17,8 + LTEXT "LR :",IDC_STATIC,304,128,17,8 + LTEXT "PC :",IDC_STATIC,304,136,17,8 + LTEXT "Mode :",IDC_STATIC,304,158,22,8 + LTEXT "SPSR :",IDC_STATIC,304,168,22,8 + LTEXT "00000000",IDC_R0,325,16,40,8 + LTEXT "00000000",IDC_R1,325,24,40,8 + LTEXT "00000000",IDC_R2,325,32,40,8 + LTEXT "00000000",IDC_R3,325,40,40,8 + LTEXT "00000000",IDC_R4,325,48,40,8 + LTEXT "00000000",IDC_R5,325,56,40,8 + LTEXT "00000000",IDC_R6,325,64,40,8 + LTEXT "00000000",IDC_R7,325,72,40,8 + LTEXT "00000000",IDC_R8,325,80,40,8 + LTEXT "00000000",IDC_R9,325,88,40,8 + LTEXT "00000000",IDC_R10,325,96,40,8 + LTEXT "00000000",IDC_R11,325,104,40,8 + LTEXT "00000000",IDC_R12,325,112,40,8 + LTEXT "00000000",IDC_R13,325,120,40,8 + LTEXT "00000000",IDC_R14,325,128,40,8 + LTEXT "00000000",IDC_R15,325,136,40,8 + LTEXT "",IDC_MODE,327,158,28,8 + LTEXT "",IDC_TMP,327,168,40,8 + PUSHBUTTON "&Refresh",IDC_REFRESH,162,170,50,14,BS_ICON + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,285,1,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,340,3,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,352,2,11,14 + LTEXT "frames",IDC_STATIC,364,5,16,8 + EDITTEXT IDC_SETPNUM,5,170,34,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_NUMBER | WS_GROUP + PUSHBUTTON "&Step",IDC_STEP,41,170,50,14 + CONTROL "Autoupd asm",IDC_AUTOUPDATE_ASM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,172,57,10 +END + +IDD_DESASSEMBLEUR_VIEWER9 DIALOGEX 0, 0, 380, 186 +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION +CAPTION "Disassembler" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + CONTROL "Auto ",IDC_AUTO_DES,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,10,4,35,10 + CONTROL "ARM",IDC_ARM,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,44,4,35,10 + CONTROL "Thumb",IDC_THUMB,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,82,4,40,10 + LTEXT "Gå til:",IDC_STATIC,130,4,33,10 + EDITTEXT IDC_GOTODES,155,1,82,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP + PUSHBUTTON "&Start",IDC_GO,240,1,20,14 + CONTROL "Rediger",IDC_DES_BOX,"DesViewBox9",WS_VSCROLL | WS_TABSTOP,4,16,296,150,WS_EX_CLIENTEDGE + PUSHBUTTON "&Luk",IDC_FERMER,246,170,50,14 + LTEXT "R0 :",IDC_STATIC,304,16,17,8 + LTEXT "R1 :",IDC_STATIC,304,24,17,8 + LTEXT "R2 :",IDC_STATIC,304,32,17,8 + LTEXT "R3 :",IDC_STATIC,304,40,17,8 + LTEXT "R4 :",IDC_STATIC,304,48,17,8 + LTEXT "R5 :",IDC_STATIC,304,56,17,8 + LTEXT "R6 :",IDC_STATIC,304,64,17,8 + LTEXT "R7 :",IDC_STATIC,304,72,17,8 + LTEXT "R8 :",IDC_STATIC,304,80,17,8 + LTEXT "R9 :",IDC_STATIC,304,88,17,8 + LTEXT "R10 :",IDC_STATIC,304,96,17,8 + LTEXT "R11 :",IDC_STATIC,304,104,17,8 + LTEXT "R12 :",IDC_STATIC,304,112,17,8 + LTEXT "SP :",IDC_STATIC,304,120,17,8 + LTEXT "LR :",IDC_STATIC,304,128,17,8 + LTEXT "PC :",IDC_STATIC,304,136,17,8 + LTEXT "Mode :",IDC_STATIC,304,158,22,8 + LTEXT "SPSR :",IDC_STATIC,304,168,22,8 + LTEXT "00000000",IDC_R0,325,16,40,8 + LTEXT "00000000",IDC_R1,325,24,40,8 + LTEXT "00000000",IDC_R2,325,32,40,8 + LTEXT "00000000",IDC_R3,325,40,40,8 + LTEXT "00000000",IDC_R4,325,48,40,8 + LTEXT "00000000",IDC_R5,325,56,40,8 + LTEXT "00000000",IDC_R6,325,64,40,8 + LTEXT "00000000",IDC_R7,325,72,40,8 + LTEXT "00000000",IDC_R8,325,80,40,8 + LTEXT "00000000",IDC_R9,325,88,40,8 + LTEXT "00000000",IDC_R10,325,96,40,8 + LTEXT "00000000",IDC_R11,325,104,40,8 + LTEXT "00000000",IDC_R12,325,112,40,8 + LTEXT "00000000",IDC_R13,325,120,40,8 + LTEXT "00000000",IDC_R14,325,128,40,8 + LTEXT "00000000",IDC_R15,325,136,40,8 + LTEXT "",IDC_MODE,327,158,28,8 + LTEXT "",IDC_TMP,327,168,40,8 + PUSHBUTTON "&Refresh",IDC_REFRESH,162,170,50,14,BS_ICON + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,285,1,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,340,3,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,352,2,11,14 + LTEXT "frames",IDC_STATIC,364,5,16,8 + EDITTEXT IDC_SETPNUM,5,170,34,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_NUMBER | WS_GROUP + PUSHBUTTON "&Step",IDC_STEP,41,170,50,14 + CONTROL "Autoupd asm",IDC_AUTOUPDATE_ASM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,172,57,10 +END + +IDD_FIRMSETTINGS DIALOG 0, 0, 161, 145 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Firmware Indstillinger" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "&OK",IDOK,7,124,50,14 + PUSHBUTTON "&Fortryd",IDCANCEL,104,124,50,14 + CONTROL "Favorit Farve:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,55,52,12 + COMBOBOX IDC_COMBO1,66,53,84,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + CONTROL "Fødselsmåned:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,72,52,12 + COMBOBOX IDC_COMBO2,66,71,84,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + CONTROL "Fødselsdag:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,90,52,12 + COMBOBOX IDC_COMBO3,66,88,84,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + CONTROL "Sprog:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,106,52,12 + COMBOBOX IDC_COMBO4,66,105,84,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + CONTROL "Kælenavn:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,17,52,12 + EDITTEXT IDC_EDIT1,66,14,82,14,ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP + CONTROL "Besked:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,36,52,12 + EDITTEXT IDC_EDIT2,66,33,82,14,ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP +END + +IDD_GAME_INFO DIALOG 0, 0, 366, 406 +STYLE DS_SETFONT | DS_CENTER | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "ROM Information" +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "&Close",IDCANCEL,310,385,50,14 + LTEXT "Game title :",IDC_STATIC,190,20,95,8 + LTEXT "",IDC_GI_GAMETITLE,285,20,70,8 + LTEXT "Game code :",IDC_STATIC,190,35,95,8 + LTEXT "",IDC_GI_GAMECODE,285,35,70,8 + LTEXT "Maker code :",IDC_STATIC,190,50,95,8 + LTEXT "",IDC_GI_MAKERCODE,285,50,70,8 + LTEXT "Chip size :",IDC_STATIC,190,65,95,8 + LTEXT "",IDC_GI_CHIPSIZE,285,65,70,8 + LTEXT "ARM9 binary ROM offset :",IDC_STATIC,190,100,95,8 + LTEXT "",IDC_GI_ARM9ROM,285,100,70,8 + LTEXT "ARM9 binary entry address :",IDC_STATIC,190,115,95,8 + LTEXT "",IDC_GI_ARM9ENTRY,285,115,70,8 + LTEXT "ARM9 binary start address :",IDC_STATIC,190,130,95,8 + LTEXT "",IDC_GI_ARM9START,285,130,70,8 + GROUPBOX "General info",IDC_STATIC,180,5,180,75 + GROUPBOX "ARM9 && ARM7 binaries",IDC_STATIC,180,85,180,135 + LTEXT "ARM9 binary size :",IDC_STATIC,190,145,95,8 + LTEXT "",IDC_GI_ARM9SIZE,285,145,70,8 + LTEXT "ARM7 binary ROM offset :",IDC_STATIC,190,160,95,8 + LTEXT "",IDC_GI_ARM7ROM,285,160,70,8 + LTEXT "ARM7 binary entry address :",IDC_STATIC,190,175,95,8 + LTEXT "",IDC_GI_ARM7ENTRY,285,175,70,8 + LTEXT "ARM7 binary start address :",IDC_STATIC,190,190,95,8 + LTEXT "",IDC_GI_ARM7START,285,190,70,8 + LTEXT "ARM7 binary size :",IDC_STATIC,190,205,95,8 + LTEXT "",IDC_GI_ARM7SIZE,285,205,70,8 + GROUPBOX "Filesystem",IDC_STATIC,180,225,180,75 + LTEXT "FNT ROM offset :",IDC_STATIC,190,240,95,8 + LTEXT "",IDC_GI_FNTOFS,285,240,70,8 + LTEXT "FNT size :",IDC_STATIC,190,255,95,8 + LTEXT "",IDC_GI_FNTSIZE,285,255,70,8 + LTEXT "FAT ROM offset :",IDC_STATIC,190,270,95,8 + LTEXT "",IDC_GI_FATOFS,285,270,70,8 + LTEXT "FAT size :",IDC_STATIC,190,285,95,8 + LTEXT "",IDC_GI_FATSIZE,285,285,70,8 + GROUPBOX "Misc",IDC_STATIC,180,305,180,50 + LTEXT "Icon/title region ROM offset :",IDC_STATIC,190,320,95,8 + LTEXT "",IDC_GI_ICONTITLEOFS,285,320,70,8 + LTEXT "Used ROM size :",IDC_STATIC,190,335,95,8 + LTEXT "",IDC_GI_USEDROMSIZE,285,335,70,8 + GROUPBOX "",IDC_STATIC,5,5,165,45 + LTEXT "",IDC_GI_TITLE,55,15,110,30 + GROUPBOX "Titles",IDC_STATIC,5,55,165,345 + LTEXT "Japanese title :",IDC_STATIC,15,70,65,8 + LTEXT "",IDC_GI_TITLEJP,15,85,145,35 + LTEXT "English title :",IDC_STATIC,15,125,65,8 + LTEXT "",IDC_GI_TITLEEN,15,140,150,35 + LTEXT "French title :",IDC_STATIC,15,180,65,8 + LTEXT "",IDC_GI_TITLEFR,15,195,150,35 + LTEXT "German title :",IDC_STATIC,15,235,65,8 + LTEXT "",IDC_GI_TITLEGE,15,250,150,35 + LTEXT "Italian title :",IDC_STATIC,15,290,65,8 + LTEXT "",IDC_GI_TITLEIT,15,305,145,35 + LTEXT "Spanish title :",IDC_STATIC,15,345,65,8 + LTEXT "",IDC_GI_TITLESP,15,360,150,35 + CONTROL "1",IDC_GI_ICON,"GInfo_IconBox",0x0,10,15,35,30,WS_EX_TRANSPARENT +END + +IDD_IO_REG DIALOGEX 0, 0, 150, 200 +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION +CAPTION "IO registers" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + LTEXT "Int Handler :",IDC_STATIC,5,13,41,8 + LTEXT "",IDC_INTHAND9,60,14,80,8 + LTEXT "IE :",IDC_STATIC,5,21,41,8 + LTEXT "",IDC_IE9,60,22,80,8 + LTEXT "IF :",IDC_STATIC,5,29,41,8 + LTEXT "",IDC_IF9,60,29,79,8 + LTEXT "IME :",IDC_STATIC,5,36,41,8 + LTEXT "",IDC_IME9,60,36,79,8 + LTEXT "DISPA_CNT :",IDC_STATIC,5,44,48,8 + LTEXT "",IDC_DISPCNTA9,60,44,83,8 + LTEXT "DISPA_STAT :",IDC_STATIC,5,52,49,8 + LTEXT "",IDC_DISPSTATA9,60,52,79,8 + LTEXT "DISPB_CNT :",IDC_STATIC,5,60,48,8 + LTEXT "",IDC_DISPCNTB9,60,60,83,8 + LTEXT "DISPB_STAT :",IDC_STATIC,5,68,49,8 + LTEXT "",IDC_DISPSTATB9,60,68,79,8 + LTEXT "IPCSYNC :",IDC_STATIC,5,76,41,8 + LTEXT "",IDC_IPCSYNC9,60,76,78,8 + LTEXT "IPCFIFO :",IDC_STATIC,5,84,41,8 + LTEXT "",IDC_IPCFIFO9,60,85,79,8 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,32,163,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,87,164,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,99,164,11,14 + LTEXT "frames",IDC_STATIC,111,167,16,8 + PUSHBUTTON "&Fermer",IDC_FERMER,50,183,50,14 + GROUPBOX "ARM9",IDC_STATIC,4,4,142,98 + LTEXT "GXSTAT :",IDC_STATIC,5,92,41,8 + LTEXT "",IDC_GXSTAT9,60,93,79,8 + LTEXT "IE :",IDC_STATIC,5,114,41,8 + LTEXT "",IDC_IE7,60,114,80,8 + LTEXT "IF :",IDC_STATIC,5,122,41,8 + LTEXT "",IDC_IF7,60,122,79,8 + LTEXT "IME :",IDC_STATIC,5,130,41,8 + LTEXT "",IDC_IME7,60,130,79,8 + GROUPBOX "ARM7",IDC_STATIC,3,104,142,53 + LTEXT "IPCSYNC :",IDC_STATIC,5,138,41,8 + LTEXT "",IDC_IPCSYNC7,60,138,78,8 + LTEXT "IPCFIFO :",IDC_STATIC,5,146,41,8 + LTEXT "",IDC_IPCFIFO7,60,147,79,8 +END + +IDD_MAP DIALOGEX 0, 0, 485, 320 +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION +CAPTION "MAP Fremviser" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_BG_SELECT,4,4,90,14,CBS_DROPDOWN | WS_TABSTOP + LTEXT "Mode :",IDC_STATIC,4,20,45,8 + LTEXT "Palette :",IDC_STATIC,4,30,45,8 + LTEXT "Prio :",IDC_STATIC,4,40,45,8 + LTEXT "Char base :",IDC_STATIC,4,50,45,8 + LTEXT "Skærm base :",IDC_STATIC,4,60,45,8 + LTEXT "Størrelse :",IDC_STATIC,4,70,45,8 + LTEXT "Scroll :",IDC_STATIC,4,80,45,8 + LTEXT "",IDC_MODE,48,20,85,8 + LTEXT "",IDC_PAL,48,30,85,8 + LTEXT "",IDC_PRIO,48,40,85,8 + LTEXT "",IDC_CHAR,48,50,85,8 + LTEXT "",IDC_SCR,48,60,85,8 + LTEXT "",IDC_MSIZE,48,70,85,8 + LTEXT "",IDC_SCROLL,48,80,85,8 + PUSHBUTTON "&Luk",IDC_FERMER,4,300,50,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,92,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,59,93,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,71,93,11,14 + LTEXT "frames",IDC_STATIC,83,96,16,8 +END + +IDD_OAM DIALOGEX 0, 0, 300, 200 +STYLE DS_SETFONT | WS_CAPTION | WS_SYSMENU +CAPTION "OAM Fremviser" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_SCR_SELECT,4,4,90,14,CBS_DROPDOWNLIST | WS_TABSTOP + SCROLLBAR IDC_SCROLLER,48,20,20,14 + LTEXT "Mode :",IDC_STATIC,4,36,45,8 + LTEXT "Tile :",IDC_STATIC,4,46,45,8 + LTEXT "Palette :",IDC_STATIC,4,56,45,8 + LTEXT "Prio :",IDC_STATIC,4,66,45,8 + LTEXT "Koordinater :",IDC_STATIC,4,76,45,8 + LTEXT "Dimension :",IDC_STATIC,4,86,45,8 + LTEXT "Rotation :",IDC_STATIC,4,96,45,8 + LTEXT "Mosaic :",IDC_STATIC,4,106,45,8 + LTEXT "OAM : 0",IDC_OAMNUM,4,24,40,8 + LTEXT "",IDC_MODE,48,36,42,8 + LTEXT "",IDC_TILE,48,46,72,8 + LTEXT "",IDC_PAL,48,56,72,8 + LTEXT "",IDC_PRIO,48,66,72,8 + LTEXT "",IDC_COOR,48,76,42,8 + LTEXT "",IDC_DIM,48,86,42,8 + LTEXT "",IDC_ROT,48,96,42,8 + LTEXT "",IDC_MOS,48,106,42,8 + LTEXT "",IDC_PROP0,4,116,86,8 + LTEXT "",IDC_PROP1,4,126,86,8 + PUSHBUTTON "&Luk",IDC_FERMER,50,181,50,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,161,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,59,162,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,71,161,11,14 + LTEXT "frames",IDC_STATIC,83,163,16,8 +END + +IDD_PAL DIALOGEX 0, 0, 120, 190 +STYLE DS_SETFONT | WS_CAPTION | WS_SYSMENU +CAPTION "Palette Fremvisning" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_PAL_SELECT,15,3,90,14,CBS_DROPDOWN | WS_TABSTOP + LTEXT "Pal : 0",IDC_PALNUM,3,21,25,8 + SCROLLBAR IDC_SCROLLER,30,18,20,14 + PUSHBUTTON "&Luk",IDC_FERMER,35,169,50,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,150,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,68,151,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,80,151,11,14 + LTEXT "frames",IDC_STATIC,92,154,16,8 +END + +IDD_SOUNDSETTINGS DIALOGEX 0, 0, 174, 96 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Lyd Indstillinger" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + GROUPBOX "Lyd Indstillinger",-1,3,2,168,28 + LTEXT "Lyd Driver",-1,10,14,40,10 + COMBOBOX IDC_SOUNDCORECB,54,13,110,33,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Andre Indstillinger",-1,3,31,168,43 + LTEXT "Buffer Størrelse",-1,10,42,60,10 + EDITTEXT IDC_SOUNDBUFFERET,136,41,28,13 + LTEXT "Volumen",-1,10,57,30,10 + CONTROL "",IDC_SLVOLUME,"msctls_trackbar32",0x0,40,57,128,10 + DEFPUSHBUTTON "&OK",IDOK,82,78,40,14 + PUSHBUTTON "&Fortryd",IDCANCEL,127,78,40,14 +END + +IDD_TILE DIALOGEX 0, 0, 446, 180 +STYLE DS_SETFONT | WS_CAPTION | WS_SYSMENU +CAPTION "TILE Fremvisning" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_PAL_SELECT,4,13,90,14,CBS_DROPDOWN | WS_TABSTOP + LTEXT "Pal : 0",IDC_PALNUM,4,31,25,8 + SCROLLBAR IDC_SCROLLER,30,28,20,14 + COMBOBOX IDC_MEM_SELECT,4,50,90,14,CBS_DROPDOWN | WS_TABSTOP + CONTROL "Bitmap",IDC_BITMAP,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,4,68,35,10 + CONTROL "256 Farver",IDC_256COUL,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,4,80,55,10 + CONTROL "16 Farver",IDC_16COUL,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,4,92,50,10 + CONTROL "Rediger",IDC_Tile_BOX,"TileViewBox",WS_TABSTOP,100,2,344,160,WS_EX_CLIENTEDGE + CONTROL "Rediger",IDC_MINI_TILE,"MiniTileViewBox",WS_TABSTOP,22,116,56,52,WS_EX_CLIENTEDGE + LTEXT "Tile Num : 0",IDC_TILENUM,23,170,100,8 + PUSHBUTTON "&Luk",IDC_FERMER,198,164,50,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,349,165,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,404,165,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,416,164,11,14 + LTEXT "frames",IDC_STATIC,428,167,16,8 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MENU_PRINCIPAL MENU +BEGIN POPUP "&Fil" - { - MENUITEM "&Åbn ROM...", IDM_OPEN - MENUITEM "Frisk ROM", ID_FILE_RECENTROM - MENUITEM "ROM &Info", IDM_GAME_INFO + BEGIN + MENUITEM "&Åbn ROM...", IDM_OPEN + MENUITEM "Frisk ROM", ID_FILE_RECENTROM + MENUITEM "ROM &Info", IDM_GAME_INFO MENUITEM SEPARATOR - MENUITEM "Gem Stadie Som...", IDM_STATE_SAVE - MENUITEM "Indlæs Stadie Som...", IDM_STATE_LOAD + MENUITEM "Gem Stadie Som...", IDM_STATE_SAVE + MENUITEM "Indlæs Stadie Som...", IDM_STATE_LOAD POPUP "Gem Stadie" - { - MENUITEM "1", IDM_STATE_SAVE_F1 - MENUITEM "2", IDM_STATE_SAVE_F2 - MENUITEM "3", IDM_STATE_SAVE_F3 - MENUITEM "4", IDM_STATE_SAVE_F4 - MENUITEM "5", IDM_STATE_SAVE_F5 - MENUITEM "6", IDM_STATE_SAVE_F6 - MENUITEM "7", IDM_STATE_SAVE_F7 - MENUITEM "8", IDM_STATE_SAVE_F8 - MENUITEM "9", IDM_STATE_SAVE_F9 - MENUITEM "10", IDM_STATE_SAVE_F10 - } + BEGIN + MENUITEM "1", IDM_STATE_SAVE_F1 + MENUITEM "2", IDM_STATE_SAVE_F2 + MENUITEM "3", IDM_STATE_SAVE_F3 + MENUITEM "4", IDM_STATE_SAVE_F4 + MENUITEM "5", IDM_STATE_SAVE_F5 + MENUITEM "6", IDM_STATE_SAVE_F6 + MENUITEM "7", IDM_STATE_SAVE_F7 + MENUITEM "8", IDM_STATE_SAVE_F8 + MENUITEM "9", IDM_STATE_SAVE_F9 + MENUITEM "10", IDM_STATE_SAVE_F10 + END POPUP "Indlæs Stadie" - { - MENUITEM "1", IDM_STATE_LOAD_F1 - MENUITEM "2", IDM_STATE_LOAD_F2 - MENUITEM "3", IDM_STATE_LOAD_F3 - MENUITEM "4", IDM_STATE_LOAD_F4 - MENUITEM "5", IDM_STATE_LOAD_F5 - MENUITEM "6", IDM_STATE_LOAD_F6 - MENUITEM "7", IDM_STATE_LOAD_F7 - MENUITEM "8", IDM_STATE_LOAD_F8 - MENUITEM "9", IDM_STATE_LOAD_F9 - MENUITEM "10", IDM_STATE_LOAD_F10 - } + BEGIN + MENUITEM "1", IDM_STATE_LOAD_F1 + MENUITEM "2", IDM_STATE_LOAD_F2 + MENUITEM "3", IDM_STATE_LOAD_F3 + MENUITEM "4", IDM_STATE_LOAD_F4 + MENUITEM "5", IDM_STATE_LOAD_F5 + MENUITEM "6", IDM_STATE_LOAD_F6 + MENUITEM "7", IDM_STATE_LOAD_F7 + MENUITEM "8", IDM_STATE_LOAD_F8 + MENUITEM "9", IDM_STATE_LOAD_F9 + MENUITEM "10", IDM_STATE_LOAD_F10 + END MENUITEM SEPARATOR MENUITEM "Importere Backup Hukommelse", IDM_IMPORTBACKUPMEMORY MENUITEM SEPARATOR - MENUITEM "Gem Skærmbillede &Som...", IDM_PRINTSCREEN - MENUITEM "&Hurtigt Skærmbillede", IDM_QUICK_PRINTSCREEN + MENUITEM "Gem Skærmbillede &Som...", IDM_PRINTSCREEN + MENUITEM "&Hurtigt Skærmbillede", IDM_QUICK_PRINTSCREEN MENUITEM SEPARATOR - MENUITEM "Record &AVI...", IDM_FILE_RECORDAVI - MENUITEM "Stop AVI", IDM_FILE_STOPAVI + MENUITEM "Record &AVI...", IDM_FILE_RECORDAVI + MENUITEM "Stop AVI", IDM_FILE_STOPAVI MENUITEM SEPARATOR - MENUITEM "&Afslut\tAlt F4", IDM_QUIT - } + MENUITEM "&Afslut\tAlt F4", IDM_QUIT + END POPUP "&Emulation" - { - MENUITEM "&Pause", IDM_PAUSE - MENUITEM "&Genstart", IDM_RESET + BEGIN + MENUITEM "&Pause", IDM_PAUSE + MENUITEM "&Genstart", IDM_RESET MENUITEM SEPARATOR - MENUITEM "&Clear Sound", IDM_SHUT_UP - MENUITEM "GBA &slot", IDM_GBASLOT + MENUITEM "&Clear Sound", IDM_SHUT_UP + MENUITEM "GBA &slot", IDM_GBASLOT POPUP "&Cheats" - { - MENUITEM "&List", IDM_CHEATS_LIST, INACTIVE - MENUITEM "&Search", IDM_CHEATS_SEARCH, INACTIVE - } - } + BEGIN + MENUITEM "&List", IDM_CHEATS_LIST, INACTIVE + MENUITEM "&Search", IDM_CHEATS_SEARCH, INACTIVE + END + END POPUP "&Vis" - { + BEGIN POPUP "&Rotation" - { - MENUITEM " 0 Grader", IDC_ROTATE0 - MENUITEM " 90 Grader", IDC_ROTATE90 - MENUITEM "180 Grader", IDC_ROTATE180 - MENUITEM "270 Grader", IDC_ROTATE270 - } + BEGIN + MENUITEM " 0 Grader", IDC_ROTATE0 + MENUITEM " 90 Grader", IDC_ROTATE90 + MENUITEM "180 Grader", IDC_ROTATE180 + MENUITEM "270 Grader", IDC_ROTATE270 + END POPUP "Vindue &Størrelse" - { - MENUITEM "1x", IDC_WINDOW1X - MENUITEM "1.5x", IDC_WINDOW1_5X - MENUITEM "2x", IDC_WINDOW2X - MENUITEM "3x", IDC_WINDOW3X - MENUITEM "4x", IDC_WINDOW4X - } + BEGIN + MENUITEM "1x", IDC_WINDOW1X + MENUITEM "1.5x", IDC_WINDOW1_5X + MENUITEM "2x", IDC_WINDOW2X + MENUITEM "3x", IDC_WINDOW3X + MENUITEM "4x", IDC_WINDOW4X + END POPUP "Screen separation" - { - MENUITEM "None\t(0 px)", IDM_SCREENSEP_NONE - MENUITEM "Narrow border\t(5 px)", IDM_SCREENSEP_BORDER - MENUITEM "DS\t(64 px)", IDM_SCREENSEP_NDSGAP - } - MENUITEM "&Bevar Højde og Bredde", IDC_FORCERATIO - MENUITEM "Default size", IDM_DEFSIZE + BEGIN + MENUITEM "None\t(0 px)", IDM_SCREENSEP_NONE + MENUITEM "Narrow border\t(5 px)", IDM_SCREENSEP_BORDER + MENUITEM "DS\t(64 px)", IDM_SCREENSEP_NDSGAP + END + MENUITEM "&Bevar Højde og Bredde", IDC_FORCERATIO + MENUITEM "Default size", IDM_DEFSIZE MENUITEM SEPARATOR - MENUITEM "Display Frame Counter", ID_VIEW_FRAMECOUNTER - MENUITEM "Display Fps", ID_VIEW_DISPLAYFPS - MENUITEM "Display Input", ID_VIEW_DISPLAYINPUT - MENUITEM "Display Lag Counter", ID_VIEW_DISPLAYLAG - MENUITEM "Display Microphone", ID_VIEW_DISPLAYMICROPHONE - MENUITEM "HUD Editing Mode", ID_VIEW_HUDEDITOR - } + MENUITEM "Display Frame Counter", ID_VIEW_FRAMECOUNTER + MENUITEM "Display Fps", ID_VIEW_DISPLAYFPS + MENUITEM "Display Input", ID_VIEW_DISPLAYINPUT + MENUITEM "Display Lag Counter", ID_VIEW_DISPLAYLAG + MENUITEM "Display Microphone", ID_VIEW_DISPLAYMICROPHONE + MENUITEM "HUD Editing Mode", ID_VIEW_HUDEDITOR + END POPUP "&Konfigure" - { + BEGIN POPUP "&Vælg Hukommelse Type" - { - MENUITEM "Vælg Automatisk", IDC_SAVETYPE1 - MENUITEM "EEPROM 4kbit", IDC_SAVETYPE2 - MENUITEM "EEPROM 64kbit", IDC_SAVETYPE3 - MENUITEM "EEPROM 512kbit", IDC_SAVETYPE4 - MENUITEM "FRAM 256kbit", IDC_SAVETYPE5 - MENUITEM "FLASH 2mbit", IDC_SAVETYPE6 - } - MENUITEM "3D settings", IDM_3DCONFIG - MENUITEM "Indput Indstillinger", IDM_CONFIG - MENUITEM "Hotkey Config", IDM_HOTKEY_CONFIG - MENUITEM "Lyd Indstillinger", IDM_SOUNDSETTINGS - MENUITEM "Wifi settings", IDM_WIFISETTINGS, GRAYED - MENUITEM "Firmware Indstillinger", IDM_FIRMSETTINGS - MENUITEM "Emulation settings", IDM_EMULATIONSETTINGS - MENUITEM "Microphone Settings", IDM_MICROPHONESETTINGS + BEGIN + MENUITEM "Vælg Automatisk", IDC_SAVETYPE1 + MENUITEM "EEPROM 4kbit", IDC_SAVETYPE2 + MENUITEM "EEPROM 64kbit", IDC_SAVETYPE3 + MENUITEM "EEPROM 512kbit", IDC_SAVETYPE4 + MENUITEM "FRAM 256kbit", IDC_SAVETYPE5 + MENUITEM "FLASH 2mbit", IDC_SAVETYPE6 + END + MENUITEM "3D settings", IDM_3DCONFIG + MENUITEM "Indput Indstillinger", IDM_CONFIG + MENUITEM "Hotkey Config", IDM_HOTKEY_CONFIG + MENUITEM "Lyd Indstillinger", IDM_SOUNDSETTINGS + MENUITEM "Wifi settings", IDM_WIFISETTINGS, GRAYED + MENUITEM "Firmware Indstillinger", IDM_FIRMSETTINGS + MENUITEM "Emulation settings", IDM_EMULATIONSETTINGS + MENUITEM "Microphone Settings", IDM_MICROPHONESETTINGS POPUP "&Frame Skip" - { - MENUITEM "Limit framerate", IDC_FRAMELIMIT - MENUITEM "Auto", IDC_FRAMESKIPAUTO - MENUITEM "0", IDC_FRAMESKIP0 - MENUITEM "1", IDC_FRAMESKIP1 - MENUITEM "2", IDC_FRAMESKIP2 - MENUITEM "3", IDC_FRAMESKIP3 - MENUITEM "4", IDC_FRAMESKIP4 - MENUITEM "5", IDC_FRAMESKIP5 - MENUITEM "6", IDC_FRAMESKIP6 - MENUITEM "7", IDC_FRAMESKIP7 - MENUITEM "8", IDC_FRAMESKIP8 - MENUITEM "9", IDC_FRAMESKIP9 - } + BEGIN + MENUITEM "Limit framerate", IDC_FRAMELIMIT + MENUITEM "Auto", IDC_FRAMESKIPAUTO + MENUITEM "0", IDC_FRAMESKIP0 + MENUITEM "1", IDC_FRAMESKIP1 + MENUITEM "2", IDC_FRAMESKIP2 + MENUITEM "3", IDC_FRAMESKIP3 + MENUITEM "4", IDC_FRAMESKIP4 + MENUITEM "5", IDC_FRAMESKIP5 + MENUITEM "6", IDC_FRAMESKIP6 + MENUITEM "7", IDC_FRAMESKIP7 + MENUITEM "8", IDC_FRAMESKIP8 + MENUITEM "9", IDC_FRAMESKIP9 + END POPUP "&Language" - { - MENUITEM "English", IDC_LANGENGLISH - MENUITEM "French", IDC_LANGFRENCH - MENUITEM "Danish", IDC_LANGDANISH - } - } + BEGIN + MENUITEM "English", IDC_LANGENGLISH + MENUITEM "French", IDC_LANGFRENCH + MENUITEM "Danish", IDC_LANGDANISH + END + END POPUP "&Værktøjer" - { - MENUITEM "&Disassembler", IDM_DISASSEMBLER - MENUITEM "Vis &Hukommelse", IDM_MEMORY - MENUITEM "Vis &Register", IDM_IOREG - MENUITEM "Vis &Palette", IDM_PAL - MENUITEM "Vis &Tiles", IDM_TILE - MENUITEM "Vis M&aps", IDM_MAP - MENUITEM "Vis &OAM", IDM_OAM - MENUITEM "Vis Matrices", IDM_MATRIX_VIEWER - MENUITEM "Vis Lights", IDM_LIGHT_VIEWER + BEGIN + MENUITEM "&Disassembler", IDM_DISASSEMBLER + MENUITEM "Vis &Hukommelse", IDM_MEMORY + MENUITEM "Vis &Register", IDM_IOREG + MENUITEM "Vis &Palette", IDM_PAL + MENUITEM "Vis &Tiles", IDM_TILE + MENUITEM "Vis M&aps", IDM_MAP + MENUITEM "Vis &OAM", IDM_OAM + MENUITEM "Vis Matrices", IDM_MATRIX_VIEWER + MENUITEM "Vis Lights", IDM_LIGHT_VIEWER MENUITEM SEPARATOR POPUP "&Vis &Lag" - { - MENUITEM "Hoved Baggrund 0", IDM_MBG0, CHECKED - MENUITEM "Hoved Baggrund 1", IDM_MBG1, CHECKED - MENUITEM "Hoved Baggrund 2", IDM_MBG2, CHECKED - MENUITEM "Hoved Baggrund 3", IDM_MBG3, CHECKED + BEGIN + MENUITEM "Hoved Baggrund 0", IDM_MBG0, CHECKED + MENUITEM "Hoved Baggrund 1", IDM_MBG1, CHECKED + MENUITEM "Hoved Baggrund 2", IDM_MBG2, CHECKED + MENUITEM "Hoved Baggrund 3", IDM_MBG3, CHECKED MENUITEM SEPARATOR - MENUITEM "Under Baggrund 0", IDM_SBG0, CHECKED - MENUITEM "Under Baggrund 1", IDM_SBG1, CHECKED - MENUITEM "Under Baggrund 2", IDM_SBG2, CHECKED - MENUITEM "Under Baggrund 3", IDM_SBG3, CHECKED - } - } + MENUITEM "Under Baggrund 0", IDM_SBG0, CHECKED + MENUITEM "Under Baggrund 1", IDM_SBG1, CHECKED + MENUITEM "Under Baggrund 2", IDM_SBG2, CHECKED + MENUITEM "Under Baggrund 3", IDM_SBG3, CHECKED + END + END POPUP "&Hjælp" - { - MENUITEM "&Hjemmeside", IDM_WEBSITE - MENUITEM "&Forums", IDM_FORUM - MENUITEM "&Indsend Fejl Rapport", IDM_SUBMITBUGREPORT - MENUITEM "About", IDM_ABOUT - } -} + BEGIN + MENUITEM "&Hjemmeside", IDM_WEBSITE + MENUITEM "&Forums", IDM_FORUM + MENUITEM "&Indsend Fejl Rapport", IDM_SUBMITBUGREPORT + MENUITEM "About", IDM_ABOUT + END +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -MENU_PRINCIPAL MENU -{ - POPUP "&File" - { - MENUITEM "&Open ROM...", IDM_OPEN - MENUITEM "&Recent ROM", ID_FILE_RECENTROM - MENUITEM "ROM &Info", IDM_GAME_INFO - MENUITEM SEPARATOR - MENUITEM "Save State As...", IDM_STATE_SAVE - MENUITEM "Load State As...", IDM_STATE_LOAD - POPUP "Save State" - { - MENUITEM "1", IDM_STATE_SAVE_F1 - MENUITEM "2", IDM_STATE_SAVE_F2 - MENUITEM "3", IDM_STATE_SAVE_F3 - MENUITEM "4", IDM_STATE_SAVE_F4 - MENUITEM "5", IDM_STATE_SAVE_F5 - MENUITEM "6", IDM_STATE_SAVE_F6 - MENUITEM "7", IDM_STATE_SAVE_F7 - MENUITEM "8", IDM_STATE_SAVE_F8 - MENUITEM "9", IDM_STATE_SAVE_F9 - MENUITEM "10", IDM_STATE_SAVE_F10 - } - POPUP "Load State" - { - MENUITEM "1", IDM_STATE_LOAD_F1 - MENUITEM "2", IDM_STATE_LOAD_F2 - MENUITEM "3", IDM_STATE_LOAD_F3 - MENUITEM "4", IDM_STATE_LOAD_F4 - MENUITEM "5", IDM_STATE_LOAD_F5 - MENUITEM "6", IDM_STATE_LOAD_F6 - MENUITEM "7", IDM_STATE_LOAD_F7 - MENUITEM "8", IDM_STATE_LOAD_F8 - MENUITEM "9", IDM_STATE_LOAD_F9 - MENUITEM "10", IDM_STATE_LOAD_F10 - } - MENUITEM SEPARATOR - MENUITEM "Import Backup Memory", IDM_IMPORTBACKUPMEMORY - MENUITEM SEPARATOR - MENUITEM "Save Screenshot &As...", IDM_PRINTSCREEN - MENUITEM "&Quick Screenshot", IDM_QUICK_PRINTSCREEN - MENUITEM SEPARATOR - MENUITEM "Record &AVI...", IDM_FILE_RECORDAVI - MENUITEM "Stop AVI", IDM_FILE_STOPAVI - MENUITEM SEPARATOR - MENUITEM "&Quit\tAlt F4", IDM_QUIT - } - POPUP "&Emulation" - { - MENUITEM "&Pause", IDM_PAUSE - MENUITEM "&Reset", IDM_RESET - MENUITEM SEPARATOR - MENUITEM "&Clear Sound", IDM_SHUT_UP - MENUITEM SEPARATOR - MENUITEM "GBA &slot", IDM_GBASLOT - POPUP "&Cheats" - { - MENUITEM "&List", IDM_CHEATS_LIST, INACTIVE - MENUITEM "&Search", IDM_CHEATS_SEARCH, INACTIVE - } - } - POPUP "&View" - { - POPUP "&Rotation" - { - MENUITEM " 0", IDC_ROTATE0 - MENUITEM " 90", IDC_ROTATE90 - MENUITEM "180", IDC_ROTATE180 - MENUITEM "270", IDC_ROTATE270 - } - POPUP "Window &Size" - { - MENUITEM "1x", IDC_WINDOW1X - MENUITEM "1.5x", IDC_WINDOW1_5X - MENUITEM "2x", IDC_WINDOW2X - MENUITEM "3x", IDC_WINDOW3X - MENUITEM "4x", IDC_WINDOW4X - } - POPUP "Screen separation" - { - MENUITEM "None\t(0 px)", IDM_SCREENSEP_NONE - MENUITEM "Narrow border\t(5 px)", IDM_SCREENSEP_BORDER - MENUITEM "DS\t(64 px)", IDM_SCREENSEP_NDSGAP - } - MENUITEM "&Force Maintain Ratio", IDC_FORCERATIO - MENUITEM "Default size", IDM_DEFSIZE - MENUITEM SEPARATOR - MENUITEM "Display Frame Counter", ID_VIEW_FRAMECOUNTER - MENUITEM "Display FPS", ID_VIEW_DISPLAYFPS - MENUITEM "Display Input", ID_VIEW_DISPLAYINPUT - MENUITEM "Display Lag Counter", ID_VIEW_DISPLAYLAG - MENUITEM "Display Microphone", ID_VIEW_DISPLAYMICROPHONE - MENUITEM "HUD Editing Mode", ID_VIEW_HUDEDITOR - } - POPUP "&Config" - { - POPUP "&Save Type" - { - MENUITEM "Autodetect", IDC_SAVETYPE1 - MENUITEM "EEPROM 4kbit", IDC_SAVETYPE2 - MENUITEM "EEPROM 64kbit", IDC_SAVETYPE3 - MENUITEM "EEPROM 512kbit", IDC_SAVETYPE4 - MENUITEM "FRAM 256kbit", IDC_SAVETYPE5 - MENUITEM "FLASH 2mbit", IDC_SAVETYPE6 - MENUITEM "FLASH 4mbit", IDC_SAVETYPE7 - } - MENUITEM "3D Settings", IDM_3DCONFIG - MENUITEM "Control Config", IDM_CONFIG - MENUITEM "Hotkey Config", IDM_HOTKEY_CONFIG - MENUITEM "Sound Settings", IDM_SOUNDSETTINGS - MENUITEM "Wifi settings", IDM_WIFISETTINGS, GRAYED - MENUITEM "Firmware Settings", IDM_FIRMSETTINGS - MENUITEM "Emulation Settings", IDM_EMULATIONSETTINGS - MENUITEM "Microphone Settings", IDM_MICROPHONESETTINGS - POPUP "&Frame Skip" - { - MENUITEM "Limit framerate", IDC_FRAMELIMIT - MENUITEM "Auto", IDC_FRAMESKIPAUTO - MENUITEM "0", IDC_FRAMESKIP0 - MENUITEM "1", IDC_FRAMESKIP1 - MENUITEM "2", IDC_FRAMESKIP2 - MENUITEM "3", IDC_FRAMESKIP3 - MENUITEM "4", IDC_FRAMESKIP4 - MENUITEM "5", IDC_FRAMESKIP5 - MENUITEM "6", IDC_FRAMESKIP6 - MENUITEM "7", IDC_FRAMESKIP7 - MENUITEM "8", IDC_FRAMESKIP8 - MENUITEM "9", IDC_FRAMESKIP9 - } - POPUP "&Language" - { - MENUITEM "English", IDC_LANGENGLISH - MENUITEM "French", IDC_LANGFRENCH - MENUITEM "Danish", IDC_LANGDANISH - } - } - POPUP "&Tools" - { - MENUITEM "&Disassembler", IDM_DISASSEMBLER - MENUITEM "View &Memory", IDM_MEMORY - MENUITEM "View &Registers", IDM_IOREG - MENUITEM "View &Palette", IDM_PAL - MENUITEM "View &Tiles", IDM_TILE - MENUITEM "View M&aps", IDM_MAP - MENUITEM "View &OAM", IDM_OAM - MENUITEM "View Matrices", IDM_MATRIX_VIEWER - MENUITEM "View Lights", IDM_LIGHT_VIEWER - MENUITEM SEPARATOR - POPUP "&View &Layers" - { - MENUITEM "Main BG 0", IDM_MBG0, CHECKED - MENUITEM "Main BG 1", IDM_MBG1, CHECKED - MENUITEM "Main BG 2", IDM_MBG2, CHECKED - MENUITEM "Main BG 3", IDM_MBG3, CHECKED - MENUITEM SEPARATOR - MENUITEM "Sub BG 0", IDM_SBG0, CHECKED - MENUITEM "Sub BG 1", IDM_SBG1, CHECKED - MENUITEM "Sub BG 2", IDM_SBG2, CHECKED - MENUITEM "Sub BG 3", IDM_SBG3, CHECKED - } - } - POPUP "&Help" - { - MENUITEM "&Website", IDM_WEBSITE - MENUITEM "&Forums", IDM_FORUM - MENUITEM "&Submit a bug report", IDM_SUBMITBUGREPORT - MENUITEM "&About", IDM_ABOUT - } -} - - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -MENU_PRINCIPAL MENU -{ - POPUP "&Fichier" - { - MENUITEM "&Ouvrir ROM...", IDM_OPEN - MENUITEM "ROMs récentes", ID_FILE_RECENTROM - MENUITEM "&Info ROM", IDM_GAME_INFO - MENUITEM SEPARATOR - MENUITEM "Save State As...", IDM_STATE_SAVE - MENUITEM "Load State As...", IDM_STATE_LOAD - POPUP "Save State" - { - MENUITEM "1", IDM_STATE_SAVE_F1 - MENUITEM "2", IDM_STATE_SAVE_F2 - MENUITEM "3", IDM_STATE_SAVE_F3 - MENUITEM "4", IDM_STATE_SAVE_F4 - MENUITEM "5", IDM_STATE_SAVE_F5 - MENUITEM "6", IDM_STATE_SAVE_F6 - MENUITEM "7", IDM_STATE_SAVE_F7 - MENUITEM "8", IDM_STATE_SAVE_F8 - MENUITEM "9", IDM_STATE_SAVE_F9 - MENUITEM "10", IDM_STATE_SAVE_F10 - } - POPUP "Load State" - { - MENUITEM "1", IDM_STATE_LOAD_F1 - MENUITEM "2", IDM_STATE_LOAD_F2 - MENUITEM "3", IDM_STATE_LOAD_F3 - MENUITEM "4", IDM_STATE_LOAD_F4 - MENUITEM "5", IDM_STATE_LOAD_F5 - MENUITEM "6", IDM_STATE_LOAD_F6 - MENUITEM "7", IDM_STATE_LOAD_F7 - MENUITEM "8", IDM_STATE_LOAD_F8 - MENUITEM "9", IDM_STATE_LOAD_F9 - MENUITEM "10", IDM_STATE_LOAD_F10 - } - MENUITEM SEPARATOR - MENUITEM "Import Backup Memory", IDM_IMPORTBACKUPMEMORY - MENUITEM SEPARATOR - MENUITEM "Capture d'écr&an...", IDM_PRINTSCREEN - MENUITEM "Capture d'écran rapide", IDM_QUICK_PRINTSCREEN - MENUITEM SEPARATOR - MENUITEM "Enregistrer une vidéo", IDM_FILE_RECORDAVI - MENUITEM "Arrêter l'enregistrement", IDM_FILE_STOPAVI - MENUITEM SEPARATOR - MENUITEM "&Quitter\tAlt F4", IDM_QUIT - } - POPUP "&Emulation" - { - MENUITEM "&Pause", IDM_PAUSE - MENUITEM "&Reset", IDM_RESET - MENUITEM SEPARATOR - MENUITEM "&Clear Sound", IDM_SHUT_UP - MENUITEM "GBA &slot", IDM_GBASLOT - POPUP "&Cheats" - { - MENUITEM "&List", IDM_CHEATS_LIST, INACTIVE - MENUITEM "&Search", IDM_CHEATS_SEARCH, INACTIVE - } - } - POPUP "&View" - { - POPUP "&Rotation" - { - MENUITEM " 0", IDC_ROTATE0 - MENUITEM " 90", IDC_ROTATE90 - MENUITEM "180", IDC_ROTATE180 - MENUITEM "270", IDC_ROTATE270 - } - POPUP "Taille de la fenêtre" - { - MENUITEM "1x", IDC_WINDOW1X - MENUITEM "1.5x", IDC_WINDOW1_5X - MENUITEM "2x", IDC_WINDOW2X - MENUITEM "3x", IDC_WINDOW3X - MENUITEM "4x", IDC_WINDOW4X - } - POPUP "Séparation écrans" - { - MENUITEM "Aucune\t(0 px)", IDM_SCREENSEP_NONE - MENUITEM "Bordure fine\t(5 px)", IDM_SCREENSEP_BORDER - MENUITEM "DS\t(64 px)", IDM_SCREENSEP_NDSGAP - } - MENUITEM "Conserver le ratio", IDC_FORCERATIO - MENUITEM "Taille par défaut", IDM_DEFSIZE - MENUITEM SEPARATOR - MENUITEM "Compteur d'images", ID_VIEW_FRAMECOUNTER - MENUITEM "Framerate", ID_VIEW_DISPLAYFPS - MENUITEM "Display Input", ID_VIEW_DISPLAYINPUT - MENUITEM "Display Lag Counter", ID_VIEW_DISPLAYLAG - MENUITEM "Display Microphone", ID_VIEW_DISPLAYMICROPHONE - MENUITEM "HUD Editing Mode", ID_VIEW_HUDEDITOR - } - POPUP "&Config" - { - POPUP "Média de &sauvegarde" - { - MENUITEM "Autodetect", IDC_SAVETYPE1 - MENUITEM "EEPROM 4kbit", IDC_SAVETYPE2 - MENUITEM "EEPROM 64kbit", IDC_SAVETYPE3 - MENUITEM "EEPROM 512kbit", IDC_SAVETYPE4 - MENUITEM "FRAM 256kbit", IDC_SAVETYPE5 - MENUITEM "FLASH 2mbit", IDC_SAVETYPE6 - } - MENUITEM "Config. 3D", IDM_3DCONFIG - MENUITEM "Config. des contrôles", IDM_CONFIG - MENUITEM "Hotkey Config", IDM_HOTKEY_CONFIG - MENUITEM "Config. du son", IDM_SOUNDSETTINGS - MENUITEM "Config. wifi", IDM_WIFISETTINGS, GRAYED - MENUITEM "Config. du firmware", IDM_FIRMSETTINGS - MENUITEM "Config. d'émulation", IDM_EMULATIONSETTINGS - MENUITEM "Microphone Settings", IDM_MICROPHONESETTINGS - POPUP "&Frame Skip" - { - MENUITEM "Limit framerate", IDC_FRAMELIMIT - MENUITEM "Auto", IDC_FRAMESKIPAUTO - MENUITEM "0", IDC_FRAMESKIP0 - MENUITEM "1", IDC_FRAMESKIP1 - MENUITEM "2", IDC_FRAMESKIP2 - MENUITEM "3", IDC_FRAMESKIP3 - MENUITEM "4", IDC_FRAMESKIP4 - MENUITEM "5", IDC_FRAMESKIP5 - MENUITEM "6", IDC_FRAMESKIP6 - MENUITEM "7", IDC_FRAMESKIP7 - MENUITEM "8", IDC_FRAMESKIP8 - MENUITEM "9", IDC_FRAMESKIP9 - } - POPUP "&Langage" - { - MENUITEM "English", IDC_LANGENGLISH - MENUITEM "French", IDC_LANGFRENCH - MENUITEM "Danish", IDC_LANGDANISH - } - } - POPUP "&Outils" - { - MENUITEM "&Désassembleur", IDM_DISASSEMBLER - MENUITEM "Visualiser la &memoire", IDM_MEMORY - MENUITEM "Visualiser les ®istres", IDM_IOREG - MENUITEM "Visualiser les &palettes", IDM_PAL - MENUITEM "Visualiser les &tiles", IDM_TILE - MENUITEM "Visualiser les m&aps", IDM_MAP - MENUITEM "Visualiser les &oams", IDM_OAM - MENUITEM "Visualiser les matrices", IDM_MATRIX_VIEWER - MENUITEM "Visualiser les lights", IDM_LIGHT_VIEWER - MENUITEM SEPARATOR - POPUP "&Visualiser les &couches" - { - MENUITEM "Main BG 0", IDM_MBG0, CHECKED - MENUITEM "Main BG 1", IDM_MBG1, CHECKED - MENUITEM "Main BG 2", IDM_MBG2, CHECKED - MENUITEM "Main BG 3", IDM_MBG3, CHECKED - MENUITEM SEPARATOR - MENUITEM "Sub BG 0", IDM_SBG0, CHECKED - MENUITEM "Sub BG 1", IDM_SBG1, CHECKED - MENUITEM "Sub BG 2", IDM_SBG2, CHECKED - MENUITEM "Sub BG 3", IDM_SBG3, CHECKED - } - } - POPUP "?" - { - MENUITEM "Site &web", IDM_WEBSITE - MENUITEM "&Forums", IDM_FORUM - MENUITEM "&Soumettre un report de bug", IDM_SUBMITBUGREPORT - MENUITEM "A propos", IDM_ABOUT - } -} - - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK -RECENTROMS MENU -{ +RECENTROMS MENU +BEGIN POPUP "Recent ROMs" - { - MENUITEM "None", 601, GRAYED + BEGIN + MENUITEM "None", 601, GRAYED MENUITEM SEPARATOR - MENUITEM "Clear", 600, GRAYED - } -} + MENUITEM "Clear", 600, GRAYED + END +END + +#endif // Danish resources +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// German (Germany) resources -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -RECENTROMS MENU -{ - POPUP "Recent ROMs" - { - MENUITEM "None", 601, GRAYED - MENUITEM SEPARATOR - MENUITEM "Clear", 600, GRAYED - } -} - - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -RECENTROMS MENU -{ - POPUP "ROMs récentes" - { - MENUITEM "Aucune", 601, GRAYED - MENUITEM SEPARATOR - MENUITEM "Vider", 600, GRAYED - } -} - - +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) +#ifdef _WIN32 +LANGUAGE LANG_GERMAN, SUBLANG_GERMAN +#pragma code_page(1252) +#endif //_WIN32 +///////////////////////////////////////////////////////////////////////////// // -// Dialog resources +// Icon // -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK -IDD_3DSETTINGS DIALOG 0, 0, 174, 120 -STYLE DS_MODALFRAME | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU -CAPTION "3D settings" -FONT 8, "MS Sans Serif" -{ - DEFPUSHBUTTON "OK", IDOK, 62, 92, 50, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "Cancel", IDCANCEL, 117, 92, 50, 14, BS_PUSHBUTTON - PUSHBUTTON "Default", IDC_DEFAULT, 7, 92, 50, 14, BS_PUSHBUTTON - GROUPBOX "Renderer:", IDC_STATIC, 7, 7, 160, 39 - COMBOBOX IDC_3DCORE, 15, 23, 146, 138, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST - AUTOCHECKBOX "Unrealistically High-Precision Color Interpolation", IDC_INTERPOLATECOLOR, 9, 55, 165, 10, BS_AUTOCHECKBOX - LTEXT "(Presently only effective for SoftRasterizer)", IDC_STATIC, 21, 65, 134, 8, SS_LEFT -} + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +ICONDESMUME ICON "DeSmuME.ico" +#endif // German (Germany) resources +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_RAMSEARCH DIALOGEX 0, 0, 287, 292 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION " RAM Search" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_RAMLIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_OWNERDATA | WS_BORDER | WS_TABSTOP,9,9,214,151,WS_EX_CLIENTEDGE + PUSHBUTTON "&Search",IDC_C_SEARCH,226,9,52,16 + PUSHBUTTON "&Add Cheat",IDC_C_ADDCHEAT,226,145,52,16,WS_DISABLED + PUSHBUTTON "&Watch",IDC_C_WATCH,226,127,52,16 + PUSHBUTTON "&Reset",IDC_C_RESET,226,27,52,16 + PUSHBUTTON "&Eliminate",IDC_C_ELIMINATE,226,109,52,16 + GROUPBOX "Comparison Operator",IDC_STATIC,10,166,102,118,0,WS_EX_TRANSPARENT + CONTROL "Less Than",IDC_LESSTHAN,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,178,95,11 + CONTROL "Greater Than",IDC_MORETHAN,"Button",BS_AUTORADIOBUTTON,14,191,95,11 + CONTROL "Less Than or Equal To",IDC_NOMORETHAN,"Button",BS_AUTORADIOBUTTON,14,204,95,11 + CONTROL "Greater Than or Equal To",IDC_NOLESSTHAN,"Button",BS_AUTORADIOBUTTON,14,217,95,11 + CONTROL "Equal To",IDC_EQUALTO,"Button",BS_AUTORADIOBUTTON,14,230,95,11 + CONTROL "Not Equal To",IDC_DIFFERENTFROM,"Button",BS_AUTORADIOBUTTON,14,243,95,11 + CONTROL "Different By:",IDC_DIFFERENTBY,"Button",BS_AUTORADIOBUTTON,14,256,52,11 + CONTROL "Modulo",IDC_MODULO,"Button",BS_AUTORADIOBUTTON,14,269,35,11 + EDITTEXT IDC_EDIT_DIFFBY,69,255,38,12,ES_UPPERCASE | ES_AUTOHSCROLL | WS_DISABLED + EDITTEXT IDC_EDIT_MODBY,51,267,38,12,ES_UPPERCASE | ES_AUTOHSCROLL | WS_DISABLED + GROUPBOX "Compare To / By",IDC_STATIC,118,166,153,58,0,WS_EX_TRANSPARENT + CONTROL "Previous Value",IDC_PREVIOUSVALUE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,121,176,67,10 + CONTROL "Specific Value:",IDC_SPECIFICVALUE,"Button",BS_AUTORADIOBUTTON,121,187,67,10 + CONTROL "Specific Address:",IDC_SPECIFICADDRESS,"Button",BS_AUTORADIOBUTTON,121,198,67,10 + CONTROL "Number of Changes:",IDC_NUMBEROFCHANGES,"Button",BS_AUTORADIOBUTTON,121,209,76,10 + EDITTEXT IDC_EDIT_COMPAREVALUE,203,183,63,12,ES_UPPERCASE | ES_AUTOHSCROLL | WS_DISABLED + EDITTEXT IDC_EDIT_COMPAREADDRESS,203,195,63,12,ES_UPPERCASE | ES_AUTOHSCROLL | WS_DISABLED + EDITTEXT IDC_EDIT_COMPARECHANGES,203,207,63,12,ES_UPPERCASE | ES_AUTOHSCROLL | WS_DISABLED + GROUPBOX "Data Type / Display",IDC_STATIC,196,227,75,44,0,WS_EX_TRANSPARENT + CONTROL "Signed",IDC_SIGNED,"Button",BS_AUTORADIOBUTTON | WS_GROUP,200,237,67,8 + CONTROL "Unsigned",IDC_UNSIGNED,"Button",BS_AUTORADIOBUTTON,200,248,67,8 + CONTROL "Hexadecimal",IDC_HEX,"Button",BS_AUTORADIOBUTTON,200,259,67,8 + CONTROL "Autosearch",IDC_C_AUTOSEARCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,273,52,11 + GROUPBOX "Data Size",IDC_STATIC,117,227,73,57,0,WS_EX_TRANSPARENT + CONTROL "1 byte",IDC_1_BYTE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,121,237,61,11 + CONTROL "2 bytes",IDC_2_BYTES,"Button",BS_AUTORADIOBUTTON,121,248,61,11 + CONTROL "4 bytes",IDC_4_BYTES,"Button",BS_AUTORADIOBUTTON,121,259,61,11 + CONTROL "Check Misaligned",IDC_MISALIGN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,121,272,65,8 + PUSHBUTTON "&Clear Change Counts",IDC_C_RESET_CHANGES,226,46,52,20,BS_MULTILINE + PUSHBUTTON "&Undo",IDC_C_UNDO,226,69,52,16,WS_DISABLED + LTEXT "Is",IDC_STATIC,92,270,12,8 +END + +IDD_EDITWATCH DIALOGEX 0, 0, 181, 95 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION " Edit Watch" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CTEXT "Address:",IDC_SPECIFICADDRESS,18,12,35,10 + EDITTEXT IDC_EDIT_COMPAREADDRESS,55,10,65,12,ES_UPPERCASE | ES_AUTOHSCROLL + CTEXT "Notes:",IDC_PROMPT_TEXT,18,24,45,10 + EDITTEXT IDC_PROMPT_EDIT,55,22,65,12,ES_AUTOHSCROLL + GROUPBOX "Data Type",IDC_STATIC,14,37,75,42,0,WS_EX_TRANSPARENT + CONTROL "&Signed",IDC_SIGNED,"Button",BS_AUTORADIOBUTTON | WS_GROUP,18,47,67,8 + CONTROL "&Unsigned",IDC_UNSIGNED,"Button",BS_AUTORADIOBUTTON,18,57,67,8 + CONTROL "&Hexadecimal",IDC_HEX,"Button",BS_AUTORADIOBUTTON,18,67,67,8 + GROUPBOX "Data Size",IDC_STATIC,94,37,73,42,0,WS_EX_TRANSPARENT + CONTROL "&1 byte",IDC_1_BYTE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,98,47,61,11 + CONTROL "&2 bytes",IDC_2_BYTES,"Button",BS_AUTORADIOBUTTON,98,57,61,11 + CONTROL "&4 bytes",IDC_4_BYTES,"Button",BS_AUTORADIOBUTTON,98,67,61,11 + DEFPUSHBUTTON "&OK",IDOK,66,80,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,120,80,50,14 +END + +IDD_RAMWATCH DIALOGEX 0, 0, 269, 298 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION " RAM Watch" +MENU RAMWATCH_MENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_WATCHLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_OWNERDATA | WS_BORDER | WS_TABSTOP,9,9,210,279,WS_EX_CLIENTEDGE + PUSHBUTTON "Edit",IDC_C_WATCH_EDIT,226,66,34,14 + PUSHBUTTON "Remove",IDC_C_WATCH_REMOVE,226,83,34,14 + PUSHBUTTON "New",IDC_C_WATCH,226,100,34,14 + PUSHBUTTON "Duplicate",IDC_C_WATCH_DUPLICATE,226,117,34,14 + PUSHBUTTON "Add Cheat",IDC_C_ADDCHEAT,222,140,42,16,WS_DISABLED + GROUPBOX "Watches",IDC_STATIC,222,11,42,125 + CONTROL "",ID_WATCHES_UPDOWN,"msctls_updown32",WS_TABSTOP,232,23,19,36 +END + IDD_3DSETTINGS DIALOGEX 0, 0, 174, 120 -STYLE DS_MODALFRAME | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "3D settings" -FONT 8, "MS Sans Serif", 0, 0, 0 -{ - DEFPUSHBUTTON "OK", IDOK, 62, 92, 50, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "Cancel", IDCANCEL, 117, 92, 50, 14, BS_PUSHBUTTON - PUSHBUTTON "Default", IDC_DEFAULT, 7, 92, 50, 14, BS_PUSHBUTTON - GROUPBOX "Renderer:", IDC_STATIC, 7, 7, 160, 39 - COMBOBOX IDC_3DCORE, 15, 23, 146, 138, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST - AUTOCHECKBOX "Unrealistically High-Precision Color Interpolation", IDC_INTERPOLATECOLOR, 9, 55, 165, 10, BS_AUTOCHECKBOX - LTEXT "(Presently only effective for SoftRasterizer)", IDC_STATIC, 21, 65, 134, 8, SS_LEFT -} +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,62,92,50,14 + PUSHBUTTON "Cancel",IDCANCEL,117,92,50,14 + PUSHBUTTON "Default",IDC_DEFAULT,7,92,50,14 + GROUPBOX "Renderer:",IDC_STATIC,7,7,160,39 + COMBOBOX IDC_3DCORE,15,23,146,138,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Unrealistically High-Precision Color Interpolation",IDC_INTERPOLATECOLOR, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,55,165,10 + LTEXT "(Presently only effective for SoftRasterizer)",IDC_STATIC,21,65,134,8 +END - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_3DSETTINGS DIALOG 0, 0, 174, 120 -STYLE DS_MODALFRAME | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU -CAPTION "Configuration 3D" -FONT 8, "MS Sans Serif" -{ - DEFPUSHBUTTON "OK", IDOK, 62, 92, 50, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "Annuler", IDCANCEL, 117, 92, 50, 14, BS_PUSHBUTTON - PUSHBUTTON "Par défaut", IDC_DEFAULT, 7, 92, 50, 14, BS_PUSHBUTTON - GROUPBOX "Moteur de rendu :", IDC_STATIC, 7, 7, 160, 39 - COMBOBOX IDC_3DCORE, 15, 23, 146, 138, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST - AUTOCHECKBOX "Unrealistically High-Precision Color Interpolation", IDC_INTERPOLATECOLOR, 9, 55, 165, 10, BS_AUTOCHECKBOX - LTEXT "(Presently only effective for SoftRasterizer)", IDC_STATIC, 21, 65, 134, 8, SS_LEFT -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_ABOUT_BOX DIALOGEX 0, 0, 212, 298 -STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION CAPTION "About DeSmuME..." -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - CTEXT "", IDC_AUTHORS_LIST, 7, 75, 198, 188, SS_CENTER, WS_EX_CLIENTEDGE - DEFPUSHBUTTON "Close", IDC_FERMER, 86, 277, 50, 14, BS_DEFPUSHBUTTON - CTEXT "DeSmuME", IDC_STATIC, 7, 7, 198, 10, SS_CENTER - CTEXT "version", IDC_TXT_VERSION, 7, 18, 198, 8, SS_CENTER - RTEXT "compiled", IDC_TXT_COMPILED, 7, 265, 198, 8, SS_RIGHT - CTEXT "Original author", IDC_STATIC, 7, 36, 198, 10, SS_CENTER - CTEXT "yopyop", IDC_STATIC, 9, 45, 196, 10, SS_CENTER - CTEXT "current team", IDC_STATIC, 8, 63, 198, 10, SS_CENTER -} +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CTEXT "",IDC_AUTHORS_LIST,7,75,198,188,0,WS_EX_CLIENTEDGE + DEFPUSHBUTTON "Close",IDC_FERMER,86,277,50,14 + CTEXT "DeSmuME",IDC_STATIC,7,7,198,10 + CTEXT "version",IDC_TXT_VERSION,7,18,198,8 + RTEXT "compiled",IDC_TXT_COMPILED,7,265,198,8 + CTEXT "Original author",IDC_STATIC,7,36,198,10 + CTEXT "yopyop",IDC_STATIC,9,45,196,10 + CTEXT "current team",IDC_STATIC,8,63,198,10 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_BGMAP_VIEWER DIALOG 0, 0, 495, 320 -STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_BGMAP_VIEWER DIALOG 0, 0, 495, 320 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "BG map viewer" FONT 8, "MS Sans Serif" -{ - PUSHBUTTON "Close", IDCANCEL, 5, 301, 50, 14, BS_PUSHBUTTON - GROUPBOX "Map info", IDC_STATIC, 5, 23, 142, 230 - COMBOBOX IDC_BGMAP_SEL, 5, 5, 142, 154, CBS_DROPDOWNLIST | CBS_HASSTRINGS - LTEXT "BG control : ", IDC_STATIC, 15, 35, 60, 8, SS_LEFT - LTEXT "Char base :", IDC_STATIC, 15, 65, 60, 8, SS_LEFT - LTEXT "Screen base :", IDC_STATIC, 15, 80, 60, 8, SS_LEFT - LTEXT "Priority :", IDC_STATIC, 15, 95, 60, 8, SS_LEFT - LTEXT "Type :", IDC_STATIC, 15, 50, 60, 8, SS_LEFT - LTEXT "Palette :", IDC_STATIC, 15, 110, 60, 8, SS_LEFT - LTEXT "Size :", IDC_STATIC, 15, 125, 60, 8, SS_LEFT - LTEXT "Scroll :", IDC_STATIC, 15, 140, 60, 8, SS_LEFT - LTEXT "Mosaic :", IDC_STATIC, 15, 210, 60, 8, SS_LEFT - LTEXT "Rot/scale :", IDC_STATIC, 15, 155, 60, 8, SS_LEFT - LTEXT "Special effect :", IDC_STATIC, 15, 225, 60, 8, SS_LEFT - LTEXT "Windows :", IDC_STATIC, 15, 240, 60, 8, SS_LEFT - LTEXT "Rot/scale params :", IDC_STATIC, 15, 170, 60, 8, SS_LEFT - LTEXT "BGxCNT here", IDC_BGMAP_BGXCNT, 75, 35, 68, 8, SS_LEFT - LTEXT "type here", IDC_BGMAP_TYPE, 75, 50, 68, 8, SS_LEFT - LTEXT "charbase here", IDC_BGMAP_CHARBASE, 75, 65, 68, 8, SS_LEFT - LTEXT "screenbase here", IDC_BGMAP_SCRBASE, 75, 80, 68, 8, SS_LEFT - LTEXT "prio here", IDC_BGMAP_PRIO, 75, 95, 68, 8, SS_LEFT - LTEXT "pal here", IDC_BGMAP_PAL, 75, 110, 68, 8, SS_LEFT - LTEXT "size here", IDC_BGMAP_SIZE, 75, 125, 68, 8, SS_LEFT - LTEXT "scroll (x,y) here", IDC_BGMAP_SCROLL, 75, 140, 68, 8, SS_LEFT - LTEXT "{yes/no} here", IDC_BGMAP_ROTSCALE, 75, 155, 68, 8, SS_LEFT - LTEXT "pa/pb/pc/pd here\npa/pb/pc/pd here\npa/pb/pc/pd here\npa/pb/pc/pd here\n", IDC_BGMAP_ROTSCALEPARAMS, 75, 170, 68, 35, SS_LEFT - LTEXT "mosaic here", IDC_BGMAP_MOSAIC, 75, 210, 68, 8, SS_LEFT - LTEXT "special effect here", IDC_BGMAP_SPECEFF, 75, 225, 68, 8, SS_LEFT - LTEXT "windows here", IDC_BGMAP_WINDOWS, 75, 240, 68, 8, SS_LEFT -} +BEGIN + PUSHBUTTON "Close",IDCANCEL,5,301,50,14 + GROUPBOX "Map info",IDC_STATIC,5,23,142,230 + COMBOBOX IDC_BGMAP_SEL,5,5,142,154,CBS_DROPDOWNLIST | CBS_HASSTRINGS + LTEXT "BG control : ",IDC_STATIC,15,35,60,8 + LTEXT "Char base :",IDC_STATIC,15,65,60,8 + LTEXT "Screen base :",IDC_STATIC,15,80,60,8 + LTEXT "Priority :",IDC_STATIC,15,95,60,8 + LTEXT "Type :",IDC_STATIC,15,50,60,8 + LTEXT "Palette :",IDC_STATIC,15,110,60,8 + LTEXT "Size :",IDC_STATIC,15,125,60,8 + LTEXT "Scroll :",IDC_STATIC,15,140,60,8 + LTEXT "Mosaic :",IDC_STATIC,15,210,60,8 + LTEXT "Rot/scale :",IDC_STATIC,15,155,60,8 + LTEXT "Special effect :",IDC_STATIC,15,225,60,8 + LTEXT "Windows :",IDC_STATIC,15,240,60,8 + LTEXT "Rot/scale params :",IDC_STATIC,15,170,60,8 + LTEXT "BGxCNT here",IDC_BGMAP_BGXCNT,75,35,68,8 + LTEXT "type here",IDC_BGMAP_TYPE,75,50,68,8 + LTEXT "charbase here",IDC_BGMAP_CHARBASE,75,65,68,8 + LTEXT "screenbase here",IDC_BGMAP_SCRBASE,75,80,68,8 + LTEXT "prio here",IDC_BGMAP_PRIO,75,95,68,8 + LTEXT "pal here",IDC_BGMAP_PAL,75,110,68,8 + LTEXT "size here",IDC_BGMAP_SIZE,75,125,68,8 + LTEXT "scroll (x,y) here",IDC_BGMAP_SCROLL,75,140,68,8 + LTEXT "{yes/no} here",IDC_BGMAP_ROTSCALE,75,155,68,8 + LTEXT "pa/pb/pc/pd here\npa/pb/pc/pd here\npa/pb/pc/pd here\npa/pb/pc/pd here\n",IDC_BGMAP_ROTSCALEPARAMS,75,170,68,35 + LTEXT "mosaic here",IDC_BGMAP_MOSAIC,75,210,68,8 + LTEXT "special effect here",IDC_BGMAP_SPECEFF,75,225,68,8 + LTEXT "windows here",IDC_BGMAP_WINDOWS,75,240,68,8 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_CHEAT_ADD DIALOGEX 0, 0, 121, 192 -STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Add cheat" -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - EDITTEXT IDC_EDIT1, 26, 17, 88, 14, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT2, 7, 42, 107, 14, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT3, 7, 67, 107, 30, ES_MULTILINE - AUTOCHECKBOX "freeze value", IDC_CHECK1, 47, 101, 67, 10, BS_AUTOCHECKBOX - AUTORADIOBUTTON "1 byte", IDC_RADIO1, 9, 124, 37, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "2 bytes", IDC_RADIO2, 9, 134, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "3 bytes", IDC_RADIO3, 9, 145, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "4 bytes", IDC_RADIO4, 9, 156, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - DEFPUSHBUTTON "Add", IDOK, 7, 175, 50, 14, WS_DISABLED | BS_DEFPUSHBUTTON - PUSHBUTTON "Cancel", IDCANCEL, 64, 175, 50, 14, BS_PUSHBUTTON - LTEXT "Address:", IDC_STATIC, 9, 9, 30, 8, SS_LEFT - LTEXT "Value:", IDC_STATIC, 9, 34, 21, 8, SS_LEFT - LTEXT "Description:", IDC_STATIC, 9, 59, 39, 8, SS_LEFT - LTEXT "0x02", IDC_STATIC, 7, 19, 17, 8, SS_LEFT - GROUPBOX " Select size ", IDC_STATIC, 7, 114, 107, 57 - LTEXT "[0..255]", IDC_STATIC_S1, 53, 124, 60, 8, SS_LEFT - LTEXT "[0..65535]", IDC_STATIC_S2, 53, 134, 60, 8, SS_LEFT - LTEXT "[0..16777215]", IDC_STATIC_S3, 53, 145, 58, 8, SS_LEFT - LTEXT "[0..4294967295]", IDC_STATIC_S4, 53, 155, 59, 8, SS_LEFT -} +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_EDIT1,26,17,88,14,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT2,7,42,107,14,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT3,7,67,107,30,ES_MULTILINE + CONTROL "freeze value",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,47,101,67,10 + CONTROL "1 byte",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,9,124,37,10 + CONTROL "2 bytes",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,9,134,40,10 + CONTROL "3 bytes",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,9,145,40,10 + CONTROL "4 bytes",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,9,156,40,10 + DEFPUSHBUTTON "Add",IDOK,7,175,50,14,WS_DISABLED + PUSHBUTTON "Cancel",IDCANCEL,64,175,50,14 + LTEXT "Address:",IDC_STATIC,9,9,30,8 + LTEXT "Value:",IDC_STATIC,9,34,21,8 + LTEXT "Description:",IDC_STATIC,9,59,39,8 + LTEXT "0x02",IDC_STATIC,7,19,17,8 + GROUPBOX " Select size ",IDC_STATIC,7,114,107,57 + LTEXT "[0..255]",IDC_STATIC_S1,53,124,60,8 + LTEXT "[0..65535]",IDC_STATIC_S2,53,134,60,8 + LTEXT "[0..16777215]",IDC_STATIC_S3,53,145,58,8 + LTEXT "[0..4294967295]",IDC_STATIC_S4,53,155,59,8 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_CHEAT_ADD_AR_CODE DIALOGEX 0, 0, 121, 193 -STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Add Action Replay code" -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - EDITTEXT IDC_EDIT2, 7, 17, 107, 97, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT3, 7, 124, 107, 30, ES_MULTILINE - AUTOCHECKBOX "turn on code", IDC_CHECK1, 47, 159, 67, 10, BS_AUTOCHECKBOX - DEFPUSHBUTTON "Add", IDOK, 7, 172, 50, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "Cancel", IDCANCEL, 64, 172, 50, 14, BS_PUSHBUTTON - LTEXT "Code:", -1, 7, 7, 20, 8, SS_LEFT - LTEXT "Description:", -1, 9, 116, 39, 8, SS_LEFT -} +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_EDIT2,7,17,107,97,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT3,7,124,107,30,ES_MULTILINE + CONTROL "turn on code",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,47,159,67,10 + DEFPUSHBUTTON "Add",IDOK,7,172,50,14 + PUSHBUTTON "Cancel",IDCANCEL,64,172,50,14 + LTEXT "Code:",-1,7,7,20,8 + LTEXT "Description:",-1,9,116,39,8 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_CHEAT_ADD_BC_CODE DIALOGEX 0, 0, 121, 193 -STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Add Action Replay code" -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - EDITTEXT IDC_EDIT2, 7, 17, 107, 97, ES_AUTOHSCROLL - EDITTEXT IDC_EDIT3, 7, 124, 107, 30, ES_MULTILINE - AUTOCHECKBOX "turn on code", IDC_CHECK1, 47, 159, 67, 10, BS_AUTOCHECKBOX - DEFPUSHBUTTON "Add", IDOK, 7, 172, 50, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "Cancel", IDCANCEL, 64, 172, 50, 14, BS_PUSHBUTTON - LTEXT "Code:", -1, 7, 7, 20, 8, SS_LEFT - LTEXT "Description:", -1, 9, 116, 39, 8, SS_LEFT -} +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_EDIT2,7,17,107,97,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT3,7,124,107,30,ES_MULTILINE + CONTROL "turn on code",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,47,159,67,10 + DEFPUSHBUTTON "Add",IDOK,7,172,50,14 + PUSHBUTTON "Cancel",IDCANCEL,64,172,50,14 + LTEXT "Code:",-1,7,7,20,8 + LTEXT "Description:",-1,9,116,39,8 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_CHEAT_LIST DIALOGEX 0, 0, 316, 177 -STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Cheats list" -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - CONTROL "", IDC_LIST1, WC_LISTVIEW, WS_TABSTOP | WS_BORDER | LVS_ALIGNLEFT | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_REPORT, 7, 7, 302, 103 - PUSHBUTTON "internal", IDC_BADD, 10, 125, 50, 14, BS_PUSHBUTTON - PUSHBUTTON "Action Replay", IDC_BADD_AR, 66, 125, 67, 14, WS_DISABLED | BS_PUSHBUTTON - PUSHBUTTON "Codebreaker", IDC_BADD_CB, 139, 125, 67, 14, WS_DISABLED | BS_PUSHBUTTON - PUSHBUTTON "Edit", IDC_BEDIT, 245, 113, 64, 14, WS_DISABLED | BS_PUSHBUTTON - PUSHBUTTON "Remove", IDC_BREMOVE, 246, 129, 63, 14, WS_DISABLED | BS_PUSHBUTTON - DEFPUSHBUTTON "Save", IDOK, 109, 156, 50, 14, WS_DISABLED | BS_DEFPUSHBUTTON - PUSHBUTTON "Cancel", IDCANCEL, 163, 156, 50, 14, BS_PUSHBUTTON - GROUPBOX " Add cheats code as... ", IDC_STATIC, 7, 114, 205, 31 -} +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,302,103 + PUSHBUTTON "internal",IDC_BADD,10,125,50,14 + PUSHBUTTON "Action Replay",IDC_BADD_AR,66,125,67,14,WS_DISABLED + PUSHBUTTON "Codebreaker",IDC_BADD_CB,139,125,67,14,WS_DISABLED + PUSHBUTTON "Edit",IDC_BEDIT,245,113,64,14,WS_DISABLED + PUSHBUTTON "Remove",IDC_BREMOVE,246,129,63,14,WS_DISABLED + DEFPUSHBUTTON "Save",IDOK,109,156,50,14,WS_DISABLED + PUSHBUTTON "Cancel",IDCANCEL,163,156,50,14 + GROUPBOX " Add cheats code as... ",IDC_STATIC,7,114,205,31 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_CHEAT_SEARCH DIALOGEX 0, 0, 177, 211 -STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Cheat search" -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - PUSHBUTTON "Restart", IDC_BRESTART, 7, 190, 50, 14, WS_DISABLED | BS_PUSHBUTTON - PUSHBUTTON "View", IDC_BVIEW, 64, 190, 50, 14, WS_DISABLED | BS_PUSHBUTTON - DEFPUSHBUTTON "Search", IDC_BSEARCH, 120, 190, 50, 14, BS_DEFPUSHBUTTON -} +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + PUSHBUTTON "Restart",IDC_BRESTART,7,190,50,14,WS_DISABLED + PUSHBUTTON "View",IDC_BVIEW,64,190,50,14,WS_DISABLED + DEFPUSHBUTTON "Search",IDC_BSEARCH,120,190,50,14 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_CHEAT_SEARCH_COMP DIALOGEX 0, 0, 177, 184 -STYLE DS_SHELLFONT | WS_VISIBLE | WS_CHILDWINDOW | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - RTEXT "number of results: ", IDC_STATIC, 7, 169, 78, 8, SS_RIGHT - LTEXT "Static", IDC_SNUMBER, 92, 169, 78, 8, SS_LEFT - GROUPBOX " Select comparison ", IDC_STATIC, 7, 7, 163, 58 - AUTORADIOBUTTON "new value is > old value", IDC_RADIO1, 9, 17, 93, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "new value is < old value", IDC_RADIO2, 9, 28, 93, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "new value is = old value", IDC_RADIO3, 9, 39, 93, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "new value is != old value", IDC_RADIO4, 9, 50, 96, 10, WS_TABSTOP | BS_AUTORADIOBUTTON -} +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + RTEXT "number of results: ",IDC_STATIC,7,169,78,8 + LTEXT "Static",IDC_SNUMBER,92,169,78,8 + GROUPBOX " Select comparison ",IDC_STATIC,7,7,163,58 + CONTROL "new value is > old value",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,9,17,93,10 + CONTROL "new value is < old value",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,9,28,93,10 + CONTROL "new value is = old value",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,9,39,93,10 + CONTROL "new value is != old value",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,9,50,96,10 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_CHEAT_SEARCH_EXACT DIALOGEX 0, 0, 177, 184 -STYLE DS_SHELLFONT | WS_VISIBLE | WS_CHILDWINDOW | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - EDITTEXT IDC_EVALUE, 7, 18, 163, 14, ES_AUTOHSCROLL - LTEXT "Enter value:", IDC_STATIC, 7, 7, 163, 8, SS_LEFT - RTEXT "Range value:", IDC_STATIC, 7, 36, 78, 8, SS_RIGHT - LTEXT "Static", IDC_STATIC_RANGE, 92, 36, 78, 8, SS_LEFT - RTEXT "number of results: ", IDC_STATIC, 7, 169, 78, 8, SS_RIGHT - LTEXT "Static", IDC_SNUMBER, 92, 169, 78, 8, SS_LEFT -} +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_EVALUE,7,18,163,14,ES_AUTOHSCROLL + LTEXT "Enter value:",IDC_STATIC,7,7,163,8 + RTEXT "Range value:",IDC_STATIC,7,36,78,8 + LTEXT "Static",IDC_STATIC_RANGE,92,36,78,8 + RTEXT "number of results: ",IDC_STATIC,7,169,78,8 + LTEXT "Static",IDC_SNUMBER,92,169,78,8 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_CHEAT_SEARCH_MAIN DIALOGEX 0, 0, 178, 185 -STYLE DS_SHELLFONT | WS_VISIBLE | WS_CHILDWINDOW | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - AUTORADIOBUTTON "1 byte", IDC_RADIO1, 9, 10, 37, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "2 bytes", IDC_RADIO2, 9, 20, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "3 bytes", IDC_RADIO3, 9, 31, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "4 bytes", IDC_RADIO4, 9, 42, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "Unsigned", IDC_RADIO5, 9, 74, 45, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "Signed", IDC_RADIO6, 9, 85, 37, 10, WS_TABSTOP | WS_DISABLED | BS_AUTORADIOBUTTON - GROUPBOX " Select size ", IDC_STATIC, 7, 0, 164, 57 - GROUPBOX " Sign ", IDC_STATIC, 7, 62, 164, 37 - GROUPBOX " Select search type ", IDC_STATIC, 7, 104, 164, 33 - AUTORADIOBUTTON "Exact value search", IDC_RADIO7, 9, 114, 77, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "Comparative search", IDC_RADIO8, 9, 125, 80, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "[0..255]", IDC_STATIC_S1, 53, 10, 115, 8, SS_LEFT - LTEXT "[0..65535]", IDC_STATIC_S2, 53, 20, 116, 8, SS_LEFT - LTEXT "[0..16777215]", IDC_STATIC_S3, 53, 31, 115, 8, SS_LEFT - LTEXT "[0..4294967295]", IDC_STATIC_S4, 53, 41, 116, 8, SS_LEFT -} +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "1 byte",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,9,10,37,10 + CONTROL "2 bytes",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,9,20,40,10 + CONTROL "3 bytes",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,9,31,40,10 + CONTROL "4 bytes",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,9,42,40,10 + CONTROL "Unsigned",IDC_RADIO5,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,9,74,45,10 + CONTROL "Signed",IDC_RADIO6,"Button",BS_AUTORADIOBUTTON | WS_DISABLED | WS_TABSTOP,9,85,37,10 + GROUPBOX " Select size ",IDC_STATIC,7,0,164,57 + GROUPBOX " Sign ",IDC_STATIC,7,62,164,37 + GROUPBOX " Select search type ",IDC_STATIC,7,104,164,33 + CONTROL "Exact value search",IDC_RADIO7,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,9,114,77,10 + CONTROL "Comparative search",IDC_RADIO8,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,9,125,80,10 + LTEXT "[0..255]",IDC_STATIC_S1,53,10,115,8 + LTEXT "[0..65535]",IDC_STATIC_S2,53,20,116,8 + LTEXT "[0..16777215]",IDC_STATIC_S3,53,31,115,8 + LTEXT "[0..4294967295]",IDC_STATIC_S4,53,41,116,8 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_CHEAT_SEARCH_RESULT DIALOGEX 0, 0, 177, 184 -STYLE DS_SHELLFONT | WS_VISIBLE | WS_CHILDWINDOW | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - LTEXT "Now return to your game and come back when the next search should be processed", IDC_STATIC, 7, 7, 163, 20, SS_LEFT - RTEXT "number of results: ", IDC_STATIC, 7, 169, 78, 8, SS_RIGHT - LTEXT "Static", IDC_SNUMBER, 92, 169, 78, 8, SS_LEFT -} +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Now return to your game and come back when the next search should be processed",IDC_STATIC,7,7,163,20 + RTEXT "number of results: ",IDC_STATIC,7,169,78,8 + LTEXT "Static",IDC_SNUMBER,92,169,78,8 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_CHEAT_SEARCH_VIEW DIALOGEX 0, 0, 177, 211 -STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Cheat search - Results" -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - CONTROL "", IDC_LIST, WC_LISTVIEW, WS_TABSTOP | WS_BORDER | LVS_ALIGNLEFT | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_REPORT, 7, 7, 163, 180 - PUSHBUTTON "Return", IDCANCEL, 64, 190, 50, 14, BS_PUSHBUTTON - DEFPUSHBUTTON "Add", IDC_BADD, 120, 190, 50, 14, BS_DEFPUSHBUTTON -} +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,163,180 + PUSHBUTTON "Return",IDCANCEL,64,190,50,14 + DEFPUSHBUTTON "Add",IDC_BADD,120,190,50,14 +END - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK IDD_DESASSEMBLEUR_VIEWER7 DIALOGEX 0, 0, 380, 186 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION CAPTION "Disassembler" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - AUTORADIOBUTTON "Auto ", IDC_AUTO_DES, 10, 4, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "ARM", IDC_ARM, 44, 4, 35, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "Thumb", IDC_THUMB, 82, 4, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "Gå til:", IDC_STATIC, 130, 4, 33, 10, SS_LEFT - EDITTEXT IDC_GOTODES, 155, 1, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "&Start", IDC_GO, 240, 1, 20, 14, BS_PUSHBUTTON - CONTROL "Rediger", IDC_DES_BOX, "DesViewBox7", 0x50210000, 4, 16, 296, 150, 0x00000200 - PUSHBUTTON "&Luk", IDC_FERMER, 246, 170, 50, 14, BS_PUSHBUTTON - LTEXT "R0 :", IDC_STATIC, 304, 16, 17, 8, SS_LEFT - LTEXT "R1 :", IDC_STATIC, 304, 24, 17, 8, SS_LEFT - LTEXT "R2 :", IDC_STATIC, 304, 32, 17, 8, SS_LEFT - LTEXT "R3 :", IDC_STATIC, 304, 40, 17, 8, SS_LEFT - LTEXT "R4 :", IDC_STATIC, 304, 48, 17, 8, SS_LEFT - LTEXT "R5 :", IDC_STATIC, 304, 56, 17, 8, SS_LEFT - LTEXT "R6 :", IDC_STATIC, 304, 64, 17, 8, SS_LEFT - LTEXT "R7 :", IDC_STATIC, 304, 72, 17, 8, SS_LEFT - LTEXT "R8 :", IDC_STATIC, 304, 80, 17, 8, SS_LEFT - LTEXT "R9 :", IDC_STATIC, 304, 88, 17, 8, SS_LEFT - LTEXT "R10 :", IDC_STATIC, 304, 96, 17, 8, SS_LEFT - LTEXT "R11 :", IDC_STATIC, 304, 104, 17, 8, SS_LEFT - LTEXT "R12 :", IDC_STATIC, 304, 112, 17, 8, SS_LEFT - LTEXT "SP :", IDC_STATIC, 304, 120, 17, 8, SS_LEFT - LTEXT "LR :", IDC_STATIC, 304, 128, 17, 8, SS_LEFT - LTEXT "PC :", IDC_STATIC, 304, 136, 17, 8, SS_LEFT - LTEXT "Mode :", IDC_STATIC, 304, 158, 22, 8, SS_LEFT - LTEXT "SPSR :", IDC_STATIC, 304, 168, 22, 8, SS_LEFT - LTEXT "00000000", IDC_R0, 325, 16, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R1, 325, 24, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R2, 325, 32, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R3, 325, 40, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R4, 325, 48, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R5, 325, 56, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R6, 325, 64, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R7, 325, 72, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R8, 325, 80, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R9, 325, 88, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R10, 325, 96, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R11, 325, 104, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R12, 325, 112, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R13, 325, 120, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R14, 325, 128, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R15, 325, 136, 40, 8, SS_LEFT - LTEXT "", IDC_MODE, 327, 158, 28, 8, SS_LEFT - LTEXT "", IDC_TMP, 327, 168, 40, 8, SS_LEFT - PUSHBUTTON "&Refresh", IDC_REFRESH, 162, 170, 50, 14, BS_PUSHBUTTON | BS_ICON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 285, 1, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 340, 3, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 352, 2, 11, 14 - LTEXT "frames", IDC_STATIC, 364, 5, 16, 8, SS_LEFT - EDITTEXT IDC_SETPNUM, 5, 170, 34, 14, WS_GROUP | ES_AUTOHSCROLL | ES_NUMBER | ES_UPPERCASE - PUSHBUTTON "&Step", IDC_STEP, 41, 170, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "Autoupd asm", IDC_AUTOUPDATE_ASM, 94, 172, 57, 10, BS_AUTOCHECKBOX -} +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + CONTROL "Auto ",IDC_AUTO_DES,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,10,4,35,10 + CONTROL "ARM",IDC_ARM,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,44,4,35,10 + CONTROL "Thumb",IDC_THUMB,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,82,4,40,10 + LTEXT "Go to:",IDC_STATIC,130,4,33,10 + EDITTEXT IDC_GOTODES,155,1,82,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP + PUSHBUTTON "&GO",IDC_GO,240,1,20,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,285,1,54,14 + CONTROL "Edit",IDC_DES_BOX,"DesViewBox7",WS_VSCROLL | WS_TABSTOP,4,16,296,150,WS_EX_CLIENTEDGE + PUSHBUTTON "&Close",IDC_FERMER,248,170,50,14 + LTEXT "R0 :",IDC_STATIC,304,16,17,8 + LTEXT "R1 :",IDC_STATIC,304,24,17,8 + LTEXT "R2 :",IDC_STATIC,304,32,17,8 + LTEXT "R3 :",IDC_STATIC,304,40,17,8 + LTEXT "R4 :",IDC_STATIC,304,48,17,8 + LTEXT "R5 :",IDC_STATIC,304,56,17,8 + LTEXT "R6 :",IDC_STATIC,304,64,17,8 + LTEXT "R7 :",IDC_STATIC,304,72,17,8 + LTEXT "R8 :",IDC_STATIC,304,80,17,8 + LTEXT "R9 :",IDC_STATIC,304,88,17,8 + LTEXT "R10 :",IDC_STATIC,304,96,17,8 + LTEXT "R11 :",IDC_STATIC,304,104,17,8 + LTEXT "R12 :",IDC_STATIC,304,112,17,8 + LTEXT "SP :",IDC_STATIC,304,120,17,8 + LTEXT "LR :",IDC_STATIC,304,128,17,8 + LTEXT "PC :",IDC_STATIC,304,136,17,8 + LTEXT "Mode :",IDC_STATIC,304,158,22,8 + LTEXT "SPSR :",IDC_STATIC,304,168,22,8 + LTEXT "00000000",IDC_R0,325,16,40,8 + LTEXT "00000000",IDC_R1,325,24,40,8 + LTEXT "00000000",IDC_R2,325,32,40,8 + LTEXT "00000000",IDC_R3,325,40,40,8 + LTEXT "00000000",IDC_R4,325,48,40,8 + LTEXT "00000000",IDC_R5,325,56,40,8 + LTEXT "00000000",IDC_R6,325,64,40,8 + LTEXT "00000000",IDC_R7,325,72,40,8 + LTEXT "00000000",IDC_R8,325,80,40,8 + LTEXT "00000000",IDC_R9,325,88,40,8 + LTEXT "00000000",IDC_R10,325,96,40,8 + LTEXT "00000000",IDC_R11,325,104,40,8 + LTEXT "00000000",IDC_R12,325,112,40,8 + LTEXT "00000000",IDC_R13,325,120,40,8 + LTEXT "00000000",IDC_R14,325,128,40,8 + LTEXT "00000000",IDC_R15,325,136,40,8 + LTEXT "",IDC_MODE,327,158,28,8 + LTEXT "",IDC_TMP,327,168,40,8 + EDITTEXT IDC_AUTO_UPDATE_SECS,340,3,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,352,2,11,14 + LTEXT "frames",IDC_STATIC,364,5,16,8 + PUSHBUTTON "&Refresh",IDC_REFRESH,162,170,50,14,BS_ICON + EDITTEXT IDC_SETPNUM,5,170,34,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_NUMBER | WS_GROUP + PUSHBUTTON "&Step",IDC_STEP,41,170,50,14 + CONTROL "Autoupd asm",IDC_AUTOUPDATE_ASM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,172,57,10 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_DESASSEMBLEUR_VIEWER7 DIALOGEX 0, 0, 380, 186 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME -CAPTION "Disassembler" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - AUTORADIOBUTTON "Auto ", IDC_AUTO_DES, 10, 4, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "ARM", IDC_ARM, 44, 4, 35, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "Thumb", IDC_THUMB, 82, 4, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "Go to:", IDC_STATIC, 130, 4, 33, 10, SS_LEFT - EDITTEXT IDC_GOTODES, 155, 1, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "&GO", IDC_GO, 240, 1, 20, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 285, 1, 54, 14, BS_AUTOCHECKBOX - CONTROL "Edit", IDC_DES_BOX, "DesViewBox7", 0x50210000, 4, 16, 296, 150, 0x00000200 - PUSHBUTTON "&Close", IDC_FERMER, 248, 170, 50, 14, BS_PUSHBUTTON - LTEXT "R0 :", IDC_STATIC, 304, 16, 17, 8, SS_LEFT - LTEXT "R1 :", IDC_STATIC, 304, 24, 17, 8, SS_LEFT - LTEXT "R2 :", IDC_STATIC, 304, 32, 17, 8, SS_LEFT - LTEXT "R3 :", IDC_STATIC, 304, 40, 17, 8, SS_LEFT - LTEXT "R4 :", IDC_STATIC, 304, 48, 17, 8, SS_LEFT - LTEXT "R5 :", IDC_STATIC, 304, 56, 17, 8, SS_LEFT - LTEXT "R6 :", IDC_STATIC, 304, 64, 17, 8, SS_LEFT - LTEXT "R7 :", IDC_STATIC, 304, 72, 17, 8, SS_LEFT - LTEXT "R8 :", IDC_STATIC, 304, 80, 17, 8, SS_LEFT - LTEXT "R9 :", IDC_STATIC, 304, 88, 17, 8, SS_LEFT - LTEXT "R10 :", IDC_STATIC, 304, 96, 17, 8, SS_LEFT - LTEXT "R11 :", IDC_STATIC, 304, 104, 17, 8, SS_LEFT - LTEXT "R12 :", IDC_STATIC, 304, 112, 17, 8, SS_LEFT - LTEXT "SP :", IDC_STATIC, 304, 120, 17, 8, SS_LEFT - LTEXT "LR :", IDC_STATIC, 304, 128, 17, 8, SS_LEFT - LTEXT "PC :", IDC_STATIC, 304, 136, 17, 8, SS_LEFT - LTEXT "Mode :", IDC_STATIC, 304, 158, 22, 8, SS_LEFT - LTEXT "SPSR :", IDC_STATIC, 304, 168, 22, 8, SS_LEFT - LTEXT "00000000", IDC_R0, 325, 16, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R1, 325, 24, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R2, 325, 32, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R3, 325, 40, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R4, 325, 48, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R5, 325, 56, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R6, 325, 64, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R7, 325, 72, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R8, 325, 80, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R9, 325, 88, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R10, 325, 96, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R11, 325, 104, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R12, 325, 112, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R13, 325, 120, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R14, 325, 128, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R15, 325, 136, 40, 8, SS_LEFT - LTEXT "", IDC_MODE, 327, 158, 28, 8, SS_LEFT - LTEXT "", IDC_TMP, 327, 168, 40, 8, SS_LEFT - EDITTEXT IDC_AUTO_UPDATE_SECS, 340, 3, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 352, 2, 11, 14 - LTEXT "frames", IDC_STATIC, 364, 5, 16, 8, SS_LEFT - PUSHBUTTON "&Refresh", IDC_REFRESH, 162, 170, 50, 14, BS_PUSHBUTTON | BS_ICON - EDITTEXT IDC_SETPNUM, 5, 170, 34, 14, WS_GROUP | ES_AUTOHSCROLL | ES_NUMBER | ES_UPPERCASE - PUSHBUTTON "&Step", IDC_STEP, 41, 170, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "Autoupd asm", IDC_AUTOUPDATE_ASM, 94, 172, 57, 10, BS_AUTOCHECKBOX -} - - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_DESASSEMBLEUR_VIEWER7 DIALOGEX 0, 0, 380, 186 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME -CAPTION "Desassembleur" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - AUTORADIOBUTTON "Auto ", IDC_AUTO_DES, 10, 4, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "ARM", IDC_ARM, 44, 4, 35, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "Thumb", IDC_THUMB, 82, 4, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "Aller E:", IDC_STATIC, 130, 4, 33, 10, SS_LEFT - EDITTEXT IDC_GOTODES, 155, 1, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "&GO", IDC_GO, 240, 1, 20, 14, BS_PUSHBUTTON - CONTROL "Edit", IDC_DES_BOX, "DesViewBox7", 0x50210000, 4, 16, 296, 150, 0x00000200 - PUSHBUTTON "&Fermer", IDC_FERMER, 246, 170, 50, 14, BS_PUSHBUTTON - LTEXT "R0 :", IDC_STATIC, 304, 16, 17, 8, SS_LEFT - LTEXT "R1 :", IDC_STATIC, 304, 24, 17, 8, SS_LEFT - LTEXT "R2 :", IDC_STATIC, 304, 32, 17, 8, SS_LEFT - LTEXT "R3 :", IDC_STATIC, 304, 40, 17, 8, SS_LEFT - LTEXT "R4 :", IDC_STATIC, 304, 48, 17, 8, SS_LEFT - LTEXT "R5 :", IDC_STATIC, 304, 56, 17, 8, SS_LEFT - LTEXT "R6 :", IDC_STATIC, 304, 64, 17, 8, SS_LEFT - LTEXT "R7 :", IDC_STATIC, 304, 72, 17, 8, SS_LEFT - LTEXT "R8 :", IDC_STATIC, 304, 80, 17, 8, SS_LEFT - LTEXT "R9 :", IDC_STATIC, 304, 88, 17, 8, SS_LEFT - LTEXT "R10 :", IDC_STATIC, 304, 96, 17, 8, SS_LEFT - LTEXT "R11 :", IDC_STATIC, 304, 104, 17, 8, SS_LEFT - LTEXT "R12 :", IDC_STATIC, 304, 112, 17, 8, SS_LEFT - LTEXT "SP :", IDC_STATIC, 304, 120, 17, 8, SS_LEFT - LTEXT "LR :", IDC_STATIC, 304, 128, 17, 8, SS_LEFT - LTEXT "PC :", IDC_STATIC, 304, 136, 17, 8, SS_LEFT - LTEXT "Mode :", IDC_STATIC, 304, 158, 22, 8, SS_LEFT - LTEXT "SPSR :", IDC_STATIC, 304, 168, 22, 8, SS_LEFT - LTEXT "00000000", IDC_R0, 325, 16, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R1, 325, 24, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R2, 325, 32, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R3, 325, 40, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R4, 325, 48, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R5, 325, 56, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R6, 325, 64, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R7, 325, 72, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R8, 325, 80, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R9, 325, 88, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R10, 325, 96, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R11, 325, 104, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R12, 325, 112, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R13, 325, 120, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R14, 325, 128, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R15, 325, 136, 40, 8, SS_LEFT - LTEXT "", IDC_MODE, 327, 158, 28, 8, SS_LEFT - LTEXT "", IDC_TMP, 327, 168, 40, 8, SS_LEFT - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 285, 1, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 340, 3, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 352, 2, 11, 14 - LTEXT "frames", IDC_STATIC, 364, 5, 16, 8, SS_LEFT - PUSHBUTTON "&Refresh", IDC_REFRESH, 162, 170, 50, 14, BS_PUSHBUTTON | BS_ICON - EDITTEXT IDC_SETPNUM, 5, 170, 34, 14, WS_GROUP | ES_AUTOHSCROLL | ES_NUMBER | ES_UPPERCASE - PUSHBUTTON "&Step", IDC_STEP, 41, 170, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "Autoupd asm", IDC_AUTOUPDATE_ASM, 94, 172, 57, 10, BS_AUTOCHECKBOX -} - - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK IDD_DESASSEMBLEUR_VIEWER9 DIALOGEX 0, 0, 380, 186 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION CAPTION "Disassembler" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - AUTORADIOBUTTON "Auto ", IDC_AUTO_DES, 10, 4, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "ARM", IDC_ARM, 44, 4, 35, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "Thumb", IDC_THUMB, 82, 4, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "Gå til:", IDC_STATIC, 130, 4, 33, 10, SS_LEFT - EDITTEXT IDC_GOTODES, 155, 1, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "&Start", IDC_GO, 240, 1, 20, 14, BS_PUSHBUTTON - CONTROL "Rediger", IDC_DES_BOX, "DesViewBox9", 0x50210000, 4, 16, 296, 150, 0x00000200 - PUSHBUTTON "&Luk", IDC_FERMER, 246, 170, 50, 14, BS_PUSHBUTTON - LTEXT "R0 :", IDC_STATIC, 304, 16, 17, 8, SS_LEFT - LTEXT "R1 :", IDC_STATIC, 304, 24, 17, 8, SS_LEFT - LTEXT "R2 :", IDC_STATIC, 304, 32, 17, 8, SS_LEFT - LTEXT "R3 :", IDC_STATIC, 304, 40, 17, 8, SS_LEFT - LTEXT "R4 :", IDC_STATIC, 304, 48, 17, 8, SS_LEFT - LTEXT "R5 :", IDC_STATIC, 304, 56, 17, 8, SS_LEFT - LTEXT "R6 :", IDC_STATIC, 304, 64, 17, 8, SS_LEFT - LTEXT "R7 :", IDC_STATIC, 304, 72, 17, 8, SS_LEFT - LTEXT "R8 :", IDC_STATIC, 304, 80, 17, 8, SS_LEFT - LTEXT "R9 :", IDC_STATIC, 304, 88, 17, 8, SS_LEFT - LTEXT "R10 :", IDC_STATIC, 304, 96, 17, 8, SS_LEFT - LTEXT "R11 :", IDC_STATIC, 304, 104, 17, 8, SS_LEFT - LTEXT "R12 :", IDC_STATIC, 304, 112, 17, 8, SS_LEFT - LTEXT "SP :", IDC_STATIC, 304, 120, 17, 8, SS_LEFT - LTEXT "LR :", IDC_STATIC, 304, 128, 17, 8, SS_LEFT - LTEXT "PC :", IDC_STATIC, 304, 136, 17, 8, SS_LEFT - LTEXT "Mode :", IDC_STATIC, 304, 158, 22, 8, SS_LEFT - LTEXT "SPSR :", IDC_STATIC, 304, 168, 22, 8, SS_LEFT - LTEXT "00000000", IDC_R0, 325, 16, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R1, 325, 24, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R2, 325, 32, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R3, 325, 40, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R4, 325, 48, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R5, 325, 56, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R6, 325, 64, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R7, 325, 72, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R8, 325, 80, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R9, 325, 88, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R10, 325, 96, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R11, 325, 104, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R12, 325, 112, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R13, 325, 120, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R14, 325, 128, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R15, 325, 136, 40, 8, SS_LEFT - LTEXT "", IDC_MODE, 327, 158, 28, 8, SS_LEFT - LTEXT "", IDC_TMP, 327, 168, 40, 8, SS_LEFT - PUSHBUTTON "&Refresh", IDC_REFRESH, 162, 170, 50, 14, BS_PUSHBUTTON | BS_ICON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 285, 1, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 340, 3, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 352, 2, 11, 14 - LTEXT "frames", IDC_STATIC, 364, 5, 16, 8, SS_LEFT - EDITTEXT IDC_SETPNUM, 5, 170, 34, 14, WS_GROUP | ES_AUTOHSCROLL | ES_NUMBER | ES_UPPERCASE - PUSHBUTTON "&Step", IDC_STEP, 41, 170, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "Autoupd asm", IDC_AUTOUPDATE_ASM, 94, 172, 57, 10, BS_AUTOCHECKBOX -} +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + CONTROL "Auto ",IDC_AUTO_DES,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,10,4,35,10 + CONTROL "ARM",IDC_ARM,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,44,4,35,10 + CONTROL "Thumb",IDC_THUMB,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,82,4,40,10 + LTEXT "Go to:",IDC_STATIC,130,4,33,10 + EDITTEXT IDC_GOTODES,155,1,82,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP + PUSHBUTTON "&GO",IDC_GO,240,1,20,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,285,1,54,14 + CONTROL "Edit",IDC_DES_BOX,"DesViewBox9",WS_VSCROLL | WS_TABSTOP,4,16,296,150,WS_EX_CLIENTEDGE + PUSHBUTTON "&Close",IDC_FERMER,248,170,50,14 + EDITTEXT IDC_SETPNUM,5,170,34,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_NUMBER | WS_GROUP + PUSHBUTTON "&Step",IDC_STEP,41,170,50,14 + LTEXT "R0 :",IDC_STATIC,304,16,17,8 + LTEXT "R1 :",IDC_STATIC,304,24,17,8 + LTEXT "R2 :",IDC_STATIC,304,32,17,8 + LTEXT "R3 :",IDC_STATIC,304,40,17,8 + LTEXT "R4 :",IDC_STATIC,304,48,17,8 + LTEXT "R5 :",IDC_STATIC,304,56,17,8 + LTEXT "R6 :",IDC_STATIC,304,64,17,8 + LTEXT "R7 :",IDC_STATIC,304,72,17,8 + LTEXT "R8 :",IDC_STATIC,304,80,17,8 + LTEXT "R9 :",IDC_STATIC,304,88,17,8 + LTEXT "R10 :",IDC_STATIC,304,96,17,8 + LTEXT "R11 :",IDC_STATIC,304,104,17,8 + LTEXT "R12 :",IDC_STATIC,304,112,17,8 + LTEXT "SP :",IDC_STATIC,304,120,17,8 + LTEXT "LR :",IDC_STATIC,304,128,17,8 + LTEXT "PC :",IDC_STATIC,304,136,17,8 + LTEXT "Mode :",IDC_STATIC,304,158,22,8 + LTEXT "SPSR :",IDC_STATIC,304,168,22,8 + LTEXT "00000000",IDC_R0,325,16,40,8 + LTEXT "00000000",IDC_R1,325,24,40,8 + LTEXT "00000000",IDC_R2,325,32,40,8 + LTEXT "00000000",IDC_R3,325,40,40,8 + LTEXT "00000000",IDC_R4,325,48,40,8 + LTEXT "00000000",IDC_R5,325,56,40,8 + LTEXT "00000000",IDC_R6,325,64,40,8 + LTEXT "00000000",IDC_R7,325,72,40,8 + LTEXT "00000000",IDC_R8,325,80,40,8 + LTEXT "00000000",IDC_R9,325,88,40,8 + LTEXT "00000000",IDC_R10,325,96,40,8 + LTEXT "00000000",IDC_R11,325,104,40,8 + LTEXT "00000000",IDC_R12,325,112,40,8 + LTEXT "00000000",IDC_R13,325,120,40,8 + LTEXT "00000000",IDC_R14,325,128,40,8 + LTEXT "00000000",IDC_R15,325,136,40,8 + LTEXT "",IDC_MODE,327,158,28,8 + LTEXT "",IDC_TMP,327,168,40,8 + EDITTEXT IDC_AUTO_UPDATE_SECS,340,3,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,352,2,11,14 + LTEXT "frames",IDC_STATIC,364,5,16,8 + PUSHBUTTON "&Refresh",IDC_REFRESH,162,170,50,14,BS_ICON + CONTROL "Autoupd asm",IDC_AUTOUPDATE_ASM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,172,57,10 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_DESASSEMBLEUR_VIEWER9 DIALOGEX 0, 0, 380, 186 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME -CAPTION "Disassembler" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - AUTORADIOBUTTON "Auto ", IDC_AUTO_DES, 10, 4, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "ARM", IDC_ARM, 44, 4, 35, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "Thumb", IDC_THUMB, 82, 4, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "Go to:", IDC_STATIC, 130, 4, 33, 10, SS_LEFT - EDITTEXT IDC_GOTODES, 155, 1, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "&GO", IDC_GO, 240, 1, 20, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 285, 1, 54, 14, BS_AUTOCHECKBOX - CONTROL "Edit", IDC_DES_BOX, "DesViewBox9", 0x50210000, 4, 16, 296, 150, 0x00000200 - PUSHBUTTON "&Close", IDC_FERMER, 248, 170, 50, 14, BS_PUSHBUTTON - EDITTEXT IDC_SETPNUM, 5, 170, 34, 14, WS_GROUP | ES_AUTOHSCROLL | ES_NUMBER | ES_UPPERCASE - PUSHBUTTON "&Step", IDC_STEP, 41, 170, 50, 14, BS_PUSHBUTTON - LTEXT "R0 :", IDC_STATIC, 304, 16, 17, 8, SS_LEFT - LTEXT "R1 :", IDC_STATIC, 304, 24, 17, 8, SS_LEFT - LTEXT "R2 :", IDC_STATIC, 304, 32, 17, 8, SS_LEFT - LTEXT "R3 :", IDC_STATIC, 304, 40, 17, 8, SS_LEFT - LTEXT "R4 :", IDC_STATIC, 304, 48, 17, 8, SS_LEFT - LTEXT "R5 :", IDC_STATIC, 304, 56, 17, 8, SS_LEFT - LTEXT "R6 :", IDC_STATIC, 304, 64, 17, 8, SS_LEFT - LTEXT "R7 :", IDC_STATIC, 304, 72, 17, 8, SS_LEFT - LTEXT "R8 :", IDC_STATIC, 304, 80, 17, 8, SS_LEFT - LTEXT "R9 :", IDC_STATIC, 304, 88, 17, 8, SS_LEFT - LTEXT "R10 :", IDC_STATIC, 304, 96, 17, 8, SS_LEFT - LTEXT "R11 :", IDC_STATIC, 304, 104, 17, 8, SS_LEFT - LTEXT "R12 :", IDC_STATIC, 304, 112, 17, 8, SS_LEFT - LTEXT "SP :", IDC_STATIC, 304, 120, 17, 8, SS_LEFT - LTEXT "LR :", IDC_STATIC, 304, 128, 17, 8, SS_LEFT - LTEXT "PC :", IDC_STATIC, 304, 136, 17, 8, SS_LEFT - LTEXT "Mode :", IDC_STATIC, 304, 158, 22, 8, SS_LEFT - LTEXT "SPSR :", IDC_STATIC, 304, 168, 22, 8, SS_LEFT - LTEXT "00000000", IDC_R0, 325, 16, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R1, 325, 24, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R2, 325, 32, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R3, 325, 40, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R4, 325, 48, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R5, 325, 56, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R6, 325, 64, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R7, 325, 72, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R8, 325, 80, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R9, 325, 88, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R10, 325, 96, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R11, 325, 104, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R12, 325, 112, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R13, 325, 120, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R14, 325, 128, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R15, 325, 136, 40, 8, SS_LEFT - LTEXT "", IDC_MODE, 327, 158, 28, 8, SS_LEFT - LTEXT "", IDC_TMP, 327, 168, 40, 8, SS_LEFT - EDITTEXT IDC_AUTO_UPDATE_SECS, 340, 3, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 352, 2, 11, 14 - LTEXT "frames", IDC_STATIC, 364, 5, 16, 8, SS_LEFT - PUSHBUTTON "&Refresh", IDC_REFRESH, 162, 170, 50, 14, BS_PUSHBUTTON | BS_ICON - AUTOCHECKBOX "Autoupd asm", IDC_AUTOUPDATE_ASM, 94, 172, 57, 10, BS_AUTOCHECKBOX -} - - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_DESASSEMBLEUR_VIEWER9 DIALOGEX 0, 0, 380, 186 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME -CAPTION "Desassembleur" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - AUTORADIOBUTTON "Auto ", IDC_AUTO_DES, 10, 4, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "ARM", IDC_ARM, 44, 4, 35, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "Thumb", IDC_THUMB, 82, 4, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "Aller E:", IDC_STATIC, 130, 4, 33, 10, SS_LEFT - EDITTEXT IDC_GOTODES, 155, 1, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "&GO", IDC_GO, 240, 1, 20, 14, BS_PUSHBUTTON - CONTROL "Edit", IDC_DES_BOX, "DesViewBox9", 0x50210000, 4, 16, 296, 150, 0x00000200 - PUSHBUTTON "&Fermer", IDC_FERMER, 246, 170, 50, 14, BS_PUSHBUTTON - LTEXT "R0 :", IDC_STATIC, 304, 16, 17, 8, SS_LEFT - LTEXT "R1 :", IDC_STATIC, 304, 24, 17, 8, SS_LEFT - LTEXT "R2 :", IDC_STATIC, 304, 32, 17, 8, SS_LEFT - LTEXT "R3 :", IDC_STATIC, 304, 40, 17, 8, SS_LEFT - LTEXT "R4 :", IDC_STATIC, 304, 48, 17, 8, SS_LEFT - LTEXT "R5 :", IDC_STATIC, 304, 56, 17, 8, SS_LEFT - LTEXT "R6 :", IDC_STATIC, 304, 64, 17, 8, SS_LEFT - LTEXT "R7 :", IDC_STATIC, 304, 72, 17, 8, SS_LEFT - LTEXT "R8 :", IDC_STATIC, 304, 80, 17, 8, SS_LEFT - LTEXT "R9 :", IDC_STATIC, 304, 88, 17, 8, SS_LEFT - LTEXT "R10 :", IDC_STATIC, 304, 96, 17, 8, SS_LEFT - LTEXT "R11 :", IDC_STATIC, 304, 104, 17, 8, SS_LEFT - LTEXT "R12 :", IDC_STATIC, 304, 112, 17, 8, SS_LEFT - LTEXT "SP :", IDC_STATIC, 304, 120, 17, 8, SS_LEFT - LTEXT "LR :", IDC_STATIC, 304, 128, 17, 8, SS_LEFT - LTEXT "PC :", IDC_STATIC, 304, 136, 17, 8, SS_LEFT - LTEXT "Mode :", IDC_STATIC, 304, 158, 22, 8, SS_LEFT - LTEXT "SPSR :", IDC_STATIC, 304, 168, 22, 8, SS_LEFT - LTEXT "00000000", IDC_R0, 325, 16, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R1, 325, 24, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R2, 325, 32, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R3, 325, 40, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R4, 325, 48, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R5, 325, 56, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R6, 325, 64, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R7, 325, 72, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R8, 325, 80, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R9, 325, 88, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R10, 325, 96, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R11, 325, 104, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R12, 325, 112, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R13, 325, 120, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R14, 325, 128, 40, 8, SS_LEFT - LTEXT "00000000", IDC_R15, 325, 136, 40, 8, SS_LEFT - LTEXT "", IDC_MODE, 327, 158, 28, 8, SS_LEFT - LTEXT "", IDC_TMP, 327, 168, 40, 8, SS_LEFT - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 285, 1, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 340, 3, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 352, 2, 11, 14 - LTEXT "frames", IDC_STATIC, 364, 5, 16, 8, SS_LEFT - PUSHBUTTON "&Refresh", IDC_REFRESH, 162, 170, 50, 14, BS_PUSHBUTTON | BS_ICON - EDITTEXT IDC_SETPNUM, 5, 170, 34, 14, WS_GROUP | ES_AUTOHSCROLL | ES_NUMBER | ES_UPPERCASE - PUSHBUTTON "&Step", IDC_STEP, 41, 170, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "Autoupd asm", IDC_AUTOUPDATE_ASM, 94, 172, 57, 10, BS_AUTOCHECKBOX -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_EMULATIONSETTINGS DIALOG 0, 0, 241, 270 -STYLE DS_CENTER | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU +IDD_EMULATIONSETTINGS DIALOG 0, 0, 241, 270 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYSMENU CAPTION "Emulation settings" FONT 8, "MS Sans Serif" -{ - DEFPUSHBUTTON "OK", IDOK, 130, 250, 50, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "Cancel", IDCANCEL, 185, 250, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "Use 8MB debugger mode when starting execution", IDC_CHECKBOX_DEBUGGERMODE, 15, 35, 182, 10, BS_AUTOCHECKBOX - LTEXT "If you have to ask, you don't need to change these.", IDC_STATIC, 15, 20, 169, 8, SS_LEFT - GROUPBOX "BIOS", IDC_STATIC, 5, 55, 230, 105 - AUTOCHECKBOX "Use external BIOS images", IDC_USEEXTBIOS, 15, 70, 210, 10, BS_AUTOCHECKBOX - LTEXT "ARM9 BIOS image:", IDC_STATIC, 15, 85, 210, 8, SS_LEFT - EDITTEXT IDC_ARM9BIOS, 15, 95, 190, 14, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_ARM9BIOSBROWSE, 205, 95, 20, 14, BS_PUSHBUTTON - LTEXT "ARM7 BIOS image:", IDC_STATIC, 15, 115, 210, 8, SS_LEFT - EDITTEXT IDC_ARM7BIOS, 15, 125, 190, 14, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_ARM7BIOSBROWSE, 205, 125, 20, 14, BS_PUSHBUTTON - AUTOCHECKBOX "Emulate SWIs with BIOS images", IDC_BIOSSWIS, 15, 145, 210, 10, BS_AUTOCHECKBOX - GROUPBOX "Firmware", IDC_STATIC, 5, 165, 230, 75 - AUTOCHECKBOX "Use external firmware image", IDC_USEEXTFIRMWARE, 15, 180, 210, 10, BS_AUTOCHECKBOX - LTEXT "Firmware image:", IDC_STATIC, 15, 195, 210, 8, SS_LEFT - EDITTEXT IDC_FIRMWARE, 15, 205, 190, 14, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_FIRMWAREBROWSE, 205, 205, 20, 14, BS_PUSHBUTTON - AUTOCHECKBOX "Boot from firmware (like the NDS)", IDC_FIRMWAREBOOT, 15, 225, 210, 10, BS_AUTOCHECKBOX - GROUPBOX "General", IDC_STATIC, 5, 5, 230, 45 -} +BEGIN + DEFPUSHBUTTON "OK",IDOK,130,250,50,14 + PUSHBUTTON "Cancel",IDCANCEL,185,250,50,14 + CONTROL "Use 8MB debugger mode when starting execution",IDC_CHECKBOX_DEBUGGERMODE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,35,182,10 + LTEXT "If you have to ask, you don't need to change these.",IDC_STATIC,15,20,169,8 + GROUPBOX "BIOS",IDC_STATIC,5,55,230,105 + CONTROL "Use external BIOS images",IDC_USEEXTBIOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,70,210,10 + LTEXT "ARM9 BIOS image:",IDC_STATIC,15,85,210,8 + EDITTEXT IDC_ARM9BIOS,15,95,190,14,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_ARM9BIOSBROWSE,205,95,20,14 + LTEXT "ARM7 BIOS image:",IDC_STATIC,15,115,210,8 + EDITTEXT IDC_ARM7BIOS,15,125,190,14,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_ARM7BIOSBROWSE,205,125,20,14 + CONTROL "Emulate SWIs with BIOS images",IDC_BIOSSWIS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,145,210,10 + GROUPBOX "Firmware",IDC_STATIC,5,165,230,75 + CONTROL "Use external firmware image",IDC_USEEXTFIRMWARE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,180,210,10 + LTEXT "Firmware image:",IDC_STATIC,15,195,210,8 + EDITTEXT IDC_FIRMWARE,15,205,190,14,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_FIRMWAREBROWSE,205,205,20,14 + CONTROL "Boot from firmware (like the NDS)",IDC_FIRMWAREBOOT, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,225,210,10 + GROUPBOX "General",IDC_STATIC,5,5,230,45 +END - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK -IDD_FIRMSETTINGS DIALOG 0, 0, 161, 145 -STYLE DS_MODALFRAME | DS_SETFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU -CAPTION "Firmware Indstillinger" -FONT 8, "MS Sans Serif" -{ - DEFPUSHBUTTON "&OK", IDOK, 7, 124, 50, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "&Fortryd", IDCANCEL, 104, 124, 50, 14, BS_PUSHBUTTON - CONTROL "Favorit Farve:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 55, 52, 12 - COMBOBOX IDC_COMBO1, 66, 53, 84, 14, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN - CONTROL "Fødselsmåned:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 72, 52, 12 - COMBOBOX IDC_COMBO2, 66, 71, 84, 14, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN - CONTROL "Fødselsdag:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 90, 52, 12 - COMBOBOX IDC_COMBO3, 66, 88, 84, 14, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN - CONTROL "Sprog:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 106, 52, 12 - COMBOBOX IDC_COMBO4, 66, 105, 84, 14, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN - CONTROL "Kælenavn:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 17, 52, 12 - EDITTEXT IDC_EDIT1, 66, 14, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_WANTRETURN - CONTROL "Besked:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 36, 52, 12 - EDITTEXT IDC_EDIT2, 66, 33, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_WANTRETURN -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_FIRMSETTINGS DIALOGEX 0, 0, 161, 145 -STYLE DS_CENTER | DS_MODALFRAME | DS_SETFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Firmware Settings" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - EDITTEXT IDC_EDIT1, 66, 14, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_WANTRETURN - EDITTEXT IDC_EDIT2, 66, 33, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_WANTRETURN - COMBOBOX IDC_COMBO1, 66, 53, 84, 14, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN - COMBOBOX IDC_COMBO2, 66, 71, 84, 14, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN - COMBOBOX IDC_COMBO3, 66, 88, 84, 14, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN - COMBOBOX IDC_COMBO4, 66, 105, 84, 14, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN - DEFPUSHBUTTON "&OK", IDOK, 7, 124, 50, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "&Cancel", IDCANCEL, 104, 124, 50, 14, BS_PUSHBUTTON - CONTROL "Favourite Color:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 55, 52, 12 - CONTROL "Birth Month:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 72, 52, 12 - CONTROL "Birthday:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 90, 52, 12 - CONTROL "Language:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 106, 52, 12 - CONTROL "Nickname:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 17, 52, 12 - CONTROL "Message:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 36, 52, 12 -} +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT IDC_EDIT1,66,14,82,14,ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP + EDITTEXT IDC_EDIT2,66,33,82,14,ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP + COMBOBOX IDC_COMBO1,66,53,84,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO2,66,71,84,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO3,66,88,84,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO4,66,105,84,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "&OK",IDOK,7,124,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,104,124,50,14 + CONTROL "Favourite Color:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,55,52,12 + CONTROL "Birth Month:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,72,52,12 + CONTROL "Birthday:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,90,52,12 + CONTROL "Language:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,106,52,12 + CONTROL "Nickname:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,17,52,12 + CONTROL "Message:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,36,52,12 +END - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_FIRMSETTINGS DIALOG 0, 0, 161, 145 -STYLE DS_CENTER | DS_MODALFRAME | DS_SETFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU -CAPTION "Configuration du firmware" -FONT 8, "MS Sans Serif" -{ - EDITTEXT IDC_EDIT1, 66, 14, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_WANTRETURN - EDITTEXT IDC_EDIT2, 66, 33, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_WANTRETURN - COMBOBOX IDC_COMBO1, 66, 53, 84, 14, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN - COMBOBOX IDC_COMBO2, 66, 71, 84, 14, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN - COMBOBOX IDC_COMBO3, 66, 88, 84, 14, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN - COMBOBOX IDC_COMBO4, 66, 105, 84, 14, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN - DEFPUSHBUTTON "&OK", IDOK, 7, 124, 50, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "&Cancel", IDCANCEL, 104, 124, 50, 14, BS_PUSHBUTTON - CONTROL "Couleur préférée:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 55, 54, 12 - CONTROL "Mois naissance:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 72, 56, 12 - CONTROL "Jour naissance:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 90, 52, 12 - CONTROL "Langage:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 106, 52, 12 - CONTROL "Pseudonyme:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 17, 52, 12 - CONTROL "Message:", IDC_STATIC, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 9, 36, 52, 12 -} - - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK -IDD_GAME_INFO DIALOG 0, 0, 366, 406 -STYLE DS_CENTER | DS_SETFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU -CAPTION "ROM Information" -FONT 8, "MS Sans Serif" -{ - PUSHBUTTON "&Close", IDCANCEL, 310, 385, 50, 14, BS_PUSHBUTTON - LTEXT "Game title :", IDC_STATIC, 190, 20, 95, 8, SS_LEFT - LTEXT "", IDC_GI_GAMETITLE, 285, 20, 70, 8, SS_LEFT - LTEXT "Game code :", IDC_STATIC, 190, 35, 95, 8, SS_LEFT - LTEXT "", IDC_GI_GAMECODE, 285, 35, 70, 8, SS_LEFT - LTEXT "Maker code :", IDC_STATIC, 190, 50, 95, 8, SS_LEFT - LTEXT "", IDC_GI_MAKERCODE, 285, 50, 70, 8, SS_LEFT - LTEXT "Chip size :", IDC_STATIC, 190, 65, 95, 8, SS_LEFT - LTEXT "", IDC_GI_CHIPSIZE, 285, 65, 70, 8, SS_LEFT - LTEXT "ARM9 binary ROM offset :", IDC_STATIC, 190, 100, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM9ROM, 285, 100, 70, 8, SS_LEFT - LTEXT "ARM9 binary entry address :", IDC_STATIC, 190, 115, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM9ENTRY, 285, 115, 70, 8, SS_LEFT - LTEXT "ARM9 binary start address :", IDC_STATIC, 190, 130, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM9START, 285, 130, 70, 8, SS_LEFT - GROUPBOX "General info", IDC_STATIC, 180, 5, 180, 75 - GROUPBOX "ARM9 && ARM7 binaries", IDC_STATIC, 180, 85, 180, 135 - LTEXT "ARM9 binary size :", IDC_STATIC, 190, 145, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM9SIZE, 285, 145, 70, 8, SS_LEFT - LTEXT "ARM7 binary ROM offset :", IDC_STATIC, 190, 160, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM7ROM, 285, 160, 70, 8, SS_LEFT - LTEXT "ARM7 binary entry address :", IDC_STATIC, 190, 175, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM7ENTRY, 285, 175, 70, 8, SS_LEFT - LTEXT "ARM7 binary start address :", IDC_STATIC, 190, 190, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM7START, 285, 190, 70, 8, SS_LEFT - LTEXT "ARM7 binary size :", IDC_STATIC, 190, 205, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM7SIZE, 285, 205, 70, 8, SS_LEFT - GROUPBOX "Filesystem", IDC_STATIC, 180, 225, 180, 75 - LTEXT "FNT ROM offset :", IDC_STATIC, 190, 240, 95, 8, SS_LEFT - LTEXT "", IDC_GI_FNTOFS, 285, 240, 70, 8, SS_LEFT - LTEXT "FNT size :", IDC_STATIC, 190, 255, 95, 8, SS_LEFT - LTEXT "", IDC_GI_FNTSIZE, 285, 255, 70, 8, SS_LEFT - LTEXT "FAT ROM offset :", IDC_STATIC, 190, 270, 95, 8, SS_LEFT - LTEXT "", IDC_GI_FATOFS, 285, 270, 70, 8, SS_LEFT - LTEXT "FAT size :", IDC_STATIC, 190, 285, 95, 8, SS_LEFT - LTEXT "", IDC_GI_FATSIZE, 285, 285, 70, 8, SS_LEFT - GROUPBOX "Misc", IDC_STATIC, 180, 305, 180, 50 - LTEXT "Icon/title region ROM offset :", IDC_STATIC, 190, 320, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ICONTITLEOFS, 285, 320, 70, 8, SS_LEFT - LTEXT "Used ROM size :", IDC_STATIC, 190, 335, 95, 8, SS_LEFT - LTEXT "", IDC_GI_USEDROMSIZE, 285, 335, 70, 8, SS_LEFT - GROUPBOX "", IDC_STATIC, 5, 5, 165, 45 - LTEXT "", IDC_GI_TITLE, 55, 15, 110, 30, SS_LEFT - GROUPBOX "Titles", IDC_STATIC, 5, 55, 165, 345 - LTEXT "Japanese title :", IDC_STATIC, 15, 70, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEJP, 15, 85, 145, 35, SS_LEFT - LTEXT "English title :", IDC_STATIC, 15, 125, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEEN, 15, 140, 150, 35, SS_LEFT - LTEXT "French title :", IDC_STATIC, 15, 180, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEFR, 15, 195, 150, 35, SS_LEFT - LTEXT "German title :", IDC_STATIC, 15, 235, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEGE, 15, 250, 150, 35, SS_LEFT - LTEXT "Italian title :", IDC_STATIC, 15, 290, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEIT, 15, 305, 145, 35, SS_LEFT - LTEXT "Spanish title :", IDC_STATIC, 15, 345, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLESP, 15, 360, 150, 35, SS_LEFT - CONTROL "1", IDC_GI_ICON, "GInfo_IconBox", 0x50000000, 10, 15, 35, 30, 0x00000020 -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_GAME_INFO DIALOG 0, 0, 366, 406 -STYLE DS_CENTER | DS_SETFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU +IDD_GAME_INFO DIALOG 0, 0, 366, 406 +STYLE DS_SETFONT | DS_CENTER | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "ROM Info" FONT 8, "MS Sans Serif" -{ - PUSHBUTTON "&Close", IDCANCEL, 310, 385, 50, 14, BS_PUSHBUTTON - LTEXT "Game title :", IDC_STATIC, 190, 20, 95, 8, SS_LEFT - LTEXT "", IDC_GI_GAMETITLE, 285, 20, 70, 8, SS_LEFT - LTEXT "Game code :", IDC_STATIC, 190, 35, 95, 8, SS_LEFT - LTEXT "", IDC_GI_GAMECODE, 285, 35, 70, 8, SS_LEFT - LTEXT "Maker code :", IDC_STATIC, 190, 50, 95, 8, SS_LEFT - LTEXT "", IDC_GI_MAKERCODE, 285, 50, 70, 8, SS_LEFT - LTEXT "Chip size :", IDC_STATIC, 190, 65, 95, 8, SS_LEFT - LTEXT "", IDC_GI_CHIPSIZE, 285, 65, 70, 8, SS_LEFT - LTEXT "ARM9 binary ROM offset :", IDC_STATIC, 190, 100, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM9ROM, 285, 100, 70, 8, SS_LEFT - LTEXT "ARM9 binary entry address :", IDC_STATIC, 190, 115, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM9ENTRY, 285, 115, 70, 8, SS_LEFT - LTEXT "ARM9 binary start address :", IDC_STATIC, 190, 130, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM9START, 285, 130, 70, 8, SS_LEFT - GROUPBOX "General info", IDC_STATIC, 180, 5, 180, 75 - GROUPBOX "ARM9 && ARM7 binaries", IDC_STATIC, 180, 85, 180, 135 - LTEXT "ARM9 binary size :", IDC_STATIC, 190, 145, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM9SIZE, 285, 145, 70, 8, SS_LEFT - LTEXT "ARM7 binary ROM offset :", IDC_STATIC, 190, 160, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM7ROM, 285, 160, 70, 8, SS_LEFT - LTEXT "ARM7 binary entry address :", IDC_STATIC, 190, 175, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM7ENTRY, 285, 175, 70, 8, SS_LEFT - LTEXT "ARM7 binary start address :", IDC_STATIC, 190, 190, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM7START, 285, 190, 70, 8, SS_LEFT - LTEXT "ARM7 binary size :", IDC_STATIC, 190, 205, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM7SIZE, 285, 205, 70, 8, SS_LEFT - GROUPBOX "Filesystem", IDC_STATIC, 180, 225, 180, 75 - LTEXT "FNT ROM offset :", IDC_STATIC, 190, 240, 95, 8, SS_LEFT - LTEXT "", IDC_GI_FNTOFS, 285, 240, 70, 8, SS_LEFT - LTEXT "FNT size :", IDC_STATIC, 190, 255, 95, 8, SS_LEFT - LTEXT "", IDC_GI_FNTSIZE, 285, 255, 70, 8, SS_LEFT - LTEXT "FAT ROM offset :", IDC_STATIC, 190, 270, 95, 8, SS_LEFT - LTEXT "", IDC_GI_FATOFS, 285, 270, 70, 8, SS_LEFT - LTEXT "FAT size :", IDC_STATIC, 190, 285, 95, 8, SS_LEFT - LTEXT "", IDC_GI_FATSIZE, 285, 285, 70, 8, SS_LEFT - GROUPBOX "Misc", IDC_STATIC, 180, 305, 180, 50 - LTEXT "Icon/title region ROM offset :", IDC_STATIC, 190, 320, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ICONTITLEOFS, 285, 320, 70, 8, SS_LEFT - LTEXT "Used ROM size :", IDC_STATIC, 190, 335, 95, 8, SS_LEFT - LTEXT "", IDC_GI_USEDROMSIZE, 285, 335, 70, 8, SS_LEFT - GROUPBOX "", IDC_STATIC, 5, 5, 165, 45 - LTEXT "", IDC_GI_TITLE, 55, 15, 110, 30, SS_LEFT - GROUPBOX "Titles", IDC_STATIC, 5, 55, 165, 345 - LTEXT "Japanese title :", IDC_STATIC, 15, 70, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEJP, 15, 85, 145, 35, SS_LEFT - LTEXT "English title :", IDC_STATIC, 15, 125, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEEN, 15, 140, 150, 35, SS_LEFT - LTEXT "French title :", IDC_STATIC, 15, 180, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEFR, 15, 195, 150, 35, SS_LEFT - LTEXT "German title :", IDC_STATIC, 15, 235, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEGE, 15, 250, 150, 35, SS_LEFT - LTEXT "Italian title :", IDC_STATIC, 15, 290, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEIT, 15, 305, 145, 35, SS_LEFT - LTEXT "Spanish title :", IDC_STATIC, 15, 345, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLESP, 15, 360, 150, 35, SS_LEFT - CONTROL "1", IDC_GI_ICON, "GInfo_IconBox", 0x50000000, 10, 15, 35, 30, 0x00000020 -} +BEGIN + PUSHBUTTON "&Close",IDCANCEL,310,385,50,14 + LTEXT "Game title :",IDC_STATIC,190,20,95,8 + LTEXT "",IDC_GI_GAMETITLE,285,20,70,8 + LTEXT "Game code :",IDC_STATIC,190,35,95,8 + LTEXT "",IDC_GI_GAMECODE,285,35,70,8 + LTEXT "Maker code :",IDC_STATIC,190,50,95,8 + LTEXT "",IDC_GI_MAKERCODE,285,50,70,8 + LTEXT "Chip size :",IDC_STATIC,190,65,95,8 + LTEXT "",IDC_GI_CHIPSIZE,285,65,70,8 + LTEXT "ARM9 binary ROM offset :",IDC_STATIC,190,100,95,8 + LTEXT "",IDC_GI_ARM9ROM,285,100,70,8 + LTEXT "ARM9 binary entry address :",IDC_STATIC,190,115,95,8 + LTEXT "",IDC_GI_ARM9ENTRY,285,115,70,8 + LTEXT "ARM9 binary start address :",IDC_STATIC,190,130,95,8 + LTEXT "",IDC_GI_ARM9START,285,130,70,8 + GROUPBOX "General info",IDC_STATIC,180,5,180,75 + GROUPBOX "ARM9 && ARM7 binaries",IDC_STATIC,180,85,180,135 + LTEXT "ARM9 binary size :",IDC_STATIC,190,145,95,8 + LTEXT "",IDC_GI_ARM9SIZE,285,145,70,8 + LTEXT "ARM7 binary ROM offset :",IDC_STATIC,190,160,95,8 + LTEXT "",IDC_GI_ARM7ROM,285,160,70,8 + LTEXT "ARM7 binary entry address :",IDC_STATIC,190,175,95,8 + LTEXT "",IDC_GI_ARM7ENTRY,285,175,70,8 + LTEXT "ARM7 binary start address :",IDC_STATIC,190,190,95,8 + LTEXT "",IDC_GI_ARM7START,285,190,70,8 + LTEXT "ARM7 binary size :",IDC_STATIC,190,205,95,8 + LTEXT "",IDC_GI_ARM7SIZE,285,205,70,8 + GROUPBOX "Filesystem",IDC_STATIC,180,225,180,75 + LTEXT "FNT ROM offset :",IDC_STATIC,190,240,95,8 + LTEXT "",IDC_GI_FNTOFS,285,240,70,8 + LTEXT "FNT size :",IDC_STATIC,190,255,95,8 + LTEXT "",IDC_GI_FNTSIZE,285,255,70,8 + LTEXT "FAT ROM offset :",IDC_STATIC,190,270,95,8 + LTEXT "",IDC_GI_FATOFS,285,270,70,8 + LTEXT "FAT size :",IDC_STATIC,190,285,95,8 + LTEXT "",IDC_GI_FATSIZE,285,285,70,8 + GROUPBOX "Misc",IDC_STATIC,180,305,180,50 + LTEXT "Icon/title region ROM offset :",IDC_STATIC,190,320,95,8 + LTEXT "",IDC_GI_ICONTITLEOFS,285,320,70,8 + LTEXT "Used ROM size :",IDC_STATIC,190,335,95,8 + LTEXT "",IDC_GI_USEDROMSIZE,285,335,70,8 + GROUPBOX "",IDC_STATIC,5,5,165,45 + LTEXT "",IDC_GI_TITLE,55,15,110,30 + GROUPBOX "Titles",IDC_STATIC,5,55,165,345 + LTEXT "Japanese title :",IDC_STATIC,15,70,65,8 + LTEXT "",IDC_GI_TITLEJP,15,85,145,35 + LTEXT "English title :",IDC_STATIC,15,125,65,8 + LTEXT "",IDC_GI_TITLEEN,15,140,150,35 + LTEXT "French title :",IDC_STATIC,15,180,65,8 + LTEXT "",IDC_GI_TITLEFR,15,195,150,35 + LTEXT "German title :",IDC_STATIC,15,235,65,8 + LTEXT "",IDC_GI_TITLEGE,15,250,150,35 + LTEXT "Italian title :",IDC_STATIC,15,290,65,8 + LTEXT "",IDC_GI_TITLEIT,15,305,145,35 + LTEXT "Spanish title :",IDC_STATIC,15,345,65,8 + LTEXT "",IDC_GI_TITLESP,15,360,150,35 + CONTROL "1",IDC_GI_ICON,"GInfo_IconBox",0x0,10,15,35,30,WS_EX_TRANSPARENT +END - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_GAME_INFO DIALOG 0, 0, 366, 406 -STYLE DS_CENTER | DS_SETFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU -CAPTION "Info ROM" -FONT 8, "MS Sans Serif" -{ - PUSHBUTTON "Fermer", IDCANCEL, 310, 385, 50, 14, BS_PUSHBUTTON - LTEXT "Titre du jeu :", IDC_STATIC, 190, 20, 95, 8, SS_LEFT - LTEXT "", IDC_GI_GAMETITLE, 285, 20, 70, 8, SS_LEFT - LTEXT "Code du jeu :", IDC_STATIC, 190, 35, 95, 8, SS_LEFT - LTEXT "", IDC_GI_GAMECODE, 285, 35, 70, 8, SS_LEFT - LTEXT "Code du fabricant :", IDC_STATIC, 190, 50, 95, 8, SS_LEFT - LTEXT "", IDC_GI_MAKERCODE, 285, 50, 70, 8, SS_LEFT - LTEXT "Taille de la puce :", IDC_STATIC, 190, 65, 95, 8, SS_LEFT - LTEXT "", IDC_GI_CHIPSIZE, 285, 65, 70, 8, SS_LEFT - LTEXT "Offset ROM du bin. ARM9 :", IDC_STATIC, 190, 100, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM9ROM, 285, 100, 70, 8, SS_LEFT - LTEXT "Adr. d'entrée du bin. ARM9 :", IDC_STATIC, 190, 115, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM9ENTRY, 285, 115, 70, 8, SS_LEFT - LTEXT "Adr. de début du bin. ARM9 :", IDC_STATIC, 190, 130, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM9START, 285, 130, 70, 8, SS_LEFT - GROUPBOX "Informations générales", IDC_STATIC, 180, 5, 180, 75 - GROUPBOX "Binaires ARM9 && ARM7", IDC_STATIC, 180, 85, 180, 135 - LTEXT "Taille du bin. ARM9 :", IDC_STATIC, 190, 145, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM9SIZE, 285, 145, 70, 8, SS_LEFT - LTEXT "Offset ROM du bin. ARM7 :", IDC_STATIC, 190, 160, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM7ROM, 285, 160, 70, 8, SS_LEFT - LTEXT "Adr. d'entrée du bin. ARM7 :", IDC_STATIC, 190, 175, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM7ENTRY, 285, 175, 70, 8, SS_LEFT - LTEXT "Adr. de début du bin. ARM7 :", IDC_STATIC, 190, 190, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM7START, 285, 190, 70, 8, SS_LEFT - LTEXT "Taille du bin. ARM7 :", IDC_STATIC, 190, 205, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ARM7SIZE, 285, 205, 70, 8, SS_LEFT - GROUPBOX "Système de fichiers", IDC_STATIC, 180, 225, 180, 75 - LTEXT "Offset ROM de la FNT :", IDC_STATIC, 190, 240, 95, 8, SS_LEFT - LTEXT "", IDC_GI_FNTOFS, 285, 240, 70, 8, SS_LEFT - LTEXT "Taille de la FNT :", IDC_STATIC, 190, 255, 95, 8, SS_LEFT - LTEXT "", IDC_GI_FNTSIZE, 285, 255, 70, 8, SS_LEFT - LTEXT "Offset ROM de la FAT :", IDC_STATIC, 190, 270, 95, 8, SS_LEFT - LTEXT "", IDC_GI_FATOFS, 285, 270, 70, 8, SS_LEFT - LTEXT "Taille de la FAT :", IDC_STATIC, 190, 285, 95, 8, SS_LEFT - LTEXT "", IDC_GI_FATSIZE, 285, 285, 70, 8, SS_LEFT - GROUPBOX "Divers", IDC_STATIC, 180, 305, 180, 50 - LTEXT "Offset de la région icône/titre :", IDC_STATIC, 190, 320, 95, 8, SS_LEFT - LTEXT "", IDC_GI_ICONTITLEOFS, 285, 320, 70, 8, SS_LEFT - LTEXT "Taille utilisée de la ROM :", IDC_STATIC, 190, 335, 95, 8, SS_LEFT - LTEXT "", IDC_GI_USEDROMSIZE, 285, 335, 70, 8, SS_LEFT - GROUPBOX "", IDC_STATIC, 5, 5, 165, 45 - LTEXT "", IDC_GI_TITLE, 55, 15, 110, 30, SS_LEFT - GROUPBOX "Titres", IDC_STATIC, 5, 55, 165, 345 - LTEXT "Titre japonais :", IDC_STATIC, 15, 70, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEJP, 15, 85, 145, 35, SS_LEFT - LTEXT "Titre anglais :", IDC_STATIC, 15, 125, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEEN, 15, 140, 150, 35, SS_LEFT - LTEXT "Titre français :", IDC_STATIC, 15, 180, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEFR, 15, 195, 150, 35, SS_LEFT - LTEXT "Titre allemand :", IDC_STATIC, 15, 235, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEGE, 15, 250, 150, 35, SS_LEFT - LTEXT "Titre italien :", IDC_STATIC, 15, 290, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLEIT, 15, 305, 145, 35, SS_LEFT - LTEXT "Titre espagnol :", IDC_STATIC, 15, 345, 65, 8, SS_LEFT - LTEXT "", IDC_GI_TITLESP, 15, 360, 150, 35, SS_LEFT - CONTROL "1", IDC_GI_ICON, "GInfo_IconBox", 0x50000000, 10, 15, 35, 30, 0x00000020 -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_GBASLOT DIALOGEX 0, 0, 316, 185 -STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "GBA slot" -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - COMBOBOX IDC_ADDONS_LIST, 7, 7, 302, 30, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST - DEFPUSHBUTTON "OK", IDOK, 205, 164, 50, 14, WS_DISABLED | BS_DEFPUSHBUTTON - PUSHBUTTON "Cancel", IDCANCEL, 259, 164, 50, 14, BS_PUSHBUTTON - CTEXT "Info", IDC_ADDONS_INFO, 7, 21, 302, 23, SS_CENTER -} +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + COMBOBOX IDC_ADDONS_LIST,7,7,302,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "OK",IDOK,205,164,50,14,WS_DISABLED + PUSHBUTTON "Cancel",IDCANCEL,259,164,50,14 + CTEXT "Info",IDC_ADDONS_INFO,7,21,302,23 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_GBASLOT_CFLASH DIALOGEX 7, 48, 302, 109 -STYLE DS_SHELLFONT | WS_VISIBLE | WS_CHILDWINDOW | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - AUTORADIOBUTTON "file", IDC_RFILE, 16, 26, 25, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "folder", IDC_RFOLDER, 16, 56, 35, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - EDITTEXT IDC_PATHIMG, 14, 39, 223, 14, ES_AUTOHSCROLL | ES_READONLY - PUSHBUTTON "Browse...", IDC_BBROWSE, 239, 38, 50, 14, BS_PUSHBUTTON - EDITTEXT IDC_PATH, 13, 67, 223, 14, ES_AUTOHSCROLL | ES_READONLY - PUSHBUTTON "Browse...", IDC_BBROWSE2, 239, 67, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "use rom folder", IDC_PATHDESMUME, 43, 82, 62, 10, BS_AUTOCHECKBOX - CTEXT "Select file name or folder for Compact Flash image:", IDC_STATIC, 7, 7, 288, 14, SS_CENTER - GROUPBOX "", IDC_STATIC, 7, 19, 288, 75 -} +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "file",IDC_RFILE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,26,25,10 + CONTROL "folder",IDC_RFOLDER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,16,56,35,10 + EDITTEXT IDC_PATHIMG,14,39,223,14,ES_AUTOHSCROLL | ES_READONLY + PUSHBUTTON "Browse...",IDC_BBROWSE,239,38,50,14 + EDITTEXT IDC_PATH,13,67,223,14,ES_AUTOHSCROLL | ES_READONLY + PUSHBUTTON "Browse...",IDC_BBROWSE2,239,67,50,14 + CONTROL "use rom folder",IDC_PATHDESMUME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,43,82,62,10 + CTEXT "Select file name or folder for Compact Flash image:",IDC_STATIC,7,7,288,14 + GROUPBOX "",IDC_STATIC,7,19,288,75 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_GBASLOT_GBAGAME DIALOGEX 7, 48, 302, 109 -STYLE DS_SHELLFONT | WS_VISIBLE | WS_CHILDWINDOW | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - EDITTEXT IDC_PATHGAME, 7, 34, 236, 14, ES_AUTOHSCROLL | ES_READONLY - PUSHBUTTON "Browse...", IDC_BBROWSE, 245, 33, 50, 14, BS_PUSHBUTTON - CTEXT "Select file name for GBA game rom:\n(Please make save file matching name with extension .sav)", IDC_STATIC, 7, 7, 288, 21, SS_CENTER -} +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_PATHGAME,7,34,236,14,ES_AUTOHSCROLL | ES_READONLY + PUSHBUTTON "Browse...",IDC_BBROWSE,245,33,50,14 + CTEXT "Select file name for GBA game rom:\n(Please make save file matching name with extension .sav)",IDC_STATIC,7,7,288,21 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_GBASLOT_NONE DIALOGEX 7, 48, 302, 110 -STYLE DS_SHELLFONT | WS_VISIBLE | WS_CHILDWINDOW | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ -} +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_GBASLOT_RUMBLEPAK DIALOGEX 7, 48, 302, 109 -STYLE DS_SHELLFONT | WS_VISIBLE | WS_CHILDWINDOW | WS_SYSMENU -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - CTEXT "TODO", IDC_STATIC, 7, 7, 288, 26, SS_CENTER -} +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CTEXT "TODO",IDC_STATIC,7,7,288,26 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_INPUT DIALOGEX 0, 0, 325, 148 -STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configure controls" -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - EDITTEXT IDC_EDIT01, 32, 69, 26, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN - EDITTEXT IDC_EDIT02, 7, 83, 26, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT03, 57, 83, 26, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT04, 32, 97, 26, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT05, 271, 97, 26, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT06, 290, 81, 26, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT07, 247, 80, 26, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT08, 271, 63, 26, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT09, 7, 7, 50, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT10, 268, 7, 50, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT11, 248, 30, 34, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT12, 285, 30, 30, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT13, 7, 127, 26, 14, ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT14, 95, 127, 26, 14, WS_DISABLED | ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_EDIT15, 28, 30, 34, 14, WS_DISABLED | ES_CENTER | ES_AUTOHSCROLL | ES_READONLY - PUSHBUTTON "OK", IDOK, 205, 127, 50, 14, BS_PUSHBUTTON - PUSHBUTTON "Cancel", IDCANCEL, 268, 127, 50, 14, BS_PUSHBUTTON - GROUPBOX "", IDC_STATIC, 7, 17, 311, 109 - CONTROL "", IDC_STATIC, WC_STATIC, SS_GRAYRECT, 33, 83, 24, 14 - LTEXT "up", IDC_STATIC, 41, 59, 9, 8, SS_LEFT - LTEXT "left", IDC_STATIC, 15, 73, 12, 8, SS_LEFT - LTEXT "Y", IDC_STATIC, 257, 94, 8, 8, SS_LEFT - LTEXT "select", IDC_STATIC, 255, 44, 20, 8, SS_LEFT - LTEXT "B", IDC_STATIC, 282, 111, 8, 8, SS_LEFT - LTEXT "A", IDC_STATIC, 302, 95, 8, 8, SS_LEFT - LTEXT "X", IDC_STATIC, 282, 77, 8, 8, SS_LEFT - LTEXT "down", IDC_STATIC, 37, 110, 18, 8, SS_LEFT - LTEXT "start", IDC_STATIC, 292, 43, 16, 8, SS_LEFT - LTEXT "R", IDC_STATIC, 258, 10, 8, 8, SS_LEFT - LTEXT "L", IDC_STATIC, 60, 10, 8, 8, SS_LEFT - LTEXT "right", IDC_STATIC, 63, 73, 16, 8, SS_LEFT - LTEXT "power", IDC_STATIC, 36, 46, 21, 8, WS_DISABLED | SS_LEFT - LTEXT "open/close lid", IDC_STATIC, 36, 129, 44, 8, SS_LEFT - CONTROL "", IDC_STATIC, WC_STATIC, SS_ETCHEDFRAME, 95, 41, 141, 77 - LTEXT "debug", IDC_STATIC, 123, 129, 21, 8, WS_DISABLED | SS_LEFT -} +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_EDIT01,32,69,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN + EDITTEXT IDC_EDIT02,7,83,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT03,57,83,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT04,32,97,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT05,271,97,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT06,290,81,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT07,247,80,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT08,271,63,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT09,7,7,50,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT10,268,7,50,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT11,248,30,34,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT12,285,30,30,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT13,7,127,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT14,95,127,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + EDITTEXT IDC_EDIT15,28,30,34,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + PUSHBUTTON "OK",IDOK,205,127,50,14 + PUSHBUTTON "Cancel",IDCANCEL,268,127,50,14 + GROUPBOX "",IDC_STATIC,7,17,311,109 + CONTROL "",IDC_STATIC,"Static",SS_GRAYRECT,33,83,24,14 + LTEXT "up",IDC_STATIC,41,59,9,8 + LTEXT "left",IDC_STATIC,15,73,12,8 + LTEXT "Y",IDC_STATIC,257,94,8,8 + LTEXT "select",IDC_STATIC,255,44,20,8 + LTEXT "B",IDC_STATIC,282,111,8,8 + LTEXT "A",IDC_STATIC,302,95,8,8 + LTEXT "X",IDC_STATIC,282,77,8,8 + LTEXT "down",IDC_STATIC,37,110,18,8 + LTEXT "start",IDC_STATIC,292,43,16,8 + LTEXT "R",IDC_STATIC,258,10,8,8 + LTEXT "L",IDC_STATIC,60,10,8,8 + LTEXT "right",IDC_STATIC,63,73,16,8 + LTEXT "power",IDC_STATIC,36,46,21,8,WS_DISABLED + LTEXT "open/close lid",IDC_STATIC,36,129,44,8 + CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,95,41,141,77 + LTEXT "debug",IDC_STATIC,123,129,21,8,WS_DISABLED +END - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_INPUTCONFIG DIALOGEX 0, 0, 339, 148 -STYLE DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU -CAPTION "Control Config" -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - CONTROL "WOG!", IDC_UP, "InputCustom", 0x50010000, 52, 15, 71, 12, 0x00000200 - CONTROL "", IDC_LEFT, "InputCustom", 0x50010000, 52, 29, 71, 12, 0x00000200 - CONTROL "", IDC_DOWN, "InputCustom", 0x50010000, 52, 42, 71, 12, 0x00000200 - CONTROL "", IDC_RIGHT, "InputCustom", 0x50010000, 52, 55, 71, 12, 0x00000200 - CONTROL "", IDC_B, "InputCustom", 0x50010000, 52, 68, 71, 12, 0x00000200 - CONTROL "", IDC_A, "InputCustom", 0x50010000, 52, 81, 71, 12, 0x00000200 - CONTROL "", IDC_Y, "InputCustom", 0x50010000, 52, 94, 71, 12, 0x00000200 - CONTROL "", IDC_X, "InputCustom", 0x50010000, 52, 107, 71, 12, 0x00000200 - CONTROL " ", IDC_START, "InputCustom", 0x50010000, 163, 15, 71, 12, 0x00000200 - CONTROL " ", IDC_SELECT, "InputCustom", 0x50010000, 163, 29, 71, 12, 0x00000200 - CONTROL " ", IDC_L, "InputCustom", 0x50010000, 163, 42, 71, 12, 0x00000200 - CONTROL " ", IDC_R, "InputCustom", 0x50010000, 163, 55, 71, 12, 0x00000200 - CONTROL " ", IDC_UPLEFT, "InputCustom", 0x58010000, 163, 68, 71, 12, 0x00000200 - CONTROL " ", IDC_UPRIGHT, "InputCustom", 0x58010000, 163, 81, 71, 12, 0x00000200 - CONTROL " ", IDC_DWNRIGHT, "InputCustom", 0x58010000, 163, 94, 71, 12, 0x00000200 - CONTROL " ", IDC_DWNLEFT, "InputCustom", 0x58010000, 163, 107, 71, 12, 0x00000200 - PUSHBUTTON "Cancel", IDCANCEL, 293, 119, 39, 14, BS_PUSHBUTTON - PUSHBUTTON "OK", IDOK, 245, 119, 41, 14, BS_PUSHBUTTON - LTEXT "Blue means the button is already mapped.\nPink means it conflicts with a custom hotkey.\nRed means it's reserved by Windows.\nButtons can be disabled using Escape.\nGrayed buttons arent supported yet (sorry!)", IDC_LABEL_BLUE, 246, 10, 80, 88, SS_LEFT - RTEXT "UP", IDC_LABEL_UP, 10, 18, 38, 8, SS_RIGHT - RTEXT "RIGHT", IDC_LABEL_RIGHT, 8, 58, 41, 8, SS_RIGHT - RTEXT "LEFT", IDC_LABEL_LEFT, 11, 31, 37, 8, SS_RIGHT - RTEXT "DOWN", IDC_LABEL_DOWN, 10, 45, 39, 8, SS_RIGHT - RTEXT "A", IDC_LABEL_A, 10, 83, 38, 8, SS_RIGHT - RTEXT "X", IDC_LABEL_X, 8, 109, 39, 8, SS_RIGHT - RTEXT "B", IDC_LABEL_B, 11, 71, 37, 8, SS_RIGHT - RTEXT "Y", IDC_LABEL_Y, 8, 97, 40, 8, SS_RIGHT - RTEXT "L", IDC_LABEL_L, 136, 44, 24, 8, SS_RIGHT - RTEXT "START", IDC_LABEL_START, 136, 18, 24, 8, SS_RIGHT - RTEXT "R", IDC_LABEL_R, 136, 57, 24, 8, SS_RIGHT - RTEXT "SELECT", IDC_LABEL_SELECT, 132, 31, 28, 8, SS_RIGHT - RTEXT "UP LEFT", IDC_LABEL_UPLEFT, 130, 71, 30, 8, SS_RIGHT - RTEXT "DN RIGHT", IDC_LABEL_DOWNRIGHT, 124, 97, 36, 8, SS_RIGHT - RTEXT "UP RIGHT", IDC_LABEL_UPRIGHT, 124, 84, 36, 8, SS_RIGHT - RTEXT "DN LEFT", IDC_LABEL_DOWNLEFT, 129, 109, 31, 8, SS_RIGHT - AUTOCHECKBOX "Allow Left+Rt/Up+Dn", IDC_ALLOWLEFTRIGHT, 245, 102, 87, 11, BS_AUTOCHECKBOX - GROUPBOX "Buttons", IDC_STATIC, 7, 7, 234, 129, 0, WS_EX_TRANSPARENT - CONTROL "", IDC_LID, "InputCustom", 0x50010000, 52, 120, 71, 12, 0x00000200 - RTEXT "LID", IDC_LABEL_X2, 8, 121, 39, 8, SS_RIGHT - RTEXT "DEBUG", IDC_LABEL_X3, 127, 123, 29, 8, SS_RIGHT - CONTROL " ", IDC_DEBUG, "InputCustom", 0x58010000, 163, 120, 71, 12, 0x00000200 -} - - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK IDD_IO_REG DIALOGEX 0, 0, 150, 200 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION CAPTION "IO registers" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - LTEXT "Int Handler :", IDC_STATIC, 5, 13, 41, 8, SS_LEFT - LTEXT "", IDC_INTHAND9, 60, 14, 80, 8, SS_LEFT - LTEXT "IE :", IDC_STATIC, 5, 21, 41, 8, SS_LEFT - LTEXT "", IDC_IE9, 60, 22, 80, 8, SS_LEFT - LTEXT "IF :", IDC_STATIC, 5, 29, 41, 8, SS_LEFT - LTEXT "", IDC_IF9, 60, 29, 79, 8, SS_LEFT - LTEXT "IME :", IDC_STATIC, 5, 36, 41, 8, SS_LEFT - LTEXT "", IDC_IME9, 60, 36, 79, 8, SS_LEFT - LTEXT "DISPA_CNT :", IDC_STATIC, 5, 44, 48, 8, SS_LEFT - LTEXT "", IDC_DISPCNTA9, 60, 44, 83, 8, SS_LEFT - LTEXT "DISPA_STAT :", IDC_STATIC, 5, 52, 49, 8, SS_LEFT - LTEXT "", IDC_DISPSTATA9, 60, 52, 79, 8, SS_LEFT - LTEXT "DISPB_CNT :", IDC_STATIC, 5, 60, 48, 8, SS_LEFT - LTEXT "", IDC_DISPCNTB9, 60, 60, 83, 8, SS_LEFT - LTEXT "DISPB_STAT :", IDC_STATIC, 5, 68, 49, 8, SS_LEFT - LTEXT "", IDC_DISPSTATB9, 60, 68, 79, 8, SS_LEFT - LTEXT "IPCSYNC :", IDC_STATIC, 5, 76, 41, 8, SS_LEFT - LTEXT "", IDC_IPCSYNC9, 60, 76, 78, 8, SS_LEFT - LTEXT "IPCFIFO :", IDC_STATIC, 5, 84, 41, 8, SS_LEFT - LTEXT "", IDC_IPCFIFO9, 60, 85, 79, 8, SS_LEFT - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 32, 163, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 87, 164, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 99, 164, 11, 14 - LTEXT "frames", IDC_STATIC, 111, 167, 16, 8, SS_LEFT - PUSHBUTTON "&Fermer", IDC_FERMER, 50, 183, 50, 14, BS_PUSHBUTTON - GROUPBOX "ARM9", IDC_STATIC, 4, 4, 142, 98 - LTEXT "GXSTAT :", IDC_STATIC, 5, 92, 41, 8, SS_LEFT - LTEXT "", IDC_GXSTAT9, 60, 93, 79, 8, SS_LEFT - LTEXT "IE :", IDC_STATIC, 5, 114, 41, 8, SS_LEFT - LTEXT "", IDC_IE7, 60, 114, 80, 8, SS_LEFT - LTEXT "IF :", IDC_STATIC, 5, 122, 41, 8, SS_LEFT - LTEXT "", IDC_IF7, 60, 122, 79, 8, SS_LEFT - LTEXT "IME :", IDC_STATIC, 5, 130, 41, 8, SS_LEFT - LTEXT "", IDC_IME7, 60, 130, 79, 8, SS_LEFT - GROUPBOX "ARM7", IDC_STATIC, 3, 104, 142, 53 - LTEXT "IPCSYNC :", IDC_STATIC, 5, 138, 41, 8, SS_LEFT - LTEXT "", IDC_IPCSYNC7, 60, 138, 78, 8, SS_LEFT - LTEXT "IPCFIFO :", IDC_STATIC, 5, 146, 41, 8, SS_LEFT - LTEXT "", IDC_IPCFIFO7, 60, 147, 79, 8, SS_LEFT -} +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + LTEXT "Int Handler :",IDC_STATIC,5,13,41,8 + LTEXT "",IDC_INTHAND9,60,14,80,8 + LTEXT "IE :",IDC_STATIC,5,21,41,8 + LTEXT "",IDC_IE9,60,22,80,8 + LTEXT "IF :",IDC_STATIC,5,29,41,8 + LTEXT "",IDC_IF9,60,29,79,8 + LTEXT "IME :",IDC_STATIC,5,36,41,8 + LTEXT "",IDC_IME9,60,36,79,8 + LTEXT "DISPA_CNT :",IDC_STATIC,5,44,48,8 + LTEXT "",IDC_DISPCNTA9,60,44,83,8 + LTEXT "DISPA_STAT :",IDC_STATIC,5,52,49,8 + LTEXT "",IDC_DISPSTATA9,60,52,79,8 + LTEXT "DISPB_CNT :",IDC_STATIC,5,60,48,8 + LTEXT "",IDC_DISPCNTB9,60,60,83,8 + LTEXT "DISPB_STAT :",IDC_STATIC,5,68,49,8 + LTEXT "",IDC_DISPSTATB9,60,68,79,8 + LTEXT "IPCSYNC :",IDC_STATIC,5,76,41,8 + LTEXT "",IDC_IPCSYNC9,60,76,78,8 + LTEXT "IPCFIFO :",IDC_STATIC,5,84,41,8 + LTEXT "",IDC_IPCFIFO9,60,85,79,8 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,32,163,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,87,164,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,99,164,11,14 + LTEXT "frames",IDC_STATIC,111,167,16,8 + PUSHBUTTON "&Close",IDC_FERMER,50,183,50,14 + GROUPBOX "ARM9",IDC_STATIC,4,4,142,98 + LTEXT "GXSTAT :",IDC_STATIC,5,92,41,8 + LTEXT "",IDC_GXSTAT9,60,93,79,8 + LTEXT "IE :",IDC_STATIC,5,114,41,8 + LTEXT "",IDC_IE7,60,114,80,8 + LTEXT "IF :",IDC_STATIC,5,122,41,8 + LTEXT "",IDC_IF7,60,122,79,8 + LTEXT "IME :",IDC_STATIC,5,130,41,8 + LTEXT "",IDC_IME7,60,130,79,8 + GROUPBOX "ARM7",IDC_STATIC,3,104,142,53 + LTEXT "IPCSYNC :",IDC_STATIC,5,138,41,8 + LTEXT "",IDC_IPCSYNC7,60,138,78,8 + LTEXT "IPCFIFO :",IDC_STATIC,5,146,41,8 + LTEXT "",IDC_IPCFIFO7,60,147,79,8 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_IO_REG DIALOGEX 0, 0, 150, 200 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME -CAPTION "IO registers" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - LTEXT "Int Handler :", IDC_STATIC, 5, 13, 41, 8, SS_LEFT - LTEXT "", IDC_INTHAND9, 60, 14, 80, 8, SS_LEFT - LTEXT "IE :", IDC_STATIC, 5, 21, 41, 8, SS_LEFT - LTEXT "", IDC_IE9, 60, 22, 80, 8, SS_LEFT - LTEXT "IF :", IDC_STATIC, 5, 29, 41, 8, SS_LEFT - LTEXT "", IDC_IF9, 60, 29, 79, 8, SS_LEFT - LTEXT "IME :", IDC_STATIC, 5, 36, 41, 8, SS_LEFT - LTEXT "", IDC_IME9, 60, 36, 79, 8, SS_LEFT - LTEXT "DISPA_CNT :", IDC_STATIC, 5, 44, 48, 8, SS_LEFT - LTEXT "", IDC_DISPCNTA9, 60, 44, 83, 8, SS_LEFT - LTEXT "DISPA_STAT :", IDC_STATIC, 5, 52, 49, 8, SS_LEFT - LTEXT "", IDC_DISPSTATA9, 60, 52, 79, 8, SS_LEFT - LTEXT "DISPB_CNT :", IDC_STATIC, 5, 60, 48, 8, SS_LEFT - LTEXT "", IDC_DISPCNTB9, 60, 60, 83, 8, SS_LEFT - LTEXT "DISPB_STAT :", IDC_STATIC, 5, 68, 49, 8, SS_LEFT - LTEXT "", IDC_DISPSTATB9, 60, 68, 79, 8, SS_LEFT - LTEXT "IPCSYNC :", IDC_STATIC, 5, 76, 41, 8, SS_LEFT - LTEXT "", IDC_IPCSYNC9, 60, 76, 78, 8, SS_LEFT - LTEXT "IPCFIFO :", IDC_STATIC, 5, 84, 41, 8, SS_LEFT - LTEXT "", IDC_IPCFIFO9, 60, 85, 79, 8, SS_LEFT - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 32, 163, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 87, 164, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 99, 164, 11, 14 - LTEXT "frames", IDC_STATIC, 111, 167, 16, 8, SS_LEFT - PUSHBUTTON "&Close", IDC_FERMER, 50, 183, 50, 14, BS_PUSHBUTTON - GROUPBOX "ARM9", IDC_STATIC, 4, 4, 142, 98 - LTEXT "GXSTAT :", IDC_STATIC, 5, 92, 41, 8, SS_LEFT - LTEXT "", IDC_GXSTAT9, 60, 93, 79, 8, SS_LEFT - LTEXT "IE :", IDC_STATIC, 5, 114, 41, 8, SS_LEFT - LTEXT "", IDC_IE7, 60, 114, 80, 8, SS_LEFT - LTEXT "IF :", IDC_STATIC, 5, 122, 41, 8, SS_LEFT - LTEXT "", IDC_IF7, 60, 122, 79, 8, SS_LEFT - LTEXT "IME :", IDC_STATIC, 5, 130, 41, 8, SS_LEFT - LTEXT "", IDC_IME7, 60, 130, 79, 8, SS_LEFT - GROUPBOX "ARM7", IDC_STATIC, 3, 104, 142, 53 - LTEXT "IPCSYNC :", IDC_STATIC, 5, 138, 41, 8, SS_LEFT - LTEXT "", IDC_IPCSYNC7, 60, 138, 78, 8, SS_LEFT - LTEXT "IPCFIFO :", IDC_STATIC, 5, 146, 41, 8, SS_LEFT - LTEXT "", IDC_IPCFIFO7, 60, 147, 79, 8, SS_LEFT -} - - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_IO_REG DIALOGEX 0, 0, 150, 200 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME -CAPTION "IO registre" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - LTEXT "Int Handler :", IDC_STATIC, 5, 13, 41, 8, SS_LEFT - LTEXT "", IDC_INTHAND9, 60, 14, 80, 8, SS_LEFT - LTEXT "IE :", IDC_STATIC, 5, 21, 41, 8, SS_LEFT - LTEXT "", IDC_IE9, 60, 22, 80, 8, SS_LEFT - LTEXT "IF :", IDC_STATIC, 5, 29, 41, 8, SS_LEFT - LTEXT "", IDC_IF9, 60, 29, 79, 8, SS_LEFT - LTEXT "IME :", IDC_STATIC, 5, 36, 41, 8, SS_LEFT - LTEXT "", IDC_IME9, 60, 36, 79, 8, SS_LEFT - LTEXT "DISPA_CNT :", IDC_STATIC, 5, 44, 48, 8, SS_LEFT - LTEXT "", IDC_DISPCNTA9, 60, 44, 83, 8, SS_LEFT - LTEXT "DISPA_STAT :", IDC_STATIC, 5, 52, 49, 8, SS_LEFT - LTEXT "", IDC_DISPSTATA9, 60, 52, 79, 8, SS_LEFT - LTEXT "DISPB_CNT :", IDC_STATIC, 5, 60, 48, 8, SS_LEFT - LTEXT "", IDC_DISPCNTB9, 60, 60, 83, 8, SS_LEFT - LTEXT "DISPB_STAT :", IDC_STATIC, 5, 68, 49, 8, SS_LEFT - LTEXT "", IDC_DISPSTATB9, 60, 68, 79, 8, SS_LEFT - LTEXT "IPCSYNC :", IDC_STATIC, 5, 76, 41, 8, SS_LEFT - LTEXT "", IDC_IPCSYNC9, 60, 76, 78, 8, SS_LEFT - LTEXT "IPCFIFO :", IDC_STATIC, 5, 84, 41, 8, SS_LEFT - LTEXT "", IDC_IPCFIFO9, 60, 85, 79, 8, SS_LEFT - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 32, 163, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 87, 164, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 99, 164, 11, 14 - LTEXT "frames", IDC_STATIC, 111, 167, 16, 8, SS_LEFT - PUSHBUTTON "&Luk", IDC_FERMER, 50, 183, 50, 14, BS_PUSHBUTTON - GROUPBOX "ARM9", IDC_STATIC, 4, 4, 142, 98 - LTEXT "GXSTAT :", IDC_STATIC, 5, 92, 41, 8, SS_LEFT - LTEXT "", IDC_GXSTAT9, 60, 93, 79, 8, SS_LEFT - LTEXT "IE :", IDC_STATIC, 5, 114, 41, 8, SS_LEFT - LTEXT "", IDC_IE7, 60, 114, 80, 8, SS_LEFT - LTEXT "IF :", IDC_STATIC, 5, 122, 41, 8, SS_LEFT - LTEXT "", IDC_IF7, 60, 122, 79, 8, SS_LEFT - LTEXT "IME :", IDC_STATIC, 5, 130, 41, 8, SS_LEFT - LTEXT "", IDC_IME7, 60, 130, 79, 8, SS_LEFT - GROUPBOX "ARM7", IDC_STATIC, 3, 104, 142, 53 - LTEXT "IPCSYNC :", IDC_STATIC, 5, 138, 41, 8, SS_LEFT - LTEXT "", IDC_IPCSYNC7, 60, 138, 78, 8, SS_LEFT - LTEXT "IPCFIFO :", IDC_STATIC, 5, 146, 41, 8, SS_LEFT - LTEXT "", IDC_IPCFIFO7, 60, 147, 79, 8, SS_LEFT -} - - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_KEYCUSTOM DIALOGEX 0, 0, 382, 180 -STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_CLIPCHILDREN | WS_DLGFRAME | WS_POPUP -CAPTION "Customize Special Keys" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - PUSHBUTTON "OK", IDOK, 16, 159, 50, 14, BS_PUSHBUTTON - PUSHBUTTON "Cancel", IDCANCEL, 66, 159, 50, 14, BS_PUSHBUTTON - RTEXT "Item #01", IDC_LABEL_HK1, 2, 7, 80, 8, SS_RIGHT - RTEXT "Item #02", IDC_LABEL_HK2, 2, 20, 80, 8, SS_RIGHT - RTEXT "Item #03", IDC_LABEL_HK3, 2, 33, 80, 8, SS_RIGHT - RTEXT "Item #04", IDC_LABEL_HK4, 2, 47, 80, 8, SS_RIGHT - RTEXT "Item #05", IDC_LABEL_HK5, 2, 60, 80, 8, SS_RIGHT - RTEXT "Item #06", IDC_LABEL_HK6, 2, 72, 80, 8, SS_RIGHT - RTEXT "Item #07", IDC_LABEL_HK7, 2, 85, 80, 8, SS_RIGHT - RTEXT "Item #08", IDC_LABEL_HK8, 2, 98, 80, 8, SS_RIGHT - RTEXT "Item #09", IDC_LABEL_HK9, 2, 111, 80, 8, SS_RIGHT - RTEXT "Item #10", IDC_LABEL_HK10, 2, 124, 80, 8, SS_RIGHT - RTEXT "Item #11", IDC_LABEL_HK11, 192, 7, 80, 8, SS_RIGHT - RTEXT "Item #12", IDC_LABEL_HK12, 192, 20, 80, 8, SS_RIGHT - RTEXT "Item #13", IDC_LABEL_HK13, 192, 33, 80, 8, SS_RIGHT - RTEXT "Item #14", IDC_LABEL_HK14, 192, 47, 80, 8, SS_RIGHT - RTEXT "Item #15", IDC_LABEL_HK15, 192, 60, 80, 8, SS_RIGHT - RTEXT "Item #16", IDC_LABEL_HK16, 192, 72, 80, 8, SS_RIGHT - RTEXT "Item #17", IDC_LABEL_HK17, 192, 85, 80, 8, SS_RIGHT - RTEXT "Item #18", IDC_LABEL_HK18, 192, 98, 80, 8, SS_RIGHT - RTEXT "Item #19", IDC_LABEL_HK19, 192, 111, 80, 8, SS_RIGHT - RTEXT "Item #20", IDC_LABEL_HK20, 192, 124, 80, 8, SS_RIGHT - CONTROL "", IDC_HOTKEY1, "InputCustomHot", 0x50010000, 86, 5, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY2, "InputCustomHot", 0x50010000, 86, 18, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY3, "InputCustomHot", 0x50010000, 86, 31, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY4, "InputCustomHot", 0x50010000, 86, 45, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY5, "InputCustomHot", 0x50010000, 86, 58, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY6, "InputCustomHot", 0x50010000, 86, 70, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY7, "InputCustomHot", 0x50010000, 86, 83, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY8, "InputCustomHot", 0x50010000, 86, 96, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY9, "InputCustomHot", 0x50010000, 86, 109, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY10, "InputCustomHot", 0x50010000, 86, 122, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY11, "InputCustomHot", 0x50010000, 276, 5, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY12, "InputCustomHot", 0x50010000, 276, 18, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY13, "InputCustomHot", 0x50010000, 276, 31, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY14, "InputCustomHot", 0x50010000, 276, 45, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY15, "InputCustomHot", 0x50010000, 276, 58, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY16, "InputCustomHot", 0x50010000, 276, 70, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY17, "InputCustomHot", 0x50010000, 276, 83, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY18, "InputCustomHot", 0x50010000, 276, 96, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY19, "InputCustomHot", 0x50010000, 276, 109, 98, 12, 0x00000200 - CONTROL "", IDC_HOTKEY20, "InputCustomHot", 0x50010000, 276, 122, 98, 12, 0x00000200 - LTEXT "Blue means the hotkey is already mapped.\nPink means it conflicts with a game button.\nRed means it's reserved by Windows.\nA hotkey can be disabled using Escape.", IDC_LABEL_BLUE, 238, 140, 136, 32, SS_LEFT - COMBOBOX IDC_HKCOMBO, 16, 141, 168, 60, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_LIGHT_VIEWER DIALOGEX 0, 0, 197, 89 -STYLE DS_CENTER | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_CAPTION CAPTION "Light Viewer" -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - DEFPUSHBUTTON "OK", IDOK, 140, 68, 50, 14, BS_DEFPUSHBUTTON - GROUPBOX "Light0", IDC_LIGHT_VIWER_LIGHT0_GROUP, 7, 7, 90, 27 - EDITTEXT IDC_LIGHT_VIEWER_LIGHT0VECTOR_EDIT, 58, 16, 35, 14, WS_GROUP | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_LIGHT_VIEWER_LIGHT0COLOR_EDIT, 33, 16, 23, 14, WS_GROUP | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_LIGHT_VIEWER_LIGHT0COLOR_COLORCTRL, "DeSmuME_ColorCtrl", 0x50010000, 11, 16, 19, 14 - GROUPBOX "Light1", IDC_LIGHT_VIWER_LIGHT1_GROUP, 100, 7, 90, 27 - EDITTEXT IDC_LIGHT_VIEWER_LIGHT1VECTOR_EDIT, 151, 16, 35, 14, WS_GROUP | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_LIGHT_VIEWER_LIGHT1COLOR_EDIT, 126, 16, 23, 14, WS_GROUP | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_LIGHT_VIEWER_LIGHT1COLOR_COLORCTRL, "DeSmuME_ColorCtrl", 0x50010000, 104, 16, 19, 14 - GROUPBOX "Light2", IDC_LIGHT_VIWER_LIGHT2_GROUP, 7, 33, 90, 27 - EDITTEXT IDC_LIGHT_VIEWER_LIGHT2VECTOR_EDIT, 58, 43, 35, 14, WS_GROUP | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_LIGHT_VIEWER_LIGHT2COLOR_EDIT, 33, 43, 23, 14, WS_GROUP | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_LIGHT_VIEWER_LIGHT2COLOR_COLORCTRL, "DeSmuME_ColorCtrl", 0x50010000, 11, 43, 19, 14 - GROUPBOX "Light3", IDC_LIGHT_VIWER_LIGHT3_GROUP, 100, 33, 90, 27 - EDITTEXT IDC_LIGHT_VIEWER_LIGHT3VECTOR_EDIT, 151, 43, 35, 14, WS_GROUP | ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_LIGHT_VIEWER_LIGHT3COLOR_EDIT, 126, 43, 23, 14, WS_GROUP | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_LIGHT_VIEWER_LIGHT3COLOR_COLORCTRL, "DeSmuME_ColorCtrl", 0x50010000, 104, 43, 19, 14 - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 13, 66, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 68, 67, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 80, 67, 11, 14 - LTEXT "frames", IDC_STATIC, 92, 70, 16, 8, SS_LEFT -} +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,140,68,50,14 + GROUPBOX "Light0",IDC_LIGHT_VIWER_LIGHT0_GROUP,7,7,90,27 + EDITTEXT IDC_LIGHT_VIEWER_LIGHT0VECTOR_EDIT,58,16,35,14,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP + EDITTEXT IDC_LIGHT_VIEWER_LIGHT0COLOR_EDIT,33,16,23,14,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP + CONTROL "",IDC_LIGHT_VIEWER_LIGHT0COLOR_COLORCTRL, + "DeSmuME_ColorCtrl",WS_TABSTOP,11,16,19,14 + GROUPBOX "Light1",IDC_LIGHT_VIWER_LIGHT1_GROUP,100,7,90,27 + EDITTEXT IDC_LIGHT_VIEWER_LIGHT1VECTOR_EDIT,151,16,35,14,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP + EDITTEXT IDC_LIGHT_VIEWER_LIGHT1COLOR_EDIT,126,16,23,14,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP + CONTROL "",IDC_LIGHT_VIEWER_LIGHT1COLOR_COLORCTRL, + "DeSmuME_ColorCtrl",WS_TABSTOP,104,16,19,14 + GROUPBOX "Light2",IDC_LIGHT_VIWER_LIGHT2_GROUP,7,33,90,27 + EDITTEXT IDC_LIGHT_VIEWER_LIGHT2VECTOR_EDIT,58,43,35,14,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP + EDITTEXT IDC_LIGHT_VIEWER_LIGHT2COLOR_EDIT,33,43,23,14,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP + CONTROL "",IDC_LIGHT_VIEWER_LIGHT2COLOR_COLORCTRL, + "DeSmuME_ColorCtrl",WS_TABSTOP,11,43,19,14 + GROUPBOX "Light3",IDC_LIGHT_VIWER_LIGHT3_GROUP,100,33,90,27 + EDITTEXT IDC_LIGHT_VIEWER_LIGHT3VECTOR_EDIT,151,43,35,14,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP + EDITTEXT IDC_LIGHT_VIEWER_LIGHT3COLOR_EDIT,126,43,23,14,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP + CONTROL "",IDC_LIGHT_VIEWER_LIGHT3COLOR_COLORCTRL, + "DeSmuME_ColorCtrl",WS_TABSTOP,104,43,19,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,66,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,68,67,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,80,67,11,14 + LTEXT "frames",IDC_STATIC,92,70,16,8 +END - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK IDD_MAP DIALOGEX 0, 0, 485, 320 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME -CAPTION "MAP Fremviser" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - COMBOBOX IDC_BG_SELECT, 4, 4, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN - LTEXT "Mode :", IDC_STATIC, 4, 20, 45, 8, SS_LEFT - LTEXT "Palette :", IDC_STATIC, 4, 30, 45, 8, SS_LEFT - LTEXT "Prio :", IDC_STATIC, 4, 40, 45, 8, SS_LEFT - LTEXT "Char base :", IDC_STATIC, 4, 50, 45, 8, SS_LEFT - LTEXT "Skærm base :", IDC_STATIC, 4, 60, 45, 8, SS_LEFT - LTEXT "Størrelse :", IDC_STATIC, 4, 70, 45, 8, SS_LEFT - LTEXT "Scroll :", IDC_STATIC, 4, 80, 45, 8, SS_LEFT - LTEXT "", IDC_MODE, 48, 20, 85, 8, SS_LEFT - LTEXT "", IDC_PAL, 48, 30, 85, 8, SS_LEFT - LTEXT "", IDC_PRIO, 48, 40, 85, 8, SS_LEFT - LTEXT "", IDC_CHAR, 48, 50, 85, 8, SS_LEFT - LTEXT "", IDC_SCR, 48, 60, 85, 8, SS_LEFT - LTEXT "", IDC_MSIZE, 48, 70, 85, 8, SS_LEFT - LTEXT "", IDC_SCROLL, 48, 80, 85, 8, SS_LEFT - PUSHBUTTON "&Luk", IDC_FERMER, 4, 300, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 4, 92, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 59, 93, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 71, 93, 11, 14 - LTEXT "frames", IDC_STATIC, 83, 96, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_MAP DIALOGEX 0, 0, 485, 320 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION CAPTION "MAP VIEW" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - COMBOBOX IDC_BG_SELECT, 4, 4, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN - LTEXT "Mode :", IDC_STATIC, 4, 20, 45, 8, SS_LEFT - LTEXT "Palette :", IDC_STATIC, 4, 30, 45, 8, SS_LEFT - LTEXT "Prio :", IDC_STATIC, 4, 40, 45, 8, SS_LEFT - LTEXT "Char base :", IDC_STATIC, 3, 61, 45, 8, SS_LEFT - LTEXT "Screen base :", IDC_STATIC, 3, 71, 45, 8, SS_LEFT - LTEXT "Size :", IDC_STATIC, 3, 81, 45, 8, SS_LEFT - LTEXT "Scroll :", IDC_STATIC, 3, 91, 45, 8, SS_LEFT - LTEXT "Mode", IDC_MODE, 45, 22, 85, 8, SS_LEFT - LTEXT "Palette", IDC_PAL, 48, 30, 85, 8, SS_LEFT - LTEXT "Priority", IDC_PRIO, 48, 40, 85, 8, SS_LEFT - LTEXT "Visible", IDC_VISIBLE, 47, 49, 62, 8, SS_LEFT - LTEXT "SCR", IDC_SCR, 51, 72, 76, 8, SS_LEFT - LTEXT "Size", IDC_MSIZE, 29, 82, 50, 8, SS_LEFT - LTEXT "Scroll", IDC_SCROLL, 30, 91, 85, 8, SS_LEFT - PUSHBUTTON "&Close", IDC_FERMER, 4, 300, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 4, 102, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 59, 103, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 71, 103, 11, 14 - LTEXT "frames", IDC_STATIC, 83, 106, 16, 8, SS_LEFT - LTEXT "Visible :", IDC_STATIC, 4, 50, 38, 8, SS_LEFT - LTEXT "CHAR", IDC_CHAR, 47, 63, 85, 8, SS_LEFT -} +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_BG_SELECT,4,4,90,14,CBS_DROPDOWN | WS_TABSTOP + LTEXT "Mode :",IDC_STATIC,4,20,45,8 + LTEXT "Palette :",IDC_STATIC,4,30,45,8 + LTEXT "Prio :",IDC_STATIC,4,40,45,8 + LTEXT "Char base :",IDC_STATIC,3,61,45,8 + LTEXT "Screen base :",IDC_STATIC,3,71,45,8 + LTEXT "Size :",IDC_STATIC,3,81,45,8 + LTEXT "Scroll :",IDC_STATIC,3,91,45,8 + LTEXT "Mode",IDC_MODE,45,22,85,8 + LTEXT "Palette",IDC_PAL,48,30,85,8 + LTEXT "Priority",IDC_PRIO,48,40,85,8 + LTEXT "Visible",IDC_VISIBLE,47,49,62,8 + LTEXT "SCR",IDC_SCR,51,72,76,8 + LTEXT "Size",IDC_MSIZE,29,82,50,8 + LTEXT "Scroll",IDC_SCROLL,30,91,85,8 + PUSHBUTTON "&Close",IDC_FERMER,4,300,50,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,102,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,59,103,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,71,103,11,14 + LTEXT "frames",IDC_STATIC,83,106,16,8 + LTEXT "Visible :",IDC_STATIC,4,50,38,8 + LTEXT "CHAR",IDC_CHAR,47,63,85,8 +END - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_MAP DIALOGEX 0, 0, 485, 320 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME -CAPTION "MAP VIEW" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - COMBOBOX IDC_BG_SELECT, 4, 4, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN - LTEXT "Mode :", IDC_STATIC, 4, 20, 45, 8, SS_LEFT - LTEXT "Palette :", IDC_STATIC, 4, 30, 45, 8, SS_LEFT - LTEXT "Prio :", IDC_STATIC, 4, 40, 45, 8, SS_LEFT - LTEXT "Char base :", IDC_STATIC, 4, 50, 45, 8, SS_LEFT - LTEXT "Screen base :", IDC_STATIC, 4, 60, 45, 8, SS_LEFT - LTEXT "Size :", IDC_STATIC, 4, 70, 45, 8, SS_LEFT - LTEXT "Scroll :", IDC_STATIC, 4, 80, 45, 8, SS_LEFT - LTEXT "", IDC_MODE, 48, 20, 85, 8, SS_LEFT - LTEXT "", IDC_PAL, 48, 30, 85, 8, SS_LEFT - LTEXT "", IDC_PRIO, 48, 40, 85, 8, SS_LEFT - LTEXT "", IDC_CHAR, 48, 50, 85, 8, SS_LEFT - LTEXT "", IDC_SCR, 48, 60, 85, 8, SS_LEFT - LTEXT "", IDC_MSIZE, 48, 70, 85, 8, SS_LEFT - LTEXT "", IDC_SCROLL, 48, 80, 85, 8, SS_LEFT - PUSHBUTTON "&Fermer", IDC_FERMER, 4, 300, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 4, 92, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 59, 93, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 71, 93, 11, 14 - LTEXT "frames", IDC_STATIC, 83, 96, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_MATRIX_VIEWER DIALOGEX 0, 0, 364, 177 -STYLE DS_CENTER | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_CAPTION CAPTION "Matrix Viewer" -FONT 8, "MS Shell Dlg", 400, 0, 1 -{ - DEFPUSHBUTTON "OK", IDOK, 307, 156, 50, 14, BS_DEFPUSHBUTTON - GROUPBOX "Projection", IDC_MATRIX_VIEWER_PROJ_GROUP, 7, 86, 173, 65 - EDITTEXT IDC_MATRIX_VIEWER_PROJ_11_EDIT, 11, 95, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_21_EDIT, 11, 108, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_31_EDIT, 11, 122, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_41_EDIT, 11, 135, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_12_EDIT, 52, 95, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_22_EDIT, 52, 108, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_32_EDIT, 52, 122, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_42_EDIT, 52, 135, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_13_EDIT, 94, 95, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_23_EDIT, 94, 108, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_33_EDIT, 94, 122, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_43_EDIT, 94, 135, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_14_EDIT, 136, 95, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_24_EDIT, 136, 108, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_34_EDIT, 136, 122, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_PROJ_44_EDIT, 136, 135, 40, 12, ES_AUTOHSCROLL | ES_READONLY - GROUPBOX "Position", IDC_MATRIX_VIEWER_COORD_GROUP, 7, 7, 173, 80 - EDITTEXT IDC_MATRIX_VIEWER_COORD_11_EDIT, 11, 15, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_21_EDIT, 11, 28, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_31_EDIT, 11, 42, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_41_EDIT, 11, 55, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_12_EDIT, 52, 15, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_22_EDIT, 52, 28, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_32_EDIT, 52, 42, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_42_EDIT, 52, 55, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_13_EDIT, 94, 15, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_23_EDIT, 94, 28, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_33_EDIT, 94, 42, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_43_EDIT, 94, 55, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_14_EDIT, 136, 15, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_24_EDIT, 136, 28, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_34_EDIT, 136, 42, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_COORD_44_EDIT, 136, 55, 40, 12, ES_AUTOHSCROLL | ES_READONLY - COMBOBOX IDC_MATRIX_VIEWER_COORD_COMBO, 136, 70, 40, 88, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST - GROUPBOX "Direction", IDC_MATRIX_VIEWER_DIR_GROUP, 184, 7, 173, 80 - EDITTEXT IDC_MATRIX_VIEWER_DIR_11_EDIT, 188, 15, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_21_EDIT, 188, 29, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_31_EDIT, 188, 42, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_41_EDIT, 188, 55, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_12_EDIT, 228, 15, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_22_EDIT, 228, 29, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_32_EDIT, 228, 42, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_42_EDIT, 228, 55, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_13_EDIT, 270, 15, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_23_EDIT, 270, 29, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_33_EDIT, 270, 42, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_43_EDIT, 270, 55, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_14_EDIT, 312, 15, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_24_EDIT, 312, 29, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_34_EDIT, 312, 42, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_DIR_44_EDIT, 312, 55, 40, 12, ES_AUTOHSCROLL | ES_READONLY - COMBOBOX IDC_MATRIX_VIEWER_DIR_COMBO, 312, 71, 40, 88, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST - GROUPBOX "Texture", IDC_MATRIX_VIEWER_TEX_GROUP, 184, 86, 173, 65 - EDITTEXT IDC_MATRIX_VIEWER_TEX_11_EDIT, 187, 95, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_21_EDIT, 187, 108, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_31_EDIT, 187, 122, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_41_EDIT, 187, 135, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_12_EDIT, 228, 95, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_22_EDIT, 228, 108, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_32_EDIT, 228, 122, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_42_EDIT, 228, 135, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_13_EDIT, 270, 95, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_23_EDIT, 270, 108, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_33_EDIT, 270, 122, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_43_EDIT, 270, 135, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_14_EDIT, 312, 95, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_24_EDIT, 312, 108, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_34_EDIT, 312, 122, 40, 12, ES_AUTOHSCROLL | ES_READONLY - EDITTEXT IDC_MATRIX_VIEWER_TEX_44_EDIT, 312, 135, 40, 12, ES_AUTOHSCROLL | ES_READONLY - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 13, 154, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 68, 155, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 80, 155, 11, 14 - LTEXT "frames", IDC_STATIC, 92, 158, 16, 8, SS_LEFT -} +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,307,156,50,14 + GROUPBOX "Projection",IDC_MATRIX_VIEWER_PROJ_GROUP,7,86,173,65 + EDITTEXT IDC_MATRIX_VIEWER_PROJ_11_EDIT,11,95,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_21_EDIT,11,108,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_31_EDIT,11,122,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_41_EDIT,11,135,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_12_EDIT,52,95,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_22_EDIT,52,108,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_32_EDIT,52,122,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_42_EDIT,52,135,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_13_EDIT,94,95,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_23_EDIT,94,108,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_33_EDIT,94,122,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_43_EDIT,94,135,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_14_EDIT,136,95,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_24_EDIT,136,108,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_34_EDIT,136,122,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_PROJ_44_EDIT,136,135,40,12,ES_AUTOHSCROLL | ES_READONLY + GROUPBOX "Position",IDC_MATRIX_VIEWER_COORD_GROUP,7,7,173,80 + EDITTEXT IDC_MATRIX_VIEWER_COORD_11_EDIT,11,15,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_21_EDIT,11,28,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_31_EDIT,11,42,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_41_EDIT,11,55,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_12_EDIT,52,15,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_22_EDIT,52,28,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_32_EDIT,52,42,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_42_EDIT,52,55,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_13_EDIT,94,15,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_23_EDIT,94,28,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_33_EDIT,94,42,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_43_EDIT,94,55,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_14_EDIT,136,15,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_24_EDIT,136,28,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_34_EDIT,136,42,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_COORD_44_EDIT,136,55,40,12,ES_AUTOHSCROLL | ES_READONLY + COMBOBOX IDC_MATRIX_VIEWER_COORD_COMBO,136,70,40,88,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Direction",IDC_MATRIX_VIEWER_DIR_GROUP,184,7,173,80 + EDITTEXT IDC_MATRIX_VIEWER_DIR_11_EDIT,188,15,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_21_EDIT,188,29,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_31_EDIT,188,42,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_41_EDIT,188,55,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_12_EDIT,228,15,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_22_EDIT,228,29,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_32_EDIT,228,42,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_42_EDIT,228,55,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_13_EDIT,270,15,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_23_EDIT,270,29,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_33_EDIT,270,42,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_43_EDIT,270,55,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_14_EDIT,312,15,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_24_EDIT,312,29,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_34_EDIT,312,42,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_DIR_44_EDIT,312,55,40,12,ES_AUTOHSCROLL | ES_READONLY + COMBOBOX IDC_MATRIX_VIEWER_DIR_COMBO,312,71,40,88,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Texture",IDC_MATRIX_VIEWER_TEX_GROUP,184,86,173,65 + EDITTEXT IDC_MATRIX_VIEWER_TEX_11_EDIT,187,95,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_21_EDIT,187,108,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_31_EDIT,187,122,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_41_EDIT,187,135,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_12_EDIT,228,95,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_22_EDIT,228,108,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_32_EDIT,228,122,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_42_EDIT,228,135,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_13_EDIT,270,95,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_23_EDIT,270,108,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_33_EDIT,270,122,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_43_EDIT,270,135,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_14_EDIT,312,95,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_24_EDIT,312,108,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_34_EDIT,312,122,40,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_MATRIX_VIEWER_TEX_44_EDIT,312,135,40,12,ES_AUTOHSCROLL | ES_READONLY + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,154,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,68,155,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,80,155,11,14 + LTEXT "frames",IDC_STATIC,92,158,16,8 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_MEM_VIEW DIALOG 0, 0, 436, 231 -STYLE DS_CENTER | DS_SHELLFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU -CAPTION "" +IDD_MEM_VIEW DIALOG 0, 0, 436, 231 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_VISIBLE | WS_CAPTION | WS_SYSMENU FONT 8, "MS Sans Serif" -{ - PUSHBUTTON "Close", IDCANCEL, 188, 210, 60, 15, BS_PUSHBUTTON - GROUPBOX "View mode", IDC_STATIC, 5, 5, 145, 35 - RADIOBUTTON "8-bit", IDC_8_BIT, 15, 20, 40, 10, WS_GROUP | WS_TABSTOP | BS_RADIOBUTTON - RADIOBUTTON "16-bit", IDC_16_BIT, 60, 20, 39, 10, WS_GROUP | WS_TABSTOP | BS_RADIOBUTTON - RADIOBUTTON "32-bit", IDC_32_BIT, 105, 20, 39, 10, WS_GROUP | WS_TABSTOP | BS_RADIOBUTTON - GROUPBOX "View address", IDC_STATIC, 160, 5, 115, 35 - PUSHBUTTON "Go", IDC_GO, 240, 20, 25, 14, BS_PUSHBUTTON - PUSHBUTTON "Text dump", IDC_TEXTDUMP, 295, 20, 60, 14, BS_PUSHBUTTON - CONTROL "1", IDC_MEMVIEWBOX, "MemView_ViewBox", 0x50210000, 5, 45, 425, 160 - EDITTEXT IDC_ADDRESS, 170, 20, 70, 14, ES_AUTOHSCROLL, WS_EX_TRANSPARENT - PUSHBUTTON "Raw dump", IDC_RAWDUMP, 360, 20, 60, 14, BS_PUSHBUTTON - GROUPBOX "View dump", IDC_STATIC, 285, 5, 145, 35 -} +BEGIN + PUSHBUTTON "Close",IDCANCEL,188,210,60,15 + GROUPBOX "View mode",IDC_STATIC,5,5,145,35 + RADIOBUTTON "8-bit",IDC_8_BIT,15,20,40,10,WS_GROUP | WS_TABSTOP + RADIOBUTTON "16-bit",IDC_16_BIT,60,20,39,10,WS_GROUP | WS_TABSTOP + RADIOBUTTON "32-bit",IDC_32_BIT,105,20,39,10,WS_GROUP | WS_TABSTOP + GROUPBOX "View address",IDC_STATIC,160,5,115,35 + PUSHBUTTON "Go",IDC_GO,240,20,25,14 + PUSHBUTTON "Text dump",IDC_TEXTDUMP,295,20,60,14 + CONTROL "1",IDC_MEMVIEWBOX,"MemView_ViewBox",WS_VSCROLL | WS_TABSTOP,5,45,425,160 + EDITTEXT IDC_ADDRESS,170,20,70,14,ES_AUTOHSCROLL,WS_EX_TRANSPARENT + PUSHBUTTON "Raw dump",IDC_RAWDUMP,360,20,60,14 + GROUPBOX "View dump",IDC_STATIC,285,5,145,35 +END - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_MICROPHONE DIALOG 0, 0, 241, 111 -STYLE DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU +IDD_MICROPHONE DIALOG 0, 0, 241, 111 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU CAPTION "Microphone Simulation Settings" FONT 8, "MS Sans Serif" -{ - DEFPUSHBUTTON "OK", IDOK, 130, 91, 50, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "Cancel", IDCANCEL, 185, 91, 50, 14, BS_PUSHBUTTON - GROUPBOX "Microphone Sample", IDC_STATIC, 5, 6, 230, 75 - AUTOCHECKBOX "Use Microphone Sample", IDC_USEMICSAMPLE, 15, 21, 110, 10, BS_AUTOCHECKBOX - LTEXT "Sample:", IDC_STATIC, 15, 36, 110, 8, SS_LEFT - EDITTEXT IDC_MICSAMPLE, 15, 46, 190, 14, ES_AUTOHSCROLL - PUSHBUTTON "...", IDC_MICSAMPLEBROWSE, 205, 46, 20, 14, BS_PUSHBUTTON -} +BEGIN + DEFPUSHBUTTON "OK",IDOK,130,91,50,14 + PUSHBUTTON "Cancel",IDCANCEL,185,91,50,14 + GROUPBOX "Microphone Sample",IDC_STATIC,5,6,230,75 + CONTROL "Use Microphone Sample",IDC_USEMICSAMPLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,21,110,10 + LTEXT "Sample:",IDC_STATIC,15,36,110,8 + EDITTEXT IDC_MICSAMPLE,15,46,190,14,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_MICSAMPLEBROWSE,205,46,20,14 +END - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK IDD_OAM DIALOGEX 0, 0, 300, 200 -STYLE DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU -CAPTION "OAM Fremviser" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - COMBOBOX IDC_SCR_SELECT, 4, 4, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWNLIST - SCROLLBAR IDC_SCROLLER, 48, 20, 20, 14, WS_VISIBLE | WS_VISIBLE - LTEXT "Mode :", IDC_STATIC, 4, 36, 45, 8, SS_LEFT - LTEXT "Tile :", IDC_STATIC, 4, 46, 45, 8, SS_LEFT - LTEXT "Palette :", IDC_STATIC, 4, 56, 45, 8, SS_LEFT - LTEXT "Prio :", IDC_STATIC, 4, 66, 45, 8, SS_LEFT - LTEXT "Koordinater :", IDC_STATIC, 4, 76, 45, 8, SS_LEFT - LTEXT "Dimension :", IDC_STATIC, 4, 86, 45, 8, SS_LEFT - LTEXT "Rotation :", IDC_STATIC, 4, 96, 45, 8, SS_LEFT - LTEXT "Mosaic :", IDC_STATIC, 4, 106, 45, 8, SS_LEFT - LTEXT "OAM : 0", IDC_OAMNUM, 4, 24, 40, 8, SS_LEFT - LTEXT "", IDC_MODE, 48, 36, 42, 8, SS_LEFT - LTEXT "", IDC_TILE, 48, 46, 72, 8, SS_LEFT - LTEXT "", IDC_PAL, 48, 56, 72, 8, SS_LEFT - LTEXT "", IDC_PRIO, 48, 66, 72, 8, SS_LEFT - LTEXT "", IDC_COOR, 48, 76, 42, 8, SS_LEFT - LTEXT "", IDC_DIM, 48, 86, 42, 8, SS_LEFT - LTEXT "", IDC_ROT, 48, 96, 42, 8, SS_LEFT - LTEXT "", IDC_MOS, 48, 106, 42, 8, SS_LEFT - LTEXT "", IDC_PROP0, 4, 116, 86, 8, SS_LEFT - LTEXT "", IDC_PROP1, 4, 126, 86, 8, SS_LEFT - PUSHBUTTON "&Luk", IDC_FERMER, 50, 181, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 4, 161, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 59, 162, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 71, 161, 11, 14 - LTEXT "frames", IDC_STATIC, 83, 163, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_OAM DIALOGEX 0, 0, 300, 200 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION CAPTION "OAM Viewer" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - COMBOBOX IDC_SCR_SELECT, 4, 4, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWNLIST - SCROLLBAR IDC_SCROLLER, 48, 20, 20, 14, WS_VISIBLE | WS_VISIBLE - LTEXT "Mode :", IDC_STATIC, 4, 36, 45, 8, SS_LEFT - LTEXT "Tile :", IDC_STATIC, 4, 46, 45, 8, SS_LEFT - LTEXT "Palette :", IDC_STATIC, 4, 56, 45, 8, SS_LEFT - LTEXT "Prio :", IDC_STATIC, 4, 66, 45, 8, SS_LEFT - LTEXT "Coordinates :", IDC_STATIC, 4, 76, 45, 8, SS_LEFT - LTEXT "Dimensions :", IDC_STATIC, 4, 86, 45, 8, SS_LEFT - LTEXT "Rotation :", IDC_STATIC, 4, 96, 45, 8, SS_LEFT - LTEXT "Mosaic :", IDC_STATIC, 4, 106, 45, 8, SS_LEFT - LTEXT "OAM : 0", IDC_OAMNUM, 4, 24, 40, 8, SS_LEFT - LTEXT "", IDC_MODE, 48, 36, 42, 8, SS_LEFT - LTEXT "", IDC_TILE, 48, 46, 72, 8, SS_LEFT - LTEXT "", IDC_PAL, 48, 56, 72, 8, SS_LEFT - LTEXT "", IDC_PRIO, 48, 66, 72, 8, SS_LEFT - LTEXT "", IDC_COOR, 48, 76, 42, 8, SS_LEFT - LTEXT "", IDC_DIM, 48, 86, 42, 8, SS_LEFT - LTEXT "", IDC_ROT, 48, 96, 42, 8, SS_LEFT - LTEXT "", IDC_MOS, 48, 106, 42, 8, SS_LEFT - LTEXT "", IDC_PROP0, 4, 116, 86, 8, SS_LEFT - LTEXT "", IDC_PROP1, 4, 126, 86, 8, SS_LEFT - PUSHBUTTON "&Close", IDC_FERMER, 50, 180, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 4, 161, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 59, 162, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 71, 161, 11, 14 - LTEXT "frames", IDC_STATIC, 83, 163, 16, 8, SS_LEFT -} +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_SCR_SELECT,4,4,90,14,CBS_DROPDOWNLIST | WS_TABSTOP + SCROLLBAR IDC_SCROLLER,48,20,20,14 + LTEXT "Mode :",IDC_STATIC,4,36,45,8 + LTEXT "Tile :",IDC_STATIC,4,46,45,8 + LTEXT "Palette :",IDC_STATIC,4,56,45,8 + LTEXT "Prio :",IDC_STATIC,4,66,45,8 + LTEXT "Coordinates :",IDC_STATIC,4,76,45,8 + LTEXT "Dimensions :",IDC_STATIC,4,86,45,8 + LTEXT "Rotation :",IDC_STATIC,4,96,45,8 + LTEXT "Mosaic :",IDC_STATIC,4,106,45,8 + LTEXT "OAM : 0",IDC_OAMNUM,4,24,40,8 + LTEXT "",IDC_MODE,48,36,42,8 + LTEXT "",IDC_TILE,48,46,72,8 + LTEXT "",IDC_PAL,48,56,72,8 + LTEXT "",IDC_PRIO,48,66,72,8 + LTEXT "",IDC_COOR,48,76,42,8 + LTEXT "",IDC_DIM,48,86,42,8 + LTEXT "",IDC_ROT,48,96,42,8 + LTEXT "",IDC_MOS,48,106,42,8 + LTEXT "",IDC_PROP0,4,116,86,8 + LTEXT "",IDC_PROP1,4,126,86,8 + PUSHBUTTON "&Close",IDC_FERMER,50,180,50,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,161,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,59,162,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,71,161,11,14 + LTEXT "frames",IDC_STATIC,83,163,16,8 +END - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_OAM DIALOGEX 0, 0, 300, 200 -STYLE DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU -CAPTION "OAM Viewer" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - COMBOBOX IDC_SCR_SELECT, 4, 4, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWNLIST - SCROLLBAR IDC_SCROLLER, 48, 20, 20, 14, WS_VISIBLE | WS_VISIBLE - LTEXT "Mode :", IDC_STATIC, 4, 36, 45, 8, SS_LEFT - LTEXT "Tile :", IDC_STATIC, 4, 46, 45, 8, SS_LEFT - LTEXT "Palette :", IDC_STATIC, 4, 56, 45, 8, SS_LEFT - LTEXT "Prio :", IDC_STATIC, 4, 66, 45, 8, SS_LEFT - LTEXT "Coordonnées :", IDC_STATIC, 4, 76, 45, 8, SS_LEFT - LTEXT "Dimensions :", IDC_STATIC, 4, 86, 45, 8, SS_LEFT - LTEXT "Rotation :", IDC_STATIC, 4, 96, 45, 8, SS_LEFT - LTEXT "Mosaic :", IDC_STATIC, 4, 106, 45, 8, SS_LEFT - LTEXT "OAM : 0", IDC_OAMNUM, 4, 24, 40, 8, SS_LEFT - LTEXT "", IDC_MODE, 48, 36, 42, 8, SS_LEFT - LTEXT "", IDC_TILE, 48, 46, 72, 8, SS_LEFT - LTEXT "", IDC_PAL, 48, 56, 72, 8, SS_LEFT - LTEXT "", IDC_PRIO, 48, 66, 72, 8, SS_LEFT - LTEXT "", IDC_COOR, 48, 76, 42, 8, SS_LEFT - LTEXT "", IDC_DIM, 48, 86, 42, 8, SS_LEFT - LTEXT "", IDC_ROT, 48, 96, 42, 8, SS_LEFT - LTEXT "", IDC_MOS, 48, 106, 42, 8, SS_LEFT - LTEXT "", IDC_PROP0, 4, 116, 86, 8, SS_LEFT - LTEXT "", IDC_PROP1, 4, 126, 86, 8, SS_LEFT - PUSHBUTTON "&Fermer", IDC_FERMER, 50, 180, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 4, 161, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 59, 162, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 71, 161, 11, 14 - LTEXT "frames", IDC_STATIC, 83, 163, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK -IDD_PAL DIALOGEX 0, 0, 120, 190 -STYLE DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU -CAPTION "Palette Fremvisning" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - COMBOBOX IDC_PAL_SELECT, 15, 3, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN - LTEXT "Pal : 0", IDC_PALNUM, 3, 21, 25, 8, SS_LEFT - SCROLLBAR IDC_SCROLLER, 30, 18, 20, 14, WS_VISIBLE | WS_VISIBLE - PUSHBUTTON "&Luk", IDC_FERMER, 35, 169, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 13, 150, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 68, 151, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 80, 151, 11, 14 - LTEXT "frames", IDC_STATIC, 92, 154, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_PAL DIALOGEX 0, 0, 120, 184 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION CAPTION "PAL VIEW" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - COMBOBOX IDC_PAL_SELECT, 15, 3, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN - LTEXT "Pal : 0", IDC_PALNUM, 3, 21, 25, 8, SS_LEFT - SCROLLBAR IDC_SCROLLER, 30, 18, 20, 14, WS_VISIBLE | WS_VISIBLE - PUSHBUTTON "&Close", IDC_FERMER, 35, 169, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 13, 150, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 68, 151, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 80, 151, 11, 14 - LTEXT "frames", IDC_STATIC, 92, 154, 16, 8, SS_LEFT -} +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_PAL_SELECT,15,3,90,14,CBS_DROPDOWN | WS_TABSTOP + LTEXT "Pal : 0",IDC_PALNUM,3,21,25,8 + SCROLLBAR IDC_SCROLLER,30,18,20,14 + PUSHBUTTON "&Close",IDC_FERMER,35,169,50,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,150,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,68,151,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,80,151,11,14 + LTEXT "frames",IDC_STATIC,92,154,16,8 +END - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_PAL DIALOGEX 0, 0, 120, 194 -STYLE DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU -CAPTION "PAL VIEW" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - COMBOBOX IDC_PAL_SELECT, 15, 3, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN - LTEXT "Pal : 0", IDC_PALNUM, 3, 21, 25, 8, SS_LEFT - SCROLLBAR IDC_SCROLLER, 30, 18, 20, 14, WS_VISIBLE | WS_VISIBLE - AUTOCHECKBOX "Auto-update", IDC_AUTO_UPDATE, 60, 18, 75, 14, BS_AUTOCHECKBOX - PUSHBUTTON "&Fermer", IDC_FERMER, 35, 169, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE2, 13, 150, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 68, 151, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 80, 151, 11, 14 - LTEXT "frames", IDC_STATIC, 92, 154, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK IDD_SOUNDSETTINGS DIALOGEX 0, 0, 174, 96 -STYLE DS_CENTER | DS_MODALFRAME | DS_SETFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU -CAPTION "Lyd Indstillinger" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - GROUPBOX "Lyd Indstillinger", -1, 3, 2, 168, 28 - LTEXT "Lyd Driver", -1, 10, 14, 40, 10, SS_LEFT - COMBOBOX IDC_SOUNDCORECB, 54, 13, 110, 33, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST - GROUPBOX "Andre Indstillinger", -1, 3, 31, 168, 43 - LTEXT "Buffer Størrelse", -1, 10, 42, 60, 10, SS_LEFT - EDITTEXT IDC_SOUNDBUFFERET, 136, 41, 28, 13 - LTEXT "Volumen", -1, 10, 57, 30, 10, SS_LEFT - CONTROL "", IDC_SLVOLUME, TRACKBAR_CLASS, 0, 40, 57, 128, 10 - DEFPUSHBUTTON "&OK", IDOK, 82, 78, 40, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "&Fortryd", IDCANCEL, 127, 78, 40, 14, BS_PUSHBUTTON -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_SOUNDSETTINGS DIALOGEX 0, 0, 174, 96 -STYLE DS_CENTER | DS_MODALFRAME | DS_SETFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Sound Settings" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - GROUPBOX "Sound Core Settings", -1, 3, 2, 168, 28 - LTEXT "Sound Core", -1, 10, 14, 40, 10, SS_LEFT - COMBOBOX IDC_SOUNDCORECB, 54, 13, 110, 33, WS_TABSTOP | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST - GROUPBOX "Other Settings", -1, 3, 31, 168, 43 - LTEXT "Buffer Size", -1, 10, 42, 60, 10, SS_LEFT - EDITTEXT IDC_SOUNDBUFFERET, 136, 41, 28, 13 - LTEXT "Volume", -1, 10, 57, 30, 10, SS_LEFT - CONTROL "", IDC_SLVOLUME, TRACKBAR_CLASS, 0, 40, 57, 128, 10 - DEFPUSHBUTTON "&OK", IDOK, 82, 78, 40, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "&Cancel", IDCANCEL, 127, 78, 40, 14, BS_PUSHBUTTON -} +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + GROUPBOX "Sound Core Settings",-1,3,2,168,28 + LTEXT "Sound Core",-1,10,14,40,10 + COMBOBOX IDC_SOUNDCORECB,54,13,110,33,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Other Settings",-1,3,31,168,43 + LTEXT "Buffer Size",-1,10,42,60,10 + EDITTEXT IDC_SOUNDBUFFERET,136,41,28,13 + LTEXT "Volume",-1,10,57,30,10 + CONTROL "",IDC_SLVOLUME,"msctls_trackbar32",0x0,40,57,128,10 + DEFPUSHBUTTON "&OK",IDOK,82,78,40,14 + PUSHBUTTON "&Cancel",IDCANCEL,127,78,40,14 +END - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK IDD_TILE DIALOGEX 0, 0, 446, 180 -STYLE DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU -CAPTION "TILE Fremvisning" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - COMBOBOX IDC_PAL_SELECT, 4, 13, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN - LTEXT "Pal : 0", IDC_PALNUM, 4, 31, 25, 8, SS_LEFT - SCROLLBAR IDC_SCROLLER, 30, 28, 20, 14, WS_VISIBLE | WS_VISIBLE - COMBOBOX IDC_MEM_SELECT, 4, 50, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN - AUTORADIOBUTTON "Bitmap", IDC_BITMAP, 4, 68, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "256 Farver", IDC_256COUL, 4, 80, 55, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "16 Farver", IDC_16COUL, 4, 92, 50, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - CONTROL "Rediger", IDC_Tile_BOX, "TileViewBox", 0x50010000, 100, 2, 344, 160, 0x00000200 - CONTROL "Rediger", IDC_MINI_TILE, "MiniTileViewBox", 0x50010000, 22, 116, 56, 52, 0x00000200 - LTEXT "Tile Num : 0", IDC_TILENUM, 23, 170, 100, 8, SS_LEFT - PUSHBUTTON "&Luk", IDC_FERMER, 198, 164, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 349, 165, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 404, 165, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 416, 164, 11, 14 - LTEXT "frames", IDC_STATIC, 428, 167, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_TILE DIALOGEX 0, 0, 446, 180 -STYLE DS_CENTER | DS_SETFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME +STYLE DS_SETFONT | DS_CENTER | WS_VISIBLE | WS_CAPTION CAPTION "TILE VIEW" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - COMBOBOX IDC_PAL_SELECT, 4, 13, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN - LTEXT "Pal : 0", IDC_PALNUM, 4, 31, 25, 8, SS_LEFT - SCROLLBAR IDC_SCROLLER, 30, 28, 20, 14, WS_VISIBLE | WS_VISIBLE - COMBOBOX IDC_MEM_SELECT, 4, 50, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN - AUTORADIOBUTTON "Bitmap", IDC_BITMAP, 4, 68, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "256 colors", IDC_256COUL, 4, 80, 55, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "16 colors", IDC_16COUL, 4, 92, 50, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - CONTROL "Edit", IDC_Tile_BOX, "TileViewBox", 0x50000000, 100, 2, 344, 160, 0x00000200 - CONTROL "Edit", IDC_MINI_TILE, "MiniTileViewBox", 0x50000000, 22, 116, 56, 52, 0x00000200 - LTEXT "Tile num : 0", IDC_TILENUM, 23, 170, 100, 8, SS_LEFT - PUSHBUTTON "&Close", IDC_FERMER, 198, 164, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 349, 165, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 404, 165, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 416, 164, 11, 14 - LTEXT "frames", IDC_STATIC, 428, 167, 16, 8, SS_LEFT -} +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_PAL_SELECT,4,13,90,14,CBS_DROPDOWN | WS_TABSTOP + LTEXT "Pal : 0",IDC_PALNUM,4,31,25,8 + SCROLLBAR IDC_SCROLLER,30,28,20,14 + COMBOBOX IDC_MEM_SELECT,4,50,90,14,CBS_DROPDOWN | WS_TABSTOP + CONTROL "Bitmap",IDC_BITMAP,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,4,68,35,10 + CONTROL "256 colors",IDC_256COUL,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,4,80,55,10 + CONTROL "16 colors",IDC_16COUL,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,4,92,50,10 + CONTROL "Edit",IDC_Tile_BOX,"TileViewBox",0x0,100,2,344,160,WS_EX_CLIENTEDGE + CONTROL "Edit",IDC_MINI_TILE,"MiniTileViewBox",0x0,22,116,56,52,WS_EX_CLIENTEDGE + LTEXT "Tile num : 0",IDC_TILENUM,23,170,100,8 + PUSHBUTTON "&Close",IDC_FERMER,198,164,50,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,349,165,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,404,165,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,416,164,11,14 + LTEXT "frames",IDC_STATIC,428,167,16,8 +END - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_TILE DIALOGEX 0, 0, 446, 180 -STYLE DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU -CAPTION "TILE VIEW" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - COMBOBOX IDC_PAL_SELECT, 4, 13, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN - LTEXT "Pal : 0", IDC_PALNUM, 4, 31, 25, 8, SS_LEFT - SCROLLBAR IDC_SCROLLER, 30, 28, 20, 14, WS_VISIBLE | WS_VISIBLE - COMBOBOX IDC_MEM_SELECT, 4, 50, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN - AUTORADIOBUTTON "Bitmap", IDC_BITMAP, 4, 68, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "256 couleurs", IDC_256COUL, 4, 80, 55, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "16 couleurs", IDC_16COUL, 4, 92, 50, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - CONTROL "Edit", IDC_Tile_BOX, "TileViewBox", 0x50010000, 100, 2, 344, 160, 0x00000200 - CONTROL "Edit", IDC_MINI_TILE, "MiniTileViewBox", 0x50010000, 22, 116, 56, 52, 0x00000200 - LTEXT "Tile num : 0", IDC_TILENUM, 23, 170, 100, 8, SS_LEFT - PUSHBUTTON "&Fermer", IDC_FERMER, 198, 164, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 349, 165, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 404, 165, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 416, 164, 11, 14 - LTEXT "frames", IDC_STATIC, 428, 167, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_WIFISETTINGS DIALOG 0, 0, 331, 91 -STYLE DS_CENTER | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU +IDD_WIFISETTINGS DIALOG 0, 0, 331, 91 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYSMENU CAPTION "Wifi settings" FONT 8, "Ms Shell Dlg" -{ - DEFPUSHBUTTON "OK", IDOK, 220, 70, 50, 14, BS_DEFPUSHBUTTON - PUSHBUTTON "Cancel", IDCANCEL, 275, 70, 50, 14, BS_PUSHBUTTON - GROUPBOX "Network adapter settings", IDC_STATIC, 5, 5, 320, 60 - LTEXT "Bridge network adapter:", IDC_STATIC, 15, 20, 76, 8, SS_LEFT - COMBOBOX IDC_BRIDGEADAPTER, 15, 30, 300, 45, CBS_DROPDOWNLIST | CBS_HASSTRINGS - LTEXT "(wifi emulation is not yet complete. this doesn't work.)", IDC_STATIC, 15, 48, 166, 8, SS_LEFT -} - +BEGIN + DEFPUSHBUTTON "OK",IDOK,220,70,50,14 + PUSHBUTTON "Cancel",IDCANCEL,275,70,50,14 + GROUPBOX "Network adapter settings",IDC_STATIC,5,5,320,60 + LTEXT "Bridge network adapter:",IDC_STATIC,15,20,76,8 + COMBOBOX IDC_BRIDGEADAPTER,15,30,300,45,CBS_DROPDOWNLIST | CBS_HASSTRINGS + LTEXT "(wifi emulation is not yet complete. this doesn't work.)",IDC_STATIC,15,48,166,8 +END + +IDD_RECORDMOVIE DIALOGEX 0, 0, 301, 89 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Record movie" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,177,62,50,14 + GROUPBOX "",65501,11,9,269,47 + PUSHBUTTON "Cancel",IDCANCEL,231,62,50,14 + EDITTEXT IDC_EDIT_FILENAME,49,20,189,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BUTTON_BROWSEFILE,249,20,18,14 + EDITTEXT IDC_EDIT_AUTHOR,49,36,189,14,ES_AUTOHSCROLL + LTEXT "File:",IDC_STATIC,31,22,14,8 + LTEXT "Author:",IDC_STATIC,21,38,25,8 +END + +IDD_REPLAY_METADATA DIALOGEX 0, 0, 325, 250 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Movie Metadata" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Close",IDCANCEL,268,229,50,14 + CONTROL "",1130,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,7,311,214 +END +///////////////////////////////////////////////////////////////////////////// // -// Accelerator resources +// Menu // -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -IDR_MAIN_ACCEL ACCELERATORS -{ -} + +RAMWATCH_MENU MENU +BEGIN + POPUP "File" + BEGIN + MENUITEM "&New list\tCtrl N", RAMMENU_FILE_NEW + MENUITEM "&Open...\tCtrl O", RAMMENU_FILE_OPEN + MENUITEM "&Save\tCtrl S", RAMMENU_FILE_SAVE + MENUITEM "Sa&ve As...\tCtrl Shift S", RAMMENU_FILE_SAVEAS + MENUITEM "&Append file...", RAMMENU_FILE_APPEND + MENUITEM "Recent", RAMMENU_FILE_RECENT + MENUITEM SEPARATOR + MENUITEM "Auto-&load", RAMMENU_FILE_AUTOLOAD + MENUITEM "Save Window Position", RAMMENU_FILE_SAVEWINDOW + MENUITEM SEPARATOR + MENUITEM "&Close\tAlt F4", IDCANCEL + END + POPUP "Watches" + BEGIN + MENUITEM "&New Watch\tN", IDC_C_WATCH + MENUITEM "&Edit Watch\tE", IDC_C_WATCH_EDIT + MENUITEM "&Remove Watch\tR", IDC_C_WATCH_REMOVE + MENUITEM "Duplicate Watch\tA", IDC_C_WATCH_DUPLICATE + MENUITEM SEPARATOR + MENUITEM "Move Up\tU", IDC_C_WATCH_UP + MENUITEM "Move Down\tD", IDC_C_WATCH_DOWN + END +END + +MENU_PRINCIPAL MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open ROM...", IDM_OPEN + MENUITEM "&Recent ROM", ID_FILE_RECENTROM + MENUITEM "ROM &Info", IDM_GAME_INFO + MENUITEM SEPARATOR + MENUITEM "Save State As...", IDM_STATE_SAVE + MENUITEM "Load State As...", IDM_STATE_LOAD + POPUP "Save State" + BEGIN + MENUITEM "1", IDM_STATE_SAVE_F1 + MENUITEM "2", IDM_STATE_SAVE_F2 + MENUITEM "3", IDM_STATE_SAVE_F3 + MENUITEM "4", IDM_STATE_SAVE_F4 + MENUITEM "5", IDM_STATE_SAVE_F5 + MENUITEM "6", IDM_STATE_SAVE_F6 + MENUITEM "7", IDM_STATE_SAVE_F7 + MENUITEM "8", IDM_STATE_SAVE_F8 + MENUITEM "9", IDM_STATE_SAVE_F9 + MENUITEM "10", IDM_STATE_SAVE_F10 + END + POPUP "Load State" + BEGIN + MENUITEM "1", IDM_STATE_LOAD_F1 + MENUITEM "2", IDM_STATE_LOAD_F2 + MENUITEM "3", IDM_STATE_LOAD_F3 + MENUITEM "4", IDM_STATE_LOAD_F4 + MENUITEM "5", IDM_STATE_LOAD_F5 + MENUITEM "6", IDM_STATE_LOAD_F6 + MENUITEM "7", IDM_STATE_LOAD_F7 + MENUITEM "8", IDM_STATE_LOAD_F8 + MENUITEM "9", IDM_STATE_LOAD_F9 + MENUITEM "10", IDM_STATE_LOAD_F10 + END + MENUITEM SEPARATOR + MENUITEM "Import Backup Memory", IDM_IMPORTBACKUPMEMORY + MENUITEM SEPARATOR + MENUITEM "Save Screenshot &As...", IDM_PRINTSCREEN + MENUITEM "&Quick Screenshot", IDM_QUICK_PRINTSCREEN + MENUITEM SEPARATOR + MENUITEM "Record &AVI...", IDM_FILE_RECORDAVI + MENUITEM "Stop AVI", IDM_FILE_STOPAVI + MENUITEM SEPARATOR + MENUITEM "&Record Movie...", IDM_RECORD_MOVIE + MENUITEM "&Play Movie...", IDM_PLAY_MOVIE + MENUITEM "&Stop Movie", IDM_STOPMOVIE + MENUITEM SEPARATOR + MENUITEM "&Quit\tAlt F4", IDM_QUIT + END + POPUP "&Emulation" + BEGIN + MENUITEM "&Pause", IDM_PAUSE + MENUITEM "&Reset", IDM_RESET + MENUITEM SEPARATOR + MENUITEM "&Clear Sound", IDM_SHUT_UP + MENUITEM SEPARATOR + MENUITEM "GBA &slot", IDM_GBASLOT + POPUP "&Cheats" + BEGIN + MENUITEM "&List", IDM_CHEATS_LIST, INACTIVE + MENUITEM "&Search", IDM_CHEATS_SEARCH, INACTIVE + END + END + POPUP "&View" + BEGIN + POPUP "&Rotation" + BEGIN + MENUITEM " 0", IDC_ROTATE0 + MENUITEM " 90", IDC_ROTATE90 + MENUITEM "180", IDC_ROTATE180 + MENUITEM "270", IDC_ROTATE270 + END + POPUP "Window &Size" + BEGIN + MENUITEM "1x", IDC_WINDOW1X + MENUITEM "1.5x", IDC_WINDOW1_5X + MENUITEM "2x", IDC_WINDOW2X + MENUITEM "3x", IDC_WINDOW3X + MENUITEM "4x", IDC_WINDOW4X + END + POPUP "Screen separation" + BEGIN + MENUITEM "None\t(0 px)", IDM_SCREENSEP_NONE + MENUITEM "Narrow border\t(5 px)", IDM_SCREENSEP_BORDER + MENUITEM "DS\t(64 px)", IDM_SCREENSEP_NDSGAP + END + MENUITEM "&Force Maintain Ratio", IDC_FORCERATIO + MENUITEM "Default size", IDM_DEFSIZE + MENUITEM SEPARATOR + MENUITEM "Display Frame Counter", ID_VIEW_FRAMECOUNTER + MENUITEM "Display FPS", ID_VIEW_DISPLAYFPS + MENUITEM "Display Input", ID_VIEW_DISPLAYINPUT + MENUITEM "Display Lag Counter", ID_VIEW_DISPLAYLAG + MENUITEM "Display Microphone", ID_VIEW_DISPLAYMICROPHONE + MENUITEM "HUD Editing Mode", ID_VIEW_HUDEDITOR + MENUITEM "RAM Watch", ID_RAM_WATCH + MENUITEM "RAM Search", ID_RAM_SEARCH + END + POPUP "&Config" + BEGIN + POPUP "&Save Type" + BEGIN + MENUITEM "Autodetect", IDC_SAVETYPE1 + MENUITEM "EEPROM 4kbit", IDC_SAVETYPE2 + MENUITEM "EEPROM 64kbit", IDC_SAVETYPE3 + MENUITEM "EEPROM 512kbit", IDC_SAVETYPE4 + MENUITEM "FRAM 256kbit", IDC_SAVETYPE5 + MENUITEM "FLASH 2mbit", IDC_SAVETYPE6 + MENUITEM "FLASH 4mbit", IDC_SAVETYPE7 + END + MENUITEM "3D Settings", IDM_3DCONFIG + MENUITEM "Control Config", IDM_CONFIG + MENUITEM "Hotkey Config", IDM_HOTKEY_CONFIG + MENUITEM "Sound Settings", IDM_SOUNDSETTINGS + MENUITEM "Wifi settings", IDM_WIFISETTINGS + MENUITEM "Firmware Settings", IDM_FIRMSETTINGS + MENUITEM "Emulation Settings", IDM_EMULATIONSETTINGS + MENUITEM "Microphone Settings", IDM_MICROPHONESETTINGS + POPUP "&Frame Skip" + BEGIN + MENUITEM "Limit framerate", IDC_FRAMELIMIT + MENUITEM "Auto", IDC_FRAMESKIPAUTO + MENUITEM "0", IDC_FRAMESKIP0 + MENUITEM "1", IDC_FRAMESKIP1 + MENUITEM "2", IDC_FRAMESKIP2 + MENUITEM "3", IDC_FRAMESKIP3 + MENUITEM "4", IDC_FRAMESKIP4 + MENUITEM "5", IDC_FRAMESKIP5 + MENUITEM "6", IDC_FRAMESKIP6 + MENUITEM "7", IDC_FRAMESKIP7 + MENUITEM "8", IDC_FRAMESKIP8 + MENUITEM "9", IDC_FRAMESKIP9 + END + POPUP "&Language" + BEGIN + MENUITEM "English", IDC_LANGENGLISH + MENUITEM "French", IDC_LANGFRENCH + MENUITEM "Danish", IDC_LANGDANISH + END + END + POPUP "&Tools" + BEGIN + MENUITEM "&Disassembler", IDM_DISASSEMBLER + MENUITEM "View &Memory", IDM_MEMORY + MENUITEM "View &Registers", IDM_IOREG + MENUITEM "View &Palette", IDM_PAL + MENUITEM "View &Tiles", IDM_TILE + MENUITEM "View M&aps", IDM_MAP + MENUITEM "View &OAM", IDM_OAM + MENUITEM "View Matrices", IDM_MATRIX_VIEWER + MENUITEM "View Lights", IDM_LIGHT_VIEWER + MENUITEM SEPARATOR + POPUP "&View Layers" + BEGIN + MENUITEM "Main BG 0", IDM_MBG0, CHECKED + MENUITEM "Main BG 1", IDM_MBG1, CHECKED + MENUITEM "Main BG 2", IDM_MBG2, CHECKED + MENUITEM "Main BG 3", IDM_MBG3, CHECKED + MENUITEM SEPARATOR + MENUITEM "Sub BG 0", IDM_SBG0, CHECKED + MENUITEM "Sub BG 1", IDM_SBG1, CHECKED + MENUITEM "Sub BG 2", IDM_SBG2, CHECKED + MENUITEM "Sub BG 3", IDM_SBG3, CHECKED + END + END + POPUP "&Help" + BEGIN + MENUITEM "&Website", IDM_WEBSITE + MENUITEM "&Forums", IDM_FORUM + MENUITEM "&Submit a bug report", IDM_SUBMITBUGREPORT + MENUITEM "&About", IDM_ABOUT + END +END + +RECENTROMS MENU +BEGIN + POPUP "Recent ROMs" + BEGIN + MENUITEM "None", 601, GRAYED + MENUITEM SEPARATOR + MENUITEM "Clear", 600, GRAYED + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_RECORDMOVIE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 294 + TOPMARGIN, 7 + BOTTOMMARGIN, 82 + END + + "IDD_REPLAY_METADATA", DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 318 + TOPMARGIN, 7 + BOTTOMMARGIN, 243 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_BGTILES BITMAP "bitmap1.bmp" +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// French (France) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA) +#ifdef _WIN32 +LANGUAGE LANG_FRENCH, SUBLANG_FRENCH +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_3DSETTINGS DIALOG 0, 0, 174, 120 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Configuration 3D" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,62,92,50,14 + PUSHBUTTON "Annuler",IDCANCEL,117,92,50,14 + PUSHBUTTON "Par défaut",IDC_DEFAULT,7,92,50,14 + GROUPBOX "Moteur de rendu :",IDC_STATIC,7,7,160,39 + COMBOBOX IDC_3DCORE,15,23,146,138,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Unrealistically High-Precision Color Interpolation",IDC_INTERPOLATECOLOR, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,55,165,10 + LTEXT "(Presently only effective for SoftRasterizer)",IDC_STATIC,21,65,134,8 +END + +IDD_DESASSEMBLEUR_VIEWER7 DIALOGEX 0, 0, 380, 186 +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION +CAPTION "Desassembleur" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + CONTROL "Auto ",IDC_AUTO_DES,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,10,4,35,10 + CONTROL "ARM",IDC_ARM,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,44,4,35,10 + CONTROL "Thumb",IDC_THUMB,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,82,4,40,10 + LTEXT "Aller E:",IDC_STATIC,130,4,33,10 + EDITTEXT IDC_GOTODES,155,1,82,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP + PUSHBUTTON "&GO",IDC_GO,240,1,20,14 + CONTROL "Edit",IDC_DES_BOX,"DesViewBox7",WS_VSCROLL | WS_TABSTOP,4,16,296,150,WS_EX_CLIENTEDGE + PUSHBUTTON "&Fermer",IDC_FERMER,246,170,50,14 + LTEXT "R0 :",IDC_STATIC,304,16,17,8 + LTEXT "R1 :",IDC_STATIC,304,24,17,8 + LTEXT "R2 :",IDC_STATIC,304,32,17,8 + LTEXT "R3 :",IDC_STATIC,304,40,17,8 + LTEXT "R4 :",IDC_STATIC,304,48,17,8 + LTEXT "R5 :",IDC_STATIC,304,56,17,8 + LTEXT "R6 :",IDC_STATIC,304,64,17,8 + LTEXT "R7 :",IDC_STATIC,304,72,17,8 + LTEXT "R8 :",IDC_STATIC,304,80,17,8 + LTEXT "R9 :",IDC_STATIC,304,88,17,8 + LTEXT "R10 :",IDC_STATIC,304,96,17,8 + LTEXT "R11 :",IDC_STATIC,304,104,17,8 + LTEXT "R12 :",IDC_STATIC,304,112,17,8 + LTEXT "SP :",IDC_STATIC,304,120,17,8 + LTEXT "LR :",IDC_STATIC,304,128,17,8 + LTEXT "PC :",IDC_STATIC,304,136,17,8 + LTEXT "Mode :",IDC_STATIC,304,158,22,8 + LTEXT "SPSR :",IDC_STATIC,304,168,22,8 + LTEXT "00000000",IDC_R0,325,16,40,8 + LTEXT "00000000",IDC_R1,325,24,40,8 + LTEXT "00000000",IDC_R2,325,32,40,8 + LTEXT "00000000",IDC_R3,325,40,40,8 + LTEXT "00000000",IDC_R4,325,48,40,8 + LTEXT "00000000",IDC_R5,325,56,40,8 + LTEXT "00000000",IDC_R6,325,64,40,8 + LTEXT "00000000",IDC_R7,325,72,40,8 + LTEXT "00000000",IDC_R8,325,80,40,8 + LTEXT "00000000",IDC_R9,325,88,40,8 + LTEXT "00000000",IDC_R10,325,96,40,8 + LTEXT "00000000",IDC_R11,325,104,40,8 + LTEXT "00000000",IDC_R12,325,112,40,8 + LTEXT "00000000",IDC_R13,325,120,40,8 + LTEXT "00000000",IDC_R14,325,128,40,8 + LTEXT "00000000",IDC_R15,325,136,40,8 + LTEXT "",IDC_MODE,327,158,28,8 + LTEXT "",IDC_TMP,327,168,40,8 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,285,1,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,340,3,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,352,2,11,14 + LTEXT "frames",IDC_STATIC,364,5,16,8 + PUSHBUTTON "&Refresh",IDC_REFRESH,162,170,50,14,BS_ICON + EDITTEXT IDC_SETPNUM,5,170,34,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_NUMBER | WS_GROUP + PUSHBUTTON "&Step",IDC_STEP,41,170,50,14 + CONTROL "Autoupd asm",IDC_AUTOUPDATE_ASM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,172,57,10 +END + +IDD_DESASSEMBLEUR_VIEWER9 DIALOGEX 0, 0, 380, 186 +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION +CAPTION "Desassembleur" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + CONTROL "Auto ",IDC_AUTO_DES,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,10,4,35,10 + CONTROL "ARM",IDC_ARM,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,44,4,35,10 + CONTROL "Thumb",IDC_THUMB,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,82,4,40,10 + LTEXT "Aller E:",IDC_STATIC,130,4,33,10 + EDITTEXT IDC_GOTODES,155,1,82,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP + PUSHBUTTON "&GO",IDC_GO,240,1,20,14 + CONTROL "Edit",IDC_DES_BOX,"DesViewBox9",WS_VSCROLL | WS_TABSTOP,4,16,296,150,WS_EX_CLIENTEDGE + PUSHBUTTON "&Fermer",IDC_FERMER,246,170,50,14 + LTEXT "R0 :",IDC_STATIC,304,16,17,8 + LTEXT "R1 :",IDC_STATIC,304,24,17,8 + LTEXT "R2 :",IDC_STATIC,304,32,17,8 + LTEXT "R3 :",IDC_STATIC,304,40,17,8 + LTEXT "R4 :",IDC_STATIC,304,48,17,8 + LTEXT "R5 :",IDC_STATIC,304,56,17,8 + LTEXT "R6 :",IDC_STATIC,304,64,17,8 + LTEXT "R7 :",IDC_STATIC,304,72,17,8 + LTEXT "R8 :",IDC_STATIC,304,80,17,8 + LTEXT "R9 :",IDC_STATIC,304,88,17,8 + LTEXT "R10 :",IDC_STATIC,304,96,17,8 + LTEXT "R11 :",IDC_STATIC,304,104,17,8 + LTEXT "R12 :",IDC_STATIC,304,112,17,8 + LTEXT "SP :",IDC_STATIC,304,120,17,8 + LTEXT "LR :",IDC_STATIC,304,128,17,8 + LTEXT "PC :",IDC_STATIC,304,136,17,8 + LTEXT "Mode :",IDC_STATIC,304,158,22,8 + LTEXT "SPSR :",IDC_STATIC,304,168,22,8 + LTEXT "00000000",IDC_R0,325,16,40,8 + LTEXT "00000000",IDC_R1,325,24,40,8 + LTEXT "00000000",IDC_R2,325,32,40,8 + LTEXT "00000000",IDC_R3,325,40,40,8 + LTEXT "00000000",IDC_R4,325,48,40,8 + LTEXT "00000000",IDC_R5,325,56,40,8 + LTEXT "00000000",IDC_R6,325,64,40,8 + LTEXT "00000000",IDC_R7,325,72,40,8 + LTEXT "00000000",IDC_R8,325,80,40,8 + LTEXT "00000000",IDC_R9,325,88,40,8 + LTEXT "00000000",IDC_R10,325,96,40,8 + LTEXT "00000000",IDC_R11,325,104,40,8 + LTEXT "00000000",IDC_R12,325,112,40,8 + LTEXT "00000000",IDC_R13,325,120,40,8 + LTEXT "00000000",IDC_R14,325,128,40,8 + LTEXT "00000000",IDC_R15,325,136,40,8 + LTEXT "",IDC_MODE,327,158,28,8 + LTEXT "",IDC_TMP,327,168,40,8 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,285,1,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,340,3,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,352,2,11,14 + LTEXT "frames",IDC_STATIC,364,5,16,8 + PUSHBUTTON "&Refresh",IDC_REFRESH,162,170,50,14,BS_ICON + EDITTEXT IDC_SETPNUM,5,170,34,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_NUMBER | WS_GROUP + PUSHBUTTON "&Step",IDC_STEP,41,170,50,14 + CONTROL "Autoupd asm",IDC_AUTOUPDATE_ASM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,172,57,10 +END + +IDD_FIRMSETTINGS DIALOG 0, 0, 161, 145 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Configuration du firmware" +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT IDC_EDIT1,66,14,82,14,ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP + EDITTEXT IDC_EDIT2,66,33,82,14,ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP + COMBOBOX IDC_COMBO1,66,53,84,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO2,66,71,84,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO3,66,88,84,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO4,66,105,84,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "&OK",IDOK,7,124,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,104,124,50,14 + CONTROL "Couleur préférée:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,55,54,12 + CONTROL "Mois naissance:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,72,56,12 + CONTROL "Jour naissance:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,90,52,12 + CONTROL "Langage:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,106,52,12 + CONTROL "Pseudonyme:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,17,52,12 + CONTROL "Message:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP,9,36,52,12 +END + +IDD_GAME_INFO DIALOG 0, 0, 366, 406 +STYLE DS_SETFONT | DS_CENTER | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Info ROM" +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Fermer",IDCANCEL,310,385,50,14 + LTEXT "Titre du jeu :",IDC_STATIC,190,20,95,8 + LTEXT "",IDC_GI_GAMETITLE,285,20,70,8 + LTEXT "Code du jeu :",IDC_STATIC,190,35,95,8 + LTEXT "",IDC_GI_GAMECODE,285,35,70,8 + LTEXT "Code du fabricant :",IDC_STATIC,190,50,95,8 + LTEXT "",IDC_GI_MAKERCODE,285,50,70,8 + LTEXT "Taille de la puce :",IDC_STATIC,190,65,95,8 + LTEXT "",IDC_GI_CHIPSIZE,285,65,70,8 + LTEXT "Offset ROM du bin. ARM9 :",IDC_STATIC,190,100,95,8 + LTEXT "",IDC_GI_ARM9ROM,285,100,70,8 + LTEXT "Adr. d'entrée du bin. ARM9 :",IDC_STATIC,190,115,95,8 + LTEXT "",IDC_GI_ARM9ENTRY,285,115,70,8 + LTEXT "Adr. de début du bin. ARM9 :",IDC_STATIC,190,130,95,8 + LTEXT "",IDC_GI_ARM9START,285,130,70,8 + GROUPBOX "Informations générales",IDC_STATIC,180,5,180,75 + GROUPBOX "Binaires ARM9 && ARM7",IDC_STATIC,180,85,180,135 + LTEXT "Taille du bin. ARM9 :",IDC_STATIC,190,145,95,8 + LTEXT "",IDC_GI_ARM9SIZE,285,145,70,8 + LTEXT "Offset ROM du bin. ARM7 :",IDC_STATIC,190,160,95,8 + LTEXT "",IDC_GI_ARM7ROM,285,160,70,8 + LTEXT "Adr. d'entrée du bin. ARM7 :",IDC_STATIC,190,175,95,8 + LTEXT "",IDC_GI_ARM7ENTRY,285,175,70,8 + LTEXT "Adr. de début du bin. ARM7 :",IDC_STATIC,190,190,95,8 + LTEXT "",IDC_GI_ARM7START,285,190,70,8 + LTEXT "Taille du bin. ARM7 :",IDC_STATIC,190,205,95,8 + LTEXT "",IDC_GI_ARM7SIZE,285,205,70,8 + GROUPBOX "Système de fichiers",IDC_STATIC,180,225,180,75 + LTEXT "Offset ROM de la FNT :",IDC_STATIC,190,240,95,8 + LTEXT "",IDC_GI_FNTOFS,285,240,70,8 + LTEXT "Taille de la FNT :",IDC_STATIC,190,255,95,8 + LTEXT "",IDC_GI_FNTSIZE,285,255,70,8 + LTEXT "Offset ROM de la FAT :",IDC_STATIC,190,270,95,8 + LTEXT "",IDC_GI_FATOFS,285,270,70,8 + LTEXT "Taille de la FAT :",IDC_STATIC,190,285,95,8 + LTEXT "",IDC_GI_FATSIZE,285,285,70,8 + GROUPBOX "Divers",IDC_STATIC,180,305,180,50 + LTEXT "Offset de la région icône/titre :",IDC_STATIC,190,320,95,8 + LTEXT "",IDC_GI_ICONTITLEOFS,285,320,70,8 + LTEXT "Taille utilisée de la ROM :",IDC_STATIC,190,335,95,8 + LTEXT "",IDC_GI_USEDROMSIZE,285,335,70,8 + GROUPBOX "",IDC_STATIC,5,5,165,45 + LTEXT "",IDC_GI_TITLE,55,15,110,30 + GROUPBOX "Titres",IDC_STATIC,5,55,165,345 + LTEXT "Titre japonais :",IDC_STATIC,15,70,65,8 + LTEXT "",IDC_GI_TITLEJP,15,85,145,35 + LTEXT "Titre anglais :",IDC_STATIC,15,125,65,8 + LTEXT "",IDC_GI_TITLEEN,15,140,150,35 + LTEXT "Titre français :",IDC_STATIC,15,180,65,8 + LTEXT "",IDC_GI_TITLEFR,15,195,150,35 + LTEXT "Titre allemand :",IDC_STATIC,15,235,65,8 + LTEXT "",IDC_GI_TITLEGE,15,250,150,35 + LTEXT "Titre italien :",IDC_STATIC,15,290,65,8 + LTEXT "",IDC_GI_TITLEIT,15,305,145,35 + LTEXT "Titre espagnol :",IDC_STATIC,15,345,65,8 + LTEXT "",IDC_GI_TITLESP,15,360,150,35 + CONTROL "1",IDC_GI_ICON,"GInfo_IconBox",0x0,10,15,35,30,WS_EX_TRANSPARENT +END + +IDD_INPUTCONFIG DIALOGEX 0, 0, 339, 148 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Control Config" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "WOG!",IDC_UP,"InputCustom",WS_TABSTOP,52,15,71,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_LEFT,"InputCustom",WS_TABSTOP,52,29,71,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_DOWN,"InputCustom",WS_TABSTOP,52,42,71,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_RIGHT,"InputCustom",WS_TABSTOP,52,55,71,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_B,"InputCustom",WS_TABSTOP,52,68,71,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_A,"InputCustom",WS_TABSTOP,52,81,71,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_Y,"InputCustom",WS_TABSTOP,52,94,71,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_X,"InputCustom",WS_TABSTOP,52,107,71,12,WS_EX_CLIENTEDGE + CONTROL " ",IDC_START,"InputCustom",WS_TABSTOP,163,15,71,12,WS_EX_CLIENTEDGE + CONTROL " ",IDC_SELECT,"InputCustom",WS_TABSTOP,163,29,71,12,WS_EX_CLIENTEDGE + CONTROL " ",IDC_L,"InputCustom",WS_TABSTOP,163,42,71,12,WS_EX_CLIENTEDGE + CONTROL " ",IDC_R,"InputCustom",WS_TABSTOP,163,55,71,12,WS_EX_CLIENTEDGE + CONTROL " ",IDC_UPLEFT,"InputCustom",WS_DISABLED | WS_TABSTOP,163,68,71,12,WS_EX_CLIENTEDGE + CONTROL " ",IDC_UPRIGHT,"InputCustom",WS_DISABLED | WS_TABSTOP,163,81,71,12,WS_EX_CLIENTEDGE + CONTROL " ",IDC_DWNRIGHT,"InputCustom",WS_DISABLED | WS_TABSTOP,163,94,71,12,WS_EX_CLIENTEDGE + CONTROL " ",IDC_DWNLEFT,"InputCustom",WS_DISABLED | WS_TABSTOP,163,107,71,12,WS_EX_CLIENTEDGE + PUSHBUTTON "Cancel",IDCANCEL,293,119,39,14 + PUSHBUTTON "OK",IDOK,245,119,41,14 + LTEXT "Blue means the button is already mapped.\nPink means it conflicts with a custom hotkey.\nRed means it's reserved by Windows.\nButtons can be disabled using Escape.\nGrayed buttons arent supported yet (sorry!)",IDC_LABEL_BLUE,246,10,80,88 + RTEXT "UP",IDC_LABEL_UP,10,18,38,8 + RTEXT "RIGHT",IDC_LABEL_RIGHT,8,58,41,8 + RTEXT "LEFT",IDC_LABEL_LEFT,11,31,37,8 + RTEXT "DOWN",IDC_LABEL_DOWN,10,45,39,8 + RTEXT "A",IDC_LABEL_A,10,83,38,8 + RTEXT "X",IDC_LABEL_X,8,109,39,8 + RTEXT "B",IDC_LABEL_B,11,71,37,8 + RTEXT "Y",IDC_LABEL_Y,8,97,40,8 + RTEXT "L",IDC_LABEL_L,136,44,24,8 + RTEXT "START",IDC_LABEL_START,136,18,24,8 + RTEXT "R",IDC_LABEL_R,136,57,24,8 + RTEXT "SELECT",IDC_LABEL_SELECT,132,31,28,8 + RTEXT "UP LEFT",IDC_LABEL_UPLEFT,130,71,30,8 + RTEXT "DN RIGHT",IDC_LABEL_DOWNRIGHT,124,97,36,8 + RTEXT "UP RIGHT",IDC_LABEL_UPRIGHT,124,84,36,8 + RTEXT "DN LEFT",IDC_LABEL_DOWNLEFT,129,109,31,8 + CONTROL "Allow Left+Rt/Up+Dn",IDC_ALLOWLEFTRIGHT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,245,102,87,11 + GROUPBOX "Buttons",IDC_STATIC,7,7,234,129,0,WS_EX_TRANSPARENT + CONTROL "",IDC_LID,"InputCustom",WS_TABSTOP,52,120,71,12,WS_EX_CLIENTEDGE + RTEXT "LID",IDC_LABEL_X2,8,121,39,8 + RTEXT "DEBUG",IDC_LABEL_X3,127,123,29,8 + CONTROL " ",IDC_DEBUG,"InputCustom",WS_DISABLED | WS_TABSTOP,163,120,71,12,WS_EX_CLIENTEDGE +END + +IDD_IO_REG DIALOGEX 0, 0, 150, 200 +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION +CAPTION "IO registre" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + LTEXT "Int Handler :",IDC_STATIC,5,13,41,8 + LTEXT "",IDC_INTHAND9,60,14,80,8 + LTEXT "IE :",IDC_STATIC,5,21,41,8 + LTEXT "",IDC_IE9,60,22,80,8 + LTEXT "IF :",IDC_STATIC,5,29,41,8 + LTEXT "",IDC_IF9,60,29,79,8 + LTEXT "IME :",IDC_STATIC,5,36,41,8 + LTEXT "",IDC_IME9,60,36,79,8 + LTEXT "DISPA_CNT :",IDC_STATIC,5,44,48,8 + LTEXT "",IDC_DISPCNTA9,60,44,83,8 + LTEXT "DISPA_STAT :",IDC_STATIC,5,52,49,8 + LTEXT "",IDC_DISPSTATA9,60,52,79,8 + LTEXT "DISPB_CNT :",IDC_STATIC,5,60,48,8 + LTEXT "",IDC_DISPCNTB9,60,60,83,8 + LTEXT "DISPB_STAT :",IDC_STATIC,5,68,49,8 + LTEXT "",IDC_DISPSTATB9,60,68,79,8 + LTEXT "IPCSYNC :",IDC_STATIC,5,76,41,8 + LTEXT "",IDC_IPCSYNC9,60,76,78,8 + LTEXT "IPCFIFO :",IDC_STATIC,5,84,41,8 + LTEXT "",IDC_IPCFIFO9,60,85,79,8 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,32,163,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,87,164,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,99,164,11,14 + LTEXT "frames",IDC_STATIC,111,167,16,8 + PUSHBUTTON "&Luk",IDC_FERMER,50,183,50,14 + GROUPBOX "ARM9",IDC_STATIC,4,4,142,98 + LTEXT "GXSTAT :",IDC_STATIC,5,92,41,8 + LTEXT "",IDC_GXSTAT9,60,93,79,8 + LTEXT "IE :",IDC_STATIC,5,114,41,8 + LTEXT "",IDC_IE7,60,114,80,8 + LTEXT "IF :",IDC_STATIC,5,122,41,8 + LTEXT "",IDC_IF7,60,122,79,8 + LTEXT "IME :",IDC_STATIC,5,130,41,8 + LTEXT "",IDC_IME7,60,130,79,8 + GROUPBOX "ARM7",IDC_STATIC,3,104,142,53 + LTEXT "IPCSYNC :",IDC_STATIC,5,138,41,8 + LTEXT "",IDC_IPCSYNC7,60,138,78,8 + LTEXT "IPCFIFO :",IDC_STATIC,5,146,41,8 + LTEXT "",IDC_IPCFIFO7,60,147,79,8 +END + +IDD_KEYCUSTOM DIALOGEX 0, 0, 382, 180 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION +CAPTION "Customize Special Keys" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + PUSHBUTTON "OK",IDOK,16,159,50,14 + PUSHBUTTON "Cancel",IDCANCEL,66,159,50,14 + RTEXT "Item #01",IDC_LABEL_HK1,2,7,80,8 + RTEXT "Item #02",IDC_LABEL_HK2,2,20,80,8 + RTEXT "Item #03",IDC_LABEL_HK3,2,33,80,8 + RTEXT "Item #04",IDC_LABEL_HK4,2,47,80,8 + RTEXT "Item #05",IDC_LABEL_HK5,2,60,80,8 + RTEXT "Item #06",IDC_LABEL_HK6,2,72,80,8 + RTEXT "Item #07",IDC_LABEL_HK7,2,85,80,8 + RTEXT "Item #08",IDC_LABEL_HK8,2,98,80,8 + RTEXT "Item #09",IDC_LABEL_HK9,2,111,80,8 + RTEXT "Item #10",IDC_LABEL_HK10,2,124,80,8 + RTEXT "Item #11",IDC_LABEL_HK11,192,7,80,8 + RTEXT "Item #12",IDC_LABEL_HK12,192,20,80,8 + RTEXT "Item #13",IDC_LABEL_HK13,192,33,80,8 + RTEXT "Item #14",IDC_LABEL_HK14,192,47,80,8 + RTEXT "Item #15",IDC_LABEL_HK15,192,60,80,8 + RTEXT "Item #16",IDC_LABEL_HK16,192,72,80,8 + RTEXT "Item #17",IDC_LABEL_HK17,192,85,80,8 + RTEXT "Item #18",IDC_LABEL_HK18,192,98,80,8 + RTEXT "Item #19",IDC_LABEL_HK19,192,111,80,8 + RTEXT "Item #20",IDC_LABEL_HK20,192,124,80,8 + CONTROL "",IDC_HOTKEY1,"InputCustomHot",WS_TABSTOP,86,5,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY2,"InputCustomHot",WS_TABSTOP,86,18,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY3,"InputCustomHot",WS_TABSTOP,86,31,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY4,"InputCustomHot",WS_TABSTOP,86,45,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY5,"InputCustomHot",WS_TABSTOP,86,58,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY6,"InputCustomHot",WS_TABSTOP,86,70,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY7,"InputCustomHot",WS_TABSTOP,86,83,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY8,"InputCustomHot",WS_TABSTOP,86,96,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY9,"InputCustomHot",WS_TABSTOP,86,109,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY10,"InputCustomHot",WS_TABSTOP,86,122,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY11,"InputCustomHot",WS_TABSTOP,276,5,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY12,"InputCustomHot",WS_TABSTOP,276,18,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY13,"InputCustomHot",WS_TABSTOP,276,31,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY14,"InputCustomHot",WS_TABSTOP,276,45,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY15,"InputCustomHot",WS_TABSTOP,276,58,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY16,"InputCustomHot",WS_TABSTOP,276,70,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY17,"InputCustomHot",WS_TABSTOP,276,83,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY18,"InputCustomHot",WS_TABSTOP,276,96,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY19,"InputCustomHot",WS_TABSTOP,276,109,98,12,WS_EX_CLIENTEDGE + CONTROL "",IDC_HOTKEY20,"InputCustomHot",WS_TABSTOP,276,122,98,12,WS_EX_CLIENTEDGE + LTEXT "Blue means the hotkey is already mapped.\nPink means it conflicts with a game button.\nRed means it's reserved by Windows.\nA hotkey can be disabled using Escape.",IDC_LABEL_BLUE,238,140,136,32 + COMBOBOX IDC_HKCOMBO,16,141,168,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_MAP DIALOGEX 0, 0, 485, 320 +STYLE DS_SETFONT | DS_CENTER | WS_CAPTION +CAPTION "MAP VIEW" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_BG_SELECT,4,4,90,14,CBS_DROPDOWN | WS_TABSTOP + LTEXT "Mode :",IDC_STATIC,4,20,45,8 + LTEXT "Palette :",IDC_STATIC,4,30,45,8 + LTEXT "Prio :",IDC_STATIC,4,40,45,8 + LTEXT "Char base :",IDC_STATIC,4,50,45,8 + LTEXT "Screen base :",IDC_STATIC,4,60,45,8 + LTEXT "Size :",IDC_STATIC,4,70,45,8 + LTEXT "Scroll :",IDC_STATIC,4,80,45,8 + LTEXT "",IDC_MODE,48,20,85,8 + LTEXT "",IDC_PAL,48,30,85,8 + LTEXT "",IDC_PRIO,48,40,85,8 + LTEXT "",IDC_CHAR,48,50,85,8 + LTEXT "",IDC_SCR,48,60,85,8 + LTEXT "",IDC_MSIZE,48,70,85,8 + LTEXT "",IDC_SCROLL,48,80,85,8 + PUSHBUTTON "&Fermer",IDC_FERMER,4,300,50,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,92,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,59,93,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,71,93,11,14 + LTEXT "frames",IDC_STATIC,83,96,16,8 +END + +IDD_OAM DIALOGEX 0, 0, 300, 200 +STYLE DS_SETFONT | WS_CAPTION | WS_SYSMENU +CAPTION "OAM Viewer" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_SCR_SELECT,4,4,90,14,CBS_DROPDOWNLIST | WS_TABSTOP + SCROLLBAR IDC_SCROLLER,48,20,20,14 + LTEXT "Mode :",IDC_STATIC,4,36,45,8 + LTEXT "Tile :",IDC_STATIC,4,46,45,8 + LTEXT "Palette :",IDC_STATIC,4,56,45,8 + LTEXT "Prio :",IDC_STATIC,4,66,45,8 + LTEXT "Coordonnées :",IDC_STATIC,4,76,45,8 + LTEXT "Dimensions :",IDC_STATIC,4,86,45,8 + LTEXT "Rotation :",IDC_STATIC,4,96,45,8 + LTEXT "Mosaic :",IDC_STATIC,4,106,45,8 + LTEXT "OAM : 0",IDC_OAMNUM,4,24,40,8 + LTEXT "",IDC_MODE,48,36,42,8 + LTEXT "",IDC_TILE,48,46,72,8 + LTEXT "",IDC_PAL,48,56,72,8 + LTEXT "",IDC_PRIO,48,66,72,8 + LTEXT "",IDC_COOR,48,76,42,8 + LTEXT "",IDC_DIM,48,86,42,8 + LTEXT "",IDC_ROT,48,96,42,8 + LTEXT "",IDC_MOS,48,106,42,8 + LTEXT "",IDC_PROP0,4,116,86,8 + LTEXT "",IDC_PROP1,4,126,86,8 + PUSHBUTTON "&Fermer",IDC_FERMER,50,180,50,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,161,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,59,162,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,71,161,11,14 + LTEXT "frames",IDC_STATIC,83,163,16,8 +END + +IDD_PAL DIALOGEX 0, 0, 120, 194 +STYLE DS_SETFONT | WS_CAPTION | WS_SYSMENU +CAPTION "PAL VIEW" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_PAL_SELECT,15,3,90,14,CBS_DROPDOWN | WS_TABSTOP + LTEXT "Pal : 0",IDC_PALNUM,3,21,25,8 + SCROLLBAR IDC_SCROLLER,30,18,20,14 + CONTROL "Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,18,75,14 + PUSHBUTTON "&Fermer",IDC_FERMER,35,169,50,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,150,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,68,151,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,80,151,11,14 + LTEXT "frames",IDC_STATIC,92,154,16,8 +END + +IDD_TILE DIALOGEX 0, 0, 446, 180 +STYLE DS_SETFONT | WS_CAPTION | WS_SYSMENU +CAPTION "TILE VIEW" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_PAL_SELECT,4,13,90,14,CBS_DROPDOWN | WS_TABSTOP + LTEXT "Pal : 0",IDC_PALNUM,4,31,25,8 + SCROLLBAR IDC_SCROLLER,30,28,20,14 + COMBOBOX IDC_MEM_SELECT,4,50,90,14,CBS_DROPDOWN | WS_TABSTOP + CONTROL "Bitmap",IDC_BITMAP,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,4,68,35,10 + CONTROL "256 couleurs",IDC_256COUL,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,4,80,55,10 + CONTROL "16 couleurs",IDC_16COUL,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,4,92,50,10 + CONTROL "Edit",IDC_Tile_BOX,"TileViewBox",WS_TABSTOP,100,2,344,160,WS_EX_CLIENTEDGE + CONTROL "Edit",IDC_MINI_TILE,"MiniTileViewBox",WS_TABSTOP,22,116,56,52,WS_EX_CLIENTEDGE + LTEXT "Tile num : 0",IDC_TILENUM,23,170,100,8 + PUSHBUTTON "&Fermer",IDC_FERMER,198,164,50,14 + CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,349,165,54,14 + EDITTEXT IDC_AUTO_UPDATE_SECS,404,165,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED + CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,416,164,11,14 + LTEXT "frames",IDC_STATIC,428,167,16,8 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MENU_PRINCIPAL MENU +BEGIN + POPUP "&Fichier" + BEGIN + MENUITEM "&Ouvrir ROM...", IDM_OPEN + MENUITEM "ROMs récentes", ID_FILE_RECENTROM + MENUITEM "&Info ROM", IDM_GAME_INFO + MENUITEM SEPARATOR + MENUITEM "Save State As...", IDM_STATE_SAVE + MENUITEM "Load State As...", IDM_STATE_LOAD + POPUP "Save State" + BEGIN + MENUITEM "1", IDM_STATE_SAVE_F1 + MENUITEM "2", IDM_STATE_SAVE_F2 + MENUITEM "3", IDM_STATE_SAVE_F3 + MENUITEM "4", IDM_STATE_SAVE_F4 + MENUITEM "5", IDM_STATE_SAVE_F5 + MENUITEM "6", IDM_STATE_SAVE_F6 + MENUITEM "7", IDM_STATE_SAVE_F7 + MENUITEM "8", IDM_STATE_SAVE_F8 + MENUITEM "9", IDM_STATE_SAVE_F9 + MENUITEM "10", IDM_STATE_SAVE_F10 + END + POPUP "Load State" + BEGIN + MENUITEM "1", IDM_STATE_LOAD_F1 + MENUITEM "2", IDM_STATE_LOAD_F2 + MENUITEM "3", IDM_STATE_LOAD_F3 + MENUITEM "4", IDM_STATE_LOAD_F4 + MENUITEM "5", IDM_STATE_LOAD_F5 + MENUITEM "6", IDM_STATE_LOAD_F6 + MENUITEM "7", IDM_STATE_LOAD_F7 + MENUITEM "8", IDM_STATE_LOAD_F8 + MENUITEM "9", IDM_STATE_LOAD_F9 + MENUITEM "10", IDM_STATE_LOAD_F10 + END + MENUITEM SEPARATOR + MENUITEM "Import Backup Memory", IDM_IMPORTBACKUPMEMORY + MENUITEM SEPARATOR + MENUITEM "Capture d'écr&an...", IDM_PRINTSCREEN + MENUITEM "Capture d'écran rapide", IDM_QUICK_PRINTSCREEN + MENUITEM SEPARATOR + MENUITEM "Enregistrer une vidéo", IDM_FILE_RECORDAVI + MENUITEM "Arrêter l'enregistrement", IDM_FILE_STOPAVI + MENUITEM SEPARATOR + MENUITEM "&Quitter\tAlt F4", IDM_QUIT + END + POPUP "&Emulation" + BEGIN + MENUITEM "&Pause", IDM_PAUSE + MENUITEM "&Reset", IDM_RESET + MENUITEM SEPARATOR + MENUITEM "&Clear Sound", IDM_SHUT_UP + MENUITEM "GBA &slot", IDM_GBASLOT + POPUP "&Cheats" + BEGIN + MENUITEM "&List", IDM_CHEATS_LIST, INACTIVE + MENUITEM "&Search", IDM_CHEATS_SEARCH, INACTIVE + END + END + POPUP "&View" + BEGIN + POPUP "&Rotation" + BEGIN + MENUITEM " 0", IDC_ROTATE0 + MENUITEM " 90", IDC_ROTATE90 + MENUITEM "180", IDC_ROTATE180 + MENUITEM "270", IDC_ROTATE270 + END + POPUP "Taille de la fenêtre" + BEGIN + MENUITEM "1x", IDC_WINDOW1X + MENUITEM "1.5x", IDC_WINDOW1_5X + MENUITEM "2x", IDC_WINDOW2X + MENUITEM "3x", IDC_WINDOW3X + MENUITEM "4x", IDC_WINDOW4X + END + POPUP "Séparation écrans" + BEGIN + MENUITEM "Aucune\t(0 px)", IDM_SCREENSEP_NONE + MENUITEM "Bordure fine\t(5 px)", IDM_SCREENSEP_BORDER + MENUITEM "DS\t(64 px)", IDM_SCREENSEP_NDSGAP + END + MENUITEM "Conserver le ratio", IDC_FORCERATIO + MENUITEM "Taille par défaut", IDM_DEFSIZE + MENUITEM SEPARATOR + MENUITEM "Compteur d'images", ID_VIEW_FRAMECOUNTER + MENUITEM "Framerate", ID_VIEW_DISPLAYFPS + MENUITEM "Display Input", ID_VIEW_DISPLAYINPUT + MENUITEM "Display Lag Counter", ID_VIEW_DISPLAYLAG + MENUITEM "Display Microphone", ID_VIEW_DISPLAYMICROPHONE + MENUITEM "HUD Editing Mode", ID_VIEW_HUDEDITOR + END + POPUP "&Config" + BEGIN + POPUP "Média de &sauvegarde" + BEGIN + MENUITEM "Autodetect", IDC_SAVETYPE1 + MENUITEM "EEPROM 4kbit", IDC_SAVETYPE2 + MENUITEM "EEPROM 64kbit", IDC_SAVETYPE3 + MENUITEM "EEPROM 512kbit", IDC_SAVETYPE4 + MENUITEM "FRAM 256kbit", IDC_SAVETYPE5 + MENUITEM "FLASH 2mbit", IDC_SAVETYPE6 + END + MENUITEM "Config. 3D", IDM_3DCONFIG + MENUITEM "Config. des contrôles", IDM_CONFIG + MENUITEM "Hotkey Config", IDM_HOTKEY_CONFIG + MENUITEM "Config. du son", IDM_SOUNDSETTINGS + MENUITEM "Config. wifi", IDM_WIFISETTINGS, GRAYED + MENUITEM "Config. du firmware", IDM_FIRMSETTINGS + MENUITEM "Config. d'émulation", IDM_EMULATIONSETTINGS + MENUITEM "Microphone Settings", IDM_MICROPHONESETTINGS + POPUP "&Frame Skip" + BEGIN + MENUITEM "Limit framerate", IDC_FRAMELIMIT + MENUITEM "Auto", IDC_FRAMESKIPAUTO + MENUITEM "0", IDC_FRAMESKIP0 + MENUITEM "1", IDC_FRAMESKIP1 + MENUITEM "2", IDC_FRAMESKIP2 + MENUITEM "3", IDC_FRAMESKIP3 + MENUITEM "4", IDC_FRAMESKIP4 + MENUITEM "5", IDC_FRAMESKIP5 + MENUITEM "6", IDC_FRAMESKIP6 + MENUITEM "7", IDC_FRAMESKIP7 + MENUITEM "8", IDC_FRAMESKIP8 + MENUITEM "9", IDC_FRAMESKIP9 + END + POPUP "&Langage" + BEGIN + MENUITEM "English", IDC_LANGENGLISH + MENUITEM "French", IDC_LANGFRENCH + MENUITEM "Danish", IDC_LANGDANISH + END + END + POPUP "&Outils" + BEGIN + MENUITEM "&Désassembleur", IDM_DISASSEMBLER + MENUITEM "Visualiser la &memoire", IDM_MEMORY + MENUITEM "Visualiser les ®istres", IDM_IOREG + MENUITEM "Visualiser les &palettes", IDM_PAL + MENUITEM "Visualiser les &tiles", IDM_TILE + MENUITEM "Visualiser les m&aps", IDM_MAP + MENUITEM "Visualiser les &oams", IDM_OAM + MENUITEM "Visualiser les matrices", IDM_MATRIX_VIEWER + MENUITEM "Visualiser les lights", IDM_LIGHT_VIEWER + MENUITEM SEPARATOR + POPUP "&Visualiser les &couches" + BEGIN + MENUITEM "Main BG 0", IDM_MBG0, CHECKED + MENUITEM "Main BG 1", IDM_MBG1, CHECKED + MENUITEM "Main BG 2", IDM_MBG2, CHECKED + MENUITEM "Main BG 3", IDM_MBG3, CHECKED + MENUITEM SEPARATOR + MENUITEM "Sub BG 0", IDM_SBG0, CHECKED + MENUITEM "Sub BG 1", IDM_SBG1, CHECKED + MENUITEM "Sub BG 2", IDM_SBG2, CHECKED + MENUITEM "Sub BG 3", IDM_SBG3, CHECKED + END + END + POPUP "?" + BEGIN + MENUITEM "Site &web", IDM_WEBSITE + MENUITEM "&Forums", IDM_FORUM + MENUITEM "&Soumettre un report de bug", IDM_SUBMITBUGREPORT + MENUITEM "A propos", IDM_ABOUT + END +END + +RECENTROMS MENU +BEGIN + POPUP "ROMs récentes" + BEGIN + MENUITEM "Aucune", 601, GRAYED + MENUITEM SEPARATOR + MENUITEM "Vider", 600, GRAYED + END +END + +#endif // French (France) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/src/windows/targetver.h b/src/windows/targetver.h new file mode 100644 index 000000000..f583181df --- /dev/null +++ b/src/windows/targetver.h @@ -0,0 +1,24 @@ +#pragma once + +// The following macros define the minimum required platform. The minimum required platform +// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run +// your application. The macros work by enabling all features available on platform versions up to and +// including the version specified. + +// Modify the following defines if you have to target a platform prior to the ones specified below. +// Refer to MSDN for the latest info on corresponding values for different platforms. +#ifndef WINVER // Specifies that the minimum required platform is Windows Vista. +#define WINVER 0x0600 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista. +#define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINDOWS // Specifies that the minimum required platform is Windows 98. +#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. +#endif + +#ifndef _WIN32_IE // Specifies that the minimum required platform is Internet Explorer 7.0. +#define _WIN32_IE 0x0700 // Change this to the appropriate value to target other versions of IE. +#endif