Hi, if you have a motherboard with VIA VT82c686 southbridge and
AC97 and (!) SoundBlaster sound abilities, you might have noticed
that it is NOT enough to enable both AC97 and SB16 in the BIOS
CMOS setup. Programs act as if SB16 exists (unless you forget to
put a SET BLASTER=A220 I5 D1 or similar line into your autoexec),
but you will hear nothing.

Reason: For some stupid reason, the BIOS of your computer is missing
a small amount of code (less than 32 bytes) to unmute the card at
boot time. As a solution, VIA suggests loading a driver called VIAAUDIO.COM
... which is small, but if you do not use Win3.x (real mode not affected)
you do not even need that small program to stay in RAM!

Note that if you want AdLib / OPL3 music, you must load the software
synthesizer (which uses protected mode and is about 40k small) VIAFMTSR.COM
as well. You can get that driver at www.viaarena.com on the page for audio
drivers for Win... - along with megabytes of other Win32-only drivers in the
same file :-(. So I recommend that you hit google and find a place where you
can get the file alone, and/or hit your mail and tell VIA that they should
put a ZIP of the DOS drivers (far below 100k even with documentation) online
on their official page.

http://www.coli.uni-sb.de/~eric/stuff/soft/specials/ViaAC97enableDOS.c
(meant for DJGPP, but not ready to compile: Add dos.h and some macros like
#define outl(port,data) outportl((port),(data))
#define inl(port) inportl(port)
... my excuses for my syntax-laziness / not including the macros, but I do
actually think that nobody will want a bloated C program for this anyway!
The VIA tool is 0.5k and ViaAC97enableDOS.c explains you how you can do a
bare minimum implementation in 10 lines of NASM assembly...)

To do the (non-Win3.x) basic initialization stuff:

        mov al,0x39     ; for "enter Win" 0x19, for "leave Win" 0x29
        out 0x80,al
        mov eax,0x80003d48      ; <--- adjust to YOUR pcisel here!
        mov dx,0xcf8
        out dx,eax  
        mov dx,0xcfc
        in eax,dx       ; in al,dx would be enough
        and al,0xfe     ; same for "leave Win", for "enter Win" or al,1
        out dx,eax      ; out dx,al would be enough
        int 0x20        ; exit to DOS

Just paste the above code in a file "soundon.asm", get NASM from the
http://nasm.sourceforge.net/ site (unless it already came with your FreeDOS)
and do "nasm -o soundon.com soundon.asm" to assemble ("compile") the code
into a tiny DOS program which you can run from autoexec.

The 0x80003d48 value means: "access PCI, bus 0, device 7, functon 5, register
0x48". The ports 0xcf8 and 0xcf8 are index and data for PCI config access.
pcisel = (dev<<11) | (bus<<16) | (func<<8) | register | 0x80000000 in other
words. Bus 0 is usually PCI-and-onboard-stuff, bus 1 is usually AGP. The
devices on each bus can be numbered from 0..31, but you often have less.
The function number will be 0 unless 1 chip/board serves several functions.

Register 8 is device categorization: If that (32 bit) register >> 16 is
equal to 0x0401 then you have an audio device. That register & 0xff00 tells
you which interface (does anybody know which number means AC97?)... Note
that DOS programs usually do *not* support AC97 sound. VIA has some extra
functionality for SoundBlaster compatibility mode on the chip. Still I would
like to know the register contents (0, 4, ... 0xfc) for nForce2 AC97, maybe
we can figure out something for DOS on that chipset. Easiest way is to use
Linux "lspci" or "scanpci" tools with the right command line options, if
possible as root.

Eric.



-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click
_______________________________________________
Freedos-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freedos-devel

Reply via email to