OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [Documentation/] [sound/] [MultiSound] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
#! /bin/sh
2
#
3
#  Turtle Beach MultiSound Driver Notes
4
#  -- Andrew Veliath 
5
#
6
#  Last update:                      September 10, 1998
7
#  Corresponding msnd driver:        0.8.3
8
#
9
# ** This file is a README (top part) and shell archive (bottom part).
10
#    The corresponding archived utility sources can be unpacked by
11
#    running `sh MultiSound' (the utilities are only needed for the
12
#    Pinnacle and Fiji cards). **
13
#
14
#
15
#  -=-=- Getting Firmware -=-=-
16
#  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17
#
18
#  See the section `Obtaining and Creating Firmware Files' in this
19
#  document for instructions on obtaining the necessary firmware
20
#  files.
21
#
22
#
23
#  Supported Features
24
#  ~~~~~~~~~~~~~~~~~~
25
#
26
#  Currently, full-duplex digital audio (/dev/dsp only, /dev/audio is
27
#  not currently available) and mixer functionality (/dev/mixer) are
28
#  supported (memory mapped digital audio is not yet supported).
29
#  Digital transfers and monitoring can be done as well if you have
30
#  the digital daughterboard (see the section on using the S/PDIF port
31
#  for more information).
32
#
33
#  Support for the Turtle Beach MultiSound Hurricane architecture is
34
#  composed of the following modules (these can also operate compiled
35
#  into the kernel):
36
#
37
#  msnd               - MultiSound base (requires soundcore)
38
#
39
#  msnd_classic       - Base audio/mixer support for Classic, Monetery and
40
#                       Tahiti cards
41
#
42
#  msnd_pinnacle      - Base audio/mixer support for Pinnacle and Fiji cards
43
#
44
#
45
#  Important Notes - Read Before Using
46
#  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
47
#
48
#  The firmware files are not included (may change in future).  You
49
#  must obtain these images from Turtle Beach (they are included in
50
#  the MultiSound Development Kits), and place them in /etc/sound for
51
#  example, and give the full paths in the Linux configuration.  If
52
#  you are compiling in support for the MultiSound driver rather than
53
#  using it as a module, these firmware files must be accessible
54
#  during kernel compilation.
55
#
56
#  Please note these files must be binary files, not assembler.  See
57
#  the section later in this document for instructions to obtain these
58
#  files.
59
#
60
#
61
#  Configuring Card Resources
62
#  ~~~~~~~~~~~~~~~~~~~~~~~~~~
63
#
64
#  ** This section is very important, as your card may not work at all
65
#     or your machine may crash if you do not do this correctly. **
66
#
67
#  * Classic/Monterey/Tahiti
68
#
69
#  These cards are configured through the driver msnd_classic.  You must
70
#  know the io port, then the driver will select the irq and memory resources
71
#  on the card.  It is up to you to know if these are free locations or now,
72
#  a conflict can lock the machine up.
73
#
74
#  * Pinnacle/Fiji
75
#
76
#  The Pinnacle and Fiji cards have an extra config port, either
77
#  0x250, 0x260 or 0x270.  This port can be disabled to have the card
78
#  configured strictly through PnP, however you lose the ability to
79
#  access the IDE controller and joystick devices on this card when
80
#  using PnP.  The included pinnaclecfg program in this shell archive
81
#  can be used to configure the card in non-PnP mode, and in PnP mode
82
#  you can use isapnptools.  These are described briefly here.
83
#
84
#  pinnaclecfg is not required; you can use the msnd_pinnacle module
85
#  to fully configure the card as well.  However, pinnaclecfg can be
86
#  used to change the resource values of a particular device after the
87
#  msnd_pinnacle module has been loaded.  If you are compiling the
88
#  driver into the kernel, you must set these values during compile
89
#  time, however other peripheral resource values can be changed with
90
#  the pinnaclecfg program after the kernel is loaded.
91
#
92
#
93
#  *** PnP mode
94
#
95
#  Use pnpdump to obtain a sample configuration if you can; I was able
96
#  to obtain one with the command `pnpdump 1 0x203' -- this may vary
97
#  for you (running pnpdump by itself did not work for me).  Then,
98
#  edit this file and use isapnp to uncomment and set the card values.
99
#  Use these values when inserting the msnd_pinnacle module.  Using
100
#  this method, you can set the resources for the DSP and the Kurzweil
101
#  synth (Pinnacle).  Since Linux does not directly support PnP
102
#  devices, you may have difficulty when using the card in PnP mode
103
#  when it the driver is compiled into the kernel.  Using non-PnP mode
104
#  is preferable in this case.
105
#
106
#  Here is an example mypinnacle.conf for isapnp that sets the card to
107
#  io base 0x210, irq 5 and mem 0xd8000, and also sets the Kurzweil
108
#  synth to 0x330 and irq 9 (may need editing for your system):
109
#
110
#  (READPORT 0x0203)
111
#  (CSN 2)
112
#  (IDENTIFY *)
113
#
114
#  # DSP
115
#  (CONFIGURE BVJ0440/-1 (LD 0
116
#          (INT 0 (IRQ 5 (MODE +E))) (IO 0 (BASE 0x0210)) (MEM 0 (BASE 0x0d8000))
117
#          (ACT Y)))
118
#
119
#  # Kurzweil Synth (Pinnacle Only)
120
#  (CONFIGURE BVJ0440/-1 (LD 1
121
#          (IO 0 (BASE 0x0330)) (INT 0 (IRQ 9 (MODE +E)))
122
#          (ACT Y)))
123
#
124
#  (WAITFORKEY)
125
#
126
#
127
#  *** Non-PnP mode
128
#
129
#  The second way is by running the card in non-PnP mode.  This
130
#  actually has some advantages in that you can access some other
131
#  devices on the card, such as the joystick and IDE controller.  To
132
#  configure the card, unpack this shell archive and build the
133
#  pinnaclecfg program.  Using this program, you can assign the
134
#  resource values to the card's devices, or disable the devices.  As
135
#  an alternative to using pinnaclecfg, you can specify many of the
136
#  configuration values when loading the msnd_pinnacle module (or
137
#  during kernel configuration when compiling the driver into the
138
#  kernel).
139
#
140
#  If you specify cfg=0x250 for the msnd_pinnacle module, it
141
#  automatically configure the card to the given io, irq and memory
142
#  values using that config port (the config port is jumper selectable
143
#  on the card to 0x250, 0x260 or 0x270).
144
#
145
#  See the `msnd_pinnacle Additional Options' section below for more
146
#  information on these parameters (also, if you compile the driver
147
#  directly into the kernel, these extra parameters can be useful
148
#  here).
149
#
150
#
151
# ** It is very easy to cause problems in your machine if you choose a
152
#    resource value which is incorrect. **
153
#
154
#
155
#  Examples
156
#  ~~~~~~~~
157
#
158
#  * MultiSound Classic/Monterey/Tahiti:
159
#
160
#  modprobe soundcore
161
#  insmod msnd
162
#  insmod msnd_classic io=0x290 irq=7 mem=0xd0000
163
#
164
#  * MultiSound Pinnacle in PnP mode:
165
#
166
#  modprobe soundcore
167
#  insmod msnd
168
#  isapnp mypinnacle.conf
169
#  insmod msnd_pinnacle io=0x210 irq=5 mem=0xd8000 <-- match mypinnacle.conf values
170
#
171
#  * MultiSound Pinnacle in non-PnP mode (replace 0x250 with your configuration port,
172
#    one of 0x250, 0x260 or 0x270):
173
#
174
#  insmod soundcore
175
#  insmod msnd
176
#  insmod msnd_pinnacle cfg=0x250 io=0x290 irq=5 mem=0xd0000
177
#
178
# * To use the MPU-compatible Kurzweil synth on the Pinnacle in PnP
179
#   mode, add the following (assumes you did `isapnp mypinnacle.conf'):
180
#
181
#  insmod sound
182
#  insmod mpu401 io=0x330 irq=9                    <-- match mypinnacle.conf values
183
#
184
# * To use the MPU-compatible Kurzweil synth on the Pinnacle in non-PnP
185
#   mode, add the following.  Note how we first configure the peripheral's
186
#   resources, _then_ install a Linux driver for it:
187
#
188
#  insmod sound
189
#  pinnaclecfg 0x250 mpu 0x330 9
190
#  insmod mpu401 io=0x330 irq=9
191
#
192
#  -- OR you can use the following sequence without pinnaclecfg in non-PnP mode:
193
#
194
#  insmod soundcore
195
#  insmod msnd
196
#  insmod msnd_pinnacle cfg=0x250 io=0x290 irq=5 mem=0xd0000 mpu_io=0x330 mpu_irq=9
197
#  insmod sound
198
#  insmod mpu401 io=0x330 irq=9
199
#
200
# * To setup the joystick port on the Pinnacle in non-PnP mode (though
201
#   you have to find the actual Linux joystick driver elsewhere), you
202
#   can use pinnaclecfg:
203
#
204
#   pinnaclecfg 0x250 joystick 0x200
205
#
206
#  -- OR you can configure this using msnd_pinnacle with the following:
207
#
208
#  insmod soundcore
209
#  insmod msnd
210
#  insmod msnd_pinnacle cfg=0x250 io=0x290 irq=5 mem=0xd0000 joystick_io=0x200
211
#
212
#
213
#  msnd_classic, msnd_pinnacle Required Options
214
#  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
215
#
216
#  If the following options are not given, the module will not load.
217
#  Examine the kernel message log for informative error messages.
218
#  WARNING--probing isn't supported so try to make sure you have the
219
#  correct shared memory area, otherwise you may experience problems.
220
#
221
#  io                   I/O base of DSP, e.g. io=0x210
222
#  irq                  IRQ number, e.g. irq=5
223
#  mem                  Shared memory area, e.g. mem=0xd8000
224
#
225
#
226
#  msnd_classic, msnd_pinnacle Additional Options
227
#  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
228
#
229
#  fifosize             The digital audio FIFOs, in kilobytes.  If not
230
#                       specified, the default will be used.  Increasing
231
#                       this value will reduce the chance of a FIFO
232
#                       underflow at the expense of increasing overall
233
#                       latency.  For example, fifosize=512 will
234
#                       allocate 512kB read and write FIFOs (1MB total).
235
#                       While this may reduce dropouts, a heavy machine
236
#                       load will undoubtedly starve the FIFO of data
237
#                       and you will eventually get dropouts.  One
238
#                       option is to alter the scheduling priority of
239
#                       the playback process, using `nice' or some form
240
#                       of POSIX soft real-time scheduling.
241
#
242
#  calibrate_signal     Setting this to one calibrates the ADCs to the
243
#                       signal, zero calibrates to the card (defaults
244
#                       to zero).
245
#
246
#
247
#  msnd_pinnacle Additional Options
248
#  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
249
#
250
#  digital              Specify digital=1 to enable the S/PDIF input
251
#                       if you have the digital daughterboard
252
#                       adapter. This will enable access to the
253
#                       DIGITAL1 input for the soundcard in the mixer.
254
#                       Some mixer programs might have trouble setting
255
#                       the DIGITAL1 source as an input.  If you have
256
#                       trouble, you can try the setdigital.c program
257
#                       at the bottom of this document.
258
#
259
#  cfg                  Non-PnP configuration port for the Pinnacle
260
#                       and Fiji (typically 0x250, 0x260 or 0x270,
261
#                       depending on the jumper configuration).  If
262
#                       this option is omitted, then it is assumed
263
#                       that the card is in PnP mode, and that the
264
#                       specified DSP resource values are already
265
#                       configured with PnP (i.e. it won't attempt to
266
#                       do any sort of configuration).
267
#
268
#  When the Pinnacle is in non-PnP mode, you can use the following
269
#  options to configure particular devices.  If a full specification
270
#  for a device is not given, then the device is not configured.  Note
271
#  that you still must use a Linux driver for any of these devices
272
#  once their resources are setup (such as the Linux joystick driver,
273
#  or the MPU401 driver from OSS for the Kurzweil synth).
274
#
275
#  mpu_io               I/O port of MPU (on-board Kurzweil synth)
276
#  mpu_irq              IRQ of MPU (on-board Kurzweil synth)
277
#  ide_io0              First I/O port of IDE controller
278
#  ide_io1              Second I/O port of IDE controller
279
#  ide_irq              IRQ IDE controller
280
#  joystick_io          I/O port of joystick
281
#
282
#
283
#  Obtaining and Creating Firmware Files
284
#  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
285
#
286
#       For the Classic/Tahiti/Monterey
287
#       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
288
#
289
#  Download to /tmp and unzip the following file from Turtle Beach:
290
#
291
#       ftp://ftp.voyetra.com/pub/tbs/msndcl/msndvkit.zip
292
#
293
#  When unzipped, unzip the file named MsndFiles.zip.  Then copy the
294
#  following firmware files to /etc/sound (note the file renaming):
295
#
296
#    cp DSPCODE/MSNDINIT.BIN /etc/sound/msndinit.bin
297
#    cp DSPCODE/MSNDPERM.REB /etc/sound/msndperm.bin
298
#
299
#  When configuring the Linux kernel, specify /etc/sound/msndinit.bin and
300
#  /etc/sound/msndperm.bin for the two firmware files (Linux kernel
301
#  versions older than 2.2 do not ask for firmware paths, and are
302
#  hardcoded to /etc/sound).
303
#
304
#  If you are compiling the driver into the kernel, these files must
305
#  be accessible during compilation, but will not be needed later.
306
#  The files must remain, however, if the driver is used as a module.
307
#
308
#
309
#       For the Pinnacle/Fiji
310
#       ~~~~~~~~~~~~~~~~~~~~~
311
#
312
#  Download to /tmp and unzip the following file from Turtle Beach (be
313
#  sure to use the entire URL; some have had trouble navigating to the
314
#  URL):
315
#
316
#       ftp://ftp.voyetra.com/pub/tbs/pinn/pnddk100.zip
317
#
318
#  Unpack this shell archive, and run make in the created directory
319
#  (you need a C compiler and flex to build the utilities).  This
320
#  should give you the executables conv, pinnaclecfg and setdigital.
321
#  conv is only used temporarily here to create the firmware files,
322
#  while pinnaclecfg is used to configure the Pinnacle or Fiji card in
323
#  non-PnP mode, and setdigital can be used to set the S/PDIF input on
324
#  the mixer (pinnaclecfg and setdigital should be copied to a
325
#  convenient place, possibly run during system initialization).
326
#
327
#  To generating the firmware files with the `conv' program, we create
328
#  the binary firmware files by doing the following conversion
329
#  (assuming the archive unpacked into a directory named PINNDDK):
330
#
331
#    ./conv < PINNDDK/dspcode/pndspini.asm > /etc/sound/pndspini.bin
332
#    ./conv < PINNDDK/dspcode/pndsperm.asm > /etc/sound/pndsperm.bin
333
#
334
#  The conv (and conv.l) program is not needed after conversion and can
335
#  be safely deleted.  Then, when configuring the Linux kernel, specify
336
#  /etc/sound/pndspini.bin and /etc/sound/pndsperm.bin for the two
337
#  firmware files (Linux kernel versions older than 2.2 do not ask for
338
#  firmware paths, and are hardcoded to /etc/sound).
339
#
340
#  If you are compiling the driver into the kernel, these files must
341
#  be accessible during compilation, but will not be needed later.
342
#  The files must remain, however, if the driver is used as a module.
343
#
344
#
345
#  Using Digital I/O with the S/PDIF Port
346
#  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
347
#
348
#  If you have a Pinnacle or Fiji with the digital daughterboard and
349
#  want to set it as the input source, you can use this program if you
350
#  have trouble trying to do it with a mixer program (be sure to
351
#  insert the module with the digital=1 option, or say Y to the option
352
#  during compiled-in kernel operation).  Upon selection of the S/PDIF
353
#  port, you should be able monitor and record from it.
354
#
355
#  There is something to note about using the S/PDIF port.  Digital
356
#  timing is taken from the digital signal, so if a signal is not
357
#  connected to the port and it is selected as recording input, you
358
#  will find PCM playback to be distorted in playback rate.  Also,
359
#  attempting to record at a sampling rate other than the DAT rate may
360
#  be problematic (i.e. trying to record at 8000Hz when the DAT signal
361
#  is 44100Hz).  If you have a problem with this, set the recording
362
#  input to analog if you need to record at a rate other than that of
363
#  the DAT rate.
364
#
365
#
366
#  -- Shell archive attached below, just run `sh MultiSound' to extract.
367
#     Contains Pinnacle/Fiji utilities to convert firmware, configure
368
#     in non-PnP mode, and select the DIGITAL1 input for the mixer.
369
#
370
#
371
#!/bin/sh
372
# This is a shell archive (produced by GNU sharutils 4.2).
373
# To extract the files from this archive, save it to some FILE, remove
374
# everything before the `!/bin/sh' line above, then type `sh FILE'.
375
#
376
# Made on 1998-12-04 10:07 EST by .
377
# Source directory was `/home/andrewtv/programming/pinnacle/pinnacle'.
378
#
379
# Existing files will *not* be overwritten unless `-c' is specified.
380
#
381
# This shar contains:
382
# length mode       name
383
# ------ ---------- ------------------------------------------
384
#   2046 -rw-rw-r-- MultiSound.d/setdigital.c
385
#  10235 -rw-rw-r-- MultiSound.d/pinnaclecfg.c
386
#    106 -rw-rw-r-- MultiSound.d/Makefile
387
#    141 -rw-rw-r-- MultiSound.d/conv.l
388
#   1472 -rw-rw-r-- MultiSound.d/msndreset.c
389
#
390
save_IFS="${IFS}"
391
IFS="${IFS}:"
392
gettext_dir=FAILED
393
locale_dir=FAILED
394
first_param="$1"
395
for dir in $PATH
396
do
397
  if test "$gettext_dir" = FAILED && test -f $dir/gettext \
398
     && ($dir/gettext --version >/dev/null 2>&1)
399
  then
400
    set `$dir/gettext --version 2>&1`
401
    if test "$3" = GNU
402
    then
403
      gettext_dir=$dir
404
    fi
405
  fi
406
  if test "$locale_dir" = FAILED && test -f $dir/shar \
407
     && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
408
  then
409
    locale_dir=`$dir/shar --print-text-domain-dir`
410
  fi
411
done
412
IFS="$save_IFS"
413
if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
414
then
415
  echo=echo
416
else
417
  TEXTDOMAINDIR=$locale_dir
418
  export TEXTDOMAINDIR
419
  TEXTDOMAIN=sharutils
420
  export TEXTDOMAIN
421
  echo="$gettext_dir/gettext -s"
422
fi
423
touch -am 1231235999 $$.touch >/dev/null 2>&1
424
if test ! -f 1231235999 && test -f $$.touch; then
425
  shar_touch=touch
426
else
427
  shar_touch=:
428
  echo
429
  $echo 'WARNING: not restoring timestamps.  Consider getting and'
430
  $echo "installing GNU \`touch', distributed in GNU File Utilities..."
431
  echo
432
fi
433
rm -f 1231235999 $$.touch
434
#
435
if mkdir _sh01426; then
436
  $echo 'x -' 'creating lock directory'
