rearrange vfat code to be reusable by multiple devices, make slot1-R4 use it, add slot1-fat-dir=/path/to/dir for setting up a fat image for slot-1 devices, rename "compact flash" addon to MPCF, make DLDI-autopatcher not touch roms unless "Default (No interface)" is the current driver (otherwise, your roms intentionally patched with other things will get overwritten)
This commit is contained in:
parent
b14e6f01df
commit
575d87fc98
|
@ -944,7 +944,7 @@ void MMU_Reset()
|
||||||
rtcInit();
|
rtcInit();
|
||||||
partie = 1;
|
partie = 1;
|
||||||
addonsReset();
|
addonsReset();
|
||||||
slot1Close();
|
slot1Reset();
|
||||||
Mic_Reset();
|
Mic_Reset();
|
||||||
MMU.gfx3dCycles = 0;
|
MMU.gfx3dCycles = 0;
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,9 @@ 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 \
|
||||||
emufat.h emufat.cpp emufat_types.h emufile.h emufile.cpp emufile_types.h fat.h FIFO.cpp FIFO.h \
|
emufile.h emufile.cpp emufile_types.h fat.h FIFO.cpp FIFO.h \
|
||||||
firmware.cpp firmware.h GPU.cpp GPU.h \
|
firmware.cpp firmware.h GPU.cpp GPU.h \
|
||||||
|
fs.h \
|
||||||
GPU_osd.h \
|
GPU_osd.h \
|
||||||
mem.h mc.cpp mc.h \
|
mem.h mc.cpp mc.h \
|
||||||
path.cpp path.h \
|
path.cpp path.h \
|
||||||
|
@ -44,10 +45,12 @@ libdesmume_a_SOURCES = \
|
||||||
PACKED.h PACKED_END.h \
|
PACKED.h PACKED_END.h \
|
||||||
utils/datetime.cpp utils/datetime.h \
|
utils/datetime.cpp utils/datetime.h \
|
||||||
utils/ConvertUTF.c utils/ConvertUTF.h utils/guid.cpp utils/guid.h \
|
utils/ConvertUTF.c utils/ConvertUTF.h utils/guid.cpp utils/guid.h \
|
||||||
|
utils/emufat.cpp utils/emufat.h utils/emufat_types.h \
|
||||||
utils/md5.cpp utils/md5.h utils/valuearray.h utils/xstring.cpp utils/xstring.h \
|
utils/md5.cpp utils/md5.h utils/valuearray.h utils/xstring.cpp utils/xstring.h \
|
||||||
utils/decrypt/crc.cpp utils/decrypt/crc.h utils/decrypt/decrypt.cpp \
|
utils/decrypt/crc.cpp utils/decrypt/crc.h utils/decrypt/decrypt.cpp \
|
||||||
utils/decrypt/decrypt.h utils/decrypt/header.cpp utils/decrypt/header.h \
|
utils/decrypt/decrypt.h utils/decrypt/header.cpp utils/decrypt/header.h \
|
||||||
utils/task.cpp utils/task.h \
|
utils/task.cpp utils/task.h \
|
||||||
|
utils/vfat.h utils/vfat.cpp \
|
||||||
utils/dlditool.cpp \
|
utils/dlditool.cpp \
|
||||||
utils/libfat/bit_ops.h \
|
utils/libfat/bit_ops.h \
|
||||||
utils/libfat/cache.cpp \
|
utils/libfat/cache.cpp \
|
||||||
|
@ -77,7 +80,7 @@ libdesmume_a_SOURCES = \
|
||||||
utils/libfat/partition.cpp \
|
utils/libfat/partition.cpp \
|
||||||
utils/libfat/partition.h \
|
utils/libfat/partition.h \
|
||||||
addons.cpp addons.h \
|
addons.cpp addons.h \
|
||||||
addons/compactFlash.cpp addons/gbagame.cpp addons/none.cpp addons/rumblepak.cpp addons/guitarGrip.cpp addons/expMemory.cpp addons/piano.cpp addons/slot1_none.cpp addons/slot1_r4.cpp addons/slot1_retail.cpp fs.h \
|
addons/slot2_mpcf.cpp addons/gbagame.cpp addons/none.cpp addons/rumblepak.cpp addons/guitarGrip.cpp addons/expMemory.cpp addons/piano.cpp addons/slot1_none.cpp addons/slot1_r4.cpp addons/slot1_retail.cpp \
|
||||||
cheatSystem.cpp cheatSystem.h \
|
cheatSystem.cpp cheatSystem.h \
|
||||||
texcache.cpp texcache.h rasterize.cpp rasterize.h \
|
texcache.cpp texcache.h rasterize.cpp rasterize.h \
|
||||||
metaspu/metaspu.cpp metaspu/metaspu.h \
|
metaspu/metaspu.cpp metaspu/metaspu.h \
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 2010 DeSmuME team
|
/* Copyright (C) 2010-2011 DeSmuME team
|
||||||
|
|
||||||
This file is part of DeSmuME
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
@ -17,13 +17,15 @@
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#include "../slot1.h"
|
#include "../slot1.h"
|
||||||
#include "../registers.h"
|
#include "../registers.h"
|
||||||
#include "../MMU.h"
|
#include "../MMU.h"
|
||||||
#include "../NDSSystem.h"
|
#include "../NDSSystem.h"
|
||||||
#include <time.h>
|
#include "../emufile.h"
|
||||||
|
|
||||||
static FILE *img = NULL;
|
static EMUFILE *img = NULL;
|
||||||
static u32 write_count = 0;
|
static u32 write_count = 0;
|
||||||
static u32 write_enabled = 0;
|
static u32 write_enabled = 0;
|
||||||
static void init_r4_flash()
|
static void init_r4_flash()
|
||||||
|
@ -31,11 +33,11 @@ static void init_r4_flash()
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
|
|
||||||
if (!img)
|
if (!img)
|
||||||
img = fopen("DLDI_R4DS.img", "r+b");
|
img = slot1GetFatImage();
|
||||||
|
|
||||||
if(!img)
|
if(!img)
|
||||||
{
|
{
|
||||||
INFO("DLDI_R4DS.img not found\n");
|
INFO("slot1 fat not successfully mounted\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,9 +50,13 @@ static BOOL init()
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reset() {}
|
static void reset() {
|
||||||
|
init_r4_flash();
|
||||||
|
}
|
||||||
|
|
||||||
static void close() {}
|
static void close() {
|
||||||
|
img = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void write08(u8 PROCNUM, u32 adr, u8 val) {}
|
static void write08(u8 PROCNUM, u32 adr, u8 val) {}
|
||||||
|
@ -67,14 +73,14 @@ static void write32_GCROMCTRL(u32 val)
|
||||||
case 0xB9:
|
case 0xB9:
|
||||||
case 0xBA:
|
case 0xBA:
|
||||||
card.address = (card.command[1] << 24) | (card.command[2] << 16) | (card.command[3] << 8) | card.command[4];
|
card.address = (card.command[1] << 24) | (card.command[2] << 16) | (card.command[3] << 8) | card.command[4];
|
||||||
fseek(img,card.address,SEEK_SET);
|
img->fseek(card.address,SEEK_SET);
|
||||||
break;
|
break;
|
||||||
case 0xBB:
|
case 0xBB:
|
||||||
write_enabled = 1;
|
write_enabled = 1;
|
||||||
write_count = 0x80;
|
write_count = 0x80;
|
||||||
case 0xBC:
|
case 0xBC:
|
||||||
card.address = (card.command[1] << 24) | (card.command[2] << 16) | (card.command[3] << 8) | card.command[4];
|
card.address = (card.command[1] << 24) | (card.command[2] << 16) | (card.command[3] << 8) | card.command[4];
|
||||||
fseek(img,card.address,SEEK_SET);
|
img->fseek(card.address,SEEK_SET);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,8 +111,8 @@ static void write32_GCDATAIN(u32 val)
|
||||||
{
|
{
|
||||||
if(write_count && write_enabled)
|
if(write_count && write_enabled)
|
||||||
{
|
{
|
||||||
fwrite(&val, 1, 4, img);
|
img->fwrite(&val, 4);
|
||||||
fflush(img);
|
img->fflush();
|
||||||
write_count--;
|
write_count--;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -186,7 +192,7 @@ static u32 read32_GCDATAIN()
|
||||||
break;
|
break;
|
||||||
case 0xBA:
|
case 0xBA:
|
||||||
//INFO("Read from sd at sector %08X at adr %08X ",card.address/512,ftell(img));
|
//INFO("Read from sd at sector %08X at adr %08X ",card.address/512,ftell(img));
|
||||||
fread(&val, 1, 4, img);
|
img->fread(&val, 4);
|
||||||
//INFO("val %08X\n",val);
|
//INFO("val %08X\n",val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,344 @@
|
||||||
|
/* Copyright (C) 2006 yopyop
|
||||||
|
Copyright (C) 2006 Mic
|
||||||
|
Copyright (C) 2009-2011 DeSmuME team
|
||||||
|
|
||||||
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
DeSmuME is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
DeSmuME is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with DeSmuME; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../addons.h"
|
||||||
|
#include <string>
|
||||||
|
#include <string.h>
|
||||||
|
#include "debug.h"
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
#include "../utils/vfat.h"
|
||||||
|
#include "../path.h"
|
||||||
|
|
||||||
|
#include "MMU.h"
|
||||||
|
#include "NDSSystem.h"
|
||||||
|
|
||||||
|
// Set up addresses for GBAMP
|
||||||
|
#define CF_REG_DATA 0x9000000
|
||||||
|
#define CF_REG_ERR 0x9020000
|
||||||
|
#define CF_REG_SEC 0x9040000
|
||||||
|
#define CF_REG_LBA1 0x9060000
|
||||||
|
#define CF_REG_LBA2 0x9080000
|
||||||
|
#define CF_REG_LBA3 0x90A0000
|
||||||
|
#define CF_REG_LBA4 0x90C0000
|
||||||
|
#define CF_REG_CMD 0x90E0000
|
||||||
|
#define CF_REG_STS 0x98C0000
|
||||||
|
|
||||||
|
// CF Card commands
|
||||||
|
#define CF_CMD_LBA 0xE0
|
||||||
|
#define CF_CMD_READ 0x20
|
||||||
|
#define CF_CMD_WRITE 0x30
|
||||||
|
|
||||||
|
static u16 cf_reg_sts,
|
||||||
|
cf_reg_lba1,
|
||||||
|
cf_reg_lba2,
|
||||||
|
cf_reg_lba3,
|
||||||
|
cf_reg_lba4,
|
||||||
|
cf_reg_cmd;
|
||||||
|
static off_t currLBA;
|
||||||
|
|
||||||
|
static const int lfnPos[13] = {1,3,5,7,9,14,16,18,20,22,24,28,30};
|
||||||
|
|
||||||
|
static u32 fileStartLBA,fileEndLBA;
|
||||||
|
static std::string sFlashPath;
|
||||||
|
static BOOL cflashDeviceEnabled = FALSE;
|
||||||
|
|
||||||
|
static EMUFILE* file;
|
||||||
|
|
||||||
|
// ===========================
|
||||||
|
BOOL inited;
|
||||||
|
|
||||||
|
enum EListCallbackArg {
|
||||||
|
EListCallbackArg_Item, EListCallbackArg_Pop
|
||||||
|
};
|
||||||
|
|
||||||
|
static BOOL cflash_init()
|
||||||
|
{
|
||||||
|
if (inited) return FALSE;
|
||||||
|
BOOL init_good = FALSE;
|
||||||
|
|
||||||
|
CFLASHLOG("CFlash_Mode: %d\n",CFlash_Mode);
|
||||||
|
|
||||||
|
if (CFlash_Mode == ADDON_CFLASH_MODE_RomPath)
|
||||||
|
{
|
||||||
|
sFlashPath = path.pathToRoms;
|
||||||
|
INFO("Using CFlash directory of rom: %s\n", sFlashPath.c_str());
|
||||||
|
}
|
||||||
|
else if(CFlash_Mode == ADDON_CFLASH_MODE_Path)
|
||||||
|
{
|
||||||
|
sFlashPath = CFlash_Path;
|
||||||
|
INFO("Using CFlash directory: %s\n", sFlashPath.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(CFlash_IsUsingPath())
|
||||||
|
{
|
||||||
|
cflashDeviceEnabled = FALSE;
|
||||||
|
currLBA = 0;
|
||||||
|
|
||||||
|
fileStartLBA = fileEndLBA = 0xFFFFFFFF;
|
||||||
|
VFAT vfat;
|
||||||
|
bool ret = vfat.build(sFlashPath.c_str(),16); //allocate 16MB extra for writing. this is probably enough for anyone, but maybe it should be configurable.
|
||||||
|
//we could always suggest to users to add a big file to their directory to overwrite (that would cause the image to get padded)
|
||||||
|
|
||||||
|
if(!ret)
|
||||||
|
{
|
||||||
|
CFLASHLOG("FAILED cflash_build_fat\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
file = vfat.detach();
|
||||||
|
|
||||||
|
cf_reg_sts = 0x58; // READY
|
||||||
|
|
||||||
|
cflashDeviceEnabled = TRUE;
|
||||||
|
init_good = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sFlashPath = CFlash_Path;
|
||||||
|
INFO("Using CFlash disk image file %s\n", sFlashPath.c_str());
|
||||||
|
file = new EMUFILE_FILE(sFlashPath.c_str(),"rb+");
|
||||||
|
if(file->fail())
|
||||||
|
{
|
||||||
|
INFO("Failed to open file %s\n", sFlashPath.c_str());
|
||||||
|
delete file;
|
||||||
|
file = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// READY
|
||||||
|
cf_reg_sts = 0x58;
|
||||||
|
|
||||||
|
currLBA = 0;
|
||||||
|
cf_reg_lba1 = cf_reg_lba2 =
|
||||||
|
cf_reg_lba3 = cf_reg_lba4 = 0;
|
||||||
|
|
||||||
|
inited = TRUE;
|
||||||
|
return init_good;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int cflash_read(unsigned int address)
|
||||||
|
{
|
||||||
|
unsigned int ret_value = 0;
|
||||||
|
size_t elems_read = 0;
|
||||||
|
|
||||||
|
switch (address)
|
||||||
|
{
|
||||||
|
case CF_REG_STS:
|
||||||
|
ret_value = cf_reg_sts;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CF_REG_DATA:
|
||||||
|
if (cf_reg_cmd == CF_CMD_READ)
|
||||||
|
{
|
||||||
|
if(file)
|
||||||
|
{
|
||||||
|
u8 data[2];
|
||||||
|
file->fseek(currLBA, SEEK_SET);
|
||||||
|
elems_read += file->fread(data,2);
|
||||||
|
ret_value = data[1] << 8 | data[0];
|
||||||
|
}
|
||||||
|
currLBA += 2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CF_REG_CMD:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CF_REG_LBA1:
|
||||||
|
ret_value = cf_reg_lba1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void cflash_write(unsigned int address,unsigned int data)
|
||||||
|
{
|
||||||
|
static u8 sector_data[512];
|
||||||
|
static u32 sector_write_index = 0;
|
||||||
|
|
||||||
|
switch (address)
|
||||||
|
{
|
||||||
|
case CF_REG_STS:
|
||||||
|
cf_reg_sts = data&0xFFFF;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CF_REG_DATA:
|
||||||
|
if (cf_reg_cmd == CF_CMD_WRITE)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
sector_data[sector_write_index] = (data >> 0) & 0xff;
|
||||||
|
sector_data[sector_write_index + 1] = (data >> 8) & 0xff;
|
||||||
|
|
||||||
|
sector_write_index += 2;
|
||||||
|
|
||||||
|
if (sector_write_index == 512)
|
||||||
|
{
|
||||||
|
CFLASHLOG( "Write sector to %ld\n", currLBA);
|
||||||
|
size_t written = 0;
|
||||||
|
|
||||||
|
if(file)
|
||||||
|
if(currLBA + 512 < file->size())
|
||||||
|
{
|
||||||
|
file->fseek(currLBA,SEEK_SET);
|
||||||
|
|
||||||
|
while(written < 512)
|
||||||
|
{
|
||||||
|
size_t todo = 512-written;
|
||||||
|
file->fwrite(§or_data[written], todo);
|
||||||
|
size_t cur_write = todo;
|
||||||
|
written += cur_write;
|
||||||
|
if ( cur_write == (size_t)-1) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CFLASHLOG("Wrote %u bytes\n", written);
|
||||||
|
|
||||||
|
currLBA += 512;
|
||||||
|
sector_write_index = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CF_REG_CMD:
|
||||||
|
cf_reg_cmd = data&0xFF;
|
||||||
|
cf_reg_sts = 0x58; // READY
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CF_REG_LBA1:
|
||||||
|
cf_reg_lba1 = data&0xFF;
|
||||||
|
currLBA = (currLBA&0xFFFFFF00)| cf_reg_lba1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CF_REG_LBA2:
|
||||||
|
cf_reg_lba2 = data&0xFF;
|
||||||
|
currLBA = (currLBA&0xFFFF00FF)|(cf_reg_lba2<<8);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CF_REG_LBA3:
|
||||||
|
cf_reg_lba3 = data&0xFF;
|
||||||
|
currLBA = (currLBA&0xFF00FFFF)|(cf_reg_lba3<<16);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CF_REG_LBA4:
|
||||||
|
cf_reg_lba4 = data&0xFF;
|
||||||
|
|
||||||
|
if ((cf_reg_lba4 & 0xf0) == CF_CMD_LBA)
|
||||||
|
{
|
||||||
|
currLBA = (currLBA&0x00FFFFFF)|((cf_reg_lba4&0x0F)<<24);
|
||||||
|
currLBA *= 512;
|
||||||
|
sector_write_index = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void cflash_close( void)
|
||||||
|
{
|
||||||
|
if (!inited) return;
|
||||||
|
if (!CFlash_IsUsingPath())
|
||||||
|
{
|
||||||
|
delete file;
|
||||||
|
file = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
cflashDeviceEnabled = FALSE;
|
||||||
|
}
|
||||||
|
inited = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL init(void)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reset(void)
|
||||||
|
{
|
||||||
|
cflash_close();
|
||||||
|
cflash_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void close(void)
|
||||||
|
{
|
||||||
|
cflash_close();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void config(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void write08(u32 adr, u8 val)
|
||||||
|
{
|
||||||
|
cflash_write(adr, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void write16(u32 adr, u16 val)
|
||||||
|
{
|
||||||
|
cflash_write(adr, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void write32(u32 adr, u32 val)
|
||||||
|
{
|
||||||
|
cflash_write(adr, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
static u8 read08(u32 adr)
|
||||||
|
{
|
||||||
|
return (cflash_read(adr));
|
||||||
|
}
|
||||||
|
|
||||||
|
static u16 read16(u32 adr)
|
||||||
|
{
|
||||||
|
return (cflash_read(adr));
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 read32(u32 adr)
|
||||||
|
{
|
||||||
|
return (cflash_read(adr));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void info(char *info)
|
||||||
|
{
|
||||||
|
strcpy(info, "MPCF Flash Card Device");
|
||||||
|
}
|
||||||
|
|
||||||
|
ADDONINTERFACE addonCFlash = {
|
||||||
|
"MPCF Flash Card Device",
|
||||||
|
init,
|
||||||
|
reset,
|
||||||
|
close,
|
||||||
|
config,
|
||||||
|
write08,
|
||||||
|
write16,
|
||||||
|
write32,
|
||||||
|
read08,
|
||||||
|
read16,
|
||||||
|
read32,
|
||||||
|
info};
|
||||||
|
|
||||||
|
#undef CFLASHDEBUG
|
|
@ -1,6 +1,4 @@
|
||||||
/* commandline.cpp
|
/* Copyright (C) 2009-2011 DeSmuME team
|
||||||
|
|
||||||
Copyright (C) 2009-2010 DeSmuME team
|
|
||||||
|
|
||||||
This file is part of DeSmuME
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
@ -52,6 +50,7 @@ CommandLine::CommandLine()
|
||||||
, _rigorous_timing(0)
|
, _rigorous_timing(0)
|
||||||
, _advanced_timing(-1)
|
, _advanced_timing(-1)
|
||||||
, _slot1(NULL)
|
, _slot1(NULL)
|
||||||
|
, _slot1_fat_dir(NULL)
|
||||||
, depth_threshold(-1)
|
, depth_threshold(-1)
|
||||||
, load_slot(-1)
|
, load_slot(-1)
|
||||||
, arm9_gdb_port(0)
|
, arm9_gdb_port(0)
|
||||||
|
@ -94,6 +93,7 @@ void CommandLine::loadCommonOptions()
|
||||||
{ "rigorous-timing", 0, 0, G_OPTION_ARG_INT, &_rigorous_timing, "Use some rigorous timings instead of unrealistically generous (default 0)", "RIGOROUS_TIMING"},
|
{ "rigorous-timing", 0, 0, G_OPTION_ARG_INT, &_rigorous_timing, "Use some rigorous timings instead of unrealistically generous (default 0)", "RIGOROUS_TIMING"},
|
||||||
{ "advanced-timing", 0, 0, G_OPTION_ARG_INT, &_advanced_timing, "Use advanced BUS-level timing (default 1)", "ADVANCED_TIMING"},
|
{ "advanced-timing", 0, 0, G_OPTION_ARG_INT, &_advanced_timing, "Use advanced BUS-level timing (default 1)", "ADVANCED_TIMING"},
|
||||||
{ "slot1", 0, 0, G_OPTION_ARG_STRING, &_slot1, "Device to load in slot 1 (default retail)", "SLOT1"},
|
{ "slot1", 0, 0, G_OPTION_ARG_STRING, &_slot1, "Device to load in slot 1 (default retail)", "SLOT1"},
|
||||||
|
{ "slot1-fat-dir", 0, 0, G_OPTION_ARG_STRING, &_slot1_fat_dir, "Directory to scan for slot 1", "SLOT1_DIR"},
|
||||||
{ "depth-threshold", 0, 0, G_OPTION_ARG_INT, &depth_threshold, "Depth comparison threshold (default 0)", "DEPTHTHRESHOLD"},
|
{ "depth-threshold", 0, 0, G_OPTION_ARG_INT, &depth_threshold, "Depth comparison threshold (default 0)", "DEPTHTHRESHOLD"},
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
{ "disable-sound", 0, 0, G_OPTION_ARG_NONE, &disable_sound, "Disables the sound emulation", NULL},
|
{ "disable-sound", 0, 0, G_OPTION_ARG_NONE, &disable_sound, "Disables the sound emulation", NULL},
|
||||||
|
@ -119,6 +119,7 @@ bool CommandLine::parse(int argc,char **argv)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(_slot1_fat_dir) slot1_fat_dir = _slot1_fat_dir;
|
||||||
if(_slot1) slot1 = _slot1;
|
if(_slot1) slot1 = _slot1;
|
||||||
if(slot1.size() != 0) str_lcase((char*)&slot1[0]);
|
if(slot1.size() != 0) str_lcase((char*)&slot1[0]);
|
||||||
if(_play_movie_file) play_movie_file = _play_movie_file;
|
if(_play_movie_file) play_movie_file = _play_movie_file;
|
||||||
|
@ -227,10 +228,12 @@ void CommandLine::process_addonCommands()
|
||||||
is_cflash_configured = true;
|
is_cflash_configured = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(slot1_fat_dir != "")
|
||||||
|
slot1SetFatDir(slot1_fat_dir);
|
||||||
|
|
||||||
if(slot1 == "retail")
|
if(slot1 == "retail")
|
||||||
slot1Change(NDS_SLOT1_RETAIL);
|
slot1Change(NDS_SLOT1_RETAIL);
|
||||||
else if(slot1 == "r4")
|
else if(slot1 == "r4")
|
||||||
slot1Change(NDS_SLOT1_R4);
|
slot1Change(NDS_SLOT1_R4);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
/* commandline.h
|
/* Copyright (C) 2009-2011 DeSmuME team
|
||||||
|
|
||||||
Copyright (C) 2009-2010 DeSmuME team
|
|
||||||
|
|
||||||
This file is part of DeSmuME
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
@ -50,6 +48,7 @@ public:
|
||||||
std::string cflash_path;
|
std::string cflash_path;
|
||||||
std::string gbaslot_rom;
|
std::string gbaslot_rom;
|
||||||
std::string slot1;
|
std::string slot1;
|
||||||
|
std::string slot1_fat_dir;
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
int disable_sound;
|
int disable_sound;
|
||||||
int disable_limiter;
|
int disable_limiter;
|
||||||
|
@ -91,6 +90,7 @@ private:
|
||||||
int _rigorous_timing;
|
int _rigorous_timing;
|
||||||
int _advanced_timing;
|
int _advanced_timing;
|
||||||
char* _slot1;
|
char* _slot1;
|
||||||
|
char *_slot1_fat_dir;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -61,7 +61,7 @@ size_t EMUFILE_MEMORY::_fread(const void *ptr, size_t bytes){
|
||||||
|
|
||||||
void EMUFILE_FILE::truncate(s32 length)
|
void EMUFILE_FILE::truncate(s32 length)
|
||||||
{
|
{
|
||||||
fflush(fp);
|
::fflush(fp);
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
_chsize(_fileno(fp),length);
|
_chsize(_fileno(fp),length);
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -113,6 +113,7 @@ public:
|
||||||
|
|
||||||
virtual int ftell() = 0;
|
virtual int ftell() = 0;
|
||||||
virtual int size() = 0;
|
virtual int size() = 0;
|
||||||
|
virtual void fflush() = 0;
|
||||||
|
|
||||||
virtual void truncate(s32 length) = 0;
|
virtual void truncate(s32 length) = 0;
|
||||||
};
|
};
|
||||||
|
@ -244,6 +245,8 @@ public:
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void fflush() {}
|
||||||
|
|
||||||
void trim()
|
void trim()
|
||||||
{
|
{
|
||||||
vec->resize(len);
|
vec->resize(len);
|
||||||
|
@ -319,7 +322,7 @@ public:
|
||||||
failbit = true;
|
failbit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int fseek(int offset, int origin){
|
virtual int fseek(int offset, int origin) {
|
||||||
return ::fseek(fp, offset, origin);
|
return ::fseek(fp, offset, origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -335,6 +338,10 @@ public:
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void fflush() {
|
||||||
|
::fflush(fp);
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,87 +0,0 @@
|
||||||
/*
|
|
||||||
FAT.H
|
|
||||||
Mic, 2006
|
|
||||||
Structures taken from Michael Chisholm's FAT library
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __FAT_H__
|
|
||||||
#define __FAT_H__
|
|
||||||
|
|
||||||
#include "types.h"
|
|
||||||
#include "PACKED.h"
|
|
||||||
#include "PACKED_END.h"
|
|
||||||
|
|
||||||
#define ATTRIB_DIR 0x10
|
|
||||||
#define ATTRIB_LFN 0x0F
|
|
||||||
|
|
||||||
#define FILE_FREE 0xE5
|
|
||||||
/* Name and extension maximum length */
|
|
||||||
#define NAME_LEN 8
|
|
||||||
#define EXT_LEN 3
|
|
||||||
|
|
||||||
// Boot Sector - must be packed
|
|
||||||
#if defined(_MSC_VER) || defined(__INTEL_COMPILER)
|
|
||||||
#define DIR_SEP "\\"
|
|
||||||
#else
|
|
||||||
#define DIR_SEP "/"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "PACKED.h"
|
|
||||||
struct boot_record
|
|
||||||
{
|
|
||||||
u8 jmpBoot[3];
|
|
||||||
u8 OEMName[8];
|
|
||||||
// BIOS Parameter Block
|
|
||||||
u16 bytesPerSector;
|
|
||||||
u8 sectorsPerCluster;
|
|
||||||
u16 reservedSectors;
|
|
||||||
u8 numFATs;
|
|
||||||
u16 rootEntries;
|
|
||||||
u16 numSectorsSmall;
|
|
||||||
u8 mediaDesc;
|
|
||||||
u16 sectorsPerFAT;
|
|
||||||
u16 sectorsPerTrk;
|
|
||||||
u16 numHeads;
|
|
||||||
u32 numHiddenSectors;
|
|
||||||
u32 numSectors;
|
|
||||||
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
// Ext BIOS Parameter Block for FAT16
|
|
||||||
u8 driveNumber;
|
|
||||||
u8 reserved1;
|
|
||||||
u8 extBootSig;
|
|
||||||
u32 volumeID;
|
|
||||||
u8 volumeLabel[11];
|
|
||||||
u8 fileSysType[8];
|
|
||||||
// Bootcode
|
|
||||||
u8 bootCode[448];
|
|
||||||
u16 signature;
|
|
||||||
} __PACKED fat16;
|
|
||||||
|
|
||||||
} __PACKED;
|
|
||||||
typedef struct boot_record BOOT_RECORD;
|
|
||||||
#include "PACKED_END.h"
|
|
||||||
|
|
||||||
// Directory entry - must be packed
|
|
||||||
#include "PACKED.h"
|
|
||||||
struct dir_ent
|
|
||||||
{
|
|
||||||
u8 name[NAME_LEN];
|
|
||||||
u8 ext[EXT_LEN];
|
|
||||||
u8 attrib;
|
|
||||||
u8 reserved;
|
|
||||||
u8 cTime_ms;
|
|
||||||
u16 cTime;
|
|
||||||
u16 cDate;
|
|
||||||
u16 aDate;
|
|
||||||
u16 startClusterHigh;
|
|
||||||
u16 mTime;
|
|
||||||
u16 mDate;
|
|
||||||
u16 startCluster;
|
|
||||||
u32 fileSize;
|
|
||||||
} __PACKED;
|
|
||||||
typedef struct dir_ent DIR_ENT;
|
|
||||||
#include "PACKED_END.h"
|
|
||||||
|
|
||||||
#endif //
|
|
|
@ -484,6 +484,7 @@ void BackupDevice::reset_command()
|
||||||
default:
|
default:
|
||||||
//the archaic case: write the address and then some modulo-4 number of bytes
|
//the archaic case: write the address and then some modulo-4 number of bytes
|
||||||
//why modulo 4? who knows.
|
//why modulo 4? who knows.
|
||||||
|
//SM64 (KOR) makes it here with autodetect_size=11 and nothing interesting in the buffer
|
||||||
addr_size = autodetect_size & 3;
|
addr_size = autodetect_size & 3;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 2010 DeSmuME team
|
/* Copyright (C) 2010-2011 DeSmuME team
|
||||||
|
|
||||||
This file is part of DeSmuME
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
@ -17,30 +17,57 @@
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "slot1.h"
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
#include "slot1.h"
|
||||||
|
|
||||||
|
#include "emufile.h"
|
||||||
|
#include "utils/vfat.h"
|
||||||
|
|
||||||
extern SLOT1INTERFACE slot1None;
|
extern SLOT1INTERFACE slot1None;
|
||||||
extern SLOT1INTERFACE slot1Retail;
|
extern SLOT1INTERFACE slot1Retail;
|
||||||
extern SLOT1INTERFACE slot1R4;
|
extern SLOT1INTERFACE slot1R4;
|
||||||
|
|
||||||
|
static EMUFILE* fatImage = NULL;
|
||||||
|
static std::string fatDir;
|
||||||
|
|
||||||
SLOT1INTERFACE slot1List[NDS_SLOT1_COUNT] = {
|
SLOT1INTERFACE slot1List[NDS_SLOT1_COUNT] = {
|
||||||
slot1None,
|
slot1None,
|
||||||
slot1Retail,
|
slot1Retail,
|
||||||
slot1R4
|
slot1R4
|
||||||
};
|
};
|
||||||
|
|
||||||
SLOT1INTERFACE slot1_device = slot1Retail; //default for frontends that dont even configure this
|
SLOT1INTERFACE slot1_device = slot1Retail; //default for frontends that dont even configure this
|
||||||
u8 slot1_device_type = NDS_SLOT1_RETAIL;
|
u8 slot1_device_type = NDS_SLOT1_RETAIL;
|
||||||
|
|
||||||
|
static void scanDir()
|
||||||
|
{
|
||||||
|
if(fatDir == "") return;
|
||||||
|
|
||||||
|
delete fatImage;
|
||||||
|
fatImage = NULL;
|
||||||
|
|
||||||
|
VFAT vfat;
|
||||||
|
if(vfat.build(fatDir.c_str(),16))
|
||||||
|
{
|
||||||
|
fatImage = vfat.detach();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BOOL slot1Init()
|
BOOL slot1Init()
|
||||||
{
|
{
|
||||||
|
scanDir();
|
||||||
return slot1_device.init();
|
return slot1_device.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void slot1Close()
|
void slot1Close()
|
||||||
{
|
{
|
||||||
slot1_device.close();
|
slot1_device.close();
|
||||||
|
|
||||||
|
//be careful to do this second, maybe the device will write something more
|
||||||
|
delete fatImage;
|
||||||
|
fatImage = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void slot1Reset()
|
void slot1Reset()
|
||||||
|
@ -56,4 +83,14 @@ BOOL slot1Change(NDS_SLOT1_TYPE changeToType)
|
||||||
slot1_device_type = changeToType;
|
slot1_device_type = changeToType;
|
||||||
slot1_device = slot1List[slot1_device_type];
|
slot1_device = slot1List[slot1_device_type];
|
||||||
return slot1_device.init();
|
return slot1_device.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
void slot1SetFatDir(const std::string& dir)
|
||||||
|
{
|
||||||
|
fatDir = dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
EMUFILE* slot1GetFatImage()
|
||||||
|
{
|
||||||
|
return fatImage;
|
||||||
}
|
}
|
|
@ -20,10 +20,13 @@
|
||||||
#ifndef __SLOT1_H__
|
#ifndef __SLOT1_H__
|
||||||
#define __SLOT1_H__
|
#define __SLOT1_H__
|
||||||
|
|
||||||
|
#include <string>
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
class EMUFILE;
|
||||||
|
|
||||||
struct SLOT1INTERFACE
|
struct SLOT1INTERFACE
|
||||||
{
|
{
|
||||||
// The name of the plugin, this name will appear in the plugins list
|
// The name of the plugin, this name will appear in the plugins list
|
||||||
|
@ -65,10 +68,11 @@ enum NDS_SLOT1_TYPE
|
||||||
NDS_SLOT1_COUNT // use for counter addons - MUST TO BE LAST!!!
|
NDS_SLOT1_COUNT // use for counter addons - MUST TO BE LAST!!!
|
||||||
};
|
};
|
||||||
|
|
||||||
extern BOOL slot1Init();
|
BOOL slot1Init();
|
||||||
extern void slot1Close();
|
void slot1Close();
|
||||||
extern void slot1Reset();
|
void slot1Reset();
|
||||||
extern BOOL slot1Change(NDS_SLOT1_TYPE type); // change current adddon
|
BOOL slot1Change(NDS_SLOT1_TYPE type); // change current adddon
|
||||||
|
void slot1SetFatDir(const std::string& dir);
|
||||||
|
EMUFILE* slot1GetFatImage();
|
||||||
|
|
||||||
#endif //__ADDONS_H__
|
#endif //__ADDONS_H__
|
||||||
|
|
|
@ -649,6 +649,12 @@ bool tryPatch(void* data, size_t size)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(memcmp(&pAH[DO_friendlyName],"Default (No interface)",22))
|
||||||
|
{
|
||||||
|
printf("Would have been a candidate for auto-patch DLDI, but there was already a patch installed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//----should be able to patch OK-----
|
//----should be able to patch OK-----
|
||||||
|
|
||||||
addr_t memOffset; // Offset of DLDI after the file is loaded into memory
|
addr_t memOffset; // Offset of DLDI after the file is loaded into memory
|
||||||
|
|
|
@ -0,0 +1,234 @@
|
||||||
|
/* Copyright (C) 2006 yopyop
|
||||||
|
Copyright (C) 2006 Mic
|
||||||
|
Copyright (C) 2010-2011 DeSmuME team
|
||||||
|
|
||||||
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
DeSmuME is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
DeSmuME is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with DeSmuME; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stack>
|
||||||
|
|
||||||
|
#include "../types.h"
|
||||||
|
#include "../debug.h"
|
||||||
|
#include "../fs.h"
|
||||||
|
|
||||||
|
#include "emufat.h"
|
||||||
|
#include "vfat.h"
|
||||||
|
#include "libfat/libfat_public_api.h"
|
||||||
|
|
||||||
|
|
||||||
|
enum EListCallbackArg {
|
||||||
|
EListCallbackArg_Item, EListCallbackArg_Pop
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef void (*ListCallback)(FsEntry* fs, EListCallbackArg);
|
||||||
|
|
||||||
|
// List all files and subdirectories recursively
|
||||||
|
static void list_files(const char *filepath, ListCallback list_callback)
|
||||||
|
{
|
||||||
|
char DirSpec[255+1], SubDir[255+1];
|
||||||
|
FsEntry entry;
|
||||||
|
void * hFind;
|
||||||
|
char *fname;
|
||||||
|
u32 dwError;
|
||||||
|
|
||||||
|
strncpy(DirSpec, filepath, ARRAY_SIZE(DirSpec));
|
||||||
|
DirSpec[255] = 0 ; // hard limit the string here
|
||||||
|
|
||||||
|
hFind = FsReadFirst(DirSpec, &entry);
|
||||||
|
if (hFind == NULL) return;
|
||||||
|
|
||||||
|
fname = (strlen(entry.cAlternateFileName)>0) ? entry.cAlternateFileName : entry.cFileName;
|
||||||
|
list_callback(&entry,EListCallbackArg_Item);
|
||||||
|
|
||||||
|
while (FsReadNext(hFind, &entry) != 0)
|
||||||
|
{
|
||||||
|
fname = (strlen(entry.cAlternateFileName)>0) ? entry.cAlternateFileName : entry.cFileName;
|
||||||
|
list_callback(&entry,EListCallbackArg_Item);
|
||||||
|
printf("cflash added %s\n",entry.cFileName);
|
||||||
|
|
||||||
|
if ((entry.flags & FS_IS_DIR) && (strcmp(fname, ".")) && (strcmp(fname, "..")))
|
||||||
|
{
|
||||||
|
if (strlen(fname)+strlen(filepath)+2 < 256)
|
||||||
|
{
|
||||||
|
sprintf(SubDir, "%s%c%s", filepath, FS_SEPARATOR, fname);
|
||||||
|
list_files(SubDir, list_callback);
|
||||||
|
list_callback(&entry, EListCallbackArg_Pop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dwError = FsError();
|
||||||
|
FsClose(hFind);
|
||||||
|
if (dwError != FS_ERR_NO_MORE_FILES) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static u64 dataSectors = 0;
|
||||||
|
void count_ListCallback(FsEntry* fs, EListCallbackArg arg)
|
||||||
|
{
|
||||||
|
if(arg == EListCallbackArg_Pop) return;
|
||||||
|
u32 sectors = 1;
|
||||||
|
if(fs->flags & FS_IS_DIR)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sectors += (fs->fileSize+511)/512 + 1;
|
||||||
|
dataSectors += sectors;
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::string currPath;
|
||||||
|
static std::stack<std::string> pathStack;
|
||||||
|
static std::stack<std::string> virtPathStack;
|
||||||
|
static std::string currVirtPath;
|
||||||
|
void build_ListCallback(FsEntry* fs, EListCallbackArg arg)
|
||||||
|
{
|
||||||
|
char* fname = (strlen(fs->cAlternateFileName)>0) ? fs->cAlternateFileName : fs->cFileName;
|
||||||
|
|
||||||
|
//we use cFileName always because it is a LFN and we are making sure that we always make a fat32 image
|
||||||
|
fname = fs->cFileName;
|
||||||
|
|
||||||
|
if(arg == EListCallbackArg_Pop)
|
||||||
|
{
|
||||||
|
currPath = pathStack.top();
|
||||||
|
pathStack.pop();
|
||||||
|
currVirtPath = virtPathStack.top();
|
||||||
|
virtPathStack.pop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(fs->flags & FS_IS_DIR)
|
||||||
|
{
|
||||||
|
if(!strcmp(fname,".")) return;
|
||||||
|
if(!strcmp(fname,"..")) return;
|
||||||
|
|
||||||
|
pathStack.push(currPath);
|
||||||
|
virtPathStack.push(currVirtPath);
|
||||||
|
|
||||||
|
currVirtPath = currVirtPath + "/" + fname;
|
||||||
|
bool ok = LIBFAT::MkDir(currVirtPath.c_str());
|
||||||
|
|
||||||
|
if(!ok)
|
||||||
|
printf("ERROR adding dir %s via libfat\n",currVirtPath.c_str());
|
||||||
|
|
||||||
|
currPath = currPath + std::string(1,FS_SEPARATOR) + fname;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::string path = currPath + std::string(1,FS_SEPARATOR) + fname;
|
||||||
|
|
||||||
|
FILE* inf = fopen(path.c_str(),"rb");
|
||||||
|
if(inf)
|
||||||
|
{
|
||||||
|
fseek(inf,0,SEEK_END);
|
||||||
|
long len = ftell(inf);
|
||||||
|
fseek(inf,0,SEEK_SET);
|
||||||
|
u8 *buf = new u8[len];
|
||||||
|
fread(buf,1,len,inf);
|
||||||
|
fclose(inf);
|
||||||
|
|
||||||
|
std::string path = currVirtPath + "/" + fname;
|
||||||
|
bool ok = LIBFAT::WriteFile(path.c_str(),buf,len);
|
||||||
|
if(!ok)
|
||||||
|
printf("ERROR adding file %s via libfat\n",path.c_str());
|
||||||
|
delete[] buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool VFAT::build(const char* path, int extra_MB)
|
||||||
|
{
|
||||||
|
dataSectors = 0;
|
||||||
|
currVirtPath = "";
|
||||||
|
currPath = path;
|
||||||
|
list_files(path, count_ListCallback);
|
||||||
|
|
||||||
|
dataSectors += 8; //a few for reserved sectors, etc.
|
||||||
|
|
||||||
|
dataSectors += extra_MB*1024*1024/512; //add extra write space
|
||||||
|
//dataSectors += 16*1024*1024/512; //add 16MB worth of write space. this is probably enough for anyone, but maybe it should be configurable.
|
||||||
|
//we could always suggest to users to add a big file to their directory to overwrite (that would cause the image to get padded)
|
||||||
|
|
||||||
|
//this seems to be the minimum size that will turn into a solid fat32
|
||||||
|
if(dataSectors<36*1024*1024/512)
|
||||||
|
dataSectors = 36*1024*1024/512;
|
||||||
|
|
||||||
|
if(dataSectors>=(0x80000000>>9))
|
||||||
|
{
|
||||||
|
printf("error allocating memory for fat (%d KBytes)\n",(dataSectors*512)/1024);
|
||||||
|
printf("total fat sizes > 2GB are never going to work\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
delete file;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
file = new EMUFILE_MEMORY(dataSectors*512);
|
||||||
|
}
|
||||||
|
catch(std::bad_alloc)
|
||||||
|
{
|
||||||
|
printf("error allocating memory for fat (%d KBytes)\n",(dataSectors*512)/1024);
|
||||||
|
printf("(out of memory)\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//debug..
|
||||||
|
//file = new EMUFILE_FILE("c:\\temp.ima","rb+");
|
||||||
|
|
||||||
|
//format the disk
|
||||||
|
{
|
||||||
|
EmuFat fat(file);
|
||||||
|
EmuFatVolume vol;
|
||||||
|
u8 ok = vol.init(&fat);
|
||||||
|
vol.formatNew(dataSectors);
|
||||||
|
|
||||||
|
//ensure we are working in memory, just in case we were testing with a disk file.
|
||||||
|
//libfat will need to go straight to memory (for now; we could easily change it to work with the disk)
|
||||||
|
file = file->memwrap();
|
||||||
|
}
|
||||||
|
EMUFILE_MEMORY* memf = (EMUFILE_MEMORY*)file;
|
||||||
|
|
||||||
|
//setup libfat and write all the files through it
|
||||||
|
LIBFAT::Init(memf->buf(),memf->size());
|
||||||
|
list_files(path, build_ListCallback);
|
||||||
|
LIBFAT::Shutdown();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
VFAT::VFAT()
|
||||||
|
: file(NULL)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
VFAT::~VFAT()
|
||||||
|
{
|
||||||
|
delete file;
|
||||||
|
}
|
||||||
|
|
||||||
|
EMUFILE* VFAT::detach()
|
||||||
|
{
|
||||||
|
EMUFILE* ret = file;
|
||||||
|
file = NULL;
|
||||||
|
return ret;
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
/* Copyright (C) 2011 DeSmuME team
|
||||||
|
|
||||||
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
DeSmuME is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
DeSmuME is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with DeSmuME; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _VFAT_H
|
||||||
|
|
||||||
|
class EMUFILE;
|
||||||
|
|
||||||
|
//THIS CLASS IS NOT THREAD SAFE!! SORRY SO SLOPPY
|
||||||
|
class VFAT
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
VFAT();
|
||||||
|
~VFAT();
|
||||||
|
bool build(const char* path, int extra_MB=0);
|
||||||
|
|
||||||
|
EMUFILE* detach();
|
||||||
|
|
||||||
|
private:
|
||||||
|
EMUFILE* file;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //_VFAT_H
|
|
@ -454,7 +454,7 @@
|
||||||
StructMemberAlignment="0"
|
StructMemberAlignment="0"
|
||||||
BufferSecurityCheck="false"
|
BufferSecurityCheck="false"
|
||||||
EnableFunctionLevelLinking="false"
|
EnableFunctionLevelLinking="false"
|
||||||
EnableEnhancedInstructionSet="2"
|
EnableEnhancedInstructionSet="0"
|
||||||
FloatingPointModel="2"
|
FloatingPointModel="2"
|
||||||
RuntimeTypeInfo="false"
|
RuntimeTypeInfo="false"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
|
@ -1232,7 +1232,7 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag"
|
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag
"
|
||||||
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
||||||
Outputs=".libs\lua.tag"
|
Outputs=".libs\lua.tag"
|
||||||
/>
|
/>
|
||||||
|
@ -1242,7 +1242,7 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag"
|
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag
"
|
||||||
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
||||||
Outputs=".libs\lua.tag"
|
Outputs=".libs\lua.tag"
|
||||||
/>
|
/>
|
||||||
|
@ -1252,7 +1252,7 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag"
|
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag
"
|
||||||
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
||||||
Outputs=".libs\lua.tag"
|
Outputs=".libs\lua.tag"
|
||||||
/>
|
/>
|
||||||
|
@ -1262,7 +1262,7 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag"
|
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag
"
|
||||||
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
||||||
Outputs=".libs\lua.tag"
|
Outputs=".libs\lua.tag"
|
||||||
/>
|
/>
|
||||||
|
@ -1272,7 +1272,7 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag"
|
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag
"
|
||||||
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
||||||
Outputs=".libs\lua.tag"
|
Outputs=".libs\lua.tag"
|
||||||
/>
|
/>
|
||||||
|
@ -1282,7 +1282,7 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag"
|
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag
"
|
||||||
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
||||||
Outputs=".libs\lua.tag"
|
Outputs=".libs\lua.tag"
|
||||||
/>
|
/>
|
||||||
|
@ -1377,6 +1377,18 @@
|
||||||
RelativePath="..\utils\dlditool.cpp"
|
RelativePath="..\utils\dlditool.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\utils\emufat.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\utils\emufat.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\utils\emufat_types.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\utils\guid.cpp"
|
RelativePath="..\utils\guid.cpp"
|
||||||
>
|
>
|
||||||
|
@ -1405,6 +1417,14 @@
|
||||||
RelativePath="..\utils\valuearray.h"
|
RelativePath="..\utils\valuearray.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\utils\vfat.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\utils\vfat.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\utils\xstring.cpp"
|
RelativePath="..\utils\xstring.cpp"
|
||||||
>
|
>
|
||||||
|
@ -1611,10 +1631,6 @@
|
||||||
<Filter
|
<Filter
|
||||||
Name="addons"
|
Name="addons"
|
||||||
>
|
>
|
||||||
<File
|
|
||||||
RelativePath="..\addons\compactFlash.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\addons\expMemory.cpp"
|
RelativePath="..\addons\expMemory.cpp"
|
||||||
>
|
>
|
||||||
|
@ -1651,6 +1667,10 @@
|
||||||
RelativePath="..\addons\slot1_retail.cpp"
|
RelativePath="..\addons\slot1_retail.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\addons\slot2_mpcf.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="metaspu"
|
Name="metaspu"
|
||||||
|
@ -1960,18 +1980,6 @@
|
||||||
RelativePath="..\driver.h"
|
RelativePath="..\driver.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\emufat.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\emufat.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\emufat_types.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\emufile.cpp"
|
RelativePath="..\emufile.cpp"
|
||||||
>
|
>
|
||||||
|
|
|
@ -718,18 +718,6 @@
|
||||||
RelativePath="..\driver.h"
|
RelativePath="..\driver.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\emufat.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\emufat.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\emufat_types.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\emufile.cpp"
|
RelativePath="..\emufile.cpp"
|
||||||
>
|
>
|
||||||
|
@ -1005,10 +993,6 @@
|
||||||
<Filter
|
<Filter
|
||||||
Name="addons"
|
Name="addons"
|
||||||
>
|
>
|
||||||
<File
|
|
||||||
RelativePath="..\addons\compactFlash.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\addons\expMemory.cpp"
|
RelativePath="..\addons\expMemory.cpp"
|
||||||
>
|
>
|
||||||
|
@ -1045,6 +1029,10 @@
|
||||||
RelativePath="..\addons\slot1_retail.cpp"
|
RelativePath="..\addons\slot1_retail.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\addons\slot2_mpcf.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="gdbstub"
|
Name="gdbstub"
|
||||||
|
@ -1081,6 +1069,14 @@
|
||||||
RelativePath="..\utils\dlditool.cpp"
|
RelativePath="..\utils\dlditool.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\utils\emufat.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\utils\emufat.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\utils\guid.cpp"
|
RelativePath="..\utils\guid.cpp"
|
||||||
>
|
>
|
||||||
|
@ -1109,6 +1105,14 @@
|
||||||
RelativePath="..\utils\valuearray.h"
|
RelativePath="..\utils\valuearray.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\utils\vfat.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\utils\vfat.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\utils\xstring.cpp"
|
RelativePath="..\utils\xstring.cpp"
|
||||||
>
|
>
|
||||||
|
@ -2005,7 +2009,7 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag"
|
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag
"
|
||||||
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
||||||
Outputs=".libs\lua.tag"
|
Outputs=".libs\lua.tag"
|
||||||
/>
|
/>
|
||||||
|
@ -2015,7 +2019,7 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag"
|
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag
"
|
||||||
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
||||||
Outputs=".libs\lua.tag"
|
Outputs=".libs\lua.tag"
|
||||||
/>
|
/>
|
||||||
|
@ -2025,7 +2029,7 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag"
|
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag
"
|
||||||
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
||||||
Outputs=".libs\lua.tag"
|
Outputs=".libs\lua.tag"
|
||||||
/>
|
/>
|
||||||
|
@ -2035,7 +2039,7 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag"
|
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag
"
|
||||||
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
||||||
Outputs=".libs\lua.tag"
|
Outputs=".libs\lua.tag"
|
||||||
/>
|
/>
|
||||||
|
@ -2045,7 +2049,7 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag"
|
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag
"
|
||||||
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
AdditionalDependencies="7z.exe;un7z_and_touch.bat"
|
||||||
Outputs=".libs\lua.tag"
|
Outputs=".libs\lua.tag"
|
||||||
/>
|
/>
|
||||||
|
@ -2055,7 +2059,7 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag"
|
CommandLine="un7z_and_touch.bat lua\lua.7z .libs\win32\lua* .libs\x64\lua* .libs\lua.tag
"
|
||||||
Outputs=".libs\lua.tag"
|
Outputs=".libs\lua.tag"
|
||||||
/>
|
/>
|
||||||
</FileConfiguration>
|
</FileConfiguration>
|
||||||
|
|
|
@ -432,6 +432,7 @@
|
||||||
<ClCompile Include="..\addons\slot1_none.cpp" />
|
<ClCompile Include="..\addons\slot1_none.cpp" />
|
||||||
<ClCompile Include="..\addons\slot1_r4.cpp" />
|
<ClCompile Include="..\addons\slot1_r4.cpp" />
|
||||||
<ClCompile Include="..\addons\slot1_retail.cpp" />
|
<ClCompile Include="..\addons\slot1_retail.cpp" />
|
||||||
|
<ClCompile Include="..\addons\slot2_mpcf.cpp" />
|
||||||
<ClCompile Include="..\aggdraw.cpp" />
|
<ClCompile Include="..\aggdraw.cpp" />
|
||||||
<ClCompile Include="..\arm_instructions.cpp" />
|
<ClCompile Include="..\arm_instructions.cpp" />
|
||||||
<ClCompile Include="..\armcpu.cpp" />
|
<ClCompile Include="..\armcpu.cpp" />
|
||||||
|
@ -447,7 +448,6 @@
|
||||||
<ClCompile Include="..\debug.cpp" />
|
<ClCompile Include="..\debug.cpp" />
|
||||||
<ClCompile Include="..\Disassembler.cpp" />
|
<ClCompile Include="..\Disassembler.cpp" />
|
||||||
<ClCompile Include="..\driver.cpp" />
|
<ClCompile Include="..\driver.cpp" />
|
||||||
<ClCompile Include="..\emufat.cpp" />
|
|
||||||
<ClCompile Include="..\emufile.cpp" />
|
<ClCompile Include="..\emufile.cpp" />
|
||||||
<ClCompile Include="..\FIFO.cpp" />
|
<ClCompile Include="..\FIFO.cpp" />
|
||||||
<ClCompile Include="..\firmware.cpp" />
|
<ClCompile Include="..\firmware.cpp" />
|
||||||
|
@ -475,6 +475,7 @@
|
||||||
<ClCompile Include="..\thumb_instructions.cpp" />
|
<ClCompile Include="..\thumb_instructions.cpp" />
|
||||||
<ClCompile Include="..\utils\datetime.cpp" />
|
<ClCompile Include="..\utils\datetime.cpp" />
|
||||||
<ClCompile Include="..\utils\dlditool.cpp" />
|
<ClCompile Include="..\utils\dlditool.cpp" />
|
||||||
|
<ClCompile Include="..\utils\emufat.cpp" />
|
||||||
<ClCompile Include="..\utils\libfat\cache.cpp" />
|
<ClCompile Include="..\utils\libfat\cache.cpp" />
|
||||||
<ClCompile Include="..\utils\libfat\directory.cpp" />
|
<ClCompile Include="..\utils\libfat\directory.cpp" />
|
||||||
<ClCompile Include="..\utils\libfat\disc.cpp" />
|
<ClCompile Include="..\utils\libfat\disc.cpp" />
|
||||||
|
@ -486,9 +487,9 @@
|
||||||
<ClCompile Include="..\utils\libfat\libfat_public_api.cpp" />
|
<ClCompile Include="..\utils\libfat\libfat_public_api.cpp" />
|
||||||
<ClCompile Include="..\utils\libfat\lock.cpp" />
|
<ClCompile Include="..\utils\libfat\lock.cpp" />
|
||||||
<ClCompile Include="..\utils\libfat\partition.cpp" />
|
<ClCompile Include="..\utils\libfat\partition.cpp" />
|
||||||
|
<ClCompile Include="..\utils\vfat.cpp" />
|
||||||
<ClCompile Include="..\version.cpp" />
|
<ClCompile Include="..\version.cpp" />
|
||||||
<ClCompile Include="..\wifi.cpp" />
|
<ClCompile Include="..\wifi.cpp" />
|
||||||
<ClCompile Include="..\addons\compactFlash.cpp" />
|
|
||||||
<ClCompile Include="..\addons\expMemory.cpp" />
|
<ClCompile Include="..\addons\expMemory.cpp" />
|
||||||
<ClCompile Include="..\addons\gbagame.cpp" />
|
<ClCompile Include="..\addons\gbagame.cpp" />
|
||||||
<ClCompile Include="..\addons\guitarGrip.cpp" />
|
<ClCompile Include="..\addons\guitarGrip.cpp" />
|
||||||
|
@ -574,7 +575,6 @@
|
||||||
<ClInclude Include="..\debug.h" />
|
<ClInclude Include="..\debug.h" />
|
||||||
<ClInclude Include="..\Disassembler.h" />
|
<ClInclude Include="..\Disassembler.h" />
|
||||||
<ClInclude Include="..\driver.h" />
|
<ClInclude Include="..\driver.h" />
|
||||||
<ClInclude Include="..\emufat.h" />
|
|
||||||
<ClInclude Include="..\emufat_types.h" />
|
<ClInclude Include="..\emufat_types.h" />
|
||||||
<ClInclude Include="..\emufile.h" />
|
<ClInclude Include="..\emufile.h" />
|
||||||
<ClInclude Include="..\fat.h" />
|
<ClInclude Include="..\fat.h" />
|
||||||
|
@ -609,6 +609,8 @@
|
||||||
<ClInclude Include="..\thumb_instructions.h" />
|
<ClInclude Include="..\thumb_instructions.h" />
|
||||||
<ClInclude Include="..\types.h" />
|
<ClInclude Include="..\types.h" />
|
||||||
<ClInclude Include="..\utils\datetime.h" />
|
<ClInclude Include="..\utils\datetime.h" />
|
||||||
|
<ClInclude Include="..\utils\emufat.h" />
|
||||||
|
<ClInclude Include="..\utils\emufat_types.h" />
|
||||||
<ClInclude Include="..\utils\libfat\bit_ops.h" />
|
<ClInclude Include="..\utils\libfat\bit_ops.h" />
|
||||||
<ClInclude Include="..\utils\libfat\cache.h" />
|
<ClInclude Include="..\utils\libfat\cache.h" />
|
||||||
<ClInclude Include="..\utils\libfat\common.h" />
|
<ClInclude Include="..\utils\libfat\common.h" />
|
||||||
|
@ -625,6 +627,7 @@
|
||||||
<ClInclude Include="..\utils\libfat\lock.h" />
|
<ClInclude Include="..\utils\libfat\lock.h" />
|
||||||
<ClInclude Include="..\utils\libfat\mem_allocate.h" />
|
<ClInclude Include="..\utils\libfat\mem_allocate.h" />
|
||||||
<ClInclude Include="..\utils\libfat\partition.h" />
|
<ClInclude Include="..\utils\libfat\partition.h" />
|
||||||
|
<ClInclude Include="..\utils\vfat.h" />
|
||||||
<ClInclude Include="..\version.h" />
|
<ClInclude Include="..\version.h" />
|
||||||
<ClInclude Include="..\wifi.h" />
|
<ClInclude Include="..\wifi.h" />
|
||||||
<ClInclude Include="..\utils\xstring.h" />
|
<ClInclude Include="..\utils\xstring.h" />
|
||||||
|
|
|
@ -165,9 +165,6 @@
|
||||||
<ClCompile Include="..\wifi.cpp">
|
<ClCompile Include="..\wifi.cpp">
|
||||||
<Filter>Core</Filter>
|
<Filter>Core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\addons\compactFlash.cpp">
|
|
||||||
<Filter>Core\addons</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\addons\expMemory.cpp">
|
<ClCompile Include="..\addons\expMemory.cpp">
|
||||||
<Filter>Core\addons</Filter>
|
<Filter>Core\addons</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -396,9 +393,6 @@
|
||||||
<ClCompile Include="..\addons\slot1_retail.cpp">
|
<ClCompile Include="..\addons\slot1_retail.cpp">
|
||||||
<Filter>Core\addons</Filter>
|
<Filter>Core\addons</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\emufat.cpp">
|
|
||||||
<Filter>Core</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\utils\datetime.cpp">
|
<ClCompile Include="..\utils\datetime.cpp">
|
||||||
<Filter>Core\utils</Filter>
|
<Filter>Core\utils</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -438,6 +432,15 @@
|
||||||
<ClCompile Include="..\path.cpp">
|
<ClCompile Include="..\path.cpp">
|
||||||
<Filter>Core</Filter>
|
<Filter>Core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\addons\slot2_mpcf.cpp">
|
||||||
|
<Filter>Core\addons</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\utils\vfat.cpp">
|
||||||
|
<Filter>Core\utils</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\utils\emufat.cpp">
|
||||||
|
<Filter>Core\utils</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\addons.h">
|
<ClInclude Include="..\addons.h">
|
||||||
|
@ -767,9 +770,6 @@
|
||||||
<ClInclude Include="filter\hq2x.h" />
|
<ClInclude Include="filter\hq2x.h" />
|
||||||
<ClInclude Include="filter\interp.h" />
|
<ClInclude Include="filter\interp.h" />
|
||||||
<ClInclude Include="filter\lq2x.h" />
|
<ClInclude Include="filter\lq2x.h" />
|
||||||
<ClInclude Include="..\emufat.h">
|
|
||||||
<Filter>Core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\emufat_types.h" />
|
<ClInclude Include="..\emufat_types.h" />
|
||||||
<ClInclude Include="..\utils\datetime.h">
|
<ClInclude Include="..\utils\datetime.h">
|
||||||
<Filter>Core\utils</Filter>
|
<Filter>Core\utils</Filter>
|
||||||
|
@ -822,6 +822,15 @@
|
||||||
<ClInclude Include="..\utils\libfat\mem_allocate.h">
|
<ClInclude Include="..\utils\libfat\mem_allocate.h">
|
||||||
<Filter>Core\utils\libfat</Filter>
|
<Filter>Core\utils\libfat</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\utils\vfat.h">
|
||||||
|
<Filter>Core\utils</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\utils\emufat.h">
|
||||||
|
<Filter>Core\utils</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\utils\emufat_types.h">
|
||||||
|
<Filter>Core\utils</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\instruction_tabdef.inc">
|
<None Include="..\instruction_tabdef.inc">
|
||||||
|
|
|
@ -117,7 +117,7 @@ INT_PTR CALLBACK GbaSlotCFlash(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam
|
||||||
ofn.lStructSize = sizeof(ofn);
|
ofn.lStructSize = sizeof(ofn);
|
||||||
ofn.hwndOwner = dialog;
|
ofn.hwndOwner = dialog;
|
||||||
|
|
||||||
const char *fileFilter = "Compact Flash image (*.img)\0*.img\0Any file (*.*)\0*.*\0";
|
const char *fileFilter = "FAT image (*.img)\0*.img\0Any file (*.*)\0*.*\0";
|
||||||
|
|
||||||
ofn.lpstrFilter = fileFilter;
|
ofn.lpstrFilter = fileFilter;
|
||||||
ofn.nFilterIndex = 1;
|
ofn.nFilterIndex = 1;
|
||||||
|
@ -144,7 +144,7 @@ INT_PTR CALLBACK GbaSlotCFlash(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam
|
||||||
bp.hwndOwner=dialog;
|
bp.hwndOwner=dialog;
|
||||||
bp.pidlRoot=NULL;
|
bp.pidlRoot=NULL;
|
||||||
bp.pszDisplayName=NULL;
|
bp.pszDisplayName=NULL;
|
||||||
bp.lpszTitle="Select directory for Compact Flash";
|
bp.lpszTitle="Select directory for FAT image building";
|
||||||
bp.ulFlags=BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_USENEWUI;
|
bp.ulFlags=BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_USENEWUI;
|
||||||
bp.lpfn=NULL;
|
bp.lpfn=NULL;
|
||||||
|
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue