PCSX2 bug(s)?
#11
(11-01-2011, 04:43 PM)ateste Wrote: If there was a more 'complete' list of possible CDVD game bug descriptions hanging around the SVN somewhere, maybe he'd revisit a few more again when he feels better. It's how we did bugs with PCSX1 - a sticky colored post-it board (really!).

This is a great idea Smile

Also I believe the decompression thing is a good reason why Tales would crash on us. I'll investigate in that direction.
Keep these infos coming, they're gold for us! Tongue2
Reply

Sponsored links

#12
We tried fixing SMT3 + TC2 (USA). Didn't get far. Tongue2 We think they're the same cdrom problem though.

A workaround gets TC2 to play in-game + SMT3 stops whining about BREAK.
Code:
if (EmuConfig.Speedhacks.fastCDVD) eCycle = 10;

Still looking at this. Both of us likely need to learn how to IOP debug.



Tried improving PCSX2 FWNull but didn't get anywhere. Sony I.Link doesn't match IEEE OHCI?
ftp://ftp.microsoft.com/bussys/1394/OHCI...OHC1.0.pdf
ftp://ftp.microsoft.com/bussys/1394/OHCI...OHC1.1.pdf

Register locations are different and Sony does 16-bit swapping compared to normal OHCI.


@rama
Does ToA toy with DMA3? Like stalling cdrom by holding DMA3 off for awhile?
Reply
#13
I'm not too good with reading logs but I'll attach one.
This is done in the problem loading spot, so if PCSX2 wouldn't be doing very long seek times here, it'd fail.


Attached Files
.7z   emuLog_TalesAbyss_loading.7z (Size: 48,37 KB / Downloads: 348)
Reply
#14
You've got a strange one.

