aboutsummaryrefslogtreecommitdiff
path: root/source/ppu.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/ppu.h')
-rw-r--r--source/ppu.h447
1 files changed, 227 insertions, 220 deletions
diff --git a/source/ppu.h b/source/ppu.h
index efb892e..c01135f 100644
--- a/source/ppu.h
+++ b/source/ppu.h
@@ -1,6 +1,6 @@
/*******************************************************************************
Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
-
+
(c) Copyright 1996 - 2002 Gary Henderson (gary.henderson@ntlworld.com) and
Jerremy Koot (jkoot@snes9x.com)
@@ -43,46 +43,46 @@
S-DD1 C emulator code
(c) Copyright 2003 Brad Jorsch with research by
Andreas Naive and John Weidman
-
+
S-RTC C emulator code
(c) Copyright 2001 John Weidman
-
+
ST010 C++ emulator code
(c) Copyright 2003 Feather, Kris Bleakley, John Weidman and Matthew Kendora
- Super FX x86 assembler emulator code
- (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault
+ Super FX x86 assembler emulator code
+ (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault
- Super FX C emulator code
+ Super FX C emulator code
(c) Copyright 1997 - 1999 Ivar, Gary Henderson and John Weidman
SH assembler code partly based on x86 assembler code
- (c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se)
+ (c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se)
+
-
Specific ports contains the works of other authors. See headers in
individual files.
-
+
Snes9x homepage: http://www.snes9x.com
-
+
Permission to use, copy, modify and distribute Snes9x in both binary and
source form, for non-commercial purposes, is hereby granted without fee,
providing that this license information and copyright notice appear with
all copies and any derived work.
-
+
This software is provided 'as-is', without any express or implied
warranty. In no event shall the authors be held liable for any damages
arising from the use of this software.
-
+
Snes9x is freeware for PERSONAL USE only. Commercial users should
seek permission of the copyright holders first. Commercial use includes
charging money for Snes9x or software derived from Snes9x.
-
+
The copyright holders request that bug fixes and improvements to the code
should be forwarded to them so everyone can benefit from the modifications
in future versions.
-
+
Super NES and Super Nintendo Entertainment System are trademarks of
Nintendo Co., Limited and its subsidiary companies.
*******************************************************************************/
@@ -103,220 +103,226 @@ extern uint16 SignExtend [2];
#define MAX_4BIT_TILES 2048
#define MAX_8BIT_TILES 1024
-#define PPU_H_BEAM_IRQ_SOURCE (1 << 0)
-#define PPU_V_BEAM_IRQ_SOURCE (1 << 1)
-#define GSU_IRQ_SOURCE (1 << 2)
-#define SA1_IRQ_SOURCE (1 << 7)
-#define SA1_DMA_IRQ_SOURCE (1 << 5)
+#define PPU_H_BEAM_IRQ_SOURCE (1 << 0)
+#define PPU_V_BEAM_IRQ_SOURCE (1 << 1)
+#define GSU_IRQ_SOURCE (1 << 2)
+#define SA1_IRQ_SOURCE (1 << 7)
+#define SA1_DMA_IRQ_SOURCE (1 << 5)
-struct ClipData {
- uint32 Count [6];
- uint32 Left [6][6];
- uint32 Right [6][6];
+struct ClipData
+{
+ uint32 Count [6];
+ uint32 Left [6][6];
+ uint32 Right [6][6];
};
-typedef struct {
- bool8 ColorsChanged;
- uint8 HDMA;
- bool8 HDMAStarted;
- uint8 MaxBrightness;
- bool8 LatchedBlanking;
- bool8 OBJChanged;
- bool8 RenderThisFrame;
- bool8 DirectColourMapsNeedRebuild;
- uint32 FrameCount;
- uint32 RenderedFramesCount;
- uint32 DisplayedRenderedFrameCount;
- uint32 SkippedFrames;
- uint32 FrameSkip;
- uint8 *TileCache [3];
- uint8 *TileCached [3];
+typedef struct
+{
+ bool8 ColorsChanged;
+ uint8 HDMA;
+ bool8 HDMAStarted;
+ uint8 MaxBrightness;
+ bool8 LatchedBlanking;
+ bool8 OBJChanged;
+ bool8 RenderThisFrame;
+ bool8 DirectColourMapsNeedRebuild;
+ uint32 FrameCount;
+ uint32 RenderedFramesCount;
+ uint32 DisplayedRenderedFrameCount;
+ uint32 SkippedFrames;
+ uint32 FrameSkip;
+ uint8* TileCache [3];
+ uint8* TileCached [3];
#ifdef CORRECT_VRAM_READS
- uint16 VRAMReadBuffer;
+ uint16 VRAMReadBuffer;
#else
- bool8 FirstVRAMRead;
+ bool8 FirstVRAMRead;
#endif
- bool8 DoubleHeightPixels;
- bool8 Interlace;
- bool8 InterlaceSprites;
- bool8 DoubleWidthPixels;
- bool8 HalfWidthPixels;
- int RenderedScreenHeight;
- int RenderedScreenWidth;
- uint32 Red [256];
- uint32 Green [256];
- uint32 Blue [256];
- uint8 *XB;
- uint16 ScreenColors [256];
- int PreviousLine;
- int CurrentLine;
- int Controller;
- uint32 Joypads[5];
- uint32 SuperScope;
- uint32 Mouse[2];
- int PrevMouseX[2];
- int PrevMouseY[2];
- struct ClipData Clip [2];
+ bool8 DoubleHeightPixels;
+ bool8 Interlace;
+ bool8 InterlaceSprites;
+ bool8 DoubleWidthPixels;
+ bool8 HalfWidthPixels;
+ int RenderedScreenHeight;
+ int RenderedScreenWidth;
+ uint32 Red [256];
+ uint32 Green [256];
+ uint32 Blue [256];
+ uint8* XB;
+ uint16 ScreenColors [256];
+ int PreviousLine;
+ int CurrentLine;
+ int Controller;
+ uint32 Joypads[5];
+ uint32 SuperScope;
+ uint32 Mouse[2];
+ int PrevMouseX[2];
+ int PrevMouseY[2];
+ struct ClipData Clip [2];
} InternalPPU;
struct SOBJ
{
- short HPos;
- uint16 VPos;
- uint16 Name;
- uint8 VFlip;
- uint8 HFlip;
- uint8 Priority;
- uint8 Palette;
- uint8 Size;
+ short HPos;
+ uint16 VPos;
+ uint16 Name;
+ uint8 VFlip;
+ uint8 HFlip;
+ uint8 Priority;
+ uint8 Palette;
+ uint8 Size;
};
-typedef struct{
- uint8 BGMode;
- uint8 BG3Priority;
- uint8 Brightness;
-
- struct {
- bool8 High;
- uint8 Increment;
- uint16 Address;
- uint16 Mask1;
- uint16 FullGraphicCount;
- uint16 Shift;
- } VMA;
-
- struct {
- uint16 SCBase;
- uint16 VOffset;
- uint16 HOffset;
- uint8 BGSize;
- uint16 NameBase;
- uint16 SCSize;
- } BG [4];
-
- bool8 CGFLIP;
- uint16 CGDATA [256];
- uint8 FirstSprite;
- uint8 LastSprite;
- struct SOBJ OBJ [128];
- uint8 OAMPriorityRotation;
- uint16 OAMAddr;
- uint8 RangeTimeOver;
-
- uint8 OAMFlip;
- uint16 OAMTileAddress;
- uint16 IRQVBeamPos;
- uint16 IRQHBeamPos;
- uint16 VBeamPosLatched;
- uint16 HBeamPosLatched;
-
- uint8 HBeamFlip;
- uint8 VBeamFlip;
- uint8 HVBeamCounterLatched;
-
- short MatrixA;
- short MatrixB;
- short MatrixC;
- short MatrixD;
- short CentreX;
- short CentreY;
- uint8 Joypad1ButtonReadPos;
- uint8 Joypad2ButtonReadPos;
-
- uint8 CGADD;
- uint8 FixedColourRed;
- uint8 FixedColourGreen;
- uint8 FixedColourBlue;
- uint16 SavedOAMAddr;
- uint16 ScreenHeight;
- uint32 WRAM;
- uint8 BG_Forced;
- bool8 ForcedBlanking;
- bool8 OBJThroughMain;
- bool8 OBJThroughSub;
- uint8 OBJSizeSelect;
- uint16 OBJNameBase;
- bool8 OBJAddition;
- uint8 OAMReadFlip;
- uint8 OAMData [512 + 32];
- bool8 VTimerEnabled;
- bool8 HTimerEnabled;
- short HTimerPosition;
- uint8 Mosaic;
- bool8 BGMosaic [4];
- bool8 Mode7HFlip;
- bool8 Mode7VFlip;
- uint8 Mode7Repeat;
- uint8 Window1Left;
- uint8 Window1Right;
- uint8 Window2Left;
- uint8 Window2Right;
- uint8 ClipCounts [6];
- uint8 ClipWindowOverlapLogic [6];
- uint8 ClipWindow1Enable [6];
- uint8 ClipWindow2Enable [6];
- bool8 ClipWindow1Inside [6];
- bool8 ClipWindow2Inside [6];
- bool8 RecomputeClipWindows;
- uint8 CGFLIPRead;
- uint16 OBJNameSelect;
- bool8 Need16x8Mulitply;
- uint8 Joypad3ButtonReadPos;
- uint8 MouseSpeed[2];
-
- // XXX Do these need to be added to snapshot.cpp?
- uint16 OAMWriteRegister;
- uint8 BGnxOFSbyte;
- uint8 OpenBus1;
- uint8 OpenBus2;
-}SPPU;
+typedef struct
+{
+ uint8 BGMode;
+ uint8 BG3Priority;
+ uint8 Brightness;
+
+ struct
+ {
+ bool8 High;
+ uint8 Increment;
+ uint16 Address;
+ uint16 Mask1;
+ uint16 FullGraphicCount;
+ uint16 Shift;
+ } VMA;
+
+ struct
+ {
+ uint16 SCBase;
+ uint16 VOffset;
+ uint16 HOffset;
+ uint8 BGSize;
+ uint16 NameBase;
+ uint16 SCSize;
+ } BG [4];
+
+ bool8 CGFLIP;
+ uint16 CGDATA [256];
+ uint8 FirstSprite;
+ uint8 LastSprite;
+ struct SOBJ OBJ [128];
+ uint8 OAMPriorityRotation;
+ uint16 OAMAddr;
+ uint8 RangeTimeOver;
+
+ uint8 OAMFlip;
+ uint16 OAMTileAddress;
+ uint16 IRQVBeamPos;
+ uint16 IRQHBeamPos;
+ uint16 VBeamPosLatched;
+ uint16 HBeamPosLatched;
+
+ uint8 HBeamFlip;
+ uint8 VBeamFlip;
+ uint8 HVBeamCounterLatched;
+
+ short MatrixA;
+ short MatrixB;
+ short MatrixC;
+ short MatrixD;
+ short CentreX;
+ short CentreY;
+ uint8 Joypad1ButtonReadPos;
+ uint8 Joypad2ButtonReadPos;
+
+ uint8 CGADD;
+ uint8 FixedColourRed;
+ uint8 FixedColourGreen;
+ uint8 FixedColourBlue;
+ uint16 SavedOAMAddr;
+ uint16 ScreenHeight;
+ uint32 WRAM;
+ uint8 BG_Forced;
+ bool8 ForcedBlanking;
+ bool8 OBJThroughMain;
+ bool8 OBJThroughSub;
+ uint8 OBJSizeSelect;
+ uint16 OBJNameBase;
+ bool8 OBJAddition;
+ uint8 OAMReadFlip;
+ uint8 OAMData [512 + 32];
+ bool8 VTimerEnabled;
+ bool8 HTimerEnabled;
+ short HTimerPosition;
+ uint8 Mosaic;
+ bool8 BGMosaic [4];
+ bool8 Mode7HFlip;
+ bool8 Mode7VFlip;
+ uint8 Mode7Repeat;
+ uint8 Window1Left;
+ uint8 Window1Right;
+ uint8 Window2Left;
+ uint8 Window2Right;
+ uint8 ClipCounts [6];
+ uint8 ClipWindowOverlapLogic [6];
+ uint8 ClipWindow1Enable [6];
+ uint8 ClipWindow2Enable [6];
+ bool8 ClipWindow1Inside [6];
+ bool8 ClipWindow2Inside [6];
+ bool8 RecomputeClipWindows;
+ uint8 CGFLIPRead;
+ uint16 OBJNameSelect;
+ bool8 Need16x8Mulitply;
+ uint8 Joypad3ButtonReadPos;
+ uint8 MouseSpeed[2];
+
+ // XXX Do these need to be added to snapshot.cpp?
+ uint16 OAMWriteRegister;
+ uint8 BGnxOFSbyte;
+ uint8 OpenBus1;
+ uint8 OpenBus2;
+} SPPU;
#define CLIP_OR 0
#define CLIP_AND 1
#define CLIP_XOR 2
#define CLIP_XNOR 3
-typedef struct {
- bool8 TransferDirection;
- bool8 AAddressFixed;
- bool8 AAddressDecrement;
- uint8 TransferMode;
-
- uint8 ABank;
- uint16 AAddress;
- uint16 Address;
- uint8 BAddress;
-
- // General DMA only:
- uint16 TransferBytes;
-
- // H-DMA only:
- bool8 HDMAIndirectAddressing;
- uint16 IndirectAddress;
- uint8 IndirectBank;
- uint8 Repeat;
- uint8 LineCount;
- uint8 FirstLine;
-}SDMA;
-
-void S9xUpdateScreen ();
-void S9xResetPPU ();
-void S9xSoftResetPPU ();
-void S9xFixColourBrightness ();
-void S9xUpdateJoypads ();
+typedef struct
+{
+ bool8 TransferDirection;
+ bool8 AAddressFixed;
+ bool8 AAddressDecrement;
+ uint8 TransferMode;
+
+ uint8 ABank;
+ uint16 AAddress;
+ uint16 Address;
+ uint8 BAddress;
+
+ // General DMA only:
+ uint16 TransferBytes;
+
+ // H-DMA only:
+ bool8 HDMAIndirectAddressing;
+ uint16 IndirectAddress;
+ uint8 IndirectBank;
+ uint8 Repeat;
+ uint8 LineCount;
+ uint8 FirstLine;
+} SDMA;
+
+void S9xUpdateScreen();
+void S9xResetPPU();
+void S9xSoftResetPPU();
+void S9xFixColourBrightness();
+void S9xUpdateJoypads();
void S9xProcessMouse(int which1);
-void S9xSuperFXExec ();
+void S9xSuperFXExec();
-void S9xSetPPU (uint8 Byte, uint16 Address);
-uint8 S9xGetPPU (uint16 Address);
-void S9xSetCPU (uint8 Byte, uint16 Address);
-uint8 S9xGetCPU (uint16 Address);
+void S9xSetPPU(uint8 Byte, uint16 Address);
+uint8 S9xGetPPU(uint16 Address);
+void S9xSetCPU(uint8 Byte, uint16 Address);
+uint8 S9xGetCPU(uint16 Address);
-void S9xInitC4 ();
-void S9xSetC4 (uint8 Byte, uint16 Address);
-uint8 S9xGetC4 (uint16 Address);
-void S9xSetC4RAM (uint8 Byte, uint16 Address);
-uint8 S9xGetC4RAM (uint16 Address);
+void S9xInitC4();
+void S9xSetC4(uint8 Byte, uint16 Address);
+uint8 S9xGetC4(uint16 Address);
+void S9xSetC4RAM(uint8 Byte, uint16 Address);
+uint8 S9xGetC4RAM(uint16 Address);
extern SPPU PPU;
extern SDMA DMA [8];
@@ -325,10 +331,11 @@ extern InternalPPU IPPU;
#include "gfx.h"
#include "memmap.h"
-typedef struct{
- uint8 _5C77;
- uint8 _5C78;
- uint8 _5A22;
+typedef struct
+{
+ uint8 _5C77;
+ uint8 _5C78;
+ uint8 _5A22;
} SnesModel;
extern SnesModel* Model;
@@ -340,19 +347,19 @@ extern SnesModel M2SNES;
#define MAX_5A22_VERSION 0x02
extern uint8 REGISTER_4212();
-extern void FLUSH_REDRAW ();
-extern void REGISTER_2104 (uint8 byte);
-extern void REGISTER_2118 (uint8 Byte);
-extern void REGISTER_2118_tile (uint8 Byte);
-extern void REGISTER_2118_linear (uint8 Byte);
-extern void REGISTER_2119 (uint8 Byte);
-extern void REGISTER_2119_tile (uint8 Byte);
-extern void REGISTER_2119_linear (uint8 Byte);
+extern void FLUSH_REDRAW();
+extern void REGISTER_2104(uint8 byte);
+extern void REGISTER_2118(uint8 Byte);
+extern void REGISTER_2118_tile(uint8 Byte);
+extern void REGISTER_2118_linear(uint8 Byte);
+extern void REGISTER_2119(uint8 Byte);
+extern void REGISTER_2119_tile(uint8 Byte);
+extern void REGISTER_2119_linear(uint8 Byte);
extern void REGISTER_2122(uint8 Byte);
extern void REGISTER_2180(uint8 Byte);
//Platform specific input functions used by PPU.CPP
-void JustifierButtons(uint32 *);
+void JustifierButtons(uint32*);
bool JustifierOffscreen();
#endif