From a895cb9c5e9637207147c6d105af9d1f293ab0ca Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 26 Jan 2022 16:07:55 -0500 Subject: [PATCH] NES: fix issue for real --- src/engine/platform/nes.cpp | 9 ++++++--- src/engine/platform/nes.h | 1 + src/engine/platform/sound/nes/apu.c | 5 +++-- src/engine/platform/sound/nes/apu.h | 2 +- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 41213f1a..35014a2c 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -358,7 +358,7 @@ void DivPlatformNES::reset() { dacSample=-1; sampleBank=0; - apu_turn_on(nes); + apu_turn_on(nes,apuType); nes->apu.cpu_cycles=0; nes->apu.cpu_opcode_cycle=0; @@ -375,11 +375,13 @@ void DivPlatformNES::setPAL(bool pal) { if (pal) { rate=1662607; freqBase=FREQ_BASE_PAL; - nes->apu.type=1; + apuType=1; + nes->apu.type=apuType; } else { rate=1789773; freqBase=FREQ_BASE; - nes->apu.type=0; + apuType=0; + nes->apu.type=apuType; } } @@ -391,6 +393,7 @@ void DivPlatformNES::notifyInsDeletion(void* ins) { int DivPlatformNES::init(DivEngine* p, int channels, int sugRate, bool pal) { parent=p; + apuType=pal; dumpWrites=false; skipRegisterWrites=false; for (int i=0; i<5; i++) { diff --git a/src/engine/platform/nes.h b/src/engine/platform/nes.h index 68a9b671..a511a7a1 100644 --- a/src/engine/platform/nes.h +++ b/src/engine/platform/nes.h @@ -38,6 +38,7 @@ class DivPlatformNES: public DivDispatch { unsigned int dacPos; int dacSample; unsigned char sampleBank; + unsigned char apuType; struct NESAPU* nes; float freqBase; diff --git a/src/engine/platform/sound/nes/apu.c b/src/engine/platform/sound/nes/apu.c index 981a72ec..a278cbf7 100644 --- a/src/engine/platform/sound/nes/apu.c +++ b/src/engine/platform/sound/nes/apu.c @@ -190,7 +190,7 @@ void apu_tick(struct NESAPU* a, BYTE *hwtick) { a->r4011.cycles++; } -void apu_turn_on(struct NESAPU* a) { +void apu_turn_on(struct NESAPU* a, BYTE apu_type) { memset(&a->apu, 0x00, sizeof(a->apu)); memset(&a->r4015, 0x00, sizeof(a->r4015)); memset(&a->r4017, 0x00, sizeof(a->r4017)); @@ -202,7 +202,8 @@ void apu_turn_on(struct NESAPU* a) { memset(&a->DMC, 0x00, sizeof(a->DMC)); /* al reset e' sempre settato a 60Hz */ a->apu.mode = APU_60HZ; - a->apu.type = 0; + /* per favore non fatemi questo... e' terribile */ + a->apu.type = apu_type; apu_change_step(a->apu.step); /* valori iniziali dei vari canali */ a->S1.frequency = 1; diff --git a/src/engine/platform/sound/nes/apu.h b/src/engine/platform/sound/nes/apu.h index b8c7dd95..4d3649e0 100644 --- a/src/engine/platform/sound/nes/apu.h +++ b/src/engine/platform/sound/nes/apu.h @@ -628,7 +628,7 @@ static const WORD dmc_rate[3][16] = { }; EXTERNC void apu_tick(struct NESAPU* a, BYTE *hwtick); -EXTERNC void apu_turn_on(struct NESAPU* a); +EXTERNC void apu_turn_on(struct NESAPU* a, BYTE apu_type); #undef EXTERNC