mirror of https://github.com/mgba-emu/mgba.git
GB SIO: Fix bidirectional transfer starting (fixes #2290)
This commit is contained in:
parent
d9092c6acf
commit
9ac6096c3d
1
CHANGES
1
CHANGES
|
@ -26,6 +26,7 @@ Emulation fixes:
|
||||||
- GB I/O: Fix writing to WAVE RAM behavior (fixes mgba.io/i/1334)
|
- GB I/O: Fix writing to WAVE RAM behavior (fixes mgba.io/i/1334)
|
||||||
- GB Memory: Add cursory cartridge open bus emulation (fixes mgba.io/i/2032)
|
- GB Memory: Add cursory cartridge open bus emulation (fixes mgba.io/i/2032)
|
||||||
- GB Serialize: Fix loading MBC1 states that affect bank 0 (fixes mgba.io/i/2402)
|
- GB Serialize: Fix loading MBC1 states that affect bank 0 (fixes mgba.io/i/2402)
|
||||||
|
- GB SIO: Fix bidirectional transfer starting (fixes mgba.io/i/2290)
|
||||||
- GB Video: Draw SGB border pieces that overlap GB graphics (fixes mgba.io/i/1339)
|
- GB Video: Draw SGB border pieces that overlap GB graphics (fixes mgba.io/i/1339)
|
||||||
- GBA: Improve timing when not booting from BIOS
|
- GBA: Improve timing when not booting from BIOS
|
||||||
- GBA: Fix expected entry point for multiboot ELFs (fixes mgba.io/i/2450)
|
- GBA: Fix expected entry point for multiboot ELFs (fixes mgba.io/i/2450)
|
||||||
|
|
|
@ -157,7 +157,7 @@ static int32_t _masterUpdate(struct GBSIOLockstepNode* node) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Tell the other GBs they can continue up to where we were
|
// Tell the other GBs they can continue up to where we were
|
||||||
node->p->d.addCycles(&node->p->d, 0, node->eventDiff);
|
node->p->d.addCycles(&node->p->d, node->id, node->eventDiff);
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
node->phase = node->p->d.transferActive;
|
node->phase = node->p->d.transferActive;
|
||||||
#endif
|
#endif
|
||||||
|
@ -252,6 +252,12 @@ static uint8_t GBSIOLockstepNodeWriteSC(struct GBSIODriver* driver, uint8_t valu
|
||||||
mLockstepLock(&node->p->d);
|
mLockstepLock(&node->p->d);
|
||||||
bool claimed = false;
|
bool claimed = false;
|
||||||
if (ATOMIC_CMPXCHG(node->p->masterClaimed, claimed, true)) {
|
if (ATOMIC_CMPXCHG(node->p->masterClaimed, claimed, true)) {
|
||||||
|
if (node->id != 0) {
|
||||||
|
node->p->players[0]->id = 1;
|
||||||
|
node->p->players[1] = node->p->players[0];
|
||||||
|
node->p->players[0] = node->p->players[1];
|
||||||
|
node->id = 0;
|
||||||
|
}
|
||||||
ATOMIC_STORE(node->p->d.transferActive, TRANSFER_STARTING);
|
ATOMIC_STORE(node->p->d.transferActive, TRANSFER_STARTING);
|
||||||
ATOMIC_STORE(node->p->d.transferCycles, GBSIOCyclesPerTransfer[(value >> 1) & 1]);
|
ATOMIC_STORE(node->p->d.transferCycles, GBSIOCyclesPerTransfer[(value >> 1) & 1]);
|
||||||
mTimingDeschedule(&driver->p->p->timing, &driver->p->event);
|
mTimingDeschedule(&driver->p->p->timing, &driver->p->event);
|
||||||
|
|
Loading…
Reference in New Issue