From e5741f992a65f53ea53bab9e4cc72ee9d50fcdd5 Mon Sep 17 00:00:00 2001 From: Arisotura Date: Mon, 7 Jul 2025 16:15:58 +0200 Subject: [PATCH] camera: fix some misc issues --- src/DSi_Camera.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/DSi_Camera.cpp b/src/DSi_Camera.cpp index 2475c44f..58582f90 100644 --- a/src/DSi_Camera.cpp +++ b/src/DSi_Camera.cpp @@ -144,6 +144,12 @@ void DSi_CamModule::IRQ(u32 param) void DSi_CamModule::TransferScanline(u32 line) { + if (Cnt & (1<<4)) + { + Transferring = false; + return; + } + if (line == 0) { if (!(Cnt & (1<<15))) @@ -153,9 +159,6 @@ void DSi_CamModule::TransferScanline(u32 line) Transferring = true; } - if (Cnt & (1<<4)) - return; - sPixelBuffer* buffer = &PixelBuffer[CurPixelBuffer]; u32* dstbuf = &buffer->Data[buffer->WritePos]; int maxlen = 512 - buffer->WritePos; @@ -324,12 +327,13 @@ u32 DSi_CamModule::Read32(u32 addr) case 0x04004204: { sPixelBuffer* buffer = &PixelBuffer[CurPixelBuffer ^ 1]; - u32 ret = buffer->Data[buffer->ReadPos]; - if (Cnt & (1<<15)) - { - if (buffer->ReadPos < buffer->WritePos) - buffer->ReadPos++; - } + u32 ret; + if (buffer->ReadPos < buffer->WritePos) + ret = buffer->Data[buffer->ReadPos++]; + else if (buffer->ReadPos > 0) + ret = buffer->Data[buffer->ReadPos - 1]; + else + ret = buffer->Data[0]; return ret; } @@ -421,7 +425,7 @@ void DSi_CamModule::Write16(u32 addr, u16 val) } void DSi_CamModule::Write32(u32 addr, u32 val) -{ +{printf("cam write32 %08X %08X\n", addr, val); switch (addr) { case 0x04004210: