From the data offset, a VGM file is one command after another, each a command byte with
operands. The stream ends at command 66. An unknown command stops processing;
a reserved command must be skipped by its operand count. Timing
comes from the wait commands, in samples at 44,100 per second. All codes on this page
are hexadecimal. Commands are listed up to specification 1.71.
Chip writes
Each writes to a chip register. aa is the register, dd the value.
| Command | Operands | Chip |
|---|---|---|
| 30 | dd | Second SN76489 |
| 3F | dd | Second Game Gear PSG stereo |
| 4F | dd | Game Gear PSG stereo, port 06 |
| 50 | dd | SN76489/SN76496 |
| 51 | aa dd | YM2413 |
| 52, 53 | aa dd | YM2612 port 0, port 1 |
| 54 | aa dd | YM2151 |
| 55 | aa dd | YM2203 |
| 56, 57 | aa dd | YM2608 port 0, port 1 |
| 58, 59 | aa dd | YM2610 port 0, port 1 |
| 5A | aa dd | YM3812 |
| 5B | aa dd | YM3526 |
| 5C | aa dd | Y8950 |
| 5D | aa dd | YMZ280B |
| 5E, 5F | aa dd | YMF262 port 0, port 1 |
| A0 | aa dd | AY8910 |
| A1 | aa dd | YM2413, second chip |
| A2, A3 | aa dd | YM2612 port 0, port 1, second chip |
| A4 | aa dd | YM2151, second chip |
| A5 | aa dd | YM2203, second chip |
| A6, A7 | aa dd | YM2608 port 0, port 1, second chip |
| A8, A9 | aa dd | YM2610 port 0, port 1, second chip |
| AA | aa dd | YM3812, second chip |
| AB | aa dd | YM3526, second chip |
| AC | aa dd | Y8950, second chip |
| AD | aa dd | YMZ280B, second chip |
| AE, AF | aa dd | YMF262 port 0, port 1, second chip |
| B0 | aa dd | RF5C68 |
| B1 | aa dd | RF5C164 |
| B2 | ad dd | PWM: register a, value ddd (d is the top nibble) |
| B3 | aa dd | GameBoy DMG: register 00 is address FF10 |
| B4 | aa dd | NES APU: 00–1F map to 4000–401F, 20–3E to 4080–409E, 3F to 4023, 40–7F to 4040–407F |
| B5 | aa dd | MultiPCM |
| B6 | aa dd | uPD7759 |
| B7 | aa dd | OKIM6258 |
| B8 | aa dd | OKIM6295 |
| B9 | aa dd | HuC6280 |
| BA | aa dd | K053260 |
| BB | aa dd | Pokey |
| BC | aa dd | WonderSwan |
| BD | aa dd | SAA1099 |
| BE | aa dd | ES5506, 8-bit value |
| BF | aa dd | GA20 |
| D0 | pp aa dd | YMF278B, port pp |
| D1 | pp aa dd | YMF271, port pp |
| D2 | pp aa dd | SCC1, port pp |
| D3 | pp aa dd | K054539, register ppaa |
| D4 | pp aa dd | C140, register ppaa |
| D5 | pp aa dd | ES5503, register ppaa |
| D6 | aa dd ee | ES5506, 16-bit value ddee to register aa |
| E1 | aa bb dd ee | C352, 16-bit value ddee to register aabb |
The AY8910 stereo mask is command 31. A second chip that has no command of its own is addressed through bit 7 of the first operand. For Sega PCM, that bit is in the high byte of the memory address.
Memory writes
| Command | Operands | Meaning |
|---|---|---|
| C0 | bb aa dd | Sega PCM: write dd to memory offset aabb |
| C1 | bb aa dd | RF5C68: memory offset aabb |
| C2 | bb aa dd | RF5C164: memory offset aabb |
| C3 | cc bb aa | MultiPCM: set bank offset aabb for channel cc |
| C4 | mm ll rr | QSound: write value mmll to register rr |
| C5 | mm ll dd | SCSP: memory offset mmll |
| C6 | mm ll dd | WonderSwan: memory offset mmll |
| C7 | mm ll dd | VSU: register mmll |
| C8 | mm ll dd | X1-010: memory offset mmll |
Waits and flow
| Command | Operands | Meaning |
|---|---|---|
| 61 | nn nn | Wait n samples, 0 to 65,535. |
| 62 | Wait 735 samples: one 60 Hz frame. | |
| 63 | Wait 882 samples: one 50 Hz frame. | |
| 66 | End of the sound data. | |
| 67 | … | Data block. |
| 68 | … | PCM RAM write. |
| 70–7F | Wait n + 1 samples, n being the low nibble (0 to 15). | |
| 80–8F | YM2612 port 0 address 2A write from the data bank, then wait n samples (the low nibble, 0 to 15). First chip only. | |
| 90–95 | … | DAC stream control. |
| E0 | dd dd dd dd | Seek to offset dddddddd in the PCM data bank. |
AY8910 stereo mask (command 31)
One operand dd:
| Bits | Meaning |
|---|---|
| 0–1 | Channel A: 00 off, 01 left, 10 right, 11 centre. |
| 2–3 | Channel B, the same. |
| 4–5 | Channel C, the same. |
| 6 | Chip type: 0 AY8910, 1 YM2203 SSG. |
| 7 | Chip number: 0 or 1. |
Reserved commands
| Commands | Operands to skip |
|---|---|
| 32–3E | 1 |
| 40–4E | 2 (1 until version 1.60) |
| C9–CF | 3 |
| D7–DF | 3 |
| E2–FF | 4 |
60, 64, 65, 69 to 6F and
96 to 9F are undefined.