notaz.gp2x.de
/
pcsx_rearmed.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix various warnings
[pcsx_rearmed.git]
/
libpcsxcore
/
cdrom.c
diff --git
a/libpcsxcore/cdrom.c
b/libpcsxcore/cdrom.c
index
8785598
..
327ddb1
100644
(file)
--- a/
libpcsxcore/cdrom.c
+++ b/
libpcsxcore/cdrom.c
@@
-26,6
+26,7
@@
#include "psxdma.h"
cdrStruct cdr;
#include "psxdma.h"
cdrStruct cdr;
+static unsigned char *pTransfer;
/* CD-ROM magic numbers */
#define CdlSync 0
/* CD-ROM magic numbers */
#define CdlSync 0
@@
-121,11
+122,11
@@
unsigned char Test23[] = { 0x43, 0x58, 0x44, 0x32, 0x39 ,0x34, 0x30, 0x51 };
static struct CdrStat stat;
static struct CdrStat stat;
-static unsigned int msf2sec(
char
*msf) {
+static unsigned int msf2sec(
u8
*msf) {
return ((msf[0] * 60 + msf[1]) * 75) + msf[2];
}
return ((msf[0] * 60 + msf[1]) * 75) + msf[2];
}
-static void sec2msf(unsigned int s,
char
*msf) {
+static void sec2msf(unsigned int s,
u8
*msf) {
msf[0] = s / 75 / 60;
s = s - msf[0] * 75 * 60;
msf[1] = s / 75;
msf[0] = s / 75 / 60;
s = s - msf[0] * 75 * 60;
msf[1] = s / 75;
@@
-541,6
+542,9
@@
static void cdrPlayInterrupt_Autopause()
struct SubQ *subq = (struct SubQ *)CDR_getBufferSub();
int track_changed = 0;
if (subq != NULL ) {
struct SubQ *subq = (struct SubQ *)CDR_getBufferSub();
int track_changed = 0;
if (subq != NULL ) {
+ // update subq
+ ReadTrack( cdr.SetSectorPlay );
+
#ifdef CDR_LOG
CDR_LOG( "CDDA SUB - %X:%X:%X\n",
subq->AbsoluteAddress[0], subq->AbsoluteAddress[1], subq->AbsoluteAddress[2] );
#ifdef CDR_LOG
CDR_LOG( "CDDA SUB - %X:%X:%X\n",
subq->AbsoluteAddress[0], subq->AbsoluteAddress[1], subq->AbsoluteAddress[2] );
@@
-553,7
+557,9
@@
static void cdrPlayInterrupt_Autopause()
Tomb Raider 1 ($7)
*/
Tomb Raider 1 ($7)
*/
- if( cdr.CurTrack < btoi( subq->TrackNumber ) )
+ // .. + 1 is probably wrong, but deals with corrupted subq + good checksum
+ // (how does real thing handle those?)
+ if( cdr.CurTrack + 1 == btoi( subq->TrackNumber ) )
track_changed = 1;
} else {
Create_Fake_Subq();
track_changed = 1;
} else {
Create_Fake_Subq();
@@
-582,13
+588,14
@@
static void cdrPlayInterrupt_Autopause()
StopCdda();
}
StopCdda();
}
- if (cdr.Mode & MODE_REPORT) {
+
else
if (cdr.Mode & MODE_REPORT) {
if (subq != NULL) {
#ifdef CDR_LOG
CDR_LOG( "REPPLAY SUB - %X:%X:%X\n",
subq->AbsoluteAddress[0], subq->AbsoluteAddress[1], subq->AbsoluteAddress[2] );
#endif
if (subq != NULL) {
#ifdef CDR_LOG
CDR_LOG( "REPPLAY SUB - %X:%X:%X\n",
subq->AbsoluteAddress[0], subq->AbsoluteAddress[1], subq->AbsoluteAddress[2] );
#endif
- cdr.CurTrack = btoi( subq->TrackNumber );
+ // breaks when .sub doesn't have index 0 for some reason (bad rip?)
+ //cdr.CurTrack = btoi( subq->TrackNumber );
if (subq->AbsoluteAddress[2] & 0xf)
return;
if (subq->AbsoluteAddress[2] & 0xf)
return;
@@
-779,7
+786,7
@@
void cdrInterrupt() {
cdr.SetSectorPlay[2] = cdr.ResultTD[0];
// reset data
cdr.SetSectorPlay[2] = cdr.ResultTD[0];
// reset data
- Set_Track();
+
//
Set_Track();
Find_CurTrack();
ReadTrack( cdr.SetSectorPlay );
Find_CurTrack();
ReadTrack( cdr.SetSectorPlay );
@@
-958,6
+965,10
@@
void cdrInterrupt() {
subq = (struct SubQ *)CDR_getBufferSub();
if (subq != NULL) {
subq = (struct SubQ *)CDR_getBufferSub();
if (subq != NULL) {
+ if( cdr.Play && (cdr.Mode & MODE_CDDA) && !(cdr.Mode & (MODE_AUTOPAUSE|MODE_REPORT)) )
+ // update subq
+ ReadTrack( cdr.SetSectorPlay );
+
cdr.Result[0] = subq->TrackNumber;
cdr.Result[1] = subq->IndexNumber;
memcpy(cdr.Result + 2, subq->TrackRelativeAddress, 3);
cdr.Result[0] = subq->TrackNumber;
cdr.Result[1] = subq->IndexNumber;
memcpy(cdr.Result + 2, subq->TrackRelativeAddress, 3);
@@
-1264,6
+1275,9
@@
void cdrInterrupt() {
Check_Shell( Irq );
Check_Shell( Irq );
+ cdr.ParamP = 0;
+ cdr.ParamC = 0;
+
if (cdr.Stat != NoIntr && cdr.Reg2 != 0x18) {
psxHu32ref(0x1070) |= SWAP32((u32)0x4);
}
if (cdr.Stat != NoIntr && cdr.Reg2 != 0x18) {
psxHu32ref(0x1070) |= SWAP32((u32)0x4);
}
@@
-1451,12
+1465,6
@@
void cdrWrite0(unsigned char rt) {
CDR_LOG("cdrWrite0() Log: CD0 write: %x\n", rt);
#endif
cdr.Ctrl = (rt & 3) | (cdr.Ctrl & ~3);
CDR_LOG("cdrWrite0() Log: CD0 write: %x\n", rt);
#endif
cdr.Ctrl = (rt & 3) | (cdr.Ctrl & ~3);
-
- if (rt == 0) {
- cdr.ParamP = 0;
- cdr.ParamC = 0;
- cdr.ResultReady = 0;
- }
}
unsigned char cdrRead1(void) {
}
unsigned char cdrRead1(void) {
@@
-1476,7
+1484,7
@@
unsigned char cdrRead1(void) {
}
void cdrWrite1(unsigned char rt) {
}
void cdrWrite1(unsigned char rt) {
-
char
set_loc[3];
+
u8
set_loc[3];
int i;
#ifdef CDR_LOG
int i;
#ifdef CDR_LOG
@@
-1508,6
+1516,8
@@
void cdrWrite1(unsigned char rt) {
if (cdr.Ctrl & 0x3) return;
if (cdr.Ctrl & 0x3) return;
+ cdr.ResultReady = 0;
+
switch (cdr.Cmd) {
case CdlSync:
cdr.Ctrl |= 0x80;
switch (cdr.Cmd) {
case CdlSync:
cdr.Ctrl |= 0x80;
@@
-1809,6
+1819,8
@@
void cdrWrite1(unsigned char rt) {
break;
default:
break;
default:
+ cdr.ParamP = 0;
+ cdr.ParamC = 0;
#ifdef CDR_LOG
CDR_LOG("cdrWrite1() Log: Unknown command: %x\n", cdr.Cmd);
#endif
#ifdef CDR_LOG
CDR_LOG("cdrWrite1() Log: Unknown command: %x\n", cdr.Cmd);
#endif
@@
-1825,7
+1837,7
@@
unsigned char cdrRead2(void) {
if (cdr.Readed == 0) {
ret = 0;
} else {
if (cdr.Readed == 0) {
ret = 0;
} else {
- ret = *
cdr.
pTransfer++;
+ ret = *pTransfer++;
}
#ifdef CDR_LOG
}
#ifdef CDR_LOG
@@
-1941,16
+1953,16
@@
void cdrWrite3(unsigned char rt) {
if (rt == 0x80 && !(cdr.Ctrl & 0x3) && cdr.Readed == 0) {
cdr.Readed = 1;
if (rt == 0x80 && !(cdr.Ctrl & 0x3) && cdr.Readed == 0) {
cdr.Readed = 1;
-
cdr.
pTransfer = cdr.Transfer;
+ pTransfer = cdr.Transfer;
switch (cdr.Mode & 0x30) {
case MODE_SIZE_2328:
case 0x00:
switch (cdr.Mode & 0x30) {
case MODE_SIZE_2328:
case 0x00:
-
cdr.
pTransfer += 12;
+ pTransfer += 12;
break;
case MODE_SIZE_2340:
break;
case MODE_SIZE_2340:
-
cdr.
pTransfer += 0;
+ pTransfer += 0;
break;
default:
break;
default:
@@
-2006,16
+2018,16
@@
void psxDma3(u32 madr, u32 bcr, u32 chcr) {
- CdlPlay
- Spams DMA3 and gets buffer overrun
*/
- CdlPlay
- Spams DMA3 and gets buffer overrun
*/
- size = CD_FRAMESIZE_RAW - (
cdr.
pTransfer - cdr.Transfer);
+ size = CD_FRAMESIZE_RAW - (pTransfer - cdr.Transfer);
if (size > cdsize)
size = cdsize;
if (size > 0)
{
if (size > cdsize)
size = cdsize;
if (size > 0)
{
- memcpy(ptr,
cdr.
pTransfer, size);
+ memcpy(ptr, pTransfer, size);
}
psxCpu->Clear(madr, cdsize / 4);
}
psxCpu->Clear(madr, cdsize / 4);
-
cdr.
pTransfer += cdsize;
+ pTransfer += cdsize;
// burst vs normal
// burst vs normal
@@
-2052,6
+2064,7
@@
void cdrReset() {
cdr.CurTrack = 1;
cdr.File = 1;
cdr.Channel = 1;
cdr.CurTrack = 1;
cdr.File = 1;
cdr.Channel = 1;
+ pTransfer = cdr.Transfer;
// BIOS player - default values
cdr.AttenuatorLeft[0] = 0x80;
// BIOS player - default values
cdr.AttenuatorLeft[0] = 0x80;
@@
-2061,8
+2074,7
@@
void cdrReset() {
}
int cdrFreeze(gzFile f, int Mode) {
}
int cdrFreeze(gzFile f, int Mode) {
- uintptr_t tmp;
-
+ u32 tmp;
if( Mode == 0 ) {
StopCdda();
if( Mode == 0 ) {
StopCdda();
@@
-2071,12
+2083,12
@@
int cdrFreeze(gzFile f, int Mode) {
gzfreeze(&cdr, sizeof(cdr));
if (Mode == 1)
gzfreeze(&cdr, sizeof(cdr));
if (Mode == 1)
- tmp =
cdr.
pTransfer - cdr.Transfer;
+ tmp = pTransfer - cdr.Transfer;
gzfreeze(&tmp, sizeof(tmp));
if (Mode == 0) {
gzfreeze(&tmp, sizeof(tmp));
if (Mode == 0) {
-
cdr.
pTransfer = cdr.Transfer + tmp;
+ pTransfer = cdr.Transfer + tmp;
if (cdr.Play && !Config.Cdda)
CDR_play(cdr.SetSectorPlay);
if (cdr.Play && !Config.Cdda)
CDR_play(cdr.SetSectorPlay);