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