diff options
author | Kurausukun <lord.uber1@gmail.com> | 2021-04-20 22:14:09 -0400 |
---|---|---|
committer | Kurausukun <lord.uber1@gmail.com> | 2021-04-20 22:14:09 -0400 |
commit | 3f2fc649f23526d3be54524e51dd84b1bfb63d76 (patch) | |
tree | 4f3d09a16dcf4651e9f94607904198228084a649 /src | |
parent | 03fb7d24e8ec9a3cd7eba17aa80ea4273a0a8da1 (diff) |
fix librfu_sio32id nonmatching (port from emerald)
Diffstat (limited to 'src')
-rw-r--r-- | src/librfu_rfu.c | 3 | ||||
-rw-r--r-- | src/librfu_sio32id.c | 28 |
2 files changed, 12 insertions, 19 deletions
diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index e82c8ed7b..9f642907b 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -1758,9 +1758,6 @@ static void rfu_constructSendLLFrame(void) { 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; } } diff --git a/src/librfu_sio32id.c b/src/librfu_sio32id.c index b6623540f..d726bca7b 100644 --- a/src/librfu_sio32id.c +++ b/src/librfu_sio32id.c @@ -123,34 +123,30 @@ static void Sio32IDIntr(void) { u32 regSIODATA32; u16 delay; -#ifndef NONMATCHING - register u32 rfuSIO32IdUnk0_times_16 asm("r1"); - register u16 negRfuSIO32IdUnk6 asm("r0"); -#else u32 rfuSIO32IdUnk0_times_16; u16 negRfuSIO32IdUnk6; -#endif regSIODATA32 = REG_SIODATA32; if (gRfuSIO32Id.MS_mode != AGB_CLK_MASTER) REG_SIOCNT |= SIO_ENABLE; - rfuSIO32IdUnk0_times_16 = 16 * gRfuSIO32Id.MS_mode; // to handle side effect of inline asm - rfuSIO32IdUnk0_times_16 = (regSIODATA32 << rfuSIO32IdUnk0_times_16) >> 16; + rfuSIO32IdUnk0_times_16 = (regSIODATA32 << (16 * gRfuSIO32Id.MS_mode)) >> 16; regSIODATA32 = (regSIODATA32 << 16 * (1 - gRfuSIO32Id.MS_mode)) >> 16; 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) { - gRfuSIO32Id.lastId = regSIODATA32; - } - else if (rfuSIO32IdUnk0_times_16 == (u16)~gRfuSIO32Id.send_id) - { - negRfuSIO32IdUnk6 = ~gRfuSIO32Id.recv_id; - if (regSIODATA32 == negRfuSIO32IdUnk6) - ++gRfuSIO32Id.count; + backup = (u16)~gRfuSIO32Id.send_id; + if (gRfuSIO32Id.recv_id == backup) + { + if (regSIODATA32 == (u16)~gRfuSIO32Id.recv_id) + ++gRfuSIO32Id.count; + } } + else + gRfuSIO32Id.lastId = regSIODATA32; } else { |