diff options
Diffstat (limited to 'libpcsxcore/sio.c')
| -rwxr-xr-x | libpcsxcore/sio.c | 45 |
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) { |
