diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-09-05 00:59:20 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-09-05 00:59:20 +0000 |
| commit | 37edbb7d48a17b7321ebeb5bcf992c7d77fd2662 (patch) | |
| tree | 64eab93ebf70b7ac2e09b8ddc234830f9ef15aae /libpcsxcore/cdrom.c | |
| parent | 133b4ad99615539e8b5b70475617b1378e4e86fd (diff) | |
| download | pcsxr-37edbb7d48a17b7321ebeb5bcf992c7d77fd2662.tar.gz | |
Vib Ribbon CD swapping needed fixing (CDROM)
- Game still not working (SPU CDDA timing problems.. maybe)
dfsound: feed CDDA data to SPU RAM for decoded buffer IRQs
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@56823 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore/cdrom.c')
| -rw-r--r-- | libpcsxcore/cdrom.c | 58 |
1 files changed, 27 insertions, 31 deletions
diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index 12b5966d..7ff2d68f 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -184,20 +184,6 @@ void cdrInterrupt() { SetResultSize(1); cdr.Result[0] = cdr.StatP; cdr.Stat = Acknowledge; - i = stat.Status; - if (CDR_getStatus(&stat) != -1) { - if (stat.Type == 0xff) cdr.Stat = DiskError; - if (stat.Status & 0x10) { - cdr.Stat = DiskError; - cdr.Result[0] |= 0x11; - cdr.Result[0] &= ~0x02; - } - else if (i & 0x10) { - cdr.StatP |= 0x2; - cdr.Result[0] |= 0x2; - CheckCdrom(); - } - } break; case CdlSetloc: @@ -249,22 +235,6 @@ void cdrInterrupt() { cdr.Result[0] = cdr.StatP; cdr.Stat = Complete; // cdr.Stat = Acknowledge; - - // check case open/close -shalma - i = stat.Status; - if (CDR_getStatus(&stat) != -1) { - if (stat.Type == 0xff) cdr.Stat = DiskError; - if (stat.Status & 0x10) { - cdr.Stat = DiskError; - cdr.Result[0] |= 0x11; - cdr.Result[0] &= ~0x02; - } - else if (i & 0x10) { - cdr.StatP |= 0x2; - cdr.Result[0] |= 0x2; - CheckCdrom(); - } - } break; case CdlPause: @@ -353,6 +323,7 @@ void cdrInterrupt() { SetResultSize(8); subq = (struct SubQ *)CDR_getBufferSub(); + // DATA + AUDIO has subchannel data
if (subq != NULL) { cdr.Result[0] = subq->TrackNumber; cdr.Result[1] = subq->IndexNumber; @@ -366,7 +337,8 @@ void cdrInterrupt() { } else { cdr.Result[0] = 1; cdr.Result[1] = 1; - +
+ // NOTE: This only works for TRACK 01 cdr.Result[2] = btoi(cdr.Prev[0]); cdr.Result[3] = btoi(cdr.Prev[1]) - 2; cdr.Result[4] = cdr.Prev[2]; @@ -387,6 +359,9 @@ void cdrInterrupt() { break; case CdlGetTN: + StopReading();
+ StopCdda();
+
cdr.CmdProcess = 0; SetResultSize(3); cdr.StatP |= 0x2; @@ -591,6 +566,27 @@ void cdrInterrupt() { break; } + // check case open/close
+ i = stat.Status;
+ if (CDR_getStatus(&stat) != -1) {
+ if (stat.Type == 0xff) cdr.Stat = DiskError;
+
+ // case now open
+ if (stat.Status & 0x10) {
+ cdr.Stat = DiskError;
+
+ cdr.Result[0] |= 0x11;
+ cdr.Result[0] &= ~0x02;
+ }
+ // case now closed
+ else if (i & 0x10) {
+ cdr.StatP &= ~0x11;
+ cdr.Result[0] |= 0x2;
+
+ CheckCdrom();
+ }
+ }
+
if (cdr.Stat != NoIntr && cdr.Reg2 != 0x18) { psxHu32ref(0x1070) |= SWAP32((u32)0x4); } |
