Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /storage/content/49/145849/famitracker.com/public_html/forum/classes/dbHandler.php on line 29
When experimenting with my cart via hotswap, I discovered that the VRC6 has some sort of init register at $9003. Without writing $00 to this register, the expansion audio would not function in my test. All the VRC6 games seem to do this on init, and PPMCK does as well.
I posted on NESDev about it here: [url=http://forums.nesdev.com/viewtopic.php?f=3&t=9207]http://forums.nesdev.com/viewtopic.php?f=3&t=9207
jrlepage hasn't mentioned problems with his TNS-HFC3 and VRC6, but maybe its internal NSF init code writes this register.
I did not have to do this when I did some hot-swap tests, but I guess that was by luck then. Does $9003 affect all channels? (no corresponding registers at $A003 and $B003?)
The TNS-HFC3 probably deals with some initialization, and that makes sense as the NSF specification suggests that the player should initialize all audio registers (although only the internal ones specifically). There is a similar audio enable register in Namco carts that I had to figure out a while ago, but files that ignores that register is reported to play fine on the TNS cart.
Indeed, all VRC6 NSFs work fine. I do have a DIP switch that I must set to ON in order for them to work properly. If I set it to OFF, it doesn't sound right (but sound goes go through). I assume ON must be used with CV3j carts, and OFF is for Madara and Esper Dream 2... But maybe it has to do with this init register. I really don't know (I'd be happy to test though).
I'd be surprised if the HFC3 handled the write on its own though; there's no way to tell it what expansion I have connected, so unless it checks for expansion flags in the NSF header and then makes the appropriate writes, I really don't know how it would do it.
_______________________
Follow me on [url=https://twitter.com/jrlepage2a03]Twitter.
I record (some) NSFs on hardware. Feel free to [url=http://www.famitracker.com/forum/posts.php?id=3633]request a hardware render.
Any NSF player hardware still has to have some NSF init software run before playing your NSF, so it would not be unusual at all for it to do so on the TNS. NSF players are also expected to wipe RAM and enable all 2A03 channels via $4015 before beginning playback.
I presume $9003 is probably "random" on power up, since all 3 games make sure to initialize it. Maybe on whichever cart you have it tends to float toward 0.
$9003 does affect all channels in the same way. Check my NESDev post for more details (it actually can halt the oscillators, or adjust the overall frequency in a pretty useless way).
There is no $A003 register as far as I know. $B003 is actually the VRC6 nametable mirroring register, unrelated to sound.
1. The output of the VRC6 pulse channels, like those on the MMC5 and 5B (and possibly others) appear inverted when compared to the 2A03.
2. The phase of all VRC6 channels can be reset with the channel enable flag (high bit of $9002, $A002, $B002). Clearing and immediately setting this flag will reset the phase. (edit: hmm, for the saw it does not reset the frequency divider, it just resets the saw accumulator to 0 and the next clock happens right on time. probably works this way for the squares, but I'm not sure how to test this theory)
3. The VRC6 duty cycle starts with 0, ends with the output volume, so the duty cycle width is actually the width of the high part of the cycle (comes at the end of the cycle).