Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev more spkr rework.



details:   https://anonhg.NetBSD.org/src/rev/a49132772caf
branches:  trunk
changeset: 349376:a49132772caf
user:      christos <christos%NetBSD.org@localhost>
date:      Fri Dec 09 04:32:39 2016 +0000

description:
more spkr rework.

diffstat:

 sys/dev/files.audio      |    5 +-
 sys/dev/isa/files.isa    |    3 +-
 sys/dev/isa/spkr.c       |  472 ------------------------------------------
 sys/dev/isa/spkr_pcppi.c |   76 +-----
 sys/dev/isa/spkrio.h     |   23 --
 sys/dev/spkr.c           |  518 +++++++++++++++++++++++++++++++++++++++++++++++
 sys/dev/spkr_synth.c     |   39 +-
 sys/dev/spkrio.h         |   26 ++
 8 files changed, 582 insertions(+), 580 deletions(-)

diffs (truncated from 1318 to 300 lines):

diff -r 1bfe66400da2 -r a49132772caf sys/dev/files.audio
--- a/sys/dev/files.audio       Fri Dec 09 04:00:36 2016 +0000
+++ b/sys/dev/files.audio       Fri Dec 09 04:32:39 2016 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: files.audio,v 1.5 2016/12/08 11:31:08 nat Exp $
+#      $NetBSD: files.audio,v 1.6 2016/12/09 04:32:39 christos Exp $
 
 define audiobus        { }
 define midibus         { }
@@ -33,4 +33,5 @@
 file   dev/midictl.c                   midisyn
 file   dev/midisyn.c                   midisyn
 file   dev/mulaw.c                     mulaw                   needs-flag
-file   dev/spkr_synth.c                spkr & vaudiospeaker    needs-flag
+file   dev/spkr.c                      spkr                    needs-flag
+file   dev/spkr_synth.c                spkr_synth              needs-flag
diff -r 1bfe66400da2 -r a49132772caf sys/dev/isa/files.isa
--- a/sys/dev/isa/files.isa     Fri Dec 09 04:00:36 2016 +0000
+++ b/sys/dev/isa/files.isa     Fri Dec 09 04:32:39 2016 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: files.isa,v 1.166 2016/12/09 02:22:34 christos Exp $
+#      $NetBSD: files.isa,v 1.167 2016/12/09 04:32:39 christos Exp $
 #
 # Config file and device description for machine-independent ISA code.
 # Included by ports that need it.  Requires that the SCSI files be
@@ -435,7 +435,6 @@
 file   dev/isa/pcppi.c                 pcppi                   needs-flag
 
 attach spkr at pcppi with spkr_pcppi
-file   dev/isa/spkr.c                  spkr                    needs-flag
 file   dev/isa/spkr_pcppi.c            spkr_pcppi
 
 attach midi at pcppi with midi_pcppi: midisyn
