VOGONS


Reply 120 of 318, by tanasen

User metadata
Rank Member
Rank
Member

Bought this card for a very small price from ebay. It is the low profile version.

Usqeo61.jpg

I like the FM sound a lot, but I have issues in games like Tomb Raider and Screamer 2 as this card seems to be incompatible. I use this card on my new socket 7 project and I'm really disappointed. Will check more games and if problems persist I might throw in another card.

edit: 🤣 I found out that there was an IRQ conflict with a printer port so I changed the settings and everything works fine!

PC1😜 III-S 1.4GHz, GA-6VTXE, 512MB SDRAM, Albatron FX5900XTV 128MB, SB Live! 5.1
PC2😜 III 800MHz, MS-6178, 256MB SDRAM, 3DFX Voodoo3 2000 PCI, Creative CT4810
PC3😜 MMX 200MHz, SY-5EAS5, 128MB SDRAM, Diamond Monster 3D, Diamond Viper V330, ESS 1868F

Reply 121 of 318, by rainwarrior

User metadata
Rank Newbie
Rank
Newbie

I'm very interested in this family of sound cards, especially the ESFM synthesizer.

I'm trying to find information about it, but its data sheets don't really describe anything about the extra FM features over OPL3 except for mentioning 20 voices instead of 18? I also can't seem to find any attempt to emulate it.

I intend to find these things out for myself (starting by disassembling ESFM.DRV) but if anyone knows anything useful about these chips I'd very much appreciate any knowledge that could get me closer to the goal of being able to emulate it!

Reply 122 of 318, by tpowell.ca

User metadata
Rank Member
Rank
Member

I agree. I must admit that after the genuine OPL3 synth (or perfect clones), this is the next best thing.
But I would opt for the ES1869 over the ES1868 in newer builds as it also supports 48kHz record/playback.

As for the 20 channels, my understanding is that it is really only available in Windows or in games specifically designed for this series of chips. I'm not aware of any such games. I've only seen native support for the ES688 which uses an external synth, usually an OPL3.

In windows, is there a noticable difference in midi playback between the ESFM and an OPL3 chip ?

  • Merlin: MS-4144, AMD5x86-160 32MB, 16GB CF, ZIP100, Orpheus, GUS, S3 VirgeGX 2MB
    Tesla: GA-6BXC, VIA C3 Ezra-T, 256MB, 120GB SATA, YMF744, GUSpnp, Quadro2
    Newton: K6XV3+/66, AMD K6-III+500, 256MB, 32GB SSD, AWE32, Voodoo3

Reply 123 of 318, by rainwarrior

User metadata
Rank Newbie
Rank
Newbie

Yes, Windows MIDI playback is very different, and this is actually what I'm most interested in. It has its own driver, with different patches, and responds differently to control events.

Reply 124 of 318, by badmojo

User metadata
Rank l33t
Rank
l33t

I look forward to seeing what you discover. I've wondered at the Audiodrive support that some games offer - logically this would be preferable to choosing SB Pro but in the case of Warcraft II it sounds bloody awful in my experience, like being under water.

I've also found that using that option will work for me in pure DOS, but not in a Windows 9x dosbox, all very mysterious!

Life? Don't talk to me about life.

Reply 125 of 318, by Windows9566

User metadata
Rank Member
Rank
Member

I had a Pentium 100 430FX Socket 5 PC with 16 MB RAM, 256k L2 Cache, Cirrus Logic GD5430, ESS ES1868, and a seagate medalist 1.2gb HDD that ran Windows 95, too bad i sold it back in the day. I still have the medalist drive, i hooked it up to my main PC, hooked it up to a IDE/SATA to USB 2 adapter and my external hdd, then backed the contents up from the 1.5gb hdd to a .7z archive, it had a lot of my files on it so i had to keep the HDD and i backed up the files from the seagate medalist HDD just in case it died when i wanted to access the files in the future.

R5 5600X, 32 GB RAM, RTX 3060 TI, Win11
P3 600, 256 MB RAM, nVidia Riva TNT2 M64, SB Vibra 16S, Win98
PMMX 200, 128 MB RAM, S3 Virge DX, Yamaha YMF719, Win95
486DX2 66, 32 MB RAM, Trident TGUI9440, ESS ES688F, DOS

Reply 126 of 318, by rainwarrior

User metadata
Rank Newbie
Rank
Newbie

Alright, I think I'm finished poring over the disassemblies for now. I'm still waiting for the hardware, but I think I've learned a lot about it from just inspecting the Windows FM drivers so far. I'll leave what I know at this point here, and will get back to it when I have my hands on the actual machine. Some of this is going to be about the hardware itself, and some of it will be just about the MIDI driver.

1. ESSFM.DRV 4.0.950 for ES1688 (source: my Windows 95 CD, CRC BCE1A309)
2. ESFM.DRV 4.04.00.1173 for ES1869 (source: here, CRC32 8F7EB956)

ESSFM.DRV was disappointing. It looked like a very minimal OPL3 and OPL2 compatible MIDI driver. The chip is in the flat melodic mode, so it has 9 or 18 2-op channels available.

Patches are in an embedded resource in the executable. Each patch is 28 bytes:

  • $00 - operator 0 opl3 $20
  • $01 - operator 0 opl3 $40
  • $02 - operator 0 opl3 $60
  • $03 - operator 0 opl3 $80
  • $04 - operator 0 opl3 $E0
  • $05 - operator 1 opl3 $20
  • $06 - operator 1 opl3 $40
  • $07 - operator 1 opl3 $60
  • $08 - operator 1 opl3 $80
  • $09 - operator 1 opl3 $E0
  • $0A-$13 - $00, presumably for an unused 4-op idea
  • $14 - $00, opl3 $A0 (replaced to be used for pitch)
  • $15 - $00, unused
  • $16 - $10, opl3 $B0 (replaced to be used for pitch)
  • $17 - $00, unused
  • $18 - voice opl3 $C0 (pan will be adjusted)
  • $19 - $00, unused
  • $1A - $02, unused
  • $1B - $00, unused

There is enough data for 256 patches. The first 128 are the regular instruments. The next 53 are percussion patches for channel 10 (starting at note 35). Each percussion note has a corresponding MIDI note pitch in a table in the first code segment at $0128 (2 byte entries: note pitch, then patch number, though the patch numbers just go from 0-53 anyway).

The driver responds to pitch bend, and a few controllers:

  • 7 Volume (coarse)
  • 8 Balance (coarse) - same as pan
  • 10 Pan (coarse) - hardpans with $30-50 in the centre
  • 123 All notes off (124-127 also trigger this)

Anyhow, that's a fairly complete description of what I found in ESSFM.DRV. When I was looking at some of the INF files with other ESS driver packages, I notice some of the later ones refer to this driver as something like "internal OPL2/OPL3 synthesis", rather than calling it "ESSFM" anymore, I think maybe because they'd called their newer enhanced version "ESFM" and wanted to reduce confusion about that.

ESFM.DRV was much more interesting. This is definitely not operating in OPL3 compatibility mode.

From the way it operates, it appears that the "20 voices" it mentions in its data sheet may all be 4-op voices? What I found indicates 18 voices, but 4-ops each (with some weirdness in the last 2 channels that might account for the other 2). So... if that's actually what this is, that's kind of incredible. It's not just an OPL3 with 2 more 2-op voices... I think it's more like some double OPL3 with 18 full 4-op voices!

In native mode the 4 registers seem to be reconfigured:

  • FM+0 - Read between other register writes for an appropriate delay, but otherwise should not be written to. (The data sheet claims that any write here will switch it into OPL3 emulation mode.)
  • FM+1 - Write data here.
  • FM+2 - Write low index here.
  • FM+3 - Write high index here.

Interfacing with this has a routine that does the following:

  • Write low index to FM+2
  • Read FM+0 2 times to delay
  • Write high index to FM+3
  • Read FM+0 6 times to delay
  • Write value to FM+1
  • Read FM+0 6 times to delay

So this interface is similar to OPL3 where you write an index to an internal register that you want to write, then send the data to it, with some delays in between, except the index is now a 16-bit value.

The voices and operators themselves, however, are arranged in a very flat, uniform manner. Registers $000-240 are divided into 8 registers per operator, 32 per voice.

  • Operator + 0 - OPL3 $20
  • Operator + 1 - OPL3 $40
  • Operator + 2 - OPL3 $50
  • Operator + 3 - OPL3 $80
  • Operator + 4 - OPL3 $A0
  • Operator + 5 - OPL3 $B0, but without the key-on bit.
  • Operator + 6 - OPL3 $C0
  • Operator + 7 - OPL3 $E0, but patches seem to use the upper bits?

So $00-$1F is 4 operators for voice 0. $20-3F is voice 1, etc.

For turning the voices on and off there is a dedicated set of registers. Write 1 to key on, 0 to key off. $240-24F each applies to voices 0-15.

