First post, by digger

User metadata
Rank Member

Alright everyone,

So there's this "pet project" that I have been trying to work on in my spare time for the last few years now, but haven't been able to make much progress with on my own.

Namely, I've been wanting to dust off the assembly sources of VSB ("Virtual Sound Blaster" by Andrew Zabolotny), with the intent to do the following with it (in order):

  • Port it from TASM to an open source assembler, such as FASM, (J)WASM or NASM
  • Make it work with JEMM/JLOAD as an open source alternative to QEMM
  • Make it support more modern audio devices for output, possibly by borrowing the AC'97 and HDA driver code from an audio playback DOS library called JUDAS, which I found on RayeR's web site
  • Make it compatible with a broad range of PC chipsets, both old, new and everything in between, basically anything 386 and up
  • Make it coexist with adlipt, if installed
  • Make it work with both real-mode games and games powered by DOS extenders such as DOS/4GW
  • Optionally upport OPL2/OPL3 emulation using code from other projects such as OPL3EMU by datajake1999
  • Focus on stable and high quality Sound Blaster 1.5/2.0 emulation first, optionally add emulation support for later sound cards later

However, although I have been dabbling with DOS assembly in my spare time and also have set up DJGPP as a cross-compiler in a Linux development environment, my low-level/systems programming skills are still very limited. I'd very much like to learn, though! 😀

However, I've come to the conclusion that for this project to go anywhere, I can't work on this alone. I'll need some help from knowledgeable enthusiasts that would be willing to work on this with me.

So I'm looking for people who are interested in working on this toegether with me and preferably have more skills with this than I do. To be clear, it is not my intent to put other people to work. I definitely want to be one of the people working on this and I'd very much like to gain more skills in low-level DOS and hardware emulation programming, as well as have fun while working on something that I believe would be very useful to the retro graming community. But I think that will only succeed if I work on this together with others.

At the very least, if no one is interested in actively working on this, could I perhaps use this topic to call on you for questions every now and then as I try to figure this out by myself?

To be clear, I've already made some serious effort in porting the code base to FASM, but I kept running into issues. I already posted on the Flat Assembler forum with questions I ran into and got some helpful answers there, but I still haven't been successful in getting the code anywhere near working on FASM. Also, I've come to the conclution that for the longer term, as well as for flexibility w.r.t. the development environment I wish to use, it would probably be more useful to port the code to NASM instead. But I haven't gotten very far with that either. NASM has a TASM compatibility mode, but the original VSB source code uses so many TASM-specific features, such as "ideal mode", that the TASM compatibility that is flaunted in NASM (and also the TASM compatibility mode in other assemblers for that matter) don't cut it and can't seem to assemble the code without some serious porting work.

Perhaps it would be less effort if I started from scratch, using the VSB sources only as a reference. What do you all think? And are there any people here who are willing to step up to the plate and help me out with this?

Thank you all at any rate! 😀

Reply 1 of 1, by rasz_pl

User metadata
Rank Member
digger wrote:

Make it work with both real-mode games and games powered by DOS extenders such as DOS/4GW

is that even possible?
Real mode games will work, because you force computer into V86 mode, program I/O permission map to trap 0x220, 0x40-0x43 (any attempts at reprogramming timer, apparently impossible with EMM386!) port accesses, and hijack Interrupt 8.
But games using extenders will work in protected mode and are free to mess around/reprogram anything, maybe even extenders themselves reset stuff? hmm on the other hand dos4gw games do work from Windows command line, so it must be possible to trap stuff even from under extenders.

Count me interested. Iv always wanted to play with this stuff. Idea of software emulated sound blaster in ~1991 always fascinated me, wonder whats the overhead of 22K traps/interrupts/io operations per second on a 16-33MHz cpu.

https://github.com/joyent/sdcboot/tree/master … source/jemm/jlm looks promising
SoftMPU uses similar facilities and doesnt work with protected mode games. Same with aweutil.
But there was also this https://en.wikipedia.org/wiki/Ensoniq_AudioPC … S_compatibility proving you could emulate SB for protected mode games in pure dos, SBINIT.COM might be worth investigating
more interesting stuff https://flaterco.com/kb/audio/PCI/index.html

Aureal Vortex and Vortex 2
Aureal cards are a nice alternative to AudioPCI and SB Live!. They are 48 kHz and their OPL3 is still only an emulation, but their resampling is better and they come with a different soundfont. Interestingly, although the DOS driver is available only as part of a W98 drivers distribution, it appears not to require an EMM.


then there is this http://rayer.g6.cz/hardware/asusp5ld.2/serrnmi.txt stating PCI cards just snoop on address bus and trigger interrupt when they see incoming port 220 access 🙁 so PCI cards dont use fancy protected mode trapping after all