summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Software/Src/SWCommandProcessor.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoBackends/Software/Src/SWCommandProcessor.h')
-rw-r--r--Source/Core/VideoBackends/Software/Src/SWCommandProcessor.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/Source/Core/VideoBackends/Software/Src/SWCommandProcessor.h b/Source/Core/VideoBackends/Software/Src/SWCommandProcessor.h
new file mode 100644
index 0000000000..51cde8dbae
--- /dev/null
+++ b/Source/Core/VideoBackends/Software/Src/SWCommandProcessor.h
@@ -0,0 +1,145 @@
+// Copyright 2013 Dolphin Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#ifndef _COMMANDPROCESSOR_H_
+#define _COMMANDPROCESSOR_H_
+
+#include "Common.h"
+
+class PointerWrap;
+
+extern volatile bool g_bSkipCurrentFrame;
+extern u8* g_pVideoData;
+
+namespace SWCommandProcessor
+{
+ // internal hardware addresses
+ enum
+ {
+ STATUS_REGISTER = 0x00,
+ CTRL_REGISTER = 0x02,
+ CLEAR_REGISTER = 0x04,
+ FIFO_TOKEN_REGISTER = 0x0E,
+ FIFO_BOUNDING_BOX_LEFT = 0x10,
+ FIFO_BOUNDING_BOX_RIGHT = 0x12,
+ FIFO_BOUNDING_BOX_TOP = 0x14,
+ FIFO_BOUNDING_BOX_BOTTOM = 0x16,
+ FIFO_BASE_LO = 0x20,
+ FIFO_BASE_HI = 0x22,
+ FIFO_END_LO = 0x24,
+ FIFO_END_HI = 0x26,
+ FIFO_HI_WATERMARK_LO = 0x28,
+ FIFO_HI_WATERMARK_HI = 0x2a,
+ FIFO_LO_WATERMARK_LO = 0x2c,
+ FIFO_LO_WATERMARK_HI = 0x2e,
+ FIFO_RW_DISTANCE_LO = 0x30,
+ FIFO_RW_DISTANCE_HI = 0x32,
+ FIFO_WRITE_POINTER_LO = 0x34,
+ FIFO_WRITE_POINTER_HI = 0x36,
+ FIFO_READ_POINTER_LO = 0x38,
+ FIFO_READ_POINTER_HI = 0x3A,
+ FIFO_BP_LO = 0x3C,
+ FIFO_BP_HI = 0x3E
+ };
+
+ // Fifo Status Register
+ union UCPStatusReg
+ {
+ struct
+ {
+ u16 OverflowHiWatermark : 1;
+ u16 UnderflowLoWatermark: 1;
+ u16 ReadIdle : 1; // done reading
+ u16 CommandIdle : 1; // done processing commands
+ u16 Breakpoint : 1;
+ u16 : 11;
+ };
+ u16 Hex;
+ UCPStatusReg() {Hex = 0; }
+ UCPStatusReg(u16 _hex) {Hex = _hex; }
+ };
+
+ // Fifo Control Register
+ union UCPCtrlReg
+ {
+ struct
+ {
+ u16 GPReadEnable : 1;
+ u16 BPEnable : 1;
+ u16 FifoOverflowIntEnable : 1;
+ u16 FifoUnderflowIntEnable : 1;
+ u16 GPLinkEnable : 1;
+ u16 BreakPointIntEnable : 1;
+ u16 : 10;
+ };
+ u16 Hex;
+ UCPCtrlReg() {Hex = 0; }
+ UCPCtrlReg(u16 _hex) {Hex = _hex; }
+ };
+
+ // Fifo Control Register
+ union UCPClearReg
+ {
+ struct
+ {
+ u16 ClearFifoOverflow : 1;
+ u16 ClearFifoUnderflow : 1;
+ u16 ClearMetrices : 1;
+ u16 : 13;
+ };
+ u16 Hex;
+ UCPClearReg() {Hex = 0; }
+ UCPClearReg(u16 _hex) {Hex = _hex; }
+ };
+
+ struct CPReg
+ {
+ UCPStatusReg status; // 0x00
+ UCPCtrlReg ctrl; // 0x02
+ UCPClearReg clear; // 0x04
+ u32 unk0; // 0x06
+ u32 unk1; // 0x0a
+ u16 token; // 0x0e
+ u16 bboxleft; // 0x10
+ u16 bboxtop; // 0x12
+ u16 bboxright; // 0x14
+ u16 bboxbottom; // 0x16
+ u16 unk2; // 0x18
+ u32 fifobase; // 0x20
+ u32 fifoend; // 0x24
+ u32 hiwatermark; // 0x28
+ u32 lowatermark; // 0x2c
+ u32 rwdistance; // 0x30
+ u32 writeptr; // 0x34
+ u32 readptr; // 0x38
+ u32 breakpt; // 0x3c
+ };
+
+ extern CPReg cpreg;
+
+ // Init
+ void Init();
+ void Shutdown();
+ void DoState(PointerWrap &p);
+
+ bool RunBuffer();
+ void RunGpu();
+
+ // Read
+ void Read16(u16& _rReturnValue, const u32 _Address);
+ void Write16(const u16 _Data, const u32 _Address);
+ void Read32(u32& _rReturnValue, const u32 _Address);
+ void Write32(const u32 _Data, const u32 _Address);
+
+ // for CGPFIFO
+ void GatherPipeBursted();
+ void UpdateInterrupts(u64 userdata);
+ void UpdateInterruptsFromVideoBackend(u64 userdata);
+
+ void SetRendering(bool enabled);
+
+} // end of namespace SWCommandProcessor
+
+
+#endif