summaryrefslogtreecommitdiff
path: root/libpcsxcore/cdrom.c
diff options
context:
space:
mode:
authorSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-10-05 20:31:50 +0000
committerSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-10-05 20:31:50 +0000
commitf8b23faf9a11ba43822f2e3de05a3cfbb91914df (patch)
tree4e6a88dc2823b5ac1a68c669311f99f0b848a2f3 /libpcsxcore/cdrom.c
parent93ec41b986b74213580570dc93cfcd390dd637a4 (diff)
downloadpcsxr-f8b23faf9a11ba43822f2e3de05a3cfbb91914df.tar.gz
CDROM Buffer: cdrom.c
- real hardware uses 16 output bytes then loops around (edgbla) (Works with GameShark music players = 17 bytes) git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@58115 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore/cdrom.c')
-rw-r--r--libpcsxcore/cdrom.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c
index 4ba8c5db..9c095aa1 100644
--- a/libpcsxcore/cdrom.c
+++ b/libpcsxcore/cdrom.c
@@ -369,23 +369,19 @@ void cdrInterrupt() {
break;
case CdlGetlocP:
+ // GameShark CDX CD Player: uses 17 bytes output (wraps around)
SetResultSize(17);
- memset( cdr.Result, 0, 17 );
+ memset( cdr.Result, 0, 16 );
subq = (struct SubQ *)CDR_getBufferSub();
if (subq != NULL) {
- // Subchannel block #1
cdr.Result[0] = subq->TrackNumber;
cdr.Result[1] = subq->IndexNumber;
memcpy(cdr.Result+2, subq->TrackRelativeAddress, 3);
memcpy(cdr.Result+5, subq->AbsoluteAddress, 3);
- // GameShark CDX CD Player: Subchannel block #2
- cdr.Result[16] = subq->TrackNumber;
-
-
// subQ integrity check
if (calcCrc((u8 *)subq + 12, 10) != (((u16)subq->CRC[0] << 8) | subq->CRC[1])) {
memset(cdr.Result + 2, 0, 3 + 3); // CRC wrong, wipe out time data
@@ -413,8 +409,8 @@ void cdrInterrupt() {
#if 1
// FIXME!!!
- if( cdr.LidCheck ) {
- memset( cdr.Result, 0, 17 );
+ if( cdr.LidCheck > 0 ) {
+ memset( cdr.Result, 0, 16 );
// each state needs ~50 tries
if( cdr.LidCheck < 130 )
@@ -922,8 +918,10 @@ void cdrWrite0(unsigned char rt) {
}
unsigned char cdrRead1(void) {
- if (cdr.ResultReady) { // && cdr.Ctrl & 0x1) {
- psxHu8(0x1801) = cdr.Result[cdr.ResultP++];
+ if (cdr.ResultReady) { // && cdr.Ctrl & 0x1) {
+ // GameShark CDX CD Player: uses 17 bytes output (wraps around)
+ psxHu8(0x1801) = cdr.Result[cdr.ResultP & 0xf];
+ cdr.ResultP++;
if (cdr.ResultP == cdr.ResultC)
cdr.ResultReady = 0;
} else {