summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorShawn Hoffman <godisgovernment@gmail.com>2009-12-16 08:59:18 +0000
committerShawn Hoffman <godisgovernment@gmail.com>2009-12-16 08:59:18 +0000
commitf2c060d8cb2212fe6d8b8fd7b91d2fd40fd74fb6 (patch)
tree9971d7e16e4c4fcd1f862cbd5c8f24333dac6f07 /Source/Core
parent5a417fe76c8f98c04facc01cf9d7b142ab3c6747 (diff)
Implement some previously unknown gekko/flipper cpuid-type regs
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4698 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/HW/ProcessorInterface.cpp22
-rw-r--r--Source/Core/Core/Src/HW/SI.cpp2
-rw-r--r--Source/Core/Core/Src/PowerPC/Gekko.h7
-rw-r--r--Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_SystemRegisters.cpp5
-rw-r--r--Source/Core/Core/Src/PowerPC/PowerPC.cpp16
5 files changed, 41 insertions, 11 deletions
diff --git a/Source/Core/Core/Src/HW/ProcessorInterface.cpp b/Source/Core/Core/Src/HW/ProcessorInterface.cpp
index 985878f138..f94418b8dc 100644
--- a/Source/Core/Core/Src/HW/ProcessorInterface.cpp
+++ b/Source/Core/Core/Src/HW/ProcessorInterface.cpp
@@ -38,7 +38,7 @@ enum
PI_FIFO_WPTR = 0x14,
PI_FIFO_RESET = 0x18, // ??? - GXAbortFrame writes to it
PI_RESET_CODE = 0x24,
- PI_MB_REV = 0x2C,
+ PI_FLIPPER_REV = 0x2C,
PI_UNKNOWN = 0x30 // ??? - BS1 writes to it
};
@@ -53,7 +53,7 @@ u32 Fifo_CPUWritePointer;
u32 m_Fifo_Reset;
u32 m_ResetCode;
-u32 m_MBRev;
+u32 m_FlipperRev;
u32 m_Unknown;
@@ -74,7 +74,7 @@ void DoState(PointerWrap &p)
p.Do(Fifo_CPUWritePointer);
p.Do(m_Fifo_Reset);
p.Do(m_ResetCode);
- p.Do(m_MBRev);
+ p.Do(m_FlipperRev);
p.Do(m_Unknown);
}
@@ -86,13 +86,17 @@ void Init()
Fifo_CPUBase = 0;
Fifo_CPUEnd = 0;
Fifo_CPUWritePointer = 0;
-
- m_MBRev = 2 << 28; // HW2 production board
+ /*
+ Previous Flipper IDs:
+ 0x046500B0 = A
+ 0x146500B1 = B
+ */
+ m_FlipperRev = 0x246500B1; // revision C
m_Unknown = 0;
// Bleh, why?
//m_ResetCode |= 0x80000000;
- //m_InterruptCause |= INT_CAUSE_RST_BUTTON;
+ m_InterruptCause = INT_CAUSE_RST_BUTTON | INT_CAUSE_VI;
toggleResetButton = CoreTiming::RegisterEvent("ToggleResetButton", &ToggleResetButtonCallback);
}
@@ -132,9 +136,9 @@ void Read32(u32& _uReturnValue, const u32 _iAddress)
_uReturnValue = m_ResetCode;
return;
- case PI_MB_REV:
- INFO_LOG(PROCESSORINTERFACE, "read board rev, 0x%08x", m_MBRev);
- _uReturnValue = m_MBRev;
+ case PI_FLIPPER_REV:
+ INFO_LOG(PROCESSORINTERFACE, "read flipper rev, 0x%08x", m_FlipperRev);
+ _uReturnValue = m_FlipperRev;
return;
default:
diff --git a/Source/Core/Core/Src/HW/SI.cpp b/Source/Core/Core/Src/HW/SI.cpp
index 382f06744d..63f7f04388 100644
--- a/Source/Core/Core/Src/HW/SI.cpp
+++ b/Source/Core/Core/Src/HW/SI.cpp
@@ -252,7 +252,7 @@ void Init()
g_ComCSR.Hex = 0;
g_StatusReg.Hex = 0;
g_EXIClockCount.Hex = 0;
- memset(g_SIBuffer, 0xce, 128); // This could be the cause of "WII something" in GCController
+ memset(g_SIBuffer, 0, 128);
changeDevice = CoreTiming::RegisterEvent("ChangeSIDevice", ChangeDeviceCallback);
}
diff --git a/Source/Core/Core/Src/PowerPC/Gekko.h b/Source/Core/Core/Src/PowerPC/Gekko.h
index 2dd9b2e283..f068199310 100644
--- a/Source/Core/Core/Src/PowerPC/Gekko.h
+++ b/Source/Core/Core/Src/PowerPC/Gekko.h
@@ -611,6 +611,7 @@ enum
SPR_TU = 269,
SPR_TL_W = 284,
SPR_TU_W = 285,
+ SPR_PVR = 287,
SPR_SPRG0 = 272,
SPR_SPRG1 = 273,
SPR_SPRG2 = 274,
@@ -637,7 +638,11 @@ enum
SPR_HID2 = 920,
SPR_WPAR = 921,
SPR_DMAU = 922,
- SPR_DMAL = 923
+ SPR_DMAL = 923,
+ SPR_ECID_U = 924,
+ SPR_ECID_M = 925,
+ SPR_ECID_L = 926,
+ SPR_L2CR = 1017
};
// Exceptions
diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_SystemRegisters.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_SystemRegisters.cpp
index 272da1bf3e..307b3cacf6 100644
--- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_SystemRegisters.cpp
+++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_SystemRegisters.cpp
@@ -370,6 +370,7 @@ void mtspr(UGeckoInstruction _inst)
GPFifo::ResetGatherPipe();
break;
+ // Graphics Quantization Registers
case SPR_GQR0:
case SPR_GQR0 + 1:
case SPR_GQR0 + 2:
@@ -399,6 +400,10 @@ void mtspr(UGeckoInstruction _inst)
DMAL.DMA_T = 0;
break;
+ case SPR_L2CR:
+ //PanicAlert("mtspr( L2CR )!");
+ break;
+
case SPR_DEC:
if (!(oldValue >> 31) && (m_GPR[_inst.RD]>>31)) //top bit from 0 to 1
{
diff --git a/Source/Core/Core/Src/PowerPC/PowerPC.cpp b/Source/Core/Core/Src/PowerPC/PowerPC.cpp
index cdcb680b9b..27103f7660 100644
--- a/Source/Core/Core/Src/PowerPC/PowerPC.cpp
+++ b/Source/Core/Core/Src/PowerPC/PowerPC.cpp
@@ -79,6 +79,21 @@ void ResetRegisters()
}
memset(ppcState.spr, 0, sizeof(ppcState.spr));
+ /*
+ 0x00080200 = lonestar 2.0
+ 0x00088202 = lonestar 2.2
+ 0x70000100 = gekko 1.0
+ 0x00080100 = gekko 2.0
+ 0x00083203 = gekko 2.3a
+ 0x00083213 = gekko 2.3b
+ 0x00083204 = gekko 2.4
+ 0x00083214 = gekko 2.4e (8SE) - retail HW2
+ */
+ ppcState.spr[SPR_PVR] = 0x00083214;
+ ppcState.spr[SPR_HID1] = 0x80000000; // We're running at 3x the bus clock
+ ppcState.spr[SPR_ECID_U] = 0x0d96e200;
+ ppcState.spr[SPR_ECID_M] = 0x1840c00d;
+ ppcState.spr[SPR_ECID_L] = 0x82bb08e8;
ppcState.cr = 0;
ppcState.fpscr = 0;
@@ -89,6 +104,7 @@ void ResetRegisters()
TL = 0;
TU = 0;
+ // MSR should be 0x40, but we don't emulate BS1, so it would never be turned off :}
ppcState.msr = 0;
rDEC = 0xFFFFFFFF;
}