Code:
CDVD(000290b8 9557f78a): cdvdWrite04: NCMD CdReadDVDV (8) (ParamP = b)
CDVD(000290b8 9557f78a): DvdRead > startSector=2007232, nSectors=64, RetryCnt=100, Speed=4(2), ReadMode=3(0) (1074=38a0d)
DvdRead: Reading Sector 2007232(64 Blocks of Size 2064) at Speed=4x
CDVD(000290b8 9557f78a): CdSeek Begin > Contiguous block without seek - delta=0 sectors
CDVD(000290b8 9557f78a): cdvdRead04(NCMD) 8
iReg(0004c798 955801bc): sio2_fifoIn: ctrl = 2, cmdlength = 9, cmdport = 0 (240940)
iReg(0004c798 955801f2): sio2_fifoIn: ctrl = 2002, cmdlength = 9, cmdport = 1 (240941)
iReg(0008b0d0 95581bd4): *** DMA 4 - mem2spu *** 1000201 addr = 9d540 size = 200010
CDVD(000119bc 955824e7): SECTOR 2007232 (BCR 2b0;c)
CDVD(0000ea90 95585242): SECTOR 2007233 (BCR 285;c)
iReg(0004c798 955868f8): sio2_fifoIn: ctrl = 2002, cmdlength = 6, cmdport = 0 (180643)
CDVD(00054e94 95587f9d): SECTOR 2007234 (BCR 25a;c)
CDVD(000ab6ac 9558acfb): SECTOR 2007235 (BCR 22f;c)
CDVD(0000c284 9558da56): SECTOR 2007236 (BCR 204;c)
CDVD(0000be9c 955907b0): SECTOR 2007237 (BCR 1d9;c)
CDVD(0000be9c 9559350a): SECTOR 2007238 (BCR 1ae;c)
CDVD(0000c4d8 9559626b): SECTOR 2007239 (BCR 183;c)
CDVD(0000be9c 95598fc5): SECTOR 2007240 (BCR 158;c)
CDVD(0000be9c 9559bd1f): SECTOR 2007241 (BCR 12d;c)
CDVD(0000be9c 9559ea79): SECTOR 2007242 (BCR 102;c)
CDVD(0000be9c 955a17d3): SECTOR 2007243 (BCR d7;c)
CDVD(0000be9c 955a452d): SECTOR 2007244 (BCR ac;c)
CDVD(0000be9c 955a7287): SECTOR 2007245 (BCR 81;c)
CDVD(0000be9c 955a9fe1): SECTOR 2007246 (BCR 56;c)
CDVD(0000be9c 955acd3b): SECTOR 2007247 (BCR 2b;c)
CDVD(000ab508 955afa96): SECTOR 2007248 (BCR 0;c)
CDVD(000ab508 955afa96): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(000aada4 955b05ed): SECTOR 2007248 (BCR 0;c)
CDVD(000aada4 955b05ed): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(0000c4b4 955b1144): SECTOR 2007248 (BCR 0;c)
CDVD(0000c4b4 955b1144): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(000051c0 955b1c9b): SECTOR 2007248 (BCR 0;c)
CDVD(000051c0 955b1c9b): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(000069f0 955b27f2): SECTOR 2007248 (BCR 0;c)
CDVD(000069f0 955b27f2): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(00006d1c 955b2810): *** DMA 3 *** 41000200 addr = 345b8 size = 2b0000c
CDVD(000f3704 955b334b): SECTOR 2007248 (BCR 2b0;c)
CDVD(0000be9c 955b60a5): SECTOR 2007249 (BCR 285;c)
CDVD(0000be9c 955b8dff): SECTOR 2007250 (BCR 25a;c)
CDVD(0000be9c 955bbb59): SECTOR 2007251 (BCR 22f;c)
CDVD(0000be9c 955be8b3): SECTOR 2007252 (BCR 204;c)
CDVD(00012558 955c160d): SECTOR 2007253 (BCR 1d9;c)
CDVD(0000be9c 955c4367): SECTOR 2007254 (BCR 1ae;c)
CDVD(00011abc 955c70c4): SECTOR 2007255 (BCR 183;c)
CDVD(0000be9c 955c9e1e): SECTOR 2007256 (BCR 158;c)
CDVD(0000be9c 955ccb78): SECTOR 2007257 (BCR 12d;c)
CDVD(0000be9c 955cf8d2): SECTOR 2007258 (BCR 102;c)
CDVD(0000be9c 955d262c): SECTOR 2007259 (BCR d7;c)
CDVD(000ab4ec 955d5389): SECTOR 2007260 (BCR ac;c)
CDVD(0000be9c 955d80e3): SECTOR 2007261 (BCR 81;c)
CDVD(0000be9c 955dae3d): SECTOR 2007262 (BCR 56;c)
CDVD(0000be9c 955ddb97): SECTOR 2007263 (BCR 2b;c)
CDVD(0000be9c 955e08f1): SECTOR 2007264 (BCR 0;c)
CDVD(0000be9c 955e08f1): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
iReg(0008b0d0 955e0bb9): *** DMA 4 - mem2spu *** 1000201 addr = 9cd40 size = 200010
CDVD(00099f90 955e144a): SECTOR 2007264 (BCR 0;c)
CDVD(00099f90 955e144a): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(00094750 955e1fa1): SECTOR 2007264 (BCR 0;c)
CDVD(00094750 955e1fa1): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(00096360 955e2af7): SECTOR 2007264 (BCR 0;c)
CDVD(00096360 955e2af7): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(0001b6c8 955e3654): SECTOR 2007264 (BCR 0;c)
CDVD(0001b6c8 955e3654): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(000054e0 955e41ae): SECTOR 2007264 (BCR 0;c)
CDVD(000054e0 955e41ae): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(00004798 955e4d06): SECTOR 2007264 (BCR 0;c)
CDVD(00004798 955e4d06): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(00006d1c 955e567e): *** DMA 3 *** 41000200 addr = 345b8 size = 2b0000c
CDVD(00005010 955e585d): SECTOR 2007264 (BCR 2b0;c)
CDVD(0000be9c 955e85b7): SECTOR 2007265 (BCR 285;c)
CDVD(0000be9c 955eb311): SECTOR 2007266 (BCR 25a;c)
CDVD(0000bef8 955ee070): SECTOR 2007267 (BCR 22f;c)
CDVD(0000be9c 955f0dca): SECTOR 2007268 (BCR 204;c)
CDVD(0000be9c 955f3b24): SECTOR 2007269 (BCR 1d9;c)
CDVD(0000be9c 955f687e): SECTOR 2007270 (BCR 1ae;c)
CDVD(001801a0 955f95db): SECTOR 2007271 (BCR 183;c)
CDVD(0000be9c 955fc335): SECTOR 2007272 (BCR 158;c)
CDVD(0000be9c 955ff08f): SECTOR 2007273 (BCR 12d;c)
CDVD(00011f28 95601e09): SECTOR 2007274 (BCR 102;c)
CDVD(0000be9c 95604b63): SECTOR 2007275 (BCR d7;c)
CDVD(0000be9c 956078bd): SECTOR 2007276 (BCR ac;c)
CDVD(0000be9c 9560a617): SECTOR 2007277 (BCR 81;c)
CDVD(0000be9c 9560d371): SECTOR 2007278 (BCR 56;c)
CDVD(000115b4 956100ce): SECTOR 2007279 (BCR 2b;c)
CDVD(0000be9c 95612e28): SECTOR 2007280 (BCR 0;c)
CDVD(0000be9c 95612e28): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(0003f610 9561398d): SECTOR 2007280 (BCR 0;c)
CDVD(0003f610 9561398d): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(00042bbc 956144e4): SECTOR 2007280 (BCR 0;c)
CDVD(00042bbc 956144e4): READBLOCK:  bcr < cdvd.BlockSize; 0 < 810
CDVD(00006d1c 956148b1): *** DMA 3 *** 41000200 addr = 345b8 size = 2b0000c
CDVD(0000be9c 9561503a): SECTOR 2007280 (BCR 2b0;c)
iReg(0004c798 9561642c): sio2_fifoIn: ctrl = 2, cmdlength = 9, cmdport = 0 (240940)
iReg(0004c798 95616462): sio2_fifoIn: ctrl = 2002, cmdlength = 9, cmdport = 1 (240941)
CDVD(0000e98c 95617d95): SECTOR 2007281 (BCR 285;c)
CDVD(00054e94 9561aaf4): SECTOR 2007282 (BCR 25a;c)
CDVD(0000be9c 9561d84e): SECTOR 2007283 (BCR 22f;c)
CDVD(000aaab8 956205ad): SECTOR 2007284 (BCR 204;c)
CDVD(0000be9c 95623307): SECTOR 2007285 (BCR 1d9;c)
CDVD(0000be9c 95626061): SECTOR 2007286 (BCR 1ae;c)
CDVD(00012128 95628dc1): SECTOR 2007287 (BCR 183;c)
CDVD(0000be9c 9562bb1b): SECTOR 2007288 (BCR 158;c)
CDVD(0000be9c 9562e875): SECTOR 2007289 (BCR 12d;c)
CDVD(0000be9c 956315cf): SECTOR 2007290 (BCR 102;c)
CDVD(0000be9c 95634329): SECTOR 2007291 (BCR d7;c)
CDVD(0000be9c 95637083): SECTOR 2007292 (BCR ac;c)
CDVD(0000be9c 95639ddd): SECTOR 2007293 (BCR 81;c)
CDVD(0000f4e4 9563cb37): SECTOR 2007294 (BCR 56;c)
CDVD(0000be9c 9563f891): SECTOR 2007295 (BCR 2b;c)
CDVD(00026af4 9563f91e): cdvdRead06(Error) 0
CDVD(00026b38 9563f929): cdvdRead08(Status) a
CDVD(00026b88 9563f92f): cdvdRead08(Status) a
CDVD(00026c04 9563f936): cdvdWrite08(IntrReason) = ACK(2)
CDVD(00026614 9563fcaa): cdvdRead13(Unknown) 4
CDVD(0002b114 95641b2b): cdvdRead0F(Disc Type) 14
CDVD(00029b58 95641bb9): cdvdRead0F(Disc Type) 14
CDVD(00028dc4 95641c2a): cdvdRead05(NReady) 4e
CDVD(00028cc0 95641d52): cdvdWrite06(HowTo) 8c

