VOGONS


First post, by theelf

User metadata
Rank Oldbie
Rank
Oldbie

Hi all,

I want to share VGMDOS, a VGM player I made for real DOS machines. It runs
on a 286 and up, and I tested it on a real 286 with AWE64, SB Pro 2, SB16,
and clones, like MAD16, ESS AudioDrive,Yamaha cards, etc

How it works:
- FM chips play on the OPL of your sound card (OPL2/OPL3)
- The rest of the chips are emulated by software and go out by the DAC
of the card (Sound Blaster and clones, or a Covox style DAC on LPT)
- PicoGUS in Tandy mode also works for the SN76489

Systems that play right now:
- FM: AdLib/OPL2, OPL3, MSX-Audio, YM2413 (Master System/MSX),
YM2203/YM2608 (PC-88), Mega Drive (converted to OPL3)
- Software: SN76489 (Master System, Game Gear, Tandy), Neo Geo Pocket,
AY8910/YM2149 (MSX, ZX Spectrum, Atari ST), SCC, NES + FDS,
Game Boy, WonderSwan, PC Engine

All the software cores are optimized in assembler for the 286. In the
ini you can set the quality per chip, because a slow 286 can do PSG at
22 kHz but maybe NES only at 11 kHz.

In my harris 25mhz 286 i can play everythin in maximum 22khz quality!!!

VGMTOOL
It comes with vgmtool (Windows (9x?NT4?) XP+ and DOS 386+ versions). You run it
over your whole VGM collection and it prepares everything for the DOS
machine:
- Mega Drive YM2612 is converted to OPL3, with the PCM drums as streams
- PC Engine and NES songs that play PCM writing sample by sample get
"predigested": the samples go to a bank inside the file and play as a
stream, so the 286 does not choke
- Everything gets compressed with LZSS (only the commands, PCM banks stay
as is). Files end up at 25-40% of the size and the player unpacks on
the fly, it costs almost nothing on a 286
- It makes 8.3 names, and a VGM.DIR and FILES.LST in each folder so the
player shows the real game and song names

vgmtool C:\VGM C:\VGMDOS

Then copy the folder to the DOS machine and run VGMDOS.EXE. The compressed
format is only for VGMDOS, vgmtool -d gives you normal VGM files back.

Other stuff:
- English and Spanish (LANGUAGE= in the ini)
- Shows GD3 info: title, game, composer, system, and a little piano
with the notes playing

Any feedback or bug report is welcome, and if you have VGMs that sound
wrong please tell me which ones.

The attachment vgmdos_000.raw1.png is no longer available
The attachment vgmdos_001.raw1.png is no longer available

https://github.com/TheElf01/VGMDOS

Thanks!

Last edited by theelf on 2026-10-03, 20:44. Edited 2 times in total.

Reply 1 of 13, by theelf

User metadata
Rank Oldbie
Rank
Oldbie

NeoGeo and MegaCD VGM support!!!!!! full 22khz quality in a 286-25!!!!

The attachment vgmdos_000.raw1.png is no longer available
The attachment vgmdos_001.raw1.png is no longer available

Reply 2 of 13, by ElBrunzy

User metadata
Rank Oldbie
Rank
Oldbie

hello theelf and thank you for the headsup, I was thrilled to try out your new tool, unfortunately I was not able to process any file. My understanding is that I need to convert the .vgm first (it seem to also support .vgz) using vgmtool. So I did try the sonic 02 green hill zone music (stuff from vgmrip.net) as the usual benchmark tune but it would always return the error :
! 02.vgm : ERROR cannot read

if I try "vgmtool 02.vgm convrt.vgz" I also did try stuff like "vgmtool c:\vgmin c:\vgmout" to always same error of first parameter cannot read...

So maybe I overlooked something. VGMDOS would tell me the 02.vgm need to be converted from ym2612 to opl3).

I'm curious and eager to check out your program so if you have any idea what's going on I'll be happy to do some further investigation. I'm still not sure how it work exactly, so it use the OPL3 to output converted YM2612 instruction and it render a kind of compressed pcm file with the sn76489 instructions ? It would be a shame because on that computer I also have an matze79's tandy nano that could very well receive those instructions 😅