Voice 16 and 17 seem to have two registers each for this. I don't really understand what this is for, they might be a special percussion device or something. So voice 16 gets $250 and $251, and voice 17 gets $252 and $253. At least, that's what this driver does. I'll need to investigate this more when I have the hardware. (My tentative guess is that the last two voices have their note-on split as 2-ops each, allowing them to be used as 4 2-op voices.)

This responds to more controllers than the other one:

  • 6 Data entry (coarse) - only used for pitch wheel sensitivity via registered parameter 0000 (see below)
  • 7 Volume (coarse) - a value of 0 will force all operator outputs attenuation to 63, otherwise it applies a per-operator attenuation described below.
  • 8 Balance (coarse) - same as pan
  • 10 Pan (coarse) - hardpans with $30-50 in the centre
  • 11 Expression (coarse) - affects the strength of some operators according to patch data
  • 64 Hold pedal
  • 98-99 Non-registered parameter - only used to cancel selection of registered parameter 0000
  • 100-101 Registered parameter - can be used to select the pitch wheel sensitivity parameter 0000
  • 120 All sound off
  • 121 All controllers off
  • 124,125 Omni mode off/on - seems to just stop all playing notes if not held by the hold pedal
  • 127 Poly operation - just does same as all sound off

Finally the patch data. This is also contained in a resource in the executable. This file starts with 256 2-byte pointer offsets (little-endian) to patches placed later in the resource. The first 128 correspond to the general MIDI instruments, and the next 128 correspond to each possible percussion note on channel 10. A pointer of $0000 indicates an empty instrument.

Patches themselves follow the pointer table at $0200. Each patch is 28 or 56 bytes. The 56 byte patches are a double patch, using 2 voices at once.

  • $00 - bit 0 = patch allowed on channel 16,17? bit 1-2 = patch type (see below). bits 4-7 can indicate a fixed pitch for each operator.
  • $01 - $00 unused
  • $02 - $00 unused
  • $03 - relative velocity for each operator
  • $04 - operator 0 OPL3 $20
  • $05 - operator 0 OPL3 $40 but output level may be adjusted based on $03
  • $06 - operator 0 OPL3 $60
  • $07 - operator 0 OPL3 $80
  • $08 - operator 0 OPL3 $A0 relative: bits 2-6 signed detune, bits 0-1 transpose low. fixed: direct value.
  • $09 - operator 0 OPL3 $B0 relative: bits 0-4 transpose high, signed. 5-7 signed octave transpose. fixed: direct value.
  • $0A - operator 0 OPL3 $C0 but the left/right bits are replaced by the channel's pan (if they aren't 0,0)
  • $0B - operator 0 OPL3 $E0 but seems to use the upper bits too? Not sure what for.
  • $0C-13 - operator 1
  • $14-1B - operator 2
  • $1C-23 - operator 3
  • $24-47 - second voice (optional)

So these are pretty interesting patches, and it indicates that each operator has its own pitch control rather than combining them in pairs like OPL3/OPL2 did. I'm not entirely sure where the FM algorithm selection bits are placed, since these are a bit reordered vs OPL3. There might even be extra algorithms available?

Patch byte $00 bits 1-2 indicate 3 kinds of patches: 0 = 1 voice, 1 = 2 voice but the second will be dropped if out of voices, and 2 = 2 voices but the second must always play. A value of 3 is invalid and will skip the note.

Patch byte $00 bit 0 seems to indicate whether or not the patch may use voice 16 or 17, but I don't understand how these two voices are supposed to work, or why they have 2 note-on registers each.

Patch byte $00 bits 4-7 each indicate that an operator might have a fixed pitch instead of a MIDI note relative pitch. Bit 4 for operator 0, bit 5 for operator 1, etc. If set these sill use the values in the patch directly, and will not be affected by the pitch wheel.

Patch byte $03 contains 4 2-bit values, each is a different mode for adjusting the output attenuation of the operator. Bits 0-1 for operator 0, bits 2-3 for operator 1, etc. This lets you choose individually which operators are controlled by note velocity (and it also applies to the same adjustments from the volume controller and expression controller). On a normal instrument you want attenuation for velocity on any output operator, but modulating operators you probably wouldn't unless you want the timbre to dull as the velocity drops. These four modes (0, 1 light, 2 medium, 3 strong but with a taper) all calculate a value to add to the logarithmic attenuation parameter.

  • 0 - 0
  • 1 - (127-v)/16
  • 2 - (127-v)/8
  • 3 - (v>=64)?((127-v)/4):(((63-v)/2)+16)