READBLOCK means DMA3 finished and CDROM can't flush data. Happens lots in your log. Stop-go DMA transfers. Goofy stuff. ^^

General behavior seems okay though. Sad


Maybe it's the dvd-r speed that's too fast? This used often enough
Code:
Speed=4(2)

(2) = param[9] = spin control


Looking at this (see ps2cdvd_select_speed for normal CD)
http://homepage.ntlworld.com/garlicbread....2.1.patch

So for DVD, it may be:
0 = max (4x)
1 = 1x
2-3 = 2x
4+ = max

That would slow you down some bit (4 -> 2). And maybe break some other game. :eek:
Reply
#15
Nice patch file there, hope I can salvage some info Smile

SpindlCtrl is almost always "2" or in some rare games "131" (integer).
(PCSX2 doesn't even use it and just hardcodes the read speed to 4x (dvd).)
In TotA the game always uses "2".
Reply
#16
One of us plans to buy TotA USA so we can check it out. Wink

Time Crisis 2 USA fix
Code:
        case 0x08:  // STATUS
            CDVD_LOG("cdvdRead08(Status) %x", cdvd.Status);
#if SPINNING_CHECK
            // Time Crisis 2 - checks read flag (not PAUSE!)
            if( cdvd.Reading )
                return CDVD_STATUS_READ | CDVD_STATUS_SPIN;
            // Time Crisis 2 - checks spin flag when idle
            else if( cdvd.Spinning )
                return cdvd.Status | CDVD_STATUS_SPIN;
            else
#endif
            return cdvd.Status;
            break;

        case 0x0A:  // STATUS
            CDVD_LOG("cdvdRead0A(Status) %x", cdvd.Status);
#if SPINNING_CHECK
            // Time Crisis 2 - checks read flag (not PAUSE!)
            if( cdvd.Reading )
                return CDVD_STATUS_READ | CDVD_STATUS_SPIN;
            // Time Crisis 2 - checks spin flag when idle
            else if( cdvd.Spinning )
                return cdvd.Status | CDVD_STATUS_SPIN;
            else
#endif
            return cdvd.Status;
            break;

Game checks for READING flags. Not PAUSE flag while reading DVD sectors. Now loads fine without fast CDVD hacks.
Reply
#17
atese, any ideas on what causes doa2 to murder the emulator
Reply
#18
@aaa801: oh i know that : its because EE cache is not implemented in recompiler.
Reply
#19
(11-04-2011, 10:15 PM)ateste Wrote: One of us plans to buy TotA USA so we can check it out. Wink

Time Crisis 2 USA fix
Code:
        case 0x08:  // STATUS
            CDVD_LOG("cdvdRead08(Status) %x", cdvd.Status);
#if SPINNING_CHECK
            // Time Crisis 2 - checks read flag (not PAUSE!)
            if( cdvd.Reading )
                return CDVD_STATUS_READ | CDVD_STATUS_SPIN;
            // Time Crisis 2 - checks spin flag when idle
            else if( cdvd.Spinning )
                return cdvd.Status | CDVD_STATUS_SPIN;
            else
#endif
            return cdvd.Status;
            break;

        case 0x0A:  // STATUS
            CDVD_LOG("cdvdRead0A(Status) %x", cdvd.Status);
#if SPINNING_CHECK
            // Time Crisis 2 - checks read flag (not PAUSE!)
            if( cdvd.Reading )
                return CDVD_STATUS_READ | CDVD_STATUS_SPIN;
            // Time Crisis 2 - checks spin flag when idle
            else if( cdvd.Spinning )
                return cdvd.Status | CDVD_STATUS_SPIN;
            else
#endif
            return cdvd.Status;
            break;

Game checks for READING flags. Not PAUSE flag while reading DVD sectors. Now loads fine without fast CDVD hacks.

Come visit #pcsx2dev, our channel on Efnet for a little chat about TotA then.
I can tell you what our findings are so far Smile

The CDVD thing is a good find, too.
I'd just like to avoid hacking it in like that again.
Maybe we can go over the code and put the needed flags in their correct places.
Makes it look a lot less hacky Wink
Reply
#20
I'll try hitting IRC later today. But it might be short sessions of "IRC tag". Tongue2


We think we've 'unhacked' the spin + read flag hacks. Kinda messy patch but it's how we communicate during short time bursts. :lol:
Code:
static uint cdvdStartSeek( uint newsector, CDVD_MODE_TYPE mode )
..
..
    cdvd.Ready = CDVD_NOTREADY;
    cdvd.Reading = 0;
    cdvd.Readed = 0;

(1)
    //cdvd.Status = CDVD_STATUS_STOP;
    cdvd.Status = CDVD_STATUS_SEEK | CDVD_STATUS_SPIN; // Time Crisis 2
..
..
        if( delta == 0 )
        {
(2)
            //cdvd.Status = CDVD_STATUS_PAUSE;
            cdvd.Status = CDVD_STATUS_READ | CDVD_STATUS_SPIN; // Time Crisis 2


            cdvd.Readed = 1; // Note: 1, not 0, as implied by the next comment. Need to look into this. --arcum42
            cdvd.RetryCntP = 0;
..
..
        cdvd.Reading = 1;
        cdvd.Readed = 1;

(3)
        //cdvd.Status = CDVD_STATUS_PAUSE; // check (rama)
        cdvd.Status = CDVD_STATUS_READ | CDVD_STATUS_SPIN; // Time Crisis 2

        cdvd.Sector = cdvd.SeekToSector;

        CDVD_LOG( "Cdvd Seek Complete > Scheduling block read interrupt at iopcycle=%8.8x.",
            psxRegs.cycle + cdvd.ReadTime );
..
..

(4)
        case 0x08:  // STATUS
            CDVD_LOG("cdvdRead08(Status) %x", cdvd.Status);
            return cdvd.Status;
            break;

        case 0x0A:  // STATUS
            CDVD_LOG("cdvdRead0A(Status) %x", cdvd.Status);
            return cdvd.Status;
            break;

(1) = STOP -> SEEK (satisfies SPIN condition)
(2) = PAUSE -> READ (READ condition)
(3) = PAUSE -> READ (READ condition)
(4) = Remove 'hacky' testing

Game seems a-okay.
Reply




Users browsing this thread: 1 Guest(s)