Reply 3 of 13, by theelf

User metadata
Rank Oldbie
Rank
Oldbie
ElBrunzy wrote on 2026-10-04, 01:56:
hello theelf and thank you for the headsup, I was thrilled to try out your new tool, unfortunately I was not able to process any […]
Show full quote

hello theelf and thank you for the headsup, I was thrilled to try out your new tool, unfortunately I was not able to process any file. My understanding is that I need to convert the .vgm first (it seem to also support .vgz) using vgmtool. So I did try the sonic 02 green hill zone music (stuff from vgmrip.net) as the usual benchmark tune but it would always return the error :
! 02.vgm : ERROR cannot read

if I try "vgmtool 02.vgm convrt.vgz" I also did try stuff like "vgmtool c:\vgmin c:\vgmout" to always same error of first parameter cannot read...

So maybe I overlooked something. VGMDOS would tell me the 02.vgm need to be converted from ym2612 to opl3).

I'm curious and eager to check out your program so if you have any idea what's going on I'll be happy to do some further investigation. I'm still not sure how it work exactly, so it use the OPL3 to output converted YM2612 instruction and it render a kind of compressed pcm file with the sn76489 instructions ? It would be a shame because on that computer I also have an matze79's tandy nano that could very well receive those instructions 😅

the PSG will be emulated in software, no PCM or anything just pure emulation, maybe you can try use PGUS_TNDY=1 in ini to see if the PSG audio work in your tandy card, no idea. PGUS_TNDY expect a standard tandy card , try first a PSG only file if work with your card, no need to coonvert, a master system or game gear vgm is fine

About green hill, i download my vgm from vgmrips, then the problem must be in your side, for example

R:\sonic>VGMTOOL.EXE "R:\sonic\02 - Green Hill Zone.vgz" "R:\sonic\02 - Green Hi
ll Zone.vgm"

give me a good reesult

M 02 - Green Hill Zone.vgm: 498 KB -> 336 KB, 53.2 s, bucle desde 14.8 s, DAC:
347 muestras en 55 KB, FM grabado: 18 instrumentos por PCM, 0 por OPL3, 293 KB
(-c2: 407 notas pasadas al OPL3, 0 cedidas)

and this vgz is from vgmrip, are you sure you downloaded my last version from github? upload the vgm give you problems i can test, but believe me, i lready downloaded ALL vgmrips megadrive vgm and converted already... and no one fail

Anyway, just for test, i upload 3 version, low quality, mid quality and high quality, test the ones you like more. Low quality is pure OPL3, the ones are using some PCM samples for things opl3 cant do

Reply 4 of 13, by ElBrunzy

User metadata
Rank Oldbie
Rank
Oldbie

Thanks for your reply theelf. I did other testing today, I made sure I had the latest version from github and refreshed my .vgz of green hill from vgmrip : always same error. But I found that maybe the problem was that I was running under windows 98se ? I did try to clean boot in msdos 7.10 and it returned me a different message : This is a Windows NT character-mode executable. So maybe I need to boot on windows 2000 to try it.

