mirror of https://github.com/mgba-emu/mgba.git
GBA SIO: Fix reseting when there are SIO devices attached
This commit is contained in:
parent
615ab298d1
commit
401bc9e9d6
1
CHANGES
1
CHANGES
|
@ -74,6 +74,7 @@ Bugfixes:
|
||||||
- GBA: Ensure cycles never go negative
|
- GBA: Ensure cycles never go negative
|
||||||
- Util: Fix formatting of floats
|
- Util: Fix formatting of floats
|
||||||
- Debugger: Fix use-after-free in breakpoint clearing code
|
- Debugger: Fix use-after-free in breakpoint clearing code
|
||||||
|
- GBA SIO: Fix reseting when there are SIO devices attached
|
||||||
Misc:
|
Misc:
|
||||||
- Qt: Handle saving input settings better
|
- Qt: Handle saving input settings better
|
||||||
- Debugger: Free watchpoints in addition to breakpoints
|
- Debugger: Free watchpoints in addition to breakpoints
|
||||||
|
|
|
@ -163,8 +163,7 @@ void GBAReset(struct ARMCore* cpu) {
|
||||||
GBAAudioReset(&gba->audio);
|
GBAAudioReset(&gba->audio);
|
||||||
GBAIOInit(gba);
|
GBAIOInit(gba);
|
||||||
|
|
||||||
GBASIODeinit(&gba->sio);
|
GBASIOReset(&gba->sio);
|
||||||
GBASIOInit(&gba->sio);
|
|
||||||
|
|
||||||
gba->timersEnabled = 0;
|
gba->timersEnabled = 0;
|
||||||
memset(gba->timers, 0, sizeof(gba->timers));
|
memset(gba->timers, 0, sizeof(gba->timers));
|
||||||
|
|
|
@ -48,14 +48,10 @@ static void _switchMode(struct GBASIO* sio) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GBASIOInit(struct GBASIO* sio) {
|
void GBASIOInit(struct GBASIO* sio) {
|
||||||
sio->rcnt = RCNT_INITIAL;
|
|
||||||
sio->siocnt = 0;
|
|
||||||
sio->mode = -1;
|
|
||||||
sio->activeDriver = 0;
|
|
||||||
sio->drivers.normal = 0;
|
sio->drivers.normal = 0;
|
||||||
sio->drivers.multiplayer = 0;
|
sio->drivers.multiplayer = 0;
|
||||||
sio->drivers.joybus = 0;
|
sio->drivers.joybus = 0;
|
||||||
_switchMode(sio);
|
GBASIOReset(sio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GBASIODeinit(struct GBASIO* sio) {
|
void GBASIODeinit(struct GBASIO* sio) {
|
||||||
|
@ -70,6 +66,15 @@ void GBASIODeinit(struct GBASIO* sio) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GBASIOReset(struct GBASIO* sio) {
|
||||||
|
GBASIODeinit(sio);
|
||||||
|
sio->rcnt = RCNT_INITIAL;
|
||||||
|
sio->siocnt = 0;
|
||||||
|
sio->mode = -1;
|
||||||
|
sio->activeDriver = 0;
|
||||||
|
_switchMode(sio);
|
||||||
|
}
|
||||||
|
|
||||||
void GBASIOSetDriverSet(struct GBASIO* sio, struct GBASIODriverSet* drivers) {
|
void GBASIOSetDriverSet(struct GBASIO* sio, struct GBASIODriverSet* drivers) {
|
||||||
GBASIOSetDriver(sio, drivers->normal, SIO_NORMAL_8);
|
GBASIOSetDriver(sio, drivers->normal, SIO_NORMAL_8);
|
||||||
GBASIOSetDriver(sio, drivers->multiplayer, SIO_MULTI);
|
GBASIOSetDriver(sio, drivers->multiplayer, SIO_MULTI);
|
||||||
|
|
|
@ -65,6 +65,7 @@ struct GBASIO {
|
||||||
|
|
||||||
void GBASIOInit(struct GBASIO* sio);
|
void GBASIOInit(struct GBASIO* sio);
|
||||||
void GBASIODeinit(struct GBASIO* sio);
|
void GBASIODeinit(struct GBASIO* sio);
|
||||||
|
void GBASIOReset(struct GBASIO* sio);
|
||||||
|
|
||||||
void GBASIOSetDriverSet(struct GBASIO* sio, struct GBASIODriverSet* drivers);
|
void GBASIOSetDriverSet(struct GBASIO* sio, struct GBASIODriverSet* drivers);
|
||||||
void GBASIOSetDriver(struct GBASIO* sio, struct GBASIODriver* driver, enum GBASIOMode mode);
|
void GBASIOSetDriver(struct GBASIO* sio, struct GBASIODriver* driver, enum GBASIOMode mode);
|
||||||
|
|
Loading…
Reference in New Issue