VOGONS


SBVGM (DOS) VGM Player

Topic actions

First post, by OPLx

User metadata
Rank Member
Rank
Member

In case anyone is interested, I recently released a VGM player for DOS that can be downloaded here.

Supported Sound Hardware

  • IBM PCJr
  • Tandy 1000
  • Tandy Sound (SN76489) Adapter
  • IBM PS/1 Audio
  • Adlib Music Synthesizer Card
  • Game Blaster
  • Sound Blaster 1.x/2.x
  • Sound BLaster Pro 1
  • Sound Blaster Pro 2
  • Sound Blaster 16
  • CMSLPT
  • OPL2LPT
  • OPL3LPT
  • TNDLPT
  • TexElec SAAYM
  • PC-98 Sound Boards

Supported VGM chipsets

  • RP2A03 (NES APU)
  • SN76489 variants
  • AY-3-8910
  • YM2149
  • SAA1099
  • YM2413
  • YM3256
  • Y8950
  • YM3812 (OPL2)
  • YMF262 (OPL3)
  • YM2151 (OPM)
  • YM2612 (OPN2)
  • YM3438 (OPN2C)
  • YM2203 (OPN)
  • YM2608 (OPNA)
  • YM2610 (OPNB)
  • YMF278B (OPL4)

A Game Blaster (or a Sound Blaster equipped with the C/MS chips), TexElec SAAYM, or CMSLPT is needed for the RP2A03, SN76489, AY-3-8910, or YM2149 emulation; direct hardware playback is supported on systems with an actual SN76489. OPL3 and OPL4 also can play RP2A03 VGMs. Game Blaster playback should sound correct even under DOSBox v0.74. Hopefully in the future there will be some kind of standard way to for a program to identify what version of DOSBox it is running on (this is no longer the case as of v1.11). OPL4 support is limited VGMs that use the built-in sample ROM.

At present there isn't any support for sample playback (for the VGMs that have them); I've already spent more time on this than I should have! 😀
Thanks to all the folks who put out various information on the forums and suggested ideas.

I hope someone finds some use for the program. For now, my little experiment is over.

Last edited by OPLx on 2023-08-19, 14:06. Edited 17 times in total.

Reply 1 of 530, by autoexecdotbat

User metadata
Rank Member
Rank
Member

