diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-09-09 17:34:41 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-09-09 17:34:41 +0000 |
| commit | 6936041049176404f801dd69d84f80c878b2f978 (patch) | |
| tree | 7f71eb66f4e32972f04f5f195d4de002d1e65b2d /libpcsxcore | |
| parent | c89f4236ac68d33da253fa7a54ba5d92f008c357 (diff) | |
| download | pcsxr-6936041049176404f801dd69d84f80c878b2f978.tar.gz | |
SIO - Avoid GameShark CDX Enhancement crash (DMA3 buffer overrun)
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@56988 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore')
| -rw-r--r-- | libpcsxcore/cdrom.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index dd40bbf1..dfd14656 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -1179,7 +1179,24 @@ void psxDma3(u32 madr, u32 bcr, u32 chcr) { #endif break; } - memcpy(ptr, cdr.pTransfer, cdsize); +
+ /*
+ GS CDX: Enhancement CD crash
+ - Setloc 0:0:0
+ - CdlPlay
+ - Spams DMA3 and gets buffer overrun
+ */
+
+ if( (cdr.pTransfer-cdr.Transfer) + cdsize > 2352 )
+ {
+ // avoid crash - probably should wrap here
+ //memcpy(ptr, cdr.pTransfer, cdsize);
+ }
+ else
+ {
+ memcpy(ptr, cdr.pTransfer, cdsize);
+ }
+
psxCpu->Clear(madr, cdsize / 4); cdr.pTransfer += cdsize; break; |
