Sega Master System / Mark III / Game Gear
(redirected from Development.VGMFormat)
On August 5, 2001 Dave posted a message on the S8-dev forum asking "Is there currently a format similar to GYM which logs YM2413 signals and PSG signals so they can be played in WinAMP?". It turns out there was not a format that met his requirements (Charles MacDonald's SSL was not able to store samples (voices)), so Dave invented a new format, retaining the similarity to GYM (a Mega Drive music logging format), which was able to store music from a wide range of systems, including the Master System and Mega Drive.
The format was tweaked and modified over the next two months, on the S8-dev forum - Maxim wrote a Winamp input plugin to play the test files Dave was producing using Dega; Bock added the feature to Meka; the file format went through several name changes, eventually being called VGM as a nice general name, not specific to any one person, system or emulator. VGM stands for Video Game Music.
VGM logs the data written to the sound chips by games. As of version 1.61 it can store data written to these chips:
|Company||Chip||Some of the systems which use it|
|Texas Instruments||SN76489 / SN76496||Master System, Mark III, SG-1000, SC-3000, Game Gear (with stereo extensions), Mega Drive/Genesis, BBC Micro, Casio PV-2000|
|Texas Instruments||T6W28||NeoGeo Pocket (variant of the SN76489)|
|Yamaha||YM2413||Japanese Master System & Mark III, MSX-1 with FM-PAC|
|Yamaha||YM2151||various arcade games|
|Sega||Sega PCM||various arcade games|
|Ricoh||RF5C68||System 18, System 32 arcade games|
|Yamaha||YM2203||various arcade games|
|Yamaha||YM2608||a few arcade games|
|Yamaha||YM2610/B||various arcade games, NeoGeo Consoles|
|Yamaha||YM3812||PC with AdLib or Sound Blaster, various arcade games|
|Yamaha||YM3526||various arcade games|
|Yamaha||Y8950||MSX with MSX-Audio, a few arcade games|
|Yamaha||YMF262||PC with Sound Blaster 16, a few arcade games|
|Yamaha||YMF278B||MSX with Moonsound, a few arcade games|
|Yamaha||YMF271||a few arcade games|
|Yamaha||YMZ280B||various arcade games|
|Ricoh||RF5C164||Sega Mega CD|
|General Instrument||AY-3-8910 / YM2149F||MSX, ZX-Spectrum, Amstrad-CPC, various arcade games|
|Nintendo||GameBoy DMG||Nintendo GameBoy|
|Nintendo||NES APU||Nintendo Entertainment System|
|Yamaha||MultiPCM||Sega System 32/Multi32, Sega Model 1/2 arcade games|
|NEC||UPD7759||various arcade games|
|OKI||MSM6295||various arcade games|
|Konami||K051649||MSX with SCC1, a few arcade games|
|Konami||K054539||various arcade games|
|Hudson Soft||C6280||PC-Engine/Turbo Grafx 16, a few arcade games|
|Namco||C140||a few arcade games|
|Konami||K053260||a few arcade games|
|Atari||Pokey||Atari computer, Atari arcade games|
|Capcom||QSound||Capcom CPS-1/CPS-2 arcade games|
It is a simple task to add most new hardware to the format, if necessary.
VGM is a 44100Hz sample-accurate logging format; it can record a practically unlimited number of sound hardware changes per sample. It can also be used as a frame-accurate format, to create even smaller files at the expense of some accuracy (samples will not work, but music will generally not be affected noticeably).
GD3 was invented to allow text information to be stored in VGM files; it is a similar concept to ID3 tags in MP3 files, this being the reason for the similarity in name. GD3 tags are also extensible; they store various information in Unicode format, allowing the use of any characters, including non-Roman alphabets. Information stored by GD3 v1.00 includes the track, game and system names; author, date of game release, name of the file creator, and any miscellaneous notes. Several of these are stored twice, in the Roman alphabet and in Japanese if possible.
VGM7z was invented to help solve the problem that there is often redundancy in the information in VGM files within a game, which cannot be easily exploited when the files themselves are compressed as this obfuscates the redundant data. The solution is a format that packages multiple uncompressed files using a compression scheme that can make use of this redundancy to increase the overall package compression.
Note: Older specifications may have mistakes that were fixed in newer versions.