d32c9e415f21abbaebb34667afff22263a6edb66
[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 *SIO1open)(unsigned long *);\r
35 \r
36 #include "spu.h"\r
37 #include "gpu.h"\r
38 #include "decode_xa.h"\r
39 \r
40 int LoadPlugins();\r
41 void ReleasePlugins();\r
42 int OpenPlugins();\r
43 void ClosePlugins();\r
44 int ReloadCdromPlugin();\r
45 \r
46 typedef unsigned long (CALLBACK* PSEgetLibType)(void);\r
47 typedef unsigned long (CALLBACK* PSEgetLibVersion)(void);\r
48 typedef char *(CALLBACK* PSEgetLibName)(void);\r
49 \r
50 // GPU Functions\r
51 typedef long (CALLBACK* GPUinit)(void);\r
52 typedef long (CALLBACK* GPUshutdown)(void);\r
53 typedef long (CALLBACK* GPUclose)(void);\r
54 typedef void (CALLBACK* GPUwriteStatus)(uint32_t);\r
55 typedef void (CALLBACK* GPUwriteData)(uint32_t);\r
56 typedef void (CALLBACK* GPUwriteDataMem)(uint32_t *, int);\r
57 typedef uint32_t (CALLBACK* GPUreadStatus)(void);\r
58 typedef uint32_t (CALLBACK* GPUreadData)(void);\r
59 typedef void (CALLBACK* GPUreadDataMem)(uint32_t *, int);\r
60 typedef long (CALLBACK* GPUdmaChain)(uint32_t *, uint32_t, uint32_t *, int32_t *);\r
61 typedef void (CALLBACK* GPUupdateLace)(void);\r
62 typedef long (CALLBACK* GPUfreeze)(uint32_t, GPUFreeze_t *);\r
63 typedef void (CALLBACK* GPUvBlank)(int, int);\r
64 typedef void (CALLBACK* GPUgetScreenInfo)(int *, int *);\r
65 \r
66 // GPU function pointers\r
67 extern GPUupdateLace    GPU_updateLace;\r
68 extern GPUinit          GPU_init;\r
69 extern GPUshutdown      GPU_shutdown; \r
70 extern GPUopen          GPU_open;\r
71 extern GPUclose         GPU_close;\r
72 extern GPUreadStatus    GPU_readStatus;\r
73 extern GPUreadData      GPU_readData;\r
74 extern GPUreadDataMem   GPU_readDataMem;\r
75 extern GPUwriteStatus   GPU_writeStatus; \r
76 extern GPUwriteData     GPU_writeData;\r
77 extern GPUwriteDataMem  GPU_writeDataMem;\r
78 extern GPUdmaChain      GPU_dmaChain;\r
79 extern GPUfreeze        GPU_freeze;\r
80 extern GPUvBlank        GPU_vBlank;\r
81 extern GPUgetScreenInfo GPU_getScreenInfo;\r
82 \r
83 // CD-ROM\r
84 struct CdrStat {\r
85         uint32_t Type; // DATA, CDDA\r
86         uint32_t Status; // same as cdr.StatP\r
87         unsigned char Time_[3]; // unused\r
88 };\r
89 \r
90 int CDR__getStatus(struct CdrStat *stat);\r
91 \r
92 // SPU Functions\r
93 typedef long (CALLBACK* SPUinit)(void);                         \r
94 typedef long (CALLBACK* SPUshutdown)(void);     \r
95 typedef long (CALLBACK* SPUclose)(void);                        \r
96 typedef void (CALLBACK* SPUwriteRegister)(unsigned long, unsigned short, unsigned int);\r
97 typedef unsigned short (CALLBACK* SPUreadRegister)(unsigned long, unsigned int);\r
98 typedef void (CALLBACK* SPUwriteDMAMem)(unsigned short *, int, unsigned int);\r
99 typedef void (CALLBACK* SPUreadDMAMem)(unsigned short *, int, unsigned int);\r
100 typedef void (CALLBACK* SPUplayADPCMchannel)(xa_decode_t *, unsigned int, int);\r
101 typedef void (CALLBACK* SPUregisterCallback)(void (CALLBACK *callback)(int));\r
102 typedef void (CALLBACK* SPUregisterScheduleCb)(void (CALLBACK *callback)(unsigned int cycles_after));\r
103 typedef struct {\r
104         unsigned char PluginName[8];\r
105         uint32_t PluginVersion;\r
106         uint32_t Size;\r
107 } SPUFreezeHdr_t;\r
108 typedef struct SPUFreeze {\r
109         unsigned char PluginName[8];\r
110         uint32_t PluginVersion;\r
111         uint32_t Size;\r
112         unsigned char SPUPorts[0x200];\r
113         unsigned char SPURam[0x80000];\r
114         xa_decode_t xa;\r
115         unsigned char *unused;\r
116 } SPUFreeze_t;\r
117 typedef long (CALLBACK* SPUfreeze)(unsigned int, struct SPUFreeze *, unsigned int);\r
118 typedef void (CALLBACK* SPUasync)(unsigned int, unsigned int);\r
119 typedef int  (CALLBACK* SPUplayCDDAchannel)(short *, int, unsigned int, int);\r
120 typedef void (CALLBACK* SPUsetCDvol)(unsigned char, unsigned char, unsigned char, unsigned char, unsigned int);\r
121 \r
122 // SPU function pointers\r
123 extern SPUinit             SPU_init;\r
124 extern SPUshutdown         SPU_shutdown;\r
125 extern SPUopen             SPU_open;\r
126 extern SPUclose            SPU_close;\r
127 extern SPUwriteRegister    SPU_writeRegister;\r
128 extern SPUreadRegister     SPU_readRegister;\r
129 extern SPUwriteDMAMem      SPU_writeDMAMem;\r
130 extern SPUreadDMAMem       SPU_readDMAMem;\r
131 extern SPUplayADPCMchannel SPU_playADPCMchannel;\r
132 extern SPUfreeze           SPU_freeze;\r
133 extern SPUregisterCallback SPU_registerCallback;\r
134 extern SPUregisterScheduleCb SPU_registerScheduleCb;\r
135 extern SPUasync            SPU_async;\r
136 extern SPUplayCDDAchannel  SPU_playCDDAchannel;\r
137 extern SPUsetCDvol         SPU_setCDvol;\r
138 \r
139 // PAD Functions\r
140 long PAD1_readPort(PadDataS *);\r
141 unsigned char PAD1_startPoll(int);\r
142 unsigned char PAD1_poll(unsigned char, int *);\r
143 \r
144 long PAD2_readPort(PadDataS *);\r
145 unsigned char PAD2_startPoll(int);\r
146 unsigned char PAD2_poll(unsigned char, int *);\r
147 \r
148 #ifdef ENABLE_SIO1API\r
149 \r
150 // SIO1 Functions (link cable)\r
151 typedef long (CALLBACK* SIO1init)(void);\r
152 typedef long (CALLBACK* SIO1shutdown)(void);\r
153 typedef long (CALLBACK* SIO1close)(void);\r
154 typedef long (CALLBACK* SIO1configure)(void);\r
155 typedef long (CALLBACK* SIO1test)(void);\r
156 typedef void (CALLBACK* SIO1about)(void);\r
157 typedef void (CALLBACK* SIO1pause)(void);\r
158 typedef void (CALLBACK* SIO1resume)(void);\r
159 typedef long (CALLBACK* SIO1keypressed)(int);\r
160 typedef void (CALLBACK* SIO1writeData8)(unsigned char);\r
161 typedef void (CALLBACK* SIO1writeData16)(unsigned short);\r
162 typedef void (CALLBACK* SIO1writeData32)(unsigned long);\r
163 typedef void (CALLBACK* SIO1writeStat16)(unsigned short);\r
164 typedef void (CALLBACK* SIO1writeStat32)(unsigned long);\r
165 typedef void (CALLBACK* SIO1writeMode16)(unsigned short);\r
166 typedef void (CALLBACK* SIO1writeMode32)(unsigned long);\r
167 typedef void (CALLBACK* SIO1writeCtrl16)(unsigned short);\r
168 typedef void (CALLBACK* SIO1writeCtrl32)(unsigned long);\r
169 typedef void (CALLBACK* SIO1writeBaud16)(unsigned short);\r
170 typedef void (CALLBACK* SIO1writeBaud32)(unsigned long);\r
171 typedef unsigned char (CALLBACK* SIO1readData8)(void);\r
172 typedef unsigned short (CALLBACK* SIO1readData16)(void);\r
173 typedef unsigned long (CALLBACK* SIO1readData32)(void);\r
174 typedef unsigned short (CALLBACK* SIO1readStat16)(void);\r
175 typedef unsigned long (CALLBACK* SIO1readStat32)(void);\r
176 typedef unsigned short (CALLBACK* SIO1readMode16)(void);\r
177 typedef unsigned long (CALLBACK* SIO1readMode32)(void);\r
178 typedef unsigned short (CALLBACK* SIO1readCtrl16)(void);\r
179 typedef unsigned long (CALLBACK* SIO1readCtrl32)(void);\r
180 typedef unsigned short (CALLBACK* SIO1readBaud16)(void);\r
181 typedef unsigned long (CALLBACK* SIO1readBaud32)(void);\r
182 typedef void (CALLBACK* SIO1registerCallback)(void (CALLBACK *callback)(void));\r
183 \r
184 // SIO1 function pointers \r
185 extern SIO1init               SIO1_init;\r
186 extern SIO1shutdown           SIO1_shutdown;\r
187 extern SIO1open               SIO1_open;\r
188 extern SIO1close              SIO1_close; \r
189 extern SIO1test               SIO1_test;\r
190 extern SIO1configure          SIO1_configure;\r
191 extern SIO1about              SIO1_about;\r
192 extern SIO1pause              SIO1_pause;\r
193 extern SIO1resume             SIO1_resume;\r
194 extern SIO1keypressed         SIO1_keypressed;\r
195 extern SIO1writeData8         SIO1_writeData8;\r
196 extern SIO1writeData16        SIO1_writeData16;\r
197 extern SIO1writeData32        SIO1_writeData32;\r
198 extern SIO1writeStat16        SIO1_writeStat16;\r
199 extern SIO1writeStat32        SIO1_writeStat32;\r
200 extern SIO1writeMode16        SIO1_writeMode16;\r
201 extern SIO1writeMode32        SIO1_writeMode32;\r
202 extern SIO1writeCtrl16        SIO1_writeCtrl16;\r
203 extern SIO1writeCtrl32        SIO1_writeCtrl32;\r
204 extern SIO1writeBaud16        SIO1_writeBaud16;\r
205 extern SIO1writeBaud32        SIO1_writeBaud32;\r
206 extern SIO1readData8          SIO1_readData8;\r
207 extern SIO1readData16         SIO1_readData16;\r
208 extern SIO1readData32         SIO1_readData32;\r
209 extern SIO1readStat16         SIO1_readStat16;\r
210 extern SIO1readStat32         SIO1_readStat32;\r
211 extern SIO1readMode16         SIO1_readMode16;\r
212 extern SIO1readMode32         SIO1_readMode32;\r
213 extern SIO1readCtrl16         SIO1_readCtrl16;\r
214 extern SIO1readCtrl32         SIO1_readCtrl32;\r
215 extern SIO1readBaud16         SIO1_readBaud16;\r
216 extern SIO1readBaud32         SIO1_readBaud32;\r
217 extern SIO1registerCallback   SIO1_registerCallback;\r
218 \r
219 #endif\r
220 \r
221 void SetIsoFile(const char *filename);\r
222 const char *GetIsoFile(void);\r
223 boolean UsingIso(void);\r
224 void SetCdOpenCaseTime(s64 time);\r
225 \r
226 int padFreeze(void *f, int Mode);\r
227 int padToggleAnalog(unsigned int index);\r
228 \r
229 extern void pl_gun_byte2(int port, unsigned char byte);\r
230 extern void plat_trigger_vibrate(int pad, int low, int high);\r
231 \r
232 #ifdef __cplusplus\r
233 }\r
234 #endif\r
235 #endif\r