Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[mini-HOWTO] ISA PnP ("jumperless") soundcards in free DOS

67 views
Skip to first unread message

Ivan Shmakov

unread,
Jun 24, 2022, 6:50:35 AM6/24/22
to
Those installing an ISA PnP ("jumperless") Soundblaster-compatible
soundcard into their DOS box might find soon enough that DOS
software refuses to even detect one, much less work with it,
as such a board, until and unless properly configured by
software, will not in any way respond to the usual IO.

Such boards were often accompanied with a floppy with
a proprietary "driver" to configure the card for DOS. Such
drivers are, as a rule, no longer easily obtainable, however.

Another proprietary (freeware) alternative that's still being
maintained is the UNISOUND driver.

Yet another, arguably overlooked, alternative is to use
"ISA PnP utilities" [1], together with the Soundblaster Pro+
mixer control "sbmix" program [2].

[1] http://roestockfox.co.uk/isapnptools/index.html
[2] http://bttr-software.de/products/sbmix/


Usage

> SET BLASTER=Aio Iirq Ddma8 Hdma16 Pmpu

> SET BLASTER=A220 I5 D1 H5 P330

> SBMIX

> SBMIX /?

> SBMIX [master] [/Wwave] [/Ffm] [/Ccdrom] [/Llinein] [/Xmic]

> SBMIX 13 /W15 /F11 /C0 /L0 /X0

Where master, wave, fm, cdrom, linein are 0 .. 15 (sets both
left and right channel's volume) or 0,0 .. 15,15 (sets left
and right volume separately.)

> ISAPNP ISAPNP.CFG

> PNPDUMP > PNPDUMP.OUT

Typically, PNPDUMP.OUT so created will list several possible
confiugrations for each of the soundcard's /logical devices/
(as well as that of other ISA PnP boards detected, if any.)
By uncommenting portions of it, a suitable ISAPNP.CFG
configuration can be made, as outlined in a section below.


Installation

The requisite files from the isapnptools distribution [3]
are isapnptools-1.27/src/isapnp.exe and .../pnpdump.exe
(< 394 KiB in total.) Both are 386+ and require a version
of CWSDPMI.EXE (such as one shipped with FreeDOS) to be
in PATH.

The distribution also has, among other files, README, COPYING
and doc/isapnpfaq.txt, which one might want to read before use.

From the sbmix distribution [4], the only required file is
SBMIX.EXE (< 5 KiB.) It's claimed to be compatible with i8086+
(perhaps its 8-bit i8088 counterpart as well?)

The other files packaged are SBMIX.TXT, LEGAL.TXT and HISTORY.TXT.

[3] http://roestockfox.co.uk/files/isapnptools/isapnptools-1.27.bin.tgz
[4] http://bttr-software.de/products/sbmix/sbmixb.zip

As usual, it's possible to place ISAPNP.EXE, PNPDUMP.EXE and
(or) SBMIX.EXE into either a common directory listed in PATH
(such as \FREE\BIN), or to use separate per-package directories
(such as \FREE\ISAPNP and \FREE\SBMIX.) Arguably while it
makes every sense to keep SBMIX in PATH, it's not as useful
for the ISA PnP tools to be there, as they are commonly used
at most once per boot, such as being called from AUTOEXEC.BAT.


Configuration

Portions of PNPDUMP output for a ESS1868-based card are provided
at the bottom of this document. As can be seen, the output is
extensively commented and, to a degree, self-explanatory.

By uncommenting the "priority preferred" sections (or the only
choice given for logical device LD 0) and removing superfluous
comments, we can get the following configuration.

### ess1868.cfg -*- Conf -*-

# (DEBUG)
(READPORT 0x0273)
(ISOLATE PRESERVE)
(IDENTIFY *)
(VERBOSITY 2)
## NB: or WARNING
(CONFLICT (IO FATAL) (IRQ FATAL) (DMA FATAL) (MEM FATAL))

(CONFIGURE ESS1868/-1 (LD 0
(IO 0 (SIZE 8) (BASE 0x0800))
(NAME "ESS1868/-1[0]{ESS ES1868 Plug and Play AudioDrive}")
(ACT Y)))

