From e0cef88d546aa877fd39267d791f201fe637295d Mon Sep 17 00:00:00 2001 From: arcum42 Date: Sun, 11 Oct 2009 08:40:44 +0000 Subject: [PATCH] A couple misc changes. Converted a few more lines to the new register format, fixed spelling in a few comments, and so on... git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1997 96395faa-99c1-11dd-bbfe-3dabce05a288 --- pcsx2/CDVD/CDVD.cpp | 84 +++++++++++++++++++++---------------------- pcsx2/Gif.cpp | 20 ++++++++--- pcsx2/Sif.cpp | 15 ++++---- pcsx2/Vif.cpp | 17 +++++---- pcsx2/ps2/GIFpath.cpp | 6 ++-- pcsx2/x86/iR3000A.cpp | 2 +- 6 files changed, 75 insertions(+), 69 deletions(-) diff --git a/pcsx2/CDVD/CDVD.cpp b/pcsx2/CDVD/CDVD.cpp index b7cf657ca5..deeb9736f4 100644 --- a/pcsx2/CDVD/CDVD.cpp +++ b/pcsx2/CDVD/CDVD.cpp @@ -120,7 +120,7 @@ FILE *_cdvdOpenNVM() nvmfile.SetExt( L"nvm" ); const wxCharBuffer file( nvmfile.GetFullPath().ToUTF8() ); - // if file doesnt exist, create empty one + // if file doesn't exist, create empty one fd = fopen(file.data(), "r+b"); if (fd == NULL) { @@ -266,13 +266,13 @@ s32 cdvdReadConfig(u8* config) switch (cdvd.COffset) { case 0: - return getNvmData(config, (cdvd.CBlockIndex++)*16, 16, offsetof(NVMLayout, config0)); + return getNvmData(config, (cdvd.CBlockIndex++)*16, 16, offsetof(NVMLayout, config0)); break; case 2: - return getNvmData(config, (cdvd.CBlockIndex++)*16, 16, offsetof(NVMLayout, config2)); + return getNvmData(config, (cdvd.CBlockIndex++)*16, 16, offsetof(NVMLayout, config2)); break; default: - return getNvmData(config, (cdvd.CBlockIndex++)*16, 16, offsetof(NVMLayout, config1)); + return getNvmData(config, (cdvd.CBlockIndex++)*16, 16, offsetof(NVMLayout, config1)); } } s32 cdvdWriteConfig(const u8* config) @@ -291,7 +291,7 @@ s32 cdvdWriteConfig(const u8* config) switch (cdvd.COffset) { case 0: - return setNvmData(config, (cdvd.CBlockIndex++)*16, 16,offsetof(NVMLayout, config0)); + return setNvmData(config, (cdvd.CBlockIndex++)*16, 16, offsetof(NVMLayout, config0)); break; case 2: return setNvmData(config, (cdvd.CBlockIndex++)*16, 16, offsetof(NVMLayout, config2)); @@ -301,6 +301,16 @@ s32 cdvdWriteConfig(const u8* config) } } +void reloadElfInfo(const char* str) +{ + // Now's a good time to reload the ELF info... + if (ElfCRC == 0) + { + ElfCRC = loadElfCRC( str ); + ElfApplyPatches(); + mtgsThread.SendGameCRC( ElfCRC ); + } +} void cdvdReadKey(u8 arg0, u16 arg1, u32 arg2, u8* key) { wxString fname; @@ -345,40 +355,36 @@ void cdvdReadKey(u8 arg0, u16 arg1, u32 arg2, u8* key) { key[ 3] = (key_0_3&0xFF000000)>>24; key[ 4] = key_4; - if(arg2 == 75) - { - key[14] = key_14; - key[15] = 0x05; - } - else if(arg2 == 3075) - { - key[15] = 0x01; - } - else if(arg2 == 4246) - { - // 0x0001F2F707 = sector 0x0001F2F7 dec 0x07 - key[ 0] = 0x07; - key[ 1] = 0xF7; - key[ 2] = 0xF2; - key[ 3] = 0x01; - key[ 4] = 0x00; - key[15] = 0x01; - } - else - { - key[15] = 0x01; - } + switch (arg2) + { + case 75: + key[14] = key_14; + key[15] = 0x05; + break; + +// case 3075: +// key[15] = 0x01; +// break; + + case 4246: + // 0x0001F2F707 = sector 0x0001F2F7 dec 0x07 + key[ 0] = 0x07; + key[ 1] = 0xF7; + key[ 2] = 0xF2; + key[ 3] = 0x01; + key[ 4] = 0x00; + key[15] = 0x01; + break; + + default: + key[15] = 0x01; + break; + } Console.WriteLn( "CDVD.KEY = %02X,%02X,%02X,%02X,%02X,%02X,%02X", cdvd.Key[0],cdvd.Key[1],cdvd.Key[2],cdvd.Key[3],cdvd.Key[4],cdvd.Key[14],cdvd.Key[15] ); - // Now's a good time to reload the ELF info... - if( IsPs2 && (ElfCRC == 0) ) - { - ElfCRC = loadElfCRC( str ); - ElfApplyPatches(); - mtgsThread.SendGameCRC( ElfCRC ); - } + if (IsPs2) reloadElfInfo(str); } s32 cdvdGetToc(void* toc) @@ -505,13 +511,7 @@ void cdvdDetectDisk() wxString str; bool IsPs2 = (GetPS2ElfName(str) == 2); - // Now's a good time to reload the ELF info... - if( IsPs2 && (ElfCRC == 0) ) - { - ElfCRC = loadElfCRC( str.ToAscii().data() ); - ElfApplyPatches(); - mtgsThread.SendGameCRC( ElfCRC ); - } + if (IsPs2) reloadElfInfo(str.ToAscii().data()); } void cdvdNewDiskCB() diff --git a/pcsx2/Gif.cpp b/pcsx2/Gif.cpp index 8ca03708e2..b6de30396d 100644 --- a/pcsx2/Gif.cpp +++ b/pcsx2/Gif.cpp @@ -65,7 +65,11 @@ __forceinline void gsInterrupt() if (Path3progress != IMAGE_MODE) vif1Regs->stat.VGW = 0; } - if (Path3progress == STOPPED_MODE) gifRegs->stat.clear(GIF_STAT_APATH3 | GIF_STAT_OPH); // OPH=0 | APATH=0 + if (Path3progress == STOPPED_MODE) + { + gifRegs->stat.clear(GIF_STAT_APATH3 | GIF_STAT_OPH); + } + if ((gif->qwc > 0) || (!gspath3done)) { if (!dmacRegs->ctrl.DMAE) @@ -94,8 +98,9 @@ __forceinline void gsInterrupt() } static u32 WRITERING_DMA(u32 *pMem, u32 qwc) -{ - psHu32(GIF_STAT) |= GIF_STAT_APATH3 | GIF_STAT_OPH; +{ + gifRegs->stat.APATH = GIF_APATH3; + gifRegs->stat.OPH = 1; int size = mtgsThread.PrepDataPacket(GIF_PATH_3, pMem, qwc); u8* pgsmem = mtgsThread.GetDataPacketPtr(); @@ -490,7 +495,7 @@ void mfifoGIFtransfer(int qwc) { SPR_LOG("dmaIrq Set"); gifstate = GIF_STATE_DONE; - gifmfifoirq = TRUE; + gifmfifoirq = true; } } @@ -511,7 +516,12 @@ void mfifoGIFtransfer(int qwc) void gifMFIFOInterrupt() { mfifocycles = 0; - if (Path3progress == STOPPED_MODE) psHu32(GIF_STAT)&= ~(GIF_STAT_APATH3 | GIF_STAT_OPH); // OPH=0 | APATH=0 + + if (Path3progress == STOPPED_MODE) + { + gifRegs->stat.APATH = GIF_APATH_IDLE; + gifRegs->stat.OPH = 0; + } if ((spr0->chcr.STR) && (spr0->qwc == 0)) { diff --git a/pcsx2/Sif.cpp b/pcsx2/Sif.cpp index a0f577cea7..7d60a0c714 100644 --- a/pcsx2/Sif.cpp +++ b/pcsx2/Sif.cpp @@ -188,7 +188,7 @@ __forceinline void SIF0Dma() if (eesifbusy[0]) // If EE SIF enabled and there's something to transfer { int size = sif0dma->qwc; - if (dmacRegs->ctrl.STS == STS_SIF0) // STS == fromSIF0 + if (dmacRegs->ctrl.STS == STS_SIF0) { SIF_LOG("SIF0 stall control"); } @@ -217,7 +217,8 @@ __forceinline void SIF0Dma() if (sif0dma->qwc == 0) { // Stop if TIE & the IRQ are set, or at the end. (I'll try to convert this to use the tags code later.) - if (((sif0dma->chcr._u32 & 0x80000080) == 0x80000080) || (sif0.end)) + //if (((sif0dma->chcr._u32 & 0x80000080) == 0x80000080) || (sif0.end)) + if ((sif0dma->chcr.TIE & Tag::IRQ(sif0dma->chcr._u32)) || sif0.end) { if (sif0.end) SIF_LOG(" EE SIF end"); @@ -242,11 +243,10 @@ __forceinline void SIF0Dma() // (tag[0] >> 28) & 3? Surely this is supposed to be (tag[0] >> 28) & 7? --arcum42 if ((dmacRegs->ctrl.STS != NO_STS) && ((tag[0] >> 28) & 3) == 0) - psHu32(DMAC_STADR) = sif0dma->madr + (sif0dma->qwc * 16); + dmacRegs->stadr.ADDR = sif0dma->madr + (sif0dma->qwc * 16); sif0.chain = 1; if (tag[0] & 0x40000000) sif0.end = 1; done = false; - } } } @@ -263,7 +263,6 @@ __forceinline void SIF1Dma() { if (eesifbusy[1]) // If EE SIF1 is enabled { - if (dmacRegs->ctrl.STD == STD_SIF1) SIF_LOG("SIF1 stall control"); // STD == fromSIF1 @@ -286,8 +285,6 @@ __forceinline void SIF1Dma() ptag = _dmaGetAddr(sif1dma, sif1dma->tadr, DMAC_SIF1); if (ptag == NULL) return; - //_dmaGetAddr(sif1dma, *ptag, sif1dma->tadr, DMAC_SIF1); - sif1dma->chcr._u32 = (sif1dma->chcr._u32 & 0xFFFF) | ((*ptag) & 0xFFFF0000); // Copy the tag sif1dma->qwc = (u16)ptag[0]; @@ -352,8 +349,6 @@ __forceinline void SIF1Dma() data = _dmaGetAddr(sif1dma, sif1dma->madr, DMAC_SIF1); if (data == NULL) return; - - //_dmaGetAddr(sif1dma, *data, sif1dma->madr, DMAC_SIF1); if (qwTransfer > (FIFO_SIF1_W - sif1.fifoSize) / 4) // Copy part of sif1dma into FIFO qwTransfer = (FIFO_SIF1_W - sif1.fifoSize) / 4; @@ -451,6 +446,7 @@ __forceinline void dmaSIF0() psHu32(SBUS_F240) |= 0x2000; eesifbusy[0] = true; + if (iopsifbusy[0]) { FreezeXMMRegs(1); @@ -474,6 +470,7 @@ __forceinline void dmaSIF1() psHu32(SBUS_F240) |= 0x4000; eesifbusy[1] = true; + if (iopsifbusy[1]) { FreezeXMMRegs(1); diff --git a/pcsx2/Vif.cpp b/pcsx2/Vif.cpp index ff0e7e16cd..ef1c8212d8 100644 --- a/pcsx2/Vif.cpp +++ b/pcsx2/Vif.cpp @@ -635,6 +635,7 @@ void vifMFIFOInterrupt() vif1Regs->stat.INT = 1; hwIntcIrq(INTC_VIF1); --vif1.irq; + if (vif1Regs->stat.test(VIF1_STAT_VSS | VIF1_STAT_VIS | VIF1_STAT_VFS)) { vif1Regs->stat.FQC = 0; // FQC=0 @@ -645,12 +646,10 @@ void vifMFIFOInterrupt() if (vif1.done == false || vif1ch->qwc) { - - switch(vif1.inprogress & 1) { case 0: //Set up transfer - if (vif1ch->tadr == spr0->madr) + if (vif1ch->tadr == spr0->madr) { // Console.WriteLn("Empty 1"); vifqwc = 0; @@ -660,13 +659,14 @@ void vifMFIFOInterrupt() return; } - mfifoVIF1transfer(0); - if ((vif1ch->madr >= dmacRegs->rbor.ADDR) && (vif1ch->madr <= (dmacRegs->rbor.ADDR + dmacRegs->rbsr.RMSK))) - CPU_INT(10, 0); - else + mfifoVIF1transfer(0); + if ((vif1ch->madr >= dmacRegs->rbor.ADDR) && (vif1ch->madr <= (dmacRegs->rbor.ADDR + dmacRegs->rbsr.RMSK))) + CPU_INT(10, 0); + else CPU_INT(10, vif1ch->qwc * BIAS); return; + case 1: //Transfer data mfifo_VIF1chain(); CPU_INT(10, 0); @@ -689,6 +689,5 @@ void vifMFIFOInterrupt() hwDmacIrq(DMAC_VIF1); VIF_LOG("vif mfifo dma end"); - vif1Regs->stat.FQC = 0; // FQC=0 - + vif1Regs->stat.FQC = 0; } diff --git a/pcsx2/ps2/GIFpath.cpp b/pcsx2/ps2/GIFpath.cpp index 394b42e02c..357fa8ec1d 100644 --- a/pcsx2/ps2/GIFpath.cpp +++ b/pcsx2/ps2/GIFpath.cpp @@ -123,7 +123,7 @@ struct GifPathStruct // and raise a gsIrq. If CSR is already *set*, then ignore all subsequent drawing operations // and writes to general purpose registers to the GS. (note: I'm pretty sure this includes // direct GS and GSreg accesses, as well as those coming through the GIFpath -- but that -// behavior isn't confirmed yet). Privlidged writes are still active. +// behavior isn't confirmed yet). Privileged writes are still active. // // Ignorance continues until the SIGNAL bit in CSR is manually cleared by the EE. And here's // the tricky part: the interrupt from the second SIGNAL is still pending, and should be @@ -222,7 +222,7 @@ __forceinline bool GIFPath::StepReg() __forceinline u8 GIFPath::GetReg() { return regs[curreg]; } -// unpack the registers - registers are stored as a sequence of 4 bit values in the +// Unpack the registers - registers are stored as a sequence of 4 bit values in the // upper 64 bits of the GIFTAG. That sucks for us when handling partialized GIF packets // coming in from paths 2 and 3, so we unpack them into an 8 bit array here. // @@ -393,7 +393,7 @@ void GIFPath_Reset() } // This is a hackfix tool provided for "canceling" the contents of the GIFpath when -// invalid GIFdma states are encountered (tpyically needed for PATH3 only). +// invalid GIFdma states are encountered (typically needed for PATH3 only). __forceinline void GIFPath_Clear( GIF_PATH pathidx ) { memzero(s_gifPath.path[pathidx]); diff --git a/pcsx2/x86/iR3000A.cpp b/pcsx2/x86/iR3000A.cpp index e6f84071a1..8755b91985 100644 --- a/pcsx2/x86/iR3000A.cpp +++ b/pcsx2/x86/iR3000A.cpp @@ -662,7 +662,7 @@ static __forceinline s32 recExecuteBlock( s32 eeCycles ) // We should be able to rely on GAS syntax (the register clobber list) as a // replacement for manual push/pop of unpreserved registers. // - // EBP note: As I feared, EBP is "required" for C++ excepion handling in Linux, and trying + // EBP note: As I feared, EBP is "required" for C++ exception handling in Linux, and trying // to issue a clobber specifier for it causes an error. We really need to find a way to // disable EBP regalloc in iCore. --air