1 /*************************************************************************** 2 * Copyright (C) 2007 Ryan Schultz, PCSX-df Team, PCSX team * 3 * * 4 * This program is free software; you can redistribute it and/or modify * 5 * it under the terms of the GNU General Public License as published by * 6 * the Free Software Foundation; either version 2 of the License, or * 7 * (at your option) any later version. * 8 * * 9 * This program is distributed in the hope that it will be useful, * 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 12 * GNU General Public License for more details. * 13 * * 14 * You should have received a copy of the GNU General Public License * 15 * along with this program; if not, write to the * 16 * Free Software Foundation, Inc., * 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307 USA. * 18 ***************************************************************************/ 19 20 #ifndef __PLUGINS_H__ 21 #define __PLUGINS_H__ 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 #include "psxcommon.h" 28 29 //#define ENABLE_SIO1API 1 30 31 #ifndef _WIN32 32 33 typedef void* HWND; 34 #define CALLBACK 35 36 #else 37 38 #define WIN32_LEAN_AND_MEAN 39 #include <windows.h> 40 41 #endif 42 43 typedef long (CALLBACK *GPUopen)(unsigned long *, char *, char *); 44 typedef long (CALLBACK *SPUopen)(void); 45 typedef long (CALLBACK *PADopen)(unsigned long *); 46 typedef long (CALLBACK *NETopen)(unsigned long *); 47 typedef long (CALLBACK *SIO1open)(unsigned long *); 48 49 #include "spu.h" 50 51 #include "psemu_plugin_defs.h" 52 #include "decode_xa.h" 53 54 int LoadPlugins(); 55 void ReleasePlugins(); 56 int OpenPlugins(); 57 void ClosePlugins(); 58 int ReloadCdromPlugin(); 59 60 typedef unsigned long (CALLBACK* PSEgetLibType)(void); 61 typedef unsigned long (CALLBACK* PSEgetLibVersion)(void); 62 typedef char *(CALLBACK* PSEgetLibName)(void); 63 64 // GPU Functions 65 typedef long (CALLBACK* GPUinit)(void); 66 typedef long (CALLBACK* GPUshutdown)(void); 67 typedef long (CALLBACK* GPUclose)(void); 68 typedef void (CALLBACK* GPUwriteStatus)(uint32_t); 69 typedef void (CALLBACK* GPUwriteData)(uint32_t); 70 typedef void (CALLBACK* GPUwriteDataMem)(uint32_t *, int); 71 typedef uint32_t (CALLBACK* GPUreadStatus)(void); 72 typedef uint32_t (CALLBACK* GPUreadData)(void); 73 typedef void (CALLBACK* GPUreadDataMem)(uint32_t *, int); 74 typedef long (CALLBACK* GPUdmaChain)(uint32_t *,uint32_t); 75 typedef void (CALLBACK* GPUupdateLace)(void); 76 typedef long (CALLBACK* GPUconfigure)(void); 77 typedef long (CALLBACK* GPUtest)(void); 78 typedef void (CALLBACK* GPUabout)(void); 79 typedef void (CALLBACK* GPUmakeSnapshot)(void); 80 typedef void (CALLBACK* GPUkeypressed)(int); 81 typedef void (CALLBACK* GPUdisplayText)(char *); 82 typedef struct { 83 uint32_t ulFreezeVersion; 84 uint32_t ulStatus; 85 uint32_t ulControl[256]; 86 unsigned char psxVRam[1024*512*2]; 87 } GPUFreeze_t; 88 typedef long (CALLBACK* GPUfreeze)(uint32_t, GPUFreeze_t *); 89 typedef long (CALLBACK* GPUgetScreenPic)(unsigned char *); 90 typedef long (CALLBACK* GPUshowScreenPic)(unsigned char *); 91 typedef void (CALLBACK* GPUclearDynarec)(void (CALLBACK *callback)(void)); 92 typedef void (CALLBACK* GPUvBlank)(int, int); 93 94 // GPU function pointers 95 extern GPUupdateLace GPU_updateLace; 96 extern GPUinit GPU_init; 97 extern GPUshutdown GPU_shutdown; 98 extern GPUconfigure GPU_configure; 99 extern GPUtest GPU_test; 100 extern GPUabout GPU_about; 101 extern GPUopen GPU_open; 102 extern GPUclose GPU_close; 103 extern GPUreadStatus GPU_readStatus; 104 extern GPUreadData GPU_readData; 105 extern GPUreadDataMem GPU_readDataMem; 106 extern GPUwriteStatus GPU_writeStatus; 107 extern GPUwriteData GPU_writeData; 108 extern GPUwriteDataMem GPU_writeDataMem; 109 extern GPUdmaChain GPU_dmaChain; 110 extern GPUkeypressed GPU_keypressed; 111 extern GPUdisplayText GPU_displayText; 112 extern GPUmakeSnapshot GPU_makeSnapshot; 113 extern GPUfreeze GPU_freeze; 114 extern GPUgetScreenPic GPU_getScreenPic; 115 extern GPUshowScreenPic GPU_showScreenPic; 116 extern GPUclearDynarec GPU_clearDynarec; 117 extern GPUvBlank GPU_vBlank; 118 119 // CD-ROM Functions 120 typedef long (CALLBACK* CDRinit)(void); 121 typedef long (CALLBACK* CDRshutdown)(void); 122 typedef long (CALLBACK* CDRopen)(void); 123 typedef long (CALLBACK* CDRclose)(void); 124 typedef long (CALLBACK* CDRgetTN)(unsigned char *); 125 typedef long (CALLBACK* CDRgetTD)(unsigned char, unsigned char *); 126 typedef long (CALLBACK* CDRreadTrack)(unsigned char *); 127 typedef unsigned char* (CALLBACK* CDRgetBuffer)(void); 128 typedef unsigned char* (CALLBACK* CDRgetBufferSub)(void); 129 typedef long (CALLBACK* CDRconfigure)(void); 130 typedef long (CALLBACK* CDRtest)(void); 131 typedef void (CALLBACK* CDRabout)(void); 132 typedef long (CALLBACK* CDRplay)(unsigned char *); 133 typedef long (CALLBACK* CDRstop)(void); 134 typedef long (CALLBACK* CDRsetfilename)(char *); 135 struct CdrStat { 136 uint32_t Type; 137 uint32_t Status; 138 unsigned char Time[3]; 139 }; 140 typedef long (CALLBACK* CDRgetStatus)(struct CdrStat *); 141 typedef char* (CALLBACK* CDRgetDriveLetter)(void); 142 struct SubQ { 143 char res0[12]; 144 unsigned char ControlAndADR; 145 unsigned char TrackNumber; 146 unsigned char IndexNumber; 147 unsigned char TrackRelativeAddress[3]; 148 unsigned char Filler; 149 unsigned char AbsoluteAddress[3]; 150 unsigned char CRC[2]; 151 char res1[72]; 152 }; 153 typedef long (CALLBACK* CDRreadCDDA)(unsigned char, unsigned char, unsigned char, unsigned char *); 154 typedef long (CALLBACK* CDRgetTE)(unsigned char, unsigned char *, unsigned char *, unsigned char *); 155 156 // CD-ROM function pointers 157 extern CDRinit CDR_init; 158 extern CDRshutdown CDR_shutdown; 159 extern CDRopen CDR_open; 160 extern CDRclose CDR_close; 161 extern CDRtest CDR_test; 162 extern CDRgetTN CDR_getTN; 163 extern CDRgetTD CDR_getTD; 164 extern CDRreadTrack CDR_readTrack; 165 extern CDRgetBuffer CDR_getBuffer; 166 extern CDRgetBufferSub CDR_getBufferSub; 167 extern CDRplay CDR_play; 168 extern CDRstop CDR_stop; 169 extern CDRgetStatus CDR_getStatus; 170 extern CDRgetDriveLetter CDR_getDriveLetter; 171 extern CDRconfigure CDR_configure; 172 extern CDRabout CDR_about; 173 extern CDRsetfilename CDR_setfilename; 174 extern CDRreadCDDA CDR_readCDDA; 175 extern CDRgetTE CDR_getTE; 176 177 // SPU Functions 178 typedef long (CALLBACK* SPUinit)(void); 179 typedef long (CALLBACK* SPUshutdown)(void); 180 typedef long (CALLBACK* SPUclose)(void); 181 typedef void (CALLBACK* SPUplaySample)(unsigned char); 182 typedef void (CALLBACK* SPUwriteRegister)(unsigned long, unsigned short, unsigned int); 183 typedef unsigned short (CALLBACK* SPUreadRegister)(unsigned long); 184 typedef void (CALLBACK* SPUwriteDMA)(unsigned short); 185 typedef unsigned short (CALLBACK* SPUreadDMA)(void); 186 typedef void (CALLBACK* SPUwriteDMAMem)(unsigned short *, int, unsigned int); 187 typedef void (CALLBACK* SPUreadDMAMem)(unsigned short *, int, unsigned int); 188 typedef void (CALLBACK* SPUplayADPCMchannel)(xa_decode_t *); 189 typedef void (CALLBACK* SPUregisterCallback)(void (CALLBACK *callback)(void)); 190 typedef void (CALLBACK* SPUregisterScheduleCb)(void (CALLBACK *callback)(unsigned int cycles_after)); 191 typedef long (CALLBACK* SPUconfigure)(void); 192 typedef long (CALLBACK* SPUtest)(void); 193 typedef void (CALLBACK* SPUabout)(void); 194 typedef struct { 195 unsigned char PluginName[8]; 196 uint32_t PluginVersion; 197 uint32_t Size; 198 unsigned char SPUPorts[0x200]; 199 unsigned char SPURam[0x80000]; 200 xa_decode_t xa; 201 unsigned char *SPUInfo; 202 } SPUFreeze_t; 203 typedef long (CALLBACK* SPUfreeze)(uint32_t, SPUFreeze_t *, uint32_t); 204 typedef void (CALLBACK* SPUasync)(uint32_t, uint32_t); 205 typedef int (CALLBACK* SPUplayCDDAchannel)(short *, int); 206 207 // SPU function pointers 208 extern SPUconfigure SPU_configure; 209 extern SPUabout SPU_about; 210 extern SPUinit SPU_init; 211 extern SPUshutdown SPU_shutdown; 212 extern SPUtest SPU_test; 213 extern SPUopen SPU_open; 214 extern SPUclose SPU_close; 215 extern SPUplaySample SPU_playSample; 216 extern SPUwriteRegister SPU_writeRegister; 217 extern SPUreadRegister SPU_readRegister; 218 extern SPUwriteDMA SPU_writeDMA; 219 extern SPUreadDMA SPU_readDMA; 220 extern SPUwriteDMAMem SPU_writeDMAMem; 221 extern SPUreadDMAMem SPU_readDMAMem; 222 extern SPUplayADPCMchannel SPU_playADPCMchannel; 223 extern SPUfreeze SPU_freeze; 224 extern SPUregisterCallback SPU_registerCallback; 225 extern SPUregisterScheduleCb SPU_registerScheduleCb; 226 extern SPUasync SPU_async; 227 extern SPUplayCDDAchannel SPU_playCDDAchannel; 228 229 // PAD Functions 230 typedef long (CALLBACK* PADconfigure)(void); 231 typedef void (CALLBACK* PADabout)(void); 232 typedef long (CALLBACK* PADinit)(long); 233 typedef long (CALLBACK* PADshutdown)(void); 234 typedef long (CALLBACK* PADtest)(void); 235 typedef long (CALLBACK* PADclose)(void); 236 typedef long (CALLBACK* PADquery)(void); 237 typedef long (CALLBACK* PADreadPort1)(PadDataS*); 238 typedef long (CALLBACK* PADreadPort2)(PadDataS*); 239 typedef long (CALLBACK* PADkeypressed)(void); 240 typedef unsigned char (CALLBACK* PADstartPoll)(int); 241 typedef unsigned char (CALLBACK* PADpoll)(unsigned char); 242 typedef void (CALLBACK* PADsetSensitive)(int); 243 244 // PAD function pointers 245 extern PADconfigure PAD1_configure; 246 extern PADabout PAD1_about; 247 extern PADinit PAD1_init; 248 extern PADshutdown PAD1_shutdown; 249 extern PADtest PAD1_test; 250 extern PADopen PAD1_open; 251 extern PADclose PAD1_close; 252 extern PADquery PAD1_query; 253 extern PADreadPort1 PAD1_readPort1; 254 extern PADkeypressed PAD1_keypressed; 255 extern PADstartPoll PAD1_startPoll; 256 extern PADpoll PAD1_poll; 257 extern PADsetSensitive PAD1_setSensitive; 258 259 extern PADconfigure PAD2_configure; 260 extern PADabout PAD2_about; 261 extern PADinit PAD2_init; 262 extern PADshutdown PAD2_shutdown; 263 extern PADtest PAD2_test; 264 extern PADopen PAD2_open; 265 extern PADclose PAD2_close; 266 extern PADquery PAD2_query; 267 extern PADreadPort2 PAD2_readPort2; 268 extern PADkeypressed PAD2_keypressed; 269 extern PADstartPoll PAD2_startPoll; 270 extern PADpoll PAD2_poll; 271 extern PADsetSensitive PAD2_setSensitive; 272 273 // NET Functions 274 typedef long (CALLBACK* NETinit)(void); 275 typedef long (CALLBACK* NETshutdown)(void); 276 typedef long (CALLBACK* NETclose)(void); 277 typedef long (CALLBACK* NETconfigure)(void); 278 typedef long (CALLBACK* NETtest)(void); 279 typedef void (CALLBACK* NETabout)(void); 280 typedef void (CALLBACK* NETpause)(void); 281 typedef void (CALLBACK* NETresume)(void); 282 typedef long (CALLBACK* NETqueryPlayer)(void); 283 typedef long (CALLBACK* NETsendData)(void *, int, int); 284 typedef long (CALLBACK* NETrecvData)(void *, int, int); 285 typedef long (CALLBACK* NETsendPadData)(void *, int); 286 typedef long (CALLBACK* NETrecvPadData)(void *, int); 287 288 typedef struct { 289 char EmuName[32]; 290 char CdromID[9]; // ie. 'SCPH12345', no \0 trailing character 291 char CdromLabel[11]; 292 void *psxMem; 293 GPUshowScreenPic GPU_showScreenPic; 294 GPUdisplayText GPU_displayText; 295 PADsetSensitive PAD_setSensitive; 296 char GPUpath[256]; // paths must be absolute 297 char SPUpath[256]; 298 char CDRpath[256]; 299 char MCD1path[256]; 300 char MCD2path[256]; 301 char BIOSpath[256]; // 'HLE' for internal bios 302 char Unused[1024]; 303 } netInfo; 304 305 typedef long (CALLBACK* NETsetInfo)(netInfo *); 306 typedef long (CALLBACK* NETkeypressed)(int); 307 308 // NET function pointers 309 extern NETinit NET_init; 310 extern NETshutdown NET_shutdown; 311 extern NETopen NET_open; 312 extern NETclose NET_close; 313 extern NETtest NET_test; 314 extern NETconfigure NET_configure; 315 extern NETabout NET_about; 316 extern NETpause NET_pause; 317 extern NETresume NET_resume; 318 extern NETqueryPlayer NET_queryPlayer; 319 extern NETsendData NET_sendData; 320 extern NETrecvData NET_recvData; 321 extern NETsendPadData NET_sendPadData; 322 extern NETrecvPadData NET_recvPadData; 323 extern NETsetInfo NET_setInfo; 324 extern NETkeypressed NET_keypressed; 325 326 #ifdef ENABLE_SIO1API 327 328 // SIO1 Functions (link cable) 329 typedef long (CALLBACK* SIO1init)(void); 330 typedef long (CALLBACK* SIO1shutdown)(void); 331 typedef long (CALLBACK* SIO1close)(void); 332 typedef long (CALLBACK* SIO1configure)(void); 333 typedef long (CALLBACK* SIO1test)(void); 334 typedef void (CALLBACK* SIO1about)(void); 335 typedef void (CALLBACK* SIO1pause)(void); 336 typedef void (CALLBACK* SIO1resume)(void); 337 typedef long (CALLBACK* SIO1keypressed)(int); 338 typedef void (CALLBACK* SIO1writeData8)(unsigned char); 339 typedef void (CALLBACK* SIO1writeData16)(unsigned short); 340 typedef void (CALLBACK* SIO1writeData32)(unsigned long); 341 typedef void (CALLBACK* SIO1writeStat16)(unsigned short); 342 typedef void (CALLBACK* SIO1writeStat32)(unsigned long); 343 typedef void (CALLBACK* SIO1writeMode16)(unsigned short); 344 typedef void (CALLBACK* SIO1writeMode32)(unsigned long); 345 typedef void (CALLBACK* SIO1writeCtrl16)(unsigned short); 346 typedef void (CALLBACK* SIO1writeCtrl32)(unsigned long); 347 typedef void (CALLBACK* SIO1writeBaud16)(unsigned short); 348 typedef void (CALLBACK* SIO1writeBaud32)(unsigned long); 349 typedef unsigned char (CALLBACK* SIO1readData8)(void); 350 typedef unsigned short (CALLBACK* SIO1readData16)(void); 351 typedef unsigned long (CALLBACK* SIO1readData32)(void); 352 typedef unsigned short (CALLBACK* SIO1readStat16)(void); 353 typedef unsigned long (CALLBACK* SIO1readStat32)(void); 354 typedef unsigned short (CALLBACK* SIO1readMode16)(void); 355 typedef unsigned long (CALLBACK* SIO1readMode32)(void); 356 typedef unsigned short (CALLBACK* SIO1readCtrl16)(void); 357 typedef unsigned long (CALLBACK* SIO1readCtrl32)(void); 358 typedef unsigned short (CALLBACK* SIO1readBaud16)(void); 359 typedef unsigned long (CALLBACK* SIO1readBaud32)(void); 360 typedef void (CALLBACK* SIO1registerCallback)(void (CALLBACK *callback)(void)); 361 362 // SIO1 function pointers 363 extern SIO1init SIO1_init; 364 extern SIO1shutdown SIO1_shutdown; 365 extern SIO1open SIO1_open; 366 extern SIO1close SIO1_close; 367 extern SIO1test SIO1_test; 368 extern SIO1configure SIO1_configure; 369 extern SIO1about SIO1_about; 370 extern SIO1pause SIO1_pause; 371 extern SIO1resume SIO1_resume; 372 extern SIO1keypressed SIO1_keypressed; 373 extern SIO1writeData8 SIO1_writeData8; 374 extern SIO1writeData16 SIO1_writeData16; 375 extern SIO1writeData32 SIO1_writeData32; 376 extern SIO1writeStat16 SIO1_writeStat16; 377 extern SIO1writeStat32 SIO1_writeStat32; 378 extern SIO1writeMode16 SIO1_writeMode16; 379 extern SIO1writeMode32 SIO1_writeMode32; 380 extern SIO1writeCtrl16 SIO1_writeCtrl16; 381 extern SIO1writeCtrl32 SIO1_writeCtrl32; 382 extern SIO1writeBaud16 SIO1_writeBaud16; 383 extern SIO1writeBaud32 SIO1_writeBaud32; 384 extern SIO1readData8 SIO1_readData8; 385 extern SIO1readData16 SIO1_readData16; 386 extern SIO1readData32 SIO1_readData32; 387 extern SIO1readStat16 SIO1_readStat16; 388 extern SIO1readStat32 SIO1_readStat32; 389 extern SIO1readMode16 SIO1_readMode16; 390 extern SIO1readMode32 SIO1_readMode32; 391 extern SIO1readCtrl16 SIO1_readCtrl16; 392 extern SIO1readCtrl32 SIO1_readCtrl32; 393 extern SIO1readBaud16 SIO1_readBaud16; 394 extern SIO1readBaud32 SIO1_readBaud32; 395 extern SIO1registerCallback SIO1_registerCallback; 396 397 #endif 398 399 void CALLBACK clearDynarec(void); 400 401 void SetIsoFile(const char *filename); 402 const char *GetIsoFile(void); 403 boolean UsingIso(void); 404 void SetCdOpenCaseTime(s64 time); 405 406 #ifdef __cplusplus 407 } 408 #endif 409 #endif 410