- many fixes in cheat system (core & winport);
winport: - added edit, remove & toggle on/off cheat in list;
This commit is contained in:
parent
2e51fcbf1f
commit
ab97b6c349
|
@ -2,7 +2,6 @@
|
|||
yopyop156@ifrance.com
|
||||
yopyop156.ifrance.com
|
||||
|
||||
Copyright 2009 CrazyMax
|
||||
Copyright 2009 DeSmuME team
|
||||
|
||||
This file is part of DeSmuME
|
||||
|
@ -37,10 +36,6 @@ static u32 cheatsCurrentGet = 0;
|
|||
static u8 *cheatsStack = NULL;
|
||||
static u16 cheatsNumStack = 0;
|
||||
|
||||
#ifndef WIN32
|
||||
#define sscanf_s sscanf
|
||||
#endif
|
||||
|
||||
static void cheatsClear()
|
||||
{
|
||||
memset(cheats, 0, sizeof(cheats));
|
||||
|
@ -61,10 +56,9 @@ void cheatsInit(char *path)
|
|||
cheatsLoad();
|
||||
}
|
||||
|
||||
BOOL cheatsAdd(u8 proc, u8 size, u32 address, u32 val, char *description, BOOL enabled)
|
||||
BOOL cheatsAdd(u8 size, u32 address, u32 val, char *description, BOOL enabled)
|
||||
{
|
||||
if (cheatsNum == MAX_CHEAT_LIST) return FALSE;
|
||||
cheats[cheatsNum].proc = proc;
|
||||
cheats[cheatsNum].hi[0] = address & 0x00FFFFFF;
|
||||
cheats[cheatsNum].lo[0] = val;
|
||||
cheats[cheatsNum].num = 1;
|
||||
|
@ -76,6 +70,19 @@ BOOL cheatsAdd(u8 proc, u8 size, u32 address, u32 val, char *description, BOOL e
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL cheatsUpdate(u8 size, u32 address, u32 val, char *description, BOOL enabled, u32 pos)
|
||||
{
|
||||
if (pos > cheatsNum) return FALSE;
|
||||
cheats[pos].hi[0] = address & 0x00FFFFFF;
|
||||
cheats[pos].lo[0] = val;
|
||||
cheats[pos].num = 1;
|
||||
cheats[pos].type = 0;
|
||||
cheats[pos].size = size;
|
||||
strcpy(cheats[pos].description, description);
|
||||
cheats[pos].enabled = enabled;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL cheatsAdd_AR(char *code, char *description, BOOL enabled)
|
||||
{
|
||||
return FALSE;
|
||||
|
@ -89,10 +96,13 @@ BOOL cheatsAdd_CB(char *code, char *description, BOOL enabled)
|
|||
BOOL cheatsRemove(u32 pos)
|
||||
{
|
||||
if (pos > cheatsNum) return FALSE;
|
||||
if (cheatsNum == 0) return FALSE;
|
||||
|
||||
for (int i = pos; i < cheatsNum; i++)
|
||||
memcpy(&cheats[i], &cheats[i+1], sizeof(CHEATS_LIST));
|
||||
|
||||
if (cheatsNum == 0) return FALSE;
|
||||
memset(&cheats[cheatsNum], 0, sizeof(CHEATS_LIST));
|
||||
|
||||
cheatsNum--;
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -119,6 +129,18 @@ BOOL cheatsGetList(CHEATS_LIST *cheat)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL cheatsGet(CHEATS_LIST *cheat, u32 pos)
|
||||
{
|
||||
if (pos > cheatsNum) return FALSE;
|
||||
memcpy(cheat, &cheats[pos], sizeof(CHEATS_LIST));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u32 cheatsGetSize()
|
||||
{
|
||||
return cheatsNum;
|
||||
}
|
||||
|
||||
BOOL cheatsSave()
|
||||
{
|
||||
FILE *fcheat = fopen((char *)cheatFilename, "w");
|
||||
|
@ -126,13 +148,12 @@ BOOL cheatsSave()
|
|||
if (fcheat)
|
||||
{
|
||||
fprintf(fcheat, "; DeSmuME cheat file. VERSION %i.%03i\n", CHEAT_VERSION_MAJOR, CHEAT_VERSION_MINOR);
|
||||
fputs("\n", fcheat);
|
||||
fprintf(fcheat, "Name=%s\n", ROMserial);
|
||||
fputs("\n; cheats list\n", fcheat);
|
||||
fputs("; cheats list\n", fcheat);
|
||||
for (int i = 0; i < cheatsNum; i++)
|
||||
{
|
||||
fprintf(fcheat, "Desc=%s\n", cheats[i].description);
|
||||
fprintf(fcheat, "Info=%i,%i,%i,%i,%i\n", cheats[i].type, cheats[i].num, cheats[i].enabled, cheats[i].proc, cheats[i].size);
|
||||
fprintf(fcheat, "Info=%i,%i,%i,%i\n", cheats[i].type, cheats[i].num, cheats[i].enabled, cheats[i].size);
|
||||
|
||||
if (cheats[i].num > 0)
|
||||
{
|
||||
|
@ -190,9 +211,7 @@ BOOL cheatsLoad()
|
|||
if (buf[8]!=',') continue; // error
|
||||
cheats[last].enabled=atoi(&buf[9]);
|
||||
if (buf[10]!=',') continue; // error
|
||||
cheats[last].proc=atoi(&buf[11]);
|
||||
if (buf[12]!=',') continue; // error
|
||||
cheats[last].size=atoi(&buf[13]);
|
||||
cheats[last].size=atoi(&buf[11]);
|
||||
fgets(buf, 1024, fcheat);
|
||||
if ( (buf[0] == 'D') &&
|
||||
(buf[1] == 'a') &&
|
||||
|
@ -225,7 +244,7 @@ BOOL cheatsLoad()
|
|||
}
|
||||
fclose(fcheat);
|
||||
|
||||
INFO("Loaded %i cheats\n", last);
|
||||
//INFO("Loaded %i cheats\n", last);
|
||||
cheatsNum = last;
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -271,17 +290,17 @@ void cheatsProcess()
|
|||
//INFO("cheat at 0x02|%06X value %i (size %i)\n",cheats[i].hi[0], cheats[i].lo[0], cheats[i].size);
|
||||
switch (cheats[i].size)
|
||||
{
|
||||
case 0: T1WriteByte(MMU.MMU_MEM[cheats[i].proc][0x20], cheats[i].hi[0], cheats[i].lo[0]); break;
|
||||
case 1: T1WriteWord(MMU.MMU_MEM[cheats[i].proc][0x20], cheats[i].hi[0], cheats[i].lo[0]); break;
|
||||
case 0: T1WriteByte(MMU.MMU_MEM[ARMCPU_ARM9][0x20], cheats[i].hi[0], cheats[i].lo[0]); break;
|
||||
case 1: T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM9][0x20], cheats[i].hi[0], cheats[i].lo[0]); break;
|
||||
case 2:
|
||||
{
|
||||
u32 tmp = T1ReadLong(MMU.MMU_MEM[cheats[i].proc][0x20], cheats[i].hi[0]);
|
||||
u32 tmp = T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], cheats[i].hi[0]);
|
||||
tmp &= 0xFF000000;
|
||||
tmp |= (cheats[i].lo[0] & 0x00FFFFFF);
|
||||
T1WriteLong(MMU.MMU_MEM[cheats[i].proc][0x20], cheats[i].hi[0], tmp);
|
||||
T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], cheats[i].hi[0], tmp);
|
||||
break;
|
||||
}
|
||||
case 3: T1WriteLong(MMU.MMU_MEM[cheats[i].proc][0x20], cheats[i].hi[0], cheats[i].lo[0]); break;
|
||||
case 3: T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], cheats[i].hi[0], cheats[i].lo[0]); break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -295,13 +314,10 @@ void cheatsProcess()
|
|||
}
|
||||
|
||||
// ========================================== search
|
||||
u8 *searchStatMemARM9 = NULL;
|
||||
u8 *searchStatMemARM7 = NULL;
|
||||
u8 *searchMemARM9 = NULL;
|
||||
u8 *searchMemARM7 = NULL;
|
||||
u8 *searchStatMem = NULL;
|
||||
u8 *searchMem = NULL;
|
||||
u32 searchNumber = 0;
|
||||
u32 searchLastRecord = 0;
|
||||
u32 searchLastRecordProc = 0;
|
||||
|
||||
u32 searchType = 0;
|
||||
u32 searchSize = 0;
|
||||
|
@ -309,23 +325,17 @@ u32 searchSign = 0;
|
|||
|
||||
void cheatsSearchInit(u8 type, u8 size, u8 sign)
|
||||
{
|
||||
if (searchStatMemARM9) return;
|
||||
if (searchStatMemARM7) return;
|
||||
if (searchMemARM9) return;
|
||||
if (searchMemARM7) return;
|
||||
if (searchStatMem) return;
|
||||
if (searchMem) return;
|
||||
|
||||
searchStatMemARM9 = new u8 [ ( 4 * 1024 * 1024 ) / 8 ];
|
||||
searchStatMemARM7 = new u8 [ ( 4 * 1024 * 1024 ) / 8 ];
|
||||
searchStatMem = new u8 [ ( 4 * 1024 * 1024 ) / 8 ];
|
||||
|
||||
memset(searchStatMemARM9, 0xFF, ( 4 * 1024 * 1024 ) / 8);
|
||||
memset(searchStatMemARM7, 0xFF, ( 4 * 1024 * 1024 ) / 8);
|
||||
memset(searchStatMem, 0xFF, ( 4 * 1024 * 1024 ) / 8);
|
||||
|
||||
if (type == 1) // comparative search type (need 8Mb RAM !!! (4+4))
|
||||
{
|
||||
searchMemARM9 = new u8 [ ( 4 * 1024 * 1024 ) ];
|
||||
searchMemARM7 = new u8 [ ( 4 * 1024 * 1024 ) ];
|
||||
memcpy(searchMemARM9, MMU.MMU_MEM[0][0x20], ( 4 * 1024 * 1024 ) );
|
||||
memcpy(searchMemARM7, MMU.MMU_MEM[1][0x20], ( 4 * 1024 * 1024 ) );
|
||||
searchMem = new u8 [ ( 4 * 1024 * 1024 ) ];
|
||||
memcpy(searchMem, MMU.MMU_MEM[0][0x20], ( 4 * 1024 * 1024 ) );
|
||||
}
|
||||
|
||||
searchType = type;
|
||||
|
@ -333,110 +343,98 @@ void cheatsSearchInit(u8 type, u8 size, u8 sign)
|
|||
searchSign = sign;
|
||||
searchNumber = 0;
|
||||
searchLastRecord = 0;
|
||||
searchLastRecordProc = 0;
|
||||
|
||||
//INFO("Cheat search system is inited (type %s)\n", type?"comparative":"exact");
|
||||
}
|
||||
|
||||
void cheatsSearchClose()
|
||||
{
|
||||
if (searchStatMemARM9) delete [] searchStatMemARM9;
|
||||
if (searchStatMemARM7) delete [] searchStatMemARM7;
|
||||
searchStatMemARM9 = NULL;
|
||||
searchStatMemARM7 = NULL;
|
||||
if (searchStatMem) delete [] searchStatMem;
|
||||
searchStatMem = NULL;
|
||||
|
||||
if (searchMemARM9) delete [] searchMemARM9;
|
||||
if (searchMemARM7) delete [] searchMemARM7;
|
||||
searchMemARM9 = NULL;
|
||||
searchMemARM7 = NULL;
|
||||
if (searchMem) delete [] searchMem;
|
||||
searchMem = NULL;
|
||||
searchNumber = 0;
|
||||
searchLastRecord = 0;
|
||||
searchLastRecordProc = 0;
|
||||
//INFO("Cheat search system is closed\n");
|
||||
}
|
||||
|
||||
u32 cheatsSearchValue(u32 val)
|
||||
{
|
||||
u8 *stat[2] = {searchStatMemARM9, searchStatMemARM7};
|
||||
|
||||
searchNumber = 0;
|
||||
|
||||
switch (searchSize)
|
||||
{
|
||||
case 0: // 1 byte
|
||||
for (u32 t = 0; t < 2; t++)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i++)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i++)
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (searchStatMem[addr] & (1<<offs))
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (stat[t][addr] & (1<<offs))
|
||||
if ( T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) == val )
|
||||
{
|
||||
if ( T1ReadByte(MMU.MMU_MEM[t][0x20], i) == val )
|
||||
{
|
||||
stat[t][addr] |= (1<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
stat[t][addr] &= ~(1<<offs);
|
||||
searchStatMem[addr] |= (1<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
searchStatMem[addr] &= ~(1<<offs);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 1: // 2 bytes
|
||||
for (u32 t = 0; t < 2; t++)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i+=2)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i+=2)
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (searchStatMem[addr] & (3<<offs))
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (stat[t][addr] & (3<<offs))
|
||||
if ( T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) == val )
|
||||
{
|
||||
if ( T1ReadWord(MMU.MMU_MEM[t][0x20], i) == val )
|
||||
{
|
||||
stat[t][addr] |= (3<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
stat[t][addr] &= ~(3<<offs);
|
||||
searchStatMem[addr] |= (3<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
searchStatMem[addr] &= ~(3<<offs);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: // 3 bytes
|
||||
for (u32 t = 0; t < 2; t++)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i+=3)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i+=3)
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (searchStatMem[addr] & (0x7<<offs))
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (stat[t][addr] & (0x7<<offs))
|
||||
if ( (T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) & 0x00FFFFFF) == val )
|
||||
{
|
||||
if ( (T1ReadLong(MMU.MMU_MEM[t][0x20], i) & 0x00FFFFFF) == val )
|
||||
{
|
||||
stat[t][addr] |= (0x7<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
stat[t][addr] &= ~(0x7<<offs);
|
||||
searchStatMem[addr] |= (0x7<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
searchStatMem[addr] &= ~(0x7<<offs);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 3: // 4 bytes
|
||||
for (u32 t = 0; t < 2; t++)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i+=4)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i+=4)
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (searchStatMem[addr] & (0xF<<offs))
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (stat[t][addr] & (0xF<<offs))
|
||||
if ( T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) == val )
|
||||
{
|
||||
if ( T1ReadLong(MMU.MMU_MEM[t][0x20], i) == val )
|
||||
{
|
||||
stat[t][addr] |= (0xF<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
stat[t][addr] &= ~(0xF<<offs);
|
||||
searchStatMem[addr] |= (0xF<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
searchStatMem[addr] &= ~(0xF<<offs);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -445,8 +443,6 @@ u32 cheatsSearchValue(u32 val)
|
|||
|
||||
u32 cheatsSearchComp(u8 comp)
|
||||
{
|
||||
u8 *mem[2] = {searchMemARM9, searchMemARM7};
|
||||
u8 *stat[2] = {searchStatMemARM9, searchStatMemARM7};
|
||||
BOOL res = FALSE;
|
||||
|
||||
searchNumber = 0;
|
||||
|
@ -454,116 +450,111 @@ u32 cheatsSearchComp(u8 comp)
|
|||
switch (searchSize)
|
||||
{
|
||||
case 0: // 1 byte
|
||||
for (u32 t = 0; t < 2; t++)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i++)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i++)
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (searchStatMem[addr] & (1<<offs))
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (stat[t][addr] & (1<<offs))
|
||||
switch (comp)
|
||||
{
|
||||
switch (comp)
|
||||
{
|
||||
case 0: res=(T1ReadByte(MMU.MMU_MEM[t][0x20], i) > T1ReadByte(mem[t], i)); break;
|
||||
case 1: res=(T1ReadByte(MMU.MMU_MEM[t][0x20], i) < T1ReadByte(mem[t], i)); break;
|
||||
case 2: res=(T1ReadByte(MMU.MMU_MEM[t][0x20], i) == T1ReadByte(mem[t], i)); break;
|
||||
case 3: res=(T1ReadByte(MMU.MMU_MEM[t][0x20], i) != T1ReadByte(mem[t], i)); break;
|
||||
default: res = FALSE; break;
|
||||
}
|
||||
if ( res )
|
||||
{
|
||||
stat[t][addr] |= (1<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
stat[t][addr] &= ~(1<<offs);
|
||||
case 0: res=(T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) > T1ReadByte(searchMem, i)); break;
|
||||
case 1: res=(T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) < T1ReadByte(searchMem, i)); break;
|
||||
case 2: res=(T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) == T1ReadByte(searchMem, i)); break;
|
||||
case 3: res=(T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) != T1ReadByte(searchMem, i)); break;
|
||||
default: res = FALSE; break;
|
||||
}
|
||||
if ( res )
|
||||
{
|
||||
searchStatMem[addr] |= (1<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
searchStatMem[addr] &= ~(1<<offs);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 1: // 2 bytes
|
||||
for (u32 t = 0; t < 2; t++)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i+=2)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i+=2)
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (searchStatMem[addr] & (3<<offs))
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (stat[t][addr] & (3<<offs))
|
||||
switch (comp)
|
||||
{
|
||||
switch (comp)
|
||||
{
|
||||
case 0: res=(T1ReadWord(MMU.MMU_MEM[t][0x20], i) > T1ReadWord(mem[t], i)); break;
|
||||
case 1: res=(T1ReadWord(MMU.MMU_MEM[t][0x20], i) < T1ReadWord(mem[t], i)); break;
|
||||
case 2: res=(T1ReadWord(MMU.MMU_MEM[t][0x20], i) == T1ReadWord(mem[t], i)); break;
|
||||
case 3: res=(T1ReadWord(MMU.MMU_MEM[t][0x20], i) != T1ReadWord(mem[t], i)); break;
|
||||
default: res = FALSE; break;
|
||||
}
|
||||
if ( res )
|
||||
{
|
||||
stat[t][addr] |= (3<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
stat[t][addr] &= ~(3<<offs);
|
||||
case 0: res=(T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) > T1ReadWord(searchMem, i)); break;
|
||||
case 1: res=(T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) < T1ReadWord(searchMem, i)); break;
|
||||
case 2: res=(T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) == T1ReadWord(searchMem, i)); break;
|
||||
case 3: res=(T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) != T1ReadWord(searchMem, i)); break;
|
||||
default: res = FALSE; break;
|
||||
}
|
||||
if ( res )
|
||||
{
|
||||
searchStatMem[addr] |= (3<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
searchStatMem[addr] &= ~(3<<offs);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: // 3 bytes
|
||||
for (u32 t = 0; t < 2; t++)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i+=3)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i+=3)
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (searchStatMem[addr] & (7<<offs))
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (stat[t][addr] & (7<<offs))
|
||||
switch (comp)
|
||||
{
|
||||
switch (comp)
|
||||
{
|
||||
case 0: res=((T1ReadLong(MMU.MMU_MEM[t][0x20], i) & 0x00FFFFFF) > (T1ReadLong(mem[t], i) & 0x00FFFFFF) ); break;
|
||||
case 1: res=((T1ReadLong(MMU.MMU_MEM[t][0x20], i) & 0x00FFFFFF) < (T1ReadLong(mem[t], i) & 0x00FFFFFF) ); break;
|
||||
case 2: res=((T1ReadLong(MMU.MMU_MEM[t][0x20], i) & 0x00FFFFFF) == (T1ReadLong(mem[t], i) & 0x00FFFFFF) ); break;
|
||||
case 3: res=((T1ReadLong(MMU.MMU_MEM[t][0x20], i) & 0x00FFFFFF) != (T1ReadLong(mem[t], i) & 0x00FFFFFF) ); break;
|
||||
default: res = FALSE; break;
|
||||
}
|
||||
if ( res )
|
||||
{
|
||||
stat[t][addr] |= (7<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
stat[t][addr] &= ~(7<<offs);
|
||||
case 0: res=((T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) & 0x00FFFFFF) > (T1ReadLong(searchMem, i) & 0x00FFFFFF) ); break;
|
||||
case 1: res=((T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) & 0x00FFFFFF) < (T1ReadLong(searchMem, i) & 0x00FFFFFF) ); break;
|
||||
case 2: res=((T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) & 0x00FFFFFF) == (T1ReadLong(searchMem, i) & 0x00FFFFFF) ); break;
|
||||
case 3: res=((T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) & 0x00FFFFFF) != (T1ReadLong(searchMem, i) & 0x00FFFFFF) ); break;
|
||||
default: res = FALSE; break;
|
||||
}
|
||||
if ( res )
|
||||
{
|
||||
searchStatMem[addr] |= (7<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
searchStatMem[addr] &= ~(7<<offs);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 3: // 4 bytes
|
||||
for (u32 t = 0; t < 2; t++)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i+=4)
|
||||
for (u32 i = 0; i < (4 * 1024 * 1024); i+=4)
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (searchStatMem[addr] & (0xF<<offs))
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (stat[t][addr] & (0xF<<offs))
|
||||
switch (comp)
|
||||
{
|
||||
switch (comp)
|
||||
{
|
||||
case 0: res=(T1ReadLong(MMU.MMU_MEM[t][0x20], i) > T1ReadLong(mem[t], i)); break;
|
||||
case 1: res=(T1ReadLong(MMU.MMU_MEM[t][0x20], i) < T1ReadLong(mem[t], i)); break;
|
||||
case 2: res=(T1ReadLong(MMU.MMU_MEM[t][0x20], i) == T1ReadLong(mem[t], i)); break;
|
||||
case 3: res=(T1ReadLong(MMU.MMU_MEM[t][0x20], i) != T1ReadLong(mem[t], i)); break;
|
||||
default: res = FALSE; break;
|
||||
}
|
||||
if ( res )
|
||||
{
|
||||
stat[t][addr] |= (0xF<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
stat[t][addr] &= ~(0xF<<offs);
|
||||
case 0: res=(T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) > T1ReadLong(searchMem, i)); break;
|
||||
case 1: res=(T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) < T1ReadLong(searchMem, i)); break;
|
||||
case 2: res=(T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) == T1ReadLong(searchMem, i)); break;
|
||||
case 3: res=(T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) != T1ReadLong(searchMem, i)); break;
|
||||
default: res = FALSE; break;
|
||||
}
|
||||
if ( res )
|
||||
{
|
||||
searchStatMem[addr] |= (0xF<<offs);
|
||||
searchNumber++;
|
||||
continue;
|
||||
}
|
||||
searchStatMem[addr] &= ~(0xF<<offs);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
memcpy(searchMemARM9, MMU.MMU_MEM[0][0x20], ( 4 * 1024 * 1024 ) );
|
||||
memcpy(searchMemARM7, MMU.MMU_MEM[1][0x20], ( 4 * 1024 * 1024 ) );
|
||||
memcpy(searchMem, MMU.MMU_MEM[0][0x20], ( 4 * 1024 * 1024 ) );
|
||||
|
||||
return (searchNumber);
|
||||
}
|
||||
|
@ -573,41 +564,32 @@ u32 cheatSearchNumber()
|
|||
return (searchNumber);
|
||||
}
|
||||
|
||||
BOOL cheatSearchGetList(u8 *proc, u32 *address, u32 *curVal)
|
||||
BOOL cheatSearchGetList(u32 *address, u32 *curVal)
|
||||
{
|
||||
u8 *stat[2] = {searchStatMemARM9, searchStatMemARM7};
|
||||
|
||||
for (u32 t = searchLastRecordProc; t < 2; t++)
|
||||
for (u32 i = searchLastRecord; i < (4 * 1024 * 1024); i++)
|
||||
{
|
||||
for (u32 i = searchLastRecord; i < (4 * 1024 * 1024); i++)
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (searchStatMem[addr] & (1<<offs))
|
||||
{
|
||||
u32 addr = (i >> 3);
|
||||
u32 offs = (i % 8);
|
||||
if (stat[t][addr] & (1<<offs))
|
||||
*address = i;
|
||||
searchLastRecord = i+1;
|
||||
|
||||
switch (searchSize)
|
||||
{
|
||||
*proc = t;
|
||||
*address = i;
|
||||
searchLastRecord = i+1;
|
||||
|
||||
switch (searchSize)
|
||||
{
|
||||
case 0: *curVal=(u32)T1ReadByte(MMU.MMU_MEM[t][0x20], i); return TRUE;
|
||||
case 1: *curVal=(u32)T1ReadWord(MMU.MMU_MEM[t][0x20], i); return TRUE;
|
||||
case 2: *curVal=(u32)T1ReadLong(MMU.MMU_MEM[t][0x20], i) & 0x00FFFFFF; return TRUE;
|
||||
case 3: *curVal=(u32)T1ReadLong(MMU.MMU_MEM[t][0x20], i); return TRUE;
|
||||
default: return TRUE;
|
||||
}
|
||||
case 0: *curVal=(u32)T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i); return TRUE;
|
||||
case 1: *curVal=(u32)T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i); return TRUE;
|
||||
case 2: *curVal=(u32)T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i) & 0x00FFFFFF; return TRUE;
|
||||
case 3: *curVal=(u32)T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x20], i); return TRUE;
|
||||
default: return TRUE;
|
||||
}
|
||||
}
|
||||
searchLastRecordProc = t;
|
||||
}
|
||||
searchLastRecord = 0;
|
||||
searchLastRecordProc = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void cheatSearchGetListReset()
|
||||
{
|
||||
searchLastRecord = 0;
|
||||
searchLastRecordProc = 0;
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
yopyop156@ifrance.com
|
||||
yopyop156.ifrance.com
|
||||
|
||||
Copyright 2009 CrazyMax
|
||||
Copyright 2009 DeSmuME team
|
||||
|
||||
This file is part of DeSmuME
|
||||
|
@ -25,7 +24,7 @@
|
|||
#include "common.h"
|
||||
|
||||
#define CHEAT_VERSION_MAJOR 1
|
||||
#define CHEAT_VERSION_MINOR 2
|
||||
#define CHEAT_VERSION_MINOR 3
|
||||
#define MAX_CHEAT_LIST 100
|
||||
|
||||
typedef struct
|
||||
|
@ -34,7 +33,6 @@ typedef struct
|
|||
// 1 - Action Replay
|
||||
// 2 - Codebreakers
|
||||
BOOL enabled;
|
||||
u8 proc;
|
||||
u32 hi[255];
|
||||
u32 lo[255];
|
||||
char description[75];
|
||||
|
@ -44,12 +42,15 @@ typedef struct
|
|||
} CHEATS_LIST;
|
||||
|
||||
extern void cheatsInit(char *path);
|
||||
extern BOOL cheatsAdd(u8 proc, u8 size, u32 address, u32 val, char *description, BOOL enabled);
|
||||
extern BOOL cheatsAdd(u8 size, u32 address, u32 val, char *description, BOOL enabled);
|
||||
extern BOOL cheatsUpdate(u8 size, u32 address, u32 val, char *description, BOOL enabled, u32 pos);
|
||||
extern BOOL cheatsAdd_AR(char *code, char *description, BOOL enabled);
|
||||
extern BOOL cheatsAdd_CB(char *code, char *description, BOOL enabled);
|
||||
extern BOOL cheatsRemove(u32 pos);
|
||||
extern void cheatsGetListReset();
|
||||
extern BOOL cheatsGetList(CHEATS_LIST *cheat);
|
||||
extern BOOL cheatsGet(CHEATS_LIST *cheat, u32 pos);
|
||||
extern u32 cheatsGetSize();
|
||||
extern BOOL cheatsSave();
|
||||
extern BOOL cheatsLoad();
|
||||
extern BOOL cheatsPush();
|
||||
|
@ -63,5 +64,5 @@ extern void cheatsSearchClose();
|
|||
extern u32 cheatsSearchValue(u32 val);
|
||||
extern u32 cheatsSearchComp(u8 comp);
|
||||
extern u32 cheatSearchNumber();
|
||||
extern BOOL cheatSearchGetList(u8 *proc, u32 *address, u32 *curVal);
|
||||
extern BOOL cheatSearchGetList(u32 *address, u32 *curVal);
|
||||
extern void cheatSearchGetListReset();
|
||||
|
|
|
@ -58,22 +58,15 @@ extern u8 gba_header_data_0x04[156];
|
|||
extern void WritePrivateProfileInt(char* appname, char* keyname, int val, char* file);
|
||||
|
||||
#define EXPERIMENTAL_GBASLOT 1
|
||||
// this is experimental and only tested for windows port
|
||||
// (I can`t test on another ports)
|
||||
//
|
||||
// About GBA game in slot (only for use together with NDS + GBA):
|
||||
// in real BIOS 9 at offset 0x0020 placed compressed logo
|
||||
// for comparing with logo in header GBA cartridge.
|
||||
// so, GBA game in slot work now.
|
||||
// Later need make loading this table in BIOS memory (from gba_header_data_0x04)
|
||||
//
|
||||
// in windows ports:
|
||||
// i added in menu "Emulation" submenu "GBA slot"
|
||||
#else // non Windows
|
||||
|
||||
#define sscanf_s sscanf
|
||||
|
||||
#endif
|
||||
|
||||
extern u8 reverseBitsInByte(u8 x);
|
||||
extern void removeCR(char *buf);
|
||||
extern u32 strlen_ws(char *buf);
|
||||
extern u8 reverseBitsInByte(u8 x);
|
||||
extern void removeCR(char *buf);
|
||||
extern u32 strlen_ws(char *buf);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
yopyop156@ifrance.com
|
||||
yopyop156.ifrance.com
|
||||
|
||||
Copyright 2009 CrazyMax
|
||||
Copyright 2009 DeSmuME team
|
||||
|
||||
This file is part of DeSmuME
|
||||
|
@ -39,24 +38,22 @@ static HWND hBSearch = NULL;
|
|||
static u32 exactVal = 0;
|
||||
static u32 searchNumberResults = 0;
|
||||
|
||||
u8 searchAddProc = 0;
|
||||
u32 searchAddAddress = 0;
|
||||
u32 searchAddValue = 0;
|
||||
u8 searchAddMode = 0;
|
||||
u8 searchAddFreeze = 1;
|
||||
u8 searchAddSize = 0;
|
||||
static char editBuf[4][75] = { 0 };
|
||||
static u32 searchAddAddress = 0;
|
||||
static u32 searchAddValue = 0;
|
||||
static u8 searchAddMode = 0;
|
||||
static u8 searchAddFreeze = 1;
|
||||
static u8 searchAddSize = 0;
|
||||
static char editBuf[3][75] = { 0 };
|
||||
static u32 cheatEditPos = 0;
|
||||
|
||||
HWND searchWnd = NULL;
|
||||
HWND searchListView = NULL;
|
||||
HWND cheatListView = NULL;
|
||||
WNDPROC oldEditProc = NULL;
|
||||
WNDPROC oldEditProcHEX = NULL;
|
||||
static HWND searchWnd = NULL;
|
||||
static HWND searchListView = NULL;
|
||||
static HWND cheatListView = NULL;
|
||||
static WNDPROC oldEditProc = NULL;
|
||||
static WNDPROC oldEditProcHEX = NULL;
|
||||
|
||||
CHEATS_LIST tempCheat;
|
||||
|
||||
static char *NAME_CPUs[2] = { "ARM9", "ARM7" };
|
||||
|
||||
u32 searchIDDs[2][4] = {
|
||||
{ IDD_CHEAT_SEARCH_MAIN, IDD_CHEAT_SEARCH_EXACT, IDD_CHEAT_SEARCH_RESULT, NULL },
|
||||
{ IDD_CHEAT_SEARCH_MAIN, IDD_CHEAT_SEARCH_RESULT, IDD_CHEAT_SEARCH_COMP, IDD_CHEAT_SEARCH_RESULT}
|
||||
|
@ -184,25 +181,17 @@ BOOL CALLBACK CheatsAddProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
|||
wsprintf(buf, "%i", searchAddValue);
|
||||
SetWindowText(GetDlgItem(dialog, IDC_EDIT2), buf);
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
|
||||
if (searchAddProc)
|
||||
CheckDlgButton(dialog, IDC_RADIO9, BST_CHECKED);
|
||||
else
|
||||
CheckDlgButton(dialog, IDC_RADIO8, BST_CHECKED);
|
||||
EnableWindow(GetDlgItem(dialog, IDC_EDIT1), FALSE);
|
||||
EnableWindow(GetDlgItem(dialog, IDC_RADIO1), FALSE);
|
||||
EnableWindow(GetDlgItem(dialog, IDC_RADIO2), FALSE);
|
||||
EnableWindow(GetDlgItem(dialog, IDC_RADIO3), FALSE);
|
||||
EnableWindow(GetDlgItem(dialog, IDC_RADIO4), FALSE);
|
||||
EnableWindow(GetDlgItem(dialog, IDC_RADIO8), FALSE);
|
||||
EnableWindow(GetDlgItem(dialog, IDC_RADIO9), FALSE);
|
||||
ltoa(searchAddProc, editBuf[3], 10);
|
||||
strcpy(editBuf[3], "0");
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowText(GetDlgItem(dialog, IDC_EDIT2), "0");
|
||||
CheckDlgButton(dialog, IDC_RADIO1, BST_CHECKED);
|
||||
strcpy(editBuf[3], "0");
|
||||
}
|
||||
|
||||
memset(editBuf, 0, sizeof(editBuf));
|
||||
|
@ -214,6 +203,7 @@ BOOL CALLBACK CheatsAddProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
|||
CheckDlgButton(dialog, searchSizeIDDs[searchAddSize], BST_CHECKED);
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
case WM_COMMAND:
|
||||
{
|
||||
switch (LOWORD(wparam))
|
||||
|
@ -222,12 +212,12 @@ BOOL CALLBACK CheatsAddProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
|||
{
|
||||
u32 tmp_addr = 0;
|
||||
sscanf_s(editBuf[0], "%x", &tmp_addr);
|
||||
|
||||
oldEditProc = saveOldEditProc;
|
||||
if (cheatsAdd(atol(editBuf[3]), searchAddSize, tmp_addr, atol(editBuf[1]), editBuf[2], searchAddFreeze))
|
||||
|
||||
if (cheatsAdd(searchAddSize, tmp_addr, atol(editBuf[1]), editBuf[2], searchAddFreeze))
|
||||
{
|
||||
if (cheatsSave())
|
||||
if ((searchAddMode == 0) || (cheatsSave() && searchAddMode == 1))
|
||||
{
|
||||
oldEditProc = saveOldEditProc;
|
||||
searchAddAddress = tmp_addr;
|
||||
searchAddValue = atol(editBuf[1]);
|
||||
|
||||
|
@ -242,12 +232,12 @@ BOOL CALLBACK CheatsAddProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
|||
EndDialog(dialog, FALSE);
|
||||
return TRUE;
|
||||
|
||||
case IDC_EDIT1:
|
||||
case IDC_EDIT1: // address
|
||||
{
|
||||
if (HIWORD(wparam) == EN_UPDATE)
|
||||
{
|
||||
GetWindowText(GetDlgItem(dialog, IDC_EDIT1), editBuf[0], 8);
|
||||
if (!strlen(editBuf[0]) && !strlen(editBuf[1]))
|
||||
if ( (strlen(editBuf[0]) < 6) || (!strlen(editBuf[1])) )
|
||||
{
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), FALSE);
|
||||
return TRUE;
|
||||
|
@ -266,12 +256,12 @@ BOOL CALLBACK CheatsAddProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
case IDC_EDIT2:
|
||||
case IDC_EDIT2: // value
|
||||
{
|
||||
if (HIWORD(wparam) == EN_UPDATE)
|
||||
{
|
||||
GetWindowText(GetDlgItem(dialog, IDC_EDIT1), editBuf[1], 10);
|
||||
if (!strlen(editBuf[1]) && !strlen(editBuf[0]))
|
||||
GetWindowText(GetDlgItem(dialog, IDC_EDIT2), editBuf[1], 10);
|
||||
if ( (strlen(editBuf[0]) < 6) || (!strlen(editBuf[1])) )
|
||||
{
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), FALSE);
|
||||
return TRUE;
|
||||
|
@ -288,25 +278,13 @@ BOOL CALLBACK CheatsAddProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
case IDC_EDIT3:
|
||||
case IDC_EDIT3: // description
|
||||
{
|
||||
if (HIWORD(wparam) == EN_UPDATE)
|
||||
GetWindowText(GetDlgItem(dialog, IDC_EDIT3), editBuf[2], 75);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
case IDC_RADIO8:
|
||||
{
|
||||
strcpy(editBuf[3], "0");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
case IDC_RADIO9:
|
||||
{
|
||||
strcpy(editBuf[3], "1");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
case IDC_RADIO1: // 1 byte
|
||||
searchAddSize = 0;
|
||||
return TRUE;
|
||||
|
@ -332,6 +310,143 @@ BOOL CALLBACK CheatsAddProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
|||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CALLBACK CheatsEditProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
||||
{
|
||||
static WNDPROC saveOldEditProc = NULL;
|
||||
char buf[100] = {0}, buf2[100] = {0};
|
||||
|
||||
switch(msg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
saveOldEditProc = oldEditProc;
|
||||
SendMessage(GetDlgItem(dialog, IDC_EDIT1), EM_SETLIMITTEXT, 6, 0);
|
||||
SendMessage(GetDlgItem(dialog, IDC_EDIT2), EM_SETLIMITTEXT, 10, 0);
|
||||
SendMessage(GetDlgItem(dialog, IDC_EDIT3), EM_SETLIMITTEXT, 75, 0);
|
||||
oldEditProcHEX = (WNDPROC)SetWindowLongPtr(GetDlgItem(dialog, IDC_EDIT1), GWLP_WNDPROC, (LONG)EditValueHEXProc);
|
||||
oldEditProc = (WNDPROC)SetWindowLongPtr(GetDlgItem(dialog, IDC_EDIT2), GWLP_WNDPROC, (LONG)EditValueProc);
|
||||
|
||||
cheatsGet(&tempCheat, cheatEditPos);
|
||||
|
||||
memset(buf, 0, 100);
|
||||
memset(buf2, 0, 100);
|
||||
tempCheat.hi[0] &= 0x00FFFFFF;
|
||||
wsprintf(buf, "%06X", tempCheat.hi[0]);
|
||||
SetWindowText(GetDlgItem(dialog, IDC_EDIT1), buf);
|
||||
wsprintf(buf, "%i", tempCheat.lo[0]);
|
||||
SetWindowText(GetDlgItem(dialog, IDC_EDIT2), buf);
|
||||
strcpy(buf, tempCheat.description);
|
||||
SetWindowText(GetDlgItem(dialog, IDC_EDIT3), buf);
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
|
||||
|
||||
CheckDlgButton(dialog, IDC_CHECK1, tempCheat.enabled?BST_CHECKED:BST_UNCHECKED);
|
||||
CheckDlgButton(dialog, searchSizeIDDs[tempCheat.size], BST_CHECKED);
|
||||
SetWindowText(GetDlgItem(dialog, IDOK), "Update");
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
case WM_COMMAND:
|
||||
{
|
||||
switch (LOWORD(wparam))
|
||||
{
|
||||
case IDOK:
|
||||
{
|
||||
if (cheatsUpdate(tempCheat.size, tempCheat.hi[0], tempCheat.lo[0], tempCheat.description, tempCheat.enabled, cheatEditPos))
|
||||
{
|
||||
oldEditProc = saveOldEditProc;
|
||||
EndDialog(dialog, TRUE);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
case IDCANCEL:
|
||||
oldEditProc = saveOldEditProc;
|
||||
EndDialog(dialog, FALSE);
|
||||
return TRUE;
|
||||
|
||||
case IDC_EDIT1: // address
|
||||
{
|
||||
if (HIWORD(wparam) == EN_UPDATE)
|
||||
{
|
||||
GetWindowText(GetDlgItem(dialog, IDC_EDIT1), buf, 8);
|
||||
GetWindowText(GetDlgItem(dialog, IDC_EDIT2), buf2, 10);
|
||||
if ( (strlen(buf) < 6) || (!strlen(buf2)) )
|
||||
{
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u32 val = 0;
|
||||
sscanf_s(buf, "%x", &val);
|
||||
val &= 0x00FFFFFF;
|
||||
if (val > 0x400000)
|
||||
{
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
|
||||
tempCheat.hi[0] = val;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
case IDC_EDIT2: // value
|
||||
{
|
||||
if (HIWORD(wparam) == EN_UPDATE)
|
||||
{
|
||||
GetWindowText(GetDlgItem(dialog, IDC_EDIT2), buf, 10);
|
||||
GetWindowText(GetDlgItem(dialog, IDC_EDIT1), buf2, 8);
|
||||
if ( (strlen(buf2) < 6) || (!strlen(buf)) )
|
||||
{
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u32 val = atol(buf);
|
||||
if (val > searchRange[tempCheat.size][1])
|
||||
{
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
|
||||
tempCheat.lo[0] = val;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
case IDC_EDIT3: // description
|
||||
{
|
||||
if (HIWORD(wparam) == EN_UPDATE)
|
||||
GetWindowText(GetDlgItem(dialog, IDC_EDIT3), tempCheat.description, 75);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
case IDC_RADIO1: // 1 byte
|
||||
tempCheat.size = 0;
|
||||
return TRUE;
|
||||
case IDC_RADIO2: // 2 bytes
|
||||
tempCheat.size = 1;
|
||||
return TRUE;
|
||||
case IDC_RADIO3: // 3 bytes
|
||||
tempCheat.size = 2;
|
||||
return TRUE;
|
||||
case IDC_RADIO4: // 4 bytes
|
||||
tempCheat.size = 3;
|
||||
return TRUE;
|
||||
|
||||
case IDC_CHECK1: // freeze
|
||||
{
|
||||
if (IsDlgButtonChecked(dialog, IDC_CHECK1) == BST_CHECKED)
|
||||
tempCheat.enabled = 1;
|
||||
else
|
||||
tempCheat.enabled = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
//==============================================================================
|
||||
BOOL CALLBACK CheatsListBox_Proc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
||||
{
|
||||
|
@ -340,79 +455,114 @@ BOOL CALLBACK CheatsListBox_Proc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lpar
|
|||
case WM_INITDIALOG:
|
||||
{
|
||||
LV_COLUMN lvColumn;
|
||||
u8 proc = 0;
|
||||
u32 address = 0;
|
||||
u32 val = 0;
|
||||
u32 address = 0;
|
||||
u32 val = 0;
|
||||
|
||||
cheatListView = GetDlgItem(dialog, IDC_LIST1);
|
||||
cheatListView = GetDlgItem(dialog, IDC_LIST1);
|
||||
|
||||
ListView_SetExtendedListViewStyle(cheatListView, LVS_EX_FULLROWSELECT);
|
||||
|
||||
memset(&lvColumn,0,sizeof(LV_COLUMN));
|
||||
lvColumn.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT;
|
||||
|
||||
lvColumn.fmt=LVCFMT_CENTER;
|
||||
lvColumn.cx=20;
|
||||
lvColumn.pszText="X";
|
||||
ListView_InsertColumn(cheatListView, 0, &lvColumn);
|
||||
ListView_SetExtendedListViewStyle(cheatListView, LVS_EX_FULLROWSELECT | LVS_EX_TWOCLICKACTIVATE);
|
||||
|
||||
memset(&lvColumn,0,sizeof(LV_COLUMN));
|
||||
lvColumn.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT;
|
||||
|
||||
lvColumn.fmt=LVCFMT_LEFT;
|
||||
lvColumn.cx=84;
|
||||
lvColumn.pszText="Address";
|
||||
ListView_InsertColumn(cheatListView, 1, &lvColumn);
|
||||
lvColumn.cx=100;
|
||||
lvColumn.pszText="Value";
|
||||
ListView_InsertColumn(cheatListView, 2, &lvColumn);
|
||||
lvColumn.cx=200;
|
||||
lvColumn.pszText="Description";
|
||||
ListView_InsertColumn(cheatListView, 3, &lvColumn);
|
||||
lvColumn.fmt=LVCFMT_CENTER;
|
||||
lvColumn.cx=45;
|
||||
lvColumn.pszText="CPU";
|
||||
ListView_InsertColumn(cheatListView, 4, &lvColumn);
|
||||
lvColumn.fmt=LVCFMT_CENTER;
|
||||
lvColumn.cx=20;
|
||||
lvColumn.pszText="X";
|
||||
ListView_InsertColumn(cheatListView, 0, &lvColumn);
|
||||
|
||||
LVITEM lvi;
|
||||
memset(&lvi,0,sizeof(LVITEM));
|
||||
lvi.mask = LVIF_TEXT|LVIF_STATE;
|
||||
lvi.iItem = INT_MAX;
|
||||
lvColumn.fmt=LVCFMT_LEFT;
|
||||
lvColumn.cx=84;
|
||||
lvColumn.pszText="Address";
|
||||
ListView_InsertColumn(cheatListView, 1, &lvColumn);
|
||||
lvColumn.cx=100;
|
||||
lvColumn.pszText="Value";
|
||||
ListView_InsertColumn(cheatListView, 2, &lvColumn);
|
||||
lvColumn.cx=245;
|
||||
lvColumn.pszText="Description";
|
||||
ListView_InsertColumn(cheatListView, 3, &lvColumn);
|
||||
lvColumn.fmt=LVCFMT_CENTER;
|
||||
|
||||
|
||||
cheatsGetListReset();
|
||||
SendMessage(cheatListView, WM_SETREDRAW, (WPARAM)FALSE,0);
|
||||
while (cheatsGetList(&tempCheat))
|
||||
{
|
||||
char buf[256];
|
||||
if (tempCheat.enabled)
|
||||
lvi.pszText= "X";
|
||||
else
|
||||
lvi.pszText= "";
|
||||
u32 row = ListView_InsertItem(cheatListView, &lvi);
|
||||
wsprintf(buf, "0x02%06X", tempCheat.hi[0]);
|
||||
ListView_SetItemText(cheatListView, row, 1, buf);
|
||||
ltoa(tempCheat.lo[0], buf, 10);
|
||||
ListView_SetItemText(cheatListView, row, 2, buf);
|
||||
ListView_SetItemText(cheatListView, row, 3, tempCheat.description);
|
||||
ListView_SetItemText(cheatListView, row, 4, NAME_CPUs[tempCheat.proc]);
|
||||
}
|
||||
SendMessage(cheatListView, WM_SETREDRAW, (WPARAM)TRUE,0);
|
||||
LVITEM lvi;
|
||||
memset(&lvi,0,sizeof(LVITEM));
|
||||
lvi.mask = LVIF_TEXT|LVIF_STATE;
|
||||
lvi.iItem = INT_MAX;
|
||||
|
||||
ListView_SetItemState(searchListView,0, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
|
||||
SetFocus(searchListView);
|
||||
cheatsGetListReset();
|
||||
SendMessage(cheatListView, WM_SETREDRAW, (WPARAM)FALSE,0);
|
||||
while (cheatsGetList(&tempCheat))
|
||||
{
|
||||
char buf[256];
|
||||
if (tempCheat.enabled)
|
||||
lvi.pszText= "X";
|
||||
else
|
||||
lvi.pszText= "";
|
||||
u32 row = ListView_InsertItem(cheatListView, &lvi);
|
||||
wsprintf(buf, "0x02%06X", tempCheat.hi[0]);
|
||||
ListView_SetItemText(cheatListView, row, 1, buf);
|
||||
ltoa(tempCheat.lo[0], buf, 10);
|
||||
ListView_SetItemText(cheatListView, row, 2, buf);
|
||||
ListView_SetItemText(cheatListView, row, 3, tempCheat.description);
|
||||
}
|
||||
SendMessage(cheatListView, WM_SETREDRAW, (WPARAM)TRUE,0);
|
||||
|
||||
ListView_SetItemState(searchListView,0, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
|
||||
SetFocus(searchListView);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
case WM_NOTIFY:
|
||||
if (wparam == IDC_LIST1)
|
||||
{
|
||||
LPNMHDR tmp_msg = (LPNMHDR)lparam;
|
||||
if ( tmp_msg->code == LVN_ITEMACTIVATE )
|
||||
{
|
||||
cheatEditPos = ListView_GetNextItem(cheatListView, -1, LVNI_SELECTED|LVNI_FOCUSED);
|
||||
cheatsGet(&tempCheat, cheatEditPos);
|
||||
tempCheat.enabled = !tempCheat.enabled;
|
||||
cheatsUpdate(tempCheat.size, tempCheat.hi[0], tempCheat.lo[0], tempCheat.description, tempCheat.enabled, cheatEditPos);
|
||||
if (tempCheat.enabled)
|
||||
ListView_SetItemText(cheatListView, cheatEditPos, 0, "X")
|
||||
else
|
||||
ListView_SetItemText(cheatListView, cheatEditPos, 0, "");
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
|
||||
}
|
||||
|
||||
if ( tmp_msg->code == NM_CLICK )
|
||||
{
|
||||
if (ListView_GetNextItem(cheatListView, -1, LVNI_SELECTED|LVNI_FOCUSED) != -1)
|
||||
{
|
||||
EnableWindow(GetDlgItem(dialog, IDC_BEDIT), TRUE);
|
||||
EnableWindow(GetDlgItem(dialog, IDC_BREMOVE), TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
EnableWindow(GetDlgItem(dialog, IDC_BEDIT), FALSE);
|
||||
EnableWindow(GetDlgItem(dialog, IDC_BREMOVE), FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
||||
case WM_COMMAND:
|
||||
{
|
||||
switch (LOWORD(wparam))
|
||||
{
|
||||
case IDOK:
|
||||
if (cheatsSave())
|
||||
{
|
||||
EndDialog(dialog, TRUE);
|
||||
}
|
||||
else
|
||||
MessageBox(dialog, "Can't save cheats to file","Error",MB_OK);
|
||||
return TRUE;
|
||||
case IDCANCEL:
|
||||
EndDialog(dialog, FALSE);
|
||||
return TRUE;
|
||||
|
||||
case IDC_BADD:
|
||||
{
|
||||
searchAddProc = 0;
|
||||
searchAddAddress = 0;;
|
||||
searchAddValue = 0;
|
||||
searchAddMode = 0;
|
||||
|
@ -436,12 +586,44 @@ BOOL CALLBACK CheatsListBox_Proc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lpar
|
|||
ltoa(searchAddValue, buf, 10);
|
||||
ListView_SetItemText(cheatListView, row, 2, buf);
|
||||
ListView_SetItemText(cheatListView, row, 3, editBuf[2]);
|
||||
ListView_SetItemText(cheatListView, row, 4, NAME_CPUs[searchAddProc]);
|
||||
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
case IDC_BEDIT:
|
||||
{
|
||||
cheatEditPos = ListView_GetNextItem(cheatListView, -1, LVNI_SELECTED|LVNI_FOCUSED);
|
||||
if (cheatEditPos > cheatsGetSize()) return TRUE;
|
||||
if (DialogBox(hAppInst, MAKEINTRESOURCE(IDD_CHEAT_ADD), dialog, (DLGPROC) CheatsEditProc))
|
||||
{
|
||||
char buf[256];
|
||||
cheatsGet(&tempCheat, cheatEditPos);
|
||||
wsprintf(buf, "0x02%06X", tempCheat.hi[0]);
|
||||
ListView_SetItemText(cheatListView, cheatEditPos, 1, buf);
|
||||
ltoa(tempCheat.lo[0], buf, 10);
|
||||
ListView_SetItemText(cheatListView, cheatEditPos, 2, buf);
|
||||
ListView_SetItemText(cheatListView, cheatEditPos, 3, tempCheat.description);
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
case IDC_BREMOVE:
|
||||
{
|
||||
int tmp_pos = ListView_GetNextItem(cheatListView, -1, LVNI_SELECTED|LVNI_FOCUSED);
|
||||
if (tmp_pos != -1)
|
||||
{
|
||||
if (cheatsRemove(tmp_pos))
|
||||
{
|
||||
ListView_DeleteItem(cheatListView, tmp_pos);
|
||||
EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -484,6 +666,7 @@ BOOL CALLBACK CheatsSearchExactWnd(HWND dialog, UINT msg,WPARAM wparam,LPARAM lp
|
|||
SetWindowText(GetDlgItem(dialog, IDC_STATIC_RANGE), searchRangeText[searchSign][searchSize]);
|
||||
oldEditProc = (WNDPROC)SetWindowLongPtr(GetDlgItem(dialog, IDC_EVALUE), GWLP_WNDPROC, (LONG)EditValueProc);
|
||||
char buf[256];
|
||||
memset(buf, 0, 256);
|
||||
ltoa(searchNumberResults, buf, 10);
|
||||
SetWindowText(GetDlgItem(dialog, IDC_SNUMBER), buf);
|
||||
SetFocus(GetDlgItem(dialog, IDC_EVALUE));
|
||||
|
@ -588,7 +771,6 @@ BOOL CALLBACK CheatsSearchViewWnd(HWND dialog, UINT msg,WPARAM wparam,LPARAM lpa
|
|||
case WM_INITDIALOG:
|
||||
{
|
||||
LV_COLUMN lvColumn;
|
||||
u8 proc = 0;
|
||||
u32 address = 0;
|
||||
u32 val = 0;
|
||||
|
||||
|
@ -598,17 +780,13 @@ BOOL CALLBACK CheatsSearchViewWnd(HWND dialog, UINT msg,WPARAM wparam,LPARAM lpa
|
|||
|
||||
memset(&lvColumn,0,sizeof(LV_COLUMN));
|
||||
lvColumn.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT;
|
||||
lvColumn.fmt=LVCFMT_CENTER;
|
||||
lvColumn.cx=40;
|
||||
lvColumn.pszText="CPU";
|
||||
ListView_InsertColumn(searchListView, 0, &lvColumn);
|
||||
lvColumn.fmt=LVCFMT_LEFT;
|
||||
lvColumn.cx=84;
|
||||
lvColumn.cx=94;
|
||||
lvColumn.pszText="Address";
|
||||
ListView_InsertColumn(searchListView, 1, &lvColumn);
|
||||
lvColumn.cx=100;
|
||||
ListView_InsertColumn(searchListView, 0, &lvColumn);
|
||||
lvColumn.cx=130;
|
||||
lvColumn.pszText="Value";
|
||||
ListView_InsertColumn(searchListView, 2, &lvColumn);
|
||||
ListView_InsertColumn(searchListView, 1, &lvColumn);
|
||||
|
||||
LVITEM lvi;
|
||||
memset(&lvi,0,sizeof(LVITEM));
|
||||
|
@ -617,16 +795,14 @@ BOOL CALLBACK CheatsSearchViewWnd(HWND dialog, UINT msg,WPARAM wparam,LPARAM lpa
|
|||
|
||||
cheatSearchGetListReset();
|
||||
SendMessage(searchListView, WM_SETREDRAW, (WPARAM)FALSE,0);
|
||||
while (cheatSearchGetList(&proc, &address, &val))
|
||||
while (cheatSearchGetList(&address, &val))
|
||||
{
|
||||
char buf[256];
|
||||
char buf2[256];
|
||||
wsprintf(buf, "0x02%06X", address);
|
||||
_ltoa(val, buf2, 10);
|
||||
lvi.pszText= NAME_CPUs[proc];
|
||||
lvi.pszText= buf;
|
||||
u32 row = SendMessage(searchListView, LVM_INSERTITEM, 0, (LPARAM)&lvi);
|
||||
_ltoa(val, buf, 10);
|
||||
ListView_SetItemText(searchListView, row, 1, buf);
|
||||
ListView_SetItemText(searchListView, row, 2, buf2);
|
||||
}
|
||||
SendMessage(searchListView, WM_SETREDRAW, (WPARAM)TRUE,0);
|
||||
ListView_SetItemState(searchListView,0, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
|
||||
|
@ -646,12 +822,10 @@ BOOL CALLBACK CheatsSearchViewWnd(HWND dialog, UINT msg,WPARAM wparam,LPARAM lpa
|
|||
u32 val = 0;
|
||||
char buf[12];
|
||||
u32 pos = ListView_GetNextItem(searchListView, -1, LVNI_SELECTED|LVNI_FOCUSED);
|
||||
ListView_GetItemText(searchListView, pos, 0, buf, 4);
|
||||
searchAddProc = (buf[3] == '7');
|
||||
ListView_GetItemText(searchListView, pos, 1, buf, 12);
|
||||
ListView_GetItemText(searchListView, pos, 0, buf, 12);
|
||||
sscanf_s(buf, "%x", &val);
|
||||
searchAddAddress = val & 0x00FFFFFF;
|
||||
ListView_GetItemText(searchListView, pos, 2, buf, 12);
|
||||
ListView_GetItemText(searchListView, pos, 1, buf, 12);
|
||||
searchAddValue = atol(buf);
|
||||
searchAddMode = 1;
|
||||
searchAddSize = searchSize;
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
yopyop156@ifrance.com
|
||||
yopyop156.ifrance.com
|
||||
|
||||
Copyright 2009 CrazyMax
|
||||
Copyright 2009 DeSmuME team
|
||||
|
||||
This file is part of DeSmuME
|
||||
|
|
|
@ -272,7 +272,6 @@
|
|||
#define IDC_LIST 1069
|
||||
#define IDC_SNUMBER 1071
|
||||
#define IDC_CHECK1 1074
|
||||
#define IDC_RADIO9 1075
|
||||
#define IDM_FIRMSETTINGS 1100
|
||||
#define IDD_FIRMSETTINGS 1101
|
||||
#define IDC_EDIT1 1102
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by ResEdit 1.4.4.18
|
||||
// Generated by ResEdit 1.4.4.19
|
||||
// Copyright (C) 2006-2008
|
||||
// http://www.resedit.net
|
||||
|
||||
|
@ -667,32 +667,30 @@ END
|
|||
|
||||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
IDD_CHEAT_ADD DIALOGEX 0, 0, 121, 207
|
||||
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
|
||||
CAPTION "Add cheat"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 1
|
||||
BEGIN
|
||||
EDITTEXT IDC_EDIT1, 26, 17, 88, 14, ES_AUTOHSCROLL
|
||||
EDITTEXT IDC_EDIT2, 7, 53, 107, 14, ES_AUTOHSCROLL
|
||||
EDITTEXT IDC_EDIT3, 7, 78, 107, 30, ES_MULTILINE
|
||||
AUTOCHECKBOX "freeze value", IDC_CHECK1, 47, 112, 67, 10, BS_AUTOCHECKBOX
|
||||
AUTORADIOBUTTON "1 byte", IDC_RADIO1, 9, 135, 37, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON
|
||||
AUTORADIOBUTTON "2 bytes", IDC_RADIO2, 9, 145, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON
|
||||
AUTORADIOBUTTON "3 bytes", IDC_RADIO3, 9, 156, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON
|
||||
AUTORADIOBUTTON "4 bytes", IDC_RADIO4, 9, 167, 40, 10, WS_TABSTOP | BS_AUTORADIOBUTTON
|
||||
DEFPUSHBUTTON "Add", IDOK, 7, 186, 50, 14, WS_DISABLED | BS_DEFPUSHBUTTON
|
||||
PUSHBUTTON "Cancel", IDCANCEL, 64, 186, 50, 14, BS_PUSHBUTTON
|
||||
AUTORADIOBUTTON "ARM9", IDC_RADIO8, 23, 34, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON
|
||||
AUTORADIOBUTTON "ARM7", IDC_RADIO9, 64, 34, 35, 10, WS_TABSTOP | BS_AUTORADIOBUTTON
|
||||
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, 45, 21, 8, SS_LEFT
|
||||
LTEXT "Description:", IDC_STATIC, 9, 70, 39, 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, 125, 107, 57
|
||||
LTEXT "[0..255]", IDC_STATIC_S1, 53, 135, 60, 8, SS_LEFT
|
||||
LTEXT "[0..65535]", IDC_STATIC_S2, 53, 145, 60, 8, SS_LEFT
|
||||
LTEXT "[0..16777215]", IDC_STATIC_S3, 53, 156, 58, 8, SS_LEFT
|
||||
LTEXT "[0..4294967295]", IDC_STATIC_S4, 53, 166, 59, 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
|
||||
END
|
||||
|
||||
|
||||
|
@ -804,7 +802,7 @@ BEGIN
|
|||
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 | 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
|
||||
|
|
Loading…
Reference in New Issue