Your 3 converted .vgm worked, though. But the sound seem a bit off, maybe it's because I'm using an Orpheus ][ soundcard. Of course I would be glad to test it for you but I am not very interested in software emulation of the SN76489 (I can do that on a modern computer). So I tested the PGUS_TNDY=1 settings but it seem to ignore it and play using the PCM. Maybe it need to know the SN76489 chip is on port 2c0 on my computer ? I would need to tell the program that.

Honestly, I would had two request for your player now, could the conversion be in the player ? While it's possible, I would prefer not to have to maintain a collection of converted vgm file for different players. My other request was about to use a genuine SN76489 and while I though this request was out of proportion, I'm glad to see you are nearly there.

I like visuals on a player so I was happy to see the piano, but I'm not sure I understand what it's doing. Maybe it's updating every once in a while and display the frequency that was played ? Maybe you had to do it that way for the sake of audio accuracy.

Your player is very impressive so far and I appreciate all the work you put in there so we can listen to YM2612 music on en YM262 !

Reply 5 of 13, by theelf

User metadata
Rank Oldbie
Rank
Oldbie
ElBrunzy wrote on 2026-10-06, 16:43:
Thanks for your reply theelf. I did other testing today, I made sure I had the latest version from github and refreshed my .vgz […]
Show full quote

Thanks for your reply theelf. I did other testing today, I made sure I had the latest version from github and refreshed my .vgz of green hill from vgmrip : always same error. But I found that maybe the problem was that I was running under windows 98se ? I did try to clean boot in msdos 7.10 and it returned me a different message : This is a Windows NT character-mode executable. So maybe I need to boot on windows 2000 to try it.

Your 3 converted .vgm worked, though. But the sound seem a bit off, maybe it's because I'm using an Orpheus ][ soundcard. Of course I would be glad to test it for you but I am not very interested in software emulation of the SN76489 (I can do that on a modern computer). So I tested the PGUS_TNDY=1 settings but it seem to ignore it and play using the PCM. Maybe it need to know the SN76489 chip is on port 2c0 on my computer ? I would need to tell the program that.

Honestly, I would had two request for your player now, could the conversion be in the player ? While it's possible, I would prefer not to have to maintain a collection of converted vgm file for different players. My other request was about to use a genuine SN76489 and while I though this request was out of proportion, I'm glad to see you are nearly there.

I like visuals on a player so I was happy to see the piano, but I'm not sure I understand what it's doing. Maybe it's updating every once in a while and display the frequency that was played ? Maybe you had to do it that way for the sake of audio accuracy.

Your player is very impressive so far and I appreciate all the work you put in there so we can listen to YM2612 music on en YM262 !

Hi! Thanks for the testing. Here are a few things to clear up and try:

About the SN76489 / Tandy on your Orpheus II:
• Test pure files first: You didn't mention if you tried single-chip VGMs (like Master System or Game Gear). Please test those. That way we can know if your card is actually being detected and working. On my end, Tandy hardware works perfect with both pure PSG VGMs and Mega Drive stuff.
• You can try forcing the port directly in the variable, something like PGUS_TNDY=2C0. Give it a shot. But, Just in case the missing PSG sound is a volume blending problem, I added a new option in the .ini file: PGUS_VOL=X. This changes volume in 2 dB steps (from 0 to 14, default is 4). Try tweaking it.
• Audio quality: I don't know your soundcard very well, but if it has a real OPL3 it should sound good... well, as good as a YM2612 to OPL3 conversion can possibly sound. I don't really know what you mean by "sound is a bit off" unless you send me a .wav recording or something to hear it. By the way, I sent you 3 converted VGM files before, but you didn't tell me which one sounded better to you. Let me know

About Windows 98 and the converter:
The DOS converter works fine. For the Windows version, I checked the code and it was compiling with Unicode (which is why it only worked on NT). I changed it to ANSI and recompiled it. I'm leaving the new exe here so you can test it, because I don't have a Win98 machine anymore.

I don't know what kind of modern PC you have, but think about this: my modern i5 Windows XP 4 cores, while YM2612>OPL (low quality) it take 1-2sec every vgm, it takes like 1 minutes PER VGM to convert them in medium/high quality using PCM samples. If you try to run that conversion on a Pentium 4 or a low-end Core 2 Duo, you will literally have to drink SEVERAL coffees waiting for just one track to finish!

Honestly, about the integrated conversion request... real-time conversion is IMPOSIBLE on the target hardware. A 286 doesn't have the muscle for that, the Windows tool is there for a reason, not because I wanted to. Maybe .. MAYBE a 486+ can do real-time YM2612 > OPL3, but:

1. I'm not interested in low quality conversion. I prefer medium/high quality, which means mixing OPL and PCM samples to have a better quality and more close to real megadrive
2. Frankly, I don't care at all about the 386+ architecture.

My ultimate goal is a 100% software-based VGM player. If PSG happens to work through a Tandy card, it’s honestly kind of a miracle—I just happen to own a PicoGUS, so I decided to test it out. Since it's physically impossible for a 286 to software-emulate a YM2612, YM2610, etc., I had no choice but to fall back on OPL3 conversion (which is what the converter outputs in LOW QUALITY). Later, I found a way to mix OPL and PCM, which is the MED quality setting. My final goal is to achieve HIGH quality on a 286, which means completely bypassing the OPL3 and doing everything 100% via software PCM.

About the Piano:
The piano is just there to look pretty! At first it just played random keys. Later I made it read the VGM data to give it some coherence, but the screen updates only 1 time per second (when the player does the tick cycle). If 10 notes play in that second, you will only see the last one. It's just cosmetic and it's coded like this so it doesn't eat CPU cycles. Audio priority is always #1.

Let me know if the new exe and the volume/port tweaks work for you!

PD: Also, you can actually use my converter without compression by using the `-n` and `-mdlow` flags. In that case, you could probably use a hardware-based player like SBVGM, I think it should work. the VGM will have OPL3+PSG, Try and tellme!

Reply 6 of 13, by ElBrunzy

User metadata
Rank Oldbie
Rank
Oldbie

Hello theelf!

So, I did some more testing tonight! First, sorry for some of my earlier oversights. I'm still learning how all the pieces of your player fit together, and I think part of our confusion comes from approaching it from different angles. My main interest is playing VGMs on their original hardware chips, while your goal is to get as much as possible running on a 286 through software emulation. Add a language barrier to that, and I guess some things are bound to get lost along the way! 😅

Anyway, I still have some testing to do, so here are my findings!

1. The Mega Drive music

I know I wasn't very precise when describing which files sounded wrong, but unfortunately, they all sound problematic to me. Maybe my Pentium 1 @ 75 MHz or the Orpheus ][ emulating soundblaster via it's crystal CS4237B chip are part of the problem?I'm not sure if there's anything specific about that setup that could cause this.

Broadly speaking, it's as if some instruments are playing out of sync with the others, while some instruments also seem to stutter.

A few examples from the tracks I tested:

- Low quality: The lead melody at 00:15 is the most obvious example. The stuttering usually starts around 00:35, and after 01:10 the music seems increasingly out of sync.
- High quality: The lead at 00:15 SEEMS better, but the stuttering around 00:35 is actually worse.
- Medium quality: This one sounds the most problematic to me. The melody around 00:15 almost sounds doubled, as if extra notes were being played, and the stuttering is the worst of the three, sometimes introducing what sound like random notes.

I'm not sure whether this is a performance issue, a timing issue, or something else entirely, but I thought those details might help!

2. Pure PSG files and the Tandy Nano

I also tried playing some pure PSG VGMs without success at first. Since you mentioned that support for the Tandy Nano at port 2C0 via pgus_tndy wasn't certain, I assumed it simply wasn't working and didn't investigate much further.

Here's what happened: the screen would briefly display something and then immediately redraw. I copied the "Alex Kidd in Miracle World" soundtrack into the VGMDOS.EXE directory, and when I loaded it, I got "vgm_open: invalid vgm file" all over the screen. The file browser cleared the message when I used it, but attempting to play the file caused the same brief flash. The "Choplifter" theme behaved the same way. In fact, this happened with all my SMS VGMs (after I realize I could copy vgmdos at the root of my SMS directory)

I thought both of those soundtracks would be pure SN76489 VGMs, so I was a little puzzled.

3. The converter and a nice surprise!

The ANSI version of the converter works fine for me. I also realized that perhaps even pure VGMs need to be converted into your format first. I tried converting "Alex Kidd in Miracle World", and it worked great afterward! The sound was very good, with just a tiny bit of stuttering. Maybe that's an issue with my setup, either my Pentium or the Orpheus II's Sound Blaster compatibility.

Then I added `2C0` to VGMDOS.INI, and... the PSG was coming out of the Tandy Nano! It worked! Congratulations! 😀 I didn't seem to notice any stuttering either.

And with the Sonic soundtrack, both the YM2612 converted to OPL3 and the SN76489 playing through the Tandy Nano's actual PSG chip! Now THAT was a nice surprise! 😮 The music's tempo still seemed a little off, though.

I also noticed that conversion takes quite a while, even on my faster computer, so I can see why my original idea of doing the conversion in place might not make much sense.

One thing I'm still trying to understand is how the quality settings work. I initially thought the PSG was being emulated through PCM at medium and high quality, but it seems to keep outputting through the Tandy Nano at all three quality settings. Am I misunderstanding how the different quality levels are supposed to work, or is there something else going on here?

Anyway, thanks again for sharing your work! It's been fun learning how it all fits together, and getting those tracks playing was very satisfying. I'll keep experimenting!

Reply 7 of 13, by theelf

User metadata
Rank Oldbie
Rank
Oldbie

Hello! Thanks for thefeedback and the detailed testing! Im really glad to hear you got the Tandy Nano PSG working nicely—that was a fantastic surprise! Let's clear up some of the misteries about how the player and converter works.

1. The "Invalid VGM File" Error
The reason you got that error with your pure Master System (SMS) files is actually quite simple: you arent loading real VGMs, your loading VGZs! Even if the file extension says .vgm, if you check the header, they are actually compressed VGZ. My player does not support VGZ natively because its way too heavy for a 286.
When you run them through my converter, it decompresses the VGZ and turns it into a custom format thats much more "286-friendly" if you can say so. My converter has been tested with all types of VGMs so thats why they work perfectly after conversion.

2. How the Quality Settings Actually Work
You noticed that the PSG keeps outputting to the Tandy Nano on all three settings—this is normal! The quality settings only affect how the YM2612 (Mega Drive) tracks are handled. Here is the breakdown:
• Low Quality: It simply translates everything from YM2612 to OPL3. Its very fast, in conversion, i think MAYBE a 286 can handle it more or less in real-time.... never tested
• Medium Quality: The converter does a full pass playing the VGM and comverts it to OPL3, then it compares the result with the original track. In the areas where there is more diference, it extracts "the instrument" (so to speak) and pre-records it into a PCM sample. When playing back, those parts bypass the OPL3 and play as PCM instead, very similar to Amiga tracker modules.
• High Quality: It does the exact same thing, but with a much stricter threshold. Even the tiniest differences between the OPL3 conversion and the original track will cause it to generate a PCM sample instead of OPL3.
This is why conversion takes a long time on your PC, and why the PSG hardware remains untouched across all qualities.
3. PC Hardware & Sound Blaster Compatibility
To be honest, I have never tested this player on anything beyond a 286! In theory, any sound card providing decent Sound Blaster Pro compatibility should work fine, though some consoles like Mega CD tracks benefit quite a lot from a true SB16 setup.
4. Mega Drive Sync Issues & The Music Tempo
As for the stuttering/sync issues on Mega Drive, and the music tempo being off: honestly, I have no idea what you mean by "tempo" because I'm not a musician! 😅 to be true, I dont even know what tempo means witout google it

Its virtually impossible for me to know what is going wrong without seeing what files you are converting. Could you please send me the specific Mega Drive examples you are testing? If I can look at the exact files, I might be able to figure out if its a timing issue or something else.

Thanks again for the testing, keep experimenting!

Reply 8 of 13, by jansakos

User metadata
Rank Newbie
Rank
Newbie

Hello, I would like to ask whether you plan to support OPL3LPT or any other LPT-based device.

Reply 9 of 13, by theelf

User metadata
Rank Oldbie
Rank
Oldbie
jansakos wrote on 2026-10-17, 18:07:

Hello, I would like to ask whether you plan to support OPL3LPT or any other LPT-based device.

Well, the player already have COVOX support, you can play almost all system, NES, FDS, Master system/SG-1000, gameboy, neogeo pocket, MSX1, AtariST, etc etc without a sound card just a LPT covox

About OPL3LPT i found this this https://github.com/pdewacht/at2lpt/releases

I dont have one opl3lpt card but i can read the source code of the adlib tracker and understand how it works, but the sacrifice will worth? how many people will use?

Other LPT cards no idea what you have in mind

Reply 10 of 13, by jansakos

User metadata
Rank Newbie
Rank
Newbie
theelf wrote on 2026-10-18, 11:26:
Well, the player already have COVOX support, you can play almost all system, NES, FDS, Master system/SG-1000, gameboy, neogeo […]
Show full quote
jansakos wrote on 2026-10-17, 18:07:

Hello, I would like to ask whether you plan to support OPL3LPT or any other LPT-based device.

Well, the player already have COVOX support, you can play almost all system, NES, FDS, Master system/SG-1000, gameboy, neogeo pocket, MSX1, AtariST, etc etc without a sound card just a LPT covox

About OPL3LPT i found this this https://github.com/pdewacht/at2lpt/releases

I dont have one opl3lpt card but i can read the source code of the adlib tracker and understand how it works, but the sacrifice will worth? how many people will use?

Other LPT cards no idea what you have in mind

Hi,
as far as I know, adding support for OPL3LPT, when you already have support for AdLib, should be trivial (just different address). I am not really sure about prevalence of this sound standard, however if you own laptop from 286/386/486 era, it usually does not contain any sound card, therefore I can see the advantage for these users. And especially for 286 and lower, where you cannot use the driver (ADLiPT), this would be really beneficial.

By other cards I meant mostly CMSLPT and TNDLPT, however that is not needed since you support most of the sounds generated in software via covox output.

Reply 11 of 13, by theelf

User metadata
Rank Oldbie
Rank
Oldbie
jansakos wrote on 2026-10-18, 19:10:
Hi, as far as I know, adding support for OPL3LPT, when you already have support for AdLib, should be trivial (just different add […]
Show full quote
theelf wrote on 2026-10-18, 11:26:
Well, the player already have COVOX support, you can play almost all system, NES, FDS, Master system/SG-1000, gameboy, neogeo […]
Show full quote
jansakos wrote on 2026-10-17, 18:07:

Hello, I would like to ask whether you plan to support OPL3LPT or any other LPT-based device.

Well, the player already have COVOX support, you can play almost all system, NES, FDS, Master system/SG-1000, gameboy, neogeo pocket, MSX1, AtariST, etc etc without a sound card just a LPT covox

About OPL3LPT i found this this https://github.com/pdewacht/at2lpt/releases

I dont have one opl3lpt card but i can read the source code of the adlib tracker and understand how it works, but the sacrifice will worth? how many people will use?

Other LPT cards no idea what you have in mind

Hi,
as far as I know, adding support for OPL3LPT, when you already have support for AdLib, should be trivial (just different address). I am not really sure about prevalence of this sound standard, however if you own laptop from 286/386/486 era, it usually does not contain any sound card, therefore I can see the advantage for these users. And especially for 286 and lower, where you cannot use the driver (ADLiPT), this would be really beneficial.

By other cards I meant mostly CMSLPT and TNDLPT, however that is not needed since you support most of the sounds generated in software via covox output.

If is just change 388 to 378 i can do, no problem, i can add a ADLIBPORT to ini or something like this, and you can test, i will do next week, im out for work this one

Reply 12 of 13, by ElBrunzy

User metadata
Rank Oldbie
Rank
Oldbie

Hello theelf,

When I read back my post I realized I never mentioned that I used the three converted file you provided on your 2026-10-03 post of sonic green hill zone 3 version (high/med/low). I would guess they sound correct on your computer, such as very similar to what they sound on the megadrive/genesis ? I though I would not need to be so precise describing the issue as the best way to show you would be via some recording file, if you are interested. But since it require some work to do those recording I would want to make sure they are useful for you. I guess I could put PGUS_TNDY=0 and record the three quality file that I described in my previous post. But maybe I could also do recording with PGUS_TNDY=2C0 using the SN76489 if it's of interest to you, does I should also record three quality too ? That start to be a lot of file to manage at this point.

Also, you where right with the .VGM files being .VGZ in disguise !! I will never trust a file extension again 😅 By the way, when I first try to understand how your player work, to know what format the player/converted could work with was one of the point I found confusing, I'm just saying so you know, as a comment to help documentation as you see fit.

Reply 13 of 13, by bakemono

User metadata
Rank Oldbie
Rank
Oldbie

if you need to decompress .VGZ to .VGM on a 286/DOS system you can try this

Wreckage reimagined on itch: https://90soft90.itch.io/wreckage-dash