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