psxmode: add all the rest on core side. psx mode works now.

- include a small game exe detection so pcsx2 doesn't believe it's running the bios
- cdrom.cpp has a hack to account for pcsx2's wrong iop dma timing when mixing mdec and cdrom dmas. This should be properly fixed for the benefit of all ps2 / psx software!
- dmasif2 is disabled since pgpu already handles it
This commit is contained in:
Robert 2016-09-23 10:31:32 +02:00 committed by Gregory Hainaut
parent 277b8f3503
commit 5e460c57f8
4 changed files with 18 additions and 4 deletions

View File

@ -402,6 +402,14 @@ void cdvdReloadElfInfo(wxString elfoverride)
)
);
//Console.Error( "Playstation1 game discs are not supported by PCSX2." );
// PCSX2 currently only recognizes *.elf executables in proper PS2 format.
// To support different PSX titles in the console title and for savestates, this code bypasses all the detection,
// simply using the exe name, stripped of problematic characters.
wxString fname = elfpath.AfterLast('\\');
wxString fname2 = fname.BeforeFirst(';');
DiscSerial = fname2;
Console.SetTitle(DiscSerial);
return;
}

View File

@ -127,6 +127,8 @@ static void ReadTrack() {
cdr.Prev[2] = itob(cdr.SetSector[2]);
CDVD_LOG("KEY *** %x:%x:%x", cdr.Prev[0], cdr.Prev[1], cdr.Prev[2]);
if (EmuConfig.CdvdVerboseReads)
DevCon.WriteLn("CD Read Sector %x", msf_to_lsn(cdr.SetSector));
cdr.RErr = DoCDVDreadTrack(msf_to_lsn(cdr.SetSector), CDVD_MODE_2340);
}
@ -912,7 +914,9 @@ void psxDma3(u32 madr, u32 bcr, u32 chcr) {
case 0x11000000:
case 0x11400100:
if (cdr.Readed == 0) {
CDVD_LOG("*** DMA 3 *** NOT READY");
DevCon.Warning("*** DMA 3 *** NOT READY");
HW_DMA3_CHCR &= ~0x01000000; //hack
psxDmaInterrupt(3); //hack
return;
}

View File

@ -134,11 +134,13 @@ void spu2DMA7Irq()
#ifndef DISABLE_PSX_GPU_DMAS
void psxDma2(u32 madr, u32 bcr, u32 chcr) // GPU
{
DevCon.Warning("SIF2 IOP CHCR = %x MADR = %x BCR = %x first 16bits %x", chcr, madr, bcr, iopMemRead16(madr));
//DevCon.Warning("SIF2 IOP CHCR = %x MADR = %x BCR = %x first 16bits %x", chcr, madr, bcr, iopMemRead16(madr));
sif2.iop.busy = true;
sif2.iop.end = false;
//SIF2Dma();
dmaSIF2();
// todo: psxmode: dmaSIF2 appears to interface with PGPU but everything is already handled without it.
// it slows down psxmode if it's run.
//dmaSIF2();
}

View File

@ -601,7 +601,7 @@ void __fastcall eeloadHook()
}
}
if (!g_GameStarted && disctype == 2 && elfname == discelf)
if (!g_GameStarted && (disctype == 2 || disctype == 1) && elfname == discelf)
g_GameLoading = true;
}