summaryrefslogtreecommitdiff
path: root/src/gfx.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gfx.h')
-rw-r--r--src/gfx.h238
1 files changed, 121 insertions, 117 deletions
diff --git a/src/gfx.h b/src/gfx.h
index c9616e8..e9ec04a 100644
--- a/src/gfx.h
+++ b/src/gfx.h
@@ -4,7 +4,7 @@
* (c) Copyright 1996 - 2001 Gary Henderson (gary.henderson@ntlworld.com) and
* Jerremy Koot (jkoot@snes9x.com)
*
- * Super FX C emulator code
+ * Super FX C emulator code
* (c) Copyright 1997 - 1999 Ivar (ivar@snes9x.com) and
* Gary Henderson.
* Super FX assembler emulator code (c) Copyright 1998 zsKnight and _Demo_.
@@ -49,65 +49,68 @@
#define GFX_ZPITCH 320
#define GFX_PPL 320
-typedef struct{
- // Initialize these variables
- uint8 *Screen;
- uint8 *SubScreen;
- uint8 *ZBuffer;
- uint8 *SubZBuffer;
- uint32 Pitch;
-
- // Setup in call to S9xGraphicsInit()
- int Delta;
- uint16 *X2;
- uint16 *ZERO_OR_X2;
- uint16 *ZERO;
- uint8 *S;
- uint8 *DB;
- uint32 *ScreenColors;
- uint32 *ScreenColorsPre;
- uint32 PaletteMask;
- uint32 PaletteShift;
- uint32 DepthDelta;
- uint8 Z1;
- uint8 Z2;
- uint32 FixedColour;
- uint32 StartY;
- uint32 EndY;
- ClipData *pCurrentClip;
- uint32 Mode7Mask;
- uint32 Mode7PriorityMask;
-
- uint8 r212c;
- uint8 r212c_s;
- uint8 r212d;
- uint8 r212d_s;
- uint8 r212e_s;
- uint8 r212f_s;
- uint8 r2130;
- uint8 r2130_s;
- uint8 r2131;
- uint8 r2131_s;
- bool8 Pseudo;
-
- int OBJList [129];
- uint32 Sizes [129];
- int VPositions [129];
-
+typedef struct
+{
+ // Initialize these variables
+ uint8* Screen;
+ uint8* SubScreen;
+ uint8* ZBuffer;
+ uint8* SubZBuffer;
+ uint32 Pitch;
+
+ // Setup in call to S9xGraphicsInit()
+ int Delta;
+ uint16* X2;
+ uint16* ZERO_OR_X2;
+ uint16* ZERO;
+ uint8* S;
+ uint8* DB;
+ uint32* ScreenColors;
+ uint32* ScreenColorsPre;
+ uint32 PaletteMask;
+ uint32 PaletteShift;
+ uint32 DepthDelta;
+ uint8 Z1;
+ uint8 Z2;
+ uint32 FixedColour;
+ uint32 StartY;
+ uint32 EndY;
+ ClipData* pCurrentClip;
+ uint32 Mode7Mask;
+ uint32 Mode7PriorityMask;
+
+ uint8 r212c;
+ uint8 r212c_s;
+ uint8 r212d;
+ uint8 r212d_s;
+ uint8 r212e_s;
+ uint8 r212f_s;
+ uint8 r2130;
+ uint8 r2130_s;
+ uint8 r2131;
+ uint8 r2131_s;
+ bool8 Pseudo;
+
+ int OBJList [129];
+ uint32 Sizes [129];
+ int VPositions [129];
+
#ifdef GFX_MULTI_FORMAT
- uint32 PixelFormat;
- uint32 (*BuildPixel) (uint32 R, uint32 G, uint32 B);
- uint32 (*BuildPixel2) (uint32 R, uint32 G, uint32 B);
- void (*DecomposePixel) (uint32 Pixel, uint32 &R, uint32 &G, uint32 &B);
+ uint32 PixelFormat;
+ uint32(*BuildPixel)(uint32 R, uint32 G, uint32 B);
+ uint32(*BuildPixel2)(uint32 R, uint32 G, uint32 B);
+ void (*DecomposePixel)(uint32 Pixel, uint32 &R, uint32 &G, uint32 &B);
#endif
-}SGFX;
+} SGFX;
-typedef struct {
- struct {
- uint16 VOffset;
- uint16 HOffset;
- } BG [4];
-}SLineData;
+typedef struct
+{
+ struct
+ {
+ uint16 VOffset;
+ uint16 HOffset;
+ } BG [4];
+} SLineData;
#define H_FLIP 0x4000
#define V_FLIP 0x8000
@@ -115,31 +118,31 @@ typedef struct {
typedef struct
{
- uint32 TileSize;
- uint32 BitShift;
- uint32 TileShift;
- uint32 TileAddress;
- uint32 NameSelect;
- uint32 SCBase;
-
- uint32 StartPalette;
- uint32 PaletteShift;
- uint32 PaletteMask;
-
- uint8 *Buffer;
- uint8 *Buffered;
- bool8 DirectColourMode;
-}SBG;
+ uint32 TileSize;
+ uint32 BitShift;
+ uint32 TileShift;
+ uint32 TileAddress;
+ uint32 NameSelect;
+ uint32 SCBase;
+
+ uint32 StartPalette;
+ uint32 PaletteShift;
+ uint32 PaletteMask;
+
+ uint8* Buffer;
+ uint8* Buffered;
+ bool8 DirectColourMode;
+} SBG;
typedef struct
{
- short MatrixA;
- short MatrixB;
- short MatrixC;
- short MatrixD;
- short CentreX;
- short CentreY;
-}SLineMatrixData;
+ short MatrixA;
+ short MatrixB;
+ short MatrixC;
+ short MatrixD;
+ short CentreX;
+ short CentreY;
+} SLineMatrixData;
extern uint32 odd_high [4][16];
extern uint32 odd_low [4][16];
@@ -156,7 +159,7 @@ extern uint8 mul_brightness [16][32];
// Could use BSWAP instruction on Intel port...
//#define SWAP_DWORD(dw) dw = ((dw & 0xff) << 24) | ((dw & 0xff00) << 8) | \
-// ((dw & 0xff0000) >> 8) | ((dw & 0xff000000) >> 24)
+// ((dw & 0xff0000) >> 8) | ((dw & 0xff000000) >> 24)
// by Harald Kipp, from http://www.ethernut.de/en/documents/arm-inline-asm.html
#ifdef ARM_ASM
#define SWAP_DWORD(val) \
@@ -186,11 +189,11 @@ extern uint8 mul_brightness [16][32];
//#define READ_2BYTES(s) (*(uint8 *) (s) | (*((uint8 *) (s) + 1) << 8))
//#define WRITE_2BYTES(s, d) *(uint8 *) (s) = (d), \
-// *((uint8 *) (s) + 1) = (d) >> 8
+// *((uint8 *) (s) + 1) = (d) >> 8
#else // else MSB_FISRT
#define READ_2BYTES(s) (*(uint8 *) (s) | (*((uint8 *) (s) + 1) << 8))
#define WRITE_2BYTES(s, d) *(uint8 *) (s) = (d), \
- *((uint8 *) (s) + 1) = (d) >> 8
+ *((uint8 *) (s) + 1) = (d) >> 8
#endif // LSB_FIRST
#endif // i386
@@ -200,14 +203,14 @@ extern uint8 mul_brightness [16][32];
#if defined(OLD_COLOUR_BLENDING)
#define COLOR_ADD(C1, C2) \
GFX.X2 [((((C1) & RGB_REMOVE_LOW_BITS_MASK) + \
- ((C2) & RGB_REMOVE_LOW_BITS_MASK)) >> 1) + \
- ((C1) & (C2) & RGB_LOW_BITS_MASK)]
+ ((C2) & RGB_REMOVE_LOW_BITS_MASK)) >> 1) + \
+ ((C1) & (C2) & RGB_LOW_BITS_MASK)]
#else
#define COLOR_ADD(C1, C2) \
(GFX.X2 [((((C1) & RGB_REMOVE_LOW_BITS_MASK) + \
- ((C2) & RGB_REMOVE_LOW_BITS_MASK)) >> 1) + \
- ((C1) & (C2) & RGB_LOW_BITS_MASK)] | \
- (((C1) ^ (C2)) & RGB_LOW_BITS_MASK))
+ ((C2) & RGB_REMOVE_LOW_BITS_MASK)) >> 1) + \
+ ((C1) & (C2) & RGB_LOW_BITS_MASK)] | \
+ (((C1) ^ (C2)) & RGB_LOW_BITS_MASK))
#endif
#define COLOR_ADD1_2(C1, C2) \
@@ -218,7 +221,7 @@ GFX.X2 [((((C1) & RGB_REMOVE_LOW_BITS_MASK) + \
#if defined(OLD_COLOUR_BLENDING)
#define COLOR_SUB(C1, C2) \
GFX.ZERO_OR_X2 [(((C1) | RGB_HI_BITS_MASKx2) - \
- ((C2) & RGB_REMOVE_LOW_BITS_MASK)) >> 1]
+ ((C2) & RGB_REMOVE_LOW_BITS_MASK)) >> 1]
#else
#define COLOR_SUB(C1, C2) \
(GFX.ZERO_OR_X2 [(((C1) | RGB_HI_BITS_MASKx2) - \
@@ -228,48 +231,49 @@ GFX.ZERO_OR_X2 [(((C1) | RGB_HI_BITS_MASKx2) - \
#define COLOR_SUB1_2(C1, C2) \
GFX.ZERO [(((C1) | RGB_HI_BITS_MASKx2) - \
- ((C2) & RGB_REMOVE_LOW_BITS_MASK)) >> 1]
-
-typedef void (*NormalTileRenderer) (uint32 Tile, uint32 Offset,
- uint32 StartLine, uint32 LineCount);
-typedef void (*ClippedTileRenderer) (uint32 Tile, uint32 Offset,
- uint32 StartPixel, uint32 Width,
- uint32 StartLine, uint32 LineCount);
-typedef void (*LargePixelRenderer) (uint32 Tile, uint32 Offset,
- uint32 StartPixel, uint32 Pixels,
- uint32 StartLine, uint32 LineCount);
-
-
-typedef struct {
- NormalTileRenderer Normal;
- ClippedTileRenderer Clipped;
- LargePixelRenderer Large;
+ ((C2) & RGB_REMOVE_LOW_BITS_MASK)) >> 1]
+
+typedef void (*NormalTileRenderer)(uint32 Tile, uint32 Offset,
+ uint32 StartLine, uint32 LineCount);
+typedef void (*ClippedTileRenderer)(uint32 Tile, uint32 Offset,
+ uint32 StartPixel, uint32 Width,
+ uint32 StartLine, uint32 LineCount);
+typedef void (*LargePixelRenderer)(uint32 Tile, uint32 Offset,
+ uint32 StartPixel, uint32 Pixels,
+ uint32 StartLine, uint32 LineCount);
+
+
+typedef struct
+{
+ NormalTileRenderer Normal;
+ ClippedTileRenderer Clipped;
+ LargePixelRenderer Large;
} TileRendererSet;
START_EXTERN_C
-void S9xStartScreenRefresh ();
-void S9xDrawScanLine (uint8 Line);
-void S9xEndScreenRefresh ();
-void S9xSetupOBJ ();
-void S9xUpdateScreen ();
+void S9xStartScreenRefresh();
+void S9xDrawScanLine(uint8 Line);
+void S9xEndScreenRefresh();
+void S9xSetupOBJ();
+void S9xUpdateScreen();
//extern void (*S9xUpdateScreen)();
//void SelectUpdateScreen();
-void RenderLine (uint8 line);
-void S9xBuildDirectColourMaps ();
+void RenderLine(uint8 line);
+void S9xBuildDirectColourMaps();
// External port interface which must be implemented or initialised for each
// port.
extern SGFX GFX;
-bool8_32 S9xGraphicsInit ();
+bool8_32 S9xGraphicsInit();
void S9xGraphicsDeinit();
-bool8_32 S9xInitUpdate (void);
-bool8_32 S9xDeinitUpdate (int Width, int Height, bool8_32 sixteen_bit);
-void S9xSetPalette ();
-void S9xSyncSpeed ();
+bool8_32 S9xInitUpdate(void);
+bool8_32 S9xDeinitUpdate(int Width, int Height, bool8_32 sixteen_bit);
+void S9xSetPalette();
+void S9xSyncSpeed();
#ifdef GFX_MULTI_FORMAT
-bool8_32 S9xSetRenderPixelFormat (int format);
+bool8_32 S9xSetRenderPixelFormat(int format);
#endif
END_EXTERN_C