437
else
438
  $echo 'failed to create lock directory'
439
  exit 1
440
fi
441
# ============= MultiSound.d/setdigital.c ==============
442
if test ! -d 'MultiSound.d'; then
443
  $echo 'x -' 'creating directory' 'MultiSound.d'
444
  mkdir 'MultiSound.d'
445
fi
446
if test -f 'MultiSound.d/setdigital.c' && test "$first_param" != -c; then
447
  $echo 'x -' SKIPPING 'MultiSound.d/setdigital.c' '(file already exists)'
448
else
449
  $echo 'x -' extracting 'MultiSound.d/setdigital.c' '(text)'
450
  sed 's/^X//' << 'SHAR_EOF' > 'MultiSound.d/setdigital.c' &&
451
/*********************************************************************
452
X *
453
X * setdigital.c - sets the DIGITAL1 input for a mixer
454
X *
455
X * Copyright (C) 1998 Andrew Veliath
456
X *
457
X * This program is free software; you can redistribute it and/or modify
458
X * it under the terms of the GNU General Public License as published by
459
X * the Free Software Foundation; either version 2 of the License, or
460
X * (at your option) any later version.
461
X *
462
X * This program is distributed in the hope that it will be useful,
463
X * but WITHOUT ANY WARRANTY; without even the implied warranty of
464
X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
465
X * GNU General Public License for more details.
466
X *
467
X * You should have received a copy of the GNU General Public License
468
X * along with this program; if not, write to the Free Software
469
X * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
470
X *
471
X ********************************************************************/
472
X
473
#include 
474
#include 
475
#include 
476
#include 
477
#include 
478
#include 
479
#include 
480
X
481
int main(int argc, char *argv[])
482
{
483
X       int fd;
484
X       unsigned long recmask, recsrc;
485
X
486
X       if (argc != 2) {
487
X               fprintf(stderr, "usage: setdigital \n");
488
X               exit(1);
489
X       }
490
X
491
X       if ((fd = open(argv[1], O_RDWR)) < 0) {
492
X               perror(argv[1]);
493
X               exit(1);
494
X       }
495
X
496
X       if (ioctl(fd, SOUND_MIXER_READ_RECMASK, &recmask) < 0) {
497
X               fprintf(stderr, "error: ioctl read recording mask failed\n");
498
X               perror("ioctl");
499
X               close(fd);
500
X               exit(1);
501
X       }
502
X
503
X       if (!(recmask & SOUND_MASK_DIGITAL1)) {
504
X               fprintf(stderr, "error: cannot find DIGITAL1 device in mixer\n");
505
X               close(fd);
506
X               exit(1);
507
X       }
508
X
509
X       if (ioctl(fd, SOUND_MIXER_READ_RECSRC, &recsrc) < 0) {
510
X               fprintf(stderr, "error: ioctl read recording source failed\n");
511
X               perror("ioctl");
512
X               close(fd);
513
X               exit(1);
514
X       }
515
X
516
X       recsrc |= SOUND_MASK_DIGITAL1;
517
X
518
X       if (ioctl(fd, SOUND_MIXER_WRITE_RECSRC, &recsrc) < 0) {
519
X               fprintf(stderr, "error: ioctl write recording source failed\n");
520
X               perror("ioctl");
521
X               close(fd);
522
X               exit(1);
523
X       }
524
X
525
X       close(fd);
526
X
527
X       return 0;
528
}
529
SHAR_EOF
530
  $shar_touch -am 1204092598 'MultiSound.d/setdigital.c' &&
