source: sbliveos2/trunk/Build.txt@ 189

Last change on this file since 189 was 173, checked in by sandervl, 24 years ago

* empty log message *

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.4 KB
Line 
1/* $Id: Build.txt 173 2001-04-14 16:22:10Z sandervl $ */
2 SoundBlaster Live! OS/2 Audio driver Build Instructions
3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4Contents
5========
61 Introduction
72 Required tools
83 Recommended tools for debugging
94 Building the driver
105 SBLive driver architecture
116 Difference between the two kinds of 32 bits drivers
12
131 Introduction
14==============
15This document lists all the needed tools and compilers to build the SB Live
16OS/2 audio driver.
17It also tries to give some information about the architecture of the driver
18and explain some technical details.
19
20However, it does not attempt to explain everything. People that are not
21familiar with either device drivers or MMPM/2 audio drivers should
22read the PDD & MMPM/2 driver references. Although those two documents
23are not meant for beginners, they do contain a lot of very useful information.
24
25You can always email me (sandervl@xs4all.nl) if you wish to help out with the
26development of the driver and have some questions.
27Please make sure you've read at least the pdd & mmpm2 references and try
28to understand the source code before doing so.
29
30
312 Required tools
32================
33- Watcom C/C++ version 11.0b
34- ALP 4.x (IBM assembler; comes with ddk)
35- IBM OS/2 DDK (http://service.boulder.ibm.com/ddk/)
36 - Base headers/libraries/tools (combase.zip)
37 Due to a typo in devhelp.h, you must change the DevHelp_VMProcessToGlobal macro:
38 USHORT DevHelp_VMProcessToGlobal(ULONG Flags, LIN LinearAddr, ULONG Length, PLIN GlobalLinearAddr);
39 #pragma aux DevHelp_ProcessToGlobal = \
40
41 - MMPM/2 base (mmpmdd.zip)
42 - PDD & MMPM/2 driver reference
43
443 Recommended tools for debugging
45=================================
46- ICAT debugger (follow link from IBM DDK page)
47- OS/2 Debug kernel
48
49
504 Building the driver
51=====================
52First you must create the makefile.inc file. This is done by running
53the Configure.cmd rexx script.
54
55You can build the driver from the main directory by executing:
56 WMAKE -f makefile.os2 /ms
57
58To build the debug version of the driver (which can be used with ICAT
59for source-level debugging) run
60 WMAKE -f makefile.os2 DEBUG=1 /ms
61
62To build the KEE enhanced version of the driver
63 WMAKE -f makefile.os2 KEE=1 /ms
64
65
665 SBLive driver architecture
67============================
68Simplified overview of the flow of control from a multimedia application
69to the SB Live driver. (for a more complete overview, check the MMPM/2
70Device Driver Reference; Audio Physical Device Driver Template/PDD architecture)
71
72 |=============|
73 | |
74 | application |
75 | |
76 |=============|
77ring 3 | ^
78--------------------------------------------------------------------------------
79ring 0 | |
80 v |
81 |=============|
82 | |
83 --->| MMPM/2 |
84 | | |
85 | |=============|
86 | | IOCtls |
87SHD calls | | |
88to return | | | IDC
89buffers | | |
90 | | |
91 | v v
92 | |-------------| OSS cmds |-------------|
93 | | | <---------> | |
94 ----|sblive16.sys | irqs |sblive32.sys |
95 | | ----------> | |
96 |-------------| |-------------|
97 ^ |
98--------------------------------------------------------------------------------
99hardware
100 irqs | |
101 | | hardware programming
102 |==============| |
103 | | |
104 | SB Live card |<-----------
105 | |
106 |==============|
107
108
109The drv16 directory contains the sources for the 16 bits driver that handles
110all MMPM/2 commands and communicates (IDC) with the 32 bits core driver using
111OSS (Linux audio api) commands.
112Sblive32.sys contains a small wrapper that interprets the IDC commands and
113translates them into appriate calls to the original Linux OSS driver (ioctls/
114open/close/read/write).
115Basically, the Linux code in sblive32 treats the 16 bits driver as a Linux
116application trying to use the audio card.
117
118During the init complete strategy call of sblive16, it sends the init command
119to the 32 bits driver. Which ends up calling module_init in the Linux code
120(sblive\main.c). At this point the Linux code tries to detect the sblive
121hardware using Linux pci kernel calls.
122All Linux kernel calls are implemented in sblive32 using OS/2 system calls.
123(i.e. kmalloc uses DevHlp_VMAlloc)
124
125The original Linux SB Live! sources have not changed for the most part.
126An exception is the acknowledgment that part of a buffer has been played/
127recorded. (emu10k1_waveout_bh/emu10k1_wavein_bh in sblive\audio.c)
128OSS32_ProcessIRQ is called from those procedures to tell the 16 bits driver
129to query the current position and return/queue buffers if needed.
130
131The 16 bits driver is more or less a generic MMPM/2 driver that could be used
132(in theory) to port any OSS Linux audio driver.
133The wrapper and linux kernel calls implemented in the lib directory can
134also be reused.
135
136
1376 Difference between the two kinds of 32 bits drivers
138=====================================================
139Warp Server for e-Business (and now Warp 4 too; with fixpack 13) feature
140a new 32 bits kernel api for physical device driver (well, not entirely true).
141
142The 'standard' 32 bits driver (not compiled with KEE=1) is a 32 bits compact
143memory model driver. (cs=ds, ss!=ds; small code, large data)
144The stack is still 16 bits and the SS and DS selectors are not identical.
145Therefor all pointers are far by default. (32 bits far; meaning 16:32, 16
146bits selector, 32 bits offset)
147
148Using this memory model works fine, but is a bit inefficient and not ideal
149for porting 32 bits code (which may have hidden dependencies on the 32 bits
150flat memory model; the sblive driver has none).
151That also explains why the standard 32 bits driver is 18kb larger than the
152KEE version.
153
154The 'enhanced' 32 bits driver uses the KEE interface to create a true 32 bits
155driver (cs=ds=ss).
156
157A small 16 bits part is still needed as our IDC, strategy and irq handlers
158are expected to be in the 16 bits code segment.
159An assembly file (drv32\startup.asm) takes care of the thunking that is
160required.
161
162
Note: See TracBrowser for help on using the repository browser.