Note velocity, volume control, and expression each separately apply this forumula and get added to the base output attenuation, which clamps at 63. An exception is made for volume control of 0, which forces all operators' attenuation to 63.

Okay, I think that's everything I know from the drivers. There seem to be a lot of versions of both of these drivers, but hopefully other versions will be similar. The implication that it has 72 or maybe 80 operators instead of just 36 is pretty radical! Am excited to get to try out the real thing once it gets here.

Last edited by rainwarrior on 2019-02-28, 13:39. Edited 3 times in total.

Reply 127 of 318, by rainwarrior

User metadata
Rank Newbie
Rank
Newbie

I found a 1996 ESS Technology patent for FM synthesis. Not sure if there's anything in here that would really help this reverse engineering, but just in case it's useful (and for reference in case I need it later).

US Patent 5,581,045
December 3, 1996

Reply 128 of 318, by appiah4

User metadata
Rank l33t++
Rank
l33t++

Fascinating. I hope someone puts this to good use 😀

Reply 129 of 318, by gerwin

User metadata
Rank l33t
Rank
l33t

Good digging there rainwarrior!

Since this seems to be the ESS ISA general discussion here, I have some remarks and a question regarding an ES1688/968 based card. Picture is attached.
I would expect this card to work with the same ESSCFG as my other ES1688 card, but that gave only partial success. On a PnP enabled motherboard it indeed gets recognized by the usual ESSCFG, but on my 486 motherboard it says "Unable to find ES688, ES1688, or ES1788" every time.
Now I found out about the existence of a file called ES968.COM, and did some searching. There are DOS drivers around with ES968.COM included and although Device driver ES968.COM is seemingly not mandatory, the ESSCFG file that accompanies it does recognize my sound card. Like this ESSCFG on this FTP server which is labelled "2.8 for ES968 + ES1688". Works fine now: SBPro Digi, ESS Digi, FM Music, Midi Music (with DB) 😀

MWMENU.txt on the same FTP server says this:

ES968.COM is a device drive to initialize the sound card. ESSCFG.EXE is a utilities to configure the sound card paramet […]
Show full quote

ES968.COM is a device drive to initialize the sound card.
ESSCFG.EXE is a utilities to configure the sound card parameter.
ESSVOL.EXE is a utilities to configure the volume of the sound card.
....
ES968.COM utilities is needed to initialized the sound card to
enable or disable the on-board secondary port IDE interface.

After this installation, please edit the config.sys and ensure
that the ES968.COM is loaded before the ATAPI CD-ROM MSDOS driver.
Ensure also that the parameter /c:e is used.

There are no configuration jumpers on this particular card. According to Stason.org the CN3 header next to the wavetable header is a mixer expansion interface. This is also kinda strange since the ES968 mixer expansion is already soldered on. I suppose that is why these two jumpers are on CN3.

The remaining question is, are the ES968 mixer enhancements usable in DOS?

--> ISA Soundcard Overview // Doom MBF 2.04 // SetMul

Reply 130 of 318, by cde

User metadata
Rank Member
Rank
Member
tpowell.ca wrote:

But I would opt for the ES1869 over the ES1868 in newer builds as it also supports 48kHz record/playback.

So I'm trying to understand the importance of 48 KHz as opposed to cards that only support the classic 44.1 KHz. Is it really important for newer games? I currently have a ES1868F and I like it a lot, haven't run into any issues/incompatibilities, it is pretty much perfect.

By the way an interesting piece of historical information wrt 44.1 Khz vs 48 Khz, from https://forum.videohelp.com/threads/272299-Wh … d-for-DVD-specs:

44KHz was a compromise to fit a 74 minute symphony or opera on an uncompressed 650MB CD.

When CD was developed, studios were mostly using analog paths with some digital processing. Pro digital audio standardized later on 48KHz sampling.

44KHz has a Nyquist cutoff of 22KHz but requires a more expensive analog low pass filter before A/D. This isn't much of a problem for CD Mastering labs but the little digital guy wanted more sampling headroom so that less sharp, less expensive low pass filters could be used.

So I suppose when playing a DVD a strong enough CPU will be needed to convert 48 KHz to 44.1 KHz if the card doesn't support 48 KHz.

Also relevant: https://www.protoolsproduction.com/44-1khz-vs … hich-is-better/

Reply 131 of 318, by AvalonH

