-Noticed a couple of files with missing copyrights. I hope it's correct now.
-Added support for importing *.duc files. You just have to call NDS_ImportSave with a valid filename specified and it should load any *.duc file
This commit is contained in:
parent
e1d53d42dc
commit
392e879e52
|
@ -250,21 +250,19 @@ int NDS_LoadROM(const char *filename, int bmtype, u32 bmsize)
|
|||
|
||||
// Setup Backup Memory
|
||||
if(type == ROM_DSGBA)
|
||||
{
|
||||
/* be sure that we dont overwrite anything before stringstart */
|
||||
if (strlen(noext)>= strlen(DSGBA_EXTENSTION))
|
||||
{
|
||||
strncpy(noext + strlen(noext) - strlen(DSGBA_EXTENSTION), ".sav",strlen(DSGBA_EXTENSTION)+1);
|
||||
} else
|
||||
{
|
||||
else
|
||||
return -1 ;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* be sure that we dont overwrite anything before stringstart */
|
||||
if (strlen(noext)>=4)
|
||||
{
|
||||
strncpy(noext + strlen(noext) - 4, ".sav",5);
|
||||
} else
|
||||
{
|
||||
else
|
||||
return -1 ;
|
||||
}
|
||||
|
||||
|
@ -446,6 +444,17 @@ void NDS_Reset(void)
|
|||
execute = oldexecute;
|
||||
}
|
||||
|
||||
int NDS_ImportSave(const char *filename)
|
||||
{
|
||||
if (strlen(filename) < 4)
|
||||
return 0;
|
||||
|
||||
if (memcmp(filename+strlen(filename)-4, ".duc", 4) == 0)
|
||||
return mc_load_duc(&MMU.bupmem, filename);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u32 size;
|
||||
|
|
|
@ -1,3 +1,23 @@
|
|||
/* Copyright (C) 2006 thoduv
|
||||
Copyright (C) 2006-2007 Theo Berkau
|
||||
|
||||
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "debug.h"
|
||||
#include "types.h"
|
||||
|
@ -61,8 +81,8 @@ u8 *mc_alloc(memory_chip_t *mc, u32 size)
|
|||
u8 *buffer;
|
||||
buffer = malloc(size);
|
||||
|
||||
if(!buffer) { return NULL; }
|
||||
mc->data = buffer;
|
||||
if(!buffer) { return NULL; }
|
||||
mc->size = size;
|
||||
mc->writeable_buffer = TRUE;
|
||||
}
|
||||
|
@ -194,6 +214,54 @@ void mc_load_file(memory_chip_t *mc, const char* filename)
|
|||
mc->fp = file;
|
||||
}
|
||||
|
||||
int mc_load_duc(memory_chip_t *mc, const char* filename)
|
||||
{
|
||||
long size;
|
||||
int type;
|
||||
char id[16];
|
||||
FILE* file = fopen(filename, "rb");
|
||||
if(file == NULL)
|
||||
return 0;
|
||||
|
||||
fseek(file, 0, SEEK_END);
|
||||
size = ftell(file) - 500;
|
||||
fseek(file, 0, SEEK_SET);
|
||||
|
||||
// Make sure we really have the right file
|
||||
fread((void *)id, sizeof(char), 16, file);
|
||||
|
||||
if (memcmp(id, "ARDS000000000001", 16) != 0)
|
||||
{
|
||||
fclose(file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Alright, it's time to load the file
|
||||
if (mc->type == MC_TYPE_AUTODETECT)
|
||||
{
|
||||
if (size == MC_SIZE_4KBITS)
|
||||
type = MC_TYPE_EEPROM1;
|
||||
else if (size == MC_SIZE_64KBITS)
|
||||
type = MC_TYPE_EEPROM2;
|
||||
else if (size == MC_SIZE_256KBITS)
|
||||
type = MC_TYPE_FRAM;
|
||||
else if (size == MC_SIZE_512KBITS)
|
||||
type = MC_TYPE_EEPROM2;
|
||||
else if (size >= MC_SIZE_2MBITS)
|
||||
type = MC_TYPE_FLASH;
|
||||
mc_realloc(mc, type, size);
|
||||
}
|
||||
|
||||
if (size > mc->size)
|
||||
size = mc->size;
|
||||
// Skip the rest of the header since we don't need it
|
||||
fseek(file, 500, SEEK_SET);
|
||||
fread (mc->data, 1, size, file);
|
||||
fclose(file);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
u8 fw_transfer(memory_chip_t *mc, u8 data)
|
||||
{
|
||||
if(mc->com == FW_CMD_READ || mc->com == FW_CMD_PAGEWRITE) /* check if we are in a command that needs 3 bytes address */
|
||||
|
|
|
@ -1,3 +1,23 @@
|
|||
/* Copyright (C) 2006 thoduv
|
||||
Copyright (C) 2006 Theo Berkau
|
||||
|
||||
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __FW_H__
|
||||
#define __FW_H__
|
||||
|
||||
|
@ -60,6 +80,7 @@ void mc_init(memory_chip_t *mc, int type); /* reset and init values for memor
|
|||
u8 *mc_alloc(memory_chip_t *mc, u32 size); /* alloc mc memory */
|
||||
void mc_realloc(memory_chip_t *mc, int type, u32 size); /* realloc mc memory */
|
||||
void mc_load_file(memory_chip_t *mc, const char* filename); /* load save file and setup fp */
|
||||
int mc_load_duc(memory_chip_t *mc, const char* filename); /* load Action Replay DS save file */
|
||||
void mc_free(memory_chip_t *mc); /* delete mc memory */
|
||||
void mc_reset_com(memory_chip_t *mc); /* reset communication with mc */
|
||||
u8 fw_transfer(memory_chip_t *mc, u8 data); /* transfer to, then receive data from firmware */
|
||||
|
|
Loading…
Reference in New Issue