camera: fix some misc issues

This commit is contained in:
Arisotura
2025-07-07 16:15:58 +02:00
parent 7499958ad0
commit e5741f992a

View File

@ -144,6 +144,12 @@ void DSi_CamModule::IRQ(u32 param)
void DSi_CamModule::TransferScanline(u32 line) void DSi_CamModule::TransferScanline(u32 line)
{ {
if (Cnt & (1<<4))
{
Transferring = false;
return;
}
if (line == 0) if (line == 0)
{ {
if (!(Cnt & (1<<15))) if (!(Cnt & (1<<15)))
@ -153,9 +159,6 @@ void DSi_CamModule::TransferScanline(u32 line)
Transferring = true; Transferring = true;
} }
if (Cnt & (1<<4))
return;
sPixelBuffer* buffer = &PixelBuffer[CurPixelBuffer]; sPixelBuffer* buffer = &PixelBuffer[CurPixelBuffer];
u32* dstbuf = &buffer->Data[buffer->WritePos]; u32* dstbuf = &buffer->Data[buffer->WritePos];
int maxlen = 512 - buffer->WritePos; int maxlen = 512 - buffer->WritePos;
@ -324,12 +327,13 @@ u32 DSi_CamModule::Read32(u32 addr)
case 0x04004204: case 0x04004204:
{ {
sPixelBuffer* buffer = &PixelBuffer[CurPixelBuffer ^ 1]; sPixelBuffer* buffer = &PixelBuffer[CurPixelBuffer ^ 1];
u32 ret = buffer->Data[buffer->ReadPos]; u32 ret;
if (Cnt & (1<<15)) if (buffer->ReadPos < buffer->WritePos)
{ ret = buffer->Data[buffer->ReadPos++];
if (buffer->ReadPos < buffer->WritePos) else if (buffer->ReadPos > 0)
buffer->ReadPos++; ret = buffer->Data[buffer->ReadPos - 1];
} else
ret = buffer->Data[0];
return ret; return ret;
} }
@ -421,7 +425,7 @@ void DSi_CamModule::Write16(u32 addr, u16 val)
} }
void DSi_CamModule::Write32(u32 addr, u32 val) void DSi_CamModule::Write32(u32 addr, u32 val)
{ {printf("cam write32 %08X %08X\n", addr, val);
switch (addr) switch (addr)
{ {
case 0x04004210: case 0x04004210: