source: sbliveos2/trunk/Build.txt@ 302

Last change on this file since 302 was 193, 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.6 KB
Line 
1/* $Id: Build.txt 193 2001-09-28 12:12:51Z 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 to
41 USHORT DevHelp_VMProcessToGlobal(ULONG Flags, LIN LinearAddr, ULONG Length, PLIN GlobalLinearAddr);
42 #pragma aux DevHelp_VMProcessToGlobal = \
43
44 - MMPM/2 base (mmpmdd.zip)
45 - PDD & MMPM/2 driver reference
46
473 Recommended tools for debugging
48=================================
49- ICAT debugger (follow link from IBM DDK page)
50- OS/2 Debug kernel
51
52
534 Building the driver
54=====================
55First you must create the makefile.inc file. This is done by running
56the Configure.cmd rexx script.
57
58You can build the driver from the main directory by executing:
59 WMAKE -f makefile.os2 /ms
60
61To build the debug version of the driver (which can be used with ICAT
62for source-level debugging) run
63 WMAKE -f makefile.os2 DEBUG=1 /ms
64
65To build the KEE enhanced version of the driver
66 WMAKE -f makefile.os2 KEE=1 /ms
67
68
695 SBLive driver architecture
70============================
71Simplified overview of the flow of control from a multimedia application
72to the SB Live driver. (for a more complete overview, check the MMPM/2
73Device Driver Reference; Audio Physical Device Driver Template/PDD architecture)
74
75 |=============|
76 | |
77 | application |
78 | |
79 |=============|
80ring 3 | ^
81--------------------------------------------------------------------------------
82ring 0 | |
83 v |
84 |=============|
85 | |
86 --->| MMPM/2 |
87 | | |
88 | |=============|
89 | | IOCtls |
90SHD calls | | |
91to return | | | IDC
92buffers | | |
93 | | |
94 | v v
95 | |-------------| OSS cmds |-------------|
96 | | | <---------> | |
97 ----|sblive16.sys | irqs |sblive32.sys |
98 | | ----------> | |
99 |-------------| |-------------|
100 ^ |
101--------------------------------------------------------------------------------
102hardware
103 irqs | |
104 | | hardware programming
105 |==============| |
106 | | |
107 | SB Live card |<-----------
108 | |
109 |==============|
110
111
112The drv16 directory contains the sources for the 16 bits driver that handles
113all MMPM/2 commands and communicates (IDC) with the 32 bits core driver using
114OSS (Linux audio api) commands.
115Sblive32.sys contains a small wrapper that interprets the IDC commands and
116translates them into appriate calls to the original Linux OSS driver (ioctls/
117open/close/read/write).
118Basically, the Linux code in sblive32 treats the 16 bits driver as a Linux
119application trying to use the audio card.
120
121During the init complete strategy call of sblive16, it sends the init command
122to the 32 bits driver. Which ends up calling module_init in the Linux code
123(sblive\main.c). At this point the Linux code tries to detect the sblive
124hardware using Linux pci kernel calls.
125All Linux kernel calls are implemented in sblive32 using OS/2 system calls.
126(i.e. kmalloc uses DevHlp_VMAlloc)
127
128The original Linux SB Live! sources have not changed for the most part.
129An exception is the acknowledgment that part of a buffer has been played/
130recorded. (emu10k1_waveout_bh/emu10k1_wavein_bh in sblive\audio.c)
131OSS32_ProcessIRQ is called from those procedures to tell the 16 bits driver
132to query the current position and return/queue buffers if needed.
133
134The 16 bits driver is more or less a generic MMPM/2 driver that could be used
135(in theory) to port any OSS Linux audio driver.
136The wrapper and linux kernel calls implemented in the lib directory can
137also be reused.
138
139
1406 Difference between the two kinds of 32 bits drivers
141=====================================================
142Warp Server for e-Business (and now Warp 4 too; with fixpack 13) feature
143a new 32 bits kernel api for physical device driver (well, not entirely true).
144
145The 'standard' 32 bits driver (not compiled with KEE=1) is a 32 bits compact
146memory model driver. (cs=ds, ss!=ds; small code, large data)
147The stack is still 16 bits and the SS and DS selectors are not identical.
148Therefor all pointers are far by default. (32 bits far; meaning 16:32, 16
149bits selector, 32 bits offset)
150
151Using this memory model works fine, but is a bit inefficient and not ideal
152for porting 32 bits code (which may have hidden dependencies on the 32 bits
153flat memory model; the sblive driver has none).
154That also explains why the standard 32 bits driver is 18kb larger than the
155KEE version.
156
157The 'enhanced' 32 bits driver uses the KEE interface to create a true 32 bits
158driver (cs=ds=ss).
159
160A small 16 bits part is still needed as our IDC, strategy and irq handlers
161are expected to be in the 16 bits code segment.
162An assembly file (drv32\startup.asm) takes care of the thunking that is
163required.
164
165
Note: See TracBrowser for help on using the repository browser.