#!/bin/rc # # command: /bin/boddle /sys/src/9/port/devaudio.c devaudio.c # srcdir: /sys/src/9/port # version: 1004714078 # date: Fri Nov 2 15:14:38 GMT 2001 # myname=$0 doextract=no fn usage{ echo $myname: usage: $myname '[-X] [src-directory]' >[1=2] exit usage } fn sigint{ rm -rf 1004714078 exit interrupt } while(~ $1 -*){ switch($1){ case -X doextract=yes case -* usage } shift } switch($#*){ case 0 srcdir=/sys/src/9/port case 1 srcdir=$1 case * usage } if(! ~ $doextract yes){ echo This shell file contains a bundle of diffs representing changes echo to original source files in the Plan 9 distribution. It will run echo against the files in echo ' ' $srcdir echo '(unless overridden by the optional source directory argument)' echo and create a directory 1004714078 containing the updated files. echo It will NOT automatically update the original files. echo echo Invoke with argument -X to perform the actual extraction. exit 0 } rm -rf 1004714078 mkdir 1004714078 target=1004714078/devaudio.c echo -n '1004714078/devaudio.c: ' if(! test -f $srcdir/devaudio.c || ! test -r $srcdir/devaudio.c){ echo $srcdir/devaudio.c unreadable exit unreadable } sum=`{sum < $srcdir/devaudio.c} if(! ~ 010c638720395 $sum(1)^$sum(2)){ echo $srcdir/devaudio.c is not the original distribution file exit original } cp $srcdir/devaudio.c 1004714078/devaudio.c sed s/.// <<'//GO.SYSIN DD VADIM devaudio.c' | ed 1004714078/devaudio.c >/dev/null >[2=1] -1203a -} - -static void -b8to16(uchar *a) -{ - uchar *p, *q; - - p = a + Bufsize/2; - q = a + Bufsize - 2; - do { - q[1] = (*--p)^0x80; - q[0] = 0; - } while ((q -= 2) >= a); -} - -static void -b16to8(uchar *a) -{ - uchar *p, *ep, *q; - - p = a + 1; - ep = a + Bufsize; - q = a - 1; - do - *++q = *p^0x80; - while ((p += 2) < ep); -. -1175c - if(audio.major == 3) - b16to8(b->virt); - else - swab(b->virt); -. -987c - if(audio.major == 3) - b8to16(b->virt); - else - swab(b->virt); -. -928c - if(audio.major == 3) - b16to8(b->virt); - else - swab(b->virt); -. -861c - if(audio.major != 4 && audio.major != 3) -. -833a - } - -. -819a - if(audio.major == 4) { - -. -793d -788,789c - if(audio.major == 3) { - if(audio.minor == 1 && !ess1688(&sbconf)) - audio.major = 4; - else - blaster.startdma = sbprostartdma; - } else { - print("#A: model 0x%.2x 0x%.2x; not SB 16/PRO compatible\n", -. -730c - if(cistrcmp(sbconf.type, "sbpro") == 0) - sbconf.dma = 1; - else if((cistrcmp(sbconf.type, "sb16") != 0) && (cistrcmp(sbconf.type, "ess1688") != 0)) -. -410a -static void -sbprostartdma(void) -{ - ulong count; - int speed; - - ilock(&blaster); - dmaend(blaster.dma); - if(audio.amode == Aread) { - sbcmd(0xd3); /* speaker off */ - speed = audio.livol[Vspeed]; - } else { - sbcmd(0xd1); /* speaker on */ - speed = audio.lovol[Vspeed]; - } - speed *= 2; - sbcmd(0x40); - sbcmd((65536 - 256000000/speed) >> 8); - - count = (Bufsize >> 1) - 1; - sbcmd(0x48); /* block size */ - sbcmd(count); - sbcmd(count>>8); - if(audio.amode == Aread) { - sbcmd(0xa8); /* stereo */ - sbcmd(0x98); /* high speed input, autoinit */ - } else { - mxcmd(0x0e, mxread(0x0e)|0x22); /* stereo, no output filter */ - sbcmd(0x90); /* high speed output, autoinit */ - } - - audio.active = 1; - audio.tottime = todget(nil); - contindma(); - iunlock(&blaster); -} - -. -369a - } -. -367a - if(audio.major == 3) { /* sbpro */ - outb(blaster.reset, 1); - microdelay(3); - outb(blaster.reset, 0); - } else { /* sb16 */ -. -361c - if(dmasetup(blaster.dma, b->virt, (audio.major == 3? Bufsize/2 : Bufsize), audio.amode == Aread) >= 0) -. -304a - break; - - case 3: /* sbpro */ - - mxcmd(0x22, 255); /* left/right master */ - mxcmds2(0x04, left[Vaudio], right[Vaudio]); - mxcmds2(0x26, left[Vsynth], right[Vsynth]); - mxcmds2(0x28, left[Vcd], right[Vcd]); - mxcmds2(0x2e, left[Vline], right[Vline]); - mxcmdss(0x0a, left[Vmic]); - - source = 0; - if(audio.livol[Vcd]) - source = 2; - else if(audio.livol[Vline]) - source = 6; - mxcmd(0x0c, 0x20|source); /* no input filter */ - break; - } - -. -255a - switch (audio.major) { - case 4: /* sb16 */ - -. -229a -mxcmds2(int s, int v, int w) -{ - - if(v > 100) - v = 100; - if(v < 0) - v = 0; - if(w > 100) - w = 100; - if(w < 0) - w = 0; - mxcmd(s, (((v*15)/100)<<4) | ((w*15)/100)); -} - -static void -mxcmdss(int s, int v) -{ - if(v > 100) - v = 100; - if(v < 0) - v = 0; - mxcmd(s, (v*7)/100); -} - -static void -. -132a -static void b16to8(uchar*); -static void b8to16(uchar*); -. -79,80c - int major; /* SB major version number (sb16=4, sbpro=3) */ - int minor; /* SB minor version number */ -. -wq //GO.SYSIN DD VADIM devaudio.c sum=`{sum < 1004714078/devaudio.c} if(~ 0d74360d22810 $sum(1)^$sum(2)) echo if not{ echo 1004714078/devaudio.c checksum error creating updated file exit checksum }