hello, I have a few sugestions for new features:
1. ay8910 support (there's a pretty good dos ay emulator by marsel de cogel that some old emulators use)
2. for sn77489: add tandy 3 voice support, it's the same sound chip.

to win the game you must defeat coppa!
http://chng.it/DNc2L8LvLJ

Reply 2 of 530, by OPLx

User metadata
Rank Member
Rank
Member
autoexecdotbat wrote:

hello, I have a few sugestions for new features:
1. ay8910 support (there's a pretty good dos ay emulator by marsel de cogel that some old emulators use)
2. for sn77489: add tandy 3 voice support, it's the same sound chip.

Thank you for the feedback. I actually am planning to support the SN76489 on the Tandy 1000 series and the IBM PCJr, but need to spend some time looking into methods for detecting which model the program is running on. From some of the information I found, the port address where the chip is access can depend on the Tandy model.

I had also considered AY-3-8910, but it turned out that there are several variations of the chip. This will also require some time to research before I attempt any implementation.

Reply 3 of 530, by DracoNihil

User metadata
Rank Oldbie
Rank
Oldbie

Be very careful when assuming the Tandy 3 Voice is the same as the Master System and Genesis\MegaDrive. Variations of the SN76489 have differing noise generation if I'm not mistaken, which can prove problematic.

“I am the dragon without a name…”
― Κυνικός Δράκων

Reply 4 of 530, by OPLx

User metadata
Rank Member
Rank
Member
DracoNihil wrote:

Be very careful when assuming the Tandy 3 Voice is the same as the Master System and Genesis\MegaDrive. Variations of the SN76489 have differing noise generation if I'm not mistaken, which can prove problematic.

The noise generation pattern is different so a VGM that doesn't have the same pattern will sound different (at least on noise playback). Apart from the how certain variants handle a frequency write of zero, the features available on the T6W28 and Game Gear (stereo) the variants all seem to be on parity with the register layout (based the information found in data sheets).

Reply 6 of 530, by Scali

User metadata
Rank l33t
Rank
l33t
DracoNihil wrote:

Be very careful when assuming the Tandy 3 Voice is the same as the Master System and Genesis\MegaDrive. Variations of the SN76489 have differing noise generation if I'm not mistaken, which can prove problematic.

Yes, there are two versions of the SN76489, the early one, and the SN76489A.
There is also the SN76496, which has an extra audio input pin for mixing with other audio sources, but is otherwise equal to the SN76489A.
So if you support both types of noise generation, you should be okay with all the variations out there.

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 7 of 530, by autoexecdotbat

User metadata
Rank Member
Rank
Member

regarding the ay8910, the only varient that is vastly different is the ay8930, which is not supported by the vgm format, and will probably never be since it was used only on the covox sound master, which is poorly documented. the other variations (8912, 8913, 8914, and the yamaha varients like ym2149) only differ in pinouts.

to win the game you must defeat coppa!
http://chng.it/DNc2L8LvLJ

Reply 8 of 530, by OPLx

User metadata
Rank Member
Rank
Member
autoexecdotbat wrote:

will there be a way to force game blaster for sa1099?

It looks like you found a bug in the auto detection. 😢 I see that there could be a variation where a Sound Blaster (or compatible) device is detected before it checks for a Game Blaster (SB is of higher priority). I'll see what I can do to fix this. Thank you for pointing it out!

Reply 9 of 530, by OPLx

User metadata
Rank Member
Rank
Member
Scali wrote:

Yes, there are two versions of the SN76489, the early one, and the SN76489A.
There is also the SN76496, which has an extra audio input pin for mixing with other audio sources, but is otherwise equal to the SN76489A.
So if you support both types of noise generation, you should be okay with all the variations out there.

Do you mind clarifying what you meant by "support both types of noise generation"? I'm probably misreading that as it's possible to change the noise pattern on the chip. It doesn't seem possible, but I'm not intimately familiar with any tricks or undocumented features.

Reply 10 of 530, by autoexecdotbat

User metadata
Rank Member
Rank
Member

I'm not encountering a bug, I'm just saying it's an option, since it says the sa1099 emulation does not require a gameblaster or cms chip, despite the gameblaster containing not 1, but 2 such chips.

to win the game you must defeat coppa!
http://chng.it/DNc2L8LvLJ

Reply 11 of 530, by OPLx

User metadata
Rank Member
Rank
Member
autoexecdotbat wrote:

regarding the ay8910, the only varient that is vastly different is the ay8930, which is not supported by the vgm format, and will probably never be since it was used only on the covox sound master, which is poorly documented. the other variations (8912, 8913, 8914, and the yamaha varients like ym2149) only differ in pinouts.

Well, this is good news to hear! When I get a chance, I will look into how to map it's features onto the SAA1099.

Reply 12 of 530, by autoexecdotbat

User metadata
Rank Member
Rank
Member

thanks.
by the way, could you implement alternate cores for some of the chips, similar to the official vgm player for windows? It could change between cores for different chips. for example, for ay8910, the available cores could either be your's which will probably use sa1099, marcel de cogels for addlib, and fmsx core for sound blaster. for sn77489, the cores could hardware emulation via sa1099, hardware emulation via a tandy 3 voice chip, or the software based core used by the dos version of meka, or the sb/gus specific core used by frogger's coleco emulator for dos.

to win the game you must defeat coppa!
http://chng.it/DNc2L8LvLJ

Reply 13 of 530, by OPLx

User metadata
Rank Member
Rank
Member
autoexecdotbat wrote:

I'm not encountering a bug, I'm just saying it's an option, since it says the sa1099 emulation does not require a gameblaster or cms chip, despite the gameblaster containing not 1, but 2 such chips.

I'm sorry. I don't fully understand what you mean. The scenario where the bug will arise is if a machine has a Sound Blaster card and a Game Blaster installed. The Sound Blaster will always get detected first (even if it doesn't support the C/MS option). In this scenario, the Game Blaster will never used (though it is present). If what you have is a Sound Blaster 1.5/2.0 and you want to force usage of the SAA1099 chips, just add the -c option at the end (in this fashion):

SBVGM file.vgm -c

Last edited by OPLx on 2016-03-03, 22:29. Edited 1 time in total.

Reply 14 of 530, by OPLx

User metadata
Rank Member
Rank
Member
autoexecdotbat wrote:

thanks.
by the way, could you implement alternate cores for some of the chips, similar to the official vgm player for windows? It could change between cores for different chips. for example, for ay8910, the available cores could either be your's which will probably use sa1099, marcel de cogels for addlib, and fmsx core for sound blaster. for sn77489, the cores could hardware emulation via sa1099, hardware emulation via a tandy 3 voice chip, or the software based core used by the dos version of meka, or the sb/gus specific core used by frogger's coleco emulator for dos.

Thank you for the feedback. The player was written from scratch and only supports actual hardware that typically would have been available on the PC (no software emulation is used). The original motivation for the player was because I wanted to see how much of the NES' APU features could be simulated on the SAA1099. Since simulating the SN76489 on the SAA1099 was "simpler" compared to the NES APU, I went ahead and added support for that as well.

Seeing that there are VGM players available under Windows and other more modern platforms, it doesn't make sense to have an all encompassing VGM player under DOS as the player should also work on a slow 4.77 MHz PC (at least I hope it will).

Reply 16 of 530, by OPLx

User metadata
Rank Member
Rank
Member
autoexecdotbat wrote:

well, so did the ay and sn77489 emulator cores I mentioned.

Thank you again for the feedback. It is possible to emulate those chips in software (using the examples you mentioned), but doing so would raise the minimum CPU requirements for the player. The player's main goal is playback (in hardware) VGMs that support the SAA1099, YM3812, and YMF262. The simulation of the NES APU and SN76489 on the SAA1099 was more of a bonus feature that I had some time to implement.

Reply 17 of 530, by MrKsoft

User metadata
Rank Member
Rank
Member

As I've been working to make VGMs of a lot of DOS music, I'm so incredibly happy to see this and be able to play them back on the original hardware. I've linked it on the OPL Archive. Thanks so much!

edit: Works great! Are there plans for support for memory above 640k? A few large VGMs from my archive (mostly the ones by Madbrain) fail to allocate enough memory to play.

Wafflenet OPL Archive - Preserving MS-DOS music in a unified format!

Reply 18 of 530, by OPLx

User metadata
Rank Member
Rank
Member
MrKsoft wrote:

As I've been working to make VGMs of a lot of DOS music, I'm so incredibly happy to see this and be able to play them back on the original hardware. I've linked it on the OPL Archive. Thanks so much!

edit: Works great! Are there plans for support for memory above 640k? A few large VGMs from my archive (mostly the ones by Madbrain) fail to allocate enough memory to play.

You are quite welcome; I'm glad it is working well for you! 😀 Thank you for also putting up a link to the program. While working on the program, I was testing with VGMs at VGMRips and didn't run into very large files. It may take me some time (because of other obligations), but I can look into adding XMS support.

Reply 19 of 530, by lightmaster

User metadata
Rank Oldbie
Rank
Oldbie

OPLx:
I've been playing a lot of adlib music in the past, without and with your Ganbatte! plugin. Already had those d00 and d01 vibrant music files and the rare ones and more.
Thank you for Ganbatte and SBVGM!!
Cheers

25071588525_735097840e_b.jpg