- refactoring for new boot code;
This commit is contained in:
mtabachenko 2013-07-08 18:53:10 +00:00
parent 65af9c2df5
commit 822cf3d289
11 changed files with 312 additions and 146 deletions

View File

@ -19,7 +19,7 @@ libdesmume_a_SOURCES = \
common.cpp common.h \ common.cpp common.h \
debug.cpp debug.h \ debug.cpp debug.h \
Disassembler.cpp Disassembler.h \ Disassembler.cpp Disassembler.h \
emufile.h emufile.cpp emufile_types.h FIFO.cpp FIFO.h \ emufile.h emufile.cpp emufile_types.h encrypt.h encrypt.cpp FIFO.cpp FIFO.h \
firmware.cpp firmware.h GPU.cpp GPU.h \ firmware.cpp firmware.h GPU.cpp GPU.h \
fs.h \ fs.h \
GPU_osd.h \ GPU_osd.h \

111
desmume/src/encrypt.cpp Normal file
View File

@ -0,0 +1,111 @@
/*
Copyright (C) 2009-2013 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#include "encrypt.h"
#include "MMU.h"
//================================================================================== KEY1
#define bswap32(val) (((val & 0x000000FF) << 24) | ((val & 0x0000FF00) << 8) | ((val & 0x00FF0000) >> 8) | ((val & 0xFF000000) >> 24))
#define DWNUM(i) ((i) >> 2)
void _KEY1::init(u32 idcode, u8 level, u8 modulo)
{
memcpy(keyBuf, keyBufPtr, 0x1048);
keyCode[0] = idcode;
keyCode[1] = idcode >> 1;
keyCode[2] = idcode << 1;
if (level >= 1) // first apply (always)
applyKeycode(modulo);
if (level >= 2) // second apply (optional)
applyKeycode(modulo);
keyCode[1] <<= 1;
keyCode[2] >>= 1;
if (level >= 3) // third apply (optional)
applyKeycode(modulo);
printf("keycode1: %08X%08X%08X\n", keyCode[2], keyCode[1], keyCode[0]);
}
void _KEY1::applyKeycode(u8 modulo)
{
encrypt(&keyCode[1]);
encrypt(&keyCode[0]);
u32 scratch[2] = {0};
for (u32 i = 0; i <= 0x44; i += 4) // xor with reversed byte-order (bswap)
keyBuf[DWNUM(i)] ^= bswap32(keyCode[DWNUM(i % modulo)]);
for (u32 i = 0; i <= 0x1040; i += 8)
{
encrypt(scratch); // encrypt S (64bit) by keybuf
keyBuf[DWNUM(i)] = scratch[1]; // write S to keybuf (first upper 32bit)
keyBuf[DWNUM(i+4)] = scratch[0]; // write S to keybuf (then lower 32bit)
}
}
void _KEY1::decrypt(u32 *ptr)
{
u32 y = ptr[0];
u32 x = ptr[1];
for (u32 i = 0x11; i >= 0x02; i--)
{
u32 z = keyBuf[i] ^ x;
x = keyBuf[DWNUM(0x048 + (((z >> 24) & 0xFF) << 2))];
x = keyBuf[DWNUM(0x448 + (((z >> 16) & 0xFF) << 2))] + x;
x = keyBuf[DWNUM(0x848 + (((z >> 8) & 0xFF) << 2))] ^ x;
x = keyBuf[DWNUM(0xC48 + (((z >> 0) & 0xFF) << 2))] + x;
x = y ^ x;
y = z;
}
ptr[0] = x ^ keyBuf[DWNUM(0x04)];
ptr[1] = y ^ keyBuf[DWNUM(0x00)];
}
void _KEY1::encrypt(u32 *ptr)
{
u32 y = ptr[0];
u32 x = ptr[1];
for (u32 i = 0x00; i <= 0x0F; i++)
{
u32 z = keyBuf[i] ^ x;
x = keyBuf[DWNUM(0x048 + (((z >> 24) & 0xFF) << 2))];
x = keyBuf[DWNUM(0x448 + (((z >> 16) & 0xFF) << 2))] + x;
x = keyBuf[DWNUM(0x848 + (((z >> 8) & 0xFF) << 2))] ^ x;
x = keyBuf[DWNUM(0xC48 + (((z >> 0) & 0xFF) << 2))] + x;
x = y ^ x;
y = z;
}
ptr[0] = x ^ keyBuf[DWNUM(0x40)];
ptr[1] = y ^ keyBuf[DWNUM(0x44)];
}
#undef DWNUM
#undef bswap32
//================================================================================== KEY2
void _KEY2::applySeed(u8 PROCNUM)
{
u64 tmp = (MMU_read8(PROCNUM, REG_ENCSEED0H) & 0xFF);
seed0 = MMU_read32(PROCNUM, REG_ENCSEED0L) | (tmp << 32);
tmp = (MMU_read8(PROCNUM, REG_ENCSEED1H) & 0xFF);
seed1 = MMU_read32(PROCNUM, REG_ENCSEED1L) | (tmp << 32);
printf("ARM%c: set KEY2 seed0 to %010llX\n", PROCNUM?'7':'9', seed0);
printf("ARM%c: set KEY2 seed1 to %010llX\n", PROCNUM?'7':'9', seed1);
}

64
desmume/src/encrypt.h Normal file
View File

@ -0,0 +1,64 @@
/*
Copyright (C) 2009-2013 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _ENCRYPT_H_
#define _ENCRYPT_H_
#include "types.h"
struct _KEY1
{
_KEY1(u8 *keyBufPtr)
{
if (keyBuf) delete keyBuf;
keyBuf = new u32 [0x1048 / sizeof(u32)];
memset(keyBuf, 0x00, 0x1048);
memset(&keyCode[0], 0, sizeof(keyCode));
this->keyBufPtr = keyBufPtr;
}
~_KEY1()
{
if (keyBuf)
{
delete keyBuf;
keyBuf = NULL;
}
}
u32 *keyBuf;
u32 keyCode[3];
u8 *keyBufPtr;
void init(u32 idcode, u8 level, u8 modulo);
void applyKeycode(u8 modulo);
void decrypt(u32 *ptr);
void encrypt(u32 *ptr);
};
struct _KEY2
{
_KEY2() : seed0(0x58C56DE0E8U),
seed1(0x5C879B9B05U)
{}
u64 seed0;
u64 seed1;
void applySeed(u8 PROCNUM);
};
#endif

View File

@ -18,101 +18,9 @@
#include "firmware.h" #include "firmware.h"
#include "NDSSystem.h" #include "NDSSystem.h"
#include "path.h" #include "path.h"
#include "encrypt.h"
#define DWNUM(i) ((i) >> 2) static _KEY1 enc(&MMU.ARM7_BIOS[0x0030]);
bool CFIRMWARE::getKeyBuf()
{
FILE *file = fopen(CommonSettings.ARM7BIOS, "rb");
if (!file) return false;
fseek(file, 0x30, SEEK_SET);
size_t res = fread(keyBuf, 4, 0x412, file);
fclose(file);
return (res == 0x412);
}
void CFIRMWARE::crypt64BitUp(u32 *ptr)
{
u32 Y = ptr[0];
u32 X = ptr[1];
for(u32 i = 0x00; i <= 0x0F; i++)
{
u32 Z = (keyBuf[i] ^ X);
X = keyBuf[DWNUM(0x048 + (((Z >> 24) & 0xFF) << 2))];
X = (keyBuf[DWNUM(0x448 + (((Z >> 16) & 0xFF) << 2))] + X);
X = (keyBuf[DWNUM(0x848 + (((Z >> 8) & 0xFF) << 2))] ^ X);
X = (keyBuf[DWNUM(0xC48 + ((Z & 0xFF) << 2))] + X);
X = (Y ^ X);
Y = Z;
}
ptr[0] = (X ^ keyBuf[DWNUM(0x40)]);
ptr[1] = (Y ^ keyBuf[DWNUM(0x44)]);
}
void CFIRMWARE::crypt64BitDown(u32 *ptr)
{
u32 Y = ptr[0];
u32 X = ptr[1];
for(u32 i = 0x11; i >= 0x02; i--)
{
u32 Z = (keyBuf[i] ^ X);
X = keyBuf[DWNUM(0x048 + (((Z >> 24) & 0xFF) << 2))];
X = (keyBuf[DWNUM(0x448 + (((Z >> 16) & 0xFF) << 2))] + X);
X = (keyBuf[DWNUM(0x848 + (((Z >> 8) & 0xFF) << 2))] ^ X);
X = (keyBuf[DWNUM(0xC48 + ((Z & 0xFF) << 2))] + X);
X = (Y ^ X);
Y = Z;
}
ptr[0] = (X ^ keyBuf[DWNUM(0x04)]);
ptr[1] = (Y ^ keyBuf[DWNUM(0x00)]);
}
#define bswap32(val) (((val & 0x000000FF) << 24) | ((val & 0x0000FF00) << 8) | ((val & 0x00FF0000) >> 8) | ((val & 0xFF000000) >> 24))
void CFIRMWARE::applyKeycode(u32 modulo)
{
crypt64BitUp(&keyCode[1]);
crypt64BitUp(&keyCode[0]);
u32 scratch[2] = {0x00000000, 0x00000000};
for(u32 i = 0; i <= 0x44; i += 4)
{
keyBuf[DWNUM(i)] = (keyBuf[DWNUM(i)] ^ bswap32(keyCode[DWNUM(i % modulo)]));
}
for(u32 i = 0; i <= 0x1040; i += 8)
{
crypt64BitUp(scratch);
keyBuf[DWNUM(i)] = scratch[1];
keyBuf[DWNUM(i+4)] = scratch[0];
}
}
#undef bswap32
bool CFIRMWARE::initKeycode(u32 idCode, int level, u32 modulo)
{
if(getKeyBuf() == FALSE)
return FALSE;
keyCode[0] = idCode;
keyCode[1] = (idCode >> 1);
keyCode[2] = (idCode << 1);
if(level >= 1) applyKeycode(modulo);
if(level >= 2) applyKeycode(modulo);
keyCode[1] <<= 1;
keyCode[2] >>= 1;
if(level >= 3) applyKeycode(modulo);
return TRUE;
}
u16 CFIRMWARE::getBootCodeCRC16() u16 CFIRMWARE::getBootCodeCRC16()
{ {
@ -164,7 +72,7 @@ u32 CFIRMWARE::decrypt(const u8 *in, u8* &out)
u16 data = 0; u16 data = 0;
memcpy(curBlock, in, 8); memcpy(curBlock, in, 8);
crypt64BitDown(curBlock); enc.decrypt(curBlock);
blockSize = (curBlock[0] >> 8); blockSize = (curBlock[0] >> 8);
if (blockSize == 0) return (0); if (blockSize == 0) return (0);
@ -181,7 +89,7 @@ u32 CFIRMWARE::decrypt(const u8 *in, u8* &out)
if((xIn % 8) == 0) if((xIn % 8) == 0)
{ {
memcpy(curBlock, in + xIn, 8); memcpy(curBlock, in + xIn, 8);
crypt64BitDown(curBlock); enc.decrypt(curBlock);
} }
for(i = 0; i < 8; i++) for(i = 0; i < 8; i++)
@ -193,14 +101,14 @@ u32 CFIRMWARE::decrypt(const u8 *in, u8* &out)
if((xIn % 8) == 0) if((xIn % 8) == 0)
{ {
memcpy(curBlock, in + xIn, 8); memcpy(curBlock, in + xIn, 8);
crypt64BitDown(curBlock); enc.decrypt(curBlock);
} }
data |= T1ReadByte((u8*)curBlock, (xIn % 8)); data |= T1ReadByte((u8*)curBlock, (xIn % 8));
xIn++; xIn++;
if((xIn % 8) == 0) if((xIn % 8) == 0)
{ {
memcpy(curBlock, in + xIn, 8); memcpy(curBlock, in + xIn, 8);
crypt64BitDown(curBlock); enc.decrypt(curBlock);
} }
len = (data >> 12) + 3; len = (data >> 12) + 3;
@ -225,7 +133,7 @@ u32 CFIRMWARE::decrypt(const u8 *in, u8* &out)
if((xIn % 8) == 0) if((xIn % 8) == 0)
{ {
memcpy(curBlock, in + xIn, 8); memcpy(curBlock, in + xIn, 8);
crypt64BitDown(curBlock); enc.decrypt(curBlock);
} }
xLen--; xLen--;
@ -383,6 +291,15 @@ bool CFIRMWARE::load()
return false; return false;
} }
#ifdef _NEW_BOOT
if (CommonSettings.BootFromFirmware)
{
memcpy(MMU.fw.data, data, size);
MMU.fw.size = size;
return true;
}
#endif
shift1 = ((header.shift_amounts >> 0) & 0x07); shift1 = ((header.shift_amounts >> 0) & 0x07);
shift2 = ((header.shift_amounts >> 3) & 0x07); shift2 = ((header.shift_amounts >> 3) & 0x07);
shift3 = ((header.shift_amounts >> 6) & 0x07); shift3 = ((header.shift_amounts >> 6) & 0x07);
@ -400,15 +317,10 @@ bool CFIRMWARE::load()
ARM9bootAddr = part1ram; ARM9bootAddr = part1ram;
ARM7bootAddr = part2ram; ARM7bootAddr = part2ram;
if(initKeycode(header.fw_identifier, 1, 0xC) == FALSE) enc.init(header.fw_identifier, 1, 0xC);
{
delete [] data;
fclose(fp);
return false;
}
#if 0 #if 0
crypt64BitDown((u32*)&data[0x18]); enc.applyKeycode((u32*)&data[0x18]);
#else #else
// fix touch coords // fix touch coords
data[0x18] = 0x00; data[0x18] = 0x00;
@ -422,12 +334,7 @@ bool CFIRMWARE::load()
data[0x1F] = 0x00; data[0x1F] = 0x00;
#endif #endif
if(initKeycode(header.fw_identifier, 2, 0xC) == FALSE) enc.init(header.fw_identifier, 2, 0xC);
{
delete [] data;
fclose(fp);
return false;
}
size9 = decrypt(data + part1addr, tmp_data9); size9 = decrypt(data + part1addr, tmp_data9);
if (!tmp_data9) if (!tmp_data9)

View File

@ -21,7 +21,6 @@
// the count of bytes copied from the firmware into memory // the count of bytes copied from the firmware into memory
#define NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT 0x70 #define NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT 0x70
#define FW_CONFIG_FILE_EXT "dfc" #define FW_CONFIG_FILE_EXT "dfc"
class CFIRMWARE class CFIRMWARE
@ -31,14 +30,6 @@ private:
u8 *tmp_data7; u8 *tmp_data7;
u32 size9, size7; u32 size9, size7;
u32 keyBuf[0x412];
u32 keyCode[3];
bool getKeyBuf();
void crypt64BitUp(u32 *ptr);
void crypt64BitDown(u32 *ptr);
void applyKeycode(u32 modulo);
bool initKeycode(u32 idCode, int level, u32 modulo);
u16 getBootCodeCRC16(); u16 getBootCodeCRC16();
u32 decrypt(const u8 *in, u8* &out); u32 decrypt(const u8 *in, u8* &out);
u32 decompress(const u8 *in, u8* &out); u32 decompress(const u8 *in, u8* &out);

View File

@ -2608,6 +2608,14 @@
RelativePath="..\emufile.h" RelativePath="..\emufile.h"
> >
</File> </File>
<File
RelativePath="..\encrypt.cpp"
>
</File>
<File
RelativePath="..\encrypt.h"
>
</File>
<File <File
RelativePath="..\FIFO.cpp" RelativePath="..\FIFO.cpp"
> >

View File

@ -730,6 +730,14 @@
RelativePath="..\emufile.h" RelativePath="..\emufile.h"
> >
</File> </File>
<File
RelativePath="..\encrypt.cpp"
>
</File>
<File
RelativePath="..\encrypt.h"
>
</File>
<File <File
RelativePath="..\fat.h" RelativePath="..\fat.h"
> >

View File

@ -394,6 +394,7 @@
<ClCompile Include="..\Disassembler.cpp" /> <ClCompile Include="..\Disassembler.cpp" />
<ClCompile Include="..\driver.cpp" /> <ClCompile Include="..\driver.cpp" />
<ClCompile Include="..\emufile.cpp" /> <ClCompile Include="..\emufile.cpp" />
<ClCompile Include="..\encrypt.cpp" />
<ClCompile Include="..\FIFO.cpp" /> <ClCompile Include="..\FIFO.cpp" />
<ClCompile Include="..\filter\2xsai.cpp" /> <ClCompile Include="..\filter\2xsai.cpp" />
<ClCompile Include="..\filter\bilinear.cpp" /> <ClCompile Include="..\filter\bilinear.cpp" />
@ -660,6 +661,7 @@
<ClInclude Include="..\driver.h" /> <ClInclude Include="..\driver.h" />
<ClInclude Include="..\emufat_types.h" /> <ClInclude Include="..\emufat_types.h" />
<ClInclude Include="..\emufile.h" /> <ClInclude Include="..\emufile.h" />
<ClInclude Include="..\encrypt.h" />
<ClInclude Include="..\fat.h" /> <ClInclude Include="..\fat.h" />
<ClInclude Include="..\FIFO.h" /> <ClInclude Include="..\FIFO.h" />
<ClInclude Include="..\filter\filter.h" /> <ClInclude Include="..\filter\filter.h" />

View File

@ -780,6 +780,9 @@
<ClCompile Include="sndxa2.cpp"> <ClCompile Include="sndxa2.cpp">
<Filter>Windows</Filter> <Filter>Windows</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\encrypt.cpp">
<Filter>Core</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\addons.h"> <ClInclude Include="..\addons.h">
@ -1506,6 +1509,9 @@
<ClInclude Include="sndxa2.h"> <ClInclude Include="sndxa2.h">
<Filter>Windows</Filter> <Filter>Windows</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\encrypt.h">
<Filter>Core</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="..\instruction_tabdef.inc"> <None Include="..\instruction_tabdef.inc">

View File

@ -405,6 +405,7 @@
<ClCompile Include="..\Disassembler.cpp" /> <ClCompile Include="..\Disassembler.cpp" />
<ClCompile Include="..\driver.cpp" /> <ClCompile Include="..\driver.cpp" />
<ClCompile Include="..\emufile.cpp" /> <ClCompile Include="..\emufile.cpp" />
<ClCompile Include="..\encrypt.cpp" />
<ClCompile Include="..\FIFO.cpp" /> <ClCompile Include="..\FIFO.cpp" />
<ClCompile Include="..\filter\2xsai.cpp" /> <ClCompile Include="..\filter\2xsai.cpp" />
<ClCompile Include="..\filter\bilinear.cpp" /> <ClCompile Include="..\filter\bilinear.cpp" />
@ -671,6 +672,7 @@
<ClInclude Include="..\driver.h" /> <ClInclude Include="..\driver.h" />
<ClInclude Include="..\emufat_types.h" /> <ClInclude Include="..\emufat_types.h" />
<ClInclude Include="..\emufile.h" /> <ClInclude Include="..\emufile.h" />
<ClInclude Include="..\encrypt.h" />
<ClInclude Include="..\fat.h" /> <ClInclude Include="..\fat.h" />
<ClInclude Include="..\FIFO.h" /> <ClInclude Include="..\FIFO.h" />
<ClInclude Include="..\filter\filter.h" /> <ClInclude Include="..\filter\filter.h" />

View File

@ -768,6 +768,13 @@
<ClCompile Include="sndxa2.cpp"> <ClCompile Include="sndxa2.cpp">
<Filter>Windows</Filter> <Filter>Windows</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="File_Extractor\7z_C\7zDecode.c" />
<ClCompile Include="File_Extractor\7z_C\7zExtract.c" />
<ClCompile Include="File_Extractor\7z_C\7zHeader.c" />
<ClCompile Include="File_Extractor\7z_C\7zItem.c" />
<ClCompile Include="..\encrypt.cpp">
<Filter>Core</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\addons.h"> <ClInclude Include="..\addons.h">
@ -1295,6 +1302,78 @@
<ClInclude Include="sndxa2.h"> <ClInclude Include="sndxa2.h">
<Filter>Windows</Filter> <Filter>Windows</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\emufat_types.h" />
<ClInclude Include="..\utils\emufat_types.h" />
<ClInclude Include="FEX_Interface.h" />
<ClInclude Include="File_Extractor\7z_C\7z.h" />
<ClInclude Include="File_Extractor\7z_C\7zAlloc.h" />
<ClInclude Include="File_Extractor\7z_C\7zBuf.h" />
<ClInclude Include="File_Extractor\7z_C\7zCrc.h" />
<ClInclude Include="File_Extractor\7z_C\7zDecode.h" />
<ClInclude Include="File_Extractor\7z_C\7zExtract.h" />
<ClInclude Include="File_Extractor\7z_C\7zFile.h" />
<ClInclude Include="File_Extractor\7z_C\7zHeader.h" />
<ClInclude Include="File_Extractor\7z_C\7zIn.h" />
<ClInclude Include="File_Extractor\7z_C\7zItem.h" />
<ClInclude Include="File_Extractor\7z_C\7zTypes.h" />
<ClInclude Include="File_Extractor\7z_C\7zVersion.h" />
<ClInclude Include="File_Extractor\7z_C\Alloc.h" />
<ClInclude Include="File_Extractor\7z_C\Bcj2.h" />
<ClInclude Include="File_Extractor\7z_C\Bra.h" />
<ClInclude Include="File_Extractor\7z_C\CpuArch.h" />
<ClInclude Include="File_Extractor\7z_C\Delta.h" />
<ClInclude Include="File_Extractor\7z_C\LzFind.h" />
<ClInclude Include="File_Extractor\7z_C\LzFindMt.h" />
<ClInclude Include="File_Extractor\7z_C\LzHash.h" />
<ClInclude Include="File_Extractor\7z_C\Lzma2Dec.h" />
<ClInclude Include="File_Extractor\7z_C\Lzma2Enc.h" />
<ClInclude Include="File_Extractor\7z_C\Lzma86.h" />
<ClInclude Include="File_Extractor\7z_C\LzmaDec.h" />
<ClInclude Include="File_Extractor\7z_C\LzmaEnc.h" />
<ClInclude Include="File_Extractor\7z_C\LzmaLib.h" />
<ClInclude Include="File_Extractor\7z_C\LzmaTypes.h" />
<ClInclude Include="File_Extractor\7z_C\MtCoder.h" />
<ClInclude Include="File_Extractor\7z_C\Ppmd.h" />
<ClInclude Include="File_Extractor\7z_C\Ppmd7.h" />
<ClInclude Include="File_Extractor\7z_C\RotateDefs.h" />
<ClInclude Include="File_Extractor\7z_C\Threads.h" />
<ClInclude Include="File_Extractor\7z_C\Types.h" />
<ClInclude Include="File_Extractor\fex\Binary_Extractor.h" />
<ClInclude Include="File_Extractor\fex\blargg_common.h" />
<ClInclude Include="File_Extractor\fex\blargg_config.h" />
<ClInclude Include="File_Extractor\fex\blargg_endian.h" />
<ClInclude Include="File_Extractor\fex\blargg_errors.h" />
<ClInclude Include="File_Extractor\fex\blargg_source.h" />
<ClInclude Include="File_Extractor\fex\Data_Reader.h" />
<ClInclude Include="File_Extractor\fex\fex.h" />
<ClInclude Include="File_Extractor\fex\File_Extractor.h" />
<ClInclude Include="File_Extractor\fex\Gzip_Extractor.h" />
<ClInclude Include="File_Extractor\fex\Gzip_Reader.h" />
<ClInclude Include="File_Extractor\fex\Rar_Extractor.h" />
<ClInclude Include="File_Extractor\fex\Zip7_Extractor.h" />
<ClInclude Include="File_Extractor\fex\Zip_Extractor.h" />
<ClInclude Include="File_Extractor\fex\Zlib_Inflater.h" />
<ClInclude Include="File_Extractor\unrar\archive.hpp" />
<ClInclude Include="File_Extractor\unrar\array.hpp" />
<ClInclude Include="File_Extractor\unrar\coder.hpp" />
<ClInclude Include="File_Extractor\unrar\compress.hpp" />
<ClInclude Include="File_Extractor\unrar\encname.hpp" />
<ClInclude Include="File_Extractor\unrar\getbits.hpp" />
<ClInclude Include="File_Extractor\unrar\headers.hpp" />
<ClInclude Include="File_Extractor\unrar\model.hpp" />
<ClInclude Include="File_Extractor\unrar\rar.hpp" />
<ClInclude Include="File_Extractor\unrar\rarvm.hpp" />
<ClInclude Include="File_Extractor\unrar\rawread.hpp" />
<ClInclude Include="File_Extractor\unrar\suballoc.hpp" />
<ClInclude Include="File_Extractor\unrar\unicode.hpp" />
<ClInclude Include="File_Extractor\unrar\unpack.hpp" />
<ClInclude Include="File_Extractor\unrar\unrar.h" />
<ClInclude Include="filter\hq2x.h" />
<ClInclude Include="filter\interp.h" />
<ClInclude Include="filter\lq2x.h" />
<ClInclude Include="..\encrypt.h">
<Filter>Core</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="..\instruction_tabdef.inc"> <None Include="..\instruction_tabdef.inc">
@ -1306,27 +1385,18 @@
<None Include="..\filter\hq4x.dat"> <None Include="..\filter\hq4x.dat">
<Filter>Core\filter</Filter> <Filter>Core\filter</Filter>
</None> </None>
</ItemGroup> <None Include="..\utils\AsmJit\COPYING.txt" />
<ItemGroup> <None Include="bitmap1.bmp" />
<Text Include="..\utils\AsmJit\COPYING.txt"> <None Include="DeSmuME.ico" />
<Filter>Core\utils\AsmJit</Filter> <None Include="File_Extractor\7z_C\7zC.txt" />
</Text> <None Include="File_Extractor\7z_C\changes.txt" />
</ItemGroup> <None Include="File_Extractor\7z_C\lzma.txt" />
<ItemGroup> <None Include="File_Extractor\7z_C\readme.txt" />
<Image Include="bitmap1.bmp"> <None Include="File_Extractor\unrar\changes.txt" />
<Filter>Windows\resources</Filter> <None Include="File_Extractor\unrar\license.txt" />
</Image> <None Include="File_Extractor\unrar\readme.txt" />
<Image Include="DeSmuME.ico"> <None Include="File_Extractor\unrar\technote.txt" />
<Filter>Windows\resources</Filter> <None Include="File_Extractor\unrar\whatsnew.txt" />
</Image>
<Image Include="bitmaps\IDB_FRAMEADVANCE.bmp" />
<Image Include="bitmaps\IDB_OPEN.bmp" />
<Image Include="bitmaps\IDB_PAUSE.bmp" />
<Image Include="bitmaps\IDB_PLAY.bmp" />
<Image Include="bitmaps\IDB_RESET.bmp" />
<Image Include="bitmaps\IDB_ROTATECCW.bmp" />
<Image Include="bitmaps\IDB_ROTATECW.bmp" />
<Image Include="bitmaps\IDB_STOP.bmp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="resources.rc"> <ResourceCompile Include="resources.rc">
@ -1340,9 +1410,6 @@
<CustomBuild Include="glib-2.20.1\glib-2.20.1.7z"> <CustomBuild Include="glib-2.20.1\glib-2.20.1.7z">
<Filter>Windows\libs</Filter> <Filter>Windows\libs</Filter>
</CustomBuild> </CustomBuild>
<CustomBuild Include="libelf_libdwarf\libelf_libdwarf.7z">
<Filter>Windows\libs</Filter>
</CustomBuild>
<CustomBuild Include="lua\lua.7z"> <CustomBuild Include="lua\lua.7z">
<Filter>Windows\libs</Filter> <Filter>Windows\libs</Filter>
</CustomBuild> </CustomBuild>