diff options
| author | Robert Krawczyk <robkraw@gmail.com> | 2016-04-01 01:09:36 +0200 |
|---|---|---|
| committer | Robert Krawczyk <robkraw@gmail.com> | 2016-04-01 01:37:04 +0200 |
| commit | f671d256e7c1a3365cf2bbc89270363a17d66a1b (patch) | |
| tree | 3adceaa069f2f66d1a039951fea35d754cf64c67 /libpcsxcore/sio.c | |
| parent | 3c0cd06addad4e0a957422ee9ecbeb12f24cffac (diff) | |
| download | pcsxr-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-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) { |
