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