531
  chmod 0664 'MultiSound.d/setdigital.c' ||
532
  $echo 'restore of' 'MultiSound.d/setdigital.c' 'failed'
533
  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
534
  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
535
    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
536
    || $echo 'MultiSound.d/setdigital.c:' 'MD5 check failed'
537
e87217fc3e71288102ba41fd81f71ec4  MultiSound.d/setdigital.c
538
SHAR_EOF
539
  else
540
    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'MultiSound.d/setdigital.c'`"
541
    test 2046 -eq "$shar_count" ||
542
    $echo 'MultiSound.d/setdigital.c:' 'original size' '2046,' 'current size' "$shar_count!"
543
  fi
544
fi
545
# ============= MultiSound.d/pinnaclecfg.c ==============
546
if test -f 'MultiSound.d/pinnaclecfg.c' && test "$first_param" != -c; then
547
  $echo 'x -' SKIPPING 'MultiSound.d/pinnaclecfg.c' '(file already exists)'
548
else
549
  $echo 'x -' extracting 'MultiSound.d/pinnaclecfg.c' '(text)'
550
  sed 's/^X//' << 'SHAR_EOF' > 'MultiSound.d/pinnaclecfg.c' &&
551
/*********************************************************************
552
X *
553
X * pinnaclecfg.c - Pinnacle/Fiji Device Configuration Program
554
X *
555
X * This is for NON-PnP mode only.  For PnP mode, use isapnptools.
556
X *
557
X * This is Linux-specific, and must be run with root permissions.
558
X *
559
X * Part of the Turtle Beach MultiSound Sound Card Driver for Linux
560
X *
561
X * Copyright (C) 1998 Andrew Veliath
562
X *
563
X * This program is free software; you can redistribute it and/or modify
564
X * it under the terms of the GNU General Public License as published by
565
X * the Free Software Foundation; either version 2 of the License, or
566
X * (at your option) any later version.
567
X *
568
X * This program is distributed in the hope that it will be useful,
569
X * but WITHOUT ANY WARRANTY; without even the implied warranty of
570
X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
571
X * GNU General Public License for more details.
572
X *
573
X * You should have received a copy of the GNU General Public License
574
X * along with this program; if not, write to the Free Software
575
X * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
576
X *
577
X ********************************************************************/
578
X
579
#include 
580
#include 
581
#include 
582
#include 
583
#include 
584
#include 
585
#include 
586
X
587
#define IREG_LOGDEVICE          0x07
588
#define IREG_ACTIVATE           0x30
589
#define LD_ACTIVATE             0x01
590
#define LD_DISACTIVATE          0x00
591
#define IREG_EECONTROL          0x3F
592
#define IREG_MEMBASEHI          0x40
593
#define IREG_MEMBASELO          0x41
594
#define IREG_MEMCONTROL         0x42
595
#define IREG_MEMRANGEHI         0x43
596
#define IREG_MEMRANGELO         0x44
597
#define MEMTYPE_8BIT            0x00
598
#define MEMTYPE_16BIT           0x02
599
#define MEMTYPE_RANGE           0x00
600
#define MEMTYPE_HIADDR          0x01
601
#define IREG_IO0_BASEHI         0x60
602
#define IREG_IO0_BASELO         0x61
603
#define IREG_IO1_BASEHI         0x62
604
#define IREG_IO1_BASELO         0x63
605
#define IREG_IRQ_NUMBER         0x70
606
#define IREG_IRQ_TYPE           0x71
607
#define IRQTYPE_HIGH            0x02
608
#define IRQTYPE_LOW             0x00
609
#define IRQTYPE_LEVEL           0x01
610
#define IRQTYPE_EDGE            0x00
611
X
612
#define HIBYTE(w)               ((BYTE)(((WORD)(w) >> 8) & 0xFF))
613
#define LOBYTE(w)               ((BYTE)(w))
614
#define MAKEWORD(low,hi)        ((WORD)(((BYTE)(low))|(((WORD)((BYTE)(hi)))<<8)))
615
X
616
typedef __u8                    BYTE;
617
typedef __u16                   USHORT;
618
typedef __u16                   WORD;
619
X
620
static int config_port = -1;
621
X
622
static int msnd_write_cfg(int cfg, int reg, int value)
623
{
624
X       outb(reg, cfg);
625
X       outb(value, cfg + 1);
626
X       if (value != inb(cfg + 1)) {
627
X               fprintf(stderr, "error: msnd_write_cfg: I/O error\n");
628
X               return -EIO;
629
X       }
630
X       return 0;
631
}
632
X
633
static int msnd_read_cfg(int cfg, int reg)
634
{
635
X       outb(reg, cfg);
636
X       return inb(cfg + 1);
637
}
638
X
639
static int msnd_write_cfg_io0(int cfg, int num, WORD io)
640
{
641
X       if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))
642
X               return -EIO;
643
X       if (msnd_write_cfg(cfg, IREG_IO0_BASEHI, HIBYTE(io)))
644
X               return -EIO;
645
X       if (msnd_write_cfg(cfg, IREG_IO0_BASELO, LOBYTE(io)))
646
X               return -EIO;
647
X       return 0;
648
}
649
X
650
static int msnd_read_cfg_io0(int cfg, int num, WORD *io)
651
{
652
X       if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))
653
X               return -EIO;
654
X
655
X       *io = MAKEWORD(msnd_read_cfg(cfg, IREG_IO0_BASELO),
656
X                      msnd_read_cfg(cfg, IREG_IO0_BASEHI));
657
X
658
X       return 0;
659
}
660
X
661
static int msnd_write_cfg_io1(int cfg, int num, WORD io)
662
{
663
X       if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))
664
X               return -EIO;
665
X       if (msnd_write_cfg(cfg, IREG_IO1_BASEHI, HIBYTE(io)))
666
X               return -EIO;
667
X       if (msnd_write_cfg(cfg, IREG_IO1_BASELO, LOBYTE(io)))
668
X               return -EIO;
669
X       return 0;
670
}
671
X
672
static int msnd_read_cfg_io1(int cfg, int num, WORD *io)
673
{
674
X       if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))
675
X               return -EIO;
676
X
677
X       *io = MAKEWORD(msnd_read_cfg(cfg, IREG_IO1_BASELO),
678
X                      msnd_read_cfg(cfg, IREG_IO1_BASEHI));
679
X
680
X       return 0;
681
}
682
X
683
static int msnd_write_cfg_irq(int cfg, int num, WORD irq)
684
{
685
X       if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))
686
X               return -EIO;
687
X       if (msnd_write_cfg(cfg, IREG_IRQ_NUMBER, LOBYTE(irq)))
688
X               return -EIO;
689
X       if (msnd_write_cfg(cfg, IREG_IRQ_TYPE, IRQTYPE_EDGE))
690
X               return -EIO;
691
X       return 0;
692
}
693
X
694
static int msnd_read_cfg_irq(int cfg, int num, WORD *irq)
695
{
696
X       if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))
697
X               return -EIO;
698
X
699
X       *irq = msnd_read_cfg(cfg, IREG_IRQ_NUMBER);
700
X
701
X       return 0;
702
}
703
X
704
static int msnd_write_cfg_mem(int cfg, int num, int mem)
705
{
706
X       WORD wmem;
707
X
708
X       mem >>= 8;
709
X       mem &= 0xfff;
710
X       wmem = (WORD)mem;
711
X       if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))
712
X               return -EIO;
713
X       if (msnd_write_cfg(cfg, IREG_MEMBASEHI, HIBYTE(wmem)))
714
X               return -EIO;
715
X       if (msnd_write_cfg(cfg, IREG_MEMBASELO, LOBYTE(wmem)))
716
X               return -EIO;
717
X       if (wmem && msnd_write_cfg(cfg, IREG_MEMCONTROL, (MEMTYPE_HIADDR | MEMTYPE_16BIT)))
718
X               return -EIO;
719
X       return 0;
720
}
721
X
722
static int msnd_read_cfg_mem(int cfg, int num, int *mem)
723
{
724
X       if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))
725
X               return -EIO;
726
X
727
X       *mem = MAKEWORD(msnd_read_cfg(cfg, IREG_MEMBASELO),
728
X                       msnd_read_cfg(cfg, IREG_MEMBASEHI));
729
X       *mem <<= 8;
730
X
731
X       return 0;
732
}
733
X
734
static int msnd_activate_logical(int cfg, int num)
735
{
736
X       if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))
737
X               return -EIO;
738
X       if (msnd_write_cfg(cfg, IREG_ACTIVATE, LD_ACTIVATE))
739
X               return -EIO;
740
X       return 0;
741
}
742
X
743
static int msnd_write_cfg_logical(int cfg, int num, WORD io0, WORD io1, WORD irq, int mem)
744
{
745
X       if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))
746
X               return -EIO;
747
X       if (msnd_write_cfg_io0(cfg, num, io0))
748
X               return -EIO;
749
X       if (msnd_write_cfg_io1(cfg, num, io1))
750
X               return -EIO;
751
X       if (msnd_write_cfg_irq(cfg, num, irq))
752
X               return -EIO;
753
X       if (msnd_write_cfg_mem(cfg, num, mem))
754
X               return -EIO;
755
X       if (msnd_activate_logical(cfg, num))
756
X               return -EIO;
757
X       return 0;
758
}
759
X
760
static int msnd_read_cfg_logical(int cfg, int num, WORD *io0, WORD *io1, WORD *irq, int *mem)
761
{
762
X       if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num))
763
X               return -EIO;
764
X       if (msnd_read_cfg_io0(cfg, num, io0))
765
X               return -EIO;
766
X       if (msnd_read_cfg_io1(cfg, num, io1))
767
X               return -EIO;
768
X       if (msnd_read_cfg_irq(cfg, num, irq))
769
X               return -EIO;
770
X       if (msnd_read_cfg_mem(cfg, num, mem))
771
X               return -EIO;
772
X       return 0;
773
}
774
X
775
static void usage(void)
776
{
777
X       fprintf(stderr,
778
X               "\n"
779
X               "pinnaclecfg 1.0\n"
780
X               "\n"
781
X               "usage: pinnaclecfg  [device config]\n"
782
X               "\n"
783
X               "This is for use with the card in NON-PnP mode only.\n"
784
X               "\n"
785
X               "Available devices (not all available for Fiji):\n"
786
X               "\n"
787
X               "        Device                       Description\n"
788
X               "        -------------------------------------------------------------------\n"
789
X               "        reset                        Reset all devices (i.e. disable)\n"
790
X               "        show                         Display current device configurations\n"
791
X               "\n"
792
X               "        dsp            Audio device\n"
793
X               "        mpu                 Internal Kurzweil synth\n"
794
X               "        ide           On-board IDE controller\n"
795
X               "        joystick                 Joystick port\n"
796
X               "\n");
797
X       exit(1);
798
}
799
X
800
static int cfg_reset(void)
801
{
802
X       int i;
803
X
804
X       for (i = 0; i < 4; ++i)
805
X               msnd_write_cfg_logical(config_port, i, 0, 0, 0, 0);
806
X
807
X       return 0;
808
}
809
X
810
static int cfg_show(void)
811
{
812
X       int i;
813
X       int count = 0;
814
X
815
X       for (i = 0; i < 4; ++i) {
816
X               WORD io0, io1, irq;
817
X               int mem;
818
X               msnd_read_cfg_logical(config_port, i, &io0, &io1, &irq, &mem);
819
X               switch (i) {
820
X               case 0:
821
X                       if (io0 || irq || mem) {
822
X                               printf("dsp 0x%x %d 0x%x\n", io0, irq, mem);
823
X                               ++count;
824
X                       }
825
X                       break;
826
X               case 1:
827
X                       if (io0 || irq) {
828
X                               printf("mpu 0x%x %d\n", io0, irq);
829
X                               ++count;
830
X                       }
831
X                       break;
832
X               case 2:
833
X                       if (io0 || io1 || irq) {
834
X                               printf("ide 0x%x 0x%x %d\n", io0, io1, irq);
835
X                               ++count;
836
X                       }
837
X                       break;
838
X               case 3:
839
X                       if (io0) {
840
X                               printf("joystick 0x%x\n", io0);
841
X                               ++count;
842
X                       }
843
X                       break;
844
X               }
845
X       }
846
X
847
X       if (count == 0)
848
X               fprintf(stderr, "no devices configured\n");
849
X
850
X       return 0;
851
}
852
X
853
static int cfg_dsp(int argc, char *argv[])
854
{
855
X       int io, irq, mem;
856
X
857
X       if (argc < 3 ||
858
X           sscanf(argv[0], "0x%x", &io) != 1 ||
859
X           sscanf(argv[1], "%d", &irq) != 1 ||
860
X           sscanf(argv[2], "0x%x", &mem) != 1)
861
X               usage();
862
X
863
X       if (!(io == 0x290 ||
864
X             io == 0x260 ||
865
X             io == 0x250 ||
866
X             io == 0x240 ||
867
X             io == 0x230 ||
868
X             io == 0x220 ||
869
X             io == 0x210 ||
870
X             io == 0x3e0)) {
871
X               fprintf(stderr, "error: io must be one of "
872
X                       "210, 220, 230, 240, 250, 260, 290, or 3E0\n");
873
X               usage();
874
X       }
875
X
876
X       if (!(irq == 5 ||
877
X             irq == 7 ||
878
X             irq == 9 ||
879
X             irq == 10 ||
880
X             irq == 11 ||
881
X             irq == 12)) {
882
X               fprintf(stderr, "error: irq must be one of "
883
X                       "5, 7, 9, 10, 11 or 12\n");
884
X               usage();
885
X       }
886
X
887
X       if (!(mem == 0xb0000 ||
888
X             mem == 0xc8000 ||
889
X             mem == 0xd0000 ||
890
X             mem == 0xd8000 ||
891
X             mem == 0xe0000 ||
892
X             mem == 0xe8000)) {
893
X               fprintf(stderr, "error: mem must be one of "
894
X                       "0xb0000, 0xc8000, 0xd0000, 0xd8000, 0xe0000 or 0xe8000\n");
895
X               usage();
896
X       }
897
X
898
X       return msnd_write_cfg_logical(config_port, 0, io, 0, irq, mem);
899
}
900
X
901
static int cfg_mpu(int argc, char *argv[])
902
{
903
X       int io, irq;
904
X
905
X       if (argc < 2 ||
906
X           sscanf(argv[0], "0x%x", &io) != 1 ||
907
X           sscanf(argv[1], "%d", &irq) != 1)
908
X               usage();
909
X
910
X       return msnd_write_cfg_logical(config_port, 1, io, 0, irq, 0);
911
}
912
X
913
static int cfg_ide(int argc, char *argv[])
914
{
915
X       int io0, io1, irq;
916
X
917
X       if (argc < 3 ||
918
X           sscanf(argv[0], "0x%x", &io0) != 1 ||
919
X           sscanf(argv[0], "0x%x", &io1) != 1 ||
920
X           sscanf(argv[1], "%d", &irq) != 1)
921
X               usage();
922
X
923
X       return msnd_write_cfg_logical(config_port, 2, io0, io1, irq, 0);
924
}
925
X
926
static int cfg_joystick(int argc, char *argv[])
927
{
928
X       int io;
929
X
930
X       if (argc < 1 ||
931
X           sscanf(argv[0], "0x%x", &io) != 1)
932
X               usage();
933
X
934
X       return msnd_write_cfg_logical(config_port, 3, io, 0, 0, 0);
935
}
936
X
937
int main(int argc, char *argv[])
938
{
939
X       char *device;
940
X       int rv = 0;
941
X
942
X       --argc; ++argv;
943
X
944
X       if (argc < 2)
945
X               usage();
946
X
947
X       sscanf(argv[0], "0x%x", &config_port);
948
X       if (config_port != 0x250 && config_port != 0x260 && config_port != 0x270) {
949
X               fprintf(stderr, "error:  must be 0x250, 0x260 or 0x270\n");
950
X               exit(1);
951
X       }
952
X       if (ioperm(config_port, 2, 1)) {
953
X               perror("ioperm");
954
X               fprintf(stderr, "note: pinnaclecfg must be run as root\n");
955
X               exit(1);
956
X       }
957
X       device = argv[1];
958
X
959
X       argc -= 2; argv += 2;
960
X
961
X       if (strcmp(device, "reset") == 0)
962
X               rv = cfg_reset();
963
X       else if (strcmp(device, "show") == 0)
964
X               rv = cfg_show();
965
X       else if (strcmp(device, "dsp") == 0)
966
X               rv = cfg_dsp(argc, argv);
967
X       else if (strcmp(device, "mpu") == 0)
968
X               rv = cfg_mpu(argc, argv);
969
X       else if (strcmp(device, "ide") == 0)
970
X               rv = cfg_ide(argc, argv);
971
X       else if (strcmp(device, "joystick") == 0)
972
X               rv = cfg_joystick(argc, argv);
973
X       else {
974
X               fprintf(stderr, "error: unknown device %s\n", device);
975
X               usage();
976
X       }
977
X
978
X       if (rv)
979
X               fprintf(stderr, "error: device configuration failed\n");
980
X
981
X       return 0;
982
}
983
SHAR_EOF
984
  $shar_touch -am 1204092598 'MultiSound.d/pinnaclecfg.c' &&
985
  chmod 0664 'MultiSound.d/pinnaclecfg.c' ||
986
  $echo 'restore of' 'MultiSound.d/pinnaclecfg.c' 'failed'
987
  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
988
  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
989
    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
990
    || $echo 'MultiSound.d/pinnaclecfg.c:' 'MD5 check failed'
991
366bdf27f0db767a3c7921d0a6db20fe  MultiSound.d/pinnaclecfg.c
992
SHAR_EOF
993
  else
994
    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'MultiSound.d/pinnaclecfg.c'`"
995
    test 10235 -eq "$shar_count" ||
996
    $echo 'MultiSound.d/pinnaclecfg.c:' 'original size' '10235,' 'current size' "$shar_count!"
997
  fi
998
fi
999
# ============= MultiSound.d/Makefile ==============
1000
if test -f 'MultiSound.d/Makefile' && test "$first_param" != -c; then
1001
  $echo 'x -' SKIPPING 'MultiSound.d/Makefile' '(file already exists)'
1002
else
1003
  $echo 'x -' extracting 'MultiSound.d/Makefile' '(text)'
1004
  sed 's/^X//' << 'SHAR_EOF' > 'MultiSound.d/Makefile' &&
1005
CC      = gcc
1006
CFLAGS  = -O
1007
PROGS   = setdigital msndreset pinnaclecfg conv
1008
X
1009
all: $(PROGS)
1010
X
1011
clean:
1012
X       rm -f $(PROGS)
1013
SHAR_EOF
1014
  $shar_touch -am 1204092398 'MultiSound.d/Makefile' &&
1015
  chmod 0664 'MultiSound.d/Makefile' ||
1016
  $echo 'restore of' 'MultiSound.d/Makefile' 'failed'
1017
  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
1018
  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
1019
    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
1020
    || $echo 'MultiSound.d/Makefile:' 'MD5 check failed'
1021
76ca8bb44e3882edcf79c97df6c81845  MultiSound.d/Makefile
1022
SHAR_EOF
1023
  else
1024
    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'MultiSound.d/Makefile'`"
1025
    test 106 -eq "$shar_count" ||
1026
    $echo 'MultiSound.d/Makefile:' 'original size' '106,' 'current size' "$shar_count!"
1027
  fi
1028
fi
1029
# ============= MultiSound.d/conv.l ==============
1030
if test -f 'MultiSound.d/conv.l' && test "$first_param" != -c; then
1031
  $echo 'x -' SKIPPING 'MultiSound.d/conv.l' '(file already exists)'
1032
else
1033
  $echo 'x -' extracting 'MultiSound.d/conv.l' '(text)'
1034
  sed 's/^X//' << 'SHAR_EOF' > 'MultiSound.d/conv.l' &&
1035
%%
1036
[ \n\t,\r]
1037
\;.*
1038
DB
1039
[0-9A-Fa-f]+H   { int n; sscanf(yytext, "%xH", &n); printf("%c", n); }
1040
%%
1041
int yywrap() { return 1; }
1042
main() { yylex(); }
1043
SHAR_EOF
1044
  $shar_touch -am 0828231798 'MultiSound.d/conv.l' &&
1045
  chmod 0664 'MultiSound.d/conv.l' ||
1046
  $echo 'restore of' 'MultiSound.d/conv.l' 'failed'
1047
  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
1048
  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
1049
    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
1050
    || $echo 'MultiSound.d/conv.l:' 'MD5 check failed'
1051
d2411fc32cd71a00dcdc1f009e858dd2  MultiSound.d/conv.l
1052
SHAR_EOF
1053
  else
1054
    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'MultiSound.d/conv.l'`"
