Compare commits

...
17 Commits
Author SHA1 Message Date
Connor McLaughlin fac171fa95 CDVD: Check file actually opened before proceeding
If you loaded an invalid file, particularly with compression, the file
open may fail, leading to a division by zero (on block size), or trying
to read from nothing.
2021-12-18 13:41:56 +00:00
refractionpcsx2 fa1b6493da CDVD GZip: Correct type causing index creation to fail 2021-12-17 11:46:31 +00:00
refractionpcsx2 e58766745c Log: Restore BIOS Found message 2021-12-16 11:45:12 +00:00
Mrlinkwii d8a9c5b479 Gamedb add gamefixes to 'Titeuf Mega-compet' and patch 'Yamiyo ni Sasayaku - Tantei Sagara Kyouichirou' series 2021-12-15 17:17:18 +00:00
Mrlinkwii 9a4d8ba934 Gamedb: add more 2k games patches 2021-12-15 10:52:22 +00:00
refractionpcsx2 ab816543c8 CDVD: Fixed typo opening gzip files
Fixes #5162
2021-12-15 09:38:04 +00:00
refractionpcsx2 37ccd81985 GS: Avoid some unnecessary flushes
CLUT only updates if valid index type used in PSM
2021-12-14 18:28:21 +00:00
refractionpcsx2 42dad4ade8 GS: Check CLUT dirty write on vertex kick 2021-12-14 18:28:21 +00:00
refractionpcsx2 b2ac035862 VS: Fix location of shaders in project 2021-12-14 17:47:53 +00:00
refractionpcsx2 f42d7eec74 CDVD: Don't set as Reading when buffering. 2021-12-14 10:35:12 +00:00
refractionpcsx2 e4ef41f86a CDVD: Fix some read timing logic 2021-12-14 10:35:12 +00:00
Mrlinkwii 103dd3954a missing UI and game elements. 2021-12-14 09:22:31 +00:00
Tokman5 2f9577a28e Add "Jikkyou Powerful Pro Yakyuu 2009" to GameIndex.yaml 2021-12-14 08:06:34 +00:00
Gauvain 'GovanifY' Roussel-Tarbouriech 33ec4d9430 msvc: fix issues with size() not being correctly evaluated as const 2021-12-13 09:34:24 +00:00
Gauvain 'GovanifY' Roussel-Tarbouriech 209f09ca7a pine: send serial without gui beautification 2021-12-13 09:34:24 +00:00
Gauvain 'GovanifY' Roussel-Tarbouriech 2e6af75f1d pine: add vle replies 2021-12-13 09:34:24 +00:00
Gauvain 'GovanifY' Roussel-Tarbouriech f68122a380 ipc: rename to pine 2021-12-13 09:34:24 +00:00
25 changed files with 282 additions and 215 deletions
+64
View File
@@ -9502,6 +9502,8 @@ SLES-51145:
SLES-51150:
name: "Scrabble Interactive - 2003 Edition"
region: "PAL-M3"
clampModes:
vuClampMode: 0 # Fixes missing UI and game elements.
SLES-51151:
name: "NHL 2003"
region: "PAL-M6"
@@ -12448,6 +12450,8 @@ SLES-52710:
SLES-52711:
name: "Titeuf Mega Compet"
region: "PAL-F"
gameFixes:
- GIFFIFOHack # Fixes corrupted textures.
patches:
958e5086:
content: |-
@@ -13131,6 +13135,14 @@ SLES-53021:
SLES-53022:
name: "ESPN NBA 2K5"
region: "PAL-E"
gameFixes:
- SkipMPEGHack # Fixes videos.
patches:
CA37B42E:
content: |-
author=Prafull
comment=fixes hang at start
patch=1,EE,0034DA98,word,00000000
SLES-53023:
name: "RTL Ski Jump 2005"
region: "PAL-E-G"
@@ -14549,6 +14561,12 @@ SLES-53686:
SLES-53687:
name: "NBA 2K6"
region: "PAL-M5"
patches:
04808D11:
content: |-
author=Prafull
comment=fixes hang at start
patch=1,EE,00441ff8,word,00000000
SLES-53689:
name: "World Poker Tour 2K6"
region: "PAL-M3"
@@ -15650,6 +15668,12 @@ SLES-54209:
SLES-54210:
name: "NBA 2K7"
region: "PAL-M5"
patches:
04808D11:
content: |-
author=Prafull
comment=fixes hang at start
patch=1,EE,0044f0f8,word,00000000
SLES-54211:
name: "NHL 2K7"
region: "PAL-M5"
@@ -19635,6 +19659,9 @@ SLPM-55131:
SLPM-55138:
name: "Harukanaru Toki no Naka de - Yume no Ukihashi Special"
region: "NTSC-J"
SLPM-55146:
name: "Jikkyou Powerful Pro Yakyuu 2009"
region: "NTSC-J"
SLPM-55148:
name: "007: Nagusame no Houshuu"
region: "NTSC-J"
@@ -25753,6 +25780,13 @@ SLPM-66294:
SLPM-66295:
name: "Yamiyo ni Sasayaku - Tantei Sagara Kyouichirou [Limited Edition]"
region: "NTSC-J"
patches:
23A9A026:
content: |-
author=PSI, Jelta
// Game does weird stack manipulation, causing data sent to the IOP to be corrupted unless EE data cache is enabled.
// This patch skips over the stack code, allowing the game to boot.
patch=1,EE,00156888,word,10000003
SLPM-66296:
name: "Yamiyo ni Sasayaku - Tantei Sagara Kyouichirou"
region: "NTSC-J"
@@ -26239,6 +26273,12 @@ SLPM-66450:
SLPM-66451:
name: "Major League Baseball 2K6"
region: "NTSC-J"
patches:
F0393708:
content: |-
author=Prafull
comment=fixes hang at start
patch=1,EE,0035d8b8,word,00000000
SLPM-66452:
name: "Kamaitachi no Yoru 3"
region: "NTSC-J"
@@ -39431,6 +39471,12 @@ SLUS-21560:
SLUS-21561:
name: "Major League Baseball 2K7"
region: "NTSC-U"
patches:
73D6D171:
content: |-
author=Prafull
comment=fixes hang at start
patch=1,EE,003CDE10,word,00000000
SLUS-21563:
name: "Horsez"
region: "NTSC-U"
@@ -40729,6 +40775,12 @@ SLUS-21870:
SLUS-21871:
name: "Major League Baseball 2K9"
region: "NTSC-U"
patches:
72905002:
content: |-
author=Prafull
comment=fixes hang at start
patch=1,EE,003CC5D8,word,00000000
SLUS-21872:
name: "MTV Pimp my Ride - Street Racing"
region: "NTSC-U"
@@ -41007,6 +41059,12 @@ SLUS-21944:
SLUS-21945:
name: "Major League Baseball 2K11"
region: "NTSC-U"
patches:
3D621C56:
content: |-
author=By Prafull
comment=fixes hang at start
patch=1,EE,003CFE58,word,00000000
SLUS-21946:
name: "Madden NFL 12"
region: "NTSC-U"
@@ -41029,6 +41087,12 @@ SLUS-21950:
SLUS-21951:
name: "Major League Baseball 2K12"
region: "NTSC-U"
patches:
C26C70A9:
content: |-
author=By Prafull
comment=fixes hang at start
patch=1,EE,003D4098,word,00000000
SLUS-21954:
name: "FIFA 13"
region: "NTSC-U" # Latin America with En,Fr,Es
+19 -42
View File
@@ -1038,7 +1038,7 @@ __fi void cdvdActionInterrupt()
cdvd.Spinning = true;
cdvd.Ready |= CDVD_DRIVE_READY; //check (rama)
cdvd.Sector = cdvd.SeekToSector;
cdvd.Status = CDVD_STATUS_READ;
cdvd.Status = CDVD_STATUS_PAUSE;
cdvd.nextSectorsBuffered = 0;
cdvd.triggerDataReady = true;
CDVDSECTORREADY_INT(cdvd.ReadTime);
@@ -1049,7 +1049,7 @@ __fi void cdvdActionInterrupt()
cdvd.Spinning = true; //check (rama)
cdvd.Ready |= CDVD_DRIVE_READY; //check (rama)
cdvd.Sector = cdvd.SeekToSector;
cdvd.Status = CDVD_STATUS_READ;
cdvd.Status = CDVD_STATUS_PAUSE;
cdvd.nextSectorsBuffered = 0;
cdvd.triggerDataReady = true;
CDVDSECTORREADY_INT(cdvd.ReadTime);
@@ -1103,18 +1103,8 @@ __fi void cdvdSectorReady()
}
}
if (cdvd.nextSectorsBuffered == 16 && (cdvd.Ready & CDVD_DRIVE_READY))
{
cdvd.Status = CDVD_STATUS_PAUSE; // Needed here but could be smth else than Pause (rama)
}
else
{
if (cdvd.nextSectorsBuffered < 16)
{
CDVDSECTORREADY_INT(cdvd.ReadTime);
cdvd.Status = CDVD_STATUS_READ;
}
}
if (cdvd.nextSectorsBuffered < 16)
CDVDSECTORREADY_INT(cdvd.ReadTime);
}
// inlined due to being referenced in only one place.
@@ -1139,14 +1129,10 @@ __fi void cdvdReadInterrupt()
cdvd.Reading = 1;
cdvd.Readed = 1;
cdvd.Sector = cdvd.SeekToSector;
CDVD_LOG("Cdvd Seek Complete > Scheduling block read interrupt at iopcycle=%8.8x.",
psxRegs.cycle + cdvd.ReadTime);
CDVDREAD_INT(cdvd.ReadTime);
cdvd.Status = CDVD_STATUS_READ;
return;
CDVD_LOG("Cdvd Seek Complete at iopcycle=%8.8x.", psxRegs.cycle);
}
else if (cdvd.Reading)
if (cdvd.Reading)
{
if (cdvd.RErr == 0)
{
@@ -1217,10 +1203,7 @@ __fi void cdvdReadInterrupt()
iopIntcIrq(2);
cdvd.Ready |= CDVD_DRIVE_READY;
if (cdvd.nextSectorsBuffered < 16)
cdvd.Status = CDVD_STATUS_READ;
else
cdvd.Status = CDVD_STATUS_PAUSE;
cdvd.Status = CDVD_STATUS_PAUSE;
cdvd.nCommand = 0;
//DevCon.Warning("Scheduling interrupt in %d cycles", cdvd.ReadTime - ((cdvd.BlockSize / 4) * 12));
@@ -1300,6 +1283,7 @@ static uint cdvdStartSeek(uint newsector, CDVD_MODE_TYPE mode)
// if delta > 0 it will read a new sector so the readInterrupt will account for this.
seektime = 0;
isSeeking = false;
if (delta == 0)
{
@@ -1324,24 +1308,16 @@ static uint cdvdStartSeek(uint newsector, CDVD_MODE_TYPE mode)
}
else
{
CDVDSECTORREADY_INT(cdvd.ReadTime);
seektime = cdvd.ReadTime + ((cdvd.BlockSize / 4) * 12);
delta = 1; // Forces it to use the rotational delay since we have no sectors buffered and it isn't buffering any.
}
}
else
seektime = (cdvd.BlockSize / 4) * 12;
return (cdvd.BlockSize / 4) * 12;
}
else
{
if (delta < cdvd.nextSectorsBuffered)
{
isSeeking = false;
}
else
{
psxRegs.interrupt &= ~(1 << IopEvt_CdvdSectorReady);
cdvd.nextSectorsBuffered = 0;
}
psxRegs.interrupt &= ~(1 << IopEvt_CdvdSectorReady);
cdvd.nextSectorsBuffered = 0;
}
}
@@ -1354,8 +1330,9 @@ static uint cdvdStartSeek(uint newsector, CDVD_MODE_TYPE mode)
CDVDSECTORREADY_INT(seektime);
seektime += (cdvd.BlockSize / 4) * 12;
}
else if(cdvd.nCommand != N_CD_SEEK)
CDVDSECTORREADY_INT(seektime + ((cdvd.BlockSize / 4) * 12));
else
CDVDSECTORREADY_INT(seektime);
return seektime;
}
@@ -1633,7 +1610,7 @@ static void cdvdWrite04(u8 rt)
cdvdSetIrq();
cdvd.nCommand = 0;
//After Pausing needs to buffer the next sector
cdvd.Status = CDVD_STATUS_READ;
cdvd.Status = CDVD_STATUS_PAUSE;
cdvd.nextSectorsBuffered = 0;
cdvd.triggerDataReady = true;
CDVDSECTORREADY_INT(cdvd.ReadTime);
@@ -1865,7 +1842,7 @@ static void cdvdWrite04(u8 rt)
HW_DMA3_CHCR &= ~0x01000000;
psxDmaInterrupt(3);
//After reading the TOC it needs to go back to buffer the next sector
cdvd.Status = CDVD_STATUS_READ;
cdvd.Status = CDVD_STATUS_PAUSE;
cdvd.nextSectorsBuffered = 0;
cdvd.triggerDataReady = true;
CDVDSECTORREADY_INT(cdvd.ReadTime);
@@ -1882,7 +1859,7 @@ static void cdvdWrite04(u8 rt)
cdvdSetIrq();
cdvd.nCommand = 0;
//After reading the key it needs to go back to buffer the next sector
cdvd.Status = CDVD_STATUS_READ;
cdvd.Status = CDVD_STATUS_PAUSE;
cdvd.nextSectorsBuffered = 0;
cdvd.triggerDataReady = true;
CDVDSECTORREADY_INT(cdvd.ReadTime);
+2 -2
View File
@@ -80,7 +80,7 @@ static void WriteIndexToFile(Access* index, const char* filename)
return;
}
auto fp = FileSystem::OpenManagedCFile(filename, "rb");
auto fp = FileSystem::OpenManagedCFile(filename, "wb");
if (!fp)
return;
@@ -300,7 +300,7 @@ bool GzippedFileReader::OkIndex()
// Try to read index from disk
const std::string indexfile(iso2indexname(m_filename));
if (indexfile.empty() == 0)
if (indexfile.empty())
return false; // iso2indexname(...) will print errors if it can't apply the template
if (FileSystem::FileExists(indexfile.c_str()) && (m_pIndex = ReadIndexFromFile(indexfile.c_str())))
+2 -1
View File
@@ -221,7 +221,8 @@ bool InputIsoFile::Open(std::string srcfile, bool testOnly)
m_reader = new FlatFileReader(EmuConfig.CdvdShareWrite);
}
m_reader->Open(m_filename);
if (!m_reader->Open(m_filename))
return false;
// It might actually be a blockdump file.
// Check that before continuing with the FlatFileReader.
+3 -3
View File
@@ -126,7 +126,7 @@ set(pcsx2Sources
IopIrq.cpp
IopMem.cpp
IopSio2.cpp
IPC.cpp
PINE.cpp
Mdec.cpp
Memory.cpp
MemoryCardFile.cpp
@@ -201,7 +201,7 @@ set(pcsx2Headers
IopHw.h
IopMem.h
IopSio2.h
IPC.h
PINE.h
Mdec.h
MTVU.h
Memory.h
@@ -904,7 +904,7 @@ set(pcsx2GuiSources
gui/Dialogs/McdConfigDialog.cpp
gui/Dialogs/PickUserModeDialog.cpp
gui/Dialogs/SysConfigDialog.cpp
gui/Dialogs/IPCDialog.cpp
gui/Dialogs/PINEDialog.cpp
gui/Debugger/BreakpointWindow.cpp
gui/Debugger/CtrlDisassemblyView.cpp
gui/Debugger/CtrlRegisterList.cpp
+1 -1
View File
@@ -545,7 +545,7 @@ struct Pcsx2Config
CdvdShareWrite : 1, // allows the iso to be modified while it's loaded
EnablePatches : 1, // enables patch detection and application
EnableCheats : 1, // enables cheat detection and application
EnableIPC : 1, // enables inter-process communication
EnablePINE : 1, // enables inter-process communication
EnableWideScreenPatches : 1,
#ifndef DISABLE_RECORDING
EnableRecordingTools : 1,
+4 -3
View File
@@ -148,16 +148,17 @@ bool GSClut::WriteTest(const GIFRegTEX0& TEX0, const GIFRegTEXCLUT& TEXCLUT)
__assume(0);
}
return m_write.IsDirty(TEX0, TEXCLUT);
// CLUT only reloads if PSM is a valid index type, avoid unnecessary flushes
return ((TEX0.PSM & 0x7) >= 3) && m_write.IsDirty(TEX0, TEXCLUT);
}
void GSClut::Write(const GIFRegTEX0& TEX0, const GIFRegTEXCLUT& TEXCLUT)
{
m_write.TEX0 = TEX0;
m_write.TEXCLUT = TEXCLUT;
m_write.dirty = false;
m_read.dirty = true;
m_write.dirty = false;
(this->*m_wc[TEX0.CSM][TEX0.CPSM][TEX0.PSM])(TEX0, TEXCLUT);
}
+7 -2
View File
@@ -2546,8 +2546,13 @@ __forceinline void GSState::VertexKick(u32 skip)
__assume(0);
}
if (auto_flush && PRIM->TME && (m_context->FRAME.Block() == m_context->TEX0.TBP0))
FlushPrim();
if (m_context->FRAME.FBMSK != 0xFFFFFFFF)
{
m_mem.m_clut.Invalidate(m_context->FRAME.Block());
if (auto_flush && PRIM->TME && (m_context->FRAME.Block() == m_context->TEX0.TBP0))
FlushPrim();
}
}
void GSState::GetTextureMinMax(GSVector4i& r, const GIFRegTEX0& TEX0, const GIFRegCLAMP& CLAMP, bool linear)
-2
View File
@@ -1009,7 +1009,6 @@ void GSRendererHW::SwSpriteRender()
}
m_tc->InvalidateVideoMem(dpo, m_r);
m_mem.m_clut.Invalidate();
}
bool GSRendererHW::CanUseSwSpriteRender()
@@ -2279,7 +2278,6 @@ bool GSRendererHW::OI_PointListPalette(GSTexture* rt, GSTexture* ds, GSTextureCa
m_mem.WritePixel32(x, y, c, FBP, FBW);
}
m_tc->InvalidateVideoMem(m_context->offset.fb, m_r);
m_mem.m_clut.Invalidate();
return false;
}
return true;
-2
View File
@@ -578,8 +578,6 @@ void GSRendererSW::Queue(GSRingHeap::SharedPtr<GSRasterizerData>& item)
if (sd->global.sel.fwrite)
{
m_tc->InvalidatePages(sd->m_fb_pages, sd->m_fpsm);
m_mem.m_clut.Invalidate(m_context->FRAME.Block());
}
if (sd->global.sel.zwrite)
+68 -47
View File
@@ -40,10 +40,10 @@
#include "gui/AppCoreThread.h"
#include "System/SysThreads.h"
#include "svnrev.h"
#include "IPC.h"
#include "PINE.h"
SocketIPC::SocketIPC(SysCoreThread* vm, unsigned int slot)
: pxThread("IPC_Socket")
PINEServer::PINEServer(SysCoreThread* vm, unsigned int slot)
: pxThread("PINE_Server")
{
#ifdef _WIN32
WSADATA wsa;
@@ -52,14 +52,14 @@ SocketIPC::SocketIPC(SysCoreThread* vm, unsigned int slot)
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
Console.WriteLn(Color_Red, "IPC: Cannot initialize winsock! Shutting down...");
Console.WriteLn(Color_Red, "PINE: Cannot initialize winsock! Shutting down...");
return;
}
m_sock = socket(AF_INET, SOCK_STREAM, 0);
if ((m_sock == INVALID_SOCKET) || slot > 65536)
{
Console.WriteLn(Color_Red, "IPC: Cannot open socket! Shutting down...");
Console.WriteLn(Color_Red, "PINE: Cannot open socket! Shutting down...");
return;
}
@@ -71,7 +71,7 @@ SocketIPC::SocketIPC(SysCoreThread* vm, unsigned int slot)
if (bind(m_sock, (struct sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
{
Console.WriteLn(Color_Red, "IPC: Error while binding to socket! Shutting down...");
Console.WriteLn(Color_Red, "PINE: Error while binding to socket! Shutting down...");
return;
}
@@ -85,14 +85,14 @@ SocketIPC::SocketIPC(SysCoreThread* vm, unsigned int slot)
// fallback in case macOS or other OSes don't implement the XDG base
// spec
if (runtime_dir == nullptr)
m_socket_name = "/tmp/" IPC_EMULATOR_NAME ".sock";
m_socket_name = "/tmp/" PINE_EMULATOR_NAME ".sock";
else
{
m_socket_name = runtime_dir;
m_socket_name += "/" IPC_EMULATOR_NAME ".sock";
m_socket_name += "/" PINE_EMULATOR_NAME ".sock";
}
if (slot != IPC_DEFAULT_SLOT)
if (slot != PINE_DEFAULT_SLOT)
m_socket_name += "." + std::to_string(slot);
struct sockaddr_un server;
@@ -100,7 +100,7 @@ SocketIPC::SocketIPC(SysCoreThread* vm, unsigned int slot)
m_sock = socket(AF_UNIX, SOCK_STREAM, 0);
if (m_sock < 0)
{
Console.WriteLn(Color_Red, "IPC: Cannot open socket! Shutting down...");
Console.WriteLn(Color_Red, "PINE: Cannot open socket! Shutting down...");
return;
}
server.sun_family = AF_UNIX;
@@ -111,7 +111,7 @@ SocketIPC::SocketIPC(SysCoreThread* vm, unsigned int slot)
unlink(m_socket_name.c_str());
if (bind(m_sock, (struct sockaddr*)&server, sizeof(struct sockaddr_un)))
{
Console.WriteLn(Color_Red, "IPC: Error while binding to socket! Shutting down...");
Console.WriteLn(Color_Red, "PINE: Error while binding to socket! Shutting down...");
return;
}
#endif
@@ -128,21 +128,21 @@ SocketIPC::SocketIPC(SysCoreThread* vm, unsigned int slot)
Start();
}
char* SocketIPC::MakeOkIPC(char* ret_buffer, uint32_t size = 5)
char* PINEServer::MakeOkIPC(char* ret_buffer, uint32_t size = 5)
{
ToArray<uint32_t>(ret_buffer, size, 0);
ret_buffer[4] = IPC_OK;
return ret_buffer;
}
char* SocketIPC::MakeFailIPC(char* ret_buffer, uint32_t size = 5)
char* PINEServer::MakeFailIPC(char* ret_buffer, uint32_t size = 5)
{
ToArray<uint32_t>(ret_buffer, size, 0);
ret_buffer[4] = IPC_FAIL;
return ret_buffer;
}
int SocketIPC::StartSocket()
int PINEServer::StartSocket()
{
m_msgsock = accept(m_sock, 0, 0);
@@ -160,7 +160,7 @@ int SocketIPC::StartSocket()
if (!(errno == ECONNABORTED || errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK))
{
#endif
fprintf(stderr, "IPC: An unrecoverable error happened! Shutting down...\n");
fprintf(stderr, "PINE: An unrecoverable error happened! Shutting down...\n");
m_end = true;
return -1;
}
@@ -168,7 +168,7 @@ int SocketIPC::StartSocket()
return 0;
}
void SocketIPC::ExecuteTaskInThread()
void PINEServer::ExecuteTaskInThread()
{
m_end = false;
@@ -216,7 +216,7 @@ void SocketIPC::ExecuteTaskInThread()
}
}
}
SocketIPC::IPCBuffer res;
PINEServer::IPCBuffer res;
// we remove 4 bytes to get the message size out of the IPC command
// size in ParseCommand.
@@ -238,7 +238,7 @@ void SocketIPC::ExecuteTaskInThread()
return;
}
SocketIPC::~SocketIPC()
PINEServer::~PINEServer()
{
m_end = true;
#ifdef _WIN32
@@ -258,7 +258,7 @@ SocketIPC::~SocketIPC()
DESTRUCTOR_CATCHALL
}
SocketIPC::IPCBuffer SocketIPC::ParseCommand(char* buf, char* ret_buffer, u32 buf_size)
PINEServer::IPCBuffer PINEServer::ParseCommand(char* buf, char* ret_buffer, u32 buf_size)
{
u32 ret_cnt = 5;
u32 buf_cnt = 0;
@@ -380,6 +380,8 @@ SocketIPC::IPCBuffer SocketIPC::ParseCommand(char* buf, char* ret_buffer, u32 bu
}
case MsgVersion:
{
if (!m_vm->HasActiveMachine())
goto error;
char version[256] = {};
if (GIT_TAGGED_COMMIT) // Nightly builds
{
@@ -391,11 +393,14 @@ SocketIPC::IPCBuffer SocketIPC::ParseCommand(char* buf, char* ret_buffer, u32 bu
{
sprintf(version, "PCSX2 %u.%u.%u-%lld", PCSX2_VersionHi, PCSX2_VersionMid, PCSX2_VersionLo, SVN_REV);
}
version[255] = 0x00;
if (!SafetyChecks(buf_cnt, 0, ret_cnt, 256, buf_size))
const u32 size = strlen(version) + 1;
version[size] = 0x00;
if (!SafetyChecks(buf_cnt, 0, ret_cnt, size + 4, buf_size))
goto error;
memcpy(&ret_buffer[ret_cnt], version, 256);
ret_cnt += 256;
ToArray(ret_buffer, size, ret_cnt);
ret_cnt += 4;
memcpy(&ret_buffer[ret_cnt], version, size);
ret_cnt += size;
break;
}
case MsgSaveState:
@@ -422,52 +427,68 @@ SocketIPC::IPCBuffer SocketIPC::ParseCommand(char* buf, char* ret_buffer, u32 bu
{
if (!m_vm->HasActiveMachine())
goto error;
if (!SafetyChecks(buf_cnt, 0, ret_cnt, 256, buf_size))
goto error;
char title[256] = {};
char* title = new char[GameInfo::gameName.size() + 1];
sprintf(title, "%s", GameInfo::gameName.ToUTF8().data());
title[255] = 0x00;
memcpy(&ret_buffer[ret_cnt], title, 256);
ret_cnt += 256;
const u32 size = strlen(title) + 1;
title[size] = 0x00;
if (!SafetyChecks(buf_cnt, 0, ret_cnt, size + 4, buf_size))
goto error;
ToArray(ret_buffer, size, ret_cnt);
ret_cnt += 4;
memcpy(&ret_buffer[ret_cnt], title, size);
ret_cnt += size;
delete[] title;
break;
}
case MsgID:
{
if (!m_vm->HasActiveMachine())
goto error;
if (!SafetyChecks(buf_cnt, 0, ret_cnt, 256, buf_size))
char* title = new char[GameInfo::gameSerial.size() + 1];
sprintf(title, "%s", GameInfo::gameSerial.ToUTF8().data());
const u32 size = strlen(title) + 1;
title[size] = 0x00;
if (!SafetyChecks(buf_cnt, 0, ret_cnt, size + 4, buf_size))
goto error;
char id[256] = {};
sprintf(id, "%s", GameInfo::gameSerial.ToUTF8().data());
id[255] = 0x00;
memcpy(&ret_buffer[ret_cnt], id, 256);
ret_cnt += 256;
ToArray(ret_buffer, size, ret_cnt);
ret_cnt += 4;
memcpy(&ret_buffer[ret_cnt], title, size);
ret_cnt += size;
delete[] title;
break;
}
case MsgUUID:
{
if (!m_vm->HasActiveMachine())
goto error;
if (!SafetyChecks(buf_cnt, 0, ret_cnt, 256, buf_size))
char* title = new char[GameInfo::gameCRC.size() + 1];
sprintf(title, "%s", GameInfo::gameCRC.ToUTF8().data());
const u32 size = strlen(title) + 1;
title[size] = 0x00;
if (!SafetyChecks(buf_cnt, 0, ret_cnt, size + 4, buf_size))
goto error;
char uuid[256] = {};
sprintf(uuid, "%s", GameInfo::gameCRC.ToUTF8().data());
uuid[255] = 0x00;
memcpy(&ret_buffer[ret_cnt], uuid, 256);
ret_cnt += 256;
ToArray(ret_buffer, size, ret_cnt);
ret_cnt += 4;
memcpy(&ret_buffer[ret_cnt], title, size);
ret_cnt += size;
delete[] title;
break;
}
case MsgGameVersion:
{
if (!m_vm->HasActiveMachine())
goto error;
if (!SafetyChecks(buf_cnt, 0, ret_cnt, 256, buf_size))
char* title = new char[GameInfo::gameVersion.size() + 1];
sprintf(title, "%s", GameInfo::gameVersion.ToUTF8().data());
const u32 size = strlen(title) + 1;
title[size] = 0x00;
if (!SafetyChecks(buf_cnt, 0, ret_cnt, size + 4, buf_size))
goto error;
char version[256] = {};
sprintf(version, "%s", GameInfo::gameVersion.ToUTF8().data());
version[255] = 0x00;
memcpy(&ret_buffer[ret_cnt], version, 256);
ret_cnt += 256;
ToArray(ret_buffer, size, ret_cnt);
ret_cnt += 4;
memcpy(&ret_buffer[ret_cnt], title, size);
ret_cnt += size;
delete[] title;
break;
}
case MsgStatus:
+27 -27
View File
@@ -13,17 +13,17 @@
* If not, see <http://www.gnu.org/licenses/>.
*/
/* Client code example for interfacing with the IPC interface is available
* here: https://code.govanify.com/govanify/pcsx2_ipc/ */
/* A reference client implementation for interfacing with PINE is available
* here: https://code.govanify.com/govanify/pine/ */
#pragma once
// IPC uses a concept of "slot" to be able to communicate with multiple
// PINE uses a concept of "slot" to be able to communicate with multiple
// emulators at the same time, each slot should be unique to each emulator to
// allow PnP and configurable by the end user so that several runs don't
// conflict with each others
#define IPC_DEFAULT_SLOT 28011
#define IPC_EMULATOR_NAME "pcsx2"
#define PINE_DEFAULT_SLOT 28011
#define PINE_EMULATOR_NAME "pcsx2"
#include "common/PersistentThread.h"
#include "System/SysThreads.h"
@@ -35,7 +35,7 @@
using namespace Threading;
class SocketIPC : public pxThread
class PINEServer : public pxThread
{
// parent thread
typedef pxThread _parent;
@@ -89,22 +89,22 @@ protected:
*/
enum IPCCommand : unsigned char
{
MsgRead8 = 0, /**< Read 8 bit value to memory. */
MsgRead16 = 1, /**< Read 16 bit value to memory. */
MsgRead32 = 2, /**< Read 32 bit value to memory. */
MsgRead64 = 3, /**< Read 64 bit value to memory. */
MsgWrite8 = 4, /**< Write 8 bit value to memory. */
MsgWrite16 = 5, /**< Write 16 bit value to memory. */
MsgWrite32 = 6, /**< Write 32 bit value to memory. */
MsgWrite64 = 7, /**< Write 64 bit value to memory. */
MsgVersion = 8, /**< Returns PCSX2 version. */
MsgSaveState = 9, /**< Saves a savestate. */
MsgLoadState = 0xA, /**< Loads a savestate. */
MsgTitle = 0xB, /**< Returns the game title. */
MsgID = 0xC, /**< Returns the game ID. */
MsgUUID = 0xD, /**< Returns the game UUID. */
MsgGameVersion = 0xE, /**< Returns the game verion. */
MsgStatus = 0xF, /**< Returns the emulator status. */
MsgRead8 = 0, /**< Read 8 bit value to memory. */
MsgRead16 = 1, /**< Read 16 bit value to memory. */
MsgRead32 = 2, /**< Read 32 bit value to memory. */
MsgRead64 = 3, /**< Read 64 bit value to memory. */
MsgWrite8 = 4, /**< Write 8 bit value to memory. */
MsgWrite16 = 5, /**< Write 16 bit value to memory. */
MsgWrite32 = 6, /**< Write 32 bit value to memory. */
MsgWrite64 = 7, /**< Write 64 bit value to memory. */
MsgVersion = 8, /**< Returns PCSX2 version. */
MsgSaveState = 9, /**< Saves a savestate. */
MsgLoadState = 0xA, /**< Loads a savestate. */
MsgTitle = 0xB, /**< Returns the game title. */
MsgID = 0xC, /**< Returns the game ID. */
MsgUUID = 0xD, /**< Returns the game UUID. */
MsgGameVersion = 0xE, /**< Returns the game verion. */
MsgStatus = 0xF, /**< Returns the emulator status. */
MsgUnimplemented = 0xFF /**< Unimplemented IPC message. */
};
@@ -115,7 +115,7 @@ protected:
enum EmuStatus : uint32_t
{
Running = 0, /**< Game is running */
Paused = 1, /**< Game is paused */
Paused = 1, /**< Game is paused */
Shutdown = 2 /**< Game is shutdown */
};
@@ -125,7 +125,7 @@ protected:
*/
struct IPCBuffer
{
int size; /**< Size of the buffer. */
int size; /**< Size of the buffer. */
char* buffer; /**< Buffer. */
};
@@ -137,7 +137,7 @@ protected:
*/
enum IPCResult : unsigned char
{
IPC_OK = 0, /**< IPC command successfully completed. */
IPC_OK = 0, /**< IPC command successfully completed. */
IPC_FAIL = 0xFF /**< IPC command failed to complete. */
};
@@ -218,7 +218,7 @@ public:
bool m_end = true;
/* Initializers */
SocketIPC(SysCoreThread* vm, unsigned int slot = IPC_DEFAULT_SLOT);
virtual ~SocketIPC();
PINEServer(SysCoreThread* vm, unsigned int slot = PINE_DEFAULT_SLOT);
virtual ~PINEServer();
}; // class SocketIPC
+2 -2
View File
@@ -572,7 +572,7 @@ void Pcsx2Config::LoadSave(SettingsWrapper& wrap)
SettingsWrapBitBool(CdvdShareWrite);
SettingsWrapBitBool(EnablePatches);
SettingsWrapBitBool(EnableCheats);
SettingsWrapBitBool(EnableIPC);
SettingsWrapBitBool(EnablePINE);
SettingsWrapBitBool(EnableWideScreenPatches);
#ifndef DISABLE_RECORDING
SettingsWrapBitBool(EnableRecordingTools);
@@ -708,7 +708,7 @@ void Pcsx2Config::CopyConfig(const Pcsx2Config& cfg)
CdvdShareWrite = cfg.CdvdShareWrite;
EnablePatches = cfg.EnablePatches;
EnableCheats = cfg.EnableCheats;
EnableIPC = cfg.EnableIPC;
EnablePINE = cfg.EnablePINE;
EnableWideScreenPatches = cfg.EnableWideScreenPatches;
#ifndef DISABLE_RECORDING
EnableRecordingTools = cfg.EnableRecordingTools;
+8 -8
View File
@@ -29,7 +29,7 @@ extern WindowInfo g_gs_window_info;
#include "Patch.h"
#include "SysThreads.h"
#include "MTVU.h"
#include "IPC.h"
#include "PINE.h"
#include "FW.h"
#include "SPU2/spu2.h"
#include "DEV9/DEV9.h"
@@ -53,9 +53,9 @@ extern WindowInfo g_gs_window_info;
bool g_CDVDReset = false;
namespace IPCSettings
namespace PINESettings
{
unsigned int slot = IPC_DEFAULT_SLOT;
unsigned int slot = PINE_DEFAULT_SLOT;
};
// --------------------------------------------------------------------------------------
@@ -267,13 +267,13 @@ void SysCoreThread::GameStartingInThread()
#ifdef USE_SAVESLOT_UI_UPDATES
UI_UpdateSysControls();
#endif
if (EmuConfig.EnableIPC && m_IpcState == OFF)
if (EmuConfig.EnablePINE && m_PineState == OFF)
{
m_IpcState = ON;
m_socketIpc = std::make_unique<SocketIPC>(this, IPCSettings::slot);
m_PineState = ON;
m_pineServer = std::make_unique<PINEServer>(this, PINESettings::slot);
}
if (m_IpcState == ON && m_socketIpc->m_end)
m_socketIpc->Start();
if (m_PineState == ON && m_pineServer->m_end)
m_pineServer->Start();
}
bool SysCoreThread::StateCheckInThread()
+7 -7
View File
@@ -19,7 +19,7 @@
#include "common/PersistentThread.h"
#include "common/emitter/tools.h"
#include "IPC.h"
#include "PINE.h"
using namespace Threading;
@@ -185,16 +185,16 @@ protected:
bool m_resetVsyncTimers;
bool m_resetVirtualMachine;
// Stores the state of the socket IPC thread.
std::unique_ptr<SocketIPC> m_socketIpc;
// Stores the state of the PINE thread.
std::unique_ptr<PINEServer> m_pineServer;
// Current state of the IPC thread
enum StateIPC
// Current state of the PINE thread
enum StatePINE
{
OFF,
ON
};
StateIPC m_IpcState = OFF;
StatePINE m_PineState = OFF;
// Indicates if the system has an active virtual machine state. Pretty much always
// true anytime between subcomponents being initialized and being shutdown. Gets
@@ -284,7 +284,7 @@ extern SysCoreThread& GetCoreThread();
extern bool g_CDVDReset;
namespace IPCSettings
namespace PINESettings
{
extern unsigned int slot;
};
+4 -4
View File
@@ -199,10 +199,10 @@ enum MenuIdentifiers
MenuId_Recording_VirtualPad_Port1,
#endif
// IPC Subsection
MenuId_IPC,
MenuId_IPC_Enable,
MenuId_IPC_Settings,
// Subsection
MenuId_PINE,
MenuId_PINE_Enable,
MenuId_PINE_Settings,
};
+2 -2
View File
@@ -424,7 +424,7 @@ static void _ApplySettings(const Pcsx2Config& src, Pcsx2Config& fixup)
GameInfo::gameCRC = L""; // Needs to be reset when rebooting otherwise previously loaded patches may load
if (ingame && !DiscSerial.IsEmpty())
GameInfo::gameSerial = L" [" + DiscSerial + L"]";
GameInfo::gameSerial = DiscSerial;
const wxString newGameKey(ingame ? SysGetDiscID() : SysGetBiosDiscID());
const bool verbose(newGameKey != curGameKey && ingame);
@@ -512,7 +512,7 @@ static void _ApplySettings(const Pcsx2Config& src, Pcsx2Config& fixup)
// When we're booting, the bios loader will set a a title which would be more interesting than this
// to most users - with region, version, etc, so don't overwrite it with patch info. That's OK. Those
// users which want to know the status of the patches at the bios can check the console content.
wxString consoleTitle = GameInfo::gameName + GameInfo::gameSerial;
wxString consoleTitle = GameInfo::gameName + L" [" + GameInfo::gameSerial + L"]";
consoleTitle += L" [" + GameInfo::gameCRC.MakeUpper() + L"]" + gameCompat + gameFixes + gamePatch + gameCheats + gameWsHacks;
if (ingame)
Console.SetTitle(consoleTitle);
+4 -4
View File
@@ -400,14 +400,14 @@ namespace Dialogs
virtual ~AssertionDialog() = default;
};
class IPCDialog : public wxDialogWithHelpers
class PINEDialog : public wxDialogWithHelpers
{
public:
IPCDialog(wxWindow* parent = NULL);
virtual ~IPCDialog() = default;
PINEDialog(wxWindow* parent = NULL);
virtual ~PINEDialog() = default;
void OnConfirm(wxCommandEvent& evt);
static wxString GetNameStatic() { return L"IPCSettings"; }
static wxString GetNameStatic() { return L"PINESettings"; }
wxString GetDialogName() const { return GetNameStatic(); }
};
} // namespace Dialogs
@@ -26,7 +26,7 @@
#include "gui/AppConfig.h"
using namespace pxSizerFlags;
/* This dialog currently assumes the IPC server is started when launching a
/* This dialog currently assumes the PINE server is started when launching a
* game, as such we can allow the IPC Settings window to change the slot in a
* volatile fashion so that it returns to the default but you can change it at
* each restart of the emulator to allow for multiple emulator sessions.
@@ -34,25 +34,25 @@ using namespace pxSizerFlags;
*/
// --------------------------------------------------------------------------------------
// IPCDialog Implementation
// PINEDialog Implementation
// --------------------------------------------------------------------------------------
Dialogs::IPCDialog::IPCDialog(wxWindow* parent)
: wxDialogWithHelpers(parent, _("IPC Settings"), pxDialogFlags())
Dialogs::PINEDialog::PINEDialog(wxWindow* parent)
: wxDialogWithHelpers(parent, _("PINE Settings"), pxDialogFlags())
{
wxTextCtrl* ipc_slot = new wxTextCtrl(this, wxID_ANY, wxString::Format(wxT("%u"), IPCSettings::slot), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER);
ipc_slot->Bind(wxEVT_TEXT_ENTER, &Dialogs::IPCDialog::OnConfirm, this);
wxTextCtrl* ipc_slot = new wxTextCtrl(this, wxID_ANY, wxString::Format(wxT("%u"), PINESettings::slot), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER);
ipc_slot->Bind(wxEVT_TEXT_ENTER, &Dialogs::PINEDialog::OnConfirm, this);
*this += new wxStaticText(this, wxID_ANY, _("IPC Slot"));
*this += new wxStaticText(this, wxID_ANY, _("PINE Slot"));
*this += ipc_slot;
}
void Dialogs::IPCDialog::OnConfirm(wxCommandEvent& evt)
void Dialogs::PINEDialog::OnConfirm(wxCommandEvent& evt)
{
wxTextCtrl* obj = static_cast<wxTextCtrl*>(evt.GetEventObject());
if (obj != nullptr)
{
IPCSettings::slot = (unsigned int)atoi(obj->GetValue().ToUTF8().data());
PINESettings::slot = (unsigned int)atoi(obj->GetValue().ToUTF8().data());
Destroy();
}
}
+7 -7
View File
@@ -262,8 +262,8 @@ void MainEmuFrame::ConnectMenus()
Bind(wxEVT_MENU, &MainEmuFrame::Menu_EnablePatches_Click, this, MenuId_EnablePatches);
Bind(wxEVT_MENU, &MainEmuFrame::Menu_EnableCheats_Click, this, MenuId_EnableCheats);
Bind(wxEVT_MENU, &MainEmuFrame::Menu_IPC_Enable_Click, this, MenuId_IPC_Enable);
Bind(wxEVT_MENU, &MainEmuFrame::Menu_IPC_Settings_Click, this, MenuId_IPC_Settings);
Bind(wxEVT_MENU, &MainEmuFrame::Menu_PINE_Enable_Click, this, MenuId_PINE_Enable);
Bind(wxEVT_MENU, &MainEmuFrame::Menu_PINE_Settings_Click, this, MenuId_PINE_Settings);
Bind(wxEVT_MENU, &MainEmuFrame::Menu_EnableWideScreenPatches_Click, this, MenuId_EnableWideScreenPatches);
#ifndef DISABLE_RECORDING
Bind(wxEVT_MENU, &MainEmuFrame::Menu_EnableRecordingTools_Click, this, MenuId_EnableInputRecording);
@@ -395,12 +395,12 @@ void MainEmuFrame::CreatePcsx2Menu()
m_GameSettingsSubmenu.Append(MenuId_EnableCheats, _("Enable &Cheats"),
_("Use cheats otherwise known as pnachs from the cheats folder."), wxITEM_CHECK);
m_GameSettingsSubmenu.Append(MenuId_IPC, _("Configure &IPC"), &m_submenuIPC);
m_GameSettingsSubmenu.Append(MenuId_PINE, _("Configure &PINE"), &m_submenuPINE);
m_submenuIPC.Append(MenuId_IPC_Enable, _("&Enable IPC"),
m_submenuPINE.Append(MenuId_PINE_Enable, _("&Enable PINE"),
wxEmptyString, wxITEM_CHECK);
m_submenuIPC.Append(MenuId_IPC_Settings, _("IPC &Settings"));
m_submenuPINE.Append(MenuId_PINE_Settings, _("PINE &Settings"));
m_GameSettingsSubmenu.Append(MenuId_EnableWideScreenPatches, _("Enable &Widescreen Patches"),
_("Enabling Widescreen Patches may occasionally cause issues."), wxITEM_CHECK);
@@ -568,7 +568,7 @@ MainEmuFrame::MainEmuFrame(wxWindow* parent, const wxString& title)
, m_menuWindow(*new wxMenu())
, m_menuCapture(*new wxMenu())
, m_submenuVideoCapture(*new wxMenu())
, m_submenuIPC(*new wxMenu())
, m_submenuPINE(*new wxMenu())
, m_submenuScreenshot(*new wxMenu())
#ifndef DISABLE_RECORDING
, m_menuRecording(*new wxMenu())
@@ -830,7 +830,7 @@ void MainEmuFrame::ApplyConfigToGui(AppConfig& configToApply, int flags)
{ //these should not be affected by presets
menubar.Check(MenuId_EnableBackupStates, configToApply.EmuOptions.BackupSavestate);
menubar.Check(MenuId_EnableCheats, configToApply.EmuOptions.EnableCheats);
menubar.Check(MenuId_IPC_Enable, configToApply.EmuOptions.EnableIPC);
menubar.Check(MenuId_PINE_Enable, configToApply.EmuOptions.EnablePINE);
menubar.Check(MenuId_EnableWideScreenPatches, configToApply.EmuOptions.EnableWideScreenPatches);
menubar.Check(MenuId_Capture_Video_IncludeAudio, configToApply.AudioCapture.EnableAudio);
#ifndef DISABLE_RECORDING
+3 -3
View File
@@ -69,7 +69,7 @@ protected:
wxMenu& m_menuCapture;
wxMenu& m_submenuVideoCapture;
wxMenu& m_submenuIPC;
wxMenu& m_submenuPINE;
wxMenu& m_submenuScreenshot;
#ifndef DISABLE_RECORDING
@@ -165,8 +165,8 @@ protected:
void Menu_EnableBackupStates_Click(wxCommandEvent& event);
void Menu_EnablePatches_Click(wxCommandEvent& event);
void Menu_EnableCheats_Click(wxCommandEvent& event);
void Menu_IPC_Enable_Click(wxCommandEvent& event);
void Menu_IPC_Settings_Click(wxCommandEvent& event);
void Menu_PINE_Enable_Click(wxCommandEvent& event);
void Menu_PINE_Settings_Click(wxCommandEvent& event);
void Menu_EnableWideScreenPatches_Click(wxCommandEvent& event);
#ifndef DISABLE_RECORDING
void Menu_EnableRecordingTools_Click(wxCommandEvent& event);
+4 -4
View File
@@ -54,9 +54,9 @@ void MainEmuFrame::Menu_SysSettings_Click(wxCommandEvent& event)
AppOpenModalDialog<SysConfigDialog>(wxEmptyString, this);
}
void MainEmuFrame::Menu_IPC_Settings_Click(wxCommandEvent& event)
void MainEmuFrame::Menu_PINE_Settings_Click(wxCommandEvent& event)
{
AppOpenDialog<IPCDialog>(this);
AppOpenDialog<PINEDialog>(this);
}
void MainEmuFrame::Menu_AudioSettings_Click(wxCommandEvent& event)
@@ -634,9 +634,9 @@ void MainEmuFrame::Menu_EnableCheats_Click(wxCommandEvent&)
AppSaveSettings();
}
void MainEmuFrame::Menu_IPC_Enable_Click(wxCommandEvent&)
void MainEmuFrame::Menu_PINE_Enable_Click(wxCommandEvent&)
{
g_Conf->EmuOptions.EnableIPC = GetMenuBar()->IsChecked(MenuId_IPC_Enable);
g_Conf->EmuOptions.EnablePINE = GetMenuBar()->IsChecked(MenuId_PINE_Enable);
AppApplySettings();
AppSaveSettings();
}
+17 -17
View File
@@ -71,19 +71,19 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="GS\res\glsl\common_header.glsl" />
<None Include="GS\res\glsl\convert.glsl" />
<None Include="GS\res\glsl\interlace.glsl" />
<None Include="GS\res\glsl\merge.glsl" />
<None Include="GS\res\glsl\shadeboost.glsl" />
<None Include="GS\res\glsl\tfx_fs.glsl" />
<None Include="GS\res\glsl\tfx_vgs.glsl" />
<None Include="GS\res\convert.fx" />
<None Include="GS\res\fxaa.fx" />
<None Include="GS\res\interlace.fx" />
<None Include="GS\res\merge.fx" />
<None Include="GS\res\shadeboost.fx" />
<None Include="GS\res\tfx.fx" />
<None Include="..\bin\resources\shaders\opengl\common_header.glsl" />
<None Include="..\bin\resources\shaders\opengl\convert.glsl" />
<None Include="..\bin\resources\shaders\opengl\interlace.glsl" />
<None Include="..\bin\resources\shaders\opengl\merge.glsl" />
<None Include="..\bin\resources\shaders\opengl\shadeboost.glsl" />
<None Include="..\bin\resources\shaders\opengl\tfx_fs.glsl" />
<None Include="..\bin\resources\shaders\opengl\tfx_vgs.glsl" />
<None Include="..\bin\resources\shaders\dx11\convert.fx" />
<None Include="..\bin\resources\shaders\common\fxaa.fx" />
<None Include="..\bin\resources\shaders\dx11\interlace.fx" />
<None Include="..\bin\resources\shaders\dx11\merge.fx" />
<None Include="..\bin\resources\shaders\dx11\shadeboost.fx" />
<None Include="..\bin\resources\shaders\dx11\tfx.fx" />
<None Include="PAD\Windows\Default.ini" />
<None Include="Utilities\folderdesc.txt" />
<None Include="Docs\License.txt" />
@@ -318,7 +318,7 @@
<ClCompile Include="gui\Debugger\DebugEvents.cpp" />
<ClCompile Include="gui\Debugger\DebuggerLists.cpp" />
<ClCompile Include="gui\Debugger\DisassemblyDialog.cpp" />
<ClCompile Include="gui\Dialogs\IPCDialog.cpp" />
<ClCompile Include="gui\Dialogs\PINEDialog.cpp" />
<ClCompile Include="gui\Dialogs\GSDumpDialog.cpp" />
<ClCompile Include="gui\Dialogs\McdConfigDialog.cpp" />
<ClCompile Include="gui\DriveList.cpp" />
@@ -331,7 +331,7 @@
<ClCompile Include="gui\wxAppWithHelpers.cpp" />
<ClCompile Include="gui\wxSettingsInterface.cpp" />
<ClCompile Include="IopGte.cpp" />
<ClCompile Include="IPC.cpp" />
<ClCompile Include="PINE.cpp" />
<ClCompile Include="FW.cpp" />
<ClCompile Include="MemoryCardFile.cpp" />
<ClCompile Include="MemoryCardFolder.cpp" />
@@ -767,7 +767,7 @@
<ClInclude Include="gui\wxSettingsInterface.h" />
<ClInclude Include="Host.h" />
<ClInclude Include="IopGte.h" />
<ClInclude Include="IPC.h" />
<ClInclude Include="PINE.h" />
<ClInclude Include="FW.h" />
<ClInclude Include="MemoryCardFile.h" />
<ClInclude Include="MemoryCardFolder.h" />
@@ -1169,4 +1169,4 @@
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets" />
</Project>
</Project>
+16 -16
View File
@@ -330,43 +330,43 @@
<None Include="PAD\Windows\Default.ini">
<Filter>System\Ps2\PAD</Filter>
</None>
<None Include="GS\res\glsl\common_header.glsl">
<None Include="..\bin\resources\shaders\opengl\common_header.glsl">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
<None Include="GS\res\glsl\convert.glsl">
<None Include="..\bin\resources\shaders\opengl\convert.glsl">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
<None Include="GS\res\glsl\interlace.glsl">
<None Include="..\bin\resources\shaders\opengl\interlace.glsl">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
<None Include="GS\res\glsl\merge.glsl">
<None Include="..\bin\resources\shaders\opengl\merge.glsl">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
<None Include="GS\res\glsl\shadeboost.glsl">
<None Include="..\bin\resources\shaders\opengl\shadeboost.glsl">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
<None Include="GS\res\glsl\tfx_fs.glsl">
<None Include="..\bin\resources\shaders\opengl\tfx_fs.glsl">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
<None Include="GS\res\glsl\tfx_vgs.glsl">
<None Include="..\bin\resources\shaders\opengl\tfx_vgs.glsl">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
<None Include="GS\res\convert.fx">
<None Include="..\bin\resources\shaders\dx11\convert.fx">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
<None Include="GS\res\fxaa.fx">
<None Include="..\bin\resources\shaders\common\fxaa.fx">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
<None Include="GS\res\interlace.fx">
<None Include="..\bin\resources\shaders\dx11\interlace.fx">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
<None Include="GS\res\merge.fx">
<None Include="..\bin\resources\shaders\dx11\merge.fx">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
<None Include="GS\res\shadeboost.fx">
<None Include="..\bin\resources\shaders\dx11\shadeboost.fx">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
<None Include="GS\res\tfx.fx">
<None Include="..\bin\resources\shaders\dx11\tfx.fx">
<Filter>System\Ps2\GS\Shaders</Filter>
</None>
</ItemGroup>
@@ -1052,7 +1052,7 @@
<ClCompile Include="gui\DriveList.cpp">
<Filter>AppHost</Filter>
</ClCompile>
<ClCompile Include="IPC.cpp">
<ClCompile Include="PINE.cpp">
<Filter>System</Filter>
</ClCompile>
<ClCompile Include="FW.cpp">
@@ -1466,7 +1466,7 @@
<ClCompile Include="GS\GSLzma.cpp">
<Filter>System\Ps2\GS</Filter>
</ClCompile>
<ClCompile Include="gui\Dialogs\IPCDialog.cpp">
<ClCompile Include="gui\Dialogs\PINEDialog.cpp">
<Filter>AppHost\Dialogs</Filter>
</ClCompile>
<ClCompile Include="gui\Dialogs\GSDumpDialog.cpp">
@@ -2141,7 +2141,7 @@
<ClInclude Include="gui\DriveList.h">
<Filter>AppHost\Include</Filter>
</ClInclude>
<ClInclude Include="IPC.h">
<ClInclude Include="PINE.h">
<Filter>System\Include</Filter>
</ClInclude>
<ClInclude Include="FW.h">
+2
View File
@@ -119,6 +119,8 @@ static bool LoadBiosVersion(std::FILE* fp, u32& version, std::string& descriptio
version = strtol(vermaj, (char**)NULL, 0) << 8;
version |= strtol(vermin, (char**)NULL, 0);
foundRomVer = true;
Console.WriteLn("Bios Found: %s", description.c_str());
}
if ((rd.fileSize % 0x10) == 0)