mirror of https://github.com/mgba-emu/mgba.git
GB Audio: Fix crashes when audio->p is not set (e.g. GBA mode)
This commit is contained in:
parent
c89c3964db
commit
4fca30b73d
|
@ -157,10 +157,12 @@ void GBAudioWriteNR14(struct GBAudio* audio, uint8_t value) {
|
||||||
--audio->ch1.control.length;
|
--audio->ch1.control.length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
audio->nextEvent = audio->p->cpu->cycles;
|
|
||||||
if (audio->p) {
|
|
||||||
// TODO: Don't need p
|
// TODO: Don't need p
|
||||||
|
if (audio->p) {
|
||||||
|
audio->nextEvent = audio->p->cpu->cycles;
|
||||||
audio->p->cpu->nextEvent = audio->nextEvent;
|
audio->p->cpu->nextEvent = audio->nextEvent;
|
||||||
|
} else {
|
||||||
|
audio->nextEvent = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*audio->nr52 &= ~0x0001;
|
*audio->nr52 &= ~0x0001;
|
||||||
|
@ -213,10 +215,12 @@ void GBAudioWriteNR24(struct GBAudio* audio, uint8_t value) {
|
||||||
--audio->ch2.control.length;
|
--audio->ch2.control.length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
audio->nextEvent = audio->p->cpu->cycles;
|
|
||||||
if (audio->p) {
|
|
||||||
// TODO: Don't need p
|
// TODO: Don't need p
|
||||||
|
if (audio->p) {
|
||||||
|
audio->nextEvent = audio->p->cpu->cycles;
|
||||||
audio->p->cpu->nextEvent = audio->nextEvent;
|
audio->p->cpu->nextEvent = audio->nextEvent;
|
||||||
|
} else {
|
||||||
|
audio->nextEvent = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*audio->nr52 &= ~0x0002;
|
*audio->nr52 &= ~0x0002;
|
||||||
|
@ -282,12 +286,15 @@ void GBAudioWriteNR34(struct GBAudio* audio, uint8_t value) {
|
||||||
audio->eventDiff = 0;
|
audio->eventDiff = 0;
|
||||||
}
|
}
|
||||||
// TODO: Where does this cycle delay come from?
|
// TODO: Where does this cycle delay come from?
|
||||||
audio->nextCh3 = audio->eventDiff + audio->p->cpu->cycles + 4 + 2 * (2048 - audio->ch3.rate);
|
|
||||||
audio->ch3.readable = false;
|
audio->ch3.readable = false;
|
||||||
audio->nextEvent = audio->p->cpu->cycles;
|
|
||||||
if (audio->p) {
|
|
||||||
// TODO: Don't need p
|
// TODO: Don't need p
|
||||||
|
if (audio->p) {
|
||||||
|
audio->nextCh3 = audio->eventDiff + audio->p->cpu->cycles + 4 + 2 * (2048 - audio->ch3.rate);
|
||||||
|
audio->nextEvent = audio->p->cpu->cycles;
|
||||||
audio->p->cpu->nextEvent = audio->nextEvent;
|
audio->p->cpu->nextEvent = audio->nextEvent;
|
||||||
|
} else {
|
||||||
|
audio->nextCh3 = audio->eventDiff + 4 + 2 * (2048 - audio->ch3.rate);
|
||||||
|
audio->nextEvent = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*audio->nr52 &= ~0x0004;
|
*audio->nr52 &= ~0x0004;
|
||||||
|
@ -344,10 +351,12 @@ void GBAudioWriteNR44(struct GBAudio* audio, uint8_t value) {
|
||||||
--audio->ch4.length;
|
--audio->ch4.length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
audio->nextEvent = audio->p->cpu->cycles;
|
|
||||||
if (audio->p) {
|
|
||||||
// TODO: Don't need p
|
// TODO: Don't need p
|
||||||
|
if (audio->p) {
|
||||||
|
audio->nextEvent = audio->p->cpu->cycles;
|
||||||
audio->p->cpu->nextEvent = audio->nextEvent;
|
audio->p->cpu->nextEvent = audio->nextEvent;
|
||||||
|
} else {
|
||||||
|
audio->nextEvent = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*audio->nr52 &= ~0x0008;
|
*audio->nr52 &= ~0x0008;
|
||||||
|
|
Loading…
Reference in New Issue