1055
    test 141 -eq "$shar_count" ||
1056
    $echo 'MultiSound.d/conv.l:' 'original size' '141,' 'current size' "$shar_count!"
1057
  fi
1058
fi
1059
# ============= MultiSound.d/msndreset.c ==============
1060
if test -f 'MultiSound.d/msndreset.c' && test "$first_param" != -c; then
1061
  $echo 'x -' SKIPPING 'MultiSound.d/msndreset.c' '(file already exists)'
1062
else
1063
  $echo 'x -' extracting 'MultiSound.d/msndreset.c' '(text)'
1064
  sed 's/^X//' << 'SHAR_EOF' > 'MultiSound.d/msndreset.c' &&
1065
/*********************************************************************
1066
X *
1067
X * msndreset.c - resets the MultiSound card
1068
X *
1069
X * Copyright (C) 1998 Andrew Veliath
1070
X *
1071
X * This program is free software; you can redistribute it and/or modify
1072
X * it under the terms of the GNU General Public License as published by
1073
X * the Free Software Foundation; either version 2 of the License, or
1074
X * (at your option) any later version.
1075
X *
1076
X * This program is distributed in the hope that it will be useful,
1077
X * but WITHOUT ANY WARRANTY; without even the implied warranty of
1078
X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1079
X * GNU General Public License for more details.
1080
X *
1081
X * You should have received a copy of the GNU General Public License
1082
X * along with this program; if not, write to the Free Software
1083
X * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
1084
X *
1085
X ********************************************************************/
1086
X
1087
#include 
1088
#include 
1089
#include 
1090
#include 
1091
#include 
1092
#include 
1093
#include 
1094
X
1095
int main(int argc, char *argv[])
1096
{
1097
X       int fd;
1098
X
1099
X       if (argc != 2) {
1100
X               fprintf(stderr, "usage: msndreset \n");
1101
X               exit(1);
1102
X       }
1103
X
1104
X       if ((fd = open(argv[1], O_RDWR)) < 0) {
1105
X               perror(argv[1]);
1106
X               exit(1);
1107
X       }
1108
X
1109
X       if (ioctl(fd, SOUND_MIXER_PRIVATE1, 0) < 0) {
1110
X               fprintf(stderr, "error: msnd ioctl reset failed\n");
1111
X               perror("ioctl");
1112
X               close(fd);
1113
X               exit(1);
1114
X       }
1115
X
1116
X       close(fd);
1117
X
1118
X       return 0;
1119
}
1120
SHAR_EOF
1121
  $shar_touch -am 1204100698 'MultiSound.d/msndreset.c' &&
1122
  chmod 0664 'MultiSound.d/msndreset.c' ||
1123
  $echo 'restore of' 'MultiSound.d/msndreset.c' 'failed'
1124
  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
1125
  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
1126
    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
1127
    || $echo 'MultiSound.d/msndreset.c:' 'MD5 check failed'
1128
c52f876521084e8eb25e12e01dcccb8a  MultiSound.d/msndreset.c
1129
SHAR_EOF
1130
  else
1131
    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'MultiSound.d/msndreset.c'`"
1132
    test 1472 -eq "$shar_count" ||
1133
    $echo 'MultiSound.d/msndreset.c:' 'original size' '1472,' 'current size' "$shar_count!"
1134
  fi
1135
fi
1136
rm -fr _sh01426
1137
exit 0

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.