diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-10-05 20:31:50 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-10-05 20:31:50 +0000 |
| commit | f8b23faf9a11ba43822f2e3de05a3cfbb91914df (patch) | |
| tree | 4e6a88dc2823b5ac1a68c669311f99f0b848a2f3 | |
| parent | 93ec41b986b74213580570dc93cfcd390dd637a4 (diff) | |
| download | pcsxr-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
| -rw-r--r-- | libpcsxcore/cdrom.c | 18 |
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 { |
