VGMPlay MSX
Copyright 2015 Laurens Holst
Thanks go to l_oliveira, popolon(fr), Pencioner, Supersoniqs and JunSoft for support.
Project information
Plays back VGM music files on MSX with the supported sound chips.
- Author: Laurens Holst laurens@grauw.nl
- Site: http://www.grauw.nl/projects/vgmplay-msx/
- Source: https://hg.sr.ht/~grauw/vgmplay-msx
- Issues: https://todo.sr.ht/~grauw/vgmplay-msx
- Support: http://www.msx.org/forum/msx-talk/software/vgmplay-msx
- License: Simplified BSD License
VGMPlay can play back music for quite a number of sound chips using various common and less common sound expansions for MSX, such as the PSG, MoonSound and Yamaha SFG. A detailed list can be found below.
Both the VGM and VGZ formats are supported. The compressed VGZ format takes longer to load but also consumes less disk space. If so desired, VGZ files can be manually decompressed to VGM with gunzip for MSX or PC.
The timing resolution is 50 or 60 Hz on MSX1 machines with a TMS9918 VDP, 300 Hz on machines with a V9938 or V9958 VDP, 1130 Hz if a MoonSound or OPL3 is present, and 4000 Hz on MSX turboR.
For collections of VGM music see:
Downloads
See the release notes for what’s new.
Media
See the Youtube playlist.
System requirements
- MSX, MSX2, MSX2+ or MSX turboR
- 128K main RAM
- 16K video RAM
- MSX-DOS 2
Supported sound chips
- AY-3-8910 PSG / YM2149 SSG x2
- Internal PSG, Darky, MegaFlashROM SCC+
- YM2151 OPM x2
- Yamaha SFG
- YM2413 OPLL
- MSX-MUSIC, FM-PAC
- YM3526 OPL x2
- MSX-AUDIO, Music Module, MoonSound, OPL3
- YM3812 OPL2 x2
- MoonSound, OPL3
- YMF262 OPL3 x2
- MoonSound, OPL3
- YMF278B OPL4
- MoonSound, DalSoRi R2 (4MB mode)
- Y8950 MSX-AUDIO x2
- MSX-AUDIO, Music Module, MoonSound (no ADPCM), OPL3 (no ADPCM)
- K051649 Konami SCC
- Konami SCC, Konami Sound Cartridge
- K052539 Konami SCC+
- Konami Sound Cartridge
- SN76489 DCSG x2
- Musical Memory Mapper, Playsoniq, Franky, PSG
- YM2203 OPN x2
- Makoto, Neotron, Yamaha SFG + PSG
- YM2608 OPNA
- Makoto, Yamaha SFG + PSG + MSX-AUDIO (no drums)
- YM2610 OPNB
- Neotron
- YM2610B OPNB-B
- Neotron + Makoto
- YM2612 OPN2 x2
- Makoto + turboR PCM, Yamaha SFG + turboR PCM
- SAA1099
- SoundStar
Usage instructions
Run VGMPlay from MSX-DOS 2, specifying the VGM file to play on the command line.
Usage:
vgmplay [options] <file.vgm>
Options:
-
/l
Number of playback loops. Default: 2.Many VGM music loops once the end of the song is reached. With this setting you can specify how many times VGMPlay should play the repeating part before exiting. The amount is specified like `/L15`. Use `/L` or `/L0` to loop infinitely. This setting will have no effect for songs which don’t loop.
-
/b
Enter blackout mode during playback.This setting makes the screen go black during playback. For machines with a lot of VDP interference on the audio output, this may reduce the amount of interference.
To configure Multi Mente to play VGM files, add the following lines to MMRET.DAT:
.VGM VGMPLAY $T
.VGZ VGMPLAY $T
Development information
VGMPlay is free and open source software. If you want to contribute to the project you are very welcome to. Please contact me at any one of the places mentioned in the project information section.
You are also free to re-use code for your own projects, provided you abide by the license terms.
VGMPlay depends on the library projects Neonlib and Gunzip; it is recommended to clone the project with Mercurial so they will automatically be pulled in at the correct version, otherwise you have to download them manually:
hg clone https://hg.sr.ht/~grauw/vgmplay-msx
Building the project is easy on all modern desktop platforms. On MacOS and
Linux, simply invoke make
to build the binary and symbol files into the
bin
directory:
make
Windows users can open the Makefile
and build by pasting the line in the all
target into the Windows command prompt.
To launch the build in openMSX after building, put a copy of MSXDOS2.SYS
and
COMMAND2.COM
and some VGM files to test with in the bin
directory, and
then invoke the make run
command.
Note that the glass assembler which is
embedded in the project requires Java 8. To check
your Java version, invoke the java -version
command.
Release notes
For the complete list of changes please refer to the revision history.
- VGMPlay 1.4 - 2023-05-18
- New chips: SAA1099
- New sound expansions: SoundStar
- Fixed MSX-AUDIO muting
- VGMPlay 1.3 - 2020-07-26
- New chips: YM2203 OPN, YM2608 OPNA, YM2610 OPNB, YM2610B OPNB-B, YM2612 OPN2
- New sound expansions: Makoto, Neotron, Darky, DalSoRi R2, OPL3 (C0H)
- New timer: 1130 Hz if a MoonSound or OPL3 is present
- Emulation of SN76489 DCSG on PSG
- Emulation of YM2203 OPN, YM2608 OPNA and YM2612 OPN2 on Yamaha SFG
- Translation of YM2612 OPN2 frequencies to correct tuning
- Playback of YM2612 OPN2 PCM samples on MSX turboR
- Playback of dual YM2203 OPN on a single Makoto + PSG or Yamaha SFG + 2x PSG
- Playback of Y8950 MSX-AUDIO on MoonSound or OPL3, without ADPCM
- Support of the DalSoRi R2 4MB RAM mode
- Dual chip support for more chips
- Support for VGM loop base and modifier
- Improved detection of MSX-AUDIO, MoonSound, PSG, MMM and Franky
- Improved sound chip reset and muting
- Improved playback processing speed and accuracy
- Samples load prior to playback
- Added length and loop length to track information
- Improved VGM chip overview output
- Ability to stop playback with joystick buttons
- Ability to use more than 4 MB memory by modifying a compile-time constant
- Removed 1chipMSX / Zemmix Neo bug workaround (fixed in KdL firmware v3.3.1)
- Fixed MSX-MUSIC playback issues on turbo R
- Fixed MSX-AUDIO problem loading samples >128K
- Fixed screen going blank on MSX1 during playback
- Many code structure and footprint improvements
- VGMPlay 1.2 - 2016-01-23
- VGZ file loading support
- K052539 SCC+ music playback support
- Dual chip support for AY-3-8910 PSG and SN76489 DCSG
- YMF278B OPL4 ROM data playback support (preliminary)
- High-resolution timing (300 Hz) on MSX2/2+ and MSX1 with V9938 VDP
- Showing which sound module is used for playback
- Improved Y8950 MSX-AUDIO sample loading speed
- No longer force-enable the R800 on turboR
- No longer auto-switch to 60 Hz, removed /5 and /6 options
- New /o option to work around 1chipMSX / Zemmix Neo timing bug
- VGMPlay 1.1 - 2015-07-10
- Nonprimary memory mappers supported, all available RAM can now be used.
- High-resolution timing (4000 Hz) on MSX turboR.
- A more informative error is shown for compressed (vgz) files.
- Unsupported DMA commands are now skipped.
- Franky/PlaySoniq SN76489 muting bug fixed.
- Improved MSX-MUSIC detection.
- Performance optimisations.
- VGMPlay 1.0 - 2015-03-21
- Initial release.