Make core need_fullpath = false and pass memory buffer and size
of ROM from frontend to core
This commit is contained in:
@@ -115,8 +115,12 @@ void FCEUI_DisableSpriteLimitation(int a);
|
|||||||
/* -1 = no change, 0 = show, 1 = hide, 2 = internal toggle */
|
/* -1 = no change, 0 = show, 1 = hide, 2 = internal toggle */
|
||||||
void FCEUI_SetRenderDisable(int sprites, int bg);
|
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 */
|
/* name=path and file to load. returns 0 on failure, 1 on success */
|
||||||
FCEUGI *FCEUI_LoadGame(const char *name);
|
FCEUGI *FCEUI_LoadGame(const char *name);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef COPYFAMI
|
#ifdef COPYFAMI
|
||||||
/* Fake UNIF board to start new CFHI instance */
|
/* Fake UNIF board to start new CFHI instance */
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ int iNESLoad(const char *name, FCEUFILE *fp);
|
|||||||
int FDSLoad(const char *name, FCEUFILE *fp);
|
int FDSLoad(const char *name, FCEUFILE *fp);
|
||||||
int NSFLoad(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;
|
FCEUFILE *fp;
|
||||||
|
|
||||||
@@ -249,7 +249,7 @@ FCEUGI *FCEUI_LoadGame(const char *name)
|
|||||||
|
|
||||||
GetFileBase(name);
|
GetFileBase(name);
|
||||||
|
|
||||||
fp = FCEU_fopen(name, NULL, "rb", 0);
|
fp = FCEU_fopen(name, NULL, "rb", 0, databuf, databufsize);
|
||||||
|
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
FCEU_PrintError("Error opening \"%s\"!", name);
|
FCEU_PrintError("Error opening \"%s\"!", name);
|
||||||
|
|||||||
@@ -669,7 +669,7 @@ int FDSLoad(const char *name, FCEUFILE *fp) {
|
|||||||
memcpy(diskdatao[x], diskdata[x], 65500);
|
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);
|
FCEU_printf("Disk was written. Auxillary FDS file open \"%s\".\n", fn);
|
||||||
FreeFDSMemory();
|
FreeFDSMemory();
|
||||||
if (!SubLoad(tp)) {
|
if (!SubLoad(tp)) {
|
||||||
|
|||||||
@@ -63,7 +63,22 @@ doret:
|
|||||||
return tmp;
|
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));
|
FCEUFILE *fceufp = (FCEUFILE*)malloc(sizeof(FCEUFILE));
|
||||||
void *t = fopen(path, mode);
|
void *t = fopen(path, mode);
|
||||||
@@ -76,6 +91,9 @@ FCEUFILE * FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext
|
|||||||
|
|
||||||
fseek((FILE*)t, 0, SEEK_SET);
|
fseek((FILE*)t, 0, SEEK_SET);
|
||||||
fceufp->type = 0;
|
fceufp->type = 0;
|
||||||
|
if (buffer)
|
||||||
|
fceufp->fp = MakeMemWrapBuffer(t, 0, buffer, bufsize);
|
||||||
|
else
|
||||||
fceufp->fp = MakeMemWrap(t, 0);
|
fceufp->fp = MakeMemWrap(t, 0);
|
||||||
return fceufp;
|
return fceufp;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -475,7 +475,7 @@ void retro_set_environment(retro_environment_t cb)
|
|||||||
|
|
||||||
void retro_get_system_info(struct retro_system_info *info)
|
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->valid_extensions = "fds|nes|unif";
|
||||||
info->library_version = "(SVN)";
|
info->library_version = "(SVN)";
|
||||||
info->library_name = "FCEUmm";
|
info->library_name = "FCEUmm";
|
||||||
@@ -561,7 +561,7 @@ static bool fceu_init(const struct retro_game_info *game)
|
|||||||
FCEUI_SetSoundVolume(256);
|
FCEUI_SetSoundVolume(256);
|
||||||
FCEUI_Sound(32050);
|
FCEUI_Sound(32050);
|
||||||
|
|
||||||
GameInfo = (FCEUGI*)FCEUI_LoadGame(game->path);
|
GameInfo = (FCEUGI*)FCEUI_LoadGame(game->path, (uint8_t*)game->data, game->size);
|
||||||
if (!GameInfo)
|
if (!GameInfo)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,11 @@ typedef struct {
|
|||||||
uint32 type; // 0=normal file, 1=gzip, 2=zip
|
uint32 type; // 0=normal file, 1=gzip, 2=zip
|
||||||
} FCEUFILE;
|
} 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);
|
FCEUFILE *FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext);
|
||||||
|
#endif
|
||||||
int FCEU_fclose(FCEUFILE*);
|
int FCEU_fclose(FCEUFILE*);
|
||||||
uint64 FCEU_fread(void *ptr, size_t size, size_t nmemb, 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*);
|
uint64 FCEU_fwrite(void *ptr, size_t size, size_t nmemb, FCEUFILE*);
|
||||||
|
|||||||
Reference in New Issue
Block a user