Updated, added chapter on configuration and architecture.

diff --git a/documentation/status/multimedia b/documentation/status/multimedia
index 0174d3e..36fd01d 100644
--- a/documentation/status/multimedia
+++ b/documentation/status/multimedia
@@ -1,358 +1,598 @@
-This file contains information about the implementation of the
-multimedia layer of WINE.
 
-The libraries consist of MMSYSTEM.DLL (win16), WINMM.DLL (win32) and
-some (abstracted, not Windows compatible) lowlevel drivers. The
-implementation can be found in the multimedia/ subdirectory.
+   This file contains information about the implementation of the
+   multimedia layer of WINE. The libraries consist of MMSYSTEM.DLL
+   (win16), WINMM.DLL (win32) and some (abstracted, not Windows
+   compatible) low level drivers.
+   
+   The implementation can be found in the dlls/winmm/ sub directory.
+   
+0. Overview
+===========
+                                       
+   The multimedia stuff is split into 3 layers. The low level (device
+   drivers), mid level (MCI commands) and high level abstraction layers.
+   
+   The low level may depend on current hardware and OS services (like
+   OSS). Mid level (MCI) and high level must be written independently
+   from the hardware and OS services.
+   There are two specific low level drivers call mappers (for wave and
+   +midi) whose role is to :
+     * help choosing one low level driver between many
+     * add the possibility to convert stream (ie ADPCM => PCM)
+     * add the possibility to filter a stream (adding echo, equalizer...)
+       
+   All of those components are defined as DLLs (one by one) and are
+   candidate for dllglue migration.
+   
+1. Low level layers
+===================
+                                       
+   Please note that native low level drivers are not currently supported
+   in WINE, because they either access hardware components or require
+   VxDs to be loaded; WINE does not correctly supports those two so far.
+   
+   The following low level layers are implemented:
+   
+1.1 (Wave form) Audio
+---------------------
 
