summaryrefslogtreecommitdiff
path: root/libpcsxcore/sio.c
diff options
context:
space:
mode:
authorRobert Krawczyk <robkraw@gmail.com>2016-04-01 01:09:36 +0200
committerRobert Krawczyk <robkraw@gmail.com>2016-04-01 01:37:04 +0200
commitf671d256e7c1a3365cf2bbc89270363a17d66a1b (patch)
tree3adceaa069f2f66d1a039951fea35d754cf64c67 /libpcsxcore/sio.c
parent3c0cd06addad4e0a957422ee9ecbeb12f24cffac (diff)
downloadpcsxr-f671d256e7c1a3365cf2bbc89270363a17d66a1b.tar.gz
Added:
- per game memory card support (improved version) - save state pictures (F2) - Wipeout MemHack (improved version) Fixed LTCG build and set as default.
Diffstat (limited to 'libpcsxcore/sio.c')
-rwxr-xr-xlibpcsxcore/sio.c45
1 files changed, 30 insertions, 15 deletions
diff --git a/libpcsxcore/sio.c b/libpcsxcore/sio.c
index e4b8fea1..dfa79bb1 100755
--- a/libpcsxcore/sio.c
+++ b/libpcsxcore/sio.c
@@ -801,11 +801,11 @@ unsigned char sioRead8() {
switch (CtrlReg & 0x2002) {
case 0x0002:
memcpy(Mcd1Data + (adrL | (adrH << 8)) * 128, &buf[1], 128);
- SaveMcd(Config.Mcd1, Mcd1Data, (adrL | (adrH << 8)) * 128, 128);
+ SaveMcd(1, Config.Mcd1, Mcd1Data, (adrL | (adrH << 8)) * 128, 128);
break;
case 0x2002:
memcpy(Mcd2Data + (adrL | (adrH << 8)) * 128, &buf[1], 128);
- SaveMcd(Config.Mcd2, Mcd2Data, (adrL | (adrH << 8)) * 128, 128);
+ SaveMcd(2, Config.Mcd2, Mcd2Data, (adrL | (adrH << 8)) * 128, 128);
break;
}
}
@@ -884,23 +884,29 @@ void sioInterrupt() {
void LoadMcd(int mcd, char *str) {
FILE *f;
char *data = NULL;
+ char Mcd[MAXPATHLEN];
if (mcd == 1) data = Mcd1Data;
if (mcd == 2) data = Mcd2Data;
- if (*str == 0) {
+ if (Config.PerGameMcd && mcd && strlen(Config.PsxExeName))
+ sprintf(Mcd, "memcards\\games\\%s-%02d.mcr", Config.PsxExeName, mcd-1);
+ else
+ strcpy(Mcd, str);
+
+ if (*Mcd == 0) {
SysPrintf(_("No memory card value was specified - card %i is not plugged.\n"), mcd);
return;
}
- f = fopen(str, "rb");
+ f = fopen(Mcd, "rb");
if (f == NULL) {
- SysPrintf(_("The memory card %s doesn't exist - creating it\n"), str);
- CreateMcd(str);
- f = fopen(str, "rb");
+ SysPrintf(_("The memory card %s doesn't exist - creating it\n"), Mcd);
+ CreateMcd(Mcd);
+ f = fopen(Mcd, "rb");
if (f != NULL) {
struct stat buf;
- if (stat(str, &buf) != -1) {
+ if (stat(Mcd, &buf) != -1) {
if (buf.st_size == MCD_SIZE + 64)
fseek(f, 64, SEEK_SET);
else if(buf.st_size == MCD_SIZE + 3904)
@@ -910,12 +916,12 @@ void LoadMcd(int mcd, char *str) {
fclose(f);
}
else
- SysMessage(_("Memory card %s failed to load!\n"), str);
+ SysMessage(_("Memory card %s failed to load!\n"), Mcd);
}
else {
struct stat buf;
- SysPrintf(_("Loading memory card %s\n"), str);
- if (stat(str, &buf) != -1) {
+ SysPrintf(_("Loading memory card %s\n"), Mcd);
+ if (stat(Mcd, &buf) != -1) {
if (buf.st_size == MCD_SIZE + 64)
fseek(f, 64, SEEK_SET);
else if(buf.st_size == MCD_SIZE + 3904)
@@ -934,14 +940,20 @@ void LoadMcds(char *mcd1, char *mcd2) {
LoadMcd(2, mcd2);
}
-void SaveMcd(char *mcd, char *data, uint32_t adr, int size) {
+void SaveMcd(int mcd, char *str, char *data, uint32_t adr, int size) {
FILE *f;
+ char Mcd[MAXPATHLEN];
+
+ if (Config.PerGameMcd && mcd && strlen(Config.PsxExeName))
+ sprintf(Mcd, "memcards\\games\\%s-%02d.mcr", Config.PsxExeName, mcd-1);
+ else
+ strcpy(Mcd, str);
- f = fopen(mcd, "r+b");
+ f = fopen(Mcd, "r+b");
if (f != NULL) {
struct stat buf;
- if (stat(mcd, &buf) != -1) {
+ if (stat(Mcd, &buf) != -1) {
if (buf.st_size == MCD_SIZE + 64)
fseek(f, adr + 64, SEEK_SET);
else if (buf.st_size == MCD_SIZE + 3904)
@@ -953,6 +965,9 @@ void SaveMcd(char *mcd, char *data, uint32_t adr, int size) {
fwrite(data + adr, 1, size, f);
fclose(f);
+
+ SysPrintf(_("Saving memory card %s\n"), Mcd);
+
return;
}
@@ -965,7 +980,7 @@ void SaveMcd(char *mcd, char *data, uint32_t adr, int size) {
}
#endif
- ConvertMcd(mcd, data);
+ ConvertMcd(str, data);
}
void CreateMcd(char *mcd) {