GBA SIO: Fix SIOCNT SI pin value after attaching player 2 (fixes #2805)

This commit is contained in:
Vicki Pfau 2023-01-30 20:48:39 -08:00
parent d08b307be0
commit 92d86af955
2 changed files with 13 additions and 0 deletions

View File

@ -6,6 +6,7 @@ Features:
Emulation fixes:
- GBA Audio: Fix improperly deserializing GB audio registers (fixes mgba.io/i/2793)
- GBA Memory: Make VRAM access stalls only apply to BG RAM
- GBA SIO: Fix SIOCNT SI pin value after attaching player 2 (fixes mgba.io/i/2805)
- GBA Video: Disable BG target 1 blending when OBJ blending (fixes mgba.io/i/2722)
Other fixes:
- Core: Allow sending thread requests to a crashed core (fixes mgba.io/i/2784)

View File

@ -111,6 +111,18 @@ bool GBASIOLockstepNodeLoad(struct GBASIODriver* driver) {
if (node->id) {
node->d.p->rcnt |= 4;
node->d.p->siocnt = GBASIOMultiplayerFillSlave(node->d.p->siocnt);
int try;
for (try = 0; try < 3; ++try) {
uint16_t masterSiocnt;
ATOMIC_LOAD(masterSiocnt, node->p->players[0]->d.p->siocnt);
if (ATOMIC_CMPXCHG(node->p->players[0]->d.p->siocnt, masterSiocnt, GBASIOMultiplayerClearSlave(masterSiocnt))) {
break;
}
}
} else {
node->d.p->rcnt &= ~4;
node->d.p->siocnt = GBASIOMultiplayerClearSlave(node->d.p->siocnt);
}
break;
case SIO_NORMAL_8: