Merge pull request #422 from Kurausukun/final
Fix Final 2 Nonmatchings (ported from emerald)
This commit is contained in:
+7
-7
@@ -147,11 +147,7 @@ static void sio32intr_clock_slave(void)
|
|||||||
{
|
{
|
||||||
u32 regSIODATA32;
|
u32 regSIODATA32;
|
||||||
u32 r0;
|
u32 r0;
|
||||||
#ifndef NONMATCHING
|
u32 reqLen;
|
||||||
register u32 reqLen asm("r2");
|
|
||||||
#else
|
|
||||||
u32 reqLen;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gSTWIStatus->timerActive = 0;
|
gSTWIStatus->timerActive = 0;
|
||||||
STWI_set_timer_in_RAM(100);
|
STWI_set_timer_in_RAM(100);
|
||||||
@@ -164,10 +160,14 @@ static void sio32intr_clock_slave(void)
|
|||||||
((u32*)gSTWIStatus->rxPacket)[0] = regSIODATA32;
|
((u32*)gSTWIStatus->rxPacket)[0] = regSIODATA32;
|
||||||
gSTWIStatus->reqNext = 1;
|
gSTWIStatus->reqNext = 1;
|
||||||
r0 = 0x99660000;
|
r0 = 0x99660000;
|
||||||
if ((regSIODATA32 >> 16) == (r0 >> 16))
|
// variable reuse required
|
||||||
|
reqLen = (regSIODATA32 >> 16);
|
||||||
|
if (reqLen == (r0 >> 16))
|
||||||
{
|
{
|
||||||
|
// only reqLen = regSIODATA32 >> 8 is required to match, but it looks a bit
|
||||||
|
// more consistent when both lines update the variables. Might have been a macro?
|
||||||
gSTWIStatus->reqLength = reqLen = regSIODATA32 >> 8;
|
gSTWIStatus->reqLength = reqLen = regSIODATA32 >> 8;
|
||||||
gSTWIStatus->reqActiveCommand = regSIODATA32;
|
gSTWIStatus->reqActiveCommand = reqLen = (regSIODATA32 >> 0);
|
||||||
if (gSTWIStatus->reqLength == 0)
|
if (gSTWIStatus->reqLength == 0)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
|
|||||||
@@ -1758,9 +1758,6 @@ static void rfu_constructSendLLFrame(void)
|
|||||||
{
|
{
|
||||||
u8 *maxSize = llf_p - offsetof(struct RfuFixed, LLFBuffer[1]);
|
u8 *maxSize = llf_p - offsetof(struct RfuFixed, LLFBuffer[1]);
|
||||||
|
|
||||||
// Does the volatile qualifier make sense?
|
|
||||||
// It's the same as:
|
|
||||||
// asm("":::"memory");
|
|
||||||
pakcketSize = maxSize - *(u8 *volatile *)&gRfuFixed;
|
pakcketSize = maxSize - *(u8 *volatile *)&gRfuFixed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-16
@@ -123,34 +123,30 @@ static void Sio32IDIntr(void)
|
|||||||
{
|
{
|
||||||
u32 regSIODATA32;
|
u32 regSIODATA32;
|
||||||
u16 delay;
|
u16 delay;
|
||||||
#ifndef NONMATCHING
|
|
||||||
register u32 rfuSIO32IdUnk0_times_16 asm("r1");
|
|
||||||
register u16 negRfuSIO32IdUnk6 asm("r0");
|
|
||||||
#else
|
|
||||||
u32 rfuSIO32IdUnk0_times_16;
|
u32 rfuSIO32IdUnk0_times_16;
|
||||||
u16 negRfuSIO32IdUnk6;
|
u16 negRfuSIO32IdUnk6;
|
||||||
#endif
|
|
||||||
|
|
||||||
regSIODATA32 = REG_SIODATA32;
|
regSIODATA32 = REG_SIODATA32;
|
||||||
if (gRfuSIO32Id.MS_mode != AGB_CLK_MASTER)
|
if (gRfuSIO32Id.MS_mode != AGB_CLK_MASTER)
|
||||||
REG_SIOCNT |= SIO_ENABLE;
|
REG_SIOCNT |= SIO_ENABLE;
|
||||||
rfuSIO32IdUnk0_times_16 = 16 * gRfuSIO32Id.MS_mode; // to handle side effect of inline asm
|
rfuSIO32IdUnk0_times_16 = (regSIODATA32 << (16 * gRfuSIO32Id.MS_mode)) >> 16;
|
||||||
rfuSIO32IdUnk0_times_16 = (regSIODATA32 << rfuSIO32IdUnk0_times_16) >> 16;
|
|
||||||
regSIODATA32 = (regSIODATA32 << 16 * (1 - gRfuSIO32Id.MS_mode)) >> 16;
|
regSIODATA32 = (regSIODATA32 << 16 * (1 - gRfuSIO32Id.MS_mode)) >> 16;
|
||||||
if (gRfuSIO32Id.lastId == 0)
|
if (gRfuSIO32Id.lastId == 0)
|
||||||
{
|
{
|
||||||
if (rfuSIO32IdUnk0_times_16 == gRfuSIO32Id.recv_id)
|
u16 backup = rfuSIO32IdUnk0_times_16;
|
||||||
|
if (backup == gRfuSIO32Id.recv_id)
|
||||||
{
|
{
|
||||||
if (gRfuSIO32Id.count > 3)
|
if (gRfuSIO32Id.count < 4)
|
||||||
{
|
{
|
||||||
|
backup = (u16)~gRfuSIO32Id.send_id;
|
||||||
|
if (gRfuSIO32Id.recv_id == backup)
|
||||||
|
{
|
||||||
|
if (regSIODATA32 == (u16)~gRfuSIO32Id.recv_id)
|
||||||
|
++gRfuSIO32Id.count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
gRfuSIO32Id.lastId = regSIODATA32;
|
gRfuSIO32Id.lastId = regSIODATA32;
|
||||||
}
|
|
||||||
else if (rfuSIO32IdUnk0_times_16 == (u16)~gRfuSIO32Id.send_id)
|
|
||||||
{
|
|
||||||
negRfuSIO32IdUnk6 = ~gRfuSIO32Id.recv_id;
|
|
||||||
if (regSIODATA32 == negRfuSIO32IdUnk6)
|
|
||||||
++gRfuSIO32Id.count;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user