diff options
author | notaz | 2011-07-01 02:33:20 +0300 |
---|---|---|
committer | notaz | 2011-07-13 00:28:48 +0300 |
commit | c7071c43bac47c363e2752365ce32580a8c46b95 (patch) | |
tree | 2b8e59db7a526ab063c7164676f2cff01aabb8a8 /libpcsxcore | |
parent | 5238f6f8fcf43fb8506467b358ee976a8c5fdf6b (diff) | |
download | pcsx_rearmed-c7071c43bac47c363e2752365ce32580a8c46b95.tar.gz pcsx_rearmed-c7071c43bac47c363e2752365ce32580a8c46b95.tar.bz2 pcsx_rearmed-c7071c43bac47c363e2752365ce32580a8c46b95.zip |
cdrom: merge shalma's suggestions
http://www.gp32x.com/board/index.php?/topic/57973-pcsx-rearmed/page__view__findpost__p__952591
Diffstat (limited to 'libpcsxcore')
-rw-r--r-- | libpcsxcore/cdrom.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index 1569839..cc377b9 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -1937,6 +1937,7 @@ void cdrWrite3(unsigned char rt) { void psxDma3(u32 madr, u32 bcr, u32 chcr) { u32 cdsize; + int size; u8 *ptr; #ifdef CDR_LOG @@ -1981,15 +1982,12 @@ void psxDma3(u32 madr, u32 bcr, u32 chcr) { - 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 + size = CD_FRAMESIZE_RAW - (cdr.pTransfer - cdr.Transfer); + if (size > cdsize) + size = cdsize; + if (size > 0) { - memcpy(ptr, cdr.pTransfer, cdsize); + memcpy(ptr, cdr.pTransfer, size); } psxCpu->Clear(madr, cdsize / 4); |