Closed GoogleCodeExporter closed 8 years ago
This seems to be caused by the new cdvdWrite07() routine. If cdvdWrite07() do
nothing
as the previous version, game works well.
Original comment by tmkkmac
on 31 Dec 2008 at 4:22
Hmm.. I wasn't sure what status values should be set to what for cdvd breaks.
It
could be a number of things...
cdvd.Status = CDVD_STATUS_NONE; <-- this?
cdvd.nCommand = 0; <-- or this?
Try commenting one or both of those out and see if it fixes the problem.
Original comment by Jake.Stine
on 1 Jan 2009 at 4:22
I tried that but still doesn't work.
note: If I use dev build, simply pcsx2 crashes while booting. Nondev build shows
"vmhack" messages (by Memory.cpp line 434; mean exception?) instead of crashing.
Original comment by tmkkmac
on 1 Jan 2009 at 4:56
vmhacks are just a "weak" recovery of bad address reads/writes designed to help
make
some games more playable for the avg user. The read/write is skipped and the
game is
allowed to continue execution. It's always an indication of bugged emulation,
but
it's not always critical to the game running. :)
That's interesting though. I'll have to rethink the cdvd break implementation.
It
was working fine for the one test game I have here that uses it (Digital Devil
Saga),
in that it cancelled reads correctly. But it clearly needs more work.
Original comment by Jake.Stine
on 1 Jan 2009 at 5:23
At the time of all the breaks, cdvdAction is cdvdAction_None, so perhaps BREAK
doesn't need to do anything at all when there is no action to break?
Or is cdvdAction not a good indicator of what is happening?
Original comment by Nne...@gmail.com
on 1 Jan 2009 at 10:01
[deleted comment]
currently cdvdAction is set to None for Reads, which are passed through a
separate
handler. So it could still be breaking reads. A Status of 0xa indicates a
"Seek
Complete" status, which is set when the Read action has finished seeking and
started
reading the first block.
Original comment by Jake.Stine
on 1 Jan 2009 at 10:34
As for cdvdStatus (and psxRegs.interrupt) before the BREAKs - it is either
CDVD_STATUS_NONE (and psxRegs.interrupt is 0) or CDVD_STATUS_SEEK_COMPLETE (and
psxRegs.interrupt has IopEvt_CdvdRead enabled).
changing BREAK to do nothing in any one of these two cases seems to get the
game to boot.
Original comment by Nne...@gmail.com
on 1 Jan 2009 at 10:35
I found a mostly-proper fix for this issue. I'll have it up on SVN shortly. :)
Original comment by Jake.Stine
on 1 Jan 2009 at 7:00
Nice work, it's bootable now.
Original comment by tmkkmac
on 2 Jan 2009 at 5:49
Yay. This and ICO apparently were fixed. Still not sure if if cdvd break is
entirely correct, but it's behavior makes a reasonable amount of sense now, at
least. ;)
Original comment by Jake.Stine
on 2 Jan 2009 at 5:59
Original issue reported on code.google.com by
Nne...@gmail.com
on 31 Dec 2008 at 4:00