-The multimedia stuff is split into 3 layers. The lowlevel (device
-drivers), midlevel (MCI commands) and highlevel abstraction layers.
-
-The lowlevel may depend on current hardware and OS services (like
-OSS). Mid-level and high-level must be written independantly from the
-hardware and OS services.
-
-1. Lowlevel layers
-==================
-
-   Please note that native low-level drivers are not currently
-   supported in WINE, because they either access hardware composants
-   or require VxDs to be loaded; WINE does not correctly supports
-   those two so far. 
-
-   Following lowlevel layers are implemented:
-
-1.1 (Waveform) Audio
---------------------
-
-   MMSYSTEM and WINMM call the real lowlevel audiodriver using
-   the wodMessage/widMessage function in multimedia/audio.c, which
-   handles the different requests.
-
-1.1.1 OSS implementation
-
-   The lowlevel audio driver is currently only implemented for the 
-   OpenSoundSystem (OSS) as supplied in the Linux and FreeBSD kernels
-   by 4Front Technologies (http://www.4front-tech.com/). The presence
-   of this driver is checked by configure (depends on the
-   <sys/soundcard.h> file). 
-
+   MMSYSTEM and WINMM call the real low level audio driver using the
+   wodMessage/widMessage which handles the different requests.
+   
+  1.1.1 OSS implementation
+  
+   The low level audio driver is currently only implemented for the
+   OpenSoundSystem (OSS) as supplied in the Linux and FreeBSD kernels by
+   [1]4Front Technologies. The presence of this driver is checked by
+   configure (depends on the <sys/soundcard.h> file). Source code resides
+   in dlls/winmm/wineoss/audio.c,
+   
    The implementation contains all features commonly used, but has
    several problems (see TODO list).
-
+   
    TODO:
-   	- add asynchronous reads (must use threads) as done for writes
-	- verify all functions for correctness
-	- add drivers for other soundsystems (Sun Audio, remote audio
-          systems (using X extensions, ...), ALSA
-	- WaveHdr must be sent though mmsystem.c to get the linear
-          address set correctly. An application calling directly
-          (wod|wid)Message will fail
-
-1.1.2 Wave mapper
- 
-   The Wave mapper device allows to load on-demand codecs to perform
-   software conversion for the types the actual low level driver
-   (hardware) does not support. Those codecs are provided thru the
-   standard ACM drivers. 
-
-   Wave mapper driver implementation has not started. Core DLL for ACM
-   support can be found in dlls/msacm
-
-   TODO:
-	- implement wave mapper
-	- don't forget to fix builtin ms acm drivers loading which has 
-          been disabled.
-
+     * add asynchronous reads [recording] (must use threads) as done for
+       writes [playing]
+     * verify all functions for correctness
+     * looping of WaveHdr will fail
+     * share access to /dev/dsp with dsound interface (either on a
+       descriptor basis, or using a virtual mixer between different wave
+       inputs. EsounD provides this type of capability).
+       
+  1.1.2 Other sub systems
+  
+   None are available. Could think of Sun Audio, remote audio systems
+   (using X extensions, ...), ALSA, EsounD
+   
 1.2 MIDI
 --------
 
-   MMSYSTEM and WINMM call the lowlevel driver functions in
-   multimedia/midi.c using the midMessage and the modMessage
-   functions. 
-
-1.2.1 OSS driver
-	
-   The lowlevel audio driver is currently only implemented for the 
-   OpenSoundSystem (OSS) as supplied in the Linux and FreeBSD kernels
-   by 4Front Technologies (http://www.4front-tech.com/). The presence
-   of this driver is checked by configure (depends on the
-   <sys/soundcard.h> file, and also some specfic defines because MIDI
-   is not supported on all OSes by OSS).
+   MMSYSTEM and WINMM call the low level driver functions using the
+   midMessage and the modMessage functions.
+   
+  1.2.1 OSS driver
+  
+   The low level audio driver is currently only implemented for the
+   OpenSoundSystem (OSS) as supplied in the Linux and FreeBSD kernels by
+   [1]4Front Technologies . The presence of this driver is checked by
+   configure (depends on the <sys/soundcard.h> file, and also some
+   specific defines because MIDI is not supported on all OSes by OSS).
+   Source code resides in dlls/winmm/wineoss/midi.c
+   
    Both Midi in and Midi out are provided. The type of MIDI devices
    supported is external MIDI port (requires an MIDI capable device -
    keyboard...) and OPL/2 synthesis (the OPL/2 patches for all
-   instruments are in midiPatch.c). 
-
+   instruments are in midiPatch.c).
+   
    TODO:
-	- Do not implement a software synthesizer. This should be done
-	  using MIDI loopback devices in an external program (like
-          timidity). The only trouble is that timidity is GPL'ed...
-        - use better instrument definition for OPL/2 (midiPatch.c) or
-          use existing instrument definition (from playmidi or kmid)
-          with a .winerc option
-        - have a look at OPL/3 ?
-	- MidiHdr must be sent though mmsystem.c to get the linear
-          address set correctly. An application calling directly
-          (wod|wid)Message will fail
-	- implement asynchronous playback of MidiHdr (regular and/or
-          stream) 
-	- use a more accurate read mechanism than the one of snooping
-          on timers
-
-1.2.2 MIDI mapper
-
-   Midi mapper allows to map each one of 16 MIDI channels to a
-   specific instrument on an installed sound card. This allows for
-   example to support different MIDI instrument definition (XM,
-   GM...). It also permits to output on a per channel basis to
-   different MIDI renderers. 
-
-   TODO:
-	- implement the Midi mapper
-
+     * use better instrument definition for OPL/2 (midiPatch.c) or use
+       existing instrument definition (from playmidi or kmid) with a
+       .winerc option
+     * have a look at OPL/3 ?
+     * implement asynchronous playback of MidiHdr
+     * implement STREAM'ed MidiHdr (question: how shall we share the code
+       between the midiStream functions in MMSYSTEM/WINMM and the code
+       for the low level driver)
+     * use a more accurate read mechanism than the one of snooping on
+       timers (like select on fd)
+       
+  1.2.2 Other sub systems
+  
+   Could support other midi implementation for other sub systems (any
+   idea here ?)
+   
+   Could also implement a software synthesizer, either inside Wine or
+   using using MIDI loop back devices in an external program (like
+   timidity). The only trouble is that timidity is GPL'ed...
+   
 1.3 Mixer
 ---------
 
-   MMSYSTEM and WINMM call the lowlevel driver functions in
-   multimedia/mixer.c using the mixMessage function.
-
-1.3.1 OSS implementation
-
-   The current implementation uses the OpenSoundSystem mixer.
+   MMSYSTEM and WINMM call the low level driver functions using the
+   mixMessage function.
+   
+  1.3.1 OSS implementation
+  
+   The current implementation uses the OpenSoundSystem mixer, and resides
+   in dlls/winmm/wineoss/mixer.c
    
    TODO:
-   	- implement mixing mute functionality for OSS.
-	- implement mixing lowlevel drivers for other mixers (ALSA...)
-	- implement notification mechanism when state of mixer's
-          controls change
-	- handlers used for mixer are currently poorly implemented
+     * implement notification mechanism when state of mixer's controls
+       change
+       
+1.3.2 Other sub systems
 
+   TODO:
+     * implement mixing low level drivers for other mixers (ALSA...)
+       
 1.4 AUX
 -------
+
+   The AUX low level driver is the predecessor of the mixer driver
+   (introduced in Win 95).
    
-   The API consists of the aux* functions found in
-   multimedia/mmsystem.c. They call auxMessage in multimedia/mmaux.c.
-
-   The aux* functions are the predecessor of the mixer* functions.
-
-1.4.1 OSS driver
-
+  1.4.1 OSS driver
+  
    The implementation uses the OSS mixer API, and is incomplete.
-
+   
    TODO:
-   	- verify the implementation
-	- check with what is done in mixer
-	- open question: shall we implement it on top of the low level 
-	  mixer functions ?
-
-1.7 JOYSTICK
+     * verify the implementation
+     * check with what is done in mixer
+     * open question: shall we implement it on top of the low level mixer
+       functions ?
+       
+1.5 Joystick
 ------------
-   
-   The API consists of the joy* functions found in
-   multimedia/joystick.c. The implementation currently uses the Linux
-   joystick device driver API. It is lacking support for enhanced
-   joysticks and has not been extensively tested.
 
+   The API consists of the joy* functions found in dlls/winmm/joystick.c.
+   The implementation currently uses the Linux joystick device driver
+   API. It is lacking support for enhanced joysticks and has not been
+   extensively tested.
+   
    TODO:
-   	- better support of enhanced joysticks
-	- support more joystick drivers (like the XInput extension)
+     * better support of enhanced joysticks
+     * support more joystick drivers (like the XInput extension)
+     * should make joystick a separate DLL (impact also on
+       WINMM/MMSYSTEM), or a real low level driver, as it is on Windows
+       
+       
+1.6 Wave mapper (msacm.drv)
+---------------------------
 
-2. Midlevel drivers (MCI)
-=========================
+   The Wave mapper device allows to load on-demand codecs in order to
+   perform software conversion for the types the actual low level driver
+   (hardware). Those codecs are provided through the standard ACM
+   drivers.
    
-   The midlevel drivers are represented by some common API functions, 
-   mostly mciSendCommand and mciSendString.
-   See status in chapter 3 for more information.
+   
+  1.6.1 Build-in
+  
+   A first working implementation for wave out as been provided (wave in
+   exists, but doesn't allow conversion).
+   Wave mapper driver implementation can be found in dlls/winmm/wavemap/
+   directory. This driver heavily relies on MSACM and MSACM32 DLLs which
+   can be found in dlls/msacm and dlls/msacm32. Those DLLs load ACM
+   drivers which provide the conversion to PCM format (which is normally
+   supported by low level drivers). ADPCM, MP3... fit into the category
+   of non PCM formats.
+   
+   There is currently no builtin ACM driver in Wine, so you must use
+   native ones if you're looking for non PCM playback.
+   
+   In order to use native ACM drivers to play non PCM files, you must use
+   -dll msacm,msacm32,msacm.drv=b. Note that this code is not complete
+   yet, and may cause problems. sndrec32 and mplayer from Win95 appear to
+   work reasonably well though.
+   
+   TODO:
+     * do wave in
+     * check for correctness and robustness
+       
+  1.6.2 Native
+  
+   Seems to work quite ok (using of course native MSACM/MSACM32 DLLs)
+   Some other testings report some issues while reading back the registry
+   settings.
+   
+1.7 MIDI mapper
+---------------
 
-   WINE implements several MCI midlevel drivers (status is given for 
-   both builtin and native implementation):
-
-   TODO: (apply to all builtin MCI drivers)
-	- move mci drivers as regular DLLs (loading in wine,
-          elfglue...) 
-
+   Midi mapper allows to map each one of 16 MIDI channels to a specific
+   instrument on an installed sound card. This allows for example to
+   support different MIDI instrument definition (XM, GM...). It also
+   permits to output on a per channel basis to different MIDI renderers.
+   
+   
+  1.7.1 Built-in
+  
+   A builtin MIDI mapper can be found in dlls/winmm/midimap. It only
+   provides the pickup of an existing MIDI low level driver for playback.
+   
+   TODO:
+     * implement the Midi mapper features (channel / instrument on the
+       fly modification)
+       
+  1.7.2 Native
+  
+   Currently, the native midimapper i'm using is not working (mainly
+   because it reads low level drivers configuration from registry).
+   
+   TODO:
+     * let native midimapper driver load
+       
+2. Mid level drivers (MCI)
+==========================
+                                       
+   The mid level drivers are represented by some common API functions,
+   mostly mciSendCommand and mciSendString. See status in chapter 3 for
+   more information. WINE implements several MCI mid level drivers
+   (status is given for both built-in and native implementation):
+   
+   TODO: (apply to all built-in MCI drivers)
+     * use mmsystem multitasking caps instead of the home grown
+       
 2.1 CDAUDIO
 -----------
-   
-2.1.1 Builtin
 
+  2.1.1 Built-in
+  
    The currently best implementation is the MCI CDAUDIO driver that can
-   be found in multimedia/mcicda.c. The implementation is mostly
-   complete, there have been no reports of errors.
-
-   It makes use of misc/cdrom.c Wine internal cdrom interface. This
-   interface has been ported on Linux, FreeBSD and NetBSD.
-   (Sun should be similair, but are not implemented.)
-
+   be found in dlls/winmm/mcicda/mcicda.c. The implementation is mostly
+   complete, there have been no reports of errors. It makes use of
+   misc/cdrom.c Wine internal cdrom interface.
+   This interface has been ported on Linux, FreeBSD and NetBSD. (Sun
+   should be similar, but are not implemented.)
+   
    A very small example of a cdplayer consists just of the line
    mciSendString("play cdaudio",NULL,0,0);
-
-2.1.2 Native
-
-   Native MCICDA works also correctly... It uses the mscdex traps (on
-   int 2f). 
-
+   
    TODO:
-   	- add support for other cdaudio drivers (Solaris...)
-
+     * add support for other cdaudio drivers (Solaris...)
+     * add support for multiple cdaudio devices
+       
+  2.1.2 Native
+  
+   Native MCICDA works also correctly... It uses the mscdex traps (on int
+   2f).
+   
 2.2 MCIWAVE
 -----------
+
+  2.2.1 Built-in
+  
+   The implementation is rather complete and can be found in
+   dlls/winmm/mciwave/audio.c. It uses the low level audio API (although
+   not abstracted correctly).
    
-2.2.1 Builtin
-
-   The implementation is rather complete and can be found in 
-   multimedia/audio.c.
-   It uses the lowlevel audio API (although not abstracted
-   correctly). 
-
-   FIXME: 
-	- The MCI_STATUS command is broken.
-
-   TODO: 
-	- check for correctness
-	- better use of asynchronous playback from low level
-	- record has to be checked
-	- MCI_CUE command is broken
-	- better implement non waiting command (without the MCI_WAIT
-          flag). 
-   
-2.2.2 Native
-
+   FIXME:
+     * The MCI_STATUS command is broken.
+       
+   TODO:
+     * check for correctness
+     * better use of asynchronous playback from low level
+     * record has to be checked
+     * MCI_CUE command is broken
+     * better implement non waiting command (without the MCI_WAIT flag).
+       
+  2.2.2 Native
+  
    Native MCIWAVE works also correctly.
-
+   
 2.3 MCISEQ (MIDI sequencer)
 ---------------------------
-   
-2.3.1 Builtin
 
-   The implementation can be found in multimedia/midi.c. Except from
-   the Record command, should be close to completion (except for non
+  2.3.1 Built-in
+  
+   The implementation can be found in dlls/winmm/mciseq/mcimidi.c. Except
+   from the Record command, should be close to completion (except for non
    blocking commands).
-
-   TODO: 
-   	- implement it correctly
-	- finish asynchronous commands (especially for reading/record) 
-	- better implement non waiting command (without the MCI_WAIT
-          flag). 
-
-2.3.2 Native
-
-   Native MCIMIDI has been working but is currently blocked by
-   scheduling issues (mmTaskXXX no longer work). 
-
+   
+   TODO:
+     * implement it correctly
+     * finish asynchronous commands (especially for reading/record)
+     * better implement non waiting command (without the MCI_WAIT flag).
+       
+  2.3.2 Native
+  
+   Native MCIMIDI has been working but is currently blocked by scheduling
+   issues (mmTaskXXX no longer work).
+   
+   FIXME:
+     * midiStreamPlay get from time to time an incorrect MidiHdr when
+       using the native MCI sequencer
+       
 2.4 MCIANIM
 -----------
 
-2.4.1 Builtin
-
-   The implementation consists of stubs and is in
-   multimedia/mcianim.c. 
-
-   TODO: 
-   	- implement it, probably using xanim or something similair.
-
-2.4.2 Native
-
-   Native MCIANIM is reported to work (but requires native video DLLs 
+  2.4.1 Built-in
+  
+   The implementation consists of stubs and is in dlls/winmm/mcianim.c.
+   
+   TODO:
+     * implement it, probably using xanim or something similar.
+       
+  2.4.2 Native
+  
+   Native MCIANIM is reported to work (but requires native video DLLs
    also).
-
+   
 2.5 MCIAVI
 ----------
 
-2.5.1 Builtin
-
-   The implementation consists of stubs and is in multimedia/mciavi.c.
-
-   TODO: 
-   	- implement it, probably using xanim or something similair.
-
+  2.5.1 Built-in
+  
+   The implementation consists of stubs and is in
+   dlls/winmm/mciavi/mciavi.c.
+   
+   TODO:
+     * implement it, probably using xanim or something similar.
+       
 2.5.2 Native
 
    Native MCIAVI is reported to work (but requires native video DLLs
    also). Some files exhibit some deadlock issues anyway.
-
-3 High-level layers
+   
+3 High level layers
 ===================
-
-   The rest (basically the MMSYSTEM and WINMM DLLs entry points).
-   It also provides the skeletton for the core functionnalites for 
-   multimedia rendering.
-
-   Note that native mmsystem and WINMM do not currently under WINE
-   and there is no plan to support them (it would require to also
-   fully support VxD, which is not done yet).
-
+                                       
+   The rest (basically the MMSYSTEM and WINMM DLLs entry points). It also
+   provides the skeleton for the core functionality for multimedia
+   rendering. Note that native MMSYSTEM and WINMM do not currently work
+   under WINE and there is no plan to support them (it would require to
+   also fully support VxD, which is not done yet).
+   MCI and low level drivers can either be 16 or 32 bit.
+   
    TODO:
-	- allow a dynamic loading of low level driver (should have one 
-	  for OSS, another one for ALSA...)
-	- add clean-up mechanisms when process detach from MM DLLs
-	- reimplement the sndPlay??? functions using MCI commands
-          rather than rewriting everything from scratch.
-	- prepare for the 16/32 bit split
-	- check thread-safeness for MMSYSTEM and WINMM entry points 
+     * it seems that some program check what's installed in registry
+       against value returned by drivers. Wine is currently broken
+       regarding this point.
+     * add clean-up mechanisms when process detaches from MM DLLs
+     * prepare for the 16/32 big split
+     * check thread-safeness for MMSYSTEM and WINMM entry points
+     * unicode entry points are badly supported
+       
+3.1 MCI skeleton
+----------------
 
-3.1 MCI skeletton
------------------
-
-   Implementation of what is needed to load/unload MCI drivers, and 
-   to pass correct information to them. This is implemented in 
-   multimedia/mci.c and multimedia/mcistring.c
-
-   The mciSendString function uses commandstrings, which are 
-   translated into normal MCI commands as used by mciSendCommand. 
-   The API can be found in multimedia/mmsystem.c and 
-   multimedia/mcistring.c. The functions there (mciOpen,mciSysInfo) 
-   handle midlevel driver allocation and calls.
-
-   The implementation is not complete.
- 
-   MCI drivers are seen as regular WINE modules, and can be loaded 
-   (with a correct loadorder between builtin, native, elfdll, so), as 
-   any other DLL. Please note, that MCI drivers module names must
-   bear the .drv extension to be correctly understood.
-
+   Implementation of what is needed to load/unload MCI drivers, and to
+   pass correct information to them. This is implemented in
+   dlls/winmm/mci.c. The mciSendString function uses command strings,
+   which are translated into normal MCI commands as used by
+   mciSendCommand with the help of command tables. The API can be found
+   in dlls/winmm/mmsystem.c and dlls/winmm/mci.c. The functions there
+   (mciOpen,mciSysInfo) handle mid level driver allocation and calls. The
+   implementation is not complete.
+   MCI drivers are seen as regular WINE modules, and can be loaded (with
+   a correct load order between built-in, native, elfdll, so), as any
+   other DLL. Please note, that MCI drivers module names must bear the
+   .drv extension to be correctly understood.
    The list of available MCI drivers is obtained as follows:
-	1/ key 'mci' in [option] section from .winerc (or wineconf)
-		mci=CDAUDIO:SEQUENCER
-	  gives the list of MCI drivers (names, in uppercase only) to 
-	  be used in WINE.
-	2/ This list, when defined, supercedes the mci
-	  key in c:\windows\system.ini
-
+    1. key 'mci' in [option] section from .winerc (or wineconf)
+       mci=CDAUDIO:SEQUENCER gives the list of MCI drivers (names, in
+       uppercase only) to be used in WINE.
+    2. This list, when defined, supersedes the mci key in
+       c:\windows\system.ini
+       
+   Note that native VIDEODISC crashes when the module is loaded, which
+   occurs when the MCI procedures are initialised. Make sure that this is
+   not in the list from above. Try adding:
+   mci=CDAUDIO:SEQUENCER:WAVEAUDIO:AVIVIDEO:MPEGVIDEO
+   to the [options] section of wine.conf.
+   
    TODO:
-	- MCI command loading support mci(Load|Free)Command
-	- implement other stuff as yet unknown
-	- in mciString(), make use of hiword from mciSendMessage
-          return value to convert value into string...
-	- mmTaskXXX functions are currently broken because the 16
-          loader does not support binary command lines.
-
+     * correctly handle the MCI_ALL_DEVICE_ID in functions.
+     * finish mapping 16 <=> 32 of MCI structures and commands
+     * MCI_SOUND is not handled correctly (should not be sent to MCI
+       driver => same behavior as MCI_BREAK)
+     * do not display module warning when failed to 32-bit load a 16 bit
+       module when 16 bit load can succeed (and the other way around)
+     * implement auto-open feature (ie, when a string command is issued
+       for a not yet opened device, MCI automatically opens it)
+       
 3.2 MCI multi-tasking
 ---------------------
-   Multi-tasking capabilities used for the MCI drivers are provided 
-   in multimedia/mmsystem.c
 
+   Multi-tasking capabilities used for the MCI drivers are provided in
+   dlls/winmm/mmsystem.c.
+   
+   TODO:
+   
+     mmTaskXXX functions are currently broken because the 16 loader does
+   not support binary command lines => provide Wine's own mmtask.tsk not
+   using binary command line.
+   
+     the Wine native MCI drivers should use the mmThreadXXX API and no
+   longer use the MCI_AsyncCommand hack.
+   
 3.3 Timers
 ----------
 
    It currently uses a service thread, run in the context of the calling
-   process, which should correctly mimic Windows behaviour.
-
+   process, which should correctly mimic Windows behavior.
+   
    TODO:
-   	- Check if minimal time is satisfactory for most programs.
-
+     * Check if minimal time is satisfactory for most programs.
+     * current implementation may let a timer tick (once) after it has
+       been destroyed
+       
 3.4 MMIO
 --------
+
+   The API consists of the mmio* functions found in mdlls/winmm/mmio.c.
+   Seems to work ok in most of the cases. There's some linear/segmented
+   issues with 16 bit code.
    
-   The API consists of the mmio* functions found in multimedia/mmio.c.
+3.5 sndPlayXXX functions
+------------------------
 
-   Seems to work ok in most of the cases.
+   Seem to work correctly.
+   
+4 Multimedia configuration
+==========================
+                                       
+   Currently, multimedia configuration heavily relies on Win 3.x
+   configuration model.
+   
+4.1 Drivers
+-----------
 
+   Since all multimedia drivers (MCI, low level ones, ACM drivers,
+   mappers) are, at first, drivers they need to appear in the [mci] or
+   [mci32] section of the system.ini file.
+   Since all drivers are, at first, DLLs, you can choose to load their
+   Wine's (builtin) or Windows (native) version.
+   
+4.2 MCI
+-------
+
+   A default [mci] section (in system.ini) looks like (see the note above
+   on videodisc):
+   
+   [mci]
+   cdaudio=mcicda.drv
+   sequencer=mciseq.drv
+   waveaudio=mciwave.drv
+   avivideo=mciavi.drv
+   videodisc=mcipionr.drv
+   vcr=mcivisca.drv
+   MPEGVideo=mciqtz.drv
+   
+   By default, the list of loadable MCI drivers will be made of those
+   drivers (in the [mci] section).
+   
+   The list of loadable (recognized) MCI drivers can be altered in the
+   [option] section of wine.conf, like:
+   mci=CDAUDIO:SEQUENCER:WAVEAUDIO:AVIVIDEO:MPEGVIDEO
+   
    TODO:
-	- ...
+   
+     use a default registry setting to bypass this (ugly) configuration
+   model
+   
+4.3 Low level drivers
+---------------------
 
-@------------------------------------@
-@     Last updated: 12, May 1999     @
-@ Eric Pouech <eric.pouech@lemel.fr> @
-@------------------------------------@
+   They are currently hardcoded in dlls/winmm/lolvldrv.c.
+   
+   TODO:
+   
+     use a default registry setting to provide a decent configuration
+   model. this shall also help some programs to work (some of them test
+   the names returned by low level drivers with the ones defined and
+   installed in the registry)
+   
+4.4 ACM
+-------
+
+   To be done (use the same mechanism as MCI drivers configuration).
+   
+5 Multimedia architecture
+=========================
+                                       
+5.1 Windows 9x multimedia architecture
+--------------------------------------
+
+             |
+Kernel space |                    Client applications
+             |
+             |           | |         ^ ^       | |          | |
+             |        16>| |<32   16>| |<32 16>| |<32    16>| |<32
+             |           | v         | |       | v          | v
+             |      +----|-----------|---------|------------|-------+
+             |      |    |           |         |            |       |  WinMM.dll
+             |      |    |           |         |            |       |   32 bit
+             |      +----|-----------|---------|------------|-------+
+             |           | |         | ^       | |          |
+             |  +------+ | |<16      | |       | |<16       |
+             |  |   16>| | |         | |       | |          |
+             |  |      v v v         | |       v v          v
+             |  |   +---------------+---+-------------+-------------+
+             |  |   | waveInXXX     |   | mciXXX      | *playSound* |
+             |  |   | waveOutXXX    |   |             | mmioXXX     |
+             |  |   | midiInXXX     |   |             | timeXXX     |
+             |  |   | midiOutXXX    |   |             | driverXXX   |
+             |  |   | midiStreamXXX |   |             |             |  MMSystem.dll
+             |  |   | mixerXXX      |   |             |             |     16 bit
+ +--------+  |  |   | auxXXX    +---+   +---+ mmThread|             |
+ |MMDEVLDR|<------->| joyXXX    | Call back | mmTask  |             |
+ +--------+  |  |   +-----------+-----------+---------+-------------+
+     ^       |  |          |       ^    ^     | ^
+     |       |  |       16>|       |<16>|  16>| |<16
+     v       |  |          v       |    |     v |
+ +--------+  |  |   +-------------+    +----------+
+ |  VxD   |<------->|     .drv    |    | mci*.drv |
+ +--------+  |  |   +--------------+   +-----------+
+             |  |    | msacmm.drv  |    | mciwave  |
+             |  |    +--------------+   +-----------+
+             |  |     | midimap.drv |    | mcimidi  |
+             |  |     +-------------+    +-----------+
+             |  |    Low-level drivers    |    ...   | MCI drivers
+             |  |                         +----------+
+             |  |                               |
+             |  |                               |<16
+             |  +-------------------------------+
+             |
+
+   The  important points to notice are:
+     * all drivers (and most of the core code) is 16 bit
+     * all hardware (or most of it) dependant code reside in the kernel
+       space (which is not surprising)
+       
+5.2 Wine multimedia architecture
+--------------------------------
+
+             |
+Kernel space |                    Client applications
+             |
+             |           | |         ^ ^       | |          | |
+             |        16>| |<32   16>| |<32 16>| |<32    16>| |<32
+             |           | |         | |       | |          | |
+             |  +------+ | |         | |       | |          | |
+             |  |32/16>| | |         | |       | |          | |
+             |  |      v v v         | |       v v          v v
+             |  |   +---------------+---+-------------+-------------+
+             |  |   | waveInXXX     |   | mciXXX      | *playSound* |
+             |  |   | waveOutXXX    |   |             | mmioXXX     | WinMM.dll
+             |  |   | midiInXXX     |   |             | timeXXX     |   32 bit
+             |  |   | midiOutXXX    |   |             | driverXXX   |
+             |  |   | midiStreamXXX |   |             |             | MSystem.dll
+             |  |   | mixerXXX      |   |             |             |   16 bit
+             |  |   | auxXXX    +---+   +---+ mmThread|             |
+             |  |   | joyXXX    | Call back | mmTask  |             |
+             |  |   +-----------+-----------+---------+-------------+
+             |  |         | |     ^    ^     ||    ^^
+             |  |      16>| |<32  |<16>|  16>||<32>||<16
+             |  |         v v     |<32>|     vv    ||
++---------+  |  |   +-------------+    +----------+
+|HW driver|<------->|     .drv    |    | mci*.drv |
++---------+  |  |   +--------------+   +-----------+
+             |  |    | msacmm.drv  |    | mciwave  |
+             |  |    +--------------+   +-----------+
+             |  |     | midimap.drv |    | mcimidi  |
+             |  |     +-------------+    +-----------+
+             |  |    Low-level drivers    |    ...   | MCI drivers
+             |  |                         +----------+
+             |  |                               |
+             |  |                               |<32/16
+             |  +-------------------------------+
+             |
+
+   From the previous drawings, the most noticeable difference are:
+     * low-level drivers can either be 16 or 32 bit
+     * MCI drivers can either be 16 or 32 bit
+     * MMSystem and WinMM will be hosted in a single elfglue library
+     * no link between the MMSystem/WinMM pair on kernel space shall
+       exist. For example, there will be a low level driver to talk to a
+       UNIX OSS (Open Sound System) driver
+     * all built-in drivers (low-level and MCI) will be written as 32 bit
+       drivers
+       all native drivers will be 16 bits drivers
+
+          ______________________________________________________
+   
+   Last updated: 6, December 1999
+   By:          Eric Pouech (eric.pouech@wanadoo.fr)
+
+References
+
+   1. http://www.4front-tech.com/