+++ /dev/null
-/* Pcsx - Pc Psx Emulator\r
- * Copyright (C) 1999-2003 Pcsx Team\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307 USA\r
- */\r
-\r
-#include <windows.h>\r
-#include <windowsx.h>\r
-#include <stdio.h>\r
-#include "plugin.h"\r
-#include "plugins.h"\r
-#include "resource.h"\r
-#include <time.h>\r
-#include <stdio.h>\r
-\r
-#include "r3000a.h"\r
-#include "Win32.h"\r
-#include "NoPic.h"\r
-#include "misc.h"\r
-#include "sio.h"\r
-\r
-int ShowPic = 0;\r
-\r
-void gpuShowPic() {\r
- char Text[255];\r
- gzFile f;\r
-\r
- if (!ShowPic) {\r
- unsigned char *pMem;\r
-\r
- pMem = (unsigned char *) malloc(128*96*3);\r
- if (pMem == NULL) return;\r
- GetStateFilename(Text, StatesC);\r
-\r
- GPU_freeze(2, (GPUFreeze_t *)&StatesC);\r
-\r
- f = gzopen(Text, "rb");\r
- if (f != NULL) {\r
- gzseek(f, 32, SEEK_SET); // skip header\r
- gzread(f, pMem, 128*96*3);\r
- gzclose(f);\r
- } else {\r
- memcpy(pMem, NoPic_Image.pixel_data, 128*96*3);\r
- DrawNumBorPic(pMem, StatesC+1);\r
- }\r
- GPU_showScreenPic(pMem);\r
-\r
- free(pMem);\r
- ShowPic = 1;\r
- } else { GPU_showScreenPic(NULL); ShowPic = 0; }\r
-}\r
-\r
-void GetStateFilename(char *out, int i) {\r
- char trimlabel[33];\r
- int j;\r
-\r
- strncpy(trimlabel, CdromLabel, 32);\r
- trimlabel[32] = 0;\r
- for (j=31; j>=0; j--)\r
- if (trimlabel[j] == ' ')\r
- trimlabel[j] = '\0';\r
-\r
- sprintf(out, "sstates\\%.32s-%.9s.%3.3d", trimlabel, CdromId, i);\r
-}\r
-\r
-void PADhandleKey(int key) {\r
- char Text[255];\r
- int ret;\r
-\r
- if (Running == 0) return;\r
- switch (key) {\r
- case 0: break;\r
- case VK_F1:\r
- GetStateFilename(Text, StatesC);\r
- GPU_freeze(2, (GPUFreeze_t *)&StatesC);\r
- ret = SaveState(Text);\r
- if (ret == 0)\r
- sprintf(Text, _("*PCSX*: Saved State %d"), StatesC+1);\r
- else sprintf(Text, _("*PCSX*: Error Saving State %d"), StatesC+1);\r
- GPU_displayText(Text);\r
- if (ShowPic) { ShowPic = 0; gpuShowPic(); }\r
- break;\r
-\r
- case VK_F2:\r
- if (StatesC < 4) StatesC++;\r
- else StatesC = 0;\r
- GPU_freeze(2, (GPUFreeze_t *)&StatesC);\r
- if (ShowPic) { ShowPic = 0; gpuShowPic(); }\r
- break;\r
-\r
- case VK_F3:\r
- GetStateFilename(Text, StatesC);\r
- ret = LoadState(Text);\r
- if (ret == 0)\r
- sprintf(Text, _("*PCSX*: Loaded State %d"), StatesC+1);\r
- else sprintf(Text, _("*PCSX*: Error Loading State %d"), StatesC+1);\r
- GPU_displayText(Text);\r
- break;\r
-\r
- case VK_F4:\r
- gpuShowPic();\r
- break;\r
-\r
- case VK_F5:\r
- Config.Sio ^= 0x1;\r
- if (Config.Sio)\r
- sprintf(Text, _("*PCSX*: Sio Irq Always Enabled"));\r
- else sprintf(Text, _("*PCSX*: Sio Irq Not Always Enabled"));\r
- GPU_displayText(Text);\r
- break;\r
-\r
- case VK_F6:\r
- Config.Mdec ^= 0x1;\r
- if (Config.Mdec)\r
- sprintf(Text, _("*PCSX*: Black&White Mdecs Only Enabled"));\r
- else sprintf(Text, _("*PCSX*: Black&White Mdecs Only Disabled"));\r
- GPU_displayText(Text);\r
- break;\r
-\r
- case VK_F7:\r
- Config.Xa ^= 0x1;\r
- if (Config.Xa == 0)\r
- sprintf (Text, _("*PCSX*: Xa Enabled"));\r
- else sprintf (Text, _("*PCSX*: Xa Disabled"));\r
- GPU_displayText(Text);\r
- break;\r
-\r
- case VK_F8:\r
- GPU_makeSnapshot();\r
- return;\r
-\r
- case VK_F9:\r
- GPU_displayText(_("*PCSX*: CdRom Case Opened"));\r
- SetCdOpenCaseTime(-1);\r
- break;\r
-\r
- case VK_F10:\r
- GPU_displayText(_("*PCSX*: CdRom Case Closed"));\r
- SetCdOpenCaseTime(0);\r
- break;\r
-\r
- case VK_F12:\r
- SysPrintf("*PCSX*: CpuReset\n");\r
- psxCpu->Reset();\r
- break;\r
-\r
- case VK_ESCAPE:\r
- Running = 0;\r
- ClosePlugins();\r
- SysRunGui();\r
- break;\r
- }\r
-}\r
-\r
-void CALLBACK SPUirq(void);\r
-\r
-char charsTable[4] = { "|/-\\" };\r
-\r
-BOOL CALLBACK ConnectDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {\r
- char str[256];\r
- static int waitState;\r
-\r
- switch(uMsg) {\r
- case WM_INITDIALOG:\r
- SetWindowText(hW, _("Connecting..."));\r
-\r
- sprintf(str, _("Please wait while connecting... %c\n"), charsTable[waitState]);\r
- Static_SetText(GetDlgItem(hW, IDC_CONNECTSTR), str);\r
- SetTimer(hW, 0, 100, NULL);\r
- return TRUE;\r
-\r
- case WM_TIMER:\r
- if (++waitState == 4) waitState = 0;\r
- sprintf(str, _("Please wait while connecting... %c\n"), charsTable[waitState]);\r
- Static_SetText(GetDlgItem(hW, IDC_CONNECTSTR), str);\r
- return TRUE;\r
-\r
-/* case WM_COMMAND:\r
- switch (LOWORD(wParam)) {\r
- case IDCANCEL:\r
- WaitCancel = 1;\r
- return TRUE;\r
- }*/\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-#define PARSEPATH(dst, src) \\r
- ptr = src + strlen(src); \\r
- while (*ptr != '\\' && ptr != src) ptr--; \\r
- if (ptr != src) { \\r
- strcpy(dst, ptr+1); \\r
- }\r
-\r
-int _OpenPlugins(HWND hWnd) {\r
- int ret;\r
-\r
- GPU_clearDynarec(clearDynarec);\r
-\r
- ret = CDR_open();\r
- if (ret < 0) { SysMessage (_("Error Opening CDR Plugin")); return -1; }\r
-\r
- SetCurrentDirectory(PcsxDir);\r
- if (Config.UseNet && !NetOpened) {\r
- netInfo info;\r
- char path[256];\r
-\r
- strcpy(info.EmuName, "PCSX " PACKAGE_VERSION);\r
- strncpy(info.CdromID, CdromId, 9);\r
- strncpy(info.CdromLabel, CdromLabel, 9);\r
- info.psxMem = psxM;\r
- info.GPU_showScreenPic = GPU_showScreenPic;\r
- info.GPU_displayText = GPU_displayText;\r
- info.GPU_showScreenPic = GPU_showScreenPic;\r
- info.PAD_setSensitive = PAD1_setSensitive;\r
- sprintf(path, "%s%s", Config.BiosDir, Config.Bios);\r
- strcpy(info.BIOSpath, path);\r
- strcpy(info.MCD1path, Config.Mcd1);\r
- strcpy(info.MCD2path, Config.Mcd2);\r
- sprintf(path, "%s%s", Config.PluginsDir, Config.Gpu);\r
- strcpy(info.GPUpath, path);\r
- sprintf(path, "%s%s", Config.PluginsDir, Config.Spu);\r
- strcpy(info.SPUpath, path);\r
- sprintf(path, "%s%s", Config.PluginsDir, Config.Cdr);\r
- strcpy(info.CDRpath, path);\r
- NET_setInfo(&info);\r
-\r
- ret = NET_open(hWnd);\r
- if (ret < 0) {\r
- if (ret == -2) {\r
- // -2 is returned when something in the info\r
- // changed and needs to be synced\r
- char *ptr;\r
-\r
- PARSEPATH(Config.Bios, info.BIOSpath);\r
- PARSEPATH(Config.Gpu, info.GPUpath);\r
- PARSEPATH(Config.Spu, info.SPUpath);\r
- PARSEPATH(Config.Cdr, info.CDRpath);\r
-\r
- strcpy(Config.Mcd1, info.MCD1path);\r
- strcpy(Config.Mcd2, info.MCD2path);\r
- return -2;\r
- } else {\r
- Config.UseNet = FALSE;\r
- }\r
- } else {\r
- HWND hW = CreateDialog(gApp.hInstance, MAKEINTRESOURCE(IDD_CONNECT), gApp.hWnd, ConnectDlgProc);\r
- ShowWindow(hW, SW_SHOW);\r
-\r
- if (NET_queryPlayer() == 1) {\r
- if (SendPcsxInfo() == -1) Config.UseNet = FALSE;\r
- } else {\r
- if (RecvPcsxInfo() == -1) Config.UseNet = FALSE;\r
- }\r
-\r
- DestroyWindow(hW);\r
- }\r
- NetOpened = TRUE;\r
- } else if (Config.UseNet) {\r
- NET_resume();\r
- }\r
-\r
- ret = GPU_open(hWnd);\r
- if (ret < 0) { SysMessage (_("Error Opening GPU Plugin (%d)"), ret); return -1; }\r
- ret = SPU_open(hWnd);\r
- if (ret < 0) { SysMessage (_("Error Opening SPU Plugin (%d)"), ret); return -1; }\r
- SPU_registerCallback(SPUirq);\r
- ret = PAD1_open(hWnd);\r
- if (ret < 0) { SysMessage (_("Error Opening PAD1 Plugin (%d)"), ret); return -1; }\r
- ret = PAD2_open(hWnd);\r
- if (ret < 0) { SysMessage (_("Error Opening PAD2 Plugin (%d)"), ret); return -1; }\r
-\r
- SetCurrentDirectory(PcsxDir);\r
- ShowCursor(FALSE);\r
- return 0;\r
-}\r
-\r
-int OpenPlugins(HWND hWnd, int internaliso) {\r
- int ret;\r
-\r
- while ((ret = _OpenPlugins(hWnd)) == -2) {\r
- ReleasePlugins();\r
- LoadMcds(Config.Mcd1, Config.Mcd2);\r
- if (LoadPlugins() == -1) return -1;\r
- }\r
- return ret; \r
-}\r
-\r
-void ClosePlugins() {\r
- int ret;\r
-\r
- // PAD plugins have to be closed first, otherwise some plugins like\r
- // LilyPad will mess up the window handle and cause crash.\r
- // Also don't check return value here, as LilyPad uses void.\r
- PAD1_close();\r
- PAD2_close();\r
-\r
- UpdateMenuSlots();\r
-\r
- ret = CDR_close();\r
- if (ret < 0) { SysMessage (_("Error Closing CDR Plugin")); return; }\r
- ret = GPU_close();\r
- if (ret < 0) { SysMessage (_("Error Closing GPU Plugin")); return; }\r
- ret = SPU_close();\r
- if (ret < 0) { SysMessage (_("Error Closing SPU Plugin")); return; }\r
-\r
- if (Config.UseNet) {\r
- NET_pause();\r
- }\r
-}\r
-\r
-void ResetPlugins() {\r
- int ret;\r
-\r
- CDR_shutdown();\r
- GPU_shutdown();\r
- SPU_shutdown();\r
- PAD1_shutdown();\r
- PAD2_shutdown();\r
- if (Config.UseNet) NET_shutdown(); \r
-\r
- ret = CDR_init();\r
- if (ret != 0) { SysMessage (_("CDRinit error: %d"), ret); return; }\r
- ret = GPU_init();\r
- if (ret != 0) { SysMessage (_("GPUinit error: %d"), ret); return; }\r
- ret = SPU_init();\r
- if (ret != 0) { SysMessage (_("SPUinit error: %d"), ret); return; }\r
- ret = PAD1_init(1);\r
- if (ret != 0) { SysMessage (_("PAD1init error: %d"), ret); return; }\r
- ret = PAD2_init(2);\r
- if (ret != 0) { SysMessage (_("PAD2init error: %d"), ret); return; }\r
- if (Config.UseNet) {\r
- ret = NET_init();\r
- if (ret < 0) { SysMessage (_("NETinit error: %d"), ret); return; }\r
- }\r
-\r
- NetOpened = FALSE;\r
-}\r