From 00421cd046a60b2ea204c36be4294bcb2f3c415f Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 6 Jun 2022 22:35:35 -0700 Subject: [PATCH] GB Audio: Fix APU re-enable timing glitch --- CHANGES | 1 + .../07-len sweep period sync/baseline_0000.png | Bin 0 -> 788 bytes .../07-len sweep period sync/config.ini | 2 -- .../07-len sweep period sync/xbaseline_0000.png | Bin 1260 -> 0 bytes .../08-len ctr during power/baseline_0000.png | Bin 0 -> 870 bytes .../cgb_sound/08-len ctr during power/config.ini | 2 -- .../08-len ctr during power/xbaseline_0000.png | Bin 968 -> 0 bytes .../07-len sweep period sync/baseline_0000.png | Bin 0 -> 788 bytes .../07-len sweep period sync/config.ini | 2 -- .../07-len sweep period sync/xbaseline_0000.png | Bin 1260 -> 0 bytes .../08-len ctr during power/baseline_0000.png | Bin 0 -> 890 bytes .../dmg_sound/08-len ctr during power/config.ini | 2 -- .../08-len ctr during power/xbaseline_0000.png | Bin 975 -> 0 bytes src/gb/audio.c | 2 +- 14 files changed, 2 insertions(+), 9 deletions(-) create mode 100644 cinema/gb/blargg/cgb_sound/07-len sweep period sync/baseline_0000.png delete mode 100644 cinema/gb/blargg/cgb_sound/07-len sweep period sync/config.ini delete mode 100644 cinema/gb/blargg/cgb_sound/07-len sweep period sync/xbaseline_0000.png create mode 100644 cinema/gb/blargg/cgb_sound/08-len ctr during power/baseline_0000.png delete mode 100644 cinema/gb/blargg/cgb_sound/08-len ctr during power/config.ini delete mode 100644 cinema/gb/blargg/cgb_sound/08-len ctr during power/xbaseline_0000.png create mode 100644 cinema/gb/blargg/dmg_sound/07-len sweep period sync/baseline_0000.png delete mode 100644 cinema/gb/blargg/dmg_sound/07-len sweep period sync/config.ini delete mode 100644 cinema/gb/blargg/dmg_sound/07-len sweep period sync/xbaseline_0000.png create mode 100644 cinema/gb/blargg/dmg_sound/08-len ctr during power/baseline_0000.png delete mode 100644 cinema/gb/blargg/dmg_sound/08-len ctr during power/config.ini delete mode 100644 cinema/gb/blargg/dmg_sound/08-len ctr during power/xbaseline_0000.png diff --git a/CHANGES b/CHANGES index e6b9cf351..6f0f13670 100644 --- a/CHANGES +++ b/CHANGES @@ -22,6 +22,7 @@ Emulation fixes: - GB Audio: Fix channel 1/2 reseting edge cases (fixes mgba.io/i/1925) - GB Audio: Properly apply per-model audio differences - GB Audio: Revamp channel rendering + - GB Audio: Fix APU re-enable timing glitch - 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 Video: Draw SGB border pieces that overlap GB graphics (fixes mgba.io/i/1339) diff --git a/cinema/gb/blargg/cgb_sound/07-len sweep period sync/baseline_0000.png b/cinema/gb/blargg/cgb_sound/07-len sweep period sync/baseline_0000.png new file mode 100644 index 0000000000000000000000000000000000000000..c5a976f9bc2a03b3103cc2086317a8670f411efc GIT binary patch literal 788 zcmeAS@N?(olHy`uVBq!ia0vp^3xIe62NRHFxc>b*0|V1-PZ!6KiaBp@Uo2a!AihMu zJ;8$c@Ng3PUh!{oP?Y%7Ij>uf_D5aw-IcxSL(QwS`P<)x^(QTz66E#r=hwQ;R^JxR z`TSs()}0a$n{W5G+?rEexb@qeS&DAo;`4)g-hQ}U^?!PgdPIHM|FtvoQ~qpxE3-## zN9(S!tj&{|f)^pZ~Ms|Hii*a%*l!ZGQcK`Mc*I zrS{xtj(^zq@yMgU|8L#b=>MlBzVk`=E&uZKi+;Zf)<3>`{v-3B#>Pi4AANK4`w`20 z`-UHlQO`G&-afqf+_}j_xyinVr>1dV#V>xx9*p`yZYyu|ANMcdnU1#7pP`i zTIpYl7uUZ2yD+bU{pr*-gr^8CF3t`9l4XB< z+dXBuuJtA_RTpjdRR3q}@c!8Mg9ZEe2`7eipF8{FAG3eU+a!B%bNSVm$|ZSrv-g^( zrTpCaJEqj{)K%M`cYk|CUw(Pw)5P_q3m5)w=3eXXU-tg~-jpM=gnTb5Z(sf9eGbPo zeYv^%n}A&R0`qSVKc)VQS-1Mf#z+hOk^|^za7X^xtX+x@#UH3lc< literal 0 HcmV?d00001 diff --git a/cinema/gb/blargg/cgb_sound/07-len sweep period sync/config.ini b/cinema/gb/blargg/cgb_sound/07-len sweep period sync/config.ini deleted file mode 100644 index 7ddee425b..000000000 --- a/cinema/gb/blargg/cgb_sound/07-len sweep period sync/config.ini +++ /dev/null @@ -1,2 +0,0 @@ -[testinfo] -fail=1 diff --git a/cinema/gb/blargg/cgb_sound/07-len sweep period sync/xbaseline_0000.png b/cinema/gb/blargg/cgb_sound/07-len sweep period sync/xbaseline_0000.png deleted file mode 100644 index ae283b3b6f79a0756a7253e60f0a319a966ad47a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1260 zcmeAS@N?(olHy`uVBq!ia0vp^3xIe62NRHFxc>b*0|U!uPZ!6KiaBrR-Yk2pAi&z% z|NsAVQ~r4;T9#&tMSk+VdfF$2XGW9Tp$RRu_suUnEi7ey5F?<&*L2izg9V2e`@u&F z5i%^@%?X8rN^s8e*YgDq6~6q@edy!SCrhP{NB`J-Wbd9?>$cyW^}b52(}_c|<@*1} z+n;Xge)IdC4=1NOZ)f@+=d))cp09cu(=9OX&*$wbrP}{yJm0^>&h6K|KiLz{2iMR3 zE>pvEr{zxGi4CVMiY%I3{$#z~HTV3-b&W;gSC>z#Q>fql^zEPAd&)O5w@=%2vgSoy zZ}{TP(((^`e%-k7v;K|T)0=*qI#lH~`O5VdZ~VIMT}7Gj{U>I|Hy$o3|0X-*^CPYs ztXH3Hc)a)M%_ZCIj(&;#y76;<+su2vZini&Z{2?~B7a{cvr>di*rp?zYf^HTRvP}V zpJZ{q{YC-%rKvjhKTll`KjT^7d;D9pD0gqtpZU#?w=PUkWqcif*4jn>h~c(xJrPIZ zGMl_N$W3P3$J4O;VDSbE8+PI%&!nuRrXm04s&x6;H?-6xX3fugP?B=}+STtI?`%W2 zb3NDGneFNK?Wj)X_8&Q+MHelWzR=uK_(SKt&ScxX)jUkk56)hfV7y`d?aBUcB_69V z|9yOeCEeuf`p*YVE6<(V^eQGtxAywZ8)~bS!tUiIPn~%tarK<}d2{%;ZO)dPa(ZXI z$-2PbF{|w^*4Q15U3>R=^Y@FNcYIcne{eXas5xo!_IjDxc;yR1Iq!?_ZN9(VXoJ2L z-~M@DjDK&*cGZ7BakbT=yYtTN{*`~rZ1=0echPcZrWNdckZ;LZ7`pw#^k|=*|H?~B zOpoxg2e0)C58V{DZu3j0LM`7S&vn-G^=BWwt?hX3*Ad18^QO%?zq@Q|S9sc~(skMr z#c#th|9_Xs;WoZz-X)(<$0GgoS!UOFqqD!hhiUHLw<;!j!+yK1MYrS4MDjWMYtHk< zoZRI0V`0SnTg5*s&zo_dwp}^tt>ullvjukdbP{u{emIEF(cHdsok6E*Q~xp_tH*)- z+F#}y)>o%LNtM_RN-dGo3@+atH(!71I*NNI4NH%uPEBtZ& z((Q%PdJ7B1@0xN=wvOAu+#Bz<%hGAfXWatMUV+%;|BCgTySFE0g)gnY$-3?k*TvZE z&1F?PxaKtb*0|T?Jr;B4q#hkaZFHUPx5MkK* z`2YV+zc0usiMSlSQur*@{E)Ooq2S>)#2@9q%lDlfe)izYJ=*)z z-yVIiN`GC`!wPk7zg;o2*L65uwS66K*?oy4Z)@FD;h#E_mzi5RRX(g}e}7c+k?V~& zPiJ!FpH+ADcRluf!EE?Z@?iI-^wYb)7Vq40sMJ8F i{zLoX1PiV<6rw(9k&a>7)ZL+={Nw5B=d#Wzp$P!(m8ZV| literal 0 HcmV?d00001 diff --git a/cinema/gb/blargg/cgb_sound/08-len ctr during power/config.ini b/cinema/gb/blargg/cgb_sound/08-len ctr during power/config.ini deleted file mode 100644 index 7ddee425b..000000000 --- a/cinema/gb/blargg/cgb_sound/08-len ctr during power/config.ini +++ /dev/null @@ -1,2 +0,0 @@ -[testinfo] -fail=1 diff --git a/cinema/gb/blargg/cgb_sound/08-len ctr during power/xbaseline_0000.png b/cinema/gb/blargg/cgb_sound/08-len ctr during power/xbaseline_0000.png deleted file mode 100644 index 4dbe59509f81aece289326cc39adf71b2e832d38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 968 zcmeAS@N?(olHy`uVBq!ia0vp^3xIe62NRHFxc>b*0|Rrvr;B4q#hkaZZx^jm5MU@h z{r`XJ`NLs?hkONk=dF7;U1g1=d$gNF`Q7ief_n3p3s0yHG>~CEJTi!z`|Pik^7{VX z*M2|yt?8j}w$l4&zHdAubF`+#`^S-$HJdpnWxeHKTW$2m_)ul_G~IuX_X&rr zVLAD(P0K~s?@qqjWAh}rWBOs6=Dn>BdfW3k_y3Xks)dIWRj#I;%}CiS6Wa8TOYnGS zaPR*!zt8Uc@m81rvAL2=*s06Eb>}_T{nxJIQna;A`$5dp%58P`Vs-Ba^mgYQpB-}~ z+yCI>H^1xdGbH6spMH7qi+L7Xt8aJyIJw-}F#F@@kjdZN{#-tOd-CTCwibKepSo{s zB_Xq`K$PeBR2_?#CA#wkTYb}?t^XvlR<7pipHR6c>9eNjm$ZC4_WyQm{5diILtTfB zMgLv@Gv!50%AU4V*?<0pvsjL23Smb5&1sjiir;D;x-grq|F|d9xjid`crJAmmsjh~ z-&1?`@KrfkIit@~Uj7G)3qP4hq{oS_n!E1eed+c}iF(PM3U(*c-$(A;qcZ=SP}P5? z-_?GnjefYceo1t$JF}QyI_q}-v6<(W*LGf!>;EQf-}5q)|My!Pd(Sz=H~&@Tn%P+O zB=;U$n_I86-}_Ui{)d?sTX`n$-Ew>S{ac@E9(`NlqJI0j-p3_>(rDN4=x9qro@tb0e9M5u7{=DEd_RICR zZ@;T%uw`G(wPid0ZeMjqP4#-=ho_rsuFTuQugh%u=!EZ|s23W3FT38`^Ot@PsJks( zytBDks5X&*^JY7z)h_D7Z%^9Z^p#KKJ-le1Tusu(-TU`WYd-V9Mxu}Z&qED~z9tmn ZoV`@hk}#9)AFhFNsHdx+%Q~loCIF^yuay7* diff --git a/cinema/gb/blargg/dmg_sound/07-len sweep period sync/baseline_0000.png b/cinema/gb/blargg/dmg_sound/07-len sweep period sync/baseline_0000.png new file mode 100644 index 0000000000000000000000000000000000000000..c5a976f9bc2a03b3103cc2086317a8670f411efc GIT binary patch literal 788 zcmeAS@N?(olHy`uVBq!ia0vp^3xIe62NRHFxc>b*0|V1-PZ!6KiaBp@Uo2a!AihMu zJ;8$c@Ng3PUh!{oP?Y%7Ij>uf_D5aw-IcxSL(QwS`P<)x^(QTz66E#r=hwQ;R^JxR z`TSs()}0a$n{W5G+?rEexb@qeS&DAo;`4)g-hQ}U^?!PgdPIHM|FtvoQ~qpxE3-## zN9(S!tj&{|f)^pZ~Ms|Hii*a%*l!ZGQcK`Mc*I zrS{xtj(^zq@yMgU|8L#b=>MlBzVk`=E&uZKi+;Zf)<3>`{v-3B#>Pi4AANK4`w`20 z`-UHlQO`G&-afqf+_}j_xyinVr>1dV#V>xx9*p`yZYyu|ANMcdnU1#7pP`i zTIpYl7uUZ2yD+bU{pr*-gr^8CF3t`9l4XB< z+dXBuuJtA_RTpjdRR3q}@c!8Mg9ZEe2`7eipF8{FAG3eU+a!B%bNSVm$|ZSrv-g^( zrTpCaJEqj{)K%M`cYk|CUw(Pw)5P_q3m5)w=3eXXU-tg~-jpM=gnTb5Z(sf9eGbPo zeYv^%n}A&R0`qSVKc)VQS-1Mf#z+hOk^|^za7X^xtX+x@#UH3lc< literal 0 HcmV?d00001 diff --git a/cinema/gb/blargg/dmg_sound/07-len sweep period sync/config.ini b/cinema/gb/blargg/dmg_sound/07-len sweep period sync/config.ini deleted file mode 100644 index 7ddee425b..000000000 --- a/cinema/gb/blargg/dmg_sound/07-len sweep period sync/config.ini +++ /dev/null @@ -1,2 +0,0 @@ -[testinfo] -fail=1 diff --git a/cinema/gb/blargg/dmg_sound/07-len sweep period sync/xbaseline_0000.png b/cinema/gb/blargg/dmg_sound/07-len sweep period sync/xbaseline_0000.png deleted file mode 100644 index ae283b3b6f79a0756a7253e60f0a319a966ad47a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1260 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 diff --git a/src/gb/audio.c b/src/gb/audio.c index 19f265c47..47911f794 100644 --- a/src/gb/audio.c +++ b/src/gb/audio.c @@ -451,7 +451,7 @@ void GBAudioWriteNR52(struct GBAudio* audio, uint8_t value) { audio->skipFrame = false; audio->frame = 7; - if (audio->p && audio->p->timer.internalDiv & 0x400) { + if (audio->p && audio->p->timer.internalDiv & (0x100 << audio->p->doubleSpeed)) { audio->skipFrame = true; } }