/*************************************************************************** gpu.h - description ------------------- begin : Sun Oct 28 2001 copyright : (C) 2001 by Pete Bernert email : BlackDove@addcom.de ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. See also the license.txt file for * * additional informations. * * * ***************************************************************************/ #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 #include #include #include #include #include #include ///////////////////////////////////////////////////////////////////////////// // byteswappings #define SWAP16(x) ({ uint16_t y=(x); (((y)>>8 & 0xff) | ((y)<<8 & 0xff00)); }) #define SWAP32(x) ({ uint32_t y=(x); (((y)>>24 & 0xfful) | ((y)>>8 & 0xff00ul) | ((y)<<8 & 0xff0000ul) | ((y)<<24 & 0xff000000ul)); }) #ifdef __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 GETLEs32(X) ((int16_t)GETLE32((uint16_t *)X)) #define GETLE16(X) LE2HOST16(*(uint16_t *)X) #define GETLE32_(X) LE2HOST32(*(uint32_t *)X) #define GETLE16D(X) ({uint32_t val = GETLE32(X); (val<<16 | val >> 16);}) #define PUTLE16(X, Y) do{*((uint16_t *)X)=HOST2LE16((uint16_t)Y);}while(0) #define PUTLE32_(X, Y) do{*((uint32_t *)X)=HOST2LE16((uint32_t)Y);}while(0) #ifdef __arm__ #define GETLE32(X) (*(uint16_t *)(X)|(((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_RESETTEXSTORE 1 #define KEY_SHOWFPS 2 #define KEY_RESETOPAQUE 4 #define KEY_RESETDITHER 8 #define KEY_RESETFILTER 16 #define KEY_RESETADVBLEND 32 #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__ #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__ #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 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 signed char * psxVsb; extern unsigned short * psxVuw; extern signed short * psxVsw; extern uint32_t * psxVul; extern int32_t * psxVsl; 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 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