diff -r 1bfe66400da2 -r a49132772caf sys/dev/isa/spkr.c
--- a/sys/dev/isa/spkr.c        Fri Dec 09 04:00:36 2016 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,472 +0,0 @@
-/*     $NetBSD: spkr.c,v 1.39 2016/12/09 02:22:34 christos Exp $       */
-
-/*
- * Copyright (c) 1990 Eric S. Raymond (esr%snark.thyrsus.com@localhost)
- * Copyright (c) 1990 Andrew A. Chernov (ache%astral.msk.su@localhost)
- * Copyright (c) 1990 Lennart Augustsson (lennart%augustsson.net@localhost)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by Eric S. Raymond
- * 4. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * spkr.c -- device driver for console speaker on 80386
- *
- * v1.1 by Eric S. Raymond (esr%snark.thyrsus.com@localhost) Feb 1990
- *      modified for 386bsd by Andrew A. Chernov <ache%astral.msk.su@localhost>
- *      386bsd only clean version, all SYSV stuff removed
- *      use hz value from param.c
- */
-
-#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: spkr.c,v 1.39 2016/12/09 02:22:34 christos Exp $");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/errno.h>
-#include <sys/device.h>
-#include <sys/malloc.h>
-#include <sys/module.h>
-#include <sys/uio.h>
-#include <sys/proc.h>
-#include <sys/ioctl.h>
-#include <sys/conf.h>
-
-#include <sys/bus.h>
-
-#include <dev/isa/spkrio.h>
-
-dev_type_open(spkropen);
-dev_type_close(spkrclose);
-dev_type_write(spkrwrite);
-dev_type_ioctl(spkrioctl);
-
-const struct cdevsw spkr_cdevsw = {
-       .d_open = spkropen,
-       .d_close = spkrclose,
-       .d_read = noread,
-       .d_write = spkrwrite,
-       .d_ioctl = spkrioctl,
-       .d_stop = nostop,
-       .d_tty = notty,
-       .d_poll = nopoll,
-       .d_mmap = nommap,
-       .d_kqfilter = nokqfilter,
-       .d_discard = nodiscard,
-       .d_flag = D_OTHER
-};
-
-static void playinit(void);
-static void playtone(int, int, int);
-static void playstring(char *, int);
-
-/**************** PLAY STRING INTERPRETER BEGINS HERE **********************
- *
- * Play string interpretation is modelled on IBM BASIC 2.0's PLAY statement;
- * M[LNS] are missing and the ~ synonym and octave-tracking facility is added.
- * Requires spkr_tone(), spkr_rest(). String play is not interruptible
- * except possibly at physical block boundaries.
- */
-
-#define dtoi(c)                ((c) - '0')
-
-static int octave;     /* currently selected octave */
-static int whole;      /* whole-note time at current tempo, in ticks */
-static int value;      /* whole divisor for note time, quarter note = 1 */
-static int fill;       /* controls spacing of notes */
-static bool octtrack;  /* octave-tracking on? */
-static bool octprefix; /* override current octave-tracking state? */
-
-/*
- * Magic number avoidance...
- */
-#define SECS_PER_MIN   60      /* seconds per minute */
-#define WHOLE_NOTE     4       /* quarter notes per whole note */
-#define MIN_VALUE      64      /* the most we can divide a note by */
-#define DFLT_VALUE     4       /* default value (quarter-note) */
-#define FILLTIME       8       /* for articulation, break note in parts */
-#define STACCATO       6       /* 6/8 = 3/4 of note is filled */
-#define NORMAL         7       /* 7/8ths of note interval is filled */
-#define LEGATO         8       /* all of note interval is filled */
-#define DFLT_OCTAVE    4       /* default octave */
-#define MIN_TEMPO      32      /* minimum tempo */
-#define DFLT_TEMPO     120     /* default tempo */
-#define MAX_TEMPO      255     /* max tempo */
-#define NUM_MULT       3       /* numerator of dot multiplier */
-#define DENOM_MULT     2       /* denominator of dot multiplier */
-
-/* letter to half-tone:  A   B  C  D  E  F  G */
-static const int notetab[8] = {9, 11, 0, 2, 4, 5, 7};
-
-/*
- * This is the American Standard A440 Equal-Tempered scale with frequencies
- * rounded to nearest integer. Thank Goddess for the good ol' CRC Handbook...
- * our octave 0 is standard octave 2.
- */
-#define OCTAVE_NOTES   12      /* semitones per octave */
-static const int pitchtab[] =
-{
-/*        C     C#    D     D#    E     F     F#    G     G#    A     A#    B*/
-/* 0 */   65,   69,   73,   78,   82,   87,   93,   98,  103,  110,  117,  123,
-/* 1 */  131,  139,  147,  156,  165,  175,  185,  196,  208,  220,  233,  247,
-/* 2 */  262,  277,  294,  311,  330,  349,  370,  392,  415,  440,  466,  494,
-/* 3 */  523,  554,  587,  622,  659,  698,  740,  784,  831,  880,  932,  988,
-/* 4 */ 1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1975,
-/* 5 */ 2093, 2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951,
-/* 6 */ 4186, 4435, 4698, 4978, 5274, 5588, 5920, 6272, 6644, 7040, 7459, 7902,
-};
-#define NOCTAVES (int)(__arraycount(pitchtab) / OCTAVE_NOTES)
-
-static void
-playinit(void)
-{
-    octave = DFLT_OCTAVE;
-    whole = (hz * SECS_PER_MIN * WHOLE_NOTE) / DFLT_TEMPO;
-    fill = NORMAL;
-    value = DFLT_VALUE;
-    octtrack = false;
-    octprefix = true;  /* act as though there was an initial O(n) */
-}
-
-static void
-playtone(int pitch, int val, int sustain)
-/* play tone of proper duration for current rhythm signature */
-{
-    int        sound, silence, snum = 1, sdenom = 1;
-
-    /* this weirdness avoids floating-point arithmetic */
-    for (; sustain; sustain--)
-    {
-       snum *= NUM_MULT;
-       sdenom *= DENOM_MULT;
-    }
-
-    if (pitch == -1)
-       spkr_rest(whole * snum / (val * sdenom));
-    else
-    {
-       sound = (whole * snum) / (val * sdenom)
-               - (whole * (FILLTIME - fill)) / (val * FILLTIME);
-       silence = whole * (FILLTIME-fill) * snum / (FILLTIME * val * sdenom);
-
-#ifdef SPKRDEBUG
-       printf("playtone: pitch %d for %d ticks, rest for %d ticks\n",
-           pitch, sound, silence);
-#endif /* SPKRDEBUG */
-
-       spkr_tone(pitchtab[pitch], sound);
-       if (fill != LEGATO)
-           spkr_rest(silence);
-    }
-}
-
-static void
-playstring(char *cp, int slen)
-/* interpret and play an item from a notation string */
-{
-    int                pitch, lastpitch = OCTAVE_NOTES * DFLT_OCTAVE;
-
-#define GETNUM(cp, v)  for(v=0; slen > 0 && isdigit(cp[1]); ) \
-                               {v = v * 10 + (*++cp - '0'); slen--;}
-    for (; slen--; cp++)
-    {
-       int             sustain, timeval, tempo;
-       char    c = toupper(*cp);
-
-#ifdef SPKRDEBUG
-       printf("playstring: %c (%x)\n", c, c);
-#endif /* SPKRDEBUG */
-
-       switch (c)
-       {
-       case 'A':  case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
-
-           /* compute pitch */
-           pitch = notetab[c - 'A'] + octave * OCTAVE_NOTES;
-
-           /* this may be followed by an accidental sign */
-           if (slen > 0 && (cp[1] == '#' || cp[1] == '+'))
-           {
-               ++pitch;
-               ++cp;
-               slen--;
-           }
-           else if (slen > 0 && cp[1] == '-')
-           {
-               --pitch;
-               ++cp;
-               slen--;
-           }
-
-           /*
-            * If octave-tracking mode is on, and there has been no octave-
-            * setting prefix, find the version of the current letter note
-            * closest to the last regardless of octave.
-            */
-           if (octtrack && !octprefix)
-           {
-               if (abs(pitch-lastpitch) > abs(pitch+OCTAVE_NOTES-lastpitch))
-               {
-                   if (octave < NOCTAVES - 1) {
-                       ++octave;
-                       pitch += OCTAVE_NOTES;
-                   }
-               }
-
-               if (abs(pitch-lastpitch) > abs((pitch-OCTAVE_NOTES)-lastpitch))
-               {
-                   if (octave > 0) {
-                       --octave;
-                       pitch -= OCTAVE_NOTES;
-                   }
-               }
-           }
-           octprefix = false;
-           lastpitch = pitch;
-
-           /* ...which may in turn be followed by an override time value */
-           GETNUM(cp, timeval);
-           if (timeval <= 0 || timeval > MIN_VALUE)
-               timeval = value;
-
-           /* ...and/or sustain dots */
-           for (sustain = 0; slen > 0 && cp[1] == '.'; cp++)
-           {
-               slen--;
-               sustain++;
-           }
-



Home | Main Index | Thread Index | Old Index