User metadata
Rank Member
Rank
Member

Is the ESFM regarded as a more accurate in games than creative's own clone CQM (on a AWE64) for OPL3/adlib sound.

Reply 132 of 318, by gdjacobs

User metadata
Rank l33t++
Rank
l33t++
AvalonH wrote:

Is the ESFM regarded as a more accurate in games than creative's own clone CQM (on a AWE64) for OPL3/adlib sound.

I think so, although opinions vary.

All hail the Great Capacitor Brand Finder

Reply 133 of 318, by tpowell.ca

User metadata
Rank Member
Rank
Member
gdjacobs wrote:

I think so, although opinions vary.

As do I. Less metallic and agreeable to the ears.
If I was building a machine that needed good FM synthesis, and a true OPL-chiped card with good features wasn't an option, the ESFM solution would be first on my list by far.

  • Merlin: MS-4144, AMD5x86-160 32MB, 16GB CF, ZIP100, Orpheus, GUS, S3 VirgeGX 2MB
    Tesla: GA-6BXC, VIA C3 Ezra-T, 256MB, 120GB SATA, YMF744, GUSpnp, Quadro2
    Newton: K6XV3+/66, AMD K6-III+500, 256MB, 32GB SSD, AWE32, Voodoo3

Reply 134 of 318, by appiah4

User metadata
Rank l33t++
Rank
l33t++
AvalonH wrote:

Is the ESFM regarded as a more accurate in games than creative's own clone CQM (on a AWE64) for OPL3/adlib sound.

It is definitely the most accurate non-clone implementation that I have heard.

Reply 135 of 318, by canthearu

User metadata
Rank Oldbie
Rank
Oldbie

ESFM is very very good.

Even DAC style tricks work just fine with it (where it fails with CQM and other bad OPL3 clones)

Reply 136 of 318, by Srandista

User metadata
Rank Oldbie
Rank
Oldbie

Yes, it is. I'm so glad, that their last hurah with ESFM was with PCI based ESS Solo-1 (ES1938S).

Socket 775 - ASRock 4CoreDual-VSTA, Pentium E6500K, 4GB RAM, Radeon 9800XT, ESS Solo-1, Win 98/XP
Socket A - Chaintech CT-7AIA, AMD Athlon XP 2400+, 1GB RAM, Radeon 9600XT, ESS ES1869F, Win 98

Reply 137 of 318, by pc-sound-legacy

User metadata
Rank Member
Rank
Member
jwt27 wrote:

Do you know what kind of synth these ESS cards are designed for?

On Atrend and Labway YMF71x cards there's space for a QS1000 synth + wave ROM but I've never actually seen a card with these chips on it.

This is a very late reply but i recently got this card from serbia. (Seems to be quite rare, there isn't even a FCC database entry anymore) I will upload e record on my YT channel soon.

Reply 138 of 318, by canthearu

User metadata
Rank Oldbie
Rank
Oldbie

Thats pretty cool, a complete ESS board (sound controller/wavetable and 3d effects processor)

Speaking of the QS1000 synth, I got an ess soundcard off ebay with such a beast on it. Not too bad, sits in my P233 computer 😀

Reply 139 of 318, by cde

User metadata
Rank Member
Rank
Member

So I have received yesterday my TerraTec 16/96 Gold. It is an amazing card and well worth the (slightly expensive) price. Noise is non existent, and I like the fact that it has separate line out and speaker outputs. It also seems to have 2.54mm headers for each output/input, so it should be pretty easy to wire it to my HD audio panel cable with regular female-male dupont cables, no soldering required. Waveblaster is working fine with the excellent DreamBlaster X2.

My previous card was the Edison Gold 16 Plus/KWX-SC200 (ESS 1868F too) and despite not looking like a high-end card it has extremely low noise, so I can definitely recommend it as a cheaper option. One small drawback is that it doesn't have separate line out/speaker outputs, a set of jumpers is necessary. Also, I had to solder on the back of the card jumper wires to connect it to my HD audio panel cable.

Be aware that all ES1868F are not created equal, I have tested a couple ones with non-negligible noise (although nowhere near as bad as the ALS100/ALS100+). Another good card with low noise is the KWX-SND21-W (MPB-000074 1.1) with UTC VFA33 LM386 preamps. It looks very similar to the KWX-SC200 but with unpopulated ES689/ES981/2 and no J10 connector; it has no 3D function.

Last edited by cde on 2020-02-09, 13:16. Edited 6 times in total.