Fix #228
This commit is contained in:
parent
38ee020653
commit
b806ae4e82
12
Core/apu.c
12
Core/apu.c
@ -329,11 +329,16 @@ static void tick_noise_envelope(GB_gameboy_t *gb)
|
|||||||
void GB_apu_div_event(GB_gameboy_t *gb)
|
void GB_apu_div_event(GB_gameboy_t *gb)
|
||||||
{
|
{
|
||||||
if (!gb->apu.global_enable) return;
|
if (!gb->apu.global_enable) return;
|
||||||
if (gb->apu.skip_div_event) {
|
if (gb->apu.skip_div_event == GB_SKIP_DIV_EVENT_SKIP) {
|
||||||
gb->apu.skip_div_event = false;
|
gb->apu.skip_div_event = GB_SKIP_DIV_EVENT_SKIPPED;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (gb->apu.skip_div_event == GB_SKIP_DIV_EVENT_SKIPPED) {
|
||||||
|
gb->apu.skip_div_event = GB_SKIP_DIV_EVENT_INACTIVE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
gb->apu.div_divider++;
|
gb->apu.div_divider++;
|
||||||
|
}
|
||||||
|
|
||||||
if ((gb->apu.div_divider & 1) == 0) {
|
if ((gb->apu.div_divider & 1) == 0) {
|
||||||
for (unsigned i = GB_SQUARE_2 + 1; i--;) {
|
for (unsigned i = GB_SQUARE_2 + 1; i--;) {
|
||||||
@ -534,7 +539,8 @@ void GB_apu_init(GB_gameboy_t *gb)
|
|||||||
/* APU glitch: When turning the APU on while DIV's bit 4 (or 5 in double speed mode) is on,
|
/* APU glitch: When turning the APU on while DIV's bit 4 (or 5 in double speed mode) is on,
|
||||||
the first DIV/APU event is skipped. */
|
the first DIV/APU event is skipped. */
|
||||||
if (gb->div_counter & (gb->cgb_double_speed? 0x2000 : 0x1000)) {
|
if (gb->div_counter & (gb->cgb_double_speed? 0x2000 : 0x1000)) {
|
||||||
gb->apu.skip_div_event = true;
|
gb->apu.skip_div_event = GB_SKIP_DIV_EVENT_SKIP;
|
||||||
|
gb->apu.div_divider = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +114,10 @@ typedef struct
|
|||||||
|
|
||||||
} noise_channel;
|
} noise_channel;
|
||||||
|
|
||||||
bool skip_div_event;
|
#define GB_SKIP_DIV_EVENT_INACTIVE 0
|
||||||
|
#define GB_SKIP_DIV_EVENT_SKIPPED 1
|
||||||
|
#define GB_SKIP_DIV_EVENT_SKIP 2
|
||||||
|
uint8_t skip_div_event;
|
||||||
bool current_lfsr_sample;
|
bool current_lfsr_sample;
|
||||||
} GB_apu_t;
|
} GB_apu_t;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user