Make core need_fullpath = false and pass memory buffer and size

of ROM from frontend to core
This commit is contained in:
twinaphex
2014-12-09 01:45:15 +01:00
parent 0e8d488cc7
commit ea0d1f8046
6 changed files with 33 additions and 7 deletions

View File

@@ -115,8 +115,12 @@ void FCEUI_DisableSpriteLimitation(int a);
/* -1 = no change, 0 = show, 1 = hide, 2 = internal toggle */
void FCEUI_SetRenderDisable(int sprites, int bg);
#ifdef __LIBRETRO__
FCEUGI *FCEUI_LoadGame(const char *name, uint8_t *buf, size_t bufsize);
#else
/* name=path and file to load. returns 0 on failure, 1 on success */
FCEUGI *FCEUI_LoadGame(const char *name);
#endif
#ifdef COPYFAMI
/* Fake UNIF board to start new CFHI instance */

View File

@@ -227,7 +227,7 @@ int iNESLoad(const char *name, FCEUFILE *fp);
int FDSLoad(const char *name, FCEUFILE *fp);
int NSFLoad(FCEUFILE *fp);
FCEUGI *FCEUI_LoadGame(const char *name)
FCEUGI *FCEUI_LoadGame(const char *name, uint8_t *databuf, size_t databufsize)
{
FCEUFILE *fp;
@@ -249,7 +249,7 @@ FCEUGI *FCEUI_LoadGame(const char *name)
GetFileBase(name);
fp = FCEU_fopen(name, NULL, "rb", 0);
fp = FCEU_fopen(name, NULL, "rb", 0, databuf, databufsize);
if (!fp) {
FCEU_PrintError("Error opening \"%s\"!", name);

View File

@@ -669,7 +669,7 @@ int FDSLoad(const char *name, FCEUFILE *fp) {
memcpy(diskdatao[x], diskdata[x], 65500);
}
if ((tp = FCEU_fopen(fn, 0, "rb", 0))) {
if ((tp = FCEU_fopen(fn, 0, "rb", 0, NULL, 0))) {
FCEU_printf("Disk was written. Auxillary FDS file open \"%s\".\n", fn);
FreeFDSMemory();
if (!SubLoad(tp)) {

View File

@@ -63,7 +63,22 @@ doret:
return tmp;
}
FCEUFILE * FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext)
static MEMWRAP *MakeMemWrapBuffer(void *tz, int type, uint8 *buffer, size_t bufsize)
{
MEMWRAP *tmp = (MEMWRAP*)FCEU_malloc(sizeof(MEMWRAP));
if (!tmp)
return NULL;
tmp->location = 0;
tmp->size = bufsize;
tmp->data = buffer;
return tmp;
}
FCEUFILE * FCEU_fopen(const char *path, const char *ipsfn,
char *mode, char *ext, uint8 *buffer, size_t bufsize)
{
FCEUFILE *fceufp = (FCEUFILE*)malloc(sizeof(FCEUFILE));
void *t = fopen(path, mode);
@@ -76,7 +91,10 @@ FCEUFILE * FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext
fseek((FILE*)t, 0, SEEK_SET);
fceufp->type = 0;
fceufp->fp = MakeMemWrap(t, 0);
if (buffer)
fceufp->fp = MakeMemWrapBuffer(t, 0, buffer, bufsize);
else
fceufp->fp = MakeMemWrap(t, 0);
return fceufp;
}

View File

@@ -475,7 +475,7 @@ void retro_set_environment(retro_environment_t cb)
void retro_get_system_info(struct retro_system_info *info)
{
info->need_fullpath = true;
info->need_fullpath = false;
info->valid_extensions = "fds|nes|unif";
info->library_version = "(SVN)";
info->library_name = "FCEUmm";
@@ -561,7 +561,7 @@ static bool fceu_init(const struct retro_game_info *game)
FCEUI_SetSoundVolume(256);
FCEUI_Sound(32050);
GameInfo = (FCEUGI*)FCEUI_LoadGame(game->path);
GameInfo = (FCEUGI*)FCEUI_LoadGame(game->path, (uint8_t*)game->data, game->size);
if (!GameInfo)
return false;

View File

@@ -18,7 +18,11 @@ typedef struct {
uint32 type; // 0=normal file, 1=gzip, 2=zip
} FCEUFILE;
#ifdef __LIBRETRO__
FCEUFILE *FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext, uint8 *buffer, size_t bufsize);
#else
FCEUFILE *FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext);
#endif
int FCEU_fclose(FCEUFILE*);
uint64 FCEU_fread(void *ptr, size_t size, size_t nmemb, FCEUFILE*);
uint64 FCEU_fwrite(void *ptr, size_t size, size_t nmemb, FCEUFILE*);