cdrom: change pause timing again
[pcsx_rearmed.git] / plugins / dfxvideo / gpu.h
index e8730f2..224bc65 100644 (file)
  *                                                                         *
  ***************************************************************************/
 
-#ifndef _GPU_INTERNALS_H
-#define _GPU_INTERNALS_H
+#ifndef _PSX_GPU_
+#define _PSX_GPU_
+
+#define INFO_TW        0
+#define INFO_DRAWSTART 1
+#define INFO_DRAWEND   2
+#define INFO_DRAWOFF   3
+
+#define SHADETEXBIT(x) ((x>>24) & 0x1)
+#define SEMITRANSBIT(x) ((x>>25) & 0x1)
+#define PSXRGB(r,g,b) ((g<<10)|(b<<5)|r)
+
+#define DATAREGISTERMODES unsigned short
+
+#define DR_NORMAL        0
+#define DR_VRAMTRANSFER  1
+
+
+#define GPUSTATUS_ODDLINES            0x80000000
+#define GPUSTATUS_DMABITS             0x60000000 // Two bits
+#define GPUSTATUS_READYFORCOMMANDS    0x10000000
+#define GPUSTATUS_READYFORVRAM        0x08000000
+#define GPUSTATUS_IDLE                0x04000000
+#define GPUSTATUS_DISPLAYDISABLED     0x00800000
+#define GPUSTATUS_INTERLACED          0x00400000
+#define GPUSTATUS_RGB24               0x00200000
+#define GPUSTATUS_PAL                 0x00100000
+#define GPUSTATUS_DOUBLEHEIGHT        0x00080000
+#define GPUSTATUS_WIDTHBITS           0x00070000 // Three bits
+#define GPUSTATUS_MASKENABLED         0x00001000
+#define GPUSTATUS_MASKDRAWN           0x00000800
+#define GPUSTATUS_DRAWINGALLOWED      0x00000400
+#define GPUSTATUS_DITHER              0x00000200
+
+#define GPUIsBusy (lGPUstatusRet &= ~GPUSTATUS_IDLE)
+#define GPUIsIdle (lGPUstatusRet |= GPUSTATUS_IDLE)
+
+#define GPUIsNotReadyForCommands (lGPUstatusRet &= ~GPUSTATUS_READYFORCOMMANDS)
+#define GPUIsReadyForCommands (lGPUstatusRet |= GPUSTATUS_READYFORCOMMANDS)
+
+#define CALLBACK
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/time.h>
+#include <math.h>
+#include <stdint.h>
+#include <unistd.h>
+#include "../../include/arm_features.h"
+
+/////////////////////////////////////////////////////////////////////////////
+
+// byteswappings
+
+#define SWAP16(x) __builtin_bswap16(x)
+#define SWAP32(x) __builtin_bswap32(x)
+
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+
+// big endian config
+#define HOST2LE32(x) SWAP32(x)
+#define HOST2BE32(x) (x)
+#define LE2HOST32(x) SWAP32(x)
+#define BE2HOST32(x) (x)
+
+#define HOST2LE16(x) SWAP16(x)
+#define HOST2BE16(x) (x)
+#define LE2HOST16(x) SWAP16(x)
+#define BE2HOST16(x) (x)
+
+#else
+
+// little endian config
+#define HOST2LE32(x) (x)
+#define HOST2BE32(x) SWAP32(x)
+#define LE2HOST32(x) (x)
+#define BE2HOST32(x) SWAP32(x)
+
+#define HOST2LE16(x) (x)
+#define HOST2BE16(x) SWAP16(x)
+#define LE2HOST16(x) (x)
+#define BE2HOST16(x) SWAP16(x)
+
+#endif
+
+#define GETLEs16(X) ((int16_t)GETLE16((uint16_t *)(X)))
+
+#define GETLE16(X) LE2HOST16(*(uint16_t *)(X))
+#define GETLE32_(X) LE2HOST32(*(uint32_t *)(X))
+#define PUTLE16(X, Y) do{*((uint16_t *)(X))=HOST2LE16((uint16_t)(Y));}while(0)
+#define PUTLE32_(X, Y) do{*((uint32_t *)(X))=HOST2LE32((uint32_t)(Y));}while(0)
+#if defined(__arm__) && !defined(HAVE_ARMV6)
+// for (very) old ARMs with no unaligned loads?
+#define GETLE32(X) (*(uint16_t *)(X)|((uint32_t)((uint16_t *)(X))[1]<<16))
+#define PUTLE32(X, Y) do{uint16_t *p_=(uint16_t *)(X);uint32_t y_=Y;p_[0]=y_;p_[1]=y_>>16;}while(0)
+#else
+#define GETLE32 GETLE32_
+#define PUTLE32 PUTLE32_
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+
+typedef struct VRAMLOADTTAG
+{
+ short x;
+ short y;
+ short Width;
+ short Height;
+ short RowsRemaining;
+ short ColsRemaining;
+ unsigned short *ImagePtr;
+} VRAMLoad_t;
+
+/////////////////////////////////////////////////////////////////////////////
+
+typedef struct PSXPOINTTAG
+{
+ int32_t x;
+ int32_t y;
+} PSXPoint_t;
+
+typedef struct PSXSPOINTTAG
+{
+ short x;
+ short y;
+} PSXSPoint_t;
+
+typedef struct PSXRECTTAG
+{
+ short x0;
+ short x1;
+ short y0;
+ short y1;
+} PSXRect_t;
+
+// linux defines for some windows stuff
+
+#define FALSE 0
+#define TRUE 1
+#define BOOL unsigned short
+#define LOWORD(l)           ((unsigned short)(l))
+#define HIWORD(l)           ((unsigned short)(((uint32_t)(l) >> 16) & 0xFFFF))
+#define max(a,b)            (((a) > (b)) ? (a) : (b))
+#define min(a,b)            (((a) < (b)) ? (a) : (b))
+#define DWORD uint32_t
+#ifndef __int64
+#define __int64 long long int 
+#endif
+
+typedef struct RECTTAG
+{
+ int left;
+ int top;
+ int right;
+ int bottom;
+}RECT;
+
+/////////////////////////////////////////////////////////////////////////////
+
+typedef struct TWINTAG
+{
+ PSXRect_t  Position;
+ int xmask, ymask;
+} TWin_t;
+
+/////////////////////////////////////////////////////////////////////////////
+
+typedef struct PSXDISPLAYTAG
+{
+ PSXPoint_t  DisplayModeNew;
+ PSXPoint_t  DisplayMode;
+ PSXPoint_t  DisplayPosition;
+ PSXPoint_t  DisplayEnd;
+ int32_t        Double;
+ int32_t        Height;
+ int32_t        PAL;
+ int32_t        InterlacedNew;
+ int32_t        Interlaced;
+ int32_t        RGB24New;
+ int32_t        RGB24;
+ PSXSPoint_t DrawOffset;
+ int32_t        Disabled;
+ PSXRect_t   Range;
+
+} PSXDisplay_t;
+
+/////////////////////////////////////////////////////////////////////////////
+
+// draw.c
+
+extern int32_t           GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;
+extern int32_t           GlobalTextABR,GlobalTextPAGE;
+extern short          ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3;
+extern long           lLowerpart;
+extern BOOL           bCheckMask;
+extern unsigned short sSetMask;
+extern unsigned long  lSetMask;
+extern short          g_m1;
+extern short          g_m2;
+extern short          g_m3;
+extern short          DrawSemiTrans;
+
+// prim.c
+
+extern BOOL           bUsingTWin;
+extern TWin_t         TWin;
+extern void (*primTableJ[256])(unsigned char *);
+extern void (*primTableSkip[256])(unsigned char *);
+extern unsigned short  usMirror;
+extern int            iDither;
+extern uint32_t  dwCfgFixes;
+extern uint32_t  dwActFixes;
+extern int            iUseFixes;
+extern int            iUseDither;
+extern BOOL           bDoVSyncUpdate;
+extern int32_t           drawX;
+extern int32_t           drawY;
+extern int32_t           drawW;
+extern int32_t           drawH;
+
+// gpu.h
 
 #define OPAQUEON   10
 #define OPAQUEOFF  11
 #define KEY_RESETDITHER   8
 #define KEY_RESETFILTER   16
 #define KEY_RESETADVBLEND 32
