1 /***************************************************************************
4 begin : Sun Oct 28 2001
5 copyright : (C) 2001 by Pete Bernert
6 email : BlackDove@addcom.de
7 ***************************************************************************/
8 /***************************************************************************
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. See also the license.txt file for *
14 * additional informations. *
16 ***************************************************************************/
22 #define INFO_DRAWSTART 1
23 #define INFO_DRAWEND 2
24 #define INFO_DRAWOFF 3
26 #define SHADETEXBIT(x) ((x>>24) & 0x1)
27 #define SEMITRANSBIT(x) ((x>>25) & 0x1)
28 #define PSXRGB(r,g,b) ((g<<10)|(b<<5)|r)
30 #define DATAREGISTERMODES unsigned short
33 #define DR_VRAMTRANSFER 1
36 #define GPUSTATUS_ODDLINES 0x80000000
37 #define GPUSTATUS_DMABITS 0x60000000 // Two bits
38 #define GPUSTATUS_READYFORCOMMANDS 0x10000000
39 #define GPUSTATUS_READYFORVRAM 0x08000000
40 #define GPUSTATUS_IDLE 0x04000000
41 #define GPUSTATUS_DISPLAYDISABLED 0x00800000
42 #define GPUSTATUS_INTERLACED 0x00400000
43 #define GPUSTATUS_RGB24 0x00200000
44 #define GPUSTATUS_PAL 0x00100000
45 #define GPUSTATUS_DOUBLEHEIGHT 0x00080000
46 #define GPUSTATUS_WIDTHBITS 0x00070000 // Three bits
47 #define GPUSTATUS_MASKENABLED 0x00001000
48 #define GPUSTATUS_MASKDRAWN 0x00000800
49 #define GPUSTATUS_DRAWINGALLOWED 0x00000400
50 #define GPUSTATUS_DITHER 0x00000200
52 #define GPUIsBusy (lGPUstatusRet &= ~GPUSTATUS_IDLE)
53 #define GPUIsIdle (lGPUstatusRet |= GPUSTATUS_IDLE)
55 #define GPUIsNotReadyForCommands (lGPUstatusRet &= ~GPUSTATUS_READYFORCOMMANDS)
56 #define GPUIsReadyForCommands (lGPUstatusRet |= GPUSTATUS_READYFORCOMMANDS)
68 /////////////////////////////////////////////////////////////////////////////
72 #define SWAP16(x) ({ uint16_t y=(x); (((y)>>8 & 0xff) | ((y)<<8 & 0xff00)); })
73 #define SWAP32(x) ({ uint32_t y=(x); (((y)>>24 & 0xfful) | ((y)>>8 & 0xff00ul) | ((y)<<8 & 0xff0000ul) | ((y)<<24 & 0xff000000ul)); })
78 #define HOST2LE32(x) SWAP32(x)
79 #define HOST2BE32(x) (x)
80 #define LE2HOST32(x) SWAP32(x)
81 #define BE2HOST32(x) (x)
83 #define HOST2LE16(x) SWAP16(x)
84 #define HOST2BE16(x) (x)
85 #define LE2HOST16(x) SWAP16(x)
86 #define BE2HOST16(x) (x)
90 // little endian config
91 #define HOST2LE32(x) (x)
92 #define HOST2BE32(x) SWAP32(x)
93 #define LE2HOST32(x) (x)
94 #define BE2HOST32(x) SWAP32(x)
96 #define HOST2LE16(x) (x)
97 #define HOST2BE16(x) SWAP16(x)
98 #define LE2HOST16(x) (x)
99 #define BE2HOST16(x) SWAP16(x)
103 #define GETLEs16(X) ((int16_t)GETLE16((uint16_t *)X))
104 #define GETLEs32(X) ((int16_t)GETLE32((uint16_t *)X))
106 #define GETLE16(X) LE2HOST16(*(uint16_t *)X)
107 #define GETLE32(X) LE2HOST32(*(uint32_t *)X)
108 #define GETLE16D(X) ({uint32_t val = GETLE32(X); (val<<16 | val >> 16);})
109 #define PUTLE16(X, Y) do{*((uint16_t *)X)=HOST2LE16((uint16_t)Y);}while(0)
110 #define PUTLE32(X, Y) do{*((uint32_t *)X)=HOST2LE16((uint32_t)Y);}while(0)
112 /////////////////////////////////////////////////////////////////////////////
114 typedef struct VRAMLOADTTAG
122 unsigned short *ImagePtr;
125 /////////////////////////////////////////////////////////////////////////////
127 typedef struct PSXPOINTTAG
133 typedef struct PSXSPOINTTAG
139 typedef struct PSXRECTTAG
147 // linux defines for some windows stuff
151 #define BOOL unsigned short
152 #define LOWORD(l) ((unsigned short)(l))
153 #define HIWORD(l) ((unsigned short)(((uint32_t)(l) >> 16) & 0xFFFF))
154 #define max(a,b) (((a) > (b)) ? (a) : (b))
155 #define min(a,b) (((a) < (b)) ? (a) : (b))
156 #define DWORD uint32_t
158 #define __int64 long long int
161 typedef struct RECTTAG
169 /////////////////////////////////////////////////////////////////////////////
171 typedef struct TWINTAG
176 /////////////////////////////////////////////////////////////////////////////
178 typedef struct PSXDISPLAYTAG
180 PSXPoint_t DisplayModeNew;
181 PSXPoint_t DisplayMode;
182 PSXPoint_t DisplayPosition;
183 PSXPoint_t DisplayEnd;
188 int32_t InterlacedNew;
192 PSXSPoint_t DrawOffset;
198 /////////////////////////////////////////////////////////////////////////////
202 extern int32_t GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;
203 extern int32_t GlobalTextREST,GlobalTextABR,GlobalTextPAGE;
204 extern short ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3;
205 extern long lLowerpart;
206 extern BOOL bCheckMask;
207 extern unsigned short sSetMask;
208 extern unsigned long lSetMask;
212 extern short DrawSemiTrans;
216 extern BOOL bUsingTWin;
218 extern void (*primTableJ[256])(unsigned char *);
219 extern void (*primTableSkip[256])(unsigned char *);
220 extern unsigned short usMirror;
222 extern uint32_t dwCfgFixes;
223 extern uint32_t dwActFixes;
224 extern int iUseFixes;
225 extern int iUseDither;
226 extern BOOL bDoVSyncUpdate;
227 extern int32_t drawX;
228 extern int32_t drawY;
229 extern int32_t drawW;
230 extern int32_t drawH;
237 #define KEY_RESETTEXSTORE 1
238 #define KEY_SHOWFPS 2
239 #define KEY_RESETOPAQUE 4
240 #define KEY_RESETDITHER 8
241 #define KEY_RESETFILTER 16
242 #define KEY_RESETADVBLEND 32
243 #define KEY_BADTEXTURES 128
244 #define KEY_CHECKTHISOUT 256
246 #if !defined(__BIG_ENDIAN__) || defined(__x86_64__) || defined(__i386__)
247 #ifndef __LITTLE_ENDIAN__
248 #define __LITTLE_ENDIAN__
252 #ifdef __LITTLE_ENDIAN__
253 #define RED(x) (x & 0xff)
254 #define BLUE(x) ((x>>16) & 0xff)
255 #define GREEN(x) ((x>>8) & 0xff)
256 #define COLOR(x) (x & 0xffffff)
257 #elif defined __BIG_ENDIAN__
258 #define RED(x) ((x>>24) & 0xff)
259 #define BLUE(x) ((x>>8) & 0xff)
260 #define GREEN(x) ((x>>16) & 0xff)
261 #define COLOR(x) SWAP32(x & 0xffffff)
266 extern VRAMLoad_t VRAMWrite;
267 extern VRAMLoad_t VRAMRead;
268 extern DATAREGISTERMODES DataWriteMode;
269 extern DATAREGISTERMODES DataReadMode;
270 extern short sDispWidths[];
271 extern BOOL bDebugText;
272 extern PSXDisplay_t PSXDisplay;
273 extern PSXDisplay_t PreviousPSXDisplay;
274 extern BOOL bSkipNextFrame;
275 extern long lGPUstatusRet;
276 extern unsigned char * psxVSecure;
277 extern unsigned char * psxVub;
278 extern signed char * psxVsb;
279 extern unsigned short * psxVuw;
280 extern signed short * psxVsw;
281 extern uint32_t * psxVul;
282 extern int32_t * psxVsl;
283 extern unsigned short * psxVuw_eom;
284 extern BOOL bChangeWinMode;
285 extern long lSelectedSlot;
286 extern BOOL bInitCap;
287 extern DWORD dwLaceCnt;
288 extern uint32_t lGPUInfoVals[];
289 extern uint32_t ulStatusControl[];
293 extern int UseFrameLimit;
294 extern int UseFrameSkip;
295 extern float fFrameRate;
296 extern int iFrameLimit;
297 extern float fFrameRateHz;
298 extern float fps_skip;
299 extern float fps_cur;
303 void DoBufferSwap(void);
304 void DoClearScreenBuffer(void);
305 void DoClearFrontBuffer(void);
306 unsigned long ulInitDisplay(void);
307 void CloseDisplay(void);