aboutsummaryrefslogtreecommitdiff
path: root/src/DSi_Camera.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/DSi_Camera.cpp')
-rw-r--r--src/DSi_Camera.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/DSi_Camera.cpp b/src/DSi_Camera.cpp
index 66d08cb..45061b2 100644
--- a/src/DSi_Camera.cpp
+++ b/src/DSi_Camera.cpp
@@ -61,6 +61,9 @@ void DSi_Camera::ResetCam()
DataPos = 0;
RegAddr = 0;
RegData = 0;
+
+ PLLCnt = 0;
+ StandbyCnt = 0x4029; // checkme
}
@@ -130,7 +133,11 @@ u16 DSi_Camera::ReadReg(u16 addr)
{
switch (addr)
{
- case 0x301A: return 0x0002; // HAX
+ case 0x0000: return 0x2280; // chip ID
+ case 0x0014: return PLLCnt;
+ case 0x0018: return StandbyCnt;
+
+ case 0x301A: return ((~StandbyCnt) & 0x4000) >> 12;
}
printf("DSi_Camera%d: unknown read %04X\n", Num, addr);
@@ -139,5 +146,21 @@ u16 DSi_Camera::ReadReg(u16 addr)
void DSi_Camera::WriteReg(u16 addr, u16 val)
{
+ switch (addr)
+ {
+ case 0x0014:
+ // shouldn't be instant either?
+ val &= 0x7FFF;
+ val |= ((val & 0x0002) << 14);
+ PLLCnt = val;
+ return;
+ case 0x0018:
+ // TODO: this shouldn't be instant, but uh
+ val &= 0x003F;
+ val |= ((val & 0x0001) << 14);
+ StandbyCnt = val;
+ return;
+ }
+
printf("DSi_Camera%d: unknown write %04X %04X\n", Num, addr, val);
}