scummvm/backends/platform/ps2/GsDefs.h

230 lines
7.3 KiB
C

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
#ifndef __GSDEFS_H__
#define __GSDEFS_H__
#include "sysdefs.h"
// Gs2dScreen defines:
#define PAL_NTSC_FLAG (*(volatile uint8*)0x1FC7FF52)
#define GS_PMODE *((volatile uint64*)0x12000000)
#define GS_CSR *((volatile uint64*)0x12001000)
#define GS_DISPFB1 *((volatile uint64*)0x12000070)
#define GS_DISPLAY1 *((volatile uint64*)0x12000080)
#define GS_BGCOLOUR *((volatile uint64*)0x120000E0)
enum GS_CSR_FIELDS {
CSR_SIGNAL = 1 << 0,
CSR_FINISH = 1 << 1,
CSR_HSYNC = 1 << 2,
CSR_VSYNC = 1 << 3,
CSR_FLUSH = 1 << 8,
CSR_RESET = 1 << 9
};
#define GS_SET_PMODE(readC1, readC2, alphaSel, alphaOut, alphaBlend, alphaFixed) \
((readC1) | ((readC2) << 1) | ((alphaSel) << 5) | ((alphaOut) << 6) | ((alphaBlend) << 7) | ((alphaFixed) << 8))
#define GS_SET_DISPLAY(width, height, xpos, ypos) \
(((uint64)(height - 1) << 44) | ((uint64)0x9FF << 32) | \
((((2560 + (width - 1)) / width) - 1)<<23) | \
(ypos << 12) | (xpos * (2560 / width)))
#define GS_SET_DISPFB(frameBufPtr, frameBufWidth, psm) \
(((frameBufPtr) / 8192) | (((frameBufWidth) / 64) << 9) | ((psm) << 15))
#define GS_RGBA(r, g, b, a) \
((r) | ((g) << 8) | ((b) << 16) | ((a) << 24))
//DmaPipe defines:
enum GsRegs {
GPR_PRIM = 0x00, // Select and configure current drawing primitive
GPR_RGBAQ, // Setup current vertex color
GPR_ST, // ...
GPR_UV, // Specify Vertex Texture Coordinates
GPR_XYZF2, // Set vertex coordinate
GPR_XYZ2, // Set vertex coordinate and 'kick' drawing
GPR_TEX0_1, // Texture Buffer Setup (Context 1)
GPR_TEX0_2, // Texture Buffer Setup (Context 2)
GPR_CLAMP_1, // ...
GPR_CLAMP_2, // ...
GPR_FOG, // ...
GPR_XYZF3 = 0x0C, // ...
GPR_XYZ3, // ...
GPR_TEX1_1 = 0x14, // ...
GPR_TEX1_2, // ...
GPR_TEX2_1, // ...
GPR_TEX2_2, // ...
GPR_XYOFFSET_1, // Mapping from Primitive to Window coordinate system (Context 1)
GPR_XYOFFSET_2, // Mapping from Primitive to Window coordinate system (Context 2)
GPR_PRMODECONT, // ...
GPR_PRMODE, // ...
GPR_TEXCLUT, // ...
GPR_SCANMSK = 0x22, // ...
GPR_MIPTBP1_1 = 0x34, // ...
GPR_MIPTBP1_2, // ...
GPR_MIPTBP2_1, // ...
GPR_MIPTBP2_2, // ...
GPR_TEXA = 0x3b, // ...
GPR_FOGCOL = 0x3d, // ...
GPR_TEXFLUSH = 0x3f,// Write to this register before using newly loaded texture
GPR_SCISSOR_1, // Setup clipping rectangle (Context 1)
GPR_SCISSOR_2, // Setup clipping rectangle (Context 2)
GPR_ALPHA_1, // Setup Alpha Blending Parameters (Context 1)
GPR_ALPHA_2, // Setup Alpha Blending Parameters (Context 2)
GPR_DIMX, // ...
GPR_DTHE, // ...
GPR_COLCLAMP, // ...
GPR_TEST_1, // ...
GPR_TEST_2, // ...
GPR_PABE, // ...
GPR_FBA_1, // ...
GPR_FBA_2, // ...
GPR_FRAME_1, // Frame buffer settings (Context 1)
GPR_FRAME_2, // Frame buffer settings (Context 2)
GPR_ZBUF_1, // ...
GPR_ZBUF_2, // ...
GPR_BITBLTBUF, // Setup Image Transfer Between EE and GS
GPR_TRXPOS, // Setup Image Transfer Coordinates
GPR_TRXREG, // Setup Image Transfer Size
GPR_TRXDIR, // Set Image Transfer Directon + Start Transfer
GPR_HWREG,
GPR_SIGNAL = 0x60,
GPR_FINISH,
GPR_LABEL
};
enum PrimTypes {
PR_POINT = 0,
PR_LINE,
PR_LINESTRIP,
PR_TRIANGLE,
PR_TRIANGLESTRIP,
PR_TRIANGLEFAN,
PR_SPRITE
};
#define GS_PSMCT32 0x00
#define GS_PSMCT24 0x01
#define GS_PSMCT16 0x02
#define GS_PSMCT16S 0x0A
#define GS_PSMT8 0x13
#define GS_PSMT4 0x14
#define GS_PSMT4HL 0x24
#define GS_PSMT4HH 0x2C
#define GS_PSMT8H 0x1B
/*#define GS_SET_BITBLTBUF(sbp, sbw, spsm, dbp, dbw, dpsm) \
((uint64)(sbp) | ((uint64)(sbw) << 16) | \
((uint64)(spsm) << 24) | ((uint64)(dbp) << 32) | \
((uint64)(dbw) << 48) | ((uint64)(dpsm) << 56))*/
#define GS_SET_SRC_BLTBUF(sbp, sbw, spsm) \
((sbp) | ((uint64)sbw << 16) | ((uint64)spsm << 24))
#define GS_SET_DEST_BLTBUF(dbp, dbw, dpsm) \
(((uint64)(dbp) << 32) | ((uint64)(dbw) << 48) | ((uint64)(dpsm) << 56))
#define GS_SET_SRC_TRXPOS(ssax, ssay) \
((ssax) | ((uint64)ssay << 16))
#define GS_SET_DEST_TRXPOS(dsax, dsay) \
(((uint64)(dsax) << 32) | ((uint64)(dsay) << 48))
#define GS_SET_TRXREG(rrw, rrh) \
((uint64)(rrw) | ((uint64)(rrh) << 32))
#define GS_SET_TEXA(ta0, aem, ta1) \
((uint64)(ta0) | ((uint64)(aem) << 15) | ((uint64)(ta1) << 32))
#define GS_SET_TEX0(tbp, tbw, psm, tw, th, tcc, tfx, cbp, cpsm, csm, csa, cld) \
((uint64)(tbp) | ((uint64)(tbw) << 14) | ((uint64)(psm) << 20) | ((uint64)(tw) << 26) | \
((uint64)(th) << 30) | ((uint64)(tcc) << 34) | ((uint64)(tfx) << 35) | ((uint64)(cbp) << 37) | \
((uint64)(cpsm) << 51) | ((uint64)(csm) << 55) | ((uint64)(csa) << 56) | ((uint64)(cld) << 61))
#define GIF_SET_TAG(nloop, eop, pre, prim, flg, nreg) \
( (uint64)(nloop) | ((uint64)(eop)<<15) | ((uint64)(pre) << 46) | \
((uint64)(prim)<<47) | ((uint64)(flg)<<58) | ((uint64)(nreg)<<60) )
#define GS_SET_UV(u, v) ((uint64)(u) | ((uint64)(v) << 16))
#define GS_SET_XYZ(x, y, z) \
((uint64)(x) | ((uint64)(y) << 16) | ((uint64)(z) << 32))
#define GS_SET_XYOFFSET(ofx, ofy) ((uint64)(ofx) | ((uint64)(ofy) << 32))
#define GS_SET_SCISSOR(scax0, scax1, scay0, scay1) \
( (uint64)(scax0) | ((uint64)(scax1) << 16) | ((uint64)(scay0) << 32) | ((uint64)(scay1) << 48) )
#define GS_SET_FRAME(fbp, fbw, psm, fbmask) \
( (uint64)(fbp) | (uint64)((uint64)(fbw) << 16) | (uint64)((uint64)(psm) << 24) | (uint64)((uint64)(fbmask) << 32) )
#define GS_SET_TEST(ate, atst, aref, afail, date, datm, zte, ztst) \
( (uint64)(ate) | ((uint64)(atst) << 1) | ((uint64)(aref) << 4) | ((uint64)(afail) << 12) | \
((uint64)(date) << 14) | ((uint64)(datm) << 15) | ((uint64)(zte) << 16) | ((uint64)(ztst) << 17) )
#define FILTER_NEAREST 0
#define FILTER_LINEAR 1
#define GS_SET_TEX1(lcm, mxl, mmag, mmin, mtba, l, k) \
((uint64)(lcm) | ((uint64)(mxl) << 2) | ((uint64)(mmag) << 5) | ((uint64)(mmin) << 6) | \
((uint64)(mtba) << 9) | ((uint64)(l) << 19) | ((uint64)(k) << 32))
enum AlphaBlendColor {
SOURCE_COLOR = 0,
DEST_COLOR,
ZERO_COLOR
};
enum AlphaBlendAlpha {
SOURCE_ALPHA = 0,
DEST_ALPHA,
FIXED_ALPHA
};
#define GS_SET_ALPHA(a, b, c, d, fix) \
((uint64)(a) | ((uint64)(b)<<2) | ((uint64)(c)<<4) | ((uint64)(d)<<6) | ((uint64)(fix)<<32))
#define GS_SET_PRIM(prim, iip, tme, fge, abe, aa1, fst, ctxt, fix) \
((uint64)(prim) | ((uint64)(iip) << 3) | ((uint64)(tme) << 4) | \
((uint64)(fge) << 5) | ((uint64)(abe) << 6) | ((uint64)(aa1) << 7) | \
((uint64)(fst) << 8) | ((uint64)(ctxt) << 9) | ((uint64)(fix) << 10))
#define GS_SET_COLQ(c) (0x3f80000000000000 | c)
#endif // __GSDEFS_H__