Okay, I've been digging some in the VGMPlay source to try to answer my questions. It's concerning that I learned a variety of things about the file format that are completely absent in the spec (even things unrelated to my questions). Anyway, here's what I've found, which partially answers my questions:
1. The chip ID will be of the containing chip, e.g. YM2203, not the chip contained. And here's a list of chip IDs:
Code:
#define VGM_CID_SN76489 0u
#define VGM_CID_YM2413 1u
#define VGM_CID_YM2612 2u
#define VGM_CID_YM2151 3u
#define VGM_CID_SEGA_PCM 4u
#define VGM_CID_RF5C68 5u
#define VGM_CID_YM2203 6u // Paired chip: YM2149 (AY-3-8910)
#define VGM_CID_YM2608 7u // Paired chip: YM2149 (AY-3-8910)
#define VGM_CID_YM2610 8u // Paired chip: YM2149 (AY-3-8910)
#define VGM_CID_YM3812 9u
#define VGM_CID_YM3526 10u
#define VGM_CID_Y8950 11u
#define VGM_CID_YMF262 12u
#define VGM_CID_YMF278B 13u
#define VGM_CID_YMF271 14u
#define VGM_CID_YMZ280B 15u
#define VGM_CID_RF5C164 16u
#define VGM_CID_PWM 17u
#define VGM_CID_AY8910 18u
#define VGM_CID_GB_DMG 19u
#define VGM_CID_NES_APU 20u
#define VGM_CID_MULTI_PCM 21u
#define VGM_CID_UPD7759 22u
#define VGM_CID_OKI_M6258 23u
#define VGM_CID_OKI_M6295 24u
#define VGM_CID_K051649 25u
#define VGM_CID_K054539 26u
#define VGM_CID_HUC6280 27u
#define VGM_CID_C140 28u
#define VGM_CID_K053260 29u
#define VGM_CID_POKEY 30u
#define VGM_CID_QSOUND_DSP16A 31u
#define VGM_CID_SCSP 32u
#define VGM_CID_WONDERSWAN 33u
#define VGM_CID_VSU 34u
#define VGM_CID_SAA1099 35u
#define VGM_CID_ES5503 36u
#define VGM_CID_ES5505_6 37u
#define VGM_CID_X1_010 38u
#define VGM_CID_C352 39u
#define VGM_CID_GA20 40u
2. The basic process of computing volume for each chip goes as follows (in GetChipVolume in VGMPlay.c):
- Look up the initial volume in a table of volumes, one for each (containing) chip ID
- Perform some parameter-specific hacks for certain chips and systems (e.g. dividing YM2203's AY-3-8910's volume by 2)
- Divide the volume value by the number of chips of the given type (1-2)
- Apply the volume information from the extended header (it's in Q8 format). For absolute mode, throw out the previously computed volume and use the specified volume. For relative, multiply the computed volume by the relative volume (again in Q8 format).
I still don't have an answer to #3, and I don't think the source code contains the information necessary to deduce the answer as it's not clear WHY the volume numbers used are being used; I really need the help of somebody with a whole lotta knowledge about these chips. The reason it matters to me how much amplification is coming from inside the synth/DAC and how much is coming from analog circuitry is that I'm making a hardware VGM player that uses a bunch of synth chips with a microcontroller and I need to know how to mix the signals that come out of the chips (i.e. I need the external amplification parameters ONLY).