(CONFIGURE ESS1868/-1 (LD 1
(DMA 0 (CHANNEL 1))
(DMA 1 (CHANNEL 0))
(INT 0 (IRQ 5 (MODE +E)))
(IO 0 (SIZE 16) (BASE 0x0220))
(IO 1 (SIZE 4) (BASE 0x0388))
(IO 2 (SIZE 2) (BASE 0x0330))
(NAME "ESS1868/-1[1]{ESS ES1868 Plug and Play AudioDrive}")
(ACT Y)))

(CONFIGURE ESS1868/-1 (LD 2
(IO 0 (SIZE 1) (BASE 0x0201))
(NAME "ESS1868/-1[2]{ESS ES1868 Plug and Play AudioDrive}")
(ACT Y)))

(CONFIGURE ESS1868/-1 (LD 3
(INT 0 (IRQ 12 (MODE +E)))
(IO 0 (SIZE 8) (BASE 0x0168))
(IO 1 (SIZE 2) (BASE 0x036e))
(NAME "ESS1868/-1[3]{ESS ES1868 Plug and Play AudioDrive}")
(ACT Y)))

(WAITFORKEY)

### ess1868.cfg ends here

The configuration is activated by running ISAPNP on the file:

> ISAPNP ESS1868.CFG

It's ought to report of a successful configuration, or the errors
detected, such as wrong syntax, unacceptable values, or attempts
to assign a single bus resource to multiple devices.

The BLASTER environment variable setting corresponding to the
configuration above would be:

> SET BLASTER=A220 I5 D1 P330

While some DOS software is either capable of detecting a
Soundblaster-compatible card without such a variable, or uses
its own means to store such configuration, having this variable
set doesn't hurt, and is required to run SBMIX at the least.

The latter can be used as a basic test as well:

> SBMIX

If the card's DSP IO port range is properly configured, the
command above will report current mixer settings.

Note that some ISA PnP soundcards will have master and (or)
"wave" (DAC) volumes set to zero after ISAPNP configuration,
so in order for them to be usable it's necessary to invoke
/both/ ISAPNP and SBMIX, like:

\FREE\ISAPNP\ISAPNP \MISC\ESS1868.CFG
SET BLASTER=A220 I5 D1 P330
SBMIX 12 /w12 /f12

Configuration for cards based on other chips can be created from
the PNPDUMP output similarly, though the bus resources, such
as IO port ranges, IRQs, DMA channels and (or) memory mapped
ranges, will vary, as well as their distribution among "logical
devices."

For example, for a CS4236-based board the configuration might
be as follows. Note that while ESS1868 had DSP, OPL and MPU
resources configured as logical device LD 1 (and game port as
LD 2), CS4236 has DSP and OPL in its LD 0, game port in LD 1,
and MPU in LD 3.

### cs4236.cfg -*- Conf -*-

# (DEBUG)
(READPORT 0x0273)
(ISOLATE PRESERVE)
(IDENTIFY *)
(VERBOSITY 2)
## NB: or WARNING
(CONFLICT (IO FATAL) (IRQ FATAL) (DMA FATAL) (MEM FATAL))

(CONFIGURE CSC4236/-1 (LD 0
(DMA 0 (CHANNEL 1))
(DMA 1 (CHANNEL 0))
(INT 0 (IRQ 5 (MODE +E)))
(IO 0 (SIZE 4) (BASE 0x0534))
(IO 1 (SIZE 4) (BASE 0x0388))
(IO 2 (SIZE 16) (BASE 0x0220))
(NAME "CSC4236/-1[0]{WSS/SB }")
(ACT Y)))

(CONFIGURE CSC4236/-1 (LD 1
(IO 0 (SIZE 8) (BASE 0x0200))
(NAME "CSC4236/-1[1]{GAME }")
(ACT Y)))

(CONFIGURE CSC4236/-1 (LD 2
(IO 0 (SIZE 8) (BASE 0x0120))
(NAME "CSC4236/-1[2]{CTRL }")
(ACT Y)))

