A few minor modifications to CDVD and IPU.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1612 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
arcum42 2009-08-09 03:42:02 +00:00
parent 3bd8037573
commit 5bdc1947f4
3 changed files with 42 additions and 42 deletions

View File

@ -1094,8 +1094,8 @@ static void cdvdWrite04(u8 rt) { // NCOMMAND
break;
case N_CD_READ: // CdRead
cdvd.SeekToSector = *(uint*)(cdvd.Param+0);
cdvd.nSectors = *(int*)(cdvd.Param+4);
cdvd.SeekToSector = (cdvd.Param[0] << 0) | (cdvd.Param[1] << 8) | (cdvd.Param[2]<< 16) | (cdvd.Param[3] << 24);
cdvd.nSectors = (cdvd.Param[4] << 0) | (cdvd.Param[5] << 8) | (cdvd.Param[6]<< 16) | (cdvd.Param[7] << 24);
cdvd.RetryCnt = (cdvd.Param[8] == 0) ? 0x100 : cdvd.Param[8];
cdvd.SpindlCtrl = cdvd.Param[9];
cdvd.Speed = 24;
@ -1129,8 +1129,8 @@ static void cdvdWrite04(u8 rt) { // NCOMMAND
case N_CD_READ_CDDA: // CdReadCDDA
case N_CD_READ_XCDDA: // CdReadXCDDA
cdvd.SeekToSector = *(int*)(cdvd.Param+0);
cdvd.nSectors = *(int*)(cdvd.Param+4);
cdvd.SeekToSector = (cdvd.Param[0] << 0) | (cdvd.Param[1] << 8) | (cdvd.Param[2]<< 16) | (cdvd.Param[3] << 24);
cdvd.nSectors = (cdvd.Param[4] << 0) | (cdvd.Param[5] << 8) | (cdvd.Param[6]<< 16) | (cdvd.Param[7] << 24);
if (cdvd.Param[8] == 0)
cdvd.RetryCnt = 0x100;
@ -1175,8 +1175,8 @@ static void cdvdWrite04(u8 rt) { // NCOMMAND
break;
case N_DVD_READ: // DvdRead
cdvd.SeekToSector = *(int*)(cdvd.Param+0);
cdvd.nSectors = *(int*)(cdvd.Param+4);
cdvd.SeekToSector = (cdvd.Param[0] << 0) | (cdvd.Param[1] << 8) | (cdvd.Param[2]<< 16) | (cdvd.Param[3] << 24);
cdvd.nSectors = (cdvd.Param[4] << 0) | (cdvd.Param[5] << 8) | (cdvd.Param[6]<< 16) | (cdvd.Param[7] << 24);
if (cdvd.Param[8] == 0)
cdvd.RetryCnt = 0x100;

View File

@ -117,7 +117,7 @@ extern "C"
PCSX2_ALIGNED16(u8 _readbits[80]); //local buffer (ring buffer)
u8* readbits = _readbits; // always can decrement by one 1qw
#define SATURATE_4BITS(val) ((val)>15 ? 15 : (val))
//#define SATURATE_4BITS(val) ((val)>15 ? 15 : (val))
__forceinline void IPUProcessInterrupt()
{
@ -317,21 +317,20 @@ __forceinline u64 ipuRead64(u32 mem)
void ipuSoftReset()
{
mpeg2_init();
FIFOto_clear();
memzero_obj(fifo_output);
FOwritepos = 0;
FOreadpos = 0;
FIFOfrom_clear();
coded_block_pattern = 0;
ipuRegs->ctrl._u32 = 0;
ipuRegs->top = 0;
ipuCurCmd = 0xffffffff;
g_BP.BP = 0;
g_BP.IFC = 0;
g_BP.FP = 0;
g_BP.bufferhasnew = 0;
ipuRegs->top = 0;
g_nCmdIndex = 0;
ipuCurCmd = 0xffffffff;
g_nCmdPos[0] = 0;
g_nCmdPos[1] = 0;
}
@ -404,10 +403,10 @@ __forceinline void ipuWrite64(u32 mem, u64 value)
static void ipuBCLR(u32 val)
{
FIFOto_clear();
g_BP.BP = val & 0x7F;
g_BP.FP = 0;
g_BP.bufferhasnew = 0;
g_BP.IFC = 0;
ipuRegs->ctrl.BUSY = 0;
ipuRegs->cmd.BUSY = 0;
memzero_ptr<80>(readbits);
@ -1333,14 +1332,12 @@ int FIFOto_read(void *value)
}
// transfer 1 qword, split into two transfers
((u32*)value)[0] = fifo_input[FIreadpos];
fifo_input[FIreadpos] = 0;
((u32*)value)[1] = fifo_input[FIreadpos+1];
fifo_input[FIreadpos+1] = 0;
((u32*)value)[2] = fifo_input[FIreadpos+2];
fifo_input[FIreadpos+2] = 0;
((u32*)value)[3] = fifo_input[FIreadpos+3];
fifo_input[FIreadpos+3] = 0;
for (int i = 0; i <= 3; i++)
{
((u32*)value)[i] = fifo_input[FIreadpos + i];
fifo_input[FIreadpos + i] = 0;
}
FIreadpos = (FIreadpos + 4) & 31;
g_BP.IFC--;
return 1;
@ -1356,10 +1353,10 @@ int FIFOto_write(u32* pMem, int size)
while (transsize-- > 0)
{
fifo_input[FIwritepos] = pMem[0];
fifo_input[FIwritepos+1] = pMem[1];
fifo_input[FIwritepos+2] = pMem[2];
fifo_input[FIwritepos+3] = pMem[3];
for (int i = 0; i <= 3; i++)
{
fifo_input[FIwritepos + i] = pMem[i];
}
FIwritepos = (FIwritepos + 4) & 31;
pMem += 4;
}
@ -1597,6 +1594,13 @@ int IPU1dma()
return totalqwc;
}
void FIFOfrom_clear()
{
memzero_obj(fifo_output);
ipuRegs->ctrl.OFC = 0;
FOreadpos = 0;
FOwritepos = 0;
}
int FIFOfrom_write(const u32 *value, int size)
{
@ -1609,10 +1613,10 @@ int FIFOfrom_write(const u32 *value, int size)
while (transsize-- > 0)
{
fifo_output[FOwritepos] = ((u32*)value)[0];
fifo_output[FOwritepos+1] = ((u32*)value)[1];
fifo_output[FOwritepos+2] = ((u32*)value)[2];
fifo_output[FOwritepos+3] = ((u32*)value)[3];
for (int i = 0; i <= 3; i++)
{
fifo_output[FOwritepos + i] = ((u32*)value)[i];
}
FOwritepos = (FOwritepos + 4) & 31;
value += 4;
}
@ -1627,14 +1631,11 @@ int FIFOfrom_write(const u32 *value, int size)
static __forceinline void _FIFOfrom_readsingle(void *value)
{
// transfer 1 qword, split into two transfers
((u32*)value)[0] = fifo_output[FOreadpos];
fifo_output[FOreadpos] = 0;
((u32*)value)[1] = fifo_output[FOreadpos+1];
fifo_output[FOreadpos+1] = 0;
((u32*)value)[2] = fifo_output[FOreadpos+2];
fifo_output[FOreadpos+2] = 0;
((u32*)value)[3] = fifo_output[FOreadpos+3];
fifo_output[FOreadpos+3] = 0;
for (int i = 0; i <= 3; i++)
{
((u32*)value)[i] = fifo_output[FOreadpos + i];
fifo_output[FOreadpos + i] = 0;
}
FOreadpos = (FOreadpos + 4) & 31;
}
@ -1658,8 +1659,6 @@ void FIFOfrom_read(void *value, int size)
}
}
int IPU0dma()
{
int readsize;

View File

@ -273,5 +273,6 @@ void FIFOfrom_read(void *value,int size);
int FIFOto_read(void *value);
int FIFOto_write(u32* pMem, int size);
void FIFOto_clear();
void FIFOfrom_clear();
#endif