Yes, in the manual, the first note is indeed C#, good catch!
Yes, I was able to set the clock divider by writing address 0x2e, without writing any data. This seems to work for YM2608, but not YM2610 and YM2612. It looks like I'll have to clock those at double frequency.
Code:
ym2608_write(channel->chip->data, 0, 0x2e);
My next question is why YM2610B issues this warning:
https://github.com/vgmrips/vgmplay/blob ... fm.c#L3961It seems to check only on channel 0 slot 0 and 3, and it also resets it. In MAME, it still issues the warning, but
doesn't reset it:
https://github.com/mamedev/mame/blob/ma ... .cpp#L3307Does YM2610B not have 6 FM channels? Is channel 0 not valid?
I am calling ym2610b_update_one, and the warning is not in that function, but when you write to some registers,
ym2610_update_one gets called with DUMMYBUF. I've also not found any YM2610B packs that use all 6 channels, they seem to only use the 4 channels that are common with YM2610. Anyway, there are two workarounds - either define ym2610b_write and make it specific to YM2610B, or check if we're using DUMMYBUF (bufL = bufR = 0). Either that or remove the warning.
Here is what I used:
Code:
#ifdef YM2610B_WARNING
#define FM_KEY_IS(SLOT) ((SLOT)->key)
#define FM_MSG_YM2610B "YM2610-%p.CH%d is playing,Check whether the type of the chip is YM2610B\n"
if(bufL) {
/* Check YM2610B warning message */
if( FM_KEY_IS(&F2610->CH[0].SLOT[3]) )
{
LOG(LOG_WAR,(FM_MSG_YM2610B,F2610->OPN.ST.param,0));
}
if( FM_KEY_IS(&F2610->CH[3].SLOT[3]) )
{
LOG(LOG_WAR,(FM_MSG_YM2610B,F2610->OPN.ST.param,3));
}
}
#endif