-//#define KEY_BLACKWHITE    64
 #define KEY_BADTEXTURES   128
 #define KEY_CHECKTHISOUT  256
 
-#if !defined(__BIG_ENDIAN__) || defined(__x86_64__) || defined(__i386__)
-#ifndef __LITTLE_ENDIAN__
-#define __LITTLE_ENDIAN__
-#endif
-#endif
-
-#ifdef __LITTLE_ENDIAN__
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
 #define RED(x) (x & 0xff)
 #define BLUE(x) ((x>>16) & 0xff)
 #define GREEN(x) ((x>>8) & 0xff)
 #define COLOR(x) (x & 0xffffff)
-#elif defined __BIG_ENDIAN__
+#else
 #define RED(x) ((x>>24) & 0xff)
 #define BLUE(x) ((x>>8) & 0xff)
 #define GREEN(x) ((x>>16) & 0xff)
 #define COLOR(x) SWAP32(x & 0xffffff)
 #endif
 
-/////////////////////////////////////////////////////////////////////////////
+// gpu.c
 
-void           updateDisplay(void);
-void           SetAutoFrameCap(void);
-void           SetFixes(void);
+extern VRAMLoad_t     VRAMWrite;
+extern VRAMLoad_t     VRAMRead;
+extern DATAREGISTERMODES DataWriteMode;
+extern DATAREGISTERMODES DataReadMode;
+extern short          sDispWidths[];
+extern BOOL           bDebugText;
+extern PSXDisplay_t   PSXDisplay;
+extern PSXDisplay_t   PreviousPSXDisplay;
+extern BOOL           bSkipNextFrame;
+extern long           lGPUstatusRet;
+extern unsigned char  * psxVSecure;
+extern unsigned char  * psxVub;
+extern unsigned short * psxVuw;
+extern unsigned short * psxVuw_eom;
+extern BOOL           bChangeWinMode;
+extern long           lSelectedSlot;
+extern BOOL           bInitCap;
+extern DWORD          dwLaceCnt;
+extern uint32_t  lGPUInfoVals[];
+extern uint32_t  ulStatusControl[];
 
-/////////////////////////////////////////////////////////////////////////////
+// fps.c
+
+extern int            UseFrameLimit;
+extern int            UseFrameSkip;
+extern float          fFrameRate;
+extern int            iFrameLimit;
+extern float          fFrameRateHz;
+extern float          fps_skip;
+extern float          fps_cur;
+
+// draw.c
 
-#endif // _GPU_INTERNALS_H
+void          DoBufferSwap(void);
+void          DoClearScreenBuffer(void);
+void          DoClearFrontBuffer(void);
+unsigned long ulInitDisplay(void);
+void          CloseDisplay(void);
+
+struct rearmed_cbs;
+extern const struct rearmed_cbs *rcbs;
+
+#endif