X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fsio.c;h=c2390bf06e36f5d5ae62a96a3f6b70369abbb8d8;hb=908e426cc1ef2187357ed8fb59edd99b8a8060c9;hp=4a0a73c48af1efa77c097f01dff9358dc016f418;hpb=f3a770329bf0ac2d47d442eb70e8fcc25a7f8db2;p=pcsx_rearmed.git diff --git a/libpcsxcore/sio.c b/libpcsxcore/sio.c index 4a0a73c4..c2390bf0 100644 --- a/libpcsxcore/sio.c +++ b/libpcsxcore/sio.c @@ -117,6 +117,20 @@ void sioWrite8(unsigned char value) { break; } } + // NegCon - Wipeout 3 + if( buf[parp] == 0x23 ) { + switch (value) { + // enter config mode + case 0x43: + buf[1] = 0x79; + break; + + // get status + case 0x45: + buf[1] = 0xf3; + break; + } + } } else padst = 0; return; @@ -386,8 +400,10 @@ void sioInterrupt() { PAD_LOG("Sio Interrupt (CP0.Status = %x)\n", psxRegs.CP0.n.Status); #endif // SysPrintf("Sio Interrupt\n"); - StatReg |= IRQ; - psxHu32ref(0x1070) |= SWAPu32(0x80); + if (!(StatReg & IRQ)) { + StatReg |= IRQ; + psxHu32ref(0x1070) |= SWAPu32(0x80); + } } void LoadMcd(int mcd, char *str) { @@ -407,10 +423,19 @@ void LoadMcd(int mcd, char *str) { } McdDisable[mcd - 1] = 0; - if (str == NULL || *str == 0) { +#ifdef HAVE_LIBRETRO + // memcard1 is handled by libretro + if (mcd == 1) + return; +#endif + + if (str == NULL || strcmp(str, "none") == 0) { McdDisable[mcd - 1] = 1; return; } + if (*str == 0) + return; + f = fopen(str, "rb"); if (f == NULL) { SysPrintf(_("The memory card %s doesn't exist - creating it\n"), str); @@ -453,6 +478,9 @@ void LoadMcds(char *mcd1, char *mcd2) { void SaveMcd(char *mcd, char *data, uint32_t adr, int size) { FILE *f; + if (mcd == NULL || *mcd == 0 || strcmp(mcd, "none") == 0) + return; + f = fopen(mcd, "r+b"); if (f != NULL) { struct stat buf; @@ -804,7 +832,7 @@ void GetMcdBlockInfo(int mcd, int block, McdBlock *Info) { strncpy(Info->Name, ptr, 16); } -int sioFreeze(gzFile f, int Mode) { +int sioFreeze(void *f, int Mode) { gzfreeze(buf, sizeof(buf)); gzfreeze(&StatReg, sizeof(StatReg)); gzfreeze(&ModeReg, sizeof(ModeReg));