summaryrefslogtreecommitdiff
path: root/libpcsxcore
diff options
context:
space:
mode:
authorSND\edgbla_cp <SND\edgbla_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-10-30 16:57:58 +0000
committerSND\edgbla_cp <SND\edgbla_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-10-30 16:57:58 +0000
commitb224a1e794a7f241c69a7daa390e65dfba085b9c (patch)
tree65d688c14c48deedcc6b2dbb39863084e0e032b6 /libpcsxcore
parent35ab5b225bfb7af2d4fd4b76e79af147fbbd7ee9 (diff)
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@58936 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore')
-rw-r--r--libpcsxcore/cdriso.c166
-rw-r--r--libpcsxcore/cdrom.c1242
2 files changed, 704 insertions, 704 deletions
diff --git a/libpcsxcore/cdriso.c b/libpcsxcore/cdriso.c
index 5bef990a..0e7b4bb1 100644
--- a/libpcsxcore/cdriso.c
+++ b/libpcsxcore/cdriso.c
@@ -132,11 +132,11 @@ static long GetTickCount(void) {
}
#endif
-
-u16 *iso_play_cdbuf;
-u16 iso_play_bufptr;
-
-
+
+u16 *iso_play_cdbuf;
+u16 iso_play_bufptr;
+
+
// this thread plays audio data
#ifdef _WIN32
static void playthread(void *param)
@@ -145,14 +145,14 @@ static void *playthread(void *param)
#endif
{
long d, t, i, s;
- unsigned char tmp;
+ unsigned char tmp;
int sec;
t = GetTickCount();
- iso_play_cdbuf = 0;
- iso_play_bufptr = 0;
-
+ iso_play_cdbuf = 0;
+ iso_play_bufptr = 0;
+
while (playing) {
d = t - (long)GetTickCount();
if (d <= 0) {
@@ -187,8 +187,8 @@ static void *playthread(void *param)
else {
s = fread(sndbuffer, 1, sizeof(sndbuffer), cddaHandle);
- sec = cddaCurOffset / CD_FRAMESIZE_RAW;
-
+ sec = cddaCurOffset / CD_FRAMESIZE_RAW;
+
if (subHandle != NULL) {
fseek(subHandle, sec * SUB_FRAMESIZE, SEEK_SET);
fread(subbuffer, 1, SUB_FRAMESIZE, subHandle);
@@ -212,59 +212,59 @@ static void *playthread(void *param)
}
}
- // wipe data track
- if( subHandle || subChanMixed ) {
- if( ti[ ((struct SubQ *) subbuffer)->TrackNumber ].type == DATA )
- memset( sndbuffer, 0, s );
- }
-
+ // wipe data track
+ if( subHandle || subChanMixed ) {
+ if( ti[ ((struct SubQ *) subbuffer)->TrackNumber ].type == DATA )
+ memset( sndbuffer, 0, s );
+ }
+
SPU_playCDDAchannel((short *)sndbuffer, s);
}
-
+
cddaCurOffset += s;
-
-
- // BIOS CD Player: Fast forward / reverse seek
- if( cdr.FastForward ) {
- // ~+0.25 sec
- cddaCurOffset += CD_FRAMESIZE_RAW * 75 * 3;
-
-#if 0
- // Bad idea: too much static
- if( subChanInterleaved )
- fseek( cddaHandle, s * (CD_FRAMESIZE_RAW + SUB_FRAMESIZE), SEEK_SET );
- else
- fseek( cddaHandle, s * CD_FRAMESIZE_RAW, SEEK_SET );
-#endif
- }
- else if( cdr.FastBackward ) {
- // ~-0.25 sec
- cddaCurOffset -= CD_FRAMESIZE_RAW * 75 * 3;
- if( cddaCurOffset & 0x80000000 ) {
- cddaCurOffset = 0;
- cdr.FastBackward = 0;
-
- playing = 0;
- fclose(cddaHandle);
- cddaHandle = NULL;
- initial_offset = 0;
- break;
- }
-
-#if 0
- // Bad idea: too much static
- if( subChanInterleaved )
- fseek( cddaHandle, s * (CD_FRAMESIZE_RAW + SUB_FRAMESIZE), SEEK_SET );
- else
- fseek( cddaHandle, s * CD_FRAMESIZE_RAW, SEEK_SET );
-#endif
- }
-
-
- // Vib Ribbon: decoded buffer IRQ
- iso_play_cdbuf = sndbuffer;
- iso_play_bufptr = 0;
+
+
+ // BIOS CD Player: Fast forward / reverse seek
+ if( cdr.FastForward ) {
+ // ~+0.25 sec
+ cddaCurOffset += CD_FRAMESIZE_RAW * 75 * 3;
+
+#if 0
+ // Bad idea: too much static
+ if( subChanInterleaved )
+ fseek( cddaHandle, s * (CD_FRAMESIZE_RAW + SUB_FRAMESIZE), SEEK_SET );
+ else
+ fseek( cddaHandle, s * CD_FRAMESIZE_RAW, SEEK_SET );
+#endif
+ }
+ else if( cdr.FastBackward ) {
+ // ~-0.25 sec
+ cddaCurOffset -= CD_FRAMESIZE_RAW * 75 * 3;
+ if( cddaCurOffset & 0x80000000 ) {
+ cddaCurOffset = 0;
+ cdr.FastBackward = 0;
+
+ playing = 0;
+ fclose(cddaHandle);
+ cddaHandle = NULL;
+ initial_offset = 0;
+ break;
+ }
+
+#if 0
+ // Bad idea: too much static
+ if( subChanInterleaved )
+ fseek( cddaHandle, s * (CD_FRAMESIZE_RAW + SUB_FRAMESIZE), SEEK_SET );
+ else
+ fseek( cddaHandle, s * CD_FRAMESIZE_RAW, SEEK_SET );
+#endif
+ }
+
+
+ // Vib Ribbon: decoded buffer IRQ
+ iso_play_cdbuf = sndbuffer;
+ iso_play_bufptr = 0;
}
#ifdef _WIN32
@@ -695,7 +695,7 @@ static int opensubfile(const char *isoname) {
return 0;
}
-static long CALLBACK ISOinit(void) {
+long CALLBACK ISOinit(void) {
assert(cdHandle == NULL);
assert(subHandle == NULL);
@@ -750,12 +750,12 @@ static long CALLBACK ISOopen(void) {
else if (parsemds(GetIsoFile()) == 0) {
SysPrintf("[+mds]");
}
- else if (parsecue(GetIsoFile()) == 0) {
- SysPrintf("[+cue]");
- }
- else if (parsetoc(GetIsoFile()) == 0) {
- SysPrintf("[+toc]");
- }
+ else if (parsecue(GetIsoFile()) == 0) {
+ SysPrintf("[+cue]");
+ }
+ else if (parsetoc(GetIsoFile()) == 0) {
+ SysPrintf("[+toc]");
+ }
if (!subChanMixed && opensubfile(GetIsoFile()) == 0) {
SysPrintf("[+sub]");
@@ -919,22 +919,22 @@ static unsigned char* CALLBACK ISOgetBufferSub(void) {
}
static long CALLBACK ISOgetStatus(struct CdrStat *stat) {
- u32 sect;
-
- CDR__getStatus(stat);
-
- if (playing) {
- stat->Status |= 0x80;
- }
-
- // relative -> absolute time
- sect = cddaCurOffset / CD_FRAMESIZE_RAW + 150;
- sec2msf(sect, (u8 *)stat->Time);
-
- // BIOS - boot ID (CD type)
- stat->Type = ti[1].type;
-
- return 0;
+ u32 sect;
+
+ CDR__getStatus(stat);
+
+ if (playing) {
+ stat->Status |= 0x80;
+ }
+
+ // relative -> absolute time
+ sect = cddaCurOffset / CD_FRAMESIZE_RAW + 150;
+ sec2msf(sect, (u8 *)stat->Time);
+
+ // BIOS - boot ID (CD type)
+ stat->Type = ti[1].type;
+
+ return 0;
}
void cdrIsoInit(void) {
diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c
index 7210d778..cec02b57 100644
--- a/libpcsxcore/cdrom.c
+++ b/libpcsxcore/cdrom.c
@@ -84,6 +84,14 @@ unsigned char Test20[] = { 0x98, 0x06, 0x10, 0xC3 };
unsigned char Test22[] = { 0x66, 0x6F, 0x72, 0x20, 0x45, 0x75, 0x72, 0x6F };
unsigned char Test23[] = { 0x43, 0x58, 0x44, 0x32, 0x39 ,0x34, 0x30, 0x51 };
+// cdr.Stat:
+#define NoIntr 0
+#define DataReady 1
+#define Complete 2
+#define Acknowledge 3
+#define DataEnd 4
+#define DiskError 5
+
// 1x = 75 sectors per second
// PSXCLK = 1 sec in the ps
// so (PSXCLK / 75) = cdr read time (linuzappz)
@@ -91,21 +99,21 @@ unsigned char Test23[] = { 0x43, 0x58, 0x44, 0x32, 0x39 ,0x34, 0x30, 0x51 };
static struct CdrStat stat;
static struct SubQ *subq;
-
-
-extern u16 *iso_play_cdbuf;
-extern u16 iso_play_bufptr;
-extern long CALLBACK ISOinit(void);
-extern void CALLBACK SPUirq(void);
-extern SPUregisterCallback SPU_registerCallback;
-
-#define H_SPUirqAddr 0x1f801da4
-#define H_SPUaddr 0x1f801da6
-#define H_SPUctrl 0x1f801daa
-#define H_CDLeft 0x1f801db0
-#define H_CDRight 0x1f801db2
-
-
+
+
+extern u16 *iso_play_cdbuf;
+extern u16 iso_play_bufptr;
+extern long CALLBACK ISOinit(void);
+extern void CALLBACK SPUirq(void);
+extern SPUregisterCallback SPU_registerCallback;
+
+#define H_SPUirqAddr 0x1f801da4
+#define H_SPUaddr 0x1f801da6
+#define H_SPUctrl 0x1f801daa
+#define H_CDLeft 0x1f801db0
+#define H_CDRight 0x1f801db2
+
+
#define CDR_INT(eCycle) { \
psxRegs.interrupt |= (1 << PSXINT_CDR); \
psxRegs.intCycle[PSXINT_CDR].cycle = eCycle; \
@@ -124,18 +132,18 @@ extern SPUregisterCallback SPU_registerCallback;
psxRegs.intCycle[PSXINT_CDREPPLAY].sCycle = psxRegs.cycle; \
}
-#define CDRDBUF_INT(eCycle) { \
- psxRegs.interrupt |= (1 << PSXINT_CDRDBUF); \
- psxRegs.intCycle[PSXINT_CDRDBUF].cycle = eCycle; \
- psxRegs.intCycle[PSXINT_CDRDBUF].sCycle = psxRegs.cycle; \
-}
-
-#define CDRLID_INT(eCycle) { \
- psxRegs.interrupt |= (1 << PSXINT_CDRLID); \
- psxRegs.intCycle[PSXINT_CDRLID].cycle = eCycle; \
- psxRegs.intCycle[PSXINT_CDRLID].sCycle = psxRegs.cycle; \
-}
-
+#define CDRDBUF_INT(eCycle) { \
+ psxRegs.interrupt |= (1 << PSXINT_CDRDBUF); \
+ psxRegs.intCycle[PSXINT_CDRDBUF].cycle = eCycle; \
+ psxRegs.intCycle[PSXINT_CDRDBUF].sCycle = psxRegs.cycle; \
+}
+
+#define CDRLID_INT(eCycle) { \
+ psxRegs.interrupt |= (1 << PSXINT_CDRLID); \
+ psxRegs.intCycle[PSXINT_CDRLID].cycle = eCycle; \
+ psxRegs.intCycle[PSXINT_CDRLID].sCycle = psxRegs.cycle; \
+}
+
#define StartReading(type, eCycle) { \
cdr.Reading = type; \
cdr.FirstSector = 1; \
@@ -166,237 +174,237 @@ extern SPUregisterCallback SPU_registerCallback;
cdr.ResultC = size; \
cdr.ResultReady = 1; \
}
-
-
-void cdrDecodedBufferInterrupt()
-{
- u16 buf_ptr[0x400], lcv;
-
- // ISO reader only
- if( CDR_init != ISOinit ) return;
-
-
- // check dbuf IRQ still active
- if( cdr.Play == 0 ) return;
- if( (SPU_readRegister( H_SPUctrl ) & 0x40) == 0 ) return;
- if( (SPU_readRegister( H_SPUirqAddr ) * 8) >= 0x800 ) return;
-
-
-
- // turn off plugin SPU IRQ decoded buffer handling
- SPU_registerCallback( 0 );
-
-
-
- /*
- Vib Ribbon
-
- 000-3FF = left CDDA
- 400-7FF = right CDDA
-
- Assume IRQ every wrap
- */
-
- if( iso_play_cdbuf )
- {
- for( lcv = 0; lcv < 0x200; lcv++ )
- {
- // left
- buf_ptr[ lcv ] = iso_play_cdbuf[ iso_play_bufptr ];
-
- // right
- buf_ptr[ lcv+0x200 ] = iso_play_cdbuf[ iso_play_bufptr+1 ];
-
- iso_play_bufptr += 2;
- }
- }
- else
- {
- memset( buf_ptr, 0, sizeof(buf_ptr) );
- }
-
-
- // feed CDDA decoded buffer manually
- SPU_writeRegister( H_SPUaddr,0 );
- SPU_writeDMAMem( buf_ptr, 0x800 / 2 );
-
-
- // signal CDDA data ready
- psxHu32ref(0x1070) |= SWAP32((u32)0x200);
-
-
- // time for next full buffer
- //CDRDBUF_INT( PSXCLK / 44100 * 0x200 );
- CDRDBUF_INT( PSXCLK / 44100 * 0x100 );
-}
-
-
-void cdrLidSeekInterrupt()
-{
- // turn back on checking
- if( cdr.LidCheck == 0x10 )
- {
- cdr.LidCheck = 0;
- }
-
- // official lid close
- else if( cdr.LidCheck == 0x30 )
- {
- // GS CDX 3.3: $13
- cdr.StatP |= 0x02;
-
-
- // GS CDX 3.3 - ~50 getlocp tries
- CDRLID_INT( cdReadTime * 3 );
- cdr.LidCheck = 0x40;
- }
-
- // turn off ready
- else if( cdr.LidCheck == 0x40 )
- {
- // GS CDX 3.3: $01
- cdr.StatP &= ~0x10;
- cdr.StatP &= ~0x02;
-
-
- // GS CDX 3.3 - ~50 getlocp tries
- CDRLID_INT( cdReadTime * 3 );
- cdr.LidCheck = 0x50;
- }
-
- // now seek
- else if( cdr.LidCheck == 0x50 )
- {
- // GameShark Lite: Start seeking ($42)
- cdr.StatP |= 0x40;
- cdr.StatP |= 0x02;
- cdr.StatP &= ~0x01;
-
-
- CDRLID_INT( cdReadTime * 3 );
- cdr.LidCheck = 0x60;
- }
-
- // done = cd ready
- else if( cdr.LidCheck == 0x60 )
- {
- // GameShark Lite: Seek detection done ($02)
- cdr.StatP &= ~0x40;
-
- cdr.LidCheck = 0;
- }
-}
-
-
-void Check_Shell( int Irq )
-{
- // check case open/close
- if (cdr.LidCheck > 0)
- {
-#ifdef CDR_LOG
- CDR_LOG( "LidCheck\n" );
-#endif
-
- // $20 = check lid state
- if( cdr.LidCheck == 0x20 )
- {
- u32 i;
-
- i = stat.Status;
- if (CDR_getStatus(&stat) != -1)
- {
- if (stat.Type == 0xff)
- cdr.Stat = DiskError;
-
- // case now open
- else if (stat.Status & 0x10)
- {
- // Vib Ribbon: pre-CD swap
- StopCdda();
-
-
- // GameShark Lite: Death if DiskError happens
- //
- // Vib Ribbon: Needs DiskError for CD swap
-
- if (Irq != CdlNop)
- {
- cdr.Stat = DiskError;
-
- cdr.StatP |= 0x01;
- cdr.Result[0] |= 0x01;
- }
-
- // GameShark Lite: Wants -exactly- $10
- cdr.StatP |= 0x10;
- cdr.StatP &= ~0x02;
-
-
- CDRLID_INT( cdReadTime * 3 );
- cdr.LidCheck = 0x10;
-
-
- // GS CDX 3.3 = $11
- }
-
- // case just closed
- else if ( i & 0x10 )
- {
- cdr.StatP |= 0x2;
-
- CheckCdrom();
-
-
- if( cdr.Stat == NoIntr )
- cdr.Stat = Acknowledge;
-
- psxHu32ref(0x1070) |= SWAP32((u32)0x4);
-
-
- // begin close-seek-ready cycle
- CDRLID_INT( cdReadTime * 3 );
- cdr.LidCheck = 0x30;
-
-
- // GameShark Lite: Wants -exactly- $42, then $02
- // GS CDX 3.3: Wants $11/$80, $13/$80, $01/$00
- }
-
- // case still closed - wait for recheck
- else
- {
- CDRLID_INT( cdReadTime * 3 );
- cdr.LidCheck = 0x10;
- }
- }
- }
-
-
- // GS CDX: clear all values but #1,#2
- if( (cdr.LidCheck >= 0x30) || (cdr.StatP & 0x10) )
- {
- SetResultSize(16);
- memset( cdr.Result, 0, 16 );
-
- cdr.Result[0] = cdr.StatP;
-
-
- // GS CDX: special return value
- if( cdr.StatP & 0x10 )
- {
- cdr.Result[1] = 0x80;
- }
-
-
- if( cdr.Stat == NoIntr )
- cdr.Stat = Acknowledge;
-
- psxHu32ref(0x1070) |= SWAP32((u32)0x4);
- }
- }
-}
-
-
+
+
+void cdrDecodedBufferInterrupt()
+{
+ u16 buf_ptr[0x400], lcv;
+
+ // ISO reader only
+ if( CDR_init != ISOinit ) return;
+
+
+ // check dbuf IRQ still active
+ if( cdr.Play == 0 ) return;
+ if( (SPU_readRegister( H_SPUctrl ) & 0x40) == 0 ) return;
+ if( (SPU_readRegister( H_SPUirqAddr ) * 8) >= 0x800 ) return;
+
+
+
+ // turn off plugin SPU IRQ decoded buffer handling
+ SPU_registerCallback( 0 );
+
+
+
+ /*
+ Vib Ribbon
+
+ 000-3FF = left CDDA
+ 400-7FF = right CDDA
+
+ Assume IRQ every wrap
+ */
+
+ if( iso_play_cdbuf )
+ {
+ for( lcv = 0; lcv < 0x200; lcv++ )
+ {
+ // left
+ buf_ptr[ lcv ] = iso_play_cdbuf[ iso_play_bufptr ];
+
+ // right
+ buf_ptr[ lcv+0x200 ] = iso_play_cdbuf[ iso_play_bufptr+1 ];
+
+ iso_play_bufptr += 2;
+ }
+ }
+ else
+ {
+ memset( buf_ptr, 0, sizeof(buf_ptr) );
+ }
+
+
+ // feed CDDA decoded buffer manually
+ SPU_writeRegister( H_SPUaddr,0 );
+ SPU_writeDMAMem( buf_ptr, 0x800 / 2 );
+
+
+ // signal CDDA data ready
+ psxHu32ref(0x1070) |= SWAP32((u32)0x200);
+
+
+ // time for next full buffer
+ //CDRDBUF_INT( PSXCLK / 44100 * 0x200 );
+ CDRDBUF_INT( PSXCLK / 44100 * 0x100 );
+}
+
+
+void cdrLidSeekInterrupt()
+{
+ // turn back on checking
+ if( cdr.LidCheck == 0x10 )
+ {
+ cdr.LidCheck = 0;
+ }
+
+ // official lid close
+ else if( cdr.LidCheck == 0x30 )
+ {
+ // GS CDX 3.3: $13
+ cdr.StatP |= 0x02;
+
+
+ // GS CDX 3.3 - ~50 getlocp tries
+ CDRLID_INT( cdReadTime * 3 );
+ cdr.LidCheck = 0x40;
+ }
+
+ // turn off ready
+ else if( cdr.LidCheck == 0x40 )
+ {
+ // GS CDX 3.3: $01
+ cdr.StatP &= ~0x10;
+ cdr.StatP &= ~0x02;
+
+
+ // GS CDX 3.3 - ~50 getlocp tries
+ CDRLID_INT( cdReadTime * 3 );
+ cdr.LidCheck = 0x50;
+ }
+
+ // now seek
+ else if( cdr.LidCheck == 0x50 )
+ {
+ // GameShark Lite: Start seeking ($42)
+ cdr.StatP |= 0x40;
+ cdr.StatP |= 0x02;
+ cdr.StatP &= ~0x01;
+
+
+ CDRLID_INT( cdReadTime * 3 );
+ cdr.LidCheck = 0x60;
+ }
+
+ // done = cd ready
+ else if( cdr.LidCheck == 0x60 )
+ {
+ // GameShark Lite: Seek detection done ($02)
+ cdr.StatP &= ~0x40;
+
+ cdr.LidCheck = 0;
+ }
+}
+
+
+void Check_Shell( int Irq )
+{
+ // check case open/close
+ if (cdr.LidCheck > 0)
+ {
+#ifdef CDR_LOG
+ CDR_LOG( "LidCheck\n" );
+#endif
+
+ // $20 = check lid state
+ if( cdr.LidCheck == 0x20 )
+ {
+ u32 i;
+
+ i = stat.Status;
+ if (CDR_getStatus(&stat) != -1)
+ {
+ if (stat.Type == 0xff)
+ cdr.Stat = DiskError;
+
+ // case now open
+ else if (stat.Status & 0x10)
+ {
+ // Vib Ribbon: pre-CD swap
+ StopCdda();
+
+
+ // GameShark Lite: Death if DiskError happens
+ //
+ // Vib Ribbon: Needs DiskError for CD swap
+
+ if (Irq != CdlNop)
+ {
+ cdr.Stat = DiskError;
+
+ cdr.StatP |= 0x01;
+ cdr.Result[0] |= 0x01;
+ }
+
+ // GameShark Lite: Wants -exactly- $10
+ cdr.StatP |= 0x10;
+ cdr.StatP &= ~0x02;
+
+
+ CDRLID_INT( cdReadTime * 3 );
+ cdr.LidCheck = 0x10;
+
+
+ // GS CDX 3.3 = $11
+ }
+
+ // case just closed
+ else if ( i & 0x10 )
+ {
+ cdr.StatP |= 0x2;
+
+ CheckCdrom();
+
+
+ if( cdr.Stat == NoIntr )
+ cdr.Stat = Acknowledge;
+
+ psxHu32ref(0x1070) |= SWAP32((u32)0x4);
+
+
+ // begin close-seek-ready cycle
+ CDRLID_INT( cdReadTime * 3 );
+ cdr.LidCheck = 0x30;
+
+
+ // GameShark Lite: Wants -exactly- $42, then $02
+ // GS CDX 3.3: Wants $11/$80, $13/$80, $01/$00
+ }
+
+ // case still closed - wait for recheck
+ else
+ {
+ CDRLID_INT( cdReadTime * 3 );
+ cdr.LidCheck = 0x10;
+ }
+ }
+ }
+
+
+ // GS CDX: clear all values but #1,#2
+ if( (cdr.LidCheck >= 0x30) || (cdr.StatP & 0x10) )
+ {
+ SetResultSize(16);
+ memset( cdr.Result, 0, 16 );
+
+ cdr.Result[0] = cdr.StatP;
+
+
+ // GS CDX: special return value
+ if( cdr.StatP & 0x10 )
+ {
+ cdr.Result[1] = 0x80;
+ }
+
+
+ if( cdr.Stat == NoIntr )
+ cdr.Stat = Acknowledge;
+
+ psxHu32ref(0x1070) |= SWAP32((u32)0x4);
+ }
+ }
+}
+
+
void Find_CurTrack() {
cdr.CurTrack = 0;
@@ -414,9 +422,9 @@ void Find_CurTrack() {
cdr.CurTrack );
#endif
- // find next track boundary - only need m:s accuracy
- sect1 = cdr.SetSectorPlay[0] * 60 * 75 + cdr.SetSectorPlay[1] * 75;
- sect2 = cdr.ResultTD[2] * 60 * 75 + cdr.ResultTD[1] * 75;
+ // find next track boundary - only need m:s accuracy
+ sect1 = cdr.SetSectorPlay[0] * 60 * 75 + cdr.SetSectorPlay[1] * 75;
+ sect2 = cdr.ResultTD[2] * 60 * 75 + cdr.ResultTD[1] * 75;
if( sect1 >= sect2 ) {
cdr.CurTrack++;
continue;
@@ -429,9 +437,9 @@ void Find_CurTrack() {
}
static void ReadTrack( u8 *time ) {
- cdr.Prev[0] = itob( time[0] );
- cdr.Prev[1] = itob( time[1] );
- cdr.Prev[2] = itob( time[2] );
+ cdr.Prev[0] = itob( time[0] );
+ cdr.Prev[1] = itob( time[1] );
+ cdr.Prev[2] = itob( time[2] );
#ifdef CDR_LOG
CDR_LOG("ReadTrack() Log: KEY *** %x:%x:%x\n", cdr.Prev[0], cdr.Prev[1], cdr.Prev[2]);
@@ -439,56 +447,48 @@ static void ReadTrack( u8 *time ) {
cdr.RErr = CDR_readTrack(cdr.Prev);
}
-// cdr.Stat:
-#define NoIntr 0
-#define DataReady 1
-#define Complete 2
-#define Acknowledge 3
-#define DataEnd 4
-#define DiskError 5
-
void AddIrqQueue(unsigned char irq, unsigned long ecycle) {
- cdr.Irq = irq;
- cdr.eCycle = ecycle;
-
- // Doom: Force rescheduling
- // - Fixes boot
- CDR_INT(ecycle);
+ cdr.Irq = irq;
+ cdr.eCycle = ecycle;
+
+ // Doom: Force rescheduling
+ // - Fixes boot
+ CDR_INT(ecycle);
}
-
-void Set_Track()
-{
- if (CDR_getTN(cdr.ResultTN) != -1) {
- int lcv;
-
- for( lcv = 1; lcv < cdr.ResultTN[1]; lcv++ ) {
- if (CDR_getTD((u8)(lcv), cdr.ResultTD) != -1) {
-#ifdef CDR_LOG___0
- CDR_LOG( "settrack %d %d %d | %d %d %d | %d\n",
- cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2],
- cdr.ResultTD[2], cdr.ResultTD[1], cdr.ResultTD[0],
- cdr.CurTrack );
-#endif
-
- // check if time matches track start (only need min, sec accuracy)
- // - m:s:f vs f:s:m
- if( cdr.SetSectorPlay[0] == cdr.ResultTD[2] &&
- cdr.SetSectorPlay[1] == cdr.ResultTD[1] ) {
- // skip pregap frames
- if( cdr.SetSectorPlay[2] < cdr.ResultTD[0] )
- cdr.SetSectorPlay[2] = cdr.ResultTD[0];
-
- break;
- }
- else if( cdr.SetSectorPlay[0] < cdr.ResultTD[2] )
- break;
- }
- }
- }
-}
-
-
+
+void Set_Track()
+{
+ if (CDR_getTN(cdr.ResultTN) != -1) {
+ int lcv;
+
+ for( lcv = 1; lcv < cdr.ResultTN[1]; lcv++ ) {
+ if (CDR_getTD((u8)(lcv), cdr.ResultTD) != -1) {
+#ifdef CDR_LOG___0
+ CDR_LOG( "settrack %d %d %d | %d %d %d | %d\n",
+ cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2],
+ cdr.ResultTD[2], cdr.ResultTD[1], cdr.ResultTD[0],
+ cdr.CurTrack );
+#endif
+
+ // check if time matches track start (only need min, sec accuracy)
+ // - m:s:f vs f:s:m
+ if( cdr.SetSectorPlay[0] == cdr.ResultTD[2] &&
+ cdr.SetSectorPlay[1] == cdr.ResultTD[1] ) {
+ // skip pregap frames
+ if( cdr.SetSectorPlay[2] < cdr.ResultTD[0] )
+ cdr.SetSectorPlay[2] = cdr.ResultTD[0];
+
+ break;
+ }
+ else if( cdr.SetSectorPlay[0] < cdr.ResultTD[2] )
+ break;
+ }
+ }
+ }
+}
+
+
void cdrRepplayInterrupt()
{
// Wait for IRQ to be acknowledged
@@ -571,7 +571,7 @@ void cdrRepplayInterrupt()
// Wild 9: Do not use REPPLAY_ACK
CDREPPLAY_INT(cdReadTime);
- Check_Shell( 0 );
+ Check_Shell( 0 );
psxHu32ref(0x1070) |= SWAP32((u32)0x4);
}
@@ -580,11 +580,11 @@ void cdrInterrupt() {
int i;
unsigned char Irq = cdr.Irq;
- // Reschedule IRQ
- if (cdr.Stat) {
- CDR_INT( cdr.eCycle );
- return;
- }
+ // Reschedule IRQ
+ if (cdr.Stat) {
+ CDR_INT( cdr.eCycle );
+ return;
+ }
cdr.Irq = 0xff;
cdr.Ctrl &= ~0x80;
@@ -601,8 +601,8 @@ void cdrInterrupt() {
SetResultSize(1);
cdr.Result[0] = cdr.StatP;
cdr.Stat = Acknowledge;
-
- if (cdr.LidCheck == 0) cdr.LidCheck = 0x20;
+
+ if (cdr.LidCheck == 0) cdr.LidCheck = 0x20;
break;
case CdlSetloc:
@@ -613,108 +613,108 @@ void cdrInterrupt() {
cdr.Stat = Acknowledge;
break;
- case CdlPlay:
- /*
- Rayman: detect track changes
- - fixes logo freeze
-
- Twisted Metal 2: skip PREGAP + starting accurate SubQ
- - plays tracks without retry play
-
- Wild 9: skip PREGAP + starting accurate SubQ
- - plays tracks without retry play
- */
- Set_Track();
- Find_CurTrack();
- ReadTrack( cdr.SetSectorPlay );
-
-
- // GameShark CD Player: Calls 2x + Play 2x
- if( cdr.FastBackward || cdr.FastForward ) {
- if( cdr.FastForward ) cdr.FastForward--;
- if( cdr.FastBackward ) cdr.FastBackward--;
-
- if( cdr.FastBackward == 0 && cdr.FastForward == 0 ) {
- if( cdr.Play && CDR_getStatus(&stat) != -1 ) {
- cdr.SetSectorPlay[0] = stat.Time[0];
- cdr.SetSectorPlay[1] = stat.Time[1];
- cdr.SetSectorPlay[2] = stat.Time[2];
- }
- }
- }
-
-
- if (!Config.Cdda) {
- // BIOS CD Player
- // - Pause player, hit Track 01/02/../xx (Setloc issued!!)
-
- // GameShark CD Player: Resume play
- if( cdr.ParamC == 0 ) {
-#ifdef CDR_LOG___0
- CDR_LOG( "PLAY Resume @ %d:%d:%d\n",
- cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2] );
-#endif
-
- CDR_play( cdr.SetSectorPlay );
- }
- else
- {
- // BIOS CD Player: Resume play
- if( cdr.Param[0] == 0 ) {
-#ifdef CDR_LOG___0
- CDR_LOG( "PLAY Resume T0 @ %d:%d:%d\n",
- cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2] );
-#endif
-
- CDR_play( cdr.SetSectorPlay );
- }
- else {
-#ifdef CDR_LOG___0
- CDR_LOG( "PLAY Resume Td @ %d:%d:%d\n",
- cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2] );
-#endif
-
- // BIOS CD Player: Allow track replaying
- StopCdda();
-
-
- cdr.CurTrack = btoi( cdr.Param[0] );
-
- if (CDR_getTN(cdr.ResultTN) != -1) {
- // check last track
- if (cdr.CurTrack > cdr.ResultTN[1])
- cdr.CurTrack = cdr.ResultTN[1];
-
- if (CDR_getTD((u8)(cdr.CurTrack), cdr.ResultTD) != -1) {
- cdr.SetSectorPlay[0] = cdr.ResultTD[2];
- cdr.SetSectorPlay[1] = cdr.ResultTD[1];
- cdr.SetSectorPlay[2] = cdr.ResultTD[0];
-
- CDR_play(cdr.SetSectorPlay);
- }
- }
- }
- }
- }
-
-
- // Vib Ribbon: gameplay checks flag
- cdr.StatP &= ~0x40;
-
-
- cdr.CmdProcess = 0;
- SetResultSize(1);
- cdr.StatP |= 0x2;
- cdr.Result[0] = cdr.StatP;
- cdr.Stat = Acknowledge;
-
- cdr.StatP |= 0x80;
-
- // Lemmings: report play times
- if ((cdr.Mode & 0x5) == 0x5) {
- CDREPPLAY_INT( cdReadTime );
- }
- break;
+ case CdlPlay:
+ /*
+ Rayman: detect track changes
+ - fixes logo freeze
+
+ Twisted Metal 2: skip PREGAP + starting accurate SubQ
+ - plays tracks without retry play
+
+ Wild 9: skip PREGAP + starting accurate SubQ
+ - plays tracks without retry play
+ */
+ Set_Track();
+ Find_CurTrack();
+ ReadTrack( cdr.SetSectorPlay );
+
+
+ // GameShark CD Player: Calls 2x + Play 2x
+ if( cdr.FastBackward || cdr.FastForward ) {
+ if( cdr.FastForward ) cdr.FastForward--;
+ if( cdr.FastBackward ) cdr.FastBackward--;
+
+ if( cdr.FastBackward == 0 && cdr.FastForward == 0 ) {
+ if( cdr.Play && CDR_getStatus(&stat) != -1 ) {
+ cdr.SetSectorPlay[0] = stat.Time[0];
+ cdr.SetSectorPlay[1] = stat.Time[1];
+ cdr.SetSectorPlay[2] = stat.Time[2];
+ }
+ }
+ }
+
+
+ if (!Config.Cdda) {
+ // BIOS CD Player
+ // - Pause player, hit Track 01/02/../xx (Setloc issued!!)
+
+ // GameShark CD Player: Resume play
+ if( cdr.ParamC == 0 ) {
+#ifdef CDR_LOG___0
+ CDR_LOG( "PLAY Resume @ %d:%d:%d\n",
+ cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2] );
+#endif
+
+ CDR_play( cdr.SetSectorPlay );
+ }
+ else
+ {
+ // BIOS CD Player: Resume play
+ if( cdr.Param[0] == 0 ) {
+#ifdef CDR_LOG___0
+ CDR_LOG( "PLAY Resume T0 @ %d:%d:%d\n",
+ cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2] );
+#endif
+
+ CDR_play( cdr.SetSectorPlay );
+ }
+ else {
+#ifdef CDR_LOG___0
+ CDR_LOG( "PLAY Resume Td @ %d:%d:%d\n",
+ cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2] );
+#endif
+
+ // BIOS CD Player: Allow track replaying
+ StopCdda();
+
+
+ cdr.CurTrack = btoi( cdr.Param[0] );
+
+ if (CDR_getTN(cdr.ResultTN) != -1) {
+ // check last track
+ if (cdr.CurTrack > cdr.ResultTN[1])
+ cdr.CurTrack = cdr.ResultTN[1];
+
+ if (CDR_getTD((u8)(cdr.CurTrack), cdr.ResultTD) != -1) {
+ cdr.SetSectorPlay[0] = cdr.ResultTD[2];
+ cdr.SetSectorPlay[1] = cdr.ResultTD[1];
+ cdr.SetSectorPlay[2] = cdr.ResultTD[0];
+
+ CDR_play(cdr.SetSectorPlay);
+ }
+ }
+ }
+ }
+ }
+
+
+ // Vib Ribbon: gameplay checks flag
+ cdr.StatP &= ~0x40;
+
+
+ cdr.CmdProcess = 0;
+ SetResultSize(1);
+ cdr.StatP |= 0x2;
+ cdr.Result[0] = cdr.StatP;
+ cdr.Stat = Acknowledge;
+
+ cdr.StatP |= 0x80;
+
+ // Lemmings: report play times
+ if ((cdr.Mode & 0x5) == 0x5) {
+ CDREPPLAY_INT( cdReadTime );
+ }
+ break;
case CdlForward:
cdr.CmdProcess = 0;
@@ -761,16 +761,16 @@ void cdrInterrupt() {
cdr.Result[0] = cdr.StatP;
cdr.Stat = Complete;
// cdr.Stat = Acknowledge;
-
- if (cdr.LidCheck == 0) cdr.LidCheck = 0x20;
+
+ if (cdr.LidCheck == 0) cdr.LidCheck = 0x20;
break;
case CdlPause:
SetResultSize(1);
cdr.Result[0] = cdr.StatP;
- cdr.Stat = Acknowledge;
+ cdr.Stat = Acknowledge;
- AddIrqQueue(CdlPause + 0x20, 0x1000);
+ AddIrqQueue(CdlPause + 0x20, 0x1000);
cdr.Ctrl |= 0x80;
break;
@@ -860,10 +860,10 @@ void cdrInterrupt() {
memcpy(cdr.Result+5, subq->AbsoluteAddress, 3);
- // subQ integrity check - data only (skip audio)
- if( subq->TrackNumber == 1 && stat.Type == 0x01 ) {
+ // subQ integrity check - data only (skip audio)
+ if( subq->TrackNumber == 1 && stat.Type == 0x01 ) {
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
+ memset(cdr.Result + 2, 0, 3 + 3); // CRC wrong, wipe out time data
}
}
} else {
@@ -891,9 +891,9 @@ void cdrInterrupt() {
break;
case CdlGetTN:
- // 5-Star Racing: don't stop CDDA
- //
- // Vib Ribbon: CD swap
+ // 5-Star Racing: don't stop CDDA
+ //
+ // Vib Ribbon: CD swap
StopReading();
cdr.CmdProcess = 0;
@@ -941,7 +941,7 @@ void cdrInterrupt() {
cdr.StatP |= 0x2;
cdr.StatP &= ~0x40;
cdr.Result[0] = cdr.StatP;
- cdr.Seeked = TRUE;
+ cdr.Seeked = TRUE;
cdr.Stat = Complete;
break;
@@ -960,10 +960,10 @@ void cdrInterrupt() {
cdr.StatP &= ~0x40;
cdr.Result[0] = cdr.StatP;
cdr.Stat = Complete;
- cdr.Seeked = TRUE;
+ cdr.Seeked = TRUE;
// Tomb Raider 2: must update read cursor for getlocp
- ReadTrack( cdr.SetSectorPlay );
+ ReadTrack( cdr.SetSectorPlay );
break;
case CdlTest:
@@ -1027,21 +1027,21 @@ void cdrInterrupt() {
cdr.Stat = Acknowledge;
break;
- case CdlReadT:
- SetResultSize(1);
- cdr.StatP |= 0x2;
- cdr.Result[0] = cdr.StatP;
- cdr.Stat = Acknowledge;
- AddIrqQueue(CdlReadT + 0x20, 0x1000);
- break;
-
- case CdlReadT + 0x20:
- SetResultSize(1);
- cdr.StatP |= 0x2;
- cdr.Result[0] = cdr.StatP;
- cdr.Stat = Complete;
- break;
-
+ case CdlReadT:
+ SetResultSize(1);
+ cdr.StatP |= 0x2;
+ cdr.Result[0] = cdr.StatP;
+ cdr.Stat = Acknowledge;
+ AddIrqQueue(CdlReadT + 0x20, 0x1000);
+ break;
+
+ case CdlReadT + 0x20:
+ SetResultSize(1);
+ cdr.StatP |= 0x2;
+ cdr.Result[0] = cdr.StatP;
+ cdr.Stat = Complete;
+ break;
+
case CdlReadToc:
SetResultSize(1);
cdr.StatP |= 0x2;
@@ -1071,33 +1071,33 @@ void cdrInterrupt() {
break;
case READ_ACK:
- if (!cdr.Reading) return;
-
- // Duke Nukem: Land of the Babes - seek then read
- // - fixes cutscenes
- if (!cdr.Seeked) {
- cdr.Seeked = TRUE;
-
- cdr.StatP |= 0x40;
- cdr.StatP &= ~0x20;
- } else {
- cdr.StatP |= 0x20;
- cdr.StatP &= ~0x40;
- }
-
- /*
- Duke Nukem: Land of the Babes - delay read for one frame
- - fixes cutscenes
-
- Judge Dredd - don't delay too long
- - breaks gameplay movies
- */
- CDREAD_INT((cdr.Mode & 0x80) ? (cdReadTime / 2) : cdReadTime);
-
- SetResultSize(1);
- cdr.StatP |= 0x02;
- cdr.Result[0] = cdr.StatP;
- cdr.Stat = Acknowledge;
+ if (!cdr.Reading) return;
+
+ // Duke Nukem: Land of the Babes - seek then read
+ // - fixes cutscenes
+ if (!cdr.Seeked) {
+ cdr.Seeked = TRUE;
+
+ cdr.StatP |= 0x40;
+ cdr.StatP &= ~0x20;
+ } else {
+ cdr.StatP |= 0x20;
+ cdr.StatP &= ~0x40;
+ }
+
+ /*
+ Duke Nukem: Land of the Babes - delay read for one frame
+ - fixes cutscenes
+
+ Judge Dredd - don't delay too long
+ - breaks gameplay movies
+ */
+ CDREAD_INT((cdr.Mode & 0x80) ? (cdReadTime / 2) : cdReadTime);
+
+ SetResultSize(1);
+ cdr.StatP |= 0x02;
+ cdr.Result[0] = cdr.StatP;
+ cdr.Stat = Acknowledge;
break;
case 0xff:
@@ -1108,8 +1108,8 @@ void cdrInterrupt() {
break;
}
- Check_Shell( Irq );
-
+ Check_Shell( Irq );
+
if (cdr.Stat != NoIntr && cdr.Reg2 != 0x18) {
psxHu32ref(0x1070) |= SWAP32((u32)0x4);
}
@@ -1140,7 +1140,7 @@ void cdrReadInterrupt() {
cdr.StatP &= ~0x40;
cdr.Result[0] = cdr.StatP;
- ReadTrack( cdr.SetSector );
+ ReadTrack( cdr.SetSector );
buf = CDR_getBuffer();
if (buf == NULL)
@@ -1219,28 +1219,28 @@ void cdrReadInterrupt() {
Hokuto no Ken 2: $A0 - return FORM1 + FORM2
Judge Dredd: $C8 - only FORM1
Xenogears: $C8 - only FORM1
- */
-
- // To fix Judge Dredd movies: use first block
-#if 0
- if( (cdr.Mode & 0x40) == 0 || (cdr.Transfer[4+2] & 0x4) != 0x4 ) {
- cdr.Stat = DataReady;
- psxHu32ref(0x1070) |= SWAP32((u32)0x4);
- }
-#elif 0
+ */
+
+ // To fix Judge Dredd movies: use first block
+#if 0
+ if( (cdr.Mode & 0x40) == 0 || (cdr.Transfer[4+2] & 0x4) != 0x4 ) {
+ cdr.Stat = DataReady;
+ psxHu32ref(0x1070) |= SWAP32((u32)0x4);
+ }
+#elif 0
if( (cdr.Mode & 0x40) == 0 || (cdr.Transfer[4+2] & 0x4) != 0x4 ) {
- cdr.Stat = DataReady;
- psxHu32ref(0x1070) |= SWAP32((u32)0x4);
+ cdr.Stat = DataReady;
+ psxHu32ref(0x1070) |= SWAP32((u32)0x4);
} else {
cdr.Stat = Acknowledge;
- psxHu32ref(0x1070) |= SWAP32((u32)0x4);
- }
+ psxHu32ref(0x1070) |= SWAP32((u32)0x4);
+ }
#else
- cdr.Stat = DataReady;
- psxHu32ref(0x1070) |= SWAP32((u32)0x4);
+ cdr.Stat = DataReady;
+ psxHu32ref(0x1070) |= SWAP32((u32)0x4);
#endif
-
- Check_Shell(0);
+
+ Check_Shell(0);
}
/*
@@ -1287,19 +1287,19 @@ void cdrWrite0(unsigned char rt) {
#endif
cdr.Ctrl = rt | (cdr.Ctrl & ~0x3);
- if (rt == 0) {
- cdr.ParamP = 0;
- cdr.ParamC = 0;
- cdr.ResultReady = 0;
- }
-
- // Tekken: CDXA fade-out
- else if( rt == 2 ) {
- cdr.LeftVol = 0;
- }
- else if( rt == 3 ) {
- cdr.RightVol = 0;
- }
+ if (rt == 0) {
+ cdr.ParamP = 0;
+ cdr.ParamC = 0;
+ cdr.ResultReady = 0;
+ }
+
+ // Tekken: CDXA fade-out
+ else if( rt == 2 ) {
+ cdr.LeftVol = 0;
+ }
+ else if( rt == 3 ) {
+ cdr.RightVol = 0;
+ }
}
unsigned char cdrRead1(void) {
@@ -1324,14 +1324,14 @@ void cdrWrite1(unsigned char rt) {
#ifdef CDR_LOG
CDR_LOG("cdrWrite1() Log: CD1 write: %x (%s)\n", rt, CmdName[rt]);
#endif
-
-
- // Tekken: CDXA fade-out
- if( (cdr.Ctrl & 3) == 3 ) {
- cdr.RightVol |= (rt << 8);
- }
-
-
+
+
+ // Tekken: CDXA fade-out
+ if( (cdr.Ctrl & 3) == 3 ) {
+ cdr.RightVol |= (rt << 8);
+ }
+
+
// psxHu8(0x1801) = rt;
cdr.Cmd = rt;
cdr.OCUP = 0;
@@ -1401,24 +1401,24 @@ void cdrWrite1(unsigned char rt) {
AddIrqQueue(cdr.Cmd, 0x1000);
break;
- case CdlPlay:
- // Vib Ribbon: try same track again
- StopCdda();
-
- // Vib Ribbon - decoded buffer IRQ for CDDA reading
- // - fixes ribbon timing + music CD mode
- CDRDBUF_INT( PSXCLK / 44100 * 0x100 );
-
-
- cdr.Play = TRUE;
-
- cdr.StatP |= 0x40;
- cdr.StatP &= ~0x02;
-
- cdr.Ctrl |= 0x80;
- cdr.Stat = NoIntr;
- AddIrqQueue(cdr.Cmd, 0x1000);
- break;
+ case CdlPlay:
+ // Vib Ribbon: try same track again
+ StopCdda();
+
+ // Vib Ribbon - decoded buffer IRQ for CDDA reading
+ // - fixes ribbon timing + music CD mode
+ CDRDBUF_INT( PSXCLK / 44100 * 0x100 );
+
+
+ cdr.Play = TRUE;
+
+ cdr.StatP |= 0x40;
+ cdr.StatP &= ~0x02;
+
+ cdr.Ctrl |= 0x80;
+ cdr.Stat = NoIntr;
+ AddIrqQueue(cdr.Cmd, 0x1000);
+ break;
case CdlForward:
//if (cdr.CurTrack < 0xaa)
@@ -1495,18 +1495,18 @@ void cdrWrite1(unsigned char rt) {
StopReading();
cdr.Ctrl |= 0x80;
cdr.Stat = NoIntr;
-
- /*
- Gundam Battle Assault 2: much slower (*)
- - Fixes boot, gameplay
-
- Hokuto no Ken 2: slower
- - Fixes intro + subtitles
-
- InuYasha - Feudal Fairy Tale: slower
- - Fixes battles
- */
- AddIrqQueue(cdr.Cmd, cdReadTime * 3);
+
+ /*
+ Gundam Battle Assault 2: much slower (*)
+ - Fixes boot, gameplay
+
+ Hokuto no Ken 2: slower
+ - Fixes intro + subtitles
+
+ InuYasha - Feudal Fairy Tale: slower
+ - Fixes battles
+ */
+ AddIrqQueue(cdr.Cmd, cdReadTime * 3);
break;
case CdlReset:
@@ -1523,10 +1523,10 @@ void cdrWrite1(unsigned char rt) {
cdr.Ctrl |= 0x80;
cdr.Stat = NoIntr;
AddIrqQueue(cdr.Cmd, 0x1000);
-
- // cd-xa volume
- SPU_writeRegister( H_CDLeft, 0x0000 );
- SPU_writeRegister( H_CDRight, 0x0000 );
+
+ // cd-xa volume
+ SPU_writeRegister( H_CDLeft, 0x0000 );
+ SPU_writeRegister( H_CDRight, 0x0000 );
break;
case CdlDemute:
@@ -1534,11 +1534,11 @@ void cdrWrite1(unsigned char rt) {
cdr.Ctrl |= 0x80;
cdr.Stat = NoIntr;
AddIrqQueue(cdr.Cmd, 0x1000);
-
- // Vib Ribbon: get music to output volume
- // cd-xa volume
- SPU_writeRegister( H_CDLeft, 0x7f00 );
- SPU_writeRegister( H_CDRight, 0x7f00 );
+
+ // Vib Ribbon: get music to output volume
+ // cd-xa volume
+ SPU_writeRegister( H_CDLeft, 0x7f00 );
+ SPU_writeRegister( H_CDRight, 0x7f00 );
break;
case CdlSetfilter:
@@ -1557,11 +1557,11 @@ void cdrWrite1(unsigned char rt) {
cdr.Ctrl |= 0x80;
cdr.Stat = NoIntr;
AddIrqQueue(cdr.Cmd, 0x1000);
-
- // Squaresoft on PlayStation 1998 Collector's CD Vol. 1
- // - fixes choppy movie sound
- if( cdr.Play && (cdr.Mode & 1) == 0 )
- StopCdda();
+
+ // Squaresoft on PlayStation 1998 Collector's CD Vol. 1
+ // - fixes choppy movie sound
+ if( cdr.Play && (cdr.Mode & 1) == 0 )
+ StopCdda();
break;
case CdlGetmode:
@@ -1617,13 +1617,13 @@ void cdrWrite1(unsigned char rt) {
AddIrqQueue(cdr.Cmd, 0x1000);
break;
- // Destruction Derby: read TOC? GetTD after this
- case CdlReadT:
- cdr.Ctrl |= 0x80;
- cdr.Stat = NoIntr;
- AddIrqQueue(cdr.Cmd, 0x1000);
- break;
-
+ // Destruction Derby: read TOC? GetTD after this
+ case CdlReadT:
+ cdr.Ctrl |= 0x80;
+ cdr.Stat = NoIntr;
+ AddIrqQueue(cdr.Cmd, 0x1000);
+ break;
+
case CdlTest:
cdr.Ctrl |= 0x80;
cdr.Stat = NoIntr;
@@ -1680,18 +1680,18 @@ void cdrWrite2(unsigned char rt) {
#ifdef CDR_LOG
CDR_LOG("cdrWrite2() Log: CD2 write: %x\n", rt);
#endif
-
-
- // Tekken: CDXA fade-out
- if( (cdr.Ctrl & 3) == 2 ) {
- cdr.LeftVol |= (rt << 8);
- }
- else if( (cdr.Ctrl & 3) == 3 ) {
- cdr.RightVol |= (rt << 0);
- }
-
-
-
+
+
+ // Tekken: CDXA fade-out
+ if( (cdr.Ctrl & 3) == 2 ) {
+ cdr.LeftVol |= (rt << 8);
+ }
+ else if( (cdr.Ctrl & 3) == 3 ) {
+ cdr.RightVol |= (rt << 0);
+ }
+
+
+
if (cdr.Ctrl & 0x1) {
switch (rt) {
case 0x07:
@@ -1731,28 +1731,28 @@ void cdrWrite3(unsigned char rt) {
CDR_LOG("cdrWrite3() Log: CD3 write: %x\n", rt);
#endif
- // Tekken: CDXA fade-out
- if( (cdr.Ctrl & 3) == 2 ) {
- cdr.LeftVol |= (rt << 0);
- }
- else if( (cdr.Ctrl & 3) == 3 && rt == 0x20 ) {
-#ifdef CDR_LOG
- CDR_LOG( "CD-XA Volume: %X %X\n", cdr.LeftVol, cdr.RightVol );
-#endif
-
- if( !cdr.Muted ) {
- /*
- Eternal SPU: scale volume from [0-ffff] -> [0,8000]
- - Destruction Derby Raw movies (ff00)
- */
-
- // write CD-XA volumes
- SPU_writeRegister( H_CDLeft, cdr.LeftVol / 2 );
- SPU_writeRegister( H_CDRight, cdr.RightVol / 2 );
- }
- }
-
-
+ // Tekken: CDXA fade-out
+ if( (cdr.Ctrl & 3) == 2 ) {
+ cdr.LeftVol |= (rt << 0);
+ }
+ else if( (cdr.Ctrl & 3) == 3 && rt == 0x20 ) {
+#ifdef CDR_LOG
+ CDR_LOG( "CD-XA Volume: %X %X\n", cdr.LeftVol, cdr.RightVol );
+#endif
+
+ if( !cdr.Muted ) {
+ /*
+ Eternal SPU: scale volume from [0-ffff] -> [0,8000]
+ - Destruction Derby Raw movies (ff00)
+ */
+
+ // write CD-XA volumes
+ SPU_writeRegister( H_CDLeft, cdr.LeftVol / 2 );
+ SPU_writeRegister( H_CDRight, cdr.RightVol / 2 );
+ }
+ }
+
+
// GameShark CDX CD Player: Irq timing mania
if( rt == 0 &&
cdr.Irq != 0 && cdr.Irq != 0xff &&
@@ -1775,11 +1775,11 @@ void cdrWrite3(unsigned char rt) {
return;
}
- /*
- Do not reset interrupts here
- - Doom: fixes boot
- - Judge Dredd: better gameplay, some dropped frames
- */
+ /*
+ Do not reset interrupts here
+ - Doom: fixes boot
+ - Judge Dredd: better gameplay, some dropped frames
+ */
return;
}
@@ -1793,11 +1793,11 @@ void cdrWrite3(unsigned char rt) {
case 0x00:
cdr.pTransfer += 12;
break;
-
- case 0x20:
- cdr.pTransfer += 0;
- break;
-
+
+ case 0x20:
+ cdr.pTransfer += 0;
+ break;
+
default:
break;
}
@@ -1852,14 +1852,14 @@ void psxDma3(u32 madr, u32 bcr, u32 chcr) {
psxCpu->Clear(madr, cdsize / 4);
cdr.pTransfer += cdsize;
-
- // burst vs normal
- if( chcr == 0x11400100 ) {
- CDRDMA_INT( (cdsize/4) / 4 );
- }
- else if( chcr == 0x11000000 ) {
- CDRDMA_INT( (cdsize/4) * 1 );
- }
+
+ // burst vs normal
+ if( chcr == 0x11400100 ) {
+ CDRDMA_INT( (cdsize/4) / 4 );
+ }
+ else if( chcr == 0x11000000 ) {
+ CDRDMA_INT( (cdsize/4) * 1 );
+ }
return;
default:
@@ -1903,7 +1903,7 @@ int cdrFreeze(gzFile f, int Mode) {
}
void LidInterrupt() {
- cdr.LidCheck = 0x20; // start checker
+ cdr.LidCheck = 0x20; // start checker
// generate interrupt if none active - open or close
if (cdr.Irq == 0 || cdr.Irq == 0xff) {