Just to clarify a bit. There are two different ways that PCMs are played back at a high level, but the "new" has a few subtle variations.
1.) Old way. First the position in one giant PCM bank is set with a 0xE0 opcode. Then 0x8n commands are used to play back one byte of the sample. The 'n' indicates how long to wait after the byte playback and is used to essentially set the playback frequency.
2.) The new, less verbose, way. PCM data is held in one or more data blocks at the start of the VGM file. A 0x92 opcode is first used to set the playback frequency of a stream. Then one of a couple things can happen:
2.a) A 0x95 (fast call) opcode is used to set the data block and stream to begin playing back. This can be set to loop or not.
2.b) A 0x93 opcode is used to index into the databank, much like the 0xE0 opcode above.
In my driver, I then interpreted the 0x61, 0x62, 0x63 and 0x7n sample wait opcodes as the opportunity to play the PCM samples.
Here are some sample VGMs:
https://dl.dropboxusercontent.com/u/101 ... amples.tgz
* Ghz.vgm - Uses PCM new style 2a (this is a sample from Deflemask)
* rrpc.vgm - A busy VGM file with no PCM, spans many banks.
* tjae_eb.vgm - A very PCM heavy song using the old style.
* tjae_tjsj.vgm - An example of a song that midway that uses PCM of the old style and switches channel 6 from FM playback to PCM playback. A good test for sound effects.
* bhb_s1.vgm - An old style PCM song with a continuous short sample of a faster than average PCM sample
Plus a few more I had laying around.