-/***************************************************************************\r
- * Copyright (C) 2007 Ryan Schultz, PCSX-df Team, 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 *\r
- * Free Software Foundation, Inc., *\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307 USA. *\r
- ***************************************************************************/\r
-\r
-/*\r
-* Plugin library callback/access functions.\r
-*/\r
-\r
-#include "plugins.h"\r
-#include "cdriso.h"\r
-\r
-static char IsoFile[MAXPATHLEN] = "";\r
-static s64 cdOpenCaseTime = 0;\r
-\r
-GPUupdateLace GPU_updateLace;\r
-GPUinit GPU_init;\r
-GPUshutdown GPU_shutdown; \r
-GPUconfigure GPU_configure;\r
-GPUtest GPU_test;\r
-GPUabout GPU_about;\r
-GPUopen GPU_open;\r
-GPUclose GPU_close;\r
-GPUreadStatus GPU_readStatus;\r
-GPUreadData GPU_readData;\r
-GPUreadDataMem GPU_readDataMem;\r
-GPUwriteStatus GPU_writeStatus; \r
-GPUwriteData GPU_writeData;\r
-GPUwriteDataMem GPU_writeDataMem;\r
-GPUdmaChain GPU_dmaChain;\r
-GPUkeypressed GPU_keypressed;\r
-GPUdisplayText GPU_displayText;\r
-GPUmakeSnapshot GPU_makeSnapshot;\r
-GPUfreeze GPU_freeze;\r
-GPUgetScreenPic GPU_getScreenPic;\r
-GPUshowScreenPic GPU_showScreenPic;\r
-GPUclearDynarec GPU_clearDynarec;\r
-GPUvBlank GPU_vBlank;\r
-\r
-CDRinit CDR_init;\r
-CDRshutdown CDR_shutdown;\r
-CDRopen CDR_open;\r
-CDRclose CDR_close; \r
-CDRtest CDR_test;\r
-CDRgetTN CDR_getTN;\r
-CDRgetTD CDR_getTD;\r
-CDRreadTrack CDR_readTrack;\r
-CDRgetBuffer CDR_getBuffer;\r
-CDRplay CDR_play;\r
-CDRstop CDR_stop;\r
-CDRgetStatus CDR_getStatus;\r
-CDRgetDriveLetter CDR_getDriveLetter;\r
-CDRgetBufferSub CDR_getBufferSub;\r
-CDRconfigure CDR_configure;\r
-CDRabout CDR_about;\r
-CDRsetfilename CDR_setfilename;\r
-CDRreadCDDA CDR_readCDDA;\r
-CDRgetTE CDR_getTE;\r
-\r
-SPUconfigure SPU_configure;\r
-SPUabout SPU_about;\r
-SPUinit SPU_init;\r
-SPUshutdown SPU_shutdown;\r
-SPUtest SPU_test;\r
-SPUopen SPU_open;\r
-SPUclose SPU_close;\r
-SPUplaySample SPU_playSample;\r
-SPUwriteRegister SPU_writeRegister;\r
-SPUreadRegister SPU_readRegister;\r
-SPUwriteDMA SPU_writeDMA;\r
-SPUreadDMA SPU_readDMA;\r
-SPUwriteDMAMem SPU_writeDMAMem;\r
-SPUreadDMAMem SPU_readDMAMem;\r
-SPUplayADPCMchannel SPU_playADPCMchannel;\r
-SPUfreeze SPU_freeze;\r
-SPUregisterCallback SPU_registerCallback;\r
-SPUregisterScheduleCb SPU_registerScheduleCb;\r
-SPUasync SPU_async;\r
-SPUplayCDDAchannel SPU_playCDDAchannel;\r
-\r
-PADconfigure PAD1_configure;\r
-PADabout PAD1_about;\r
-PADinit PAD1_init;\r
-PADshutdown PAD1_shutdown;\r
-PADtest PAD1_test;\r
-PADopen PAD1_open;\r
-PADclose PAD1_close;\r
-PADquery PAD1_query;\r
-PADreadPort1 PAD1_readPort1;\r
-PADkeypressed PAD1_keypressed;\r
-PADstartPoll PAD1_startPoll;\r
-PADpoll PAD1_poll;\r
-PADsetSensitive PAD1_setSensitive;\r
-\r
-PADconfigure PAD2_configure;\r
-PADabout PAD2_about;\r
-PADinit PAD2_init;\r
-PADshutdown PAD2_shutdown;\r
-PADtest PAD2_test;\r
-PADopen PAD2_open;\r
-PADclose PAD2_close;\r
-PADquery PAD2_query;\r
-PADreadPort2 PAD2_readPort2;\r
-PADkeypressed PAD2_keypressed;\r
-PADstartPoll PAD2_startPoll;\r
-PADpoll PAD2_poll;\r
-PADsetSensitive PAD2_setSensitive;\r
-\r
-NETinit NET_init;\r
-NETshutdown NET_shutdown;\r
-NETopen NET_open;\r
-NETclose NET_close; \r
-NETtest NET_test;\r
-NETconfigure NET_configure;\r
-NETabout NET_about;\r
-NETpause NET_pause;\r
-NETresume NET_resume;\r
-NETqueryPlayer NET_queryPlayer;\r
-NETsendData NET_sendData;\r
-NETrecvData NET_recvData;\r
-NETsendPadData NET_sendPadData;\r
-NETrecvPadData NET_recvPadData;\r
-NETsetInfo NET_setInfo;\r
-NETkeypressed NET_keypressed;\r
-\r
-#ifdef ENABLE_SIO1API\r
-\r
-SIO1init SIO1_init;\r
-SIO1shutdown SIO1_shutdown;\r
-SIO1open SIO1_open;\r
-SIO1close SIO1_close; \r
-SIO1test SIO1_test;\r
-SIO1configure SIO1_configure;\r
-SIO1about SIO1_about;\r
-SIO1pause SIO1_pause;\r
-SIO1resume SIO1_resume;\r
-SIO1keypressed SIO1_keypressed;\r
-SIO1writeData8 SIO1_writeData8;\r
-SIO1writeData16 SIO1_writeData16;\r
-SIO1writeData32 SIO1_writeData32;\r
-SIO1writeStat16 SIO1_writeStat16;\r
-SIO1writeStat32 SIO1_writeStat32;\r
-SIO1writeMode16 SIO1_writeMode16;\r
-SIO1writeMode32 SIO1_writeMode32;\r
-SIO1writeCtrl16 SIO1_writeCtrl16;\r
-SIO1writeCtrl32 SIO1_writeCtrl32;\r
-SIO1writeBaud16 SIO1_writeBaud16;\r
-SIO1writeBaud32 SIO1_writeBaud32;\r
-SIO1readData8 SIO1_readData8;\r
-SIO1readData16 SIO1_readData16;\r
-SIO1readData32 SIO1_readData32;\r
-SIO1readStat16 SIO1_readStat16;\r
-SIO1readStat32 SIO1_readStat32;\r
-SIO1readMode16 SIO1_readMode16;\r
-SIO1readMode32 SIO1_readMode32;\r
-SIO1readCtrl16 SIO1_readCtrl16;\r
-SIO1readCtrl32 SIO1_readCtrl32;\r
-SIO1readBaud16 SIO1_readBaud16;\r
-SIO1readBaud32 SIO1_readBaud32;\r
-SIO1registerCallback SIO1_registerCallback;\r
-\r
-#endif\r
-\r
-static const char *err;\r
-\r
-#define CheckErr(func) { \\r
- err = SysLibError(); \\r
- if (err != NULL) { SysMessage(_("Error loading %s: %s"), func, err); return -1; } \\r
-}\r
-\r
-#define LoadSym(dest, src, name, checkerr) { \\r
- dest = (src)SysLoadSym(drv, name); \\r
- if (checkerr) { CheckErr(name); } else SysLibError(); \\r
-}\r
-\r
-void *hGPUDriver = NULL;\r
-\r
-void CALLBACK GPU__displayText(char *pText) {\r
- SysPrintf("%s\n", pText);\r
-}\r
-\r
-long CALLBACK GPU__configure(void) { return 0; }\r
-long CALLBACK GPU__test(void) { return 0; }\r
-void CALLBACK GPU__about(void) {}\r
-void CALLBACK GPU__makeSnapshot(void) {}\r
-void CALLBACK GPU__keypressed(int key) {}\r
-long CALLBACK GPU__getScreenPic(unsigned char *pMem) { return -1; }\r
-long CALLBACK GPU__showScreenPic(unsigned char *pMem) { return -1; }\r
-void CALLBACK GPU__clearDynarec(void (CALLBACK *callback)(void)) {}\r
-void CALLBACK GPU__vBlank(int val) {}\r
-\r
-#define LoadGpuSym1(dest, name) \\r
- LoadSym(GPU_##dest, GPU##dest, name, TRUE);\r
-
-#define LoadGpuSym0(dest, name) \\r
- LoadSym(GPU_##dest, GPU##dest, name, FALSE); \\r
- if (GPU_##dest == NULL) GPU_##dest = (GPU##dest) GPU__##dest;\r
-\r
-#define LoadGpuSymN(dest, name) \\r
- LoadSym(GPU_##dest, GPU##dest, name, FALSE);\r
-\r
-static int LoadGPUplugin(const char *GPUdll) {\r
- void *drv;\r
-\r
- hGPUDriver = SysLoadLibrary(GPUdll);\r
- if (hGPUDriver == NULL) { \r
- GPU_configure = NULL;\r
- SysMessage (_("Could not load GPU plugin %s!"), GPUdll); return -1; \r
- }\r
- drv = hGPUDriver;\r
- LoadGpuSym1(init, "GPUinit");\r
- LoadGpuSym1(shutdown, "GPUshutdown");\r
- LoadGpuSym1(open, "GPUopen");\r
- LoadGpuSym1(close, "GPUclose");\r
- LoadGpuSym1(readData, "GPUreadData");\r
- LoadGpuSym1(readDataMem, "GPUreadDataMem");\r
- LoadGpuSym1(readStatus, "GPUreadStatus");\r
- LoadGpuSym1(writeData, "GPUwriteData");\r
- LoadGpuSym1(writeDataMem, "GPUwriteDataMem");\r
- LoadGpuSym1(writeStatus, "GPUwriteStatus");\r
- LoadGpuSym1(dmaChain, "GPUdmaChain");\r
- LoadGpuSym1(updateLace, "GPUupdateLace");\r
- LoadGpuSym0(keypressed, "GPUkeypressed");\r
- LoadGpuSym0(displayText, "GPUdisplayText");\r
- LoadGpuSym0(makeSnapshot, "GPUmakeSnapshot");\r
- LoadGpuSym1(freeze, "GPUfreeze");\r
- LoadGpuSym0(getScreenPic, "GPUgetScreenPic");\r
- LoadGpuSym0(showScreenPic, "GPUshowScreenPic");\r
- LoadGpuSym0(clearDynarec, "GPUclearDynarec");\r
- LoadGpuSym0(vBlank, "GPUvBlank");\r
- LoadGpuSym0(configure, "GPUconfigure");\r
- LoadGpuSym0(test, "GPUtest");\r
- LoadGpuSym0(about, "GPUabout");\r
-\r
- return 0;\r
-}\r
-\r
-void *hCDRDriver = NULL;\r
-\r
-long CALLBACK CDR__play(unsigned char *sector) { return 0; }\r
-long CALLBACK CDR__stop(void) { return 0; }\r
-\r
-long CALLBACK CDR__getStatus(struct CdrStat *stat) {\r
- if (cdOpenCaseTime < 0 || cdOpenCaseTime > (s64)time(NULL))\r
- stat->Status = 0x10;\r
- else\r
- stat->Status = 0;\r
-\r
- return 0;\r
-}\r
-\r
-char* CALLBACK CDR__getDriveLetter(void) { return NULL; }\r
-long CALLBACK CDR__configure(void) { return 0; }\r
-long CALLBACK CDR__test(void) { return 0; }\r
-void CALLBACK CDR__about(void) {}\r
-long CALLBACK CDR__setfilename(char*filename) { return 0; }\r
-\r
-#define LoadCdrSym1(dest, name) \\r
- LoadSym(CDR_##dest, CDR##dest, name, TRUE);\r
-\r
-#define LoadCdrSym0(dest, name) \\r
- LoadSym(CDR_##dest, CDR##dest, name, FALSE); \\r
- if (CDR_##dest == NULL) CDR_##dest = (CDR##dest) CDR__##dest;\r
-\r
-#define LoadCdrSymN(dest, name) \\r
- LoadSym(CDR_##dest, CDR##dest, name, FALSE);\r
-\r
-static int LoadCDRplugin(const char *CDRdll) {\r
- void *drv;\r
-\r
- if (CDRdll == NULL) {\r
- cdrIsoInit();\r
- return 0;\r
- }\r
-\r
- hCDRDriver = SysLoadLibrary(CDRdll);\r
- if (hCDRDriver == NULL) {\r
- CDR_configure = NULL;\r
- SysMessage (_("Could not load CD-ROM plugin %s!"), CDRdll); return -1;\r
- }\r
- drv = hCDRDriver;\r
- LoadCdrSym1(init, "CDRinit");\r
- LoadCdrSym1(shutdown, "CDRshutdown");\r
- LoadCdrSym1(open, "CDRopen");\r
- LoadCdrSym1(close, "CDRclose");\r
- LoadCdrSym1(getTN, "CDRgetTN");\r
- LoadCdrSym1(getTD, "CDRgetTD");\r
- LoadCdrSym1(readTrack, "CDRreadTrack");\r
- LoadCdrSym1(getBuffer, "CDRgetBuffer");\r
- LoadCdrSym1(getBufferSub, "CDRgetBufferSub");\r
- LoadCdrSym0(play, "CDRplay");\r
- LoadCdrSym0(stop, "CDRstop");\r
- LoadCdrSym0(getStatus, "CDRgetStatus");\r
- LoadCdrSym0(getDriveLetter, "CDRgetDriveLetter");\r
- LoadCdrSym0(configure, "CDRconfigure");\r
- LoadCdrSym0(test, "CDRtest");\r
- LoadCdrSym0(about, "CDRabout");\r
- LoadCdrSym0(setfilename, "CDRsetfilename");\r
- LoadCdrSymN(readCDDA, "CDRreadCDDA");\r
- LoadCdrSymN(getTE, "CDRgetTE");\r
-\r
- return 0;\r
-}\r
-\r
-void *hSPUDriver = NULL;\r
-\r
-long CALLBACK SPU__configure(void) { return 0; }\r
-void CALLBACK SPU__about(void) {}\r
-long CALLBACK SPU__test(void) { return 0; }\r
-void CALLBACK SPU__registerScheduleCb(void (CALLBACK *cb)(unsigned int)) {}\r
-\r
-#define LoadSpuSym1(dest, name) \\r
- LoadSym(SPU_##dest, SPU##dest, name, TRUE);\r
-\r
-#define LoadSpuSym0(dest, name) \\r
- LoadSym(SPU_##dest, SPU##dest, name, FALSE); \\r
- if (SPU_##dest == NULL) SPU_##dest = (SPU##dest) SPU__##dest;\r
-\r
-#define LoadSpuSymN(dest, name) \\r
- LoadSym(SPU_##dest, SPU##dest, name, FALSE);\r
-\r
-static int LoadSPUplugin(const char *SPUdll) {\r
- void *drv;\r
-\r
- hSPUDriver = SysLoadLibrary(SPUdll);\r
- if (hSPUDriver == NULL) {\r
- SPU_configure = NULL;\r
- SysMessage (_("Could not load SPU plugin %s!"), SPUdll); return -1;\r
- }\r
- drv = hSPUDriver;\r
- LoadSpuSym1(init, "SPUinit");\r
- LoadSpuSym1(shutdown, "SPUshutdown");\r
- LoadSpuSym1(open, "SPUopen");\r
- LoadSpuSym1(close, "SPUclose");\r
- LoadSpuSym0(configure, "SPUconfigure");\r
- LoadSpuSym0(about, "SPUabout");\r
- LoadSpuSym0(test, "SPUtest");\r
- LoadSpuSym1(writeRegister, "SPUwriteRegister");\r
- LoadSpuSym1(readRegister, "SPUreadRegister"); \r
- LoadSpuSym1(writeDMA, "SPUwriteDMA");\r
- LoadSpuSym1(readDMA, "SPUreadDMA");\r
- LoadSpuSym1(writeDMAMem, "SPUwriteDMAMem");\r
- LoadSpuSym1(readDMAMem, "SPUreadDMAMem");\r
- LoadSpuSym1(playADPCMchannel, "SPUplayADPCMchannel");\r
- LoadSpuSym1(freeze, "SPUfreeze");\r
- LoadSpuSym1(registerCallback, "SPUregisterCallback");\r
- LoadSpuSym0(registerScheduleCb, "SPUregisterScheduleCb");\r
- LoadSpuSymN(async, "SPUasync");\r
- LoadSpuSymN(playCDDAchannel, "SPUplayCDDAchannel");\r
-\r
- return 0;\r
-}\r
-\r
-void *hPAD1Driver = NULL;\r
-void *hPAD2Driver = NULL;\r
-\r
-static int multitap1 = -1;\r
-static int multitap2 = -1;\r
-//Pad information, keystate, mode, config mode, vibration\r
-static PadDataS pad[8];
-
-static int reqPos, respSize, req;
-static int ledStateReq44[8];\r
-\r
-static unsigned char buf[256];\r
-unsigned char stdpar[8] = { 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};\r
-unsigned char multitappar[34] = { 0x80, 0x5a,
- 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\r
- 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\r
- 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\r
- 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};\r
- \r
-//response for request 44, 45, 46, 47, 4C, 4D\r
-static unsigned char resp45[8] = {0xF3, 0x5A, 0x01, 0x02, 0x00, 0x02, 0x01, 0x00};\r
-static unsigned char resp46_00[8] = {0xF3, 0x5A, 0x00, 0x00, 0x01, 0x02, 0x00, 0x0A};\r
-static unsigned char resp46_01[8] = {0xF3, 0x5A, 0x00, 0x00, 0x01, 0x01, 0x01, 0x14};\r
-static unsigned char resp47[8] = {0xF3, 0x5A, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00};\r
-static unsigned char resp4C_00[8] = {0xF3, 0x5A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00};\r
-static unsigned char resp4C_01[8] = {0xF3, 0x5A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00};\r
-static unsigned char resp4D[8] = {0xF3, 0x5A, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF};\r
+/***************************************************************************
+ * Copyright (C) 2007 Ryan Schultz, PCSX-df Team, PCSX team *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307 USA. *
+ ***************************************************************************/
+
+/*
+* Plugin library callback/access functions.
+*/
+
+#include "plugins.h"
+#include "cdriso.h"
+#include "psxcounters.h"
+
+static char IsoFile[MAXPATHLEN] = "";
+static s64 cdOpenCaseTime = 0;
+
+GPUupdateLace GPU_updateLace;
+GPUinit GPU_init;
+GPUshutdown GPU_shutdown;
+GPUconfigure GPU_configure;
+GPUtest GPU_test;
+GPUabout GPU_about;
+GPUopen GPU_open;
+GPUclose GPU_close;
+GPUreadStatus GPU_readStatus;
+GPUreadData GPU_readData;
+GPUreadDataMem GPU_readDataMem;
+GPUwriteStatus GPU_writeStatus;
+GPUwriteData GPU_writeData;
+GPUwriteDataMem GPU_writeDataMem;
+GPUdmaChain GPU_dmaChain;
+GPUkeypressed GPU_keypressed;
+GPUdisplayText GPU_displayText;
+GPUmakeSnapshot GPU_makeSnapshot;
+GPUfreeze GPU_freeze;
+GPUgetScreenPic GPU_getScreenPic;
+GPUshowScreenPic GPU_showScreenPic;
+GPUvBlank GPU_vBlank;
+GPUgetScreenInfo GPU_getScreenInfo;
+
+CDRinit CDR_init;
+CDRshutdown CDR_shutdown;
+CDRopen CDR_open;
+CDRclose CDR_close;
+CDRtest CDR_test;
+CDRgetTN CDR_getTN;
+CDRgetTD CDR_getTD;
+CDRreadTrack CDR_readTrack;
+CDRgetBuffer CDR_getBuffer;
+CDRplay CDR_play;
+CDRstop CDR_stop;
+CDRgetStatus CDR_getStatus;
+CDRgetDriveLetter CDR_getDriveLetter;
+CDRgetBufferSub CDR_getBufferSub;
+CDRconfigure CDR_configure;
+CDRabout CDR_about;
+CDRsetfilename CDR_setfilename;
+CDRreadCDDA CDR_readCDDA;
+CDRgetTE CDR_getTE;
+
+SPUinit SPU_init;
+SPUshutdown SPU_shutdown;
+SPUopen SPU_open;
+SPUclose SPU_close;
+SPUwriteRegister SPU_writeRegister;
+SPUreadRegister SPU_readRegister;
+SPUwriteDMAMem SPU_writeDMAMem;
+SPUreadDMAMem SPU_readDMAMem;
+SPUplayADPCMchannel SPU_playADPCMchannel;
+SPUfreeze SPU_freeze;
+SPUregisterCallback SPU_registerCallback;
+SPUregisterScheduleCb SPU_registerScheduleCb;
+SPUasync SPU_async;
+SPUplayCDDAchannel SPU_playCDDAchannel;
+
+PADconfigure PAD1_configure;
+PADabout PAD1_about;
+PADinit PAD1_init;
+PADshutdown PAD1_shutdown;
+PADtest PAD1_test;
+PADopen PAD1_open;
+PADclose PAD1_close;
+PADquery PAD1_query;
+PADreadPort1 PAD1_readPort1;
+PADkeypressed PAD1_keypressed;
+PADstartPoll PAD1_startPoll;
+PADpoll PAD1_poll;
+PADsetSensitive PAD1_setSensitive;
+
+PADconfigure PAD2_configure;
+PADabout PAD2_about;
+PADinit PAD2_init;
+PADshutdown PAD2_shutdown;
+PADtest PAD2_test;
+PADopen PAD2_open;
+PADclose PAD2_close;
+PADquery PAD2_query;
+PADreadPort2 PAD2_readPort2;
+PADkeypressed PAD2_keypressed;
+PADstartPoll PAD2_startPoll;
+PADpoll PAD2_poll;
+PADsetSensitive PAD2_setSensitive;
+
+NETinit NET_init;
+NETshutdown NET_shutdown;
+NETopen NET_open;
+NETclose NET_close;
+NETtest NET_test;
+NETconfigure NET_configure;
+NETabout NET_about;
+NETpause NET_pause;
+NETresume NET_resume;
+NETqueryPlayer NET_queryPlayer;
+NETsendData NET_sendData;
+NETrecvData NET_recvData;
+NETsendPadData NET_sendPadData;
+NETrecvPadData NET_recvPadData;
+NETsetInfo NET_setInfo;
+NETkeypressed NET_keypressed;
+
+#ifdef ENABLE_SIO1API
+
+SIO1init SIO1_init;
+SIO1shutdown SIO1_shutdown;
+SIO1open SIO1_open;
+SIO1close SIO1_close;
+SIO1test SIO1_test;
+SIO1configure SIO1_configure;
+SIO1about SIO1_about;
+SIO1pause SIO1_pause;
+SIO1resume SIO1_resume;
+SIO1keypressed SIO1_keypressed;
+SIO1writeData8 SIO1_writeData8;
+SIO1writeData16 SIO1_writeData16;
+SIO1writeData32 SIO1_writeData32;
+SIO1writeStat16 SIO1_writeStat16;
+SIO1writeStat32 SIO1_writeStat32;
+SIO1writeMode16 SIO1_writeMode16;
+SIO1writeMode32 SIO1_writeMode32;
+SIO1writeCtrl16 SIO1_writeCtrl16;
+SIO1writeCtrl32 SIO1_writeCtrl32;
+SIO1writeBaud16 SIO1_writeBaud16;
+SIO1writeBaud32 SIO1_writeBaud32;
+SIO1readData8 SIO1_readData8;
+SIO1readData16 SIO1_readData16;
+SIO1readData32 SIO1_readData32;
+SIO1readStat16 SIO1_readStat16;
+SIO1readStat32 SIO1_readStat32;
+SIO1readMode16 SIO1_readMode16;
+SIO1readMode32 SIO1_readMode32;
+SIO1readCtrl16 SIO1_readCtrl16;
+SIO1readCtrl32 SIO1_readCtrl32;
+SIO1readBaud16 SIO1_readBaud16;
+SIO1readBaud32 SIO1_readBaud32;
+SIO1registerCallback SIO1_registerCallback;
+
+#endif
+
+static const char *err;
+
+#define CheckErr(func) { \
+ err = SysLibError(); \
+ if (err != NULL) { SysMessage(_("Error loading %s: %s"), func, err); return -1; } \
+}
+
+#define LoadSym(dest, src, name, checkerr) { \
+ dest = (src)SysLoadSym(drv, name); \
+ if (checkerr) { CheckErr(name); } else SysLibError(); \
+}
+
+void *hGPUDriver = NULL;
+
+void CALLBACK GPU__displayText(char *pText) {
+ SysPrintf("%s\n", pText);
+}
+
+long CALLBACK GPU__configure(void) { return 0; }
+long CALLBACK GPU__test(void) { return 0; }
+void CALLBACK GPU__about(void) {}
+void CALLBACK GPU__makeSnapshot(void) {}
+void CALLBACK GPU__keypressed(int key) {}
+long CALLBACK GPU__getScreenPic(unsigned char *pMem) { return -1; }
+long CALLBACK GPU__showScreenPic(unsigned char *pMem) { return -1; }
+void CALLBACK GPU__vBlank(int val) {}
+void CALLBACK GPU__getScreenInfo(int *y, int *base_hres) {}
+
+#define LoadGpuSym1(dest, name) \
+ LoadSym(GPU_##dest, GPU##dest, name, TRUE);
+
+#define LoadGpuSym0(dest, name) \
+ LoadSym(GPU_##dest, GPU##dest, name, FALSE); \
+ if (GPU_##dest == NULL) GPU_##dest = (GPU##dest) GPU__##dest;
+
+#define LoadGpuSymN(dest, name) \
+ LoadSym(GPU_##dest, GPU##dest, name, FALSE);
+
+static int LoadGPUplugin(const char *GPUdll) {
+ void *drv;
+
+ hGPUDriver = SysLoadLibrary(GPUdll);
+ if (hGPUDriver == NULL) {
+ GPU_configure = NULL;
+ SysMessage (_("Could not load GPU plugin %s!"), GPUdll); return -1;
+ }
+ drv = hGPUDriver;
+ LoadGpuSym1(init, "GPUinit");
+ LoadGpuSym1(shutdown, "GPUshutdown");
+ LoadGpuSym1(open, "GPUopen");
+ LoadGpuSym1(close, "GPUclose");
+ LoadGpuSym1(readData, "GPUreadData");
+ LoadGpuSym1(readDataMem, "GPUreadDataMem");
+ LoadGpuSym1(readStatus, "GPUreadStatus");
+ LoadGpuSym1(writeData, "GPUwriteData");
+ LoadGpuSym1(writeDataMem, "GPUwriteDataMem");
+ LoadGpuSym1(writeStatus, "GPUwriteStatus");
+ LoadGpuSym1(dmaChain, "GPUdmaChain");
+ LoadGpuSym1(updateLace, "GPUupdateLace");
+ LoadGpuSym0(keypressed, "GPUkeypressed");
+ LoadGpuSym0(displayText, "GPUdisplayText");
+ LoadGpuSym0(makeSnapshot, "GPUmakeSnapshot");
+ LoadGpuSym1(freeze, "GPUfreeze");
+ LoadGpuSym0(getScreenPic, "GPUgetScreenPic");
+ LoadGpuSym0(showScreenPic, "GPUshowScreenPic");
+ LoadGpuSym0(vBlank, "GPUvBlank");
+ LoadGpuSym0(getScreenInfo, "GPUgetScreenInfo");
+ LoadGpuSym0(configure, "GPUconfigure");
+ LoadGpuSym0(test, "GPUtest");
+ LoadGpuSym0(about, "GPUabout");
+
+ return 0;
+}
+
+void *hCDRDriver = NULL;
+
+long CALLBACK CDR__play(unsigned char *sector) { return 0; }
+long CALLBACK CDR__stop(void) { return 0; }
+
+long CALLBACK CDR__getStatus(struct CdrStat *stat) {
+ if (cdOpenCaseTime < 0 || cdOpenCaseTime > (s64)time(NULL))
+ stat->Status = 0x10;
+ else
+ stat->Status = 0;
+
+ return 0;
+}
+
+char* CALLBACK CDR__getDriveLetter(void) { return NULL; }
+long CALLBACK CDR__configure(void) { return 0; }
+long CALLBACK CDR__test(void) { return 0; }
+void CALLBACK CDR__about(void) {}
+long CALLBACK CDR__setfilename(char*filename) { return 0; }
+
+#define LoadCdrSym1(dest, name) \
+ LoadSym(CDR_##dest, CDR##dest, name, TRUE);
+
+#define LoadCdrSym0(dest, name) \
+ LoadSym(CDR_##dest, CDR##dest, name, FALSE); \
+ if (CDR_##dest == NULL) CDR_##dest = (CDR##dest) CDR__##dest;
+
+#define LoadCdrSymN(dest, name) \
+ LoadSym(CDR_##dest, CDR##dest, name, FALSE);
+
+static int LoadCDRplugin(const char *CDRdll) {
+ void *drv;
+
+ if (CDRdll == NULL) {
+ cdrIsoInit();
+ return 0;
+ }
+
+ hCDRDriver = SysLoadLibrary(CDRdll);
+ if (hCDRDriver == NULL) {
+ CDR_configure = NULL;
+ SysMessage (_("Could not load CD-ROM plugin %s!"), CDRdll); return -1;
+ }
+ drv = hCDRDriver;
+ LoadCdrSym1(init, "CDRinit");
+ LoadCdrSym1(shutdown, "CDRshutdown");
+ LoadCdrSym1(open, "CDRopen");
+ LoadCdrSym1(close, "CDRclose");
+ LoadCdrSym1(getTN, "CDRgetTN");
+ LoadCdrSym1(getTD, "CDRgetTD");
+ LoadCdrSym1(readTrack, "CDRreadTrack");
+ LoadCdrSym1(getBuffer, "CDRgetBuffer");
+ LoadCdrSym1(getBufferSub, "CDRgetBufferSub");
+ LoadCdrSym0(play, "CDRplay");
+ LoadCdrSym0(stop, "CDRstop");
+ LoadCdrSym0(getStatus, "CDRgetStatus");
+ LoadCdrSym0(getDriveLetter, "CDRgetDriveLetter");
+ LoadCdrSym0(configure, "CDRconfigure");
+ LoadCdrSym0(test, "CDRtest");
+ LoadCdrSym0(about, "CDRabout");
+ LoadCdrSym0(setfilename, "CDRsetfilename");
+ LoadCdrSymN(readCDDA, "CDRreadCDDA");
+ LoadCdrSymN(getTE, "CDRgetTE");
+
+ return 0;
+}
+
+static void *hSPUDriver = NULL;\r
+static void CALLBACK SPU__registerScheduleCb(void (CALLBACK *cb)(unsigned int)) {}\r
+
+#define LoadSpuSym1(dest, name) \
+ LoadSym(SPU_##dest, SPU##dest, name, TRUE);
+
+#define LoadSpuSym0(dest, name) \
+ LoadSym(SPU_##dest, SPU##dest, name, FALSE); \
+ if (SPU_##dest == NULL) SPU_##dest = (SPU##dest) SPU__##dest;
+
+#define LoadSpuSymN(dest, name) \
+ LoadSym(SPU_##dest, SPU##dest, name, FALSE);
+
+static int LoadSPUplugin(const char *SPUdll) {
+ void *drv;
+
+ hSPUDriver = SysLoadLibrary(SPUdll);
+ if (hSPUDriver == NULL) {
+ SysMessage (_("Could not load SPU plugin %s!"), SPUdll); return -1;
+ }
+ drv = hSPUDriver;
+ LoadSpuSym1(init, "SPUinit");
+ LoadSpuSym1(shutdown, "SPUshutdown");
+ LoadSpuSym1(open, "SPUopen");
+ LoadSpuSym1(close, "SPUclose");
+ LoadSpuSym1(writeRegister, "SPUwriteRegister");
+ LoadSpuSym1(readRegister, "SPUreadRegister");
+ LoadSpuSym1(writeDMAMem, "SPUwriteDMAMem");
+ LoadSpuSym1(readDMAMem, "SPUreadDMAMem");
+ LoadSpuSym1(playADPCMchannel, "SPUplayADPCMchannel");
+ LoadSpuSym1(freeze, "SPUfreeze");
+ LoadSpuSym1(registerCallback, "SPUregisterCallback");
+ LoadSpuSym0(registerScheduleCb, "SPUregisterScheduleCb");
+ LoadSpuSymN(async, "SPUasync");
+ LoadSpuSymN(playCDDAchannel, "SPUplayCDDAchannel");
+
+ return 0;
+}
+
+extern int in_type[8];
+
+void *hPAD1Driver = NULL;
+void *hPAD2Driver = NULL;
+
+// Pad information, keystate, mode, config mode, vibration
+static PadDataS pads[8];
+
+static int reqPos, respSize;
+
+static unsigned char buf[256];
+
+static unsigned char stdpar[8] = { 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+
+//response for request 44, 45, 46, 47, 4C, 4D
+static const u8 resp45[8] = {0xF3, 0x5A, 0x01, 0x02, 0x00, 0x02, 0x01, 0x00};
+static const u8 resp46_00[8] = {0xF3, 0x5A, 0x00, 0x00, 0x01, 0x02, 0x00, 0x0A};
+static const u8 resp46_01[8] = {0xF3, 0x5A, 0x00, 0x00, 0x01, 0x01, 0x01, 0x14};
+static const u8 resp47[8] = {0xF3, 0x5A, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00};
+static const u8 resp4C_00[8] = {0xF3, 0x5A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00};
+static const u8 resp4C_01[8] = {0xF3, 0x5A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00};