home *** CD-ROM | disk | FTP | other *** search
/ Audio Version 4.94 / audioversion4.94knowledgemediaresourcelibraryoctober1994.iso / msdos / musicbox / mbdoc.arc / MUSICBOX.TXT
Text File  |  1988-03-20  |  187KB  |  5,160 lines

  1.  
  2.  
  3.                              MusicBox Version 2.12PD
  4.  
  5.                COPYRIGHT (C) 1986 John Dunn, All Rights Reserved 
  6.                  Entered into the Public Domain, March 20, 1988
  7.  
  8.  
  9.      Use and copying of this software and documentation, and preparation
  10.      of derivative works based upon this software and documentation are
  11.      permitted.  Any distribution of this software or derivative works
  12.      must comply with all applicable United States export control laws.
  13.  
  14.      This software is made available AS IS, and the author makes no
  15.      warranty about the software, its performance, or its conformity to
  16.      any specification.
  17.  
  18.  
  19.     Table of Contents:
  20.  
  21.          Overview. . . . . . . . . . . . . . . . . . . . . . . . .  2
  22.          Getting Started . . . . . . . . . . . . . . . . . . . . .  3
  23.          MENU Commands . . . . . . . . . . . . . . . . . . . . . .  5
  24.          General Information . . . . . . . . . . . . . . . . . . .  8
  25.          Hexadecimal Numbers and Boolean Logic . . . . . . . . . . 11
  26.          Tutorial. . . . . . . . . . . . . . . . . . . . . . . . . 14
  27.  
  28.          SWITCH Modules. . . . . . . . . . . . . . . . . . . . . . 20
  29.          INDEX Modules . . . . . . . . . . . . . . . . . . . . . . 22
  30.          MATH Modules. . . . . . . . . . . . . . . . . . . . . . . 25
  31.          LOGIC Modules . . . . . . . . . . . . . . . . . . . . . . 27
  32.          SEQUENCE Modules. . . . . . . . . . . . . . . . . . . . . 29
  33.          MIX Modules . . . . . . . . . . . . . . . . . . . . . . . 32
  34.          PROGRAM Modules . . . . . . . . . . . . . . . . . . . . . 34
  35.  
  36.          CLOCK Modules . . . . . . . . . . . . . . . . . . . . . . 36
  37.          TRIGGER Modules . . . . . . . . . . . . . . . . . . . . . 41
  38.          ONESHOT Modules . . . . . . . . . . . . . . . . . . . . . 44
  39.          TEST Modules. . . . . . . . . . . . . . . . . . . . . . . 47
  40.          RANDOM Modules. . . . . . . . . . . . . . . . . . . . . . 49
  41.          PATTERN Modules . . . . . . . . . . . . . . . . . . . . . 53
  42.          MIDI Modules. . . . . . . . . . . . . . . . . . . . . . . 57
  43.  
  44.          DISPLAY Modules . . . . . . . . . . . . . . . . . . . . . 62
  45.          SLEW Modules. . . . . . . . . . . . . . . . . . . . . . . 64
  46.          SAMPLE Modules. . . . . . . . . . . . . . . . . . . . . . 67
  47.          BOUNDS Modules. . . . . . . . . . . . . . . . . . . . . . 69
  48.          OCTAVE Modules. . . . . . . . . . . . . . . . . . . . . . 71
  49.          SPECIAL Modules . . . . . . . . . . . . . . . . . . . . . 72
  50.          SYSTEM Modules. . . . . . . . . . . . . . . . . . . . . . 75
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.                                     1
  66.  
  67.  
  68.  
  69.     ======================================================================
  70.                                   OVERVIEW
  71.  
  72.          MusicBox was designed to be a flexible, open-ended working
  73.     environment that is particularly suited to developing original
  74.     material.  Although the software is capable of recording incoming
  75.     MIDI data, it is not intended to be used as a MIDI recorder. MusicBox
  76.     is compatible with conventional hardware and software sequencers, and
  77.     works well with them.  But it is conceptionally different from them
  78.     because it is a composition tool rather than a recording and
  79.     arranging tool.
  80.  
  81.          While MusicBox is unlike anything currently available on the
  82.     MIDI marketplace, it will be instantly recognizable to anyone who has
  83.     used a modular synthesizer.  The program consists of an abbreviated
  84.     menu, a multi-page workspace, and a "toolbox" of some 150 different
  85.     computation functions, graphically represented as function "modules",
  86.     complete with output and inputs.
  87.  
  88.          Like the big analog synthesizers, programming MusicBox is a
  89.     matter of patching the outputs of modules to the inputs of other
  90.     modules.  Unlike the analogs, there are no patchcords to fuss with,
  91.     patches are automatically labeled as they are made, and since the
  92.     computer is perfectly willing to make multiple copies of the modules,
  93.     there are always enough of them.
  94.  
  95.          MusicBox is process oriented as opposed to the more traditional
  96.     score or data orientation.  This means that rather than playing back
  97.     notes that have been previously entered as a score or a MIDI
  98.     recording, MusicBox calculates notes "on the fly".  Composing with
  99.     MusicBox is an iterative process, of first making a simple "patch"
  100.     (grouping of modules), then expanding it, refining it, and
  101.     integrating it with other patches.
  102.  
  103.          Although MusicBox is designed as a MIDI output controller, it
  104.     can be used for non-MIDI and even non-musical applications.  The
  105.     chapter on "SPECIAL" modules describes tools that allow use of
  106.     MusicBox as a non-specific process control program.
  107.  
  108.          MusicBox is not a particularly efficient approach for composing
  109.     with a single instrument.  It is intended to be used with a large
  110.     number of MIDI instruments playing simultaneously, such as a TX816
  111.     rack.  In this context, MusicBox becomes both powerful and elegant,
  112.     giving the composer the ability to quickly move from control of the
  113.     overall sound of the electronic orchestra to an individual parameter
  114.     of a single instrument.
  115.  
  116.          Like most musical instruments, MusicBox will allow subtle,
  117.     interesting music only in proportion to the investment made in
  118.     acquiring skill in its use.  It is not an easy instrument to learn.
  119.     It is not possible to learn at all without reading the manual.  The
  120.     most interesting modules are not intuitive, and many of the module
  121.     icons are cryptic.  To make matters worse, the number values are in
  122.     hexadecimal.  The good news is that once learned, MusicBox gives the
  123.     composer a degree of control and agility in working with complex
  124.     musical events that is simply not available with more conventional
  125.     approaches.
  126.  
  127.  
  128.  
  129.  
  130.  
  131.                                     2
  132.  
  133.  
  134.  
  135.     ======================================================================
  136.                              GETTING STARTED
  137.  
  138.  
  139.     Hardware required:
  140.  
  141.          512K IBM-PC/XT/AT
  142.          Color monitor
  143.          Microsoft compatible mouse
  144.          Roland MPU-401
  145.  
  146.     Computer:
  147.  
  148.          Any PC-compatible will work.  If very large compositions are
  149.     intended, the extra speed of an AT gives added flexibility.  Must
  150.     have 512K or more system memory.
  151.  
  152.     Color monitor:
  153.  
  154.          The EGA, or similar high resolution color display is by far the
  155.     best choice.  While MusicBox will work with a CGA, many of these cards
  156.     will produce objectionable "snow" due to the software's multiple fast
  157.     screen updates.  A color monitor is absolutely necessary because the
  158.     module functions are all color coded.
  159.  
  160.     Microsoft compatible mouse:
  161.  
  162.          Any mouse that includes a Microsoft compatible mouse driver and
  163.     has two or more pushbuttons should work.  The Microsoft compatable
  164.     mouse driver must be present for the program to run properly.  This
  165.     is software that will have been supplied with your mouse.  If you
  166.     use the Microsoft internal mouse card, set the jumper to location 3.
  167.  
  168.     Roland MPU-401:
  169.  
  170.         MusicBox will work fine with one MPU or compatable, but it also
  171.     will support a second MPU, giving a total of 32 MIDI channels. The
  172.     2nd MPU must be jumpered properly for the 2nd MPU port.  Remove MPU
  173.     cover.  Cut jumper tracing to port 1, and solder in tracing to port
  174.     2.  Only use one MPU-PC interface card.  Connect the MPU's in
  175.     parallel to the one "D" connector at the computer card.  Use a ribbon
  176.     cable with one "D" connector for the computer at one end and two "D"
  177.     connectors for the MPUs at the other end, separated by a few inches.
  178.  
  179.     Software installation:
  180.  
  181.          After running the install program, INSTALL.COM, you should have
  182.     a copy of MB.EXE, which is the MusicBox program.  This is normally
  183.     the only file you need to run MusicBox.
  184.  
  185.          Before attempting to run MusicBox, be sure you have installed
  186.     the Microsoft compatible driver for your mouse.  If this driver is
  187.     not present MusicBox will not run.
  188.  
  189.          To make the task of learning MusicBox a little less formidable,
  190.     you should initially run MB from a directory that contains the
  191.     tutorial screen file TUTOR.SCR.  This is a overlay to the Page 0
  192.     toolbox screen, with all but a few of the modules subdued.  If
  193.     TUTOR.SCR is not in the current directory when MB is first run, the
  194.     normal toolbox screen will appear.
  195.  
  196.  
  197.                                     3
  198.  
  199.  
  200.  
  201.  
  202.          From a directory that contains the file TUTOR.SCR, run MusicBox
  203.     by typing "MB". Once MusicBox has signed on, you will be presented
  204.     with a screen of 21 labeled blue boxes, and a square blue mouse
  205.     cursor toward the center of the screen. Each box contains one or two
  206.     white icons, and several dark grey icons.  Ignore the dark grey icons
  207.     for now.  They are modules that have been inactivated by TUTOR. Thier
  208.     icons remain onscreen to help in identifying the positions of the
  209.     active modules.
  210.  
  211.          The Tutorial section of this manual contains step by step
  212.     directions for four simple patches.  Try them out, then continue to
  213.     work with the TUTOR overlay, referring all the while to the module
  214.     documentation in the latter part of this manual.  By the time you
  215.     have used each of the 32 modules in TUTOR, you will be ready to
  216.     remove TUTOR.SCR from your working directory, and to tackle the full
  217.     complement of over 150 MusicBox modules.
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.                                     4
  264.  
  265.  
  266.  
  267.     ======================================================================
  268.                                 MENU COMMANDS
  269.  
  270.          MusicBox uses two sets of menus.  The working menu that is
  271.     available on the left margin of all work pages and the file menu that
  272.     is only on page 0.
  273.  
  274.     ----------------------------------------------------------------------
  275.                            Working Menu Commands
  276.  
  277.     0-7       Change display page. With the EGA, all 8 pages are available,
  278.               with the CGA, only pages 0-3 can be used.  The highlighted
  279.               number indicates the current page number, the highlighted
  280.               arrow indicates the page that will be switched to when
  281.               mouse button #2 is pressed. Except for page 0, the module
  282.               source page, all display pges are equal, and modules may be
  283.               moved from page to page, even while running, without
  284.               restriction.
  285.  
  286.     ESC       Escape from pending command.  This command will kill any
  287.               pending (highlighted) command.  It may be used at any time.
  288.  
  289.     DEL       Delete a module.  Any module may be deleted at any time,
  290.               even when other modules are connected to it.  To use,
  291.               select DEL, then select the module to be deleted.  The
  292.               module is actually "put to sleep", rather than deleted, so
  293.               that other modules that are connected do not get confused
  294.               (the last values of the deleted module will remain
  295.               constant).  The module source icon on page 0 is marked with
  296.               "X" to indicate that this module is available to be
  297.               "reincarnated". Upon reincarnation, all values are reset to
  298.               zero, but connections from other modules, if any, will
  299.               remain intact. On page 0, DEL is used to delete files.
  300.               Select, then select a file in the Name area. The selected
  301.               file is deleted.
  302.  
  303.     SET       Write current workspace to the hidden temporary file. Used
  304.               with REDO, which restores the workspace to the last SET, and 
  305.               SWAP, which swaps the workspace to the last SET or SWAP.
  306.  
  307.     HLT       Halt modules, much as if an Alpha halt signal was given.
  308.               (See SYSTEM chapter for info on the Alpha module.)  Select 
  309.               again to continue. 
  310.  
  311.     OFF       Issue "All Notes Off" on all MIDI channels.  Also puts all
  312.               channels in Omni-off/Poly-on mode.
  313.  
  314.     Measure Readout:  Display (in decimal) the current measure count.
  315.               This is reset by the Hold input of Alpha module, described
  316.               in the chapter on System modules.
  317.  
  318.     Elapsed Time:  Display (in seconds, in decimal) the elapsed time
  319.               since the last Alpha module Hold.
  320.  
  321.     Decimal Readout:  When module input values are changed with the
  322.               mouse, this readout changes to high intensity color and
  323.               becomes a decimal readout of the module input, which is
  324.               displayed at the module in hexadecimal.
  325.  
  326.  
  327.  
  328.  
  329.                                     5
  330.  
  331.  
  332.  
  333.     Note Value Readout:  When module input values are changed with the
  334.               mouse, this readout changes to high intensity color and
  335.               becomes a note readout.  It assumes C major scale
  336.               ascending, with Octave 5 = Middle C, which is MIDI value 3C
  337.               hex, 60 decimal.
  338.  
  339.     Mute Flags:  The 16 numerals set/clear a 16 bit word that is
  340.               accessible through the Mute Flag module, in the SPECIAL
  341.               box. When a numeral is highlighted, its corresponding flag
  342.               is TRUE. Although these flags can be used as general ON/OFF
  343.               logic switches, they are optimized for controlling the MIDI
  344.               Note Output module in the MIDI box.  Used as such, when the
  345.               numerals are highlighted the modules are "on", allowing the
  346.               them to pass MIDI data.  The colon separating each pair of
  347.               numerals can be used to set/clear both at once.  Default
  348.               operation is as a bank of mute switches, each time one of
  349.               the numerals is selected by the mouse, its on/off state is
  350.               reversed. Setting the Mute/Solo input of the Alpha module
  351.               will change the action to solo switches: each time a
  352.               numeral is selected, that flag is turned on, and all others
  353.               are turned off.
  354.  
  355.     ----------------------------------------------------------------------
  356.                               File Menu Commands
  357.  
  358.     QUIT      Exits MusicBox without saving the workspace. Double click.
  359.  
  360.     EXIT      Does an auto SAVE, then exits.  Double click.
  361.  
  362.     MPAB      Flags to load Module, Program, or Sequencer A or B data.
  363.               Although the Save command only makes one file, the file is
  364.               composed of the four sections given above.  All sections
  365.               are always saved, but you can load selectivly by selecting
  366.               the flags.  Only the sections that correspond to a
  367.               highlighted letter will be loaded.  Default is all four
  368.               flags ON and highlighted, entire workspace is loaded.
  369.  
  370.     SWAP      Swap current workspace with temporary file.
  371.  
  372.     REDO      Restore the current workspace with the temporary file.
  373.               Current workspace is lost, temporary file is unchanged.
  374.  
  375.               Both SWAP and REDO are used in conjunction with the SET 
  376.               command, which saves the current workspace to the (invisible) 
  377.               temporary file.  Upon startup, MusicBox will do an auto SET, 
  378.               so the first REDO, prior to a SET or SWAP will clear the 
  379.               workspace.  If SWAP was used, a second SWAP will restore to
  380.               the original workspace.  Both require double click.
  381.  
  382.     SAVE      Save the entire workspace, using the current filename and
  383.               the current directory.  If a there is a name conflict, the
  384.               old file will be renamed to PREVIOUS.  The old PREVIOUS, 
  385.               if it exists, is overwritten.  Requires double click.
  386.  
  387.     TEMP      This is the current filename.  It is changed by selecting
  388.               the area with the mouse, then writing the new name with
  389.               the console keyboard.  Requires double click.
  390.  
  391.  
  392.  
  393.  
  394.  
  395.                                     6
  396.  
  397.  
  398.  
  399.     Path area changes directory and/or disk drive.  Select with the
  400.               mouse, then use the console keyboard to type in a letter to
  401.               change drive, a backlash and name to change directory, or
  402.               a full pathname to change both.
  403.  
  404.     Name area is a directory of the MB files in the selected directory.
  405.               Selecting any name with the mouse will load that file
  406.               into the workspace.  The grey number is the remaining disk
  407.               space expressed in MB files.  When 0, SAVE is disabled.
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.                                     7
  462.  
  463.  
  464.  
  465.     ======================================================================
  466.                              GENERAL INFORMATION
  467.  
  468.     Mouse Control:
  469.  
  470.          All commands are initiated by positioning the mouse cursor over
  471.     the area of interest, and pressing the LEFT mouse button.  The RIGHT
  472.     mouse button is used only to swap display pages.
  473.  
  474.     Creating Modules:
  475.  
  476.          Select a module to be created by placing the mouse cursor over
  477.     the white label on the page 0 source screen.  When the left mouse
  478.     button is pressed and released the module will appear.  Pressing the
  479.     button again causes it to disappear, to allow the modules to be
  480.     examined without committing to create them.  With the module "on",
  481.     switch to any page other than page 0, position the module as desired,
  482.     and press the left button.  The module will be deposited, and is
  483.     automatically activated.
  484.  
  485.     Moving Modules:
  486.  
  487.          Place the cursor over the white label of the module to be moved.
  488.     Press and release the left button to "pick up" the module.  Drag the
  489.     module to the new position, either on the current page or on another
  490.     page (changing pages while dragging the module is permissible), press
  491.     and release left button to deposit.
  492.  
  493.     Color Conventions:
  494.  
  495.          Each module is represented on page 0 by its white label icon and
  496.     the current module number.  Up to 16 copies of a module may be
  497.     created.  Modules are actually representations of assembly language
  498.     functions which take any number of input parameters, and return only
  499.     one output value.  Thus, modules have a variable number of inputs,
  500.     but only one (or none) outputs.  Various parts of the modules are
  501.     color coded:
  502.  
  503.          White:  Label and handle.  Use the label to pick up a module, to
  504.                move it to a new position.
  505.  
  506.          Grey:  Module calculation priority.  Sometimes the order in
  507.               which the modules are calculated is important.  For
  508.               example, the MIDI output module should be the last module
  509.               calculated for a given voice, or a double note may be
  510.               heard.  Priority can be swapped by selecting the gray
  511.               priority label (it will highlight to bright white), then
  512.               selecting the priority label of any other module.
  513.  
  514.          Cyan:  Module output. Selecting the cyan output label will flag
  515.               the module's output to be the next selected input.
  516.               Selecting the output the a second time (double-clicking) 
  517.               will highlight all inputs on all work pages that are 
  518.               presently connected to that output.
  519.  
  520.          Blue:  Module input.  Input can be of two kinds, direct values
  521.               or output from other modules.  If an input is selected
  522.               while a module output is active (the output label will be
  523.               highlighted), the input becomes connected to the flagged
  524.               module's output.  The input will label itself with the
  525.  
  526.  
  527.                                     8
  528.  
  529.  
  530.  
  531.               output module's label icon, and turn green to indicate that
  532.               input is now from that module. If input is selected when
  533.               there is no active module output, the input will highlight
  534.               to bright blue, and left/right mouse movement will "dial
  535.               in" the input value.  Releasing the mouse button removes
  536.               the highlight, and "sets" the value.
  537.  
  538.          Yellow:  Yellow is used for information labeling, and is not
  539.               affected by the mouse.
  540.  
  541.          Red:  Also used only for information.  Red is used like a panel
  542.               light, usually to indicate a non-zero value.
  543.  
  544.          Magenta:  User input.  Similar to blue inputs, but can only be
  545.               changed by direct input from the mouse.
  546.  
  547.     Logic State Conventions:
  548.  
  549.          Throughout MusicBox, numerical values also can be used as logical
  550.     values, or as ON/OFF states.  The convention used is:
  551.  
  552.          zero         = Logical FALSE = switch/flag/state OFF
  553.          any non-zero = Logical TRUE  = switch/flag/state ON
  554.  
  555.          Although Logical TRUE is anything other than zero, most modules
  556.     that return a logic state will return 1 for TRUE.
  557.  
  558.     Output Icon Conventions:
  559.  
  560.          The yellow icon labels to the left of the cyan output values
  561.     are either an arrow pointing left, or an equal sign. The left arrow
  562.     implies the output is a value, usually in the range of 0 - FF hex.
  563.     The equal sign implies the output is a Logical State, TRUE or FALSE.
  564.     Modules with the equal sign output icon will also have a red diamond
  565.     preceding the white label tag. This will become highlighted if the
  566.     value is TRUE, and will be low intensity if the value is FALSE, much
  567.     like a LED panel light.
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.                                     9
  594.  
  595.  
  596.  
  597.     Input Icon Conventions:
  598.  
  599.          Many module inputs perform similar functions, which makes it
  600.     possible to follow a standard set of conventions for input labeling.
  601.     There are exceptions, and there are instances of similar but not
  602.     identical input functions.  These will be identified in the
  603.     individual module documentation.  As a general but not absolute rule,
  604.     the following conventions apply:
  605.  
  606.          Value (right arrow): General value input.  This is usually the
  607.               "main" input that will be worked upon in some way by the
  608.               module.
  609.  
  610.          Clock (heart): Clock input.  The module will not calculate a new
  611.               output until the next clock cycle.  A clock cycle is
  612.               defined as a zero value (OFF) followed by any non-zero
  613.               value (ON).  Once the ON is detected, the module will wait
  614.               for an OFF value followed by another ON before performing
  615.               the next output calculation.
  616.  
  617.          Strobe "!": Do it.  Same as the Clock input, but is usually more
  618.               of a one-time action than a repeated cycle.
  619.  
  620.          Hold (check):  Reset/Hold input.  If the input is ON, the module
  621.               will ignore further Clock inputs.  Many modules will also
  622.               reset the output either to 0 or to the value at the ARROW
  623.               input.  The Hold input of the Alpha module is a global
  624.               hold, with non-zero causing all other active modules with a
  625.               Hold input to act as if they had also received the Hold.
  626.  
  627.          Offset "+": Offset to value.  The value at this input will be
  628.               added to the output.  The addition will wrap around. That
  629.               is, if the sum is greater than the FF hex value limit, it
  630.               will assume an imaginary limit of 1FF hex, with only the
  631.               two least significant digits showing.  This means that the
  632.               values 80 hex to FF hex can be seen as negative offsets.
  633.               FF hex is equivalent to -1, FE hex to -2, and so on.
  634.  
  635.          Number "#": Often used as a "magic number" value.
  636.  
  637.          Count "c": Number of counts per cycle.  Usually used to divide
  638.               down an internal or external clock.
  639.  
  640.          AND "&":  Logical AND.  The output will be ANDed with the value
  641.               at this input.  Some modules will AND another input rather
  642.               than the output.
  643.  
  644.          Scale "%": Scale the output with this value.  This is a
  645.               hexadecimal percentage, with 80% hex equal to 50% decimal.
  646.               40% hex is equal to 25% decimal, and C0% hex is equal to
  647.               75% decimal.
  648.  
  649.          Write protect (omega): Used in modules that write to memory.
  650.               Zero inhibits writing, usually acting as a Hold for the
  651.               module. Set to non-zero to enable memory writes.
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.                                    10
  660.  
  661.  
  662.  
  663.     ======================================================================
  664.                     HEXADECIMAL NUMBERS AND BOOLEAN LOGIC
  665.  
  666.          Module numerical values are expressed in hexadecimal.  Although
  667.     this system appears foreign to the uninitiated, eventually it becomes
  668.     far more helpful than if decimal numbers were used.  This is because
  669.     many module functions employ Boolean logic functions, which are easy
  670.     to visualize in hexadecimal, but very difficult to visualize in
  671.     decimal for values greater than 8.  The modules employ Boolean logic
  672.     because it works so well in the context of musical applications.
  673.  
  674.          It is a well known observation that some of the best computer
  675.     programmers are musicians.  One reason for this may be that the
  676.     language of music shares many characters with the language of
  677.     computers.  The binary number system is central to silicon based
  678.     computers.  It also happens to be at the heart of music notation.
  679.     Quarter notes are double eighth notes, half of whole notes.  Octaves
  680.     are exact doublings of pitch, and so on.  The hexadecimal numbering
  681.     system is a power-of-two system, as such it is naturally suited to
  682.     work with the computer's binary organization.  As such, it is also
  683.     naturally suited to work with musical organization.
  684.  
  685.          Hexadecimal ("hex") is the same as decimal but with six more
  686.     base digits. The hex digits are: 0 1 2 3 4 5 6 7 8 9 A B C D E F. In
  687.     hexadecimal A is the same as decimal 10, B as 11, C as 12, D as 13, E
  688.     as 14, and F as 15.  Hex 10 is equivalent to decimal 16.  The
  689.     advantage of hexadecimal in dealing with binary numbers is that the
  690.     hex digits 0 to F can be expressed with exactly four binary digits.
  691.     As will be seen later, this is what makes Boolean logic easier to
  692.     visualize in hex than in decimal.
  693.  
  694.          Decimal  Hex  Binary
  695.  
  696.               0    0    0000
  697.               1    1    0001
  698.               2    2    0010
  699.               3    3    0011
  700.               4    4    0100
  701.               5    5    0101
  702.               6    6    0110
  703.               7    7    0111
  704.               8    8    1000
  705.               9    9    1001
  706.               10   A    1010
  707.               11   B    1011
  708.               12   C    1100
  709.               13   D    1101
  710.               14   E    1110
  711.               15   F    1111
  712.  
  713.  
  714.          Boolean logic is a logical arithmetic that is very useful in
  715.     describing logical process of almost any type, from digital circuits
  716.     to legal documents.  Boolean digits are the logical states TRUE and
  717.     FALSE.  In MusicBox, as in most computer applications, the binary
  718.     digit ("bit") zero represents logical FALSE, and one represents
  719.     logical TRUE.  Boolean logic can be applied to a number in a bit-wise
  720.     fashon, or it can be applied to the number as a whole.  When applied
  721.     to the whole number, zero is again logical FALSE, and any non-zero
  722.     value is logical TRUE.
  723.  
  724.  
  725.                                    11
  726.  
  727.  
  728.  
  729.  
  730.          The four principal Boolean operators are OR, AND, XOR NOT.
  731.  
  732.          Boolean NOT is a unary (requires only one argument) function
  733.     that simply reverses the truth of the argument.
  734.  
  735.          NOT 0     NOT 1
  736.          -----     -----
  737.              1         0
  738.  
  739.          NOT 1011 binary       NOT B hex     NOT 11 decimal
  740.          ---------------       ---------     --------------
  741.              0100 binary           4 hex          4 decimal
  742.  
  743.  
  744.          NOT 1011 0101 binary  NOT B5 hex    NOT 181 decimal
  745.          --------------------  ----------    ---------------
  746.              0100 1010 binary      4A hex         74 decimal
  747.  
  748.          Note that the binary number 10110101 can be mapped into
  749.     hexadecimal as 1011 0101 = B5.  The NOT of 1011 0101 is 0100 1010,
  750.     which can be directly mapped to 0100 = 4, 1010 = A, therefor 4A.  No
  751.     such direct mapping works for decimal.
  752.  
  753.          Boolean OR is a binary (requires two arguments) function that
  754.     states if either of two values are TRUE, the result is TRUE.
  755.  
  756.               0         1         1         0
  757.          OR   0    OR   1    OR   0    OR   1
  758.          ------    ------    ------    ------
  759.               0         1         1         1
  760.  
  761.              1011       B         1011 0101         B5
  762.          OR  0101  OR   5    OR   1000 0110    OR   86
  763.          --------  ------    --------------    -------
  764.              1111       F         1011 0111         B7
  765.  
  766.  
  767.          Boolean AND is a binary function that states if either of two
  768.     values are FALSE, the result is FALSE.
  769.  
  770.               0         1         1         0
  771.          AND  0    AND  1    AND  0    AND  1
  772.          ------    ------    ------    ------
  773.               0         1         0         0
  774.  
  775.              1011       B         1011 0101         B5
  776.          AND 0101  AND  5    AND  1000 0110    AND  86
  777.          --------  ------    --------------    -------
  778.              0001       1         1000 0100         84
  779.  
  780.          Note that the AND function can be used as logical masking tape.
  781.     The 0's in the bottom digit are the tape, forcing the result to 0,
  782.     regardless of the truth of the top digit; while the 1's in the bottom
  783.     digit acts as the unmasked area, passing through the top digit
  784.     unchanged.  Because of this, one of the arguments in the AND function
  785.     (it does not matter which one) is often referred to as a mask, and
  786.     the AND function itself is sometimes called a masking function.
  787.  
  788.  
  789.  
  790.  
  791.                                    12
  792.  
  793.  
  794.  
  795.          Boolean XOR (exclusive OR) is a binary function that states if
  796.     the truth of the two arguments are identical, the result is FALSE; if
  797.     the arguments are different, the result is TRUE.
  798.  
  799.               0         1         1         0
  800.          XOR  0    XOR  1    XOR  0    XOR  1
  801.          ------    ------    ------    ------
  802.               0         0         1         1
  803.  
  804.              1011       B         1011 0101         B5
  805.          XOR 0101  XOR  5    XOR  1000 0110    XOR  86
  806.          --------  ------    --------------    -------
  807.              1110       E         0011 0011         33
  808.  
  809.          Note that any argument XOR'd with itself is 0, any argument
  810.     XOR'd with 0 passes through unchanged, and any argument XOR'd with 1
  811.     passes through inverted.
  812.  
  813.              1011      1011      1011
  814.          XOR 1011  XOR 0000  XOR 1111
  815.          --------  --------  --------
  816.              0000      1011      0100
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.                                    13
  858.  
  859.  
  860.  
  861.     ======================================================================
  862.                                 TUTORIAL
  863.     ----------------------------------------------------------------------
  864.          This first attempt isn't much.  It just runs a random tone
  865.     through the PC speaker.
  866.  
  867.          1.  Place the mouse cursor over the note icon in the first row
  868.     and the first column (position 1,1) of the CLOCK box, which is the
  869.     middle box on the left of the screen.  Depress and release the LEFT
  870.     mouse button.  This will "pick up" the Note Clock module.  A copy of
  871.     the module will replace the blue square as the mouse cursor.
  872.  
  873.          2.  Press the RIGHT mouse button to go to a work page.  The
  874.     screen will appear blank except for the menu along the left side of
  875.     the screen.
  876.  
  877.          3.  Move the Note Clock module with the mouse to a blank spot
  878.     somewhere toward the left of the screen.  Press the LEFT mouse button
  879.     to deposit and activate the module.
  880.  
  881.          4.  Press the RIGHT mouse button to return to Page 0.  Move the
  882.     cursor to the box labeled  RANDOM, toward the center of the screen.
  883.     Pick up the Random Number Generator module, position 1,1 of RANDOM,
  884.     and deposit it on the workpage as before.
  885.  
  886.          5.  Dial in an offset to the Random module of 30 hex, 48
  887.     decimal.  To do this, place the square mouse cursor over the blue
  888.     number next to the yellow "+" input label at the bottom of the Random
  889.     module.  Press the LEFT mouse cursor and release.  The cursor will
  890.     disappear, and the blue numbers will be highlighted.
  891.  
  892.          6.  Now moving the mouse left or right will change the number.
  893.     While you are setting the value, look at the menu area on the left
  894.     of the screen.  A highlighted blue set of numbers, representing the
  895.     decimal value you are dialing in will appear about halfway down the
  896.     menu column, and a Note/Octave readout will appear just below that.
  897.  
  898.          7.  Move the mouse to the right until the number at the module
  899.     reads 30. The decimal readout on the left of the screen will read 48.
  900.     Press the LEFT mouse button. The input number will freeze at the last
  901.     value, and will return to its normal dark blue, and the square blue
  902.     mouse cursor will reappear.
  903.  
  904.          8. Dial in a limit to the Random module of 20 hex.  The limit
  905.     input is the up arrow just above the offset input.
  906.  
  907.          9. Connect the Note Clock module output to the Random module's
  908.     clock input.  To do this, first place the cursor over the cyan
  909.     (turquoise) output value near the top of the Note Clock.  Press and
  910.     release the LEFT mouse button. The numbers will hilight, indicating
  911.     that the output of the Note Clock module is ready to be patched into
  912.     the input of another module.
  913.  
  914.          10.  Move the cursor to the Random module.  Place the
  915.     cursor over the blue number next to the yellow heart.  Press and
  916.     release the LEFT mouse button.  The input will turn green and take on
  917.     the label of the Note Clock module (a note icon and the number 0),
  918.     and at the same time the highlighted output of the Note Clock module
  919.     will return to normal.  The output of the Note Clock module is now
  920.  
  921.  
  922.  
  923.                                    14
  924.  
  925.  
  926.  
  927.     patched into the clock input of the Random module.  The Random module
  928.     will now be producing a new output between 30 hex (the offset) and 50
  929.     hex (offset+limit) at every tick of the Clock module.
  930.  
  931.          11.  Pick up the PC Speaker Output module, located in the SYSTEM
  932.     box, row 2, column 3 (SYSTEM 2,3).  Deposit it somewhere near the
  933.     Random module.
  934.  
  935.          12.  Connect the Note Clock output to the PC Speaker clock
  936.     input, as before.  You should hear a steady beat of quarter notes at
  937.     a tempo of about 120.
  938.  
  939.          13.  Connect the Random output to the PC Speaker value (arrow)
  940.     input.  Now you should hear random tones.
  941.  
  942.          14.  Try altering the note value input and the sustain input of
  943.     the Clock module, which are labeled with a note and an "s",
  944.     respectively.  Also try changing the limit and offset inputs to the
  945.     Random module.  You can turn the thing off by dialing a number into
  946.     the hold (check) input of the Note Clock, or by the menu HLT command.
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.                                    15
  990.  
  991.  
  992.  
  993.     ----------------------------------------------------------------------
  994.          This next patch assumes a MIDI synthesizer connected to your
  995.     computer and MPU.  It further assumes the synthesizer is set to
  996.     receive on MIDI channel 1.  The patch will play an arpeggiated C
  997.     Major chord, still random but slightly more controlled.
  998.  
  999.          1.  If the other patch is still on, get rid of it by selecting
  1000.     REDO (twice) from the Files Menu on page 0.
  1001.  
  1002.          2.  Fetch a Note Clock module (CLOCK 1,1), and Random module
  1003.     (RANDOM 1,1), as before.  Also as before, connect the Note Clock
  1004.     output to the Random clock (heart) input.
  1005.  
  1006.          3.  Set the limit (up-arrow) input to the Random module to 4.
  1007.     It should now be generating random numbers between 0 and 3.
  1008.  
  1009.          4.  Fetch a Switch/Sequencer module (SWITCH 1,3).  Into the
  1010.     inputs labeled "1", "2", and "3", dial the values 4, 7, and C hex.
  1011.     This gives the intervals in semitones of 0, 4, 7, and 12: a major
  1012.     triad.
  1013.  
  1014.          5.  Connect the Random output to the address "@" input of the
  1015.     Switch/Sequencer module.  This effectively translates the random
  1016.     numbers 0-3 to the interval numbers 0, 4, 7, and C hex.
  1017.  
  1018.          6.  Fetch a MIDI Note Output module (MIDI 1,1).  Activate it by
  1019.     setting the mute input (second blue input from top, looks something
  1020.     like "/o/") to 1.  Dial 30 hex (octave C4, 1 8ve below middle C) into
  1021.     one of the transpose "t" inputs.
  1022.  
  1023.          7.  Connect the Switch/Sequencer output to the first note value
  1024.     "A" input of the MIDI module, then connect the Note Clock output to
  1025.     the first note velocity "a" input.  At this point you should be
  1026.     getting a sound, but it will probably be very faint.  Even if there
  1027.     is no sound yet, go on to the next step.
  1028.  
  1029.          8.  Set the sustain "s" input of the Note Clock module to 80
  1030.     hex.  This gives a half on, half off cycle.  Set the velocity value
  1031.     "v" input to the Note Clock module to about 40 hex.  The sound should
  1032.     be ok now.  If not try a few different patches on your synth.
  1033.  
  1034.          9.  If you are not getting sound from your synth at this point,
  1035.     first check that you have made the MusicBox connections according to
  1036.     the steps given here.  If you are sure they are correct, check that
  1037.     your synth is functioning properly, and that it is properly connected
  1038.     to the computer through the MPU.  If all else fails, try running the
  1039.     install program again.  You might have forgotten to install it with
  1040.     MIDI output enabled.
  1041.  
  1042.          10.  Assuming you have sound, now make it a little more
  1043.     interesting.  First, speed up the clock from quarter notes to eighth
  1044.     notes by changing the note value (note label) input of the Note Clock
  1045.     from 3 to 4.
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.                                    16
  1056.  
  1057.  
  1058.  
  1059.  
  1060.          11.  Fetch the Dither Switch module (RANDOM 2,2).  Connect the
  1061.     Note Clock module output to the clock (heart) input.  Set the dither
  1062.     value "%" input to 40 hex, which is equivalent to 25%.  Set the value
  1063.     input to 18 hex, 24 decimal.  Now connect the Switch/Sequencer module
  1064.     output to the offset "+" input.  You can't hear it yet, but the
  1065.     Dither module is bumping the arpeggiated triad up two octaves 25% of
  1066.     the time.
  1067.  
  1068.          12.  Connect the output of the Dither module into the "A" input
  1069.     of the MIDI Note module.  This replaces the patch that was from the
  1070.     Switch/Sequencer.  It probably will sound awful.
  1071.  
  1072.          13.  What is happening, is the module calculation priority is
  1073.     out of order.  The MIDI Note Output module is seeing the Dither
  1074.     module output a full cycle AFTER it has already seen the Note Clock
  1075.     output. This causes it to play the note at the old pitch for the out
  1076.     of sync cycle, which gives a 64th note glitch.
  1077.  
  1078.         14.  Fix it by swapping priority with the Dither module.  Select
  1079.     the priority number (the grey number between the white label icon and
  1080.     the cyan output number) of the Dither module -- it will highlight to
  1081.     bright white, then select the priority of the MIDI module.  The
  1082.     priority numbers will swap, and the glitch will go away.  In general,
  1083.     you will want to have the MIDI Note Output module as the last in the
  1084.     calculation chain for a particular voice.
  1085.  
  1086.          16.  Set up to mute the module from the menu.  Fetch the Mute
  1087.     Flag module (SPECIAL 3,3).  Connect it to the mute input ("/o/") of
  1088.     the MIDI Note Output module.  The sound will stop.  Set the mute mask
  1089.     "&" input of the MIDI Note module to 1, and set the mask input of the
  1090.     Mute module to FF hex.  Now selecting the yellow mute switch "0" in
  1091.     the lower left of the menu will turn the voice on and off.
  1092.  
  1093.          17.  Save the patch by selecting SAVE from the page 0 File Menu.
  1094.     The file will be named TEMP, which is the default filename, and it
  1095.     will immediately show up in the file area below the File Menu.
  1096.  
  1097.          18.  If you saved the patch with the sound on, you can bring it
  1098.     up and running from DOS by running MB with the filename.  From the
  1099.     DOS command line, typing "MB TEMP".  MusicBox will come on, then
  1100.     load the file and play it.
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.                                    17
  1122.  
  1123.  
  1124.  
  1125.     ----------------------------------------------------------------------
  1126.          This next patch assumes you have two MIDI synthesizers, or one
  1127.     synthesizer with two voices.  One voice is set to MIDI channel 1, the
  1128.     other to MIDI channel 2.  It will be a variation of the previous
  1129.     patch with the 2nd voice a delayed version of the first.  If you have
  1130.     a stereo setup, send one voice to the left speaker and one to the right.
  1131.  
  1132.          1.  Load the previous patch by selecting (twice) the name
  1133.     ("TEMP", unless you changed it) from the File Load area below the
  1134.     Page 0 File Menu.
  1135.  
  1136.          2.  Fetch the Echo module (SAMPLE 1,1).  Connect the Note Clock
  1137.     module output to the clock input.  Connect the Dither module output
  1138.     to the value (arrow) input.  The output should be the same as the
  1139.     Dither module output.
  1140.  
  1141.          3.  Fetch another MIDI Note Output module (MIDI 1,1).  Set the
  1142.     MIDI channel "c" input to 1 (if you have an instrument receiving on
  1143.     channel 2).  Note that MIDI channels are numbered from 1 to 16,
  1144.     whereas the funny numbers we use here are from 0 to F.
  1145.  
  1146.          4.  Set one of the transpose "t" inputs to 30 hex.  Set the mute
  1147.     mask "&" input to 2.  Connect the Mute module output to the mute
  1148.     "/o/" input.  Connect the Echo module output to the 1st note value
  1149.     "A" input.  Connect the Note Clock output to the 1st note velocity
  1150.     "a" input.
  1151.  
  1152.         5.  Set the Menu Mute switches 0 and 1 to ON (highlighted).
  1153.     There should be essentially the same sound coming from both voices.
  1154.     You can switch back and forth between the voices by turning one Menu
  1155.     Mute off, then selecting the colon between the two numbers.  One will
  1156.     go on while the other goes off.  When you get tired of this, set both
  1157.     voices ON.
  1158.  
  1159.          6.  Set the delay ">>" input of the Echo module to 5.  You
  1160.     should now be hearing an echoed pattern, most noticeable on the
  1161.     dithered octave kicks.
  1162.  
  1163.          7.  Fetch two MIDI Control Output modules (MIDI 2,1).  Set the
  1164.     MIDI channel "c" input of the 2nd module to 1.  Set the hold (check)
  1165.     input of both modules to 0.  You probably will hear a change in
  1166.     sound, as the module sends its default parameters out.
  1167.  
  1168.          8.  Select two Step Pushbutton modules (ONESHOT 3,3).  Connect
  1169.     the output of each into the corresponding program change "Pt" input
  1170.     of the MIDI Control modules.  Change patches on your synth by
  1171.     stepping the switches up and down.
  1172.  
  1173.         9.  Swap priority with the MIDI Note Output modules and the
  1174.     Step Pushbutton modules, to keep the MIDI output at the end of the
  1175.     calculation chain.
  1176.  
  1177.          10.  Save the patch.  First select the WHITE filename (should be
  1178.     "TEMP", unless you saved the previous patch under another name) in
  1179.     the File Menu area.  The area will go blank.  Type in the name of
  1180.     your choice, and press the Enter key.  With the mouse, select SAVE
  1181.     (twice).  The file now should appear in yellow in the Load area.
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.                                    18
  1188.  
  1189.  
  1190.  
  1191.     ---------------------------------------------------------------------
  1192.          And now for something completely different.  This is a simple
  1193.     little polyrhythm patch, right out of Schillinger.  Again, it assumes
  1194.     you have two MIDI synthesizers, or one synthesizer with two voices,
  1195.     with one set to MIDI channel 1, the other to MIDI channel 2.
  1196.  
  1197.          1.  If the workspace is not already clear, clear it with REDO.  
  1198.     Fetch the Mu Clock module (CLOCK 3,1).  Set the count "c" input to 6.
  1199.  
  1200.          2.  Fetch two Beat Pattern Generator modules (TRIGGER 2,1).
  1201.     Connect the Mu Clock output to the clock inputs.  Set the cycle "c"
  1202.     inputs of the first to 3, 5, 8, and C hex.  Set the second to 4, 6,
  1203.     7, and C hex.
  1204.  
  1205.          3.  Fetch the Mute Flag module (SPECIAL 3,3) and then fetch two
  1206.     MIDI Note Output modules (MIDI 1,1).  Set the channel "c" input of
  1207.     the 2nd Note module to 1.
  1208.  
  1209.          4.  Connect the Mute Flag module to the mute input ("/o/") of
  1210.     the MIDI Note Output module.  Set the mute mask "&" input of the MIDI
  1211.     Note modules to 1 and 2, respectively and set the mask input of the
  1212.     Mute module to FF hex.
  1213.  
  1214.          5.  Set the 1st note value "A" inputs of both MIDI modules to
  1215.     about 18 hex.  Set the velocity offsets "v" to about 60 hex.  Connect
  1216.     the Beat Pattern modules to the note velocity "a" inputs of the
  1217.     respective MIDI modules.
  1218.  
  1219.          6.  Turn on the sound with the menu mute flags, 0 & 1.
  1220.  
  1221.          7.  Play with it.
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.                                    19
  1254.  
  1255.  
  1256.  
  1257.     ======================================================================
  1258.                                 SWITCH MODULES
  1259.     ----------------------------------------------------------------------
  1260.     16-input Switch/Sequencer                               SWITCH 1,1   w
  1261.  
  1262.     Purpose: Can act as an static value sequencer or an input switch,
  1263.        or both in combination.
  1264.  
  1265.     General:  One of 16 inputs, selected by the Address input, is
  1266.        sent to the output.  If inputs are set to values, this will
  1267.        act as a sequencer, if inputs are connected to other module
  1268.        outputs, it will act as a switch.  The currently selected
  1269.        input is indicated by a highlighted red label reminiscent of
  1270.        the old modular sequencer stage lights.
  1271.  
  1272.     Output:  Unchanged copy of the selected input.
  1273.  
  1274.     Address "@" input:  Selects one of the 16 inputs that is to be
  1275.        copied to the output. Numbers greater than 15 are rolled over,
  1276.        so that 16 selects the first  input, 17 selects the second, 33
  1277.        also selects the second, etc.
  1278.  
  1279.     Stage "0-F" inputs:  Value inputs, may be connected to any source.
  1280.  
  1281.     ----------------------------------------------------------------------
  1282.     8-input Switch/Sequencer                               SWITCH 1,2   x
  1283.     4-input Switch/Sequencer                               SWITCH 1,3   y
  1284.     2-input Switch/Sequencer                               SWITCH 1,4   z
  1285.  
  1286.     General:  Identical to 16-input version, but has fewer inputs.
  1287.  
  1288.     ----------------------------------------------------------------------
  1289.     2-input Switch                                         SWITCH 2,1 \D6
  1290.     2-input Switch with Offset                             SWITCH 2,2 \B7
  1291.  
  1292.     Purpose:  Switch between two inputs.
  1293.  
  1294.     Output:  An unmodified copy of the selected input.
  1295.  
  1296.     Switch "1/2" input:  Non-zero switches output source from input "1"
  1297.        to  input "2".
  1298.  
  1299.     Inputs "1" and "2":  Any value.
  1300.  
  1301.     Input "+":  Offset value to be added to output.
  1302.  
  1303.     ----------------------------------------------------------------------
  1304.     Toggle Switch                                          SWITCH 2,3 \C2
  1305.  
  1306.     Output:  An unmodified copy of the Value input, or 0.  The red
  1307.        diamond in the label will highlight if the output of the module is
  1308.        non-zero.
  1309.  
  1310.     Switch "<->" input: Non-zero will cause the Value input to pass
  1311.        through to the output; zero will set the output to zero,
  1312.        regardless of the Value input.
  1313.  
  1314.     Value "-->" input:  Any value.
  1315.  
  1316.  
  1317.  
  1318.  
  1319.                                    20
  1320.  
  1321.  
  1322.  
  1323.     ---------------------------------------------------------------------
  1324.     Toggle Switch with AND Gate                            SWITCH 2,4 \D1
  1325.  
  1326.     Output:  An unmodified copy of the Value input, or 0.  The red
  1327.        diamond in the label will highlight if the output of the module is
  1328.        non-zero.
  1329.  
  1330.     AND "&" inputs:  A Boolean AND function is performed with these two
  1331.        inputs.  A result of non-zero will cause the Value input to pass
  1332.        through to the output; a zero result will set the output to zero,
  1333.        regardless of the Value input.
  1334.  
  1335.     Value "-->" input:  Any value.
  1336.  
  1337.     ----------------------------------------------------------------------
  1338.     2-input Switch with AND Gate                           SWITCH 3,1   u
  1339.     2-input Switch with AND Gate and Offset                SWITCH 3,2   v
  1340.  
  1341.     Output:  An unmodified copy of the selected input.
  1342.  
  1343.     AND "&" inputs:  A Boolean AND function is performed with these two
  1344.        inputs.  A result of non-zero switches output source from input
  1345.        "a" to  input "b".
  1346.  
  1347.     Switch inputs "a" and "b":  Any value.
  1348.  
  1349.     Input "+" (2nd module only):  Offset value to be added to output.
  1350.  
  1351.     ----------------------------------------------------------------------
  1352.     Latest Change                                          SWITCH 3,3 \0C
  1353.  
  1354.     General:  Allow the latest changed input to pass through to the
  1355.        output.
  1356.  
  1357.     Output:  An unmodified copy of the last input that has changed.
  1358.  
  1359.  
  1360.     Inputs "a" - "h":  Any value.  These inputs are identical, except
  1361.        that the computer tests for a change starting with the first "a"
  1362.        input, and as soon as a changed input is detected, that value is
  1363.        sent to the output, and no further processing is done during that
  1364.        calculation cycle.  Thus, if all eight inputs changed at the same
  1365.        time, each output would be sent out over the next eight
  1366.        calculation cycles, starting with "a" and ending with "h".
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.                                    21
  1386.  
  1387.  
  1388.  
  1389.     ======================================================================
  1390.                                 INDEX MODULES
  1391.  
  1392.  
  1393.     Index modules count.  They differ in the sophistication in
  1394.     controlling how the counting is to be done.  While obvious uses of
  1395.     these modules is to address sequencers and switches, they are also
  1396.     useful for other things, such as timing or pattern generation.
  1397.  
  1398.     ----------------------------------------------------------------------
  1399.     I-index                                                 INDEX 1,1   I
  1400.  
  1401.     Purpose:  Simple increment/decrement by 1 counter.
  1402.  
  1403.     Output:   Count of 0-FF hex.
  1404.  
  1405.     Clock (heart) input:  Any non-zero after zero causes the current
  1406.        output value to be incremented (or decremented, if the Up/Down
  1407.        input is non-zero).
  1408.  
  1409.     Hold (check) input:  Non-zero sets output to zero, count starts when
  1410.        returned to zero.
  1411.  
  1412.     Up/Down "+/-" input:  Increment if zero, decrement if non-zero.
  1413.  
  1414.     ----------------------------------------------------------------------
  1415.     J-index                                                 INDEX 1,2   J
  1416.  
  1417.     Purpose:  Increment by N counter.
  1418.  
  1419.     Output:  Count of 0-FF hex.
  1420.  
  1421.     Clock (heart) input:  Any non-zero after zero causes the Offset input
  1422.       to be added to the current output value (or subtracted from it, if
  1423.       the Up/Down input is non-zero).
  1424.  
  1425.     Hold (check) input:  Non-zero sets output to zero, count starts when
  1426.        returned to zero.
  1427.  
  1428.     Offset "+" input:  Added to the current output each clock cycle.
  1429.        Thus, if it is 1, the module will increment by 1; if FF hex, it
  1430.        will decrement by 1, if 2 it will increment by 2, if FE hex it
  1431.        will decrement by 2, etc.
  1432.  
  1433.     ----------------------------------------------------------------------
  1434.     K-index                                                 INDEX 2,1   K
  1435.  
  1436.     Purpose:  Increment by N counter with upper limit.  Advantage over J-
  1437.        index is that an upper limit can be set (I-index and J-index
  1438.        rollover at FF hex with no option to set an upper limit).
  1439.  
  1440.     Output:  Count of 0 to upper limit (or upper limit to 0).
  1441.  
  1442.     Clock (heart) input:  Any non-zero after zero causes the Offset input
  1443.        to be added to the current output value (or subtracted from it, if
  1444.        the Up/Down input is non-zero).
  1445.  
  1446.     Hold (check) input:  Non-zero sets output to zero, count starts when
  1447.        returned to zero.
  1448.  
  1449.  
  1450.  
  1451.                                    22
  1452.  
  1453.  
  1454.  
  1455.     Offset "+" input:  Added/subtracted to the current output each clock
  1456.        cycle.
  1457.  
  1458.     Up/Down "+/-" input:  Add Offset if zero, subtract if non-zero.
  1459.  
  1460.     Count "#" input:  Sets upper limit.  This number is inclusive (if set
  1461.        to 8, the count will reach 8 and not stop at 7).
  1462.  
  1463.     ----------------------------------------------------------------------
  1464.     L-index                                                 INDEX 2,2   L
  1465.  
  1466.     Purpose:  Increment by N counter with both an upper and a lower limit.
  1467.  
  1468.     Output:  Count of lower limit to upper limit (or upper to lower).
  1469.  
  1470.     Clock (heart) input:  Any non-zero after zero causes the Offset input
  1471.        to be added to the current output value (or subtracted from it, if
  1472.        the Up/Down input is non-zero).
  1473.  
  1474.     Hold (check) input:  Non-zero sets output to zero, count starts when
  1475.        returned to zero.
  1476.  
  1477.     Offset "+" input:  Added/subtracted to the current output each clock
  1478.        cycle.
  1479.  
  1480.     Up/Down "+/-" input:  Add Offset if zero, subtract if non-zero.
  1481.  
  1482.     MAX (up arrow) input:  Sets upper limit.  This number is inclusive
  1483.        (if set to 8, the count will reach 8 and not stop at 7).
  1484.  
  1485.     MIN (down arrow) input:  Sets lower limit.  Inclusive.
  1486.  
  1487.     ----------------------------------------------------------------------
  1488.     M-index                                                 INDEX 3,1   M
  1489.  
  1490.     Purpose:  Increment by N counter, useful as a pattern (melody)
  1491.        generator, with both an upper and a lower limit, with automatic
  1492.        reset to 3/4 of the difference between the upper and lower limits
  1493.        when counting up and to 1/4 the difference when counting down.
  1494.  
  1495.     General:  This modules looks like the I-index, but it is different in
  1496.        three important ways.  The first is given above; the second is
  1497.        that the upper limit is actually one more than that what is set.
  1498.        This has consequences when the upper limit is set to FF hex. The
  1499.        third difference is that changing the Up/Down input will cause a
  1500.        change in value at the next clock instead of repeating the current
  1501.        count value at the next clock.
  1502.  
  1503.     Output:  Count of lower limit to upper limit-1 (or upper-1 to lower).
  1504.  
  1505.     Clock (heart) input:  Any non-zero after zero causes the Offset input
  1506.        to be added to the current output value (or subtracted from it, if
  1507.        the Up/Down input is non-zero).
  1508.  
  1509.     Hold (check) input:  Non-zero sets output to zero, count starts when
  1510.        returned to zero.
  1511.  
  1512.     Offset "+" input:  Added/subtracted to the current output each clock
  1513.        cycle.
  1514.  
  1515.  
  1516.  
  1517.                                    23
  1518.  
  1519.  
  1520.  
  1521.     Up/Down "+/-" input:  Add Offset if zero, subtract if non-zero.
  1522.  
  1523.     MAX (up arrow) input:  Sets upper limit.  This number is inclusive
  1524.        plus one (if set to 8, the count will stop at 9).
  1525.  
  1526.     MIN (down arrow) input:   Sets lower limit.  Inclusive.
  1527.  
  1528.     ----------------------------------------------------------------------
  1529.     N-index                                                 INDEX 3,2   N
  1530.  
  1531.     Purpose:  Increment/decrement by 1 counter with an expanded range of
  1532.     16 bits, (0 - 65535 decimal, 0 - FFFF hex), rather than the usual 8
  1533.     bit range of 0 - FF hex.
  1534.  
  1535.     Output:   Count value shifted right by shift input.
  1536.  
  1537.     Clock (heart) input:  Any non-zero after zero causes the current
  1538.        output value to be incremented.
  1539.  
  1540.     Hold (check) input:  Non-zero sets output to zero, count starts when
  1541.        returned to zero.
  1542.  
  1543.     Address "@" input:  Upon receiving a Reset strobe, the module will
  1544.        reset the low 8 bits of the output to this value.
  1545.  
  1546.     Page (paragraph-symbol) input:  Upon receiving a Reset strobe, the
  1547.        module will reset the high 8 bits of the output to this value.
  1548.        Some sequencers can address up to 65K. These use the Address value
  1549.        as a starting low order address, and the Page value as a starting
  1550.        high order address.  It can also be thought of as 256 runs (Page)
  1551.        of 256 bytes each (Address).
  1552.  
  1553.     Reset strobe "!" input:  Resets the output to the values in the
  1554.        Address and Page inputs. This input is active even when the Hold
  1555.        input is non-zero.
  1556.  
  1557.     Shift ">>" input:  Number of shifts to perform at the output.  Each
  1558.        left shift is the same as a division by 2.  A shift value of 8
  1559.        will return the Page count.
  1560.  
  1561.     ----------------------------------------------------------------------
  1562.     O-index                                                 INDEX 3,3   O
  1563.  
  1564.     Purpose: Simple increment counter with mask output.
  1565.  
  1566.     Output:  Count of 0-FF hex, logically ANDed with Mask input.
  1567.  
  1568.     Clock (heart) input: Any non-zero after zero causes the current
  1569.        output value to be incremented.
  1570.  
  1571.     Hold (check) input:  Non-zero sets output to zero, count starts when
  1572.        returned to zero.
  1573.  
  1574.     Mask "&" input:  Logically ANDed with index count, prior to output.
  1575.  
  1576.  
  1577.  
  1578.  
  1579.  
  1580.  
  1581.  
  1582.  
  1583.                                    24
  1584.  
  1585.  
  1586.  
  1587.     ======================================================================
  1588.                                  MATH MODULES
  1589.  
  1590.     ----------------------------------------------------------------------
  1591.     Add                                                      MATH 1,1   +
  1592.  
  1593.     Output: Sum of the 3 "+" inputs.
  1594.  
  1595.     Add "+" inputs:  Any value.  Note that overflow will wrap around,
  1596.        just as Offset inputs on other modules.
  1597.  
  1598.     ----------------------------------------------------------------------
  1599.     Add/Subtract                                             MATH 1,2 \F1
  1600.     Add/Subtract                                             MATH 1,3   -
  1601.  
  1602.     Note: These two modules are identical in function.
  1603.  
  1604.     Output: Sum of the 2 "+" inputs minus the "-" input.
  1605.  
  1606.     Add "+" inputs: Any value.
  1607.  
  1608.     Subtract "-" input: Any value.
  1609.  
  1610.     ----------------------------------------------------------------------
  1611.     Multiply/Divide                                          MATH 2,1   *
  1612.  
  1613.     Output:  Product of first two inputs, optionally divide by the third
  1614.        input.
  1615.  
  1616.     Multiply "*" inputs:  The 16 bit product of the two Multiply inputs
  1617.        is internally stored to allow accurate division by the third
  1618.        input. Only the least significant 8 bits (0-FF hex) are displayed.
  1619.  
  1620.     Divide (divide-symbol) input:  Integer division of the product of the
  1621.        first two inputs.  Fractions are truncated.  If the input is zero,
  1622.        no action is taken.
  1623.  
  1624.     ----------------------------------------------------------------------
  1625.     Scale                                                    MATH 2,2   %
  1626.  
  1627.     Output: Scaled input plus offset. 
  1628.  
  1629.     Value "-->" input: Value to be scaled.
  1630.  
  1631.     Scale "%" input:  The hexadecimal percentage of the value input that
  1632.        will be sent to the output, with 80% hex equal to 50% decimal.
  1633.        40% hex is equal to 25% decimal, and C0% hex is equal to 75%
  1634.        decimal.  Thus, 80 hex returns 1/2 of Value input, 40 hex returns
  1635.        1/4, C0 hex returns 3/4, etc.
  1636.  
  1637.     Offset "+" input:  Added to results of scaled value.
  1638.  
  1639.     ----------------------------------------------------------------------
  1640.     Modulus                                                  MATH 2,3   /
  1641.  
  1642.     Output: Remainder of Value input divided by Slash input.
  1643.  
  1644.     Value "-->" input:  Dividend.  Any value.
  1645.  
  1646.     Slash "/" input:  Divisor.  No action taken if zero.
  1647.  
  1648.  
  1649.                                    25
  1650.  
  1651.  
  1652.  
  1653.  
  1654.     ----------------------------------------------------------------------
  1655.     Left Shift                                               MATH 3,1 \AE
  1656.  
  1657.     Purpose:
  1658.  
  1659.     Output:  Value input shifted, then ANDed.
  1660.  
  1661.     Value "-->" input: Value to be shifted.
  1662.  
  1663.     Shift "<<" input:  Number of shifts to perform.  Each left shift is
  1664.        the same as a multiplication by 2. Since all displayed values are
  1665.        8 bit integers, values greater than 8 are meaningless, and are
  1666.        internally normalized to 0-7.
  1667.  
  1668.     Mask "&" input:  Shift results are logically ANDed with this value
  1669.        before being sent to the output.
  1670.  
  1671.     ----------------------------------------------------------------------
  1672.     Right Shift                                              MATH 3,2 \AF
  1673.  
  1674.     Output:  Value input shifted, then ANDed.
  1675.  
  1676.     Value "-->" input: Value to be shifted.
  1677.  
  1678.     Shift ">>" input:  Number of shifts to perform.  Each left shift is
  1679.        the same as a division by 2.  Since all displayed values are 8 bit
  1680.        integers, values greater than 8 are meaningless, and are
  1681.        internally normalized to 0-7.
  1682.  
  1683.     Mask "&" input:  Shift results are logically ANDed with this value
  1684.        before being sent to the output.
  1685.  
  1686.     ----------------------------------------------------------------------
  1687.     Power of Two                                             MATH 3,3   ^
  1688.  
  1689.     Output: Input to the power of two.
  1690.  
  1691.     Value "-->" input:  Exponent of 2^n operation.  Since all displayed
  1692.       values are 8 bit integers, values greater than 8 are meaningless,
  1693.       and are internally normalized to 0-7.
  1694.  
  1695.  
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715.                                    26
  1716.  
  1717.  
  1718.  
  1719.     ======================================================================
  1720.                                LOGIC MODULES
  1721.  
  1722.     ----------------------------------------------------------------------
  1723.     AND/XOR                                                 LOGIC 1,1   &
  1724.  
  1725.     Output:  Logical AND of the first two inputs XORd with the third.
  1726.  
  1727.     Boolean AND "&" inputs:  Any value.  Since a value ANDed with FF hex
  1728.        is itself, setting one of these to FF hex effectively disables the
  1729.        AND function, leaving the module as an XOR function only.
  1730.  
  1731.     XOR "x" input:  Any value.  Since a value XORd with 0 is itself,
  1732.        leaving this input at 0 effectively disables the XOR function,
  1733.        leaving the module as an AND function only.
  1734.  
  1735.     ----------------------------------------------------------------------
  1736.     AND/Offset                                              LOGIC 1,2 \91
  1737.  
  1738.     Output:  Logical AND of the first two inputs, added to the third.
  1739.  
  1740.     Boolean AND "&" inputs:  Any value.  The two inputs are logically
  1741.        ANDed.
  1742.  
  1743.     Offset "+" input:  Added to the current output.
  1744.  
  1745.     ----------------------------------------------------------------------
  1746.     OR                                                      LOGIC 1,3   |
  1747.  
  1748.     Output:  Logical OR of the three Value inputs.
  1749.  
  1750.     Value "-->" input: Any value
  1751.  
  1752.     ----------------------------------------------------------------------
  1753.     Mask and Left Shift                                     LOGIC 2,1 \A9
  1754.  
  1755.     Output:  Binary left shift of results of the two AND inputs, useful
  1756.        to isolate a bit (mask), then to shift it into place.
  1757.  
  1758.     Boolean AND "&" inputs:  A logical AND operation is performed on
  1759.        these two inputs, with the results going to the shift function.
  1760.  
  1761.     Shift "<<" input:  Number of shifts to perform.  Each left shift is
  1762.        the same as a multiplication by 2. Since all displayed values are
  1763.        8 bit integers, values greater than 8 are meaningless, and are
  1764.        internally normalized to 0-7.
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.  
  1776.  
  1777.  
  1778.  
  1779.  
  1780.  
  1781.                                    27
  1782.  
  1783.  
  1784.  
  1785.     ---------------------------------------------------------------------
  1786.     Mask and Right Shift                                    LOGIC 2,2 \AA
  1787.  
  1788.     Output:  Binary right shift of results of the two AND inputs, useful
  1789.        to isolate a bit, then to shift it into place.
  1790.  
  1791.     Boolean AND "&" inputs:  A logical AND operation is performed on
  1792.        these two inputs, with the results going to the shift function.
  1793.  
  1794.     Shift ">>" input:  Number of shifts to perform.  Each left shift is
  1795.        the same as a division by 2.  Since all displayed values are 8 bit
  1796.        integers, values greater than 8 are meaningless, and are
  1797.        internally normalized to 0-7.
  1798.  
  1799.     ----------------------------------------------------------------------
  1800.     Identity                                                LOGIC 2,3   #
  1801.  
  1802.     Purpose:  Convenience module to display or echo an input.
  1803.  
  1804.     Output: Unmodified copy of input.
  1805.  
  1806.     Value "-->" input: Any value
  1807.  
  1808.  
  1809.  
  1810.     ----------------------------------------------------------------------
  1811.     NOT AND                                                 LOGIC 3,1 \ED
  1812.  
  1813.     Output:  Logical NOT (one's complement) of the first input followed
  1814.     by a logical AND with the second input.
  1815.  
  1816.     NOT (circle with slash) input:  Value to be logically inverted.
  1817.  
  1818.     AND input: Mask value.
  1819.  
  1820.     ----------------------------------------------------------------------
  1821.     Negate                                                  LOGIC 3,2 \A5
  1822.  
  1823.     Output: 2's complement (minus) of input.
  1824.  
  1825.     Value "-->" input: Any value
  1826.  
  1827.     ----------------------------------------------------------------------
  1828.     Identity with Decimal Readout                           LOGIC 3,3 \01
  1829.  
  1830.     Purpose:  Convenience module to display or echo an input.
  1831.  
  1832.     Output: Unmodified copy of input.
  1833.  
  1834.     Display output: Decimal representation of the input.
  1835.  
  1836.     Value "-->" input: Any value
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845.  
  1846.  
  1847.                                    28
  1848.  
  1849.  
  1850.  
  1851.     ======================================================================
  1852.                                SEQUENCE MODULES
  1853.  
  1854.     Sequencers read or write values to/from specific memory locations, by
  1855.     either random or sequential access.  The modules are entirely
  1856.     general.  They can control note values, dynamics, timing, anything at
  1857.     all.  They can be run as individual sequencers, or ganged together to
  1858.     make multiple output sequencers.
  1859.  
  1860.     Usually, sequencers will be driven by one of the index modules, which
  1861.     in turn is driven by a clock module.  As is true of all modules, each
  1862.     sequencer has just one output. Multiple output sequencers can easily
  1863.     be built by driving several modules with the same index module.  The
  1864.     output of the module is always an unmodified copy of the memory cell
  1865.     at the given address (or address+offset), and can be any value from 0
  1866.     to FF hex.  All memory cells are initialized to 0, so stepping
  1867.     through a sequencer that has not been programmed will result in a
  1868.     steady output of 0.
  1869.  
  1870.     There are 8 sequencer modules, 4 that can address a 64K memory area,
  1871.     ("A" of MPAB in the page 0 menu) and 4 which address a 4K area ("B"
  1872.     of MPAB) as one of 16 blocks of 256 bytes.  The two memory areas, "A"
  1873.     and "B" are automatically saved whenever a "SAVE" command is given.
  1874.     Individual sequences can be loaded by setting and clearing
  1875.     appropriate "MPAB" flags.  See the "MENU" chapter for details.
  1876.  
  1877.     Sequencer memory area "A" is also used for system exclusive loads and
  1878.     dumps; area "B" at block 15 (F hex) is used as a buffer for incoming
  1879.     MIDI data.  Both memory areas may also used to display ASCII
  1880.     characters.  See the "MIDI", "SYSTEM", and "DISPLAY" chapters for 
  1881.     details these special usages.
  1882.  
  1883.     ----------------------------------------------------------------------
  1884.     64K Read/Write Sequencer                             SEQUENCE 1,1   P
  1885.  
  1886.     Purpose:  Read from or write to memory locations within the "A"
  1887.        memory block.
  1888.  
  1889.     Output:  Contents of addressed memory cell.
  1890.  
  1891.     Address "@" input:  Current read/write address.  Since input values
  1892.        are limited to 0-FF hex (0-255 decimal), this input can address
  1893.        256 memory locations.
  1894.  
  1895.     Page (paragraph symbol) input:  Current high address.  Since this
  1896.        sequencer can address up to 65K, it uses Address input as a
  1897.        low order address, and the Page input as a high order address.
  1898.        Can also be thought of as 256 runs (Page) of 256 bytes each
  1899.        (Address).
  1900.  
  1901.     Write enable (omega) input:  A non-zero value allows writing into
  1902.        (programming) the sequencer. When ON, the Value input is written
  1903.        into the memory cell addressed by Address and Page, when OFF
  1904.        (zero), the memory cell can be read. Be careful with this input,
  1905.        inadvertently setting it ON will clobber existing data.
  1906.  
  1907.     Value "-->" input:  Only meaningful while programming the module,
  1908.       this is the value that will be written to the currently addressed
  1909.       memory cell when the write enable input is non-zero.
  1910.  
  1911.  
  1912.  
  1913.                                    29
  1914.  
  1915.  
  1916.  
  1917.     Write mask "&" input:  Only meaningful while programming the module.
  1918.        Allows individual bits in a given memory cell to be written
  1919.        without affecting the other bits.  Only bits set ON at this input
  1920.        are written to the addressed memory cell, with the value of the
  1921.        bits taken from the Value input.  This input can be effectively
  1922.        disabled by setting it to FF hex (the default), all bits ON.  When
  1923.        set to zero, the input acts as a second write protect.
  1924.  
  1925.     ----------------------------------------------------------------------
  1926.     256-step Read/Write Sequencer                        SEQUENCE 1,2   p
  1927.  
  1928.     Purpose:  Read from or write to memory locations within the "B"
  1929.        memory block.
  1930.  
  1931.     Magenta User Input (just left of label tag):  Current 256-step run.
  1932.        There are 16 sequencer runs available.  This input is used to
  1933.        manually set the desired run, 0-F hex.
  1934.  
  1935.        Note that run 15 (F hex) is used by the MIDI Data Input module as
  1936.        an input buffer.  See chapter "SYSTEM" for details.
  1937.  
  1938.     Output:  Contents of addressed memory cell.
  1939.  
  1940.     Address "@" input:  Current read/write address.  Since input values
  1941.        are limited to 0-FF hex (0-255 decimal), this input can address
  1942.        256 memory locations.
  1943.  
  1944.     Write enable (omega) input:  A non-zero value allows writing into
  1945.        (programming) the sequencer. When ON, the Value input is written
  1946.        into the memory cell addressed by Address and Page, when OFF
  1947.        (zero), the memory cell can be read. Be careful with this input,
  1948.        inadvertently setting it ON will clobber existing data.
  1949.  
  1950.     Value "-->" input:  Only meaningful while programming the module,
  1951.       this is the value that will be written to the currently addressed
  1952.       memory cell when the write enable input is non-zero.
  1953.  
  1954.     Write mask "&" input:  Only meaningful while programming the module.
  1955.        Allows individual bits in a given memory cell to be written
  1956.        without affecting the other bits.  Only bits set ON at this input
  1957.        are written to the addressed memory cell, with the value of the
  1958.        bits taken from the Value input.  This input can be effectively
  1959.        disabled by setting it to FF hex (the default), all bits ON.  When
  1960.        set to zero, the input acts as a second write protect.
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.                                    30
  1980.  
  1981.  
  1982.  
  1983.     ---------------------------------------------------------------------
  1984.     64K Read-only Sequencer                              SEQUENCE 2,1   Q
  1985.     64K Read-only Sequencer                              SEQUENCE 2,2   R
  1986.     64K Read-only Sequencer                              SEQUENCE 2,3   S
  1987.  
  1988.     Purpose:  Read from memory locations within the "A" memory block.
  1989.  
  1990.     Output:  Contents of addressed memory cell.
  1991.  
  1992.     Address "@" input:  Current read/write address.  Since input values
  1993.        are limited to 0-FF hex (0-255 decimal), this input can address
  1994.        256 memory locations.
  1995.  
  1996.     Page (paragraph symbol) input:  Current high address.  Since this
  1997.        sequencer can address up to 65K, it uses Address input as a
  1998.        low order address, and the Page input as a high order address.
  1999.        Can also be thought of as 256 runs (Page) of 256 bytes each
  2000.        (Address).
  2001.  
  2002.     Read Address Offset (up-down arrow) input:  Number of steps away from
  2003.        current address to read output data from. No effect when set to 0.
  2004.  
  2005.     ----------------------------------------------------------------------
  2006.     256-step Read-only Sequencer                         SEQUENCE 3,1   q
  2007.     256-step Read-only Sequencer                         SEQUENCE 3,2   r
  2008.     256-step Read-only Sequencer                         SEQUENCE 3,3   s
  2009.  
  2010.     Purpose:  Read from or write to memory locations within the "B"
  2011.        memory block.
  2012.  
  2013.     Magenta User Input (just left of label tag):  Current 256-step run.
  2014.        There are 16 sequencer runs available.  This input is used to
  2015.        manually set the desired run, 0-F hex.
  2016.  
  2017.     Output:  Contents of addressed memory cell.
  2018.  
  2019.     Address "@" input:  Current read/write address.  Since input values
  2020.        are limited to 0-FF hex (0-255 decimal), this input can address
  2021.        256 memory locations.
  2022.  
  2023.     Read Address Offset (up-down arrow) input:  Number of steps away from
  2024.        current address to read output data from. No effect when set to 0.
  2025.  
  2026.  
  2027.  
  2028.  
  2029.  
  2030.  
  2031.  
  2032.  
  2033.  
  2034.  
  2035.  
  2036.  
  2037.  
  2038.  
  2039.  
  2040.  
  2041.  
  2042.  
  2043.  
  2044.  
  2045.                                    31
  2046.  
  2047.  
  2048.  
  2049.     ======================================================================
  2050.                                  MIX MODULES
  2051.     ----------------------------------------------------------------------
  2052.     Adder Switch (high nybble control)                        MIX 1,1   a
  2053.     Adder Switch (high nybble control)                        MIX 2,1   c
  2054.  
  2055.     Purpose: Switch and/or add offsets.  Optimized to be used with the
  2056.        Program module output.
  2057.  
  2058.     Output: Sum of all highlighted "+" inputs.
  2059.  
  2060.     Value "+" inputs: When highlighted, the value at these inputs are
  2061.        added and sent to the output.
  2062.  
  2063.     Switch input:  Selects which of the four "+" inputs will be active.
  2064.       The most significant 4 bits (high nybble: 10, 20, 30, 40 hex) at
  2065.       this input control which value inputs will be summed and sent to
  2066.       the output.  For example, 10 hex turns the first input on (the "+"
  2067.       will highlight, and the value will be sent to the output), 20 hex
  2068.       turns the 2nd input on, and 30 hex turns on both the 1st and the
  2069.       2nd inputs, causing the sum of the two to be sent to the output.
  2070.  
  2071.     ----------------------------------------------------------------------
  2072.     Adder Switch (low nybble control)                         MIX 1,2   b
  2073.     Adder Switch (low nybble control)                         MIX 2,2   d
  2074.  
  2075.     Purpose: Switch and/or add offsets.  Optimized to be used with the
  2076.        Program module output.
  2077.  
  2078.     Output: Sum of all highlighted "+" inputs.
  2079.  
  2080.     Value "+" inputs: When highlighted, the value at these inputs are
  2081.        added and sent to the output.
  2082.  
  2083.     Switch input:  Selects which of the four "+" inputs will be active.
  2084.       The least significant 4 bits (low nybble: 1, 2, 3, 4) at this input
  2085.       control which value inputs will be summed and sent to the output.
  2086.       For example, 1 turns the first input on (the "+" will highlight,
  2087.       and the value will be sent to the output), 2 turns the 2nd input
  2088.       on, and 3 turns on both the 1st and the 2nd inputs, causing the sum
  2089.       of the two to be sent to the output.
  2090.  
  2091.     ----------------------------------------------------------------------
  2092.     Adder Switch (shift nybble control)                       MIX 3,1   e
  2093.     Adder Switch (shift nybble control)                       MIX 3,2   f
  2094.  
  2095.     Purpose: Switch and/or add offsets.
  2096.  
  2097.     Output: Sum of all highlighted "+" inputs.
  2098.  
  2099.     Value "+" inputs: When highlighted, the value at these inputs are
  2100.        added and sent to the output.
  2101.  
  2102.     Switch input:  Selects which of the four "+" inputs will be active.
  2103.  
  2104.     Shift ">>" input:  Shift switch input right.  Setting this to 4 shifts
  2105.        the high 4 bits of the switch input to the low position.  Used to
  2106.        allow a single 8 bit value to control two Adder Switches.
  2107.  
  2108.  
  2109.  
  2110.  
  2111.                                    32
  2112.  
  2113.  
  2114.  
  2115.     ---------------------------------------------------------------------
  2116.     Adder Switch (8-input)                                    MIX 3,3 \F0
  2117.  
  2118.     Purpose: Switch and/or add offsets.
  2119.  
  2120.     Output: Sum of all highlighted "+" inputs.
  2121.  
  2122.     Value "+" inputs: When highlighted, the value at these inputs are
  2123.        added and sent to the output.
  2124.  
  2125.     Switch input:  Selects which of the eight "+' inputs will be active.
  2126.  
  2127.     ----------------------------------------------------------------------
  2128.     Sum                                                       MIX 1,3 \E4
  2129.  
  2130.     Output:  Sum of the 5 Value inputs, scaled and offset by the
  2131.        respective inputs.
  2132.  
  2133.     Value "-->" inputs:  Any value.  These inputs are added as 16 bit
  2134.        integers to avoid overflow.
  2135.  
  2136.  
  2137.     Scale "%" input:  Scale the 16 bit sum of the Value inputs with this
  2138.        value.  This is a hexadecimal percentage, with 80% (hex) equal to
  2139.        50% (decimal).  40% (hex) is equal to 25% (decimal), and C0% (hex)
  2140.        is equal to 75% (decimal).
  2141.  
  2142.     Offset "+" input:  Added to the current output.
  2143.  
  2144.     ----------------------------------------------------------------------
  2145.     Mixer                                                     MIX 2,3 \EE
  2146.  
  2147.     Output:  Sum of the 3 Value inputs, each scaled by their respective
  2148.        Scale input, and finally summed with the Offset input.
  2149.  
  2150.     Value "-->" inputs:  Any value.  The difference between the Mixer
  2151.        module and the Sum module, described above, is that the Mixer
  2152.        scales each input prior to adding it to the total, while the Sum
  2153.        module adds all five inputs, then scales the final result.
  2154.  
  2155.     Scale "%" inputs:  Scale the individual Value inputs with this value
  2156.        prior to adding them to the other scaled Value inputs.
  2157.  
  2158.     Offset "+" input:  Added to the current output.
  2159.  
  2160.  
  2161.  
  2162.  
  2163.  
  2164.  
  2165.  
  2166.  
  2167.  
  2168.  
  2169.  
  2170.  
  2171.  
  2172.  
  2173.  
  2174.  
  2175.  
  2176.  
  2177.                                    33
  2178.  
  2179.  
  2180.  
  2181.     ======================================================================
  2182.                                PROGRAM MODULES
  2183.  
  2184.     This group of modules consists of one Program Sequencer module plus
  2185.     11 Stage Output modules.
  2186.  
  2187.     The Program Sequencer is the main sequencer for most musical
  2188.     applications.  It is a 256 step sequencer, with stages for 12
  2189.     simultaneous values.  Four of the stages can be faded from one value
  2190.     to the next, allowing smooth transitions between steps.
  2191.  
  2192.     Although set up as separate modules to get around the "one output per
  2193.     module" rule, the 11 Stage Output modules are really a continuation
  2194.     of the Program Sequencer.  The modules have only an output, no input.
  2195.     The output value corresponds to the Program Sequencer stage with the
  2196.     same letter name.
  2197.  
  2198.     ----------------------------------------------------------------------
  2199.     Program Sequencer                                     PROGRAM 1,1 \EA
  2200.  
  2201.     General:  The Program Sequencer works in close concert with the Alpha
  2202.        module. In particular, it is switched between programming mode and
  2203.        playing mode by the write protect (omega icon) input of the Alpha.
  2204.        When Alpha write-protect is non-zero, the Program module is in
  2205.        playing mode, otherwise it is in programming mode.  Also, the
  2206.        address "@" input of the Alpha module is the global address value
  2207.        for all active Program Sequencer modules.  Information on the
  2208.        Alpha module is in the "SYSTEM" chapter.
  2209.  
  2210.        Note that all inputs are magenta "user inputs" not the normal blue
  2211.        inputs.  This "user input only" setup is the result of the
  2212.        module's action as a programming module, rather than as a
  2213.        processing module.
  2214.  
  2215.     Buffers:  The module uses 4 different 12 byte data buffers.
  2216.           1. the output buffer, always displayed.
  2217.           2. the sequencer.
  2218.           3. the Undo buffer.
  2219.           4. the Save buffer.
  2220.  
  2221.        While playing, each time the sequencer steps, the stored values in
  2222.        all the stages are transferred to the output buffer.  The Undo
  2223.        buffer and the Save buffer are ignored.
  2224.  
  2225.        While programming, the output buffer contents can be copied into
  2226.        the Save buffer with the SAVE command, and the Save buffer
  2227.        contents can be transferred to the output buffer with RECALL.
  2228.  
  2229.        The Undo buffer is automatically filled, again only while
  2230.        programming.  Each time the sequencer step address is changed, the
  2231.        current output buffer contents are first stored into the Undo
  2232.        buffer, then the stored sequencer values are transferred to the
  2233.        output buffer. Selecting the STORE command will transfer the
  2234.        sequencer data to the Undo buffer (Undo contents are lost), then
  2235.        the output buffer is copied into the sequencer locations.  When an
  2236.        individual value is changed, that value in the current output
  2237.        buffer is first copied into the Undo buffer.  Selecting the UNDO
  2238.        command will always exchange the output buffer with the Undo
  2239.        buffer.  Thus, it possible to undo Undo.
  2240.  
  2241.  
  2242.  
  2243.                                    34
  2244.  
  2245.  
  2246.  
  2247.     Output:  Current sequencer address (step) for the module.
  2248.  
  2249.     Address "@":  The current sequencer address.  While playing, this
  2250.        value is stepped according to the value in the Measures input.
  2251.        When Measures reaches 0, the next address is set, and new
  2252.        sequencer values are brought in. While programming, "@" serves as
  2253.        a quick address locater.  This input is overridden by the Alpha
  2254.        module's Programmer Address input.
  2255.  
  2256.     Address End "e":  When playing, upon reaching this address, the
  2257.        sequencer will halt.  Ignored if it is equal to or less than the
  2258.        current address (leaving it at 0 disables).
  2259.  
  2260.     Undo "U":  Exchanges contents of the output buffer with the Undo
  2261.        buffer. Inhibited while playing.
  2262.  
  2263.     Store "!!":  Store contents of output buffer into the sequencer, with
  2264.        sequencer contents saved in the Undo buffer.  Inhibited when
  2265.        playing.
  2266.  
  2267.     Recall "R":  Transfer contents of Save buffer into the output buffer,
  2268.        with output buffer contents saved in the Undo buffer.  Inhibited
  2269.        when playing.
  2270.  
  2271.     Save "S":  Transfer contents of the output buffer into the Save
  2272.        buffer. Inhibited when playing.
  2273.  
  2274.     Measures to next stage "|":  This value is essentially the time
  2275.        control value.  While playing, it decrements after each measure
  2276.        until it reaches 0, then it bumps the sequencer address, which
  2277.        starts off the next event.  The actual time value of a measure is
  2278.        based on the Tempo and time signature values of the Alpha module.
  2279.  
  2280.     Stage outputs "X, Y, Z" and "A, B, C, D":  General output stages.
  2281.        Output goes to the corresponding Stage Output module.
  2282.  
  2283.     Stage outputs with slew "E/e" to "H/h":  These outputs are slewed.
  2284.        They all have a lower case slew rate label directly under the
  2285.        uppercase value label.  Slewing works by adding (or subtracting,
  2286.        depending on direction) a slew value to (from) the current value
  2287.        until it reaches the new value. The higher the slew rate value,
  2288.        the faster the slew, except that a slew rate of 0 means no slew.
  2289.        Output goes to the corresponding Stage Output module.
  2290.  
  2291.     ----------------------------------------------------------------------
  2292.     Stage Output Modules                   PROGRAM 1,2 to 3,4  X,Y,Z, A-H
  2293.  
  2294.     Magenta User Input (just left of label tag):  Must be set to
  2295.        corresponding Program Sequencer module number.  This is the number
  2296.        (0-F hex) that is part of the Program Sequencer module's label.
  2297.        Select with mouse, move cursor left or right to set.
  2298.  
  2299.     Output:  Value of current stage of corresponding Program Sequencer
  2300.        module and stage.
  2301.  
  2302.  
  2303.  
  2304.  
  2305.  
  2306.  
  2307.  
  2308.  
  2309.                                    35
  2310.  
  2311.  
  2312.  
  2313.     ======================================================================
  2314.                                 CLOCK MODULES
  2315.  
  2316.  
  2317.          These modules generate timing pulses which in turn are used to
  2318.     trigger events throughout the rest of the modules.  Most of the time
  2319.     the output from the Clock modules will be sent to the "heart" input
  2320.     of function modules such as the Index modules.  It is important to
  2321.     realize that MusicBox operates on the MIDI 24 beat/quarter note
  2322.     standard.  This means that the computer will recalculate all active
  2323.     modules exactly 24 times for each quarter note, 12 times for each
  2324.     eighth note, etc.
  2325.  
  2326.          Since strobe -- or any other change of state -- requires 2
  2327.     cycles to be detected: one cycle for the "on" state and one cycle for
  2328.     the "off" state, it is easy to confuse the 24 clocks per quarter note
  2329.     standard with 12 on/off states per quarter note.  This is especially
  2330.     confusing when using clocks at their fastest rate, which would have
  2331.     to be 12 strobe cycles per quarter note.  Since most of the clocks
  2332.     will generate a strobe of only 1 cycle duration, the problem
  2333.     goes away when dealing with cycles of 3 and more.  As an aside, 3
  2334.     clock cycles corresponds to a thirty-second note, which is the
  2335.     fastest practical note duration.  Of course the number of clocks in a
  2336.     given note (3 for a 32nd, 6 for a 8th, etc.) have nothing whatsoever
  2337.     to do with the actual time duration of the note.  Tempo is set by the
  2338.     Alpha module and can range from as low as 6 quarter note beats per
  2339.     minute to as high as 256 beats per minute.
  2340.  
  2341.     ----------------------------------------------------------------------
  2342.     Note Clock                                              CLOCK 1,1 \0D
  2343.     Note Clock                                              CLOCK 1,2 \0E
  2344.  
  2345.     Purpose:  Main note-generating clocks.  The two modules are
  2346.        identical.  Two are given to allow up to 32 copies of the module,
  2347.        rather than the usual 16.
  2348.  
  2349.     Output:  Clock between a copy of the "v" (value) input, or 0.
  2350.  
  2351.     Hold (check) input:  When non-zero, output will hold at 0.  When
  2352.        released, the output will synchronize to the next non-zero Sync
  2353.        input.  Note that a Hold at the Alpha system module will act
  2354.        exactly like a hold at this input (as well as at the Hold input of
  2355.        all other modules), allowing all clocks to be held and sync'd with
  2356.        just the one Alpha Hold.
  2357.  
  2358.     Sync "S" input:  After a HLT, or a local or Alpha module Hold, the 
  2359.        clock will not resume until a non-zero value is detected at this 
  2360.        input.     Thus, clocks can be synced to other clocks, or to any 
  2361.        other event.  By leaving the sync at non-zero (the default), an 
  2362.        Alpha hold will cause all active clocks to sync to the system 
  2363.        measure start.
  2364.  
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370.  
  2371.  
  2372.  
  2373.  
  2374.  
  2375.                                    36
  2376.  
  2377.  
  2378.  
  2379.     Note value (note) input:  Sets clock rate as a note duration time.
  2380.        Add 10 hex to flag triplets, 20 hex to flag dotted notes.
  2381.  
  2382.        Example:  3     = quarter note,
  2383.                 13 hex = quarter note triplet,
  2384.                 23 hex = dotted quarter note.
  2385.  
  2386.          input  note         clocks    clocks    clocks
  2387.          value  value        normal    triplet   dotted
  2388.  
  2389.          0    = Double whole  192       128        255 *
  2390.          1    = Whole note     96        64        144
  2391.          2    = Half note      48        32         72
  2392.          3    = Quarter note   24        16         36
  2393.          4    = Eighth note    12         8         18
  2394.          5    = Sixteenth       6         4          9
  2395.          6    = Thirty second   3         2          4 *
  2396.          7    = Sixty fourth    2 *       2 *        2 *
  2397.  
  2398.        * = not accurate representations.
  2399.  
  2400.     Sustain value "s" input:  Note on time as a hexadecimal percentage of
  2401.        total note duration, with 80% hex equal to 50% decimal. 40% hex is
  2402.        equal to 25% decimal, and C0% hex is equal to 75% decimal.  A
  2403.        value of 0 will give a note on time of 1 clock.
  2404.  
  2405.     Delay Offset "o" input:  Offset value of note start, in clocks.
  2406.        Although the Offset value is always a delay, it is possible to
  2407.        lead the note by giving offset values greater than half the note
  2408.        value.  Note that every time the offset value changes, the module
  2409.        is automatically re-sync'd to the sync pulse plus the delay.
  2410.  
  2411.     Velocity Value "v" input:  This value is sent to the module output at
  2412.        clock-on, at clock-off, the module output is set to zero.  The
  2413.        purpose of this input is to allow for the clock pulse to directly
  2414.        control the MIDI velocity input of the MIDI output module.  When
  2415.        the note clock output is used as a general ON/OFF flag, the value
  2416.        can be left at its default value of 1.  If this value is set to
  2417.        zero, it has the effect of holding the module off without
  2418.        resetting the sync.
  2419.  
  2420.     ----------------------------------------------------------------------
  2421.     Measure Clock                                           CLOCK 2,1 \B3
  2422.  
  2423.     Purpose:  To clock measure starts, with time offset into the measure.
  2424.  
  2425.     Output:  Strobe from 0 to 1 to 0, with the on-time lasting exactly
  2426.        one calculation cycle (1/24 of a quater note).
  2427.  
  2428.  
  2429.     Hold (check) input:  When non-zero, output will hold at 0.  When
  2430.        released, the output will synchronize to the next measure start,
  2431.        plus the given offset.  Note that a Hold at the Alpha system
  2432.        module will act exactly like a hold at this input.
  2433.  
  2434.     Delay Offset "o" input:  Offset value from measure start, in clocks.
  2435.        Although the offset value is always a delay, it is possible to
  2436.        lead the measure by giving offset values greater than half the
  2437.        measure value.
  2438.  
  2439.  
  2440.  
  2441.                                    37
  2442.  
  2443.  
  2444.  
  2445.     ----------------------------------------------------------------------
  2446.     Multiple Measure Clock                                  CLOCK 2,2 \BA
  2447.  
  2448.     Purpose:  Measures clock.  A good clock to trigger slow events.
  2449.  
  2450.     Output:  Strobe from 0 to 1 to 0, with the on-time lasting exactly
  2451.        one calculation cycle (1/24 of a quater note).
  2452.  
  2453.     Hold (check) input:  When non-zero, output will hold at 0.
  2454.  
  2455.     Measure Count "c" input:  Number of measures between strobes.  When
  2456.        set to 1, a strobe is generated at the start of each measure
  2457.        (measure timing & beats per measure are set by the Alpha module).
  2458.        When set to 2, a strobe is generated every 2nd measure; when set
  2459.        to FF hex, a strobe is generated at the start of every 255th
  2460.        measure, etc.  When set to 0, no strobe is generated.
  2461.  
  2462.     ----------------------------------------------------------------------
  2463.     Seconds Clock                                           CLOCK 2,3 \92
  2464.  
  2465.     Purpose:  Real-time clock.  Runs at an unchanging rate of one count
  2466.        per second.
  2467.  
  2468.     Output:  Seconds or minutes count, depending on "m" input.
  2469.  
  2470.     Display (yellow) output:  Decimal display of Output.
  2471.  
  2472.     Hold (check) input:  When set to non-zero, output will hold, when
  2473.        returned to zero, output goes to 0.
  2474.  
  2475.     Minutes flag "m" input:  Set output as follows:
  2476.  
  2477.        0 = direct send of seconds count, 0 - FF hex.
  2478.        1 = direct send of seconds count, 0 - 60 decimal.
  2479.        2 = direct send of minutes (seconds / 60).
  2480.  
  2481.  
  2482.  
  2483.  
  2484.  
  2485.  
  2486.  
  2487.  
  2488.  
  2489.  
  2490.  
  2491.  
  2492.  
  2493.  
  2494.  
  2495.  
  2496.  
  2497.  
  2498.  
  2499.  
  2500.  
  2501.  
  2502.  
  2503.  
  2504.  
  2505.  
  2506.  
  2507.                                    38
  2508.  
  2509.  
  2510.  
  2511.     ----------------------------------------------------------------------
  2512.     Mu Clock                                                CLOCK 3,1 \E6
  2513.  
  2514.     Purpose: General purpose event clock, similar in operation to an
  2515.        analog LFO.  Changing values in the Count input will give
  2516.        accelrando or ritardando.
  2517.  
  2518.     Output: Strobe from 0 to 1 to 0, with the on-time lasting exactly one
  2519.        calculation cycle (1/24 of a quater note).
  2520.  
  2521.     Hold (check) input:  When non-zero, output will hold.  When returned
  2522.        to zero, the beat cycle will start at that moment, allowing the
  2523.        Hold input to also act as a sync input.
  2524.  
  2525.     Count "c" input: Number of clocks between strobes, with 1 the shortest
  2526.        duration, 255 the longest.  When 0, the clock is stopped.
  2527.  
  2528.     ---------------------------------------------------------------------
  2529.     Gamma Clock                                             CLOCK 3,2 \E7
  2530.  
  2531.     Purpose:  General purpose event clock.  A good clock to trigger fast
  2532.        events.  Also useful for generating leading or lagging beats.
  2533.  
  2534.     Output:  Strobe from 0 to 1 to 0, with the on-time lasting exactly
  2535.        one calculation cycle (1/24 of a quater note).
  2536.  
  2537.     Hold (check) input:  When non-zero, output will hold at 0. When
  2538.        returned to zero, the beat cycle will start at that moment, allowing
  2539.        the Hold input to also act as a sync input.
  2540.  
  2541.     Count "c" input:  Number of clocks between strobes, with 1 the
  2542.        shortest duration, 255 the longest.  When 0, the clock is stopped,
  2543.        when 1 it strobes every calculation cycle, with a complete on/off
  2544.        clock cycle occurring every two calculation cycles.  Since the
  2545.        on/off strobe cycle is only meaningful with a minimum of 2 beats,
  2546.        there is no pratical difference between a setting of 1 and of 2,
  2547.        and in fact it acts as if the minimum active setting was 2.
  2548.  
  2549.     Offset "o" input:  While the beat cycle is controlled by the Count
  2550.       input, above, the offset into the beat where the strobe will occur
  2551.       is set by this input.  When the Offset value is 0, the strobe will
  2552.       occur at the start of the beat; when 1, then it happens one clock
  2553.       after the start of the beat, and so on.  If the Offset input is set
  2554.       to a value equal to or greater than the Count input, the strobe
  2555.       occurs at the start of the beat, just as if it were set to 0.
  2556.  
  2557.  
  2558.  
  2559.  
  2560.  
  2561.  
  2562.  
  2563.  
  2564.  
  2565.  
  2566.  
  2567.  
  2568.  
  2569.  
  2570.  
  2571.  
  2572.  
  2573.                                    39
  2574.  
  2575.  
  2576.  
  2577.     ----------------------------------------------------------------------
  2578.     Lambda Clock                                            CLOCK 3,3 \E2
  2579.  
  2580.     Purpose:  General clock/loop counter.  Simply counts calculation
  2581.        cycles (also called "loops", because the program loops back to the
  2582.        start after each cycle).  For each loop, the output of the clock
  2583.        is incremented by one.  When the count reaches FF hex (255
  2584.        decimal), it rolls over to 0.
  2585.  
  2586.     Output:  Count of 0-FF (hex), masked by the AND input.
  2587.  
  2588.     Hold (check) input:  When non-zero, output will hold at 0.
  2589.  
  2590.     Shift ">>" input:  Reduce the count period by powers of 2.  A value
  2591.        of 1 will reduce the period by 1/2, 2 by 1/4, 3 by 1/8, etc.
  2592.        Since the internal count register is 16 bits while only 8 bits can
  2593.        be displayed, shifting can also be used to count beyond the normal
  2594.        255 maximum (16 bits gives a maximum of 65,535).
  2595.  
  2596.     Mask "&" input:  Bit mask for output.  The value of the input is
  2597.        logically ANDed with the loop count prior to sending it to the
  2598.        output.  Thus, with the input set to 0, the output will remain 0,
  2599.        if the input is set to FF (hex), the output will count from 0 to
  2600.        FF, and repeat continuously.  Useful input values are powers of 2
  2601.        (1, 2, 4, 8, 10 hex, 20 hex, 40 hex, 80 hex), which will give
  2602.        clock ticks which half in frequency for each power of two.
  2603.  
  2604.        Note that one loop cycle is the same as one MIDI clock, but since
  2605.        the AND input wants to do things in powers of 2, and since the
  2606.        MIDI clock standard is 24 beats per quarter note (which works out
  2607.        to be powers of three), this module is usually not the best choice
  2608.        to directly generate note timing.
  2609.  
  2610.     ----------------------------------------------------------------------
  2611.     Beta Clock                                              CLOCK 3,4 \E1
  2612.  
  2613.     Purpose:  Real-time clock/loop counter, independent of the system
  2614.        Tempo setting of the Alpha module.  Runs at an unchanging rate
  2615.        some 580 counts/second.  For each clock tick, the output of the
  2616.        module is incremented by one. When the output reaches FF hex (255
  2617.        decimal), it rolls over to 0.
  2618.  
  2619.     Output:  Count of 0-FF (hex), masked by the AND input.
  2620.  
  2621.     Hold (check) input:  When non-zero, output will hold at 0.
  2622.  
  2623.     Shift ">>" input:  Reduce the count period by powers of 2.  A value
  2624.        of 1 will reduce the period by 1/2, 2 by 1/4, 3 by 1/8, etc.
  2625.        Since the internal count register is 16 bits while only 8 bits can
  2626.        be displayed, shifting can also be used to count beyond the normal
  2627.        255 maximum (16 bits gives a maximum of 65,535).
  2628.  
  2629.     Mask "&" input:  Bit mask for output.  The value of the input is
  2630.        logically ANDed with the tick count prior to sending it to the
  2631.        output.  Thus, with the input set to 0, the output will remain 0,
  2632.        if the input is set to FF (hex), the output will count from 0 to
  2633.        FF, and repeat continuously.
  2634.  
  2635.  
  2636.  
  2637.  
  2638.  
  2639.                                    40
  2640.  
  2641.  
  2642.  
  2643.     ======================================================================
  2644.                                TRIGGER MODULES
  2645.     ----------------------------------------------------------------------
  2646.     Synchronizer                                          TRIGGER 1,1 \EF
  2647.  
  2648.     Purpose:  Synchronize one clock event with another, or a random event
  2649.        with a clock cycle, or two random events with each other.
  2650.  
  2651.     Output:  Pulse (0 to 1 to 0) synchronized in time according the two
  2652.        inputs.
  2653.  
  2654.     Trigger "t" input:  A strobe at this input will cause an output pulse
  2655.        to be generated at the next Sync input.
  2656.  
  2657.     Sync "s" input:  Once a Trigger input is received, a strobe at this
  2658.        input will be produce a pulse at the output.  Normal usage is to
  2659.        patch a clock at this input, and a random pulse at the Trigger
  2660.        input. This will sync the random pulse to the clock.  Can also be
  2661.        used as a one-shot pulse generator by "loading" with the Trigger
  2662.        input, and "shooting" with the Sync input.
  2663.  
  2664.     ----------------------------------------------------------------------
  2665.     Flip-Flop                                             TRIGGER 1,2 \E9
  2666.  
  2667.     Output:  TRUE (1) or FALSE (0), depending on the last "s" or "r"
  2668.        input.
  2669.  
  2670.     Set "s" input:  Non-zero after zero will set the output to TRUE.
  2671.  
  2672.     Reset "r" input:  Non-zero after zero will set the output to FALSE.
  2673.  
  2674.     ----------------------------------------------------------------------
  2675.     Beat Pattern Generator                                TRIGGER 2,1 \9B
  2676.  
  2677.     Purpose:  Generate a beat pattern by the interference of up to four
  2678.        beat frequencies.
  2679.  
  2680.     Output:  Pulses (0 to 1 to 0) grouped in time according to Cycle
  2681.        inputs.
  2682.  
  2683.     Clock (heart) input:  Master clock for the module.  Output will be
  2684.        derived from and synchronized to this input.
  2685.  
  2686.     Hold (check) input:  When non-zero, output will hold at 0.  When
  2687.        released, the output will synchronize (all counts will start at
  2688.        the same time).
  2689.  
  2690.     Cycle "c" inputs:  The number of clock cycles to run before sending a
  2691.        pulse to the output.  Each of the four inputs are independent of
  2692.        the others, and are identical in function.  When an input value is
  2693.        0, that input is effectively disabled.  Note that whenever any
  2694.        Cycle input value is changed, all four cycle counts will be reset,
  2695.        causing the module to automatically resync.  Normally this is
  2696.        desirable because it gives a stable, known pattern for each
  2697.        setting.  When strange offsets to the beat pattern are desired,
  2698.        use the Beat Pattern Modulator, described below.
  2699.  
  2700.  
  2701.  
  2702.  
  2703.  
  2704.  
  2705.                                    41
  2706.  
  2707.  
  2708.  
  2709.     ----------------------------------------------------------------------
  2710.     Beat Pattern Modulator                                TRIGGER 2,2 \03
  2711.  
  2712.     Purpose:  Generate a beat pattern by the interference of up to four
  2713.        independent clock inputs.
  2714.  
  2715.     Output:  Pulses (0 to 1 to 0) grouped in time according to Cycle
  2716.        inputs.
  2717.  
  2718.     Hold (check) input:  When non-zero, output will hold at 0.
  2719.  
  2720.     Clock (heart) inputs:  Clock pulses at these inputs will be combined
  2721.        into a single pulse at any one calculation cycle, and sent out as
  2722.        an output strobe.  Each of the four inputs are independent of the
  2723.        others, and are identical in function.  Unused inputs are ignored.
  2724.  
  2725.     ----------------------------------------------------------------------
  2726.     Random Strobe                                         TRIGGER 2,3 \C1
  2727.  
  2728.     Purpose:  General purpose event trigger, with random dither.
  2729.  
  2730.     General:  This is the same as the Gamma Clock module, except it has a
  2731.        dithered strobe output.  Handy for generating polyrhythms.
  2732.  
  2733.     Output:  Strobe from 0 to 1 to 0, with the on-time lasting exactly
  2734.        one calculation cycle (1/24 of a quater note), with frequency set
  2735.        by the Count input, and probability set by the Dither input.
  2736.  
  2737.     Hold (check) input:  When non-zero, output will hold at 0. When
  2738.        returned to zero, the beat cycle will start at that moment,
  2739.        allowing the Hold input to also act as a sync input.
  2740.  
  2741.     Count "c" input:   Number of clocks between strobes, with 1 the
  2742.        shortest duration, 255 the longest.  When 0, the clock is stopped,
  2743.        when 1 it strobes every calculation cycle, with a complete on/off
  2744.        clock cycle occurring every two calculation cycles.  Since the
  2745.        on/off strobe cycle is only meaningful with a minimum of 2 beats,
  2746.        there is no pratical difference between a setting of 1 and of 2,
  2747.        and in fact it acts as if the minimum active setting was 2.
  2748.  
  2749.     Offset "o" input:  While the beat cycle is controlled by the Count
  2750.        input, above, the offset into the beat where the strobe will occur
  2751.        is set by this input.  When the Offset value is 0, the strobe will
  2752.        occur at the start of the beat; when 1, then it happens one clock
  2753.        after the start of the beat, and so on.  If the Offset input is set
  2754.        to a value equal to or greater than the Count input, the strobe
  2755.        occurs at the start of the beat, just as if it were set to 0.
  2756.  
  2757.     Dither "%" input:  The value at this input is compared to an
  2758.        internally generated random number in the range of 0-FF (hex).
  2759.        The effect of this is the higher the Dither value, the more often
  2760.        the output strobe will occur. If the value is 0, the strobe will
  2761.        be disabled; if 40 (hex), it will occur 1/4 of the time; if 80
  2762.        (hex), it will occur 1/2 of the time; if C0 (hex), it will occur
  2763.        3/4 of the time; if FF (hex) it will occur 255/256 of the time.
  2764.  
  2765.  
  2766.  
  2767.  
  2768.  
  2769.  
  2770.  
  2771.                                    42
  2772.  
  2773.  
  2774.  
  2775.     ----------------------------------------------------------------------
  2776.     Change Detector                                       TRIGGER 3,1 \0B
  2777.  
  2778.     Output:  TRUE pulse if the Value input has changed.  Pulse is active
  2779.        for one complete module calculation cycle, then returns to zero.
  2780.  
  2781.     Value "-->" input:  Any value.
  2782.  
  2783.     ----------------------------------------------------------------------
  2784.     Slope Detector                                        TRIGGER 3,2 \5C
  2785.  
  2786.     Output:  True (1) when the current value is greater than the
  2787.        preceding value (positive slope), False (0) when the current value
  2788.        is less than the preceding value (negative slope).  No change when
  2789.        the preceding value equals the current input.
  2790.  
  2791.     Value "-->" input: Any value.
  2792.  
  2793.     ----------------------------------------------------------------------
  2794.     Delta Test                                            TRIGGER 3,3 \A6
  2795.  
  2796.     Output:  TRUE (1) when the absolute difference between the current
  2797.        Value input and the last different Value input is equal to the
  2798.        Delta value input.
  2799.  
  2800.     Hold (check) input:  When non-zero, output will hold at 0.
  2801.  
  2802.     Delta value (delta) input:  Value that will be compared with the
  2803.        input delta.
  2804.  
  2805.     Octave normalize "o" input:  When non-zero, the input will be
  2806.        normalized to one octave (0-11), before it is compared with the
  2807.        Delta value.
  2808.  
  2809.     Input "-->":  Any changing value.
  2810.  
  2811.  
  2812.  
  2813.  
  2814.  
  2815.  
  2816.  
  2817.  
  2818.  
  2819.  
  2820.  
  2821.  
  2822.  
  2823.  
  2824.  
  2825.  
  2826.  
  2827.  
  2828.  
  2829.  
  2830.  
  2831.  
  2832.  
  2833.  
  2834.  
  2835.  
  2836.  
  2837.                                    43
  2838.  
  2839.  
  2840.  
  2841.     ======================================================================
  2842.                                ONESHOT MODULES
  2843.     ----------------------------------------------------------------------
  2844.     Timer                                                 ONESHOT 1,1 \D9
  2845.  
  2846.     Purpose:  Signal an event after a given number of MIDI clocks, with
  2847.        optional delay.  Based on internal MIDI clock speed, which is
  2848.        dependent on the Tempo setting of the Alpha module.
  2849.  
  2850.     Output:  After an optional delay, goes from 0 to 1, then returns to 0
  2851.        again.
  2852.  
  2853.     Strobe "!" input:  A zero to non-zero transition starts the timer.
  2854.        Further inputs are ignored until the module completes its cycle.
  2855.  
  2856.     Delay "d" input:  Number of clocks delay, after the Strobe input is
  2857.        clocked, before output goes to 1.  When 0, there is no delay.
  2858.  
  2859.     Hold "h" input:  Number of clocks the pulse will remain on.  When 0,
  2860.        the output will not return to zero.  This is useful when used with
  2861.        the "d" input to control an event start that will never retrigger.
  2862.  
  2863.     ----------------------------------------------------------------------
  2864.     Clocked Timer                                         ONESHOT 1,2 \BE
  2865.  
  2866.     Purpose:  Signal an event after a given number of clock ticks, with
  2867.        optional delay.  Based on an external clock speed.
  2868.  
  2869.     Output:  After an optional delay, goes from 0 to 1, then returns to 0
  2870.        again.
  2871.  
  2872.     Clock (heart) input:  Any non-zero after zero will increment the
  2873.        internal counters.
  2874.  
  2875.     Strobe "!" input:  A zero to non-zero transition starts the timer.
  2876.        Further inputs are ignored until the module completes its cycle.
  2877.  
  2878.     Delay "d" input:  Number of clocks delay, after the Strobe input is
  2879.        clocked before output goes to 1.  When 0, there is no delay.
  2880.  
  2881.     Hold "h" input:  Number of clocks the pulse will remain on.  When 0,
  2882.        the output will not return to zero.  This is useful when used with
  2883.        the "d" input to control an event start that will never retrigger.
  2884.  
  2885.  
  2886.  
  2887.  
  2888.  
  2889.  
  2890.  
  2891.  
  2892.  
  2893.  
  2894.  
  2895.  
  2896.  
  2897.  
  2898.  
  2899.  
  2900.  
  2901.  
  2902.  
  2903.                                    44
  2904.  
  2905.  
  2906.  
  2907.     ----------------------------------------------------------------------
  2908.     Absolute Timer                                        ONESHOT 2,1 \BC
  2909.  
  2910.     Purpose:  Signal an event after a given time setting, with optional
  2911.        delay.  One-shot timer based on the internal 580 ticks/second
  2912.        real-time clock speed, which is independent of the Tempo setting
  2913.        of the Alpha module.
  2914.  
  2915.     Output:  After an optional delay, goes from 0 to 1, then returns to 0
  2916.        again.
  2917.  
  2918.     Strobe "!" input:  A zero to non-zero transition starts the timer.
  2919.        Further inputs are ignored until the module completes its cycle.
  2920.  
  2921.     Delay "d" input:  Number of clocks delay, after the Strobe input is
  2922.        clocked, before output goes to 1.  When 0, there is no delay.
  2923.  
  2924.     Hold "h" input:  Number of clocks the pulse will remain on.  When 0,
  2925.        the output will not return to zero.  This is useful when used with
  2926.        the "d" input to control an event start that will never retrigger.
  2927.  
  2928.     Shift ">>" input:  Reduce the count period by powers of 2.  A value
  2929.        of 1 will reduce the period by 1/2, 2 by 1/4, 3 by 1/8, etc.
  2930.  
  2931.     ----------------------------------------------------------------------
  2932.     Seconds Timer                                         ONESHOT 2,2 \BD
  2933.  
  2934.     Purpose:  Signal an event after a given time setting, with optional
  2935.        delay.  One-shot timer based on the internal 1/second real-time
  2936.        clock speed, which is independent of the Tempo setting of the
  2937.        Alpha module.
  2938.  
  2939.     Output:  After an optional delay, goes from 0 to 1, then returns to 0
  2940.        again.
  2941.  
  2942.     Strobe "!" input:  A zero to non-zero transition starts the timer.
  2943.        Further inputs are ignored until the module completes its cycle.
  2944.  
  2945.     Delay "d" input:  Number of clocks delay, after the Strobe input is
  2946.        clocked, before output goes to 1.  When 0, there is no delay.
  2947.  
  2948.     Hold "h" input:  Number of clocks the pulse will remain on.  When 0,
  2949.        the output will not return to zero.  This is useful when used with
  2950.        the "d" input to control an event start that will never retrigger.
  2951.  
  2952.     Shift ">>" input:  Reduce the count period by powers of 2.  A value
  2953.        of 1 will reduce the period by 1/2, 2 by 1/4, 3 by 1/8, etc.
  2954.  
  2955.  
  2956.  
  2957.  
  2958.  
  2959.  
  2960.  
  2961.  
  2962.  
  2963.  
  2964.  
  2965.  
  2966.  
  2967.  
  2968.  
  2969.                                    45
  2970.  
  2971.  
  2972.  
  2973.     ----------------------------------------------------------------------
  2974.     Strobe Pushbutton                                     ONESHOT 3,1 \09
  2975.  
  2976.     Output: ON pulse, returning to OFF.
  2977.  
  2978.     Magenta User Input:  Clicking the left mouse button when the cursor
  2979.        is over magenta user input pad will change the output from 0 to 1
  2980.        for 1 calculation cycle, then return to 0.
  2981.  
  2982.     ----------------------------------------------------------------------
  2983.     Gate Pushbutton                                       ONESHOT 3,2 \E3
  2984.  
  2985.     Output: 0/1
  2986.  
  2987.     Magenta User Input:  Clicking the left mouse button when the cursor
  2988.        is over magenta user input pad will change the output from 0 to 1
  2989.        (or from 1 to 0).
  2990.  
  2991.     ----------------------------------------------------------------------
  2992.     Step Pushbutton                                       ONESHOT 3,3 \12
  2993.  
  2994.     Output: 0-FF (hex)
  2995.  
  2996.     Magenta User "#" Input:  This value is echoed to the output.
  2997.  
  2998.     Magenta User (up & down arrows) Input:  Clicking the left mouse
  2999.        button when the cursor is over the left side of the magenta input
  3000.        pad will increment the value at the output, the right side of the
  3001.        pad will decrement the output.
  3002.  
  3003.  
  3004.  
  3005.  
  3006.  
  3007.  
  3008.  
  3009.  
  3010.  
  3011.  
  3012.  
  3013.  
  3014.  
  3015.  
  3016.  
  3017.  
  3018.  
  3019.  
  3020.  
  3021.  
  3022.  
  3023.  
  3024.  
  3025.  
  3026.  
  3027.  
  3028.  
  3029.  
  3030.  
  3031.  
  3032.  
  3033.  
  3034.  
  3035.                                    46
  3036.  
  3037.  
  3038.  
  3039.     ======================================================================
  3040.                                  TEST MODULES
  3041.  
  3042.     This group of modules will test for a particular condition, and
  3043.     report TRUE (output=1, red tag indicator highlighted) if the
  3044.     condition is met, and FALSE (output=0, red tag indicator not
  3045.     highlighted), if the condition is not met.
  3046.  
  3047.     ----------------------------------------------------------------------
  3048.     Zero?                                                    TEST 1,1 \07
  3049.  
  3050.     Output: TRUE if the Value input is zero, else FALSE.
  3051.  
  3052.     Value "-->" input: Any value.
  3053.  
  3054.     ----------------------------------------------------------------------
  3055.     Equal?                                                   TEST 1,2   =
  3056.  
  3057.     Output: TRUE if the two Value inputs are equal, else FALSE.
  3058.  
  3059.     Value "-->" inputs: Any value.
  3060.  
  3061.     ----------------------------------------------------------------------
  3062.     Different?                                               TEST 1,3 \A7
  3063.  
  3064.     Output: TRUE if the two Value inputs are not equal, else FALSE.
  3065.  
  3066.     Value "-->" inputs: Any value.
  3067.  
  3068.     ----------------------------------------------------------------------
  3069.     Greater?                                                 TEST 2,1   >
  3070.  
  3071.     Output:  TRUE if value input "a" is greater than value input "b",
  3072.        else FALSE.
  3073.  
  3074.     Value inputs "a" and "b":  Any value.
  3075.  
  3076.     ----------------------------------------------------------------------
  3077.     Less?                                                    TEST 2,2   <
  3078.  
  3079.     Output:  TRUE if value input "a" is less than value input "b", else
  3080.        FALSE.
  3081.  
  3082.     Value inputs "a" and "b":  Any value.
  3083.  
  3084.     ----------------------------------------------------------------------
  3085.     Within?                                                  TEST 2,3 \CA
  3086.  
  3087.     Output:  TRUE if Value input is within limits set by MAX input and
  3088.        MIN input, else FALSE.
  3089.  
  3090.     Value "-->" input: Any value.
  3091.  
  3092.     MAX (up arrow) input:  Upper limit of test condition, inclusive.
  3093.  
  3094.     MIN (down arrow) input: Lower limit of test condition, inclusive.
  3095.  
  3096.  
  3097.  
  3098.  
  3099.  
  3100.  
  3101.                                    47
  3102.  
  3103.  
  3104.  
  3105.     ----------------------------------------------------------------------
  3106.     True?                                                    TEST 3,1   "
  3107.  
  3108.     Output: TRUE if the Value input is non-zero, else FALSE.
  3109.  
  3110.     Value "-->" input: Any value.
  3111.  
  3112.     ----------------------------------------------------------------------
  3113.     Negative?                                                TEST 3,2 \A4
  3114.  
  3115.     Output:  True if the input value is greater than 7F hex, 127 decimal.
  3116.        Since all displayed values are in the range of 0-FF hex, values
  3117.        greater than 7F hex can be treated as negative numbers.  FF hex is
  3118.        equivalent to -1, FE hex to -2, and so on. The module also is
  3119.        useful for warning when an output value is beyond the legal MIDI
  3120.        range of 0-7F hex.
  3121.  
  3122.     Value "-->" input: Any value.
  3123.  
  3124.     ----------------------------------------------------------------------
  3125.     Bit Set                                                  TEST 3,3 \FE
  3126.  
  3127.     Purpose: Convert a zero/non-zero value to one of 8 individual bit
  3128.        positions in the output.
  3129.  
  3130.     Output:  8-bit value representing the ON/OFF state of the 8 Logic
  3131.        inputs.
  3132.  
  3133.     Logic "0" to "7" inputs:  From top to bottom, the zero/non-zero state
  3134.        of these inputs are translated to ON/OFF bits positioned from
  3135.        right to left in the 8 bit Output value.
  3136.  
  3137.  
  3138.  
  3139.  
  3140.  
  3141.  
  3142.  
  3143.  
  3144.  
  3145.  
  3146.  
  3147.  
  3148.  
  3149.  
  3150.  
  3151.  
  3152.  
  3153.  
  3154.  
  3155.  
  3156.  
  3157.  
  3158.  
  3159.  
  3160.  
  3161.  
  3162.  
  3163.  
  3164.  
  3165.  
  3166.  
  3167.                                    48
  3168.  
  3169.  
  3170.  
  3171.     ======================================================================
  3172.                                 RANDOM MODULES
  3173.     ----------------------------------------------------------------------
  3174.     Random Number Generator                                RANDOM 1,1   ?
  3175.  
  3176.     Output:  A random number within set limits.  Uses a simple, fast
  3177.        algorithm to produce a uniformly distributed pseudo random value.
  3178.  
  3179.     Clock (heart) input:  Non-zero after zero will cause a new random
  3180.        number to be generated.
  3181.  
  3182.     Hold (check) input:  Non-zero resets the seed to the value at the
  3183.        Seed input, and holds output at that value.  If two modules have
  3184.        the same seed value, and they are given a hold pulse at the same
  3185.        time, they will then produce exactly the same string of random
  3186.        numbers.  This is also the effect of Alpha module Random Reset
  3187.        input.  However, the Alpha hold input simply freezes the output, 
  3188.        and does not generate a new seed.
  3189.  
  3190.     Seed "S" input:  The seed value for a new random number run.  The
  3191.        module is capable of producing 256 different random runs, one for
  3192.        each possible seed value of 0-FF hex.  After setting the new seed
  3193.        value, a Hold or a Alpha Random Reset is required put it into
  3194.        effect.  Note that for the module to produce a unique set of
  3195.        random numbers, it must be started with a unique seed. Conversely,
  3196.        two or more modules will have the same set of numbers if they are
  3197.        given the same seed value.
  3198.  
  3199.     Limit (up-arrow) input:  Set upper limit that can be generated.
  3200.        Exclusive: a setting of 8 will produce 0-7.
  3201.  
  3202.     Offset "+" input:  Added to the current output.
  3203.  
  3204.  
  3205.  
  3206.  
  3207.  
  3208.  
  3209.  
  3210.  
  3211.  
  3212.  
  3213.  
  3214.  
  3215.  
  3216.  
  3217.  
  3218.  
  3219.  
  3220.  
  3221.  
  3222.  
  3223.  
  3224.  
  3225.  
  3226.  
  3227.  
  3228.  
  3229.  
  3230.  
  3231.  
  3232.  
  3233.                                    49
  3234.  
  3235.  
  3236.  
  3237.     ----------------------------------------------------------------------
  3238.     Up/Down Random Number Generator                        RANDOM 1,2 \A8
  3239.  
  3240.     Output:  A random number within set limits.  Uses program code as the
  3241.        random number source, allowing successive numbers to be accessed
  3242.        as a forward or backward run, at some sacrifice of uniformity in
  3243.        distribution.
  3244.  
  3245.     Clock (heart) input:  Non-zero after zero will cause a new random
  3246.        number to be generated.
  3247.  
  3248.     Hold (check) input:  Non-zero resets the seed to the value at the
  3249.        Seed input, and holds output at that value.  If two modules have
  3250.        the same seed value, and they are given a hold pulse at the same
  3251.        time, they will then produce exactly the same string of random
  3252.        numbers.  This is also the effect of Alpha module Random Reset
  3253.        input.  However, the Alpha Hold simply freezes the output, and
  3254.        does not generate a new seed.
  3255.  
  3256.     Seed "S" input:  The seed value for a new random number run.  The
  3257.        module is capable of producing 256 different random runs, one for
  3258.        each possible seed value of 0-FF hex.  After setting the new seed
  3259.        value, a Hold or a Alpha Random Reset is required put it into
  3260.        effect.  Note that for the module to produce a unique set of
  3261.        random numbers, it must be started with a unique seed. Conversely,
  3262.        two or more modules will have the same set of numbers if they are
  3263.        given the same seed value.
  3264.  
  3265.     Up/down "+/-" input:  Changing from zero to non-zero (or vice versa)
  3266.        changes the direction of the random number run, causing successive
  3267.        numbers to be repeated in an inverse run.
  3268.  
  3269.     Limit (up-arrow) input:  Set upper limit that can be generated.
  3270.        Exclusive: a setting of 8 will produce 0-7.
  3271.  
  3272.     ----------------------------------------------------------------------
  3273.     Random Logic                                           RANDOM 1,3 \AD
  3274.  
  3275.     Output:  TRUE (1) or FALSE (0) at 50% probability.
  3276.  
  3277.     Clock (heart) input:  Any non-zero after zero will cause a new output
  3278.        to be generated.
  3279.  
  3280.  
  3281.  
  3282.  
  3283.  
  3284.  
  3285.  
  3286.  
  3287.  
  3288.  
  3289.  
  3290.  
  3291.  
  3292.  
  3293.  
  3294.  
  3295.  
  3296.  
  3297.  
  3298.  
  3299.                                    50
  3300.  
  3301.  
  3302.  
  3303.     ----------------------------------------------------------------------
  3304.     Dither Logic                                           RANDOM 2,1 \04
  3305.  
  3306.     Output:  TRUE (1) or FALSE (0), the probability of which is set by
  3307.        the Dither input.
  3308.  
  3309.     Clock (heart) input:  Any non-zero after zero will cause a new output
  3310.        to be generated.
  3311.  
  3312.     Dither "%" input:  The value at this input is compared to an
  3313.        internally generated random number in the range of 0-FF (hex).  If
  3314.        the the value is greater than the random number, the output will
  3315.        be TRUE, if less or equal it will be FALSE.  The effect of this is
  3316.        the higher the Dither value, the more often the output will be
  3317.        TRUE.  If the value is 0, the output will always be FALSE; if 40
  3318.        (hex), it will be TRUE 1/4 of the time; if 80 (hex), it will be
  3319.        TRUE 1/2 of the time; if C0 (hex), it will be TRUE 3/4 of the
  3320.        time; if FF (hex) it will be TRUE 255/256 of the time.
  3321.  
  3322.     ----------------------------------------------------------------------
  3323.     Dither Toggle Switch                                   RANDOM 2,2 \05
  3324.  
  3325.     Output:  A copy of the Value input or 0, the probability of which is
  3326.        set by the Dither input.
  3327.  
  3328.     Clock (heart) input:  Any non-zero after zero will cause a new output
  3329.        to be generated.
  3330.  
  3331.     Dither "%" input:  The value at this input is compared to an
  3332.        internally generated random number in the range of 0-FF (hex).  If
  3333.        the the value is greater than the random number, the output will
  3334.        be a copy of the Value input, if less or equal it will be 0.  A
  3335.        value of 20 (hex) will switch to the Value input 1/8 of the time,
  3336.        and to 0 7/8 of the time.
  3337.  
  3338.     Value "-->" input:  Any value.
  3339.  
  3340.     ----------------------------------------------------------------------
  3341.     Dither Switch                                          RANDOM 2,3 \06
  3342.  
  3343.     Output:  A copy of the value at input "a" or "b", the probability of
  3344.        which is set by the Dither input.
  3345.  
  3346.     Clock (heart) input:  Any non-zero after zero will cause a new output
  3347.        to be generated.
  3348.  
  3349.     Dither "%" input:  The value at this input is compared to an
  3350.        internally generated random number in the range of 0-FF (hex).  If
  3351.        the the value is greater than the random number, the output will
  3352.        be a copy of the "b" input, if less or equal it will be a copy of
  3353.        the "a" input.  A value of 40 (hex) will switch to the "a" input
  3354.        3/4 of the time, and to the "b" input 1/4 of the time.
  3355.  
  3356.     Value "a" and "b" inputs:  Any value.
  3357.  
  3358.     Offset "+" input:  Added to the current output.
  3359.  
  3360.  
  3361.  
  3362.  
  3363.  
  3364.  
  3365.                                    51
  3366.  
  3367.  
  3368.  
  3369.     ----------------------------------------------------------------------
  3370.     Odds Switch                                            RANDOM 3,1 \AC
  3371.  
  3372.     Output:  A copy of the value at input "a", "b", "c", or "d", with the
  3373.        odds of selecting a particular input geometrically decreasing.
  3374.        Odds of selecting the "a" input is 1:2, of "b" is 1:4, of "c" is
  3375.        1:8, of "d" is 1:16.
  3376.  
  3377.     Clock (heart) input:  Any non-zero after zero will cause a new input
  3378.        to be selected.
  3379.  
  3380.     Inputs "a", "b", "c", and "d":  Any value.
  3381.  
  3382.     Offset "+" input:  Added to the current output.
  3383.  
  3384.     ----------------------------------------------------------------------
  3385.     Odds Generator                                         RANDOM 3,2 \84
  3386.  
  3387.     Output:  One of the numbers 0-7 with the odds of generating a
  3388.        particular number geometrically decreasing.  Odds of producing 0
  3389.        is 1:2, of 1 is 1:4, of 2 is 1:8, .... , of 7 is 1:256.
  3390.  
  3391.     Clock input:  Any non-zero after zero will cause a new number to be
  3392.        generated.
  3393.  
  3394.     ----------------------------------------------------------------------
  3395.     Interference Pattern Dither                            RANDOM 3,3 \8E
  3396.  
  3397.     Purpose:  Generate a pattern by the interference of up to four
  3398.     independent dither inputs.
  3399.  
  3400.     Output:  Values of 0 - F (hex), weighted according to dither input
  3401.        values.
  3402.  
  3403.     Clock (heart) input:  Any non-zero after zero will cause a new output
  3404.        to be generated.
  3405.  
  3406.     Dither "%" inputs:  These four dither values each determine the
  3407.        frequency weighting of a bit position of the output value that
  3408.        will be on or off.  If only the first is used, the output pattern
  3409.        will be 0 - 1.  If the first two are used the pattern will be 0 -
  3410.        3, etc. When set to zero, the inputs are disabled.
  3411.  
  3412.  
  3413.  
  3414.  
  3415.  
  3416.  
  3417.  
  3418.  
  3419.  
  3420.  
  3421.  
  3422.  
  3423.  
  3424.  
  3425.  
  3426.  
  3427.  
  3428.  
  3429.  
  3430.  
  3431.                                    52
  3432.  
  3433.  
  3434.  
  3435.     ======================================================================
  3436.                                PATTERN MODULES
  3437.     ----------------------------------------------------------------------
  3438.     Interval Generator                                    PATTERN 1,1   !
  3439.     Pattern  Generator                                    PATTERN 1,2 \13
  3440.  
  3441.     Purpose:  Generate a new pattern for the Chord Value Reader modules
  3442.        to read. The two modules are identical, except that the Interval
  3443.        Generator has one value input and three inputs that are offsets to
  3444.        the base value, where the Pattern Generator has four independent
  3445.        value inputs.
  3446.  
  3447.     Output:  Address of the base value, 0-3.  This is always 0 unless the
  3448.        Sort input is ON.  After a sort, it is sometimes useful to know
  3449.        where the base value went.
  3450.  
  3451.     Page (paragraph symbol) input:  These modules, plus the two Chord
  3452.        Value Reader modules and the Chord Value Writer module all use a
  3453.        group of sixteen four-byte memory cells as the data area. The Page
  3454.        input determines which of the 16 different chord groups is to be
  3455.        used.
  3456.  
  3457.     Base value "-->" input:  This input will go to the zeroth (base) cell
  3458.        in the chord group.
  3459.  
  3460.     Interval value ">>" inputs to Interval Generator:  These three inputs
  3461.       are each added to the Base value input, then they are sent to their
  3462.       respective locations in the chord group.
  3463.  
  3464.     Pattern value "-->" inputs to Pattern Generator:  These three inputs
  3465.        are each sent directly to their respective locations in the chord
  3466.        group.
  3467.  
  3468.     Octave normalize "o" flag input:  When non-zero, the four chord
  3469.        values will be normalized to the one octave range of 0 - 11.
  3470.  
  3471.     Offset "+" input:  This value is added to the four chord values.  If
  3472.        the octave normalize flag is non-zero, the offset value will be
  3473.        added AFTER normalizing.
  3474.  
  3475.     Sort "<->" flag input:  When non-zero, the four chord values will be
  3476.        sorted in ascending order prior to writing them to the chord group
  3477.        table.
  3478.  
  3479.     Octave fold "f" input:  Active when Sort flag is non-zero.  Sets the
  3480.        octave range within which the four chord values will be folded.  0
  3481.        sets a range of 0-11, 1 sets 0-23, 2 sets 0-35, etc.
  3482.  
  3483.     Write Strobe "!" input:  Non-zero after zero will cause a the
  3484.        currently paged four-value chord group to be written with the
  3485.        module's values.
  3486.  
  3487.  
  3488.  
  3489.  
  3490.  
  3491.  
  3492.  
  3493.  
  3494.  
  3495.  
  3496.  
  3497.                                    53
  3498.  
  3499.  
  3500.  
  3501.     ----------------------------------------------------------------------
  3502.     Chord Value Writer                                    PATTERN 1,3   @
  3503.  
  3504.     Purpose:  Allow writing to individual values of the chord table.
  3505.  
  3506.     Output:  Previous value.
  3507.  
  3508.     Page (paragraph symbol) input:  Set which of the 16 different chord
  3509.        groups is to be written to.
  3510.  
  3511.     Position "@" input:  Determines the position in the four-value chord
  3512.        table to which the input will be written.  Zero writes to the
  3513.        first value in the table, one writes to the second, etc.
  3514.  
  3515.     Value "-->" input:  This input will go to the addressed cell in the
  3516.        chord group.
  3517.  
  3518.     Octave normalize "o" flag input:  When non-zero, the input value will
  3519.        be normalized to the one octave range of 0 - 11.
  3520.  
  3521.     Offset "+" input:  This value is added to the input value prior to
  3522.        writing to the chord table.  If the octave normalize flag is non-
  3523.        zero, the offset value will be added AFTER normalizing.
  3524.  
  3525.     Write Strobe "!" input:  Non-zero after zero will cause the addressed
  3526.        chord table value to be replaced by the module's current value
  3527.        input. The previous chord table value is sent to the output.
  3528.  
  3529.     ----------------------------------------------------------------------
  3530.     Chord Value Reader                                    PATTERN 2,1 \80
  3531.     Chord Value Reader                                    PATTERN 2,2 \87
  3532.  
  3533.     Purpose:  Up to four modules can be used together to read chords, or
  3534.        single modules can be used to generate patterns. The two modules
  3535.        are identical.  Two are given to allow up to 32 copies of the
  3536.        module, rather than the usual 16.
  3537.  
  3538.     Clock (heart) input:  Any non-zero after zero will cause a new output
  3539.        to be generated.
  3540.  
  3541.     Page (paragraph symbol) input:  Set which of the 16 different chord
  3542.        groups is to be read from.
  3543.  
  3544.     Position/Order "@" input:  When the Sort input is zero, this input
  3545.        determines the position in the four-value chord table from which
  3546.        the output will be read.  Zero reads the first value in the table,
  3547.        one reads the second, etc.  When the Sort is non-zero, this input
  3548.        determines the ascending order that will be read.  Zero reads the
  3549.        lowest of the four values, one reads the next higher, etc.
  3550.  
  3551.     Sort "<->" flag input:  When non-zero, the module will determine the
  3552.        ascending order of the values in the chord table, and  send the
  3553.        value selected by the Order input to the output.  The actual
  3554.        position of the values in the chord table is unchanged.
  3555.  
  3556.     Offset "+" input:  This value is added to the output.
  3557.  
  3558.  
  3559.  
  3560.  
  3561.  
  3562.  
  3563.                                    54
  3564.  
  3565.  
  3566.  
  3567.     ----------------------------------------------------------------------
  3568.     Pattern Line Generator                                PATTERN 3,1   :
  3569.  
  3570.     Purpose:  Generate a pattern line for bass patterns, etc. by adding
  3571.        or subtracting an input value with the current output value.
  3572.  
  3573.     Output: Accumulated pattern value.
  3574.  
  3575.     Clock (heart) input:  Any non-zero after zero will cause a new output
  3576.        to be generated.
  3577.  
  3578.     Hold (check) input:  When non-zero, output will hold at its current
  3579.        setting, and the clock input is ignored.
  3580.  
  3581.     Reset "!" strobe:  Non-zero after zero causes the Start value input
  3582.        to be sent to the output.
  3583.  
  3584.     Start value "-->" input:  Value that starts the module after a reset,
  3585.        and the value that the module returns to when an overflow beyond
  3586.        the Range limit is detected.  Acts as a "center" to the pattern
  3587.        that will be generated.
  3588.  
  3589.     Range limit "#" value:  Sets the limit above and below the Start
  3590.        value.  When the output plus the next step exceeds this limit, the
  3591.        module automatically resets to the Start value.  Must be greater
  3592.        than zero for a pattern to be generated.
  3593.  
  3594.     Up/Down "+/-" input:  Add "+" input to the output if zero, subtract
  3595.        "-" input from the output if non-zero.
  3596.  
  3597.     Positive value "+" input:  Any value.
  3598.  
  3599.     Negative value "-" input:  Any value.
  3600.  
  3601.     ----------------------------------------------------------------------
  3602.     Tone Row Generator                                    PATTERN 3,2 \EC
  3603.  
  3604.     Purpose:  Produce a 12 note tone row.  The values are 0-11, non-
  3605.        repeating.  The order is randomized each time a Strobe input is
  3606.        given.
  3607.  
  3608.     Output:  Value of 0 - 11, as accessed by the Address input, and as
  3609.        ordered by the most recent Strobe.
  3610.  
  3611.     Address "@" input:  Values of 0-11 will address one of the 12 tone
  3612.        values in the tone row.  Values greater than 11 are normalized to
  3613.        the 0 - 11 range.
  3614.  
  3615.     Strobe "!" input:  Non-zero after zero will cause a new tone row to
  3616.     be generated.
  3617.  
  3618.  
  3619.  
  3620.  
  3621.  
  3622.  
  3623.  
  3624.  
  3625.  
  3626.  
  3627.  
  3628.  
  3629.                                    55
  3630.  
  3631.  
  3632.  
  3633.     ----------------------------------------------------------------------
  3634.     Interference Pattern Generator                        PATTERN 3,3 \8F
  3635.  
  3636.     Purpose:  Generate a pattern by the interference of up to four
  3637.        independent strobe inputs.
  3638.  
  3639.     Output:  Values of 0 - F (hex), according to Strobe input pattern.
  3640.  
  3641.     Clock (heart) input:  Any non-zero after zero will cause a new output
  3642.        to be generated.
  3643.  
  3644.     Strobe "!" inputs:  These four input strobes each determine a bit
  3645.        position of the output value that will be on or off.  If only the
  3646.        first is used, the output pattern will be 0 - 1.  If the first two
  3647.        are used the pattern will be 0 - 3, etc.
  3648.  
  3649.  
  3650.  
  3651.  
  3652.  
  3653.  
  3654.  
  3655.  
  3656.  
  3657.  
  3658.  
  3659.  
  3660.  
  3661.  
  3662.  
  3663.  
  3664.  
  3665.  
  3666.  
  3667.  
  3668.  
  3669.  
  3670.  
  3671.  
  3672.  
  3673.  
  3674.  
  3675.  
  3676.  
  3677.  
  3678.  
  3679.  
  3680.  
  3681.  
  3682.  
  3683.  
  3684.  
  3685.  
  3686.  
  3687.  
  3688.  
  3689.  
  3690.  
  3691.  
  3692.  
  3693.  
  3694.  
  3695.                                    56
  3696.  
  3697.  
  3698.  
  3699.     ======================================================================
  3700.                                 MIDI MODULES
  3701.  
  3702.     These modules typically go at the end of the computation loop
  3703.     (highest priority numbers). This is important because when the
  3704.     computer calculates a value after sending a previous value to the
  3705.     output, a glitch may be heard that is the result of the sound being
  3706.     delayed one MIDI clock cycle.
  3707.  
  3708.     As their function is to send data out of the computer, usually to a
  3709.     MIDI device (rather than to another module), most do not have the
  3710.     cyan module output display.
  3711.  
  3712.     ----------------------------------------------------------------------
  3713.     MIDI Note                                                MIDI 1,1   1
  3714.     MIDI Note                                                MIDI 1,2   2
  3715.     MIDI Note                                                MIDI 1,3   3
  3716.     MIDI Note                                                MIDI 1,4   4
  3717.  
  3718.     Purpose:  MIDI Key on/Key off output channel(s) for up to 4 notes at
  3719.        a time. The four modules are identical.  Two are given to allow up
  3720.        to 64 copies of the module, rather than the usual 16.
  3721.  
  3722.     Channel "c" input:  MIDI channel number.  If two MPU's are used, 32
  3723.        MIDI channels are possible, with 0-F hex going to MIDI channels 1-
  3724.        16 on the first MPU, and 10-1F hex going to MIDI channels 1-16 on
  3725.        the second MPU.
  3726.  
  3727.     Mute "/0/" and "&" inputs:  These two inputs are internally ANDed, if
  3728.        the result is non-zero, MIDI output is enabled, and the red dot in
  3729.        the label is highlighted; if zero, MIDI output is inhibited.  The
  3730.        input pair is optimized for usage with the Mute module, described
  3731.        in the chapter "SPECIAL".
  3732.  
  3733.     Transpose "t" inputs:  These two inputs are identical.  The values
  3734.        are summed and then added to each of the 4 Note value inputs prior
  3735.        to sending them to MIDI.  The obvious way to use this input is to
  3736.        transpose all the Note inputs by the same value.  A less obvious
  3737.        use is to set the Note inputs to base chord values (a major triad,
  3738.        for example would be 0, 4, and 7; a minor triad would be 0, 3, and
  3739.        7), then set the Velocity inputs as desired, then use the
  3740.        Transpose input to play chords.
  3741.  
  3742.     Velocity Offset "v" input:  This is similar to the Transpose input
  3743.        above, except that the value is added to the 4 Velocity inputs.
  3744.        Also, to avoid sending out notes with zero values from unused
  3745.        Note/Velocity inputs, the Velocity Offset only affects "in use"
  3746.        Velocity values.  It will not generate new notes by setting it to
  3747.        zero, then to some value.
  3748.  
  3749.     Key Release "r" input:  The velocity value sent with Key Off for each
  3750.        of the 4 Note inputs.  Most synthesizers ignore release velocity.
  3751.  
  3752.  
  3753.  
  3754.  
  3755.  
  3756.  
  3757.  
  3758.  
  3759.  
  3760.  
  3761.                                    57
  3762.  
  3763.  
  3764.  
  3765.  
  3766.     Inputs "A" to "D":  Keyboard note values.
  3767.     Inputs "a" to "d":  Keyboard velocity values.
  3768.  
  3769.        These 4 pairs of inputs allow the module to play up to 4 notes
  3770.        polyphonically.  (If more than 4 poly notes are needed, two or
  3771.        more modules may be given the same MIDI channel number.) The upper
  3772.        case inputs accept the MIDI note value of 0-7F hex, with 3C
  3773.        hex equivalent to Middle C.  The corresponding lower case inputs
  3774.        send polyphonic Key-on velocity.
  3775.  
  3776.        Note values are sent when changed. Velocity changes are ignored
  3777.        except zero transitions.  When Velocity = 0, a Key-off message is
  3778.        sent with the currently saved note and with the velocity taken
  3779.        fromn the "r" input; the first non-zero Velocity seen will send a
  3780.        Key-on message with the note value at the input, and the given
  3781.        velocity level. While Velocity stays non-zero, any change in note
  3782.        values will cause an immediate Key-off message with the old note,
  3783.        then a Key on message with the new note, and the latest Velocity
  3784.        value for that note.
  3785.  
  3786.        MIDI protocol requires that a key-on message be balanced by a
  3787.        corresponding key-off message (or key-on with velocity set to 0).
  3788.        To simplify the module's use, and to reduce the likelihood of
  3789.        producing a "stuck note", the module must handle key-on/key-off
  3790.        messages in an intelligent (for a computer) manner.
  3791.  
  3792.        This module applies the following rules to changes detected in the
  3793.        note and velocity value inputs:
  3794.  
  3795.          1.  If pitch changes, and velocity is zero, nothing happens.
  3796.          2.  If pitch changes, and velocity is non-zero, the preceding
  3797.              note value is sent with a key-off message, then the new
  3798.              note value is immediately sent with a key-on message and the
  3799.              currently set velocity value.
  3800.          3.  When the velocity input goes from zero to non-zero, a key-on
  3801.              message is sent with the current note and velocity values.
  3802.          4.  When the velocity input goes from non-zero to zero, a
  3803.              key-off message is sent for the currently sounding note.
  3804.  
  3805.        Translation:  If there is anything other than zero at the velocity
  3806.        input, a change in the note input will cause a new note to play.
  3807.        Changes in the velocity input of zero to non-zero (such as a clock
  3808.        would produce) will turn a note off and on.
  3809.  
  3810.     ----------------------------------------------------------------------
  3811.     MIDI Control Output                                      MIDI 2,1 \99
  3812.     MIDI Control Output                                      MIDI 2,2 \9A
  3813.  
  3814.     Purpose:  MIDI output module for various control messages.  Sends
  3815.        Patch Change, Aftertouch, Pitch Bend,  and 8 Control Change
  3816.        messages. All parameters are sent when changed. The two modules
  3817.        use different Control Change maps (see chapter "SYSTEM" for
  3818.        details), but otherwise are identical. Two are given to allow up
  3819.        to 32 copies of the module, rather than the usual 16.
  3820.  
  3821.     Channel "c" input:  MIDI channel number.  If two MPU's are used, 32
  3822.        MIDI channels are possible, with 0-F hex going to MIDI channels 1-
  3823.        16 on the first MPU, and 10-1F hex going to MIDI channels 1-16 on
  3824.        the second MPU.
  3825.  
  3826.  
  3827.                                    58
  3828.  
  3829.  
  3830.  
  3831.  
  3832.     Hold (check) input: If zero, MIDI output is enabled, and the red dot
  3833.        in the label is highlighted; if non-zero, MIDI output is inhibited.
  3834.  
  3835.     Program Change "Pt" input:  MIDI Program Number to be sent.
  3836.  
  3837.     Aftertouch "a" input:  Sends Channel Key Pressure (Aftertouch)
  3838.        message, followed by input value.  Note that this is the
  3839.        aftertouch message that affects all notes on that MIDI channel,
  3840.        not the individual key aftertouch message (which is generally not
  3841.        supported by synthesizer manufacturers).
  3842.  
  3843.     Pitch Bend "b" input:  Sends MIDI Pitch Bend Message. This input
  3844.        allows a range of 0 FF hex, with 80 hex as the midway setting (as
  3845.        seen on most synth Pitch Bend control wheels).
  3846.  
  3847.     Control Change "V", "M", "A-D", and "1-2" inputs:  Sends MIDI Control
  3848.        Change messages.  The actual Control Change number is set by one
  3849.        of the two the Control Map modules (see chapter on SYSTEM
  3850.        modules). Inputs "1" and "2" are for on/off values, they force all
  3851.        non-zero input values to 127 before sending them out to MIDI.
  3852.  
  3853.        Default Control Change message values, with Yamaha's names:
  3854.  
  3855.                V  =  7  =  Volume
  3856.                M  =  1  =  Modulation Wheel
  3857.                A  =  2  =  Breath Controller
  3858.                B  =  3  =  Unspecified
  3859.                C  =  4  =  Foot Controller
  3860.                D  =  5  =  Portamento Time
  3861.                1  =  64 =  Sustain Foot Switch
  3862.                2  =  65 =  Portamento Foot Switch
  3863.  
  3864.     ----------------------------------------------------------------------
  3865.     MIDI Program Change                                      MIDI 2,3 \9E
  3866.  
  3867.     Purpose:  Change MIDI Patch programs.  Supplement to Program Change
  3868.     input of the MIDI Control Output module.
  3869.  
  3870.     Output: MIDI Program Number.
  3871.  
  3872.     Channel "c" input:  MIDI channel number.  If two MPU's are used, 32
  3873.        MIDI channels are possible, with 0-F hex going to MIDI channels 1-
  3874.        16 on the first MPU, and 10-1F hex going to MIDI channels 1-16 on
  3875.        the second MPU.
  3876.  
  3877.     Delay (right-angle) input:  Ammount of delay after sending program
  3878.        change.  To avoid loosing data when controlling MIDI matrix
  3879.        switchers, the MIDI output buffer is cleared prior to sending the
  3880.        patch change, and a delay can be inserted after the message is
  3881.        sent. Each count delays for 1/580 second.  A value of 3-4 is
  3882.        usually sufficient.  No delay if set to 0 (the default).
  3883.  
  3884.     Strobe "!" input:  Non-zero after zero sends the message.
  3885.  
  3886.     Value "-->" input:  Patch Change value that will be sent upon strobe.
  3887.        ANDed with 7F hex to limit the value to the legal MIDI range.
  3888.  
  3889.  
  3890.  
  3891.  
  3892.  
  3893.                                    59
  3894.  
  3895.  
  3896.  
  3897.     ----------------------------------------------------------------------
  3898.     MIDI Control Change                                      MIDI 2,4 \98
  3899.  
  3900.     Purpose:  Send MIDI Control Change message, Control Number, and
  3901.        Control Value to a MIDI output channel.
  3902.  
  3903.     Strobe "!" input:  Any non-zero after zero will initiate a send.
  3904.  
  3905.     Channel "c" input:  MIDI channel number.  If two MPU's are used, 32
  3906.        MIDI channels are possible, with 0-F hex going to MIDI channels 1-
  3907.        16 on the first MPU, and 10-1F hex going to MIDI channels 1-16 on
  3908.        the second MPU.
  3909.  
  3910.     Number "#" input:  MIDI Control Number to be sent.  ANDed with 7F
  3911.        hex to limit the value to the legal MIDI range.
  3912.  
  3913.     Value "-->" input:  MIDI Control Value to be sent.  ANDed with 7F hex.
  3914.  
  3915.     ----------------------------------------------------------------------
  3916.     MIDI System Exclusive Send                               MIDI 3,1 \11
  3917.  
  3918.     Purpose:  Send MIDI System Exclusive data to MIDI output.  Can be
  3919.        used for large sends of program data, or for small program change
  3920.        sends.  Uses the 64K sequencer data area "A".
  3921.  
  3922.     Output:  After a data send, the output will contain the 16 bit
  3923.        address of the end of the send +1, which could be the next
  3924.        available data block.  If there is an error, the output will read
  3925.        "FFFF".  Note that the output is 16 bits, rather than the usual 8.
  3926.        Use the shift input to read the high (Page) part.
  3927.  
  3928.     Address "@" input:  Specify the starting address of the 64K sequencer
  3929.        data area "A" from which the MIDI data send will start.
  3930.  
  3931.     Page (paragraph symbol) input:  Specify the starting page of the 64K
  3932.        sequencer data area "A".
  3933.  
  3934.     Strobe "!" input:  Initiate the send.  Module output is set to "XX",
  3935.       and flashes while data is being sent. Data is sent until a MIDI EOX
  3936.       (F7 hex) is found in the data stream.
  3937.  
  3938.     Shift ">>" input:  Number of shifts to perform on output display.
  3939.        Each left shift is the same as a division by 2.  A shift value of
  3940.        8 will return the Page count.
  3941.  
  3942.  
  3943.  
  3944.  
  3945.  
  3946.  
  3947.  
  3948.  
  3949.  
  3950.  
  3951.  
  3952.  
  3953.  
  3954.  
  3955.  
  3956.  
  3957.  
  3958.  
  3959.                                    60
  3960.  
  3961.  
  3962.  
  3963.     ----------------------------------------------------------------------
  3964.     MIDI System Exclusive Receive                            MIDI 3,2 \12
  3965.  
  3966.     Purpose:  Receive MIDI System Exclusive data from MIDI input.  Useful
  3967.        for receiving large dumps of program data.
  3968.  
  3969.     General:  This module is used in conjunction with the 64K sequencer
  3970.        data area "A", which is the data source for all System Exclusive
  3971.        receives.
  3972.  
  3973.     Output:  After a data receive, the output will contain the 16 bit
  3974.        address of the end of the receive +1, which could be the next
  3975.        available data block.  If there is an error, the output will read
  3976.        "FFFF".  Note that the output is 16 bits, rather than the usual 8.
  3977.        Use the shift input to read the high (Page) part.
  3978.  
  3979.     Address "@" input:  Specify the starting address of the 64K sequencer
  3980.        data area "A" that will receive the MIDI data.
  3981.  
  3982.     Page (paragraph symbol) input:  Specify the starting page of the 64K
  3983.        sequencer data area "A".
  3984.  
  3985.     Strobe "!" input:  Initiate the acceptance of a MIDI System Exclusive
  3986.        dump.  Module output is set to "XX", and flashes while data is
  3987.        being received.  Data is accepted until a MIDI EOX (F7 hex) is
  3988.        found in the data stream. If no EOX is detected after about 20
  3989.        seconds, the module will abort with an error.
  3990.  
  3991.     Shift ">>" input:  Number of shifts to perform on output display.
  3992.        Each left shift is the same as a division by 2.  A shift value of
  3993.        8 will return the Page count.
  3994.  
  3995.  
  3996.     ----------------------------------------------------------------------
  3997.     MIDI System Exclusive Short Send                         MIDI 3,3 \15
  3998.  
  3999.     Purpose:  Send a short System Exclusive message.  Ideal for such
  4000.        things as Voice Bank Change in the Yamaha FB01.
  4001.  
  4002.     Strobe "!" input:  Non-zero after zero initiates the send.
  4003.  
  4004.     Data "1-8" inputs:  System exclusive data area.  Up to 8 bytes can be
  4005.        sent.  If less than 8 bytes are to be sent, set the last byte to
  4006.        FF hex.  The status bytes (F0 hex to start and F7 hex to end) are
  4007.        sent by the module, so do NOT include them here.
  4008.  
  4009.  
  4010.  
  4011.  
  4012.  
  4013.  
  4014.  
  4015.  
  4016.  
  4017.  
  4018.  
  4019.  
  4020.  
  4021.  
  4022.  
  4023.  
  4024.  
  4025.                                    61
  4026.  
  4027.  
  4028.  
  4029.     ======================================================================
  4030.                                DISPLAY MODULES
  4031.     ----------------------------------------------------------------------
  4032.     Linear Level Meter                                    DISPLAY 1,1 \97
  4033.  
  4034.     Purpose:  VU meter type display of two value inputs.  The two
  4035.        vertical bars will be highlighted in proportion to the values at
  4036.        the left and right inputs.  This meter responds linearly:  the
  4037.        highlighted portion of the bar goes up one notch for each
  4038.        increment in the input value.
  4039.  
  4040.     Level "l" and "r" inputs:  Level inputs for the left and right meter
  4041.        columns.
  4042.  
  4043.     Range (divide) input:  Left and right input values will be divided by
  4044.        this value before being displayed.
  4045.  
  4046.     ----------------------------------------------------------------------
  4047.     Exponential Level Meter                               DISPLAY 1,2 \96
  4048.  
  4049.     Purpose:  VU meter type display of two value inputs.  The two
  4050.        vertical bars will be highlighted in proportion to the values at
  4051.        the left and right inputs.  This meter responds exponentially:
  4052.        the highlighted portion of the bar goes up one notch for each
  4053.        doubling of the input value.
  4054.  
  4055.     Level "l" and "r" inputs:  Level inputs for the left and right meter
  4056.        columns.
  4057.  
  4058.     Range "*" input:  Left and right input values will be multiplied by
  4059.        this value before being displayed.
  4060.  
  4061.     ----------------------------------------------------------------------
  4062.     ASCII Character Display                               DISPLAY 2,1 \A0
  4063.  
  4064.     Value "-->" inputs:  Any value in one of the three inputs will be
  4065.        displayed as a as an ASCII/IBM graphics character.  The first
  4066.        input displays the character in the leftmost position, the next in
  4067.        the middle, the third in the right.  Modules may be grouped
  4068.        together to form chartcter strings.
  4069.  
  4070.     ----------------------------------------------------------------------
  4071.     ASCII Character Display from sequencer area "A"       DISPLAY 2,2 \86
  4072.  
  4073.     Address "@" input:  Step address in the 65K byte sequencer area "A" at
  4074.     which to display three sequential bytes as ASCII/IBM graphics
  4075.     characters.  The addressed input is displayed as the character in the
  4076.     leftmost position, the next in the middle, the third in the right.
  4077.     Modules may be grouped together to form chartcter strings.
  4078.  
  4079.     Page (paragraph symbol) input:  Page number (high address) for the
  4080.        character display.
  4081.  
  4082.     Address shift (up-down arrow) input:  Shifts the given address by the
  4083.        amount given at this input.  This allows modules to be ganged
  4084.        together, but to be addressed by only one source.  This shift will
  4085.        go across page boundaries.  It is useful, for example, for
  4086.        displaying voice names of a synthesizer voice dump.
  4087.  
  4088.  
  4089.  
  4090.  
  4091.                                    62
  4092.  
  4093.  
  4094.  
  4095.     ----------------------------------------------------------------------
  4096.     ASCII Character Display from sequencer area "B"       DISPLAY 2,3 \83
  4097.  
  4098.     Address "@" input:  Step address in the 256 byte sequencer at which
  4099.        to display three sequential bytes as ASCII/IBM graphics
  4100.        characters.  The addressed input is displayed as the character in
  4101.        the leftmost position, the next in the middle, the third in the
  4102.        right. Modules may be grouped together to form chartcter strings.
  4103.  
  4104.     Page (paragraph symbol) input:  Page number (high address) for the
  4105.        character display.  Valid Page numbers are 0-F hex.
  4106.  
  4107.     Address shift (up-down arrow) input:  Shifts the given address by the
  4108.        amount given at this input.  This allows modules to be ganged
  4109.        together, but to be addressed by only one source.
  4110.  
  4111.     ----------------------------------------------------------------------
  4112.     Decimal Display                                       DISPLAY 3,1   .
  4113.  
  4114.     Value "-->" input:  Any value will be displayed in decimal.
  4115.  
  4116.     ----------------------------------------------------------------------
  4117.     Note Display                                          DISPLAY 3,2 \D5
  4118.  
  4119.     Value "-->" input:  Any value will be displayed as a as a
  4120.        note+octave.  Assumes C major scale ascending, with Octave 5 =
  4121.        Middle C.
  4122.  
  4123.     ----------------------------------------------------------------------
  4124.     Binary Display                                        DISPLAY 3,3   ;
  4125.  
  4126.     Value "-->" input:  Any value will be converted to one of 8 bit
  4127.        positions and highlighted if the bit is on, lowlighted if the bit
  4128.        is off.
  4129.  
  4130.  
  4131.  
  4132.  
  4133.  
  4134.  
  4135.  
  4136.  
  4137.  
  4138.  
  4139.  
  4140.  
  4141.  
  4142.  
  4143.  
  4144.  
  4145.  
  4146.  
  4147.  
  4148.  
  4149.  
  4150.  
  4151.  
  4152.  
  4153.  
  4154.  
  4155.  
  4156.  
  4157.                                    63
  4158.  
  4159.  
  4160.  
  4161.     ======================================================================
  4162.                                 SLEW MODULES
  4163.     ----------------------------------------------------------------------
  4164.     Peak/Valley Generator with internal clock                SLEW 1,1   i
  4165.     Peak/Valley Generator with internal clock                SLEW 1,2   j
  4166.  
  4167.     Purpose:  Generate a smooth path (always steps by 1) toward a
  4168.        bounded, randomly selected target.  Optomized to produce moving
  4169.        note velocity values.
  4170.  
  4171.     Output:  Always one more or less than last output, depending on
  4172.        direction of travel and whether the target has been reached. Upon
  4173.        reaching the internally generated random target, the up/down
  4174.        direction reverses.
  4175.  
  4176.     Count "c" input: Number of clocks before the next output value is
  4177.        calculated.
  4178.  
  4179.     Range (up-arrow) input: internally generated target is limited to
  4180.        one less than this value.  One fourth of this value is then added
  4181.        to the output as an automatic offset.  For example, if the range
  4182.        is 10 hex, actual values will range from 4 to 13 hex.
  4183.  
  4184.     ----------------------------------------------------------------------
  4185.     Peak/Valley Generator                                    SLEW 2,1   k
  4186.  
  4187.     Purpose:  Generate a smooth path (always steps by 1) toward a
  4188.        bounded, randomly selected target.
  4189.  
  4190.     Output:  Always one more or less than last output, depending on
  4191.        direction of travel and whether the target has been reached. Upon
  4192.        reaching the internally generated random target, the up/down
  4193.        direction reverses.
  4194.  
  4195.     Clock (heart) input: Any non-zero after zero causes the current output
  4196.        value to be incremented/decremented.
  4197.  
  4198.     Hold (check) input:  Non-zero holds current output.
  4199.  
  4200.     Range (up-arrow) input: internally generated target is limited to
  4201.        one less than this value.
  4202.  
  4203.     Offset + input: Added to the output.
  4204.  
  4205.     ----------------------------------------------------------------------
  4206.     Peak/Valley Generator with arbitrary step size           SLEW 2,2   l
  4207.  
  4208.     Purpose:  Generate a slope with arbitrary step size toward a bounded,
  4209.        randomly selected target.
  4210.  
  4211.     Output:  Last output (less offset) plus/minus the value of the step
  4212.        size, depending on direction of travel and whether the target has
  4213.        been reached. Upon reaching the internally generated random
  4214.        target, the up/down direction reverses.
  4215.  
  4216.     Clock (heart) input: Any non-zero after zero causes the current output
  4217.        value to be incremented/decremented.
  4218.  
  4219.     Hold (check) input:  Non-zero holds current output.
  4220.  
  4221.  
  4222.  
  4223.                                    64
  4224.  
  4225.  
  4226.  
  4227.     Range (up-arrow) input: internally generated target is limited to
  4228.        one less than this value.
  4229.  
  4230.     Step Size "+/-" input:  Any value, although large numbers will
  4231.        normally be of little use.
  4232.  
  4233.     Offset + input: Added to the output.
  4234.  
  4235.     ----------------------------------------------------------------------
  4236.     Fast Slew                                                SLEW 3,1 \E5
  4237.  
  4238.     Purpose:  Slew from value "a" to value "b" at rate "r".  Generally
  4239.       used for fast slews that do not need to step sequentially through
  4240.       each of the intermediate values.
  4241.  
  4242.     General:  Whenever a change is detected in either the "a" or the "b"
  4243.        input, the module will set the output to the value at the "a"
  4244.        input, then, each calculation cycle, it will decrement the output
  4245.        at a rate determined by the formula below, until the output
  4246.        reaches the value that was in the "b" input at the time the module
  4247.        started slewing.
  4248.  
  4249.        To slew from one value to another like an analog lag processor,
  4250.        plug the output into tha "a" input, and the value to be slewed
  4251.        into the "b" input.  Whenever the "b" input changes, the output
  4252.        will slew from the last value at "b" to the new value.
  4253.  
  4254.  
  4255.     Formula:
  4256.  
  4257.          initialize:
  4258.               input (a) * rate (r) --> sum (internal)
  4259.               input --> output
  4260.  
  4261.          thereafter until sum/rate = target (b):
  4262.               sum - input + target --> sum
  4263.               sum/rate             --> output
  4264.  
  4265.  
  4266.     Output:  Slewed input, according to the above formula.
  4267.  
  4268.     Start "a" input:  Any value.
  4269.  
  4270.     Target "b" input:  Any value.
  4271.  
  4272.     Rate "r" input:  Any value, but useful values are dependent on the
  4273.        slew speed, and the magnitude of the difference between the start
  4274.        and target inputs.  Values below about 10 (hex) are seldom useful.
  4275.  
  4276.     ----------------------------------------------------------------------
  4277.     Slow Slew                                                SLEW 3,2 \EB
  4278.  
  4279.     Purpose:  Slew from value "a" to value "b", over a cycle time "t".
  4280.        Generally used for slower slews, or for slews that must step
  4281.        sequentially through each of the intermediate values.
  4282.  
  4283.     General:  Whenever a change is detected in either the "a" or the "b"
  4284.        input, the module will set the output to the value at the "a"
  4285.        input, then, each calculation cycle, it will decrement the output
  4286.        at a rate determined by the formula below, until the output
  4287.  
  4288.  
  4289.                                    65
  4290.  
  4291.  
  4292.  
  4293.        reaches the value that was in the "b" input at the time the module
  4294.        started slewing.
  4295.  
  4296.        To slew from one value to another like an analog lag processor,
  4297.        plug the output into tha "a" input, and the value to be slewed
  4298.        into the "b" input.  Whenever the "b" input changes, the output
  4299.        will slew from the last value at "b" to the new value.
  4300.  
  4301.     Formula:
  4302.  
  4303.          initialize:
  4304.               input (a) * 256 --> sum (internal)
  4305.               input --> output
  4306.  
  4307.          thereafter until sum/256 = target (b):
  4308.               at every nth cycle, determined by cycle time (t):
  4309.                    sum - input + target --> sum
  4310.                    sum/256              --> output
  4311.  
  4312.     Output:  Slewed input, according to the above formula.
  4313.  
  4314.     Start "a" input:  Any value.
  4315.  
  4316.     Target "b" input:  Any value.
  4317.  
  4318.     Time "t" input:  Any value, but values greater than about 10 (hex)
  4319.        are VERY slow.
  4320.  
  4321.  
  4322.     ----------------------------------------------------------------------
  4323.     Filter                                                   SLEW 3,3 \9F
  4324.  
  4325.     Output:  Average of last clocked 2, 4, 8, or 16 Value inputs,
  4326.        depending on current value of Filter input.
  4327.  
  4328.     Clock (heart) input:  Any non-zero after zero will cause the current
  4329.        value input to be averaged with the preceding inputs, and a new
  4330.        average will be sent to the Output.
  4331.  
  4332.     Filter "f" input:  Values of 0-3 (input is ANDed with 3) will set the
  4333.        number of inputs to be averaged to 2, 4, 8, or 16.  This is very
  4334.        similar to a Filter Cutoff input on an analog low pass filter, or
  4335.        the lag time on an analog lag processor: higher numbers will cause
  4336.        greater lag.
  4337.  
  4338.     Offset "+" input:  Added to the current output.
  4339.  
  4340.  
  4341.  
  4342.  
  4343.  
  4344.  
  4345.  
  4346.  
  4347.  
  4348.  
  4349.  
  4350.  
  4351.  
  4352.  
  4353.  
  4354.  
  4355.                                    66
  4356.  
  4357.  
  4358.  
  4359.     ======================================================================
  4360.                                 SAMPLE MODULES
  4361.     ----------------------------------------------------------------------
  4362.     Echo                                                   SAMPLE 1,1 \90
  4363.  
  4364.     Purpose:  This module is actually a special case of a sequencer,
  4365.        designed to write into one memory location while also reading from
  4366.        another location.  The difference between these locations is the
  4367.        amount of delay (in clocks) between the input value and output
  4368.        value.  Unlike the general sequencers, which allow specific
  4369.        addressing of any memory cell in their address range, the Echo
  4370.        module allows addressing of runs of 16 memory cells, with the
  4371.        exact cell in a particular run addressed by an internal index.
  4372.        Like all sequencers, no memory locations will be written if the
  4373.        Write Enable input is zero; it will merely loop thorugh the
  4374.        addressed 16 step run of previously stored data.
  4375.  
  4376.     Magenta User Input (just left of label tag):  Current 16-step run.
  4377.        There are 16 runs of 16 steps each.  This input is used to
  4378.        manually set the desired run, 0-F hex.  Defaults to the same run
  4379.        as the module number, so each module has a unique sequence storage
  4380.        area.  Can be changed for special effects.
  4381.  
  4382.     Output:  Copy of the memory cell addressed by the internal index plus
  4383.        the value at the Delay input ANDed with F hex to stay within the
  4384.        16 cell range.  Note that the output is fetched BEFORE writing a
  4385.        new value to memory, allowing a read/write of the same memory cell
  4386.        during the same clock tick.
  4387.  
  4388.     Clock (heart) input:  Any non-zero after zero will cause a new output
  4389.        to be generated, and if the write enable is non-zero will save the
  4390.        current Value input.
  4391.  
  4392.     Delay ">>" input:  Sets the negative offset from the current internal
  4393.        index that the module will read data from.  Since Value data is
  4394.        always written to the run at the current internal index, and is
  4395.        read at the internal index minus the value at the Delay input, the
  4396.        effect of this input is to control the number of clocks by which
  4397.        the output will lag the input.  Note that the run length is 16
  4398.        memory cells, therefore values over 15 (F hex) are normalized by
  4399.        ANDing them with F (hex).
  4400.  
  4401.     Write Enable (omega) input:  Any non-zero allows storing the Value
  4402.        input data into the run. Changing this input between non-zero and
  4403.        zero while it is playing has the effect of looping a previously
  4404.        tracked run of notes, and can often be used to good effect.
  4405.  
  4406.     Value "-->" input:  Value to be written when Write Enable is ON.
  4407.       With the Delay input set to zero and the Write Protect input set to
  4408.       non-zero, the output should track the Value input.  If it does not,
  4409.       it is likely that the priority number of the Delay module is not
  4410.       high enough, and it is detecting input from a module (with a higher
  4411.       priority number) that is being calculated only AFTER being stored
  4412.       by the Delay module. You can fix this by swapping a few priority
  4413.       numbers, or you can ignore it and allow the Delay input to be 1
  4414.       clock higher than it says.
  4415.  
  4416.     Offset "+" input:  Added to the current output.
  4417.  
  4418.  
  4419.  
  4420.  
  4421.                                    67
  4422.  
  4423.  
  4424.  
  4425.  
  4426.     ----------------------------------------------------------------------
  4427.     Delay                                                  SAMPLE 1,2 \D0
  4428.  
  4429.     Purpose:  Delays the output by a set number of MIDI clocks.
  4430.  
  4431.     Output:  A copy of the input, delayed up to 255 clock cycles.
  4432.  
  4433.     Value "-->" input:  Any value.
  4434.  
  4435.     Delay "c" input:  Number of MIDI clocks (calculation cycles) by which
  4436.        the output is to lag the input.  When 0, the input is simply
  4437.        echoed to the output.  When 1, the output will follow the input by
  4438.        1 MIDI clock, when FF (hex), the output will follow by 255 clocks.
  4439.  
  4440.     Offset "+" input:  Added to the current output.
  4441.  
  4442.     ----------------------------------------------------------------------
  4443.     Peak Hold                                              SAMPLE 2,1 \1E
  4444.  
  4445.     Output:  Highest value seen at the Value input since last Reset.
  4446.  
  4447.     Reset input:  Non-zero copies Value input to Output.
  4448.  
  4449.     Value "-->" input:  Any value.
  4450.  
  4451.     ----------------------------------------------------------------------
  4452.     Valley Hold                                            SAMPLE 2,2 \1F
  4453.  
  4454.     Output:  Lowest value seen at the Value input since last Reset.
  4455.  
  4456.     Reset input:  Non-zero copies Value input to Output.
  4457.  
  4458.     Value "-->" input:  Any value.
  4459.  
  4460.     ----------------------------------------------------------------------
  4461.     Sample and Hold                                        SAMPLE 3,1 \15
  4462.  
  4463.     Output:  Copy of Value input plus Offset input as set by the last
  4464.        Strobe or Track.
  4465.  
  4466.     Track "=" input:  Non-zero tracks current input; zero holds.
  4467.  
  4468.     Strobe "!" input: Non-zero after zero takes a new sample.
  4469.  
  4470.     Value "-->" input: Value to be sampled.
  4471.  
  4472.     Offset "+" input:  Added to sampled/tracked input.
  4473.  
  4474.     ----------------------------------------------------------------------
  4475.     Delta                                                  SAMPLE 3,2 \7F
  4476.  
  4477.     Output:  The absolute difference between the current Value input and
  4478.        the last different Value input.  Effect is to generate a constant
  4479.        rate of change (delta) when the Value input is changing, and to
  4480.        hold it at the last delta while the Value input remains constant.
  4481.  
  4482.     Value "-->" input:  Any value.
  4483.  
  4484.  
  4485.  
  4486.  
  4487.                                    68
  4488.  
  4489.  
  4490.  
  4491.     ======================================================================
  4492.                                 BOUNDS MODULES
  4493.     ----------------------------------------------------------------------
  4494.     Maximum                                                BOUNDS 1,1 \18
  4495.  
  4496.     Output:  Copy of the greater of the two Value inputs.
  4497.  
  4498.     Value inputs:  Any values.
  4499.  
  4500.     ----------------------------------------------------------------------
  4501.     Minimum                                                BOUNDS 1,2 \19
  4502.  
  4503.     Output:  Copy of the lesser of the two Value inputs.
  4504.  
  4505.     Value inputs:  Any values.
  4506.  
  4507.     ----------------------------------------------------------------------
  4508.     Bounds                                                 BOUNDS 1,3 \17
  4509.  
  4510.     Output:  Copy of the Value input, bounded by the MAX and MIN inputs.
  4511.  
  4512.     MAX input: Sets upper bounds. Inclusive.
  4513.  
  4514.     MIN input: Sets lower bounds. Inclusive.
  4515.  
  4516.     ----------------------------------------------------------------------
  4517.     Quantize                                               BOUNDS 2,1 \FC
  4518.  
  4519.     Output:  Copy of the Match input that most nearly matches the Value
  4520.        input.
  4521.  
  4522.     Normalize (divide-symbol) input:  When not zero, quantizing is done
  4523.        on multiples of this value.  Setting to C hex, for example, will
  4524.        normalize to an octave.  When zero the input is disabled.
  4525.  
  4526.     Value "-->" input: Any value.
  4527.  
  4528.     Match inputs "a" - "h":  These eight inputs are set to values that
  4529.        will be matched with the Value input.  Can be used to good effect
  4530.        to force a random number to conform to a scale, or to transform
  4531.        one scale to another.  Note that the match is calculated starting
  4532.        with input "a", and in the event of a tie, the first match is
  4533.        used.  This means that if the Value input was 7, input "a" was 6,
  4534.        and input "b" was 8, and no other input was 7, the output would be
  4535.        6; however if input "a" was 8 and input "b" was 6, the output
  4536.        would be 8.
  4537.  
  4538.     ----------------------------------------------------------------------
  4539.     Sort                                                   BOUNDS 2,2 \1D
  4540.  
  4541.     Output:  One of the four inputs determined by the ascending order of
  4542.        the input values, as selected by the Order input.
  4543.  
  4544.     Order "@" input:  This input determines the ascending order of the
  4545.        inputs that will be read.  Zero reads the lowest of the four
  4546.        values, one reads the next higher, etc.
  4547.  
  4548.     Value inputs "a" - "d":  Any values, any order.
  4549.  
  4550.  
  4551.  
  4552.  
  4553.                                    69
  4554.  
  4555.  
  4556.  
  4557.     ----------------------------------------------------------------------
  4558.     Approximate Value                                      BOUNDS 3,1 \F7
  4559.  
  4560.     Output:  An approximate (within set limits) copy of the input.
  4561.  
  4562.     Value "-->" input:  The base value, which is approximately echoed at
  4563.        the output.  A change in this input will cause a new output to be
  4564.        generated.
  4565.  
  4566.     MAX (up arrow) input:  Set upper limit of approximation. Inclusive.
  4567.  
  4568.     MIN (down arrow) input:  Set lower limit of approximation. Inclusive.
  4569.  
  4570.  
  4571.  
  4572.  
  4573.  
  4574.  
  4575.  
  4576.  
  4577.  
  4578.  
  4579.  
  4580.  
  4581.  
  4582.  
  4583.  
  4584.  
  4585.  
  4586.  
  4587.  
  4588.  
  4589.  
  4590.  
  4591.  
  4592.  
  4593.  
  4594.  
  4595.  
  4596.  
  4597.  
  4598.  
  4599.  
  4600.  
  4601.  
  4602.  
  4603.  
  4604.  
  4605.  
  4606.  
  4607.  
  4608.  
  4609.  
  4610.  
  4611.  
  4612.  
  4613.  
  4614.  
  4615.  
  4616.  
  4617.  
  4618.  
  4619.                                    70
  4620.  
  4621.  
  4622.  
  4623.     ======================================================================
  4624.                                 OCTAVE MODULES
  4625.     ----------------------------------------------------------------------
  4626.     Octave to Note                                         OCTAVE 1,1 \F8
  4627.  
  4628.     Output:  Note value of given octave plus offset.
  4629.  
  4630.     Octave value "-->" input:  Octave number to be translated into the
  4631.        note value.  Input is multiplied by 12 to give the note value.
  4632.  
  4633.     Offset "+" input:  Any value, added to the output.
  4634.  
  4635.     ----------------------------------------------------------------------
  4636.     Octave of Note                                         OCTAVE 1,2 \F6
  4637.  
  4638.     Output: Octave number of given note value.
  4639.  
  4640.     Note value "-->" input:  Note value to be translated into an octave
  4641.        number.  Input is divided by 12 to give the octave number.
  4642.  
  4643.     ----------------------------------------------------------------------
  4644.     Octave Normalize                                       OCTAVE 2,1 \A2
  4645.  
  4646.     Output:  Base note value of given note plus offset.
  4647.  
  4648.     Note value "-->" input:  Note value to be normalized to a base note
  4649.        range of 0 - 11. Input is multiplied by 12, and the remainder is
  4650.        returned as the base note value.
  4651.  
  4652.     Offset "+" input:  Any value, added to the output AFTER normalizing.
  4653.  
  4654.     ----------------------------------------------------------------------
  4655.     Note Fold                                              OCTAVE 2,2 \F4
  4656.  
  4657.     Output:  Note value of given note folded to within a given octave
  4658.        range, plus offset.
  4659.  
  4660.     Note value "-->" input:  Note value to be folded into a base octave
  4661.        range between 0 and the given octave fold range.
  4662.  
  4663.     Octave fold range "o" input:  Octave range that the note input will
  4664.        be translated to.  A value of 0 gives a note value of 0 - 11, 1
  4665.        gives a note value of 0 - 23, etc.
  4666.  
  4667.     Offset "+" input:  Any value, added to the output AFTER folding.
  4668.  
  4669.  
  4670.  
  4671.  
  4672.  
  4673.  
  4674.  
  4675.  
  4676.  
  4677.  
  4678.  
  4679.  
  4680.  
  4681.  
  4682.  
  4683.  
  4684.  
  4685.                                    71
  4686.  
  4687.  
  4688.  
  4689.     ======================================================================
  4690.                                SPECIAL MODULES
  4691.  
  4692.     These modules allow MusicBox to interface with external input/ output
  4693.     ports, and with external programs.  Because they allow direct access
  4694.     to the computer internals, if they are used without knowing exactly
  4695.     what is going on, they will likely cause the computer to crash.
  4696.  
  4697.     ----------------------------------------------------------------------
  4698.     External Call                                         SPECIAL 1,1 \8A
  4699.  
  4700.     Purpose:  Allow MusicBox to control non-MIDI devices, or allow
  4701.        installation of custom functions.  Access to other programs is
  4702.        available through use of software interrupts.  Usually, the
  4703.        programs will be of the "terminate but stay resident" type, such
  4704.        as the Microsoft Mouse driver.
  4705.  
  4706.     Output:  Contents of flag register after the software interrupt.
  4707.  
  4708.     Strobe "!" input:  Non-zero after zero will trigger the module,
  4709.        transferring control from MusicBox to the external interrupt.
  4710.  
  4711.     Interrupt number "e" input:  The interrupt vector that will be called
  4712.        when strobed.
  4713.  
  4714.     Register "A" to "d" inputs:  CPU registers are loaded with these
  4715.        values prior to calling the interrupt.  Input "A" goes to AH, "a"
  4716.        to AL, "B" to BH, etc.
  4717.  
  4718.  
  4719.     ----------------------------------------------------------------------
  4720.     External Call Registers                               SPECIAL 1,2 \88
  4721.  
  4722.     Purpose:  Allow access to CPU registers after an external call.
  4723.  
  4724.     Output:  Value of selected register at last strobe.
  4725.  
  4726.     Strobe "!" input:  Non-zero after zero will cause the currently
  4727.        addressed register data to be sent to the output.
  4728.  
  4729.     Register select "r" input:  Select one of 8 CPU registers to be sent
  4730.        to the output:
  4731.  
  4732.          0 = AL    1 = AH
  4733.          2 = BL    3 = BH
  4734.          4 = CL    5 = CH
  4735.          6 = DL    7 = DH
  4736.  
  4737.  
  4738.  
  4739.  
  4740.  
  4741.  
  4742.  
  4743.  
  4744.  
  4745.  
  4746.  
  4747.  
  4748.  
  4749.  
  4750.  
  4751.                                    72
  4752.  
  4753.  
  4754.  
  4755.     ----------------------------------------------------------------------
  4756.     Outport                                               SPECIAL 2,1 \95
  4757.  
  4758.     Purpose:  Send a byte to the computer output port.
  4759.  
  4760.     Strobe "!" input:  Non-zero after zero will trigger the module,
  4761.        sending the byte at the value input out to the port addressed by
  4762.        the "P" and "p" inputs.
  4763.  
  4764.     Value "-->" input:  The value to be sent to the output port.
  4765.  
  4766.     Port address high "P" input:  Most significant byte of port address.
  4767.  
  4768.     Port address low "p" input:  Least significant byte of port address.
  4769.  
  4770.  
  4771.     ----------------------------------------------------------------------
  4772.     Inport                                                SPECIAL 2,2 \8D
  4773.  
  4774.     Purpose:  Fetch a byte from the computer input port.
  4775.  
  4776.     Output:  Most recent results of an input fetch from the port
  4777.        addressed by the "P" and "p" inputs.
  4778.  
  4779.     Strobe "!" input:  Non-zero after zero will trigger the module,
  4780.        fetching the byte to the output from the port addressed by the "P"
  4781.        and "p" inputs.
  4782.  
  4783.     Port address high "P" input:  Most significant byte of port address.
  4784.  
  4785.     Port address low "p" input:  Least significant byte of port address.
  4786.  
  4787.     ----------------------------------------------------------------------
  4788.     Peek                                                  SPECIAL 3,1   }
  4789.  
  4790.     Purpose: Fetch a byte from the computer memory.
  4791.  
  4792.     Output:  Most recent results of a memory fetch from the byte
  4793.        addressed by the "$", "P" and "@" inputs.
  4794.  
  4795.     Strobe "!" input:  Non-zero after zero will trigger the module,
  4796.        reading the byte from the memory location addressed by inputs "$",
  4797.        "P" and "@".
  4798.  
  4799.     Memory segment address "$" input: High byte of 8086 segment address
  4800.        used to address memory.  Low byte is forced to 0.  For example, to
  4801.        read from the Color Display Area, Segment address B800 (hex), set
  4802.        this input to "B8".
  4803.  
  4804.     Address high "P" input:  Most significant byte of memory address.
  4805.  
  4806.     Address low "@" input:  Least significant byte of memory address.
  4807.  
  4808.  
  4809.  
  4810.  
  4811.  
  4812.  
  4813.  
  4814.  
  4815.  
  4816.  
  4817.                                    73
  4818.  
  4819.  
  4820.  
  4821.     ----------------------------------------------------------------------
  4822.     Poke                                                  SPECIAL 3,2   {
  4823.  
  4824.     Purpose:  Write a byte to the computer memory.
  4825.  
  4826.     Value "-->" input:  The value to be written to the computer's memory.
  4827.  
  4828.     Strobe "!" input: as in Peek, but triggers a memory write rather than
  4829.        a memory read.
  4830.  
  4831.     Memory segment address "$" input: as in Peek.
  4832.  
  4833.     Address high "P" input:  as in Peek.
  4834.  
  4835.     Address low "@" input:  as in Peek.
  4836.  
  4837.     ----------------------------------------------------------------------
  4838.     Mute Flags                                            SPECIAL 3,3 \E8
  4839.  
  4840.     Purpose: Allow access to and program control of mute flags. Typically
  4841.        used as mute input to the MIDI Note module.
  4842.  
  4843.     Output:  8 bits of the 16 bit mute status, as positioned and selected
  4844.        by the Shift and Mask inputs.
  4845.  
  4846.     Mute "0" input:  Mute switches 0-7.  Last changed bit changes the
  4847.        switch.  Bits ON highlight the lower left screen MUTE switches.
  4848.  
  4849.     Mute "8" input: Mute switches 8-F, as above.
  4850.  
  4851.     Shift ">>" input:  Positions the 8 bit output to a window in the 16
  4852.        bit mute flags.  Set at 0 to read flags 0-7, at 8 for flags 8-F.
  4853.  
  4854.     Mask "&" input:  Allows individual flags to be isolated.  Bits set hi
  4855.        allow the flags to pass through.  Set to FF hex to disable.
  4856.  
  4857.  
  4858.  
  4859.  
  4860.  
  4861.  
  4862.  
  4863.  
  4864.  
  4865.  
  4866.  
  4867.  
  4868.  
  4869.  
  4870.  
  4871.  
  4872.  
  4873.  
  4874.  
  4875.  
  4876.  
  4877.  
  4878.  
  4879.  
  4880.  
  4881.  
  4882.  
  4883.                                    74
  4884.  
  4885.  
  4886.  
  4887.     ======================================================================
  4888.                                 SYSTEM MODULES
  4889.  
  4890.     System modules are unique in that there is only one copy made of each
  4891.     module.  The label has "$" after the icon rather than the module
  4892.     number to indicate that it is a system module.
  4893.  
  4894.     ----------------------------------------------------------------------
  4895.     Alpha Control Module                                   SYSTEM 1,1 \E0
  4896.  
  4897.     Purpose:  Controls several global functions, some of which are only
  4898.        distantly related.
  4899.  
  4900.     Output:  NZ when the HLT menu function is selected.
  4901.  
  4902.     Global Hold (check) input:  Reset and Hold for all modules with Hold
  4903.        inputs.  Allows all clocks, etc. to be held and sync'd with just
  4904.        the one Alpha Hold.  When zero, if in play mode, the Program
  4905.        modules will sequence.
  4906.  
  4907.     Global Program module address "@" input:  Change in value sets
  4908.        address parameter for all active Program modules.
  4909.  
  4910.     Mute/Solo "/o/" input:  Non-zero sets mute mode for menu mute flags,
  4911.        non-zero sets solo mode.
  4912.  
  4913.     Play/Program (omega) input:  Set Play/Program mode.  Non-zero puts
  4914.        Program modules in Program mode, zero puts them in Play mode.
  4915.  
  4916.     Beats per Measure "|" input:  This value and the value following will
  4917.        determine the "clocks per measure", which is used by the Measure
  4918.        clocks, the Note clocks, and (to determine the sequence rate) the
  4919.        Program module.
  4920.  
  4921.     Note value (note) input:  Note value for the system time signature.
  4922.        1 = whole, 2 = half, 3 = quarter, 4 = eighth, 5 = sixteenth, 6 =
  4923.        thirtysecond.
  4924.  
  4925.        This input plus the Beats per Measure input, above, are used like
  4926.        a standard time signature i.e., 3 in the Beats input and 3 (for a
  4927.        quarter note) in the note input would result in 3/4 time.
  4928.  
  4929.        The MIDI standard, which  calls for 24 ticks per quarter note, is
  4930.        used by MusicBox to set note and measure values; but the actual
  4931.        temporal resolution -- the time value of the ticks -- is set by
  4932.        the Tempo input, below.  It is important to realize that the
  4933.        "ticks" are actually calculation cycles.  That is, for every tick,
  4934.        MusicBox calculates new values for every active module. This means
  4935.        that for every quarter note, the modules are calculated 24 times;
  4936.        for every eighth note they are calculated 12 times, every
  4937.        sixteenth note, 6 times, etc.  This becomes important information
  4938.        when setting beat advances and retards, delay times, etc.
  4939.  
  4940.        Since for every quarter note, there are always 24 ticks; for every
  4941.        measure there are (ticks per note of the note value input) *
  4942.        (beats per measure value input) cycles. 
  4943.  
  4944.        For 4/4 time, the default, there are (Note value = 3 = quarter
  4945.        note = 24 ticks) * (beats per measure = 4) = 96 (60 hex) ticks per
  4946.        measure.
  4947.  
  4948.  
  4949.                                    75
  4950.  
  4951.  
  4952.  
  4953.  
  4954.     Tempo (diamond) input:  Sets tempo in quater notes per minute.  If
  4955.        the yellow time-overload indicator (below) is on, the tempo 
  4956.        becomes inaccurate.
  4957.  
  4958.        Timing is controlled by an internal real-time clock, which
  4959.        generates interrupts at the rate of some 580 times per second.
  4960.        The Tempo input allows the user to set the number of these
  4961.        interrupts that will occur between module calculation cycles
  4962.        ("ticks").  The effect is the same as setting a metronome. The
  4963.        default tempo is 120 (78 hex).  When set to FF hex, the computer
  4964.        will process the modules at maximum speed.
  4965.  
  4966.     Random number reset "?" input:  Non-zero holds all random number
  4967.        generators, and sets the seed to that value, or to the seed
  4968.        specified at the module.  The pattern of numbers generated is 
  4969.        repeatable and is dependent on the starting seed value.
  4970.  
  4971.     MIDI Sync "s" input:  Bit 0 sets MIDI output sync: if non-zero, a
  4972.        MIDI sync pulse is output.  Bit 1 sets MusicBox tempo to sync with
  4973.        an externally produced MIDI sync pulse.  Bit 1 or 2 inhibits
  4974.        normal sending of MIDI Active Sensing.
  4975.  
  4976.        MIDI sync is used for recording Midi data to an external sequencer
  4977.        from MusicBox.  If the external sequencer sync is set to "internal
  4978.        sync" (it is generating the MIDI sync), set the "s" value to 2,
  4979.        for MusicBox to accept MIDI sync instead of using its own internal
  4980.        timing for generating the tempo.
  4981.  
  4982.        If the external sequencer/recorder is set to "MIDI sync" (it wants
  4983.        to get its sync from MIDI), set the "s" value to 1 so that
  4984.        MusicBox will generate a MIDI sync signal.
  4985.  
  4986.     Halt "0" input:  Non-zero (except FF) in this input is the same as
  4987.        selecting the menu HLD command.  If this value is set to FF,
  4988.        MusicBox will exit to DOS, as if the QUIT command was selected.
  4989.  
  4990.     Indicator (yellow):  This number is the calculation cycles available
  4991.        before time-overload.  The greater the number, the more
  4992.        calculating time remains available.  The value will decrease
  4993.        either when more modules are added or when the Tempo is increased.
  4994.        When it reaches 0, the yellow indicator will highlight.
  4995.        Everything will continue to work ok, but timing values will no
  4996.        longer be absolute or accurate.
  4997.  
  4998.        When the Sync input is set to 2 (external MIDI sync), then the
  4999.        readout is simply a count of the incomming MIDI sync data.  It
  5000.        will appear as a rapidly counting index as the external sync is
  5001.        received.  
  5002.  
  5003.     ----------------------------------------------------------------------
  5004.     MIDI Real Time                                         SYSTEM 1,2 \9D
  5005.  
  5006.     Purpose:  Send and/or receive MIDI Real Time messages.  Most commonly
  5007.        used when saving MusicBox output to an external MIDI sequencer-
  5008.        recorder.  Most of these devices need a Start message in addition
  5009.        to the MIDI sync signal (set by the Alpha module).  MIDI Stop,
  5010.        Start, and Continue messages can be sent and received; Reset and
  5011.        Tune Request messages can be sent.
  5012.  
  5013.  
  5014.  
  5015.                                    76
  5016.  
  5017.  
  5018.  
  5019.     Output:  Bits 0, 1, and 2 correspond to Stop, Start and Continue
  5020.        messages being received at the MIDI data input.  These bits are
  5021.        latched; they can be cleared by the "!" input.
  5022.  
  5023.     S, G, C, R, and T inputs:  Transitions from zero to non-zero at these
  5024.        inputs will send MIDI System Real Time messages for Stop, Start
  5025.        (Go), Continue, Reset, and Tune request.  Note that when these
  5026.        messages are sent they may be passed through by the receiving
  5027.        device and be detected at the MIDI input of MusicBox, and echoed
  5028.        as bits set at the module output.
  5029.  
  5030.     Clear "!" input:  Transition from zero to non-zero resets the module
  5031.        output to zero.
  5032.  
  5033.     ----------------------------------------------------------------------
  5034.     MIDI Control Change Map                                SYSTEM 2,1 \94
  5035.     MIDI Control Change Map                                SYSTEM 2,2 \81
  5036.  
  5037.     Purpose:  Maps MIDI Control Change values to the 8 Control Change
  5038.        inputs of the corresponding Control Output module.
  5039.  
  5040.        Default Control Change numbers, with Yamaha's names:
  5041.  
  5042.                V  =  7  =  Volume
  5043.                M  =  1  =  Modulation Wheel
  5044.                A  =  2  =  Breath Controller
  5045.                B  =  3  =  Unspecified
  5046.                C  =  4  =  Foot Controller
  5047.                D  =  5  =  Portamento Time
  5048.                1  =  64 =  Sustain Foot Switch
  5049.                2  =  65 =  Portamento Foot Switch
  5050.  
  5051.     ----------------------------------------------------------------------
  5052.     PC Beep                                                SYSTEM 2,3 \0F
  5053.  
  5054.     Purpose:  Sound a tone on the PC speaker.
  5055.  
  5056.     Clock (heart) input:  Any non-zero after zero will sound the tone set
  5057.        by the Value input, zero will turn it off.
  5058.  
  5059.     Value "-->" input:  Any value may be sent, but pitch changes are
  5060.        meaningful only from about 20 hex to 60 hex.
  5061.  
  5062.  
  5063.     ----------------------------------------------------------------------
  5064.     Console Input                                          SYSTEM 3,1 \FB
  5065.  
  5066.     Purpose:  Allow access to console input.  This is normally the
  5067.        computer keyboard, but it may be a serial port or a file, if input
  5068.        is redirected when MusicBox was first loaded.  See DOS manual for
  5069.        further information on redirected i/o.
  5070.  
  5071.     Output: Most recent console character.  Bit 7 of the output goes high
  5072.        for one cycle whenever a new character is input.
  5073.  
  5074.     Hold (check) input:  When non-zero, input will not be read.
  5075.  
  5076.  
  5077.  
  5078.  
  5079.  
  5080.  
  5081.                                    77
  5082.  
  5083.  
  5084.  
  5085.     ----------------------------------------------------------------------
  5086.     MIDI Data Input                                        SYSTEM 3,2 \1A
  5087.  
  5088.     Purpose:  Allow access to incomming MIDI data stream.  The data
  5089.        stream is buffered in the s-sequencer memory area, and is accessed
  5090.        through those modules.  This module enables and disables the data
  5091.        flow, and indexes the incoming MIDI events.
  5092.  
  5093.     Output:  Address (in the F hex run of the "B" sequencer memory area)
  5094.        of the most recent incomming MIDI data.  Increments on each
  5095.        incomming MIDI data byte.
  5096.  
  5097.     Reset strobe "!" input:  Resets the write address to 0.
  5098.  
  5099.     Enable (omega) input:  When non-zero, the module will write incomming
  5100.        MIDI data to the sequencer memory addressed by the output index.
  5101.        When zero, the index will continue to increment with incoming
  5102.        data, but the module will not write to the sequencer memory.
  5103.  
  5104.     ----------------------------------------------------------------------
  5105.     Incoming Data Stream Select                            SYSTEM 3,2 \AB
  5106.  
  5107.     Purpose:  Inhibit/pass incomming MIDI data from either or both of the
  5108.        MPU's.  Also displays active incoming stream.
  5109.  
  5110.     Output:  Most recently active incomming data stream.  Bit 0 is MPU-1,
  5111.        bit 1 is MPU-2
  5112.  
  5113.     Hold (check) input:  Non-zero inhibits resetting of the output flags,
  5114.        causing the output to remain unchanged unless incoming data is
  5115.        from a different MPU.  If zero, the output will strobe with each
  5116.        new incoming data packet.
  5117.  
  5118.     Mask "&" input:  Bits 0 and 1 pass incoming data from MPU1 and MPU2
  5119.        respectively when set, and inhibit it when clear.  Default is 3,
  5120.        accept data from both MPU's.
  5121.  
  5122.     ----------------------------------------------------------------------
  5123.     MIDI Output Buffer Status                              SYSTEM 3,3 \F9
  5124.  
  5125.     Purpose:  Show MIDI output activity.
  5126.  
  5127.     Output:  TRUE when MIDI output buffer is not empty.  Effect is to
  5128.        flash when there is outgoing MIDI data.
  5129.  
  5130.     [end]
  5131.  
  5132.  
  5133.  
  5134.  
  5135.  
  5136.  
  5137.  
  5138.  
  5139.  
  5140.  
  5141.  
  5142.  
  5143.  
  5144.  
  5145.  
  5146.  
  5147.                                    78
  5148.  
  5149.  
  5150.  
  5151.  
  5152.  
  5153.  
  5154.  
  5155.  
  5156.  
  5157.  
  5158.  
  5159.  
  5160.