(CONFIGURE CSC4236/-1 (LD 3
(INT 0 (IRQ 9 (MODE +E)))
(IO 0 (SIZE 2) (BASE 0x0330))
(NAME "CSC4236/-1[3]{MPU }")
(ACT Y)))

(WAITFORKEY)

### cs4236.cfg ends here


Licensing

Per isapnptools-1.27/COPYING, the ISA PnP utilities package
is licensed under GNU General Public License version 2.

Per sbmixb.zip LEGAL.TXT, SBMIX is licensed under a 'modified'
BSD license.

This document is licensed under Creative Commons Attribution-
ShareAlike (CC BY-SA) license, either version 3, or, at your
option, any later version published by Creative Commons.


Appendix: PNPDUMP output for an ESS1868-based soundcard

# Trying port address 0273
# Board 1 has serial identifier 27 ff ff ff ff 68 18 73 16

# (DEBUG)
(READPORT 0x0273)
(ISOLATE PRESERVE)
(IDENTIFY *)
(VERBOSITY 2)
(CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING

# Card 1: (serial identifier 27 ff ff ff ff 68 18 73 16)
# Vendor Id ESS1868, No Serial Number (-1), checksum 0x27.
# Version 1.0, Vendor version 1.0
# ANSI string -->ESS ES1868 Plug and Play AudioDrive<--
#
# Logical device id ESS0000
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy

(CONFIGURE ESS1868/-1 (LD 0
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0800
# Maximum IO base address 0x0ff8
# IO base alignment 8 bytes
# Number of IO addresses required: 8
# (IO 0 (SIZE 8) (BASE 0x0800))
(NAME "ESS1868/-1[0]{ESS ES1868 Plug and Play AudioDrive}")
# (ACT Y)
))

(CONFIGURE ESS1868/-1 (LD 1

# Multiple choice time, choose one only !

# Start dependent functions: priority preferred
# First DMA channel 1.
# 8 bit DMA only
# Logical device is not a bus master
# DMA may execute in count by byte mode
# DMA may not execute in count by word mode
# DMA channel speed in compatible mode
# (DMA 0 (CHANNEL 1))
# Next DMA channel 0 or 3.
# 8 bit DMA only
# Logical device is not a bus master
# DMA may execute in count by byte mode
# DMA may not execute in count by word mode
# DMA channel speed in compatible mode
# (DMA 1 (CHANNEL 0))
# IRQ 5.
# High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 5 (MODE +E)))
# Fixed IO base address 0x0220
# Number of IO addresses required: 16
# (IO 0 (SIZE 16) (BASE 0x0220))
# Fixed IO base address 0x0388
# Number of IO addresses required: 4
# (IO 1 (SIZE 4) (BASE 0x0388))
# Fixed IO base address 0x0330
# Number of IO addresses required: 2
# (IO 2 (SIZE 2) (BASE 0x0330))

...

# End dependent functions
(NAME "ESS1868/-1[1]{ESS ES1868 Plug and Play AudioDrive}")
# (ACT Y)))

(CONFIGURE ESS1868/-1 (LD 2

# Multiple choice time, choose one only !

# Start dependent functions: priority preferred

# (IO 0 (SIZE 1) (BASE 0x0201))

# (IO 0 (SIZE 1) (BASE 0x0200))
(NAME "ESS1868/-1[2]{ESS ES1868 Plug and Play AudioDrive}")
# (ACT Y)
))

(CONFIGURE ESS1868/-1 (LD 3

# Multiple choice time, choose one only !

# Start dependent functions: priority preferred

# (INT 0 (IRQ 12 (MODE +E)))

# (IO 0 (SIZE 8) (BASE 0x0168))

# (IO 1 (SIZE 2) (BASE 0x036e))

(NAME "ESS1868/-1[3]{ESS ES1868 Plug and Play AudioDrive}")
# (ACT Y)
))
# End tag... Checksum 0x00 (OK)

# Returns all cards to the "Wait for Key" state
(WAITFORKEY)

--
FSF associate member #7257 http://am-1.org/~ivan/
0 new messages