#ff s nٙgcnܙ3>CGB_SOUNDnPG*  x>&>&>%>w$>>>!&>> s!>>>y$>j$!&~fO |>>>y$>j$!&~f8L 8>>>>& >0* q(0    O&(>y$>j$ xɷ>y$>j$= g>$% o&v(6&(&ʎ">>>>& 6@6& 7x>>>>& @ (6@6& M M>0>M͐!>>>>& >x >>>>>͆$>y$>j$ %}|!$$P!Wogz!$!$Ͷ"" x <͓%ͥ(%: %ok ͥ( <<+z+O(͓%L(% ͥ(.'00ɷ>j$= ɷ>y$>j$= |w$}j$>!F-N-V-&80_xGyOzW{ % &"r,q,p $͊'> ͊'> ͊'%$* A%f%p%v% %|%> ͊'|%R%xyz{|}x|%yBKDM$7͆% 80Ê' 8 d԰% Ͱ%0$/0Ox$y##*}|;%ʹ$ %%Passed>&<(=(%Done>&og~( %% % >&////|%|%|%6%   ö$-& &*$ x 1~!!'!!'>>>>&>&>%>w$+G'͡'%%cgb_sound Ͷ$>͆$>y$>j$ #>&1&/(++ % %Failed %Failed #͗% % >"  %Internal error>&> >>>>>a>>og#6}|+wp'W(x(D B('> '!(!(>>>͈(Z!w, $ >h>i>i>i>i>i>i>i>i >O>'>O(`""  ͐'>@>C>Gì(͐'>@ɯ> (!* ( x(-5nw͐'͵(͈(͵(ì(> !2 >͐'͵(ֈBo&&))"{ lllllll>`<|fl0`Ɔ68of; p88pf< 80 0`0 ~~0  0``nff>fff~fff<<f<flxpxlf``````~fv~~nffffff<<ff<f>``|fff|<```<>fff>ff>|``|ffff8<p``flxlf8<|fffffff>|f```>`<|~ffff>fff<|lf<|~ 0~0p p` >&#@>&>&>%>w$>>>!&>> >>>D>5!&~fO |>>>D>5!&~f8L 8>>>>& >0* q(0    O&(>D>5 xɷ>D>5= g>$% o&v(6&(&0>>>>& 6@6& 7x>>>>& @ (6@6& ͉#NR10-NR51 and wave RAM write/read ͉NR52 write/read>&&p>&&͉$Powering APU shouldn't affect wave>7ͤ>&!0*7}@ >&͉-Powering APU off should write 0 to all regs>ͯ>&>&͉-When off, should ignore writes to registers>&>ͯ>&>&͉.When off, should allow normal register reads>&>&é! ,}& !}&( r>%>,}@ ɀ??p00ɷ>5= ɷ>D>5= |B}5>!F-N-V-&80_xGyOzW{ % &"r,q,p Č> > * 1;AG> Gxyz{|}xGyBKDM͌7Q 80 8 d{ {0/0Oxy##*}|͉Passed>ñ<(=(Done>ñog~( >ñ////GGG   Á*͌ x 1~!!>>>>&>&>%>w$͜01-registers ́>Q>D>5X>ñ1 Failed Failed #b >"  Internal error>ñ?×>&>&>%>w$>>>!&>> >>>͛>͌!&~fO |>>>͛>͌!&~f8L 8>>>>& >0* q(0    O&(>͛>͌ xɷ>͛>͌= g>$% o&v(6&(&0>>>>& 6@6& 7x>>>>& @ (6@6& >͹'>>>@j>&>͹'>>>@j>&>͹'>>>j>&>͹'>>>@j>!&2>͛>͌O>@O>O>G&.>͛>͌G&.'Length becoming 0 should clear status>/͛>͌ $Length can be reloaded at any timeO>>͛>͌ ;Attempting to load length with 0 should load with maximumO>= !Trigger shouldn't affect length>͛>͌O>>͛>͌ *Trigger should treat 0 length as maximum>?͛>͌O>= ATrigger with disabled length should convert 0 length to maximum>?͛>͌O>O>O>@= .Disabling length shouldn't re-enable channel>?͛>͌O>. Disabling length should stop length clockingO>>?͛>͌O>@>/͛>͌ ' Reloading shouldn't re-enable channel>?͛>͌O>, Disabled channel should still clock length>?͛>͌O>>?͛>͌O>>/͛>͌ < Disabled channel should still convert 0 load to max length>?͛>͌O>>ͨ>͛>͌O>! 2 Disabling DAC should disable channel immediately>͛>͌O>O>/Disabled DAC should prevent enable at triggerO>O>O>*Enabling DAC shouldn't re-enable channelO>O>>͛>͌O>O>O>O>-Volume reaching 0 shouldn't disable channelO>O>>ͨ>/͛>͌ Q00ɷ>͌= ɷ>͛>͌= |͙}͌>!F-N-V-&80_xGyOzW{ % &"r,q,p m> m> m<* c͈͒͘/͞> m͞txyz{|}x͞yBKDM7ͨ 80m 8 d 0/0Oxy##*}|/7Passed><(=(7Done>og~( /////͞͞͞X   O.* x 1~!D!D>>>>&>&>%>w$klj702-len ctr >ͨ>͛>͌X>1jno/ 7Failed 7Failed #͹/ >"  7Internal error>?X>&>&>%>w$>>>!&>> >>>\>M!&~fO |>>>\>M!&~f8L 8>>>>& >0* q(0    O&(>\>M xɷ>\>M= g>$% o&v(6&(&0>>>>& 6@6& 7x>>>>& @ (6@6& >z>>>@+>>z>>>@+>>z>>>+>>z>>>@+>!2O>O>>\>MGO>xGͺ͡AEnabling in second half of length period shouldn't clock lengthO>>\>MO>@>͡=Enabling in first half of length period should clock lengthO>>\>MO>@>͡,Anything besides enabling shouldnt't clockO>@O>O>@O>O>>͡1If clock makes length zero, should disable chanO>O>@G&͡1If length already reached zero, shouldn't clockO>O>@O>O>@O>O>@͡3Trigger should un-freeze length that reached zeroO>O>@O>O>>\>MO>@>\>M͡8Trigger that un-freezes enabled length should clock itO>O>@O>O>=O>O>@O>=͡L Triggering that clocks length of 1 should clock twice and shouldn't freezeO>O>=͡+ Trigger shouldn't otherwise affect lengthO>>\>MO>O>O>O>O>>͡3 Disabled DAC shouldn't stop other trigger effectsO>O>O>O>O>O>O>=͡8 Other trigger effects should still occur when disabled2O>O>O>O>@O>O>@O>O>@O>O>@O>O>G&>\>M&00ɷ>M= ɷ>\>M= |Z}M>!F-N-V-&80_xGyOzW{ % &"r,q,p Ĥ.> .> .* $ISY_> ._5xyz{|}x_yBKDMͤ7i 80. 8 dԓ ͓0/0Oxy##*}|͗͡Passed><(=(Done>og~( >////___   Ù*ͤ x 1~!!>>>>&>&>%>w$,-+ʹ03-trigger ͙>i>\>MX>1+/0 Failed Failed #z >"  Internal error>?>&>&>%>w$>>>!&>> >>> >!&~fO |>>> >!&~f8L 8>>>>& >0* q(0    O&(> > xɷ> >= g>$% o&v(6&(&0>>>>& 6@6& 7x>>>>& @ (6@6& }>@>>&ʜ> >&œN#If shift>0, calculates on triggerX>>>{X>>>{N*If shift=0, doesn't calculate on triggerX>>>> >hN If period=0, doesn't calculateX>>>>> >hN4After updating frequency, calculates a second timeX>>>> >hN'If calculation>$7FF, disables channelX>>g>{N/If calculation<=$7FF, doesn't disable channelX>>U>>> >hN*If shift=0 and period>0, trigger enablesX>>>> >>> >hN* If shift>0 and period=0, trigger enablesX>>>> >>hN+ If shift=0 and period=0, trigger disablesX>>>>>> >hN If shift=0, doesn't updateX>>>>> >hN If period=0, doesn't updateX>>>>> >hný00ɷ>= ɷ> >= |}>!F-N-V-&80_xGyOzW{ % &"r,q,p Q> > ͪ͊* ͝ > xyz{|}x yBKDMQ7 80 8 d@ @0͊/0Ox͊y##*}|NDͥ͝Passed>r<(=(ͥDone>rog~( ͪ͝͝ >r////   FͽÜ*Q x 1~!Ͱ!Ͱ>>>>&>&>%>w$aͥ04-sweep F>> >̓>r1̓͝ ͥFailed ͥFailed #'͝ >"  ͥInternal error>r?2>&>&>%>w$>>>!&>> >>>6>'!&~fO |>>>6>'!&~f8L 8>>>>& >0* q(0    O&(>6>' xɷ>6>'= g>$% o&v(6&(&0>>>>& 6@6& 7x>>>>& @ (6@6& }>@>>&>6>'&{Timer treats period 0 as 8X>>>>6>'>>/6>'>>C>6>'h{,Makes private copy of frequency on triggerX>>>>>C>6>'h{8Exiting negate mode after calculation disables channelX> >>>6>'>{{9Ending negate after it maybe changed freq disables chanX>>>>6>'>>6>'>{{:Ending negate mode any other way doesn't disable channelX>>>6>'>>>>6>'>>6>'>>6>'>>6>'>>C>6>'>y>O6>'h{%Subtract mode uses two's complementX>6>'>>>>6>'>>>C>6>'h{3Subtract mode uses two's complement (upper bound)X>>>>6>'>>{{7 Update channel frequency only when period is reloadedX>t>>>6>'>>6>'>>hÛ00ɷ>'= ɷ>6>'= |4}'>!F-N-V-&80_xGyOzW{ % &"r,q,p ~> > ͷ* #-39> 9xyz{|}x9yBKDM~7C 80 8 dm m0ͷ/0Oxͷy##*}|{qPassed>ç<(=(Done>çog~( >ç////999   s*~ x 1~!!>>>>&>&>%>w$ ͎05-sweep details s>C>6>'̓>ç1͸  Failed Failed #T >"  Internal error>ç?>&>&>%>w$>>>!&>> >>>>!&~fO |>>>>!&~f8L 8>>>>& >0* q(0    O&(>> xɷ>>= g>$% o&v(6&(&0>>>>& 6@6& 7x>>>>& @ (6@6& >zyx&  p(˸Z(j ğͫ>zyx&(p(˸Z(hͫ;Ø00ɷ>= ɷ>>= |}>!F-N-V-&80_xGyOzW{ % &"r,q,p ʹ> ʹ> ʹwW* ͞j> ʹͯxyz{|}xyBKDM7 80ô 8 d  0W/0OxWy##*}|jrPassed>M<(=(rDone>Mog~( jwj >M////͓   ͊i* x 1~!͋!͋>>>>&>&>%>w$Ͳͳͱ.r06-overflow on trigger >>>X>M1^ͱ͵öj rFailed rFailed #j >"  rInternal error>M?J>&>&>%>w$>>>!&>> >>>N>?!&~fO |>>>N>?!&~f8L 8>>>>& >0* q(0    O&(>N>? xɷ>N>?= g>$% o&v(6&(&0>>>>& 6@6& 7x>>>>& @ (6@6& & z{͓Length period is wrong2>@>?>>X͓Sweep period is wrong}>>>>X͓)Sweep clock is synchronized with length}>@>?>>X͓0Powering up APU MODs next frame time with 81922 2K2>N>?K 2>N>?K2K>&>N>? ͓-Powering up APU resets 128 Hz sweep divider}!}>N>?!ó>&>&>@>>>X>&>&>>>>X00ɷ>?= ɷ>N>?= |L}?>!F-N-V-&80_xGyOzW{ % &"r,q,p Ė.> .> .* ;EKQ> .Q'xyz{|}xQyBKDM͖7[ 80. 8 dԅ ͅ0/0Oxy##*}|͓͉Passed><(=(Done>og~( >////QQQ   Ë*͖ x 1~!!>>>>&>&>%>w$,-+ͦ07-len sweep period sync ͋>[>N>?m>1+/0 Failed Failed #l >"  Internal error>?(>&>&>%>w$>>>!&>> >>>,>!&~fO |>>>,>!&~f8L 8>>>>& >0* q(0    O&(>,> xɷ>,>= g>$% o&v(6&(&0>>>>& 6@6& 7x>>>>& @ (6@6& >>>>>>>!>#2>ͯ> >>>>,>X>&X>9>,>>&>,>>>>ͺ>>>ͺ>>>ͺ>!>#>ͺ KvÑ00ɷ>= ɷ>,>= |*}>!F-N-V-&80_xGyOzW{ % &"r,q,p t > > ͭ* #)/> /xyz{|}x/yBKDMt79 80  8 dc c0ͭ/0Oxͭy##*}|qgPassed>ä<(=(Done>äog~( >ä///////   iÿ*t x 1~!!>>>>&>&>%>w$ ̈́08-len ctr during power i>9>,>y>ä1͵  Failed Failed #J >"  Internal error>ä?ü>&>&>%>w$>>>!&>> >>>>ͱ!&~fO |>>>>ͱ!&~f8L 8>>>>& >0* q(0    O&(>>ͱ xɷ>>ͱ= g>$% o&v(6&(&0>>>>& 6@6& 7x>>>>& @ (6@6& >%>uE \V͕%ƙG!͔>>x>>>ͱ0}"3DUfwÁ00ɷ>ͱ= ɷ>>ͱ= |;}ͱ>!F-N-V-&80_xGyOzW{ % &"r,q,p ͝> ͝> ͝aA* ͈ͭͷͽT> ͙͝xyz{|}xyBKDM7 80Ý 8 d 0A/0OxAy##*}|T\Passed>6<(=(\Done>6og~( TaT >6////}   tS* x 1~!t!t>>>>&>&>%>w$͚͛͜\09-wave read while on >>>ͱX>61G͚͞ßT \Failed \Failed #T >"  \Internal error>6?>&>&>%>w$>>>!&>> >>>>!&~fO |>>>>!&~f8L 8>>>>& >0* q(0    O&(>> xɷ>>= g>$% o&v(6&(&0>>>>& 6@6& 7x>>>>& @ (6@6& >%>uE ~Ōͩ9ƙG!͔>>x>>> >>0͑ q(h"3DUfwØ00ɷ>= ɷ>>= |}>!F-N-V-&80_xGyOzW{ % &"r,q,p ʹ> ʹ> ʹuU* ͜h> ʹͭxyz{|}xyBKDM7 80ô 8 d  0U/0OxUy##*}|hpPassed>M<(=(pDone>Mog~( huh >M////͑   ͈g* x 1~!͋!͋>>>>&>&>%>w$Ͳͳͱ,p10-wave trigger while on >>>X>M1^ͱ͵öh pFailed pFailed #h >"  pInternal error>M?~>&>&>%>w$>>>!&>> >>>͂>s!&~fO |>>>͂>s!&~f8L 8>>>>& >0* q(0    O&(>͂>s xɷ>͂>s= g>$% o&v(6&(&0>>>>& 6@6& 7x>>>>& @ (6@6& 2>ͯ>&> >>͏>͂>gs>& Powering off should clear NR122>& Powering off should clear NR132>>>>͏>?͂>s& Powering off should clear NR412>͂>s>!>#>͏>͂>s&>͂>s&A00ɷ>s= ɷ>͂>s= |̀}s>!F-N-V-&80_xGyOzW{ % &"r,q,p ]> ]> ]#* Joyͅ> ]ͅ[xyz{|}xͅyBKDM7͏ 80] 8 dԹ ͹0/0Oxy##*}|ͽPassed><(=(Done>og~( # >////ͅͅͅ?   ÿ6* x 1~!4!4>>>>&>&>%>w$[\Z11-regs after power Ϳ>͏>͂>sX>1Z^_ Failed Failed #͠ >"  Internal error>?Ü>&>&>%>w$>>>!&>> >>>͠>͑!&~fO |>>>͠>͑!&~f8L 8>>>>& >0* q(0    O&(>͠>͑ xɷ>͠>͑= g>$% o&v(6&(&0>>>>& 6@6& 7x>>>>& @ (6@6& !~͔>*Timer period or phase resetting is wrong>>>>͑>1g(Current byte readable at any wave addr>>><g"Normal access when chan disabled>>>>>1g Write test>>>>#͑>0>43Timer period change>>>>0gFrequency 0 is valid>>>0g' Maintains phase properly when vol = 0>>>>0g* Maintains phase properly when stereo = 0>%>>>0g(3z3{3"3DUfwS00ɷ>͑= ɷ>͠>͑= |͞}͑>!F-N-V-&80_xGyOzW{ % &"r,q,p o> o> oA!* h͍͗͝4ͣ> oͣyxyz{|}xͣyBKDM7ͭ 80o 8 d 0!/0Ox!y##*}|4<(=(og~( 4A4 >////ͣͣͣ]   T3* x 1~!F!F>>>>&>&>%>w$mnl<12-wave >ͭ>͠>͑X>1lpq4 "  ?