Download | Manual | Report bugs
XPMCK is a music (expressed in MML) compiler kit targeted towards various video game systems. It currently supports the following systems:
- Amstrad CPC
- Atari 8-bit (400/800/XL/XE)
- Capcom Play System (VGM output only)
- Commodore 64
- MSX (KSS output only)
- Nintendo Gameboy / Gameboy Color
- PC-Engine / TurboGrafx
- SEGA Master System
- SEGA Game Gear
- SEGA Genesis
Besides the compiler and its source code, the kit includes playback libraries for all supported systems, as well as examples and brief documentation.
- Fixed a bug in the VGM exporter that caused incorrect panning for Game Gear songs.
- Fixed a bug in the Gameboy playback library that caused the duty cycle to sometimes not change when it should.
- Fixed a bug in the PC-E playback library that would set the LFO enable bit incorrectly.
- Fixed a bug in the PC-E and Atari 8-bit playback libraries that caused incorrect behavior in loops on the form [... | ...]
- Added the PC-Engine as a supported target.
- Optimized the Atari 8-bit playback library, so it's now much smaller than before.
- Added Atari 8-bit computers as a supported target.
- Fixed a bug in the VGM exporter that caused erroneous behaviour when turning off arpeggios.
- Added support for @@ and EN on the SN76489 noise channel (SMS/GG/CLV)
- Fixed a bug in the VGM exporter that only allowed the SN76489 tone channels to go up to octave 6. They can now go up to octave 7 like they should.
- Fixed a bug with WTM macros that could occur if you had unused WT macros in your MML.
- Fixed a bug in the Gameboy playback library that caused the hardware volume envelopes (@ve) to work incorrectly when EP was used.
- Added a transpose command.
- Added support for per-note macros.
- Fixed a bug in the handling of  loops in the Gameboy and C64 playback libraries.
- Fixed a bug that would occur when the initial delay in an @MP macro was zero.
- Fixed some bugs in the compiler which would result in some AY-specific commands being ignored when outputting for the Amstrad CPC.
- Step values for intervals are now automatically given the correct sign by the compiler.
- Modified the Genesis playback code so that effect tables are kept in ROM instead of being copied to Z80 RAM. This lifts some of the restrictions on number of possible effects per song.
- WTM is now supported for the SCC channels for the KSS target.
- Fixed a couple of bugs related to notes with non-standard lengths (l24, l12 etc).
- Fixed a bug that prevented single-line comments from being used inside a $-macro.
- Fixed a bug in the Gameboy playback library where the volume would not be set correctly if the cutoff command was used together with a duty cycle macro.
- Fixed a compilation error that would occur when using a positive value for @te.
- Fixed a bug where notes could get incorrects lengths after a channel had looped under some circumstances.
- Hex numbers are now allowed to be negated with a minus sign (e.g. -A).
- Added a macro version of WT (for GBC).
- Reduced the compiled size of the SMS/GG/CLV playback library.
- Fixed a bug in the handling of MP on PSG channels in the Genesis playback code.
- Added support for negated cutoffs (mutes the initial part of a note).
- Added code for generating .SGC files (SMS/GG).
- Fixed a bug in the Gameboy playback library which caused the hardware volume envelope to be retriggered incorrectly when MP was used on the same channel.
- Added a more compact way of expressing repeating values in macros.
- Added a way of selecting the default numerical base for the compiler to use.
- Numbers can now optionally be written in hexidecimal (prefixed by 0x).
- Added the Amstrad CPC as a supported target.
- Added the ability to adjust the volume when loading a sample with the @XPCM command.
- Fixed a bug that prevented rests from being chained together with &.
- Fixed a bug that caused a compiler error when s came before any r or note in a song.
- The Genesis playback library now supports individual volumes for each operator, just like the VGM output library.
- Support for the loop form [ ... | ...] was missing from some of the playback libraries, this has now been added.
- Added support for the fifth Konami SCC channel.
- Added a command for writing directly to a memory address or port.
- Added the ability to output compressed VGM files (VGZ).
- Added an alternative GBC noise frequency table (selected with #GB-NOISE 1).
- Modified the data sequences generated at octave changes to use less space.
- Updated the manual.
- Added KSS as a supported target (only the SN76489 can be used at the moment).
- Implemented a more efficient way of storing note lengths. Compiled music data is now a lot smaller (typically 10-50% smaller, depending on the music structure and what other commands are used).
- Modified the frequency data used for the YM2612.
- Code for handling unused effects is now excluded on a per-channel basis when compiling the playback libraries, which cuts down the code size a bit in some cases.
- Updated the GUI to include ColecoVision as a target.
- Added the ColecoVision as a supported target (I get really strange sound output from ColEm. But it works in blueMSX).
- Added support for periodic noise on the GBC (noise counter width change).
- Extended the octave range of the GBC noise channel (can now go from octave 1 to octave 9).
- Fixed a bug in the Genesis (Z80) playback library where volume macros wouldn't be turned off properly.
- Fixed a bug in the pattern handling in the GBC playback library
- Added support for default parameters for macros.
- Added support for patterns.
- Added support for detuning to the C64 playback library.
- Added support for EP and MP to the C64 playback library.
- Updated the GUI.
- Tempo settings up to 300 BPM are now supported.
- Fixed some bugs in the handling of duty cycle macros in the GBC player.
- Channel 3 on the GBC is now allowed to go down to C in octave 1.
- Added playback code for the Commodore 64.
- Added CPS-1 as a supported target (YM2151. VGM output only).
- The compiler now outputs header information to be used when creating .gbs/.sid files (C64, GBC).
- Volume is now applied individually per operator (Genesis).
- Added support for SSG envelope generation (Genesis).
- Added support for PCM playback on SEGA Genesis channel J (only when outputting to VGM).
- Added support for non-standard note lengths (3, 6, 12 and 24).
- A .vgm file is now created for each song in a multisong MML when outputting to VGM.
- Fixed a bug that sometimes could occur when using &.
- Added support for amplitude modulation (using the MOD and AM commands) to the SEGA Genesis playback library.
- Added support for panning to the Gameboy playback library.
- Added a command, k, for specifying the length of notes in number of 32nd notes.
- Fixed a bug in the way the SEGA Genesis playback library handled ADSR commands.
- Fixed the handling of CSOF in the Gamegear playback library.
- Added support for the @te and @ve command to the Gameboy playback library.
- Fixed some bugs in the Gameboy playback library.
- Fixed a bug in the Genesis playback library.
- Fixed the include path handling so that it is relative to the path of the includer (unless an absolute path is specified).
- Unused effects are now automatically removed by the compiler.
- Updated the manual.
- Added support for the FM-portion of @MOD to the SEGA Genesis playback library.
- Updated the GUI.
- Updated the manual.
- The compiler is now a Win32 console application instead of a DOS application; no more
- Added playback code for the Gameboy / Gameboy Color.
- Added an @FBM command (macro version of FB).
- Algorithm macros (@@) can now be used on the SEGA Genesis FM channels.
- Added playback code for the SEGA Genesis.
- Added an RS command for FM channels (rate scaling).
- Added a simple GUI (mcgui.exe).
- Fixed some bugs in @ADSR. Sustain was inverted compared to how it was described in the manual, and sustain and release also weren't shifted correctly.
- Fixed the implementation of D (detune) for the SEGA Genesis FM channels.
- Added the possibility for simple logic in #IFDEF/#IFNDEF/#ELSIFDEF expressions (e.g #IFDEF SMS|SGG).
- Added #ERROR and #WARNING.
- Added several commands related to FM chips (YM2413, YM2612).
- Added SEGA Genesis as a supported target (only VGM output, no sound driver has been written yet).
- Fixed some bugs in the way #ELSE and #ELSIFDEF were handled.
- Fixed a bug in  when multiple channels were active.
- You now get a warning from the compiler if you try to specify the length of a note inside of a tuple.
- Cleaned up the code a bit in the SMS and GG test programs.