Metropoli BBS
VIEWER: ultrawrd.doc MODE: BINARY (HEX)
==============================================================================================================================================
OFFSET    00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F  10 11 12 13 14 15 16 17  18 19 1A 1B 1C 1D 1E 1F
----------------------------------------------------------------------------------------------------------------------------------------------
00000000  DB A5 2D 00 21 40 09 04  00 00 14 00 2D 00 00 00  00 00 00 00 00 00 00 00  80 01 00 00 95 D0 02 00  Ñ-.!@...-...........Ç..ò.
00000020  9C 47 03 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 2B CE 02 00  00 00 00 00 E8 00 00 00  £G.................+.....Φ...
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 2C 03 00 23 01 00 2C  .........................,.#.,
00000060  03 00 23 01 23 2D 03 00  00 00 23 2D 03 00 00 00  23 2D 03 00 00 00 23 2D  03 00 00 00 23 2D 03 00  .##-...#-...#-...#-...#-.
00000080  0E 00 31 2D 03 00 EC 05  1D 33 03 00 70 11 8D 44  03 00 00 00 8D 44 03 00  00 00 8D 44 03 00 10 00  .1-.3.pìD...ìD...ìD..
000000A0  9D 44 03 00 0A 00 A7 44  03 00 0C 01 8D 44 03 00  00 00 B3 45 03 00 4D 00  00 46 03 00 04 00 04 46  ¥D..ºD.ìD...E.M..F..F
000000C0  03 00 16 00 1A 46 03 00  00 00 1A 46 03 00 00 00  1A 46 03 00 00 00 1A 46  03 00 00 00 1A 46 03 00  ..F...F...F...F...F.
000000E0  00 00 1A 46 03 00 00 00  1A 46 03 00 0E 00 28 46  03 00 00 00 28 46 03 00  00 00 28 46 03 00 00 00  ..F...F..(F...(F...(F...
00000100  28 46 03 00 00 00 28 46  03 00 00 00 28 46 03 00  1E 00 89 46 03 00 34 00  BD 46 03 00 DF 00 46 46  (F...(F...(F..ëF.4.F..FF
00000120  03 00 43 00 23 2D 03 00  00 00 00 00 00 00 00 00  46 46 03 00 00 00 46 46  03 00 00 00 00 00 69 01  .C.#-.........FF...FF.....i
00000140  6A 01 01 00 2C 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  j.,...........................
00000160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00000180  43 68 61 70 74 65 72 20  31 20 2D 20 47 65 6E 65  72 61 6C 20 49 6E 66 6F  72 6D 61 74 69 6F 6E 0D  Chapter 1 - General Information
000001A0  0A 0D 0A 31 2E 30 20 49  6E 74 72 6F 64 75 63 74  69 6F 6E 0D 0A 0D 0A 54  68 69 73 20 69 73 20 76  1.0 IntroductionThis is v
000001C0  65 72 73 69 6F 6E 20 32  2E 31 30 20 6F 66 20 74  68 65 20 53 6F 66 74 77  61 72 65 20 44 65 76 65  ersion 2.10 of the Software Deve
000001E0  6C 6F 70 6D 65 6E 74 20  4B 69 74 20 28 53 44 4B  29 20 66 6F 72 20 74 68  65 20 41 64 76 61 6E 63  lopment Kit (SDK) for the Advanc
00000200  65 64 20 47 72 61 76 69  73 20 55 6C 74 72 61 53  6F 75 6E 64 20 63 61 72  64 2C 20 61 6E 64 20 69  ed Gravis UltraSound card, and i
00000220  73 20 74 68 65 20 63 6F  6D 62 69 6E 65 64 20 77  6F 72 6B 20 6F 66 20 41  64 76 61 6E 63 65 64 20  s the combined work of Advanced 
00000240  47 72 61 76 69 73 2C 20  46 4F 52 54 45 20 54 65  63 68 6E 6F 6C 6F 67 69  65 73 2C 20 61 6E 64 20  Gravis, FORTE Technologies, and 
00000260  49 6E 67 65 6E 75 69 74  79 20 53 6F 66 74 77 61  72 65 2E 20 20 54 68 69  73 20 6B 69 74 20 69 73  Ingenuity Software.  This kit is
00000280  20 69 6E 74 65 6E 64 65  64 20 66 6F 72 20 75 73  65 20 62 79 20 70 72 6F  67 72 61 6D 6D 65 72 73   intended for use by programmers
000002A0  20 6F 66 20 49 42 4D 2D  63 6F 6D 70 61 74 69 62  6C 65 20 50 43 73 2E 20  20 41 66 74 65 72 20 62   of IBM-compatible PCs.  After b
000002C0  65 63 6F 6D 69 6E 67 20  66 61 6D 69 6C 69 61 72  20 77 69 74 68 20 74 68  69 73 20 6D 61 74 65 72  ecoming familiar with this mater
000002E0  69 61 6C 2C 20 79 6F 75  20 73 68 6F 75 6C 64 20  62 65 20 61 62 6C 65 20  74 6F 20 75 73 65 20 43  ial, you should be able to use C
00000300  20 6F 72 20 50 61 73 63  61 6C 20 74 6F 20 70 72  6F 67 72 61 6D 20 74 68  65 20 55 6C 74 72 61 53   or Pascal to program the UltraS
00000320  6F 75 6E 64 20 75 6E 64  65 72 20 4D 53 2D 44 4F  53 2E 0D 0A 0D 0A 54 68  69 73 20 69 73 20 74 68  ound under MS-DOS.This is th
00000340  65 20 66 69 72 73 74 20  76 65 72 73 69 6F 6E 20  77 68 69 63 68 20 69 6E  63 6C 75 64 65 73 20 61  e first version which includes a
00000360  20 66 75 6C 6C 20 42 6F  72 6C 61 6E 64 20 50 61  73 63 61 6C 20 28 76 65  72 73 69 6F 6E 20 37 29   full Borland Pascal (version 7)
00000380  20 61 6E 64 20 54 75 72  62 6F 2D 50 61 73 63 61  6C 20 28 76 65 72 73 69  6F 6E 73 20 36 20 61 6E   and Turbo-Pascal (versions 6 an
000003A0  64 20 37 29 20 69 6E 74  65 72 66 61 63 65 2E 20  20 54 68 69 73 20 77 61  73 20 77 72 69 74 74 65  d 7) interface.  This was writte
000003C0  6E 20 62 79 20 4B 75 72  74 20 4B 65 6E 6E 65 74  74 20 6F 66 20 49 6E 67  65 6E 75 69 74 79 20 53  n by Kurt Kennett of Ingenuity S
000003E0  6F 66 74 77 61 72 65 20  66 6F 72 20 41 64 76 61  6E 63 65 64 20 47 72 61  76 69 73 2C 20 61 6E 64  oftware for Advanced Gravis, and
00000400  20 69 73 20 74 68 65 20  64 69 72 65 63 74 20 74  72 61 6E 73 6C 61 74 69  6F 6E 20 6F 66 20 74 68   is the direct translation of th
00000420  65 20 72 6F 75 74 69 6E  65 73 20 69 6E 20 74 68  65 20 43 20 69 6E 74 65  72 66 61 63 65 2E 20 20  e routines in the C interface.  
00000440  46 6F 72 20 73 70 65 63  69 66 69 63 20 69 6E 66  6F 72 6D 61 74 69 6F 6E  20 61 62 6F 75 74 20 74  For specific information about t
00000460  68 65 20 50 61 73 63 61  6C 20 69 6E 74 65 72 66  61 63 65 2C 20 73 65 65  20 73 65 63 74 69 6F 6E  he Pascal interface, see section
00000480  20 33 2E 31 33 2E 0D 0A  0D 0A 46 6F 72 20 73 70  65 63 69 66 69 63 20 69  6E 66 6F 72 6D 61 74 69   3.13.For specific informati
000004A0  6F 6E 20 61 62 6F 75 74  20 74 68 65 20 72 65 76  69 73 65 64 20 61 6E 64  20 75 70 64 61 74 65 64  on about the revised and updated
000004C0  20 43 20 69 6E 74 65 72  66 61 63 65 2C 20 69 6E  63 6C 75 64 69 6E 67 20  63 6F 6D 70 69 6C 65 72   C interface, including compiler
000004E0  73 20 61 6E 64 20 6D 65  6D 6F 72 79 20 6D 6F 64  65 6C 73 20 73 75 70 70  6F 72 74 65 64 2C 20 73  s and memory models supported, s
00000500  65 65 20 73 65 63 74 69  6F 6E 20 33 2E 31 32 2E  0D 0A 0D 0A 53 6F 6D 65  20 6F 66 20 74 68 65 20  ee section 3.12.Some of the 
00000520  64 69 73 63 75 73 73 69  6F 6E 73 20 6F 66 20 74  68 65 20 68 61 72 64 77  61 72 65 20 69 6E 74 65  discussions of the hardware inte
00000540  72 66 61 63 65 20 74 6F  20 74 68 65 20 63 61 72  64 20 28 43 68 61 70 74  65 72 20 32 29 20 61 72  rface to the card (Chapter 2) ar
00000560  65 20 71 75 69 74 65 20  74 65 63 68 6E 69 63 61  6C 2C 20 61 6E 64 20 67  6F 20 62 65 79 6F 6E 64  e quite technical, and go beyond
00000580  20 74 68 65 20 6C 65 76  65 6C 20 6F 66 20 74 65  63 68 6E 69 63 61 6C 20  73 6F 70 68 69 73 74 69   the level of technical sophisti
000005A0  63 61 74 69 6F 6E 20 6E  65 65 64 65 64 20 74 6F  20 77 72 69 74 65 20 73  6F 66 74 77 61 72 65 2E  cation needed to write software.
000005C0  20 20 54 68 65 72 65 66  6F 72 65 2C 20 61 20 73  65 70 65 72 61 74 65 20  73 65 63 74 69 6F 6E 20    Therefore, a seperate section 
000005E0  28 43 68 61 70 74 65 72  20 33 29 20 68 61 73 20  62 65 65 6E 20 69 6E 63  6C 75 64 65 64 20 77 68  (Chapter 3) has been included wh
00000600  69 63 68 20 69 73 20 61  20 67 65 6E 65 72 61 6C  20 6F 76 65 72 76 69 65  77 20 6F 66 20 68 6F 77  ich is a general overview of how
00000620  20 74 6F 20 77 72 69 74  65 20 73 6F 66 74 77 61  72 65 20 66 6F 72 20 74  68 65 20 63 61 72 64 2E   to write software for the card.
00000640  20 20 57 68 61 74 20 66  6F 6C 6C 6F 77 73 20 69  6E 20 74 68 69 73 20 63  68 61 70 74 65 72 20 69    What follows in this chapter i
00000660  73 20 61 20 67 65 6E 65  72 61 6C 20 64 65 73 63  72 69 70 74 69 6F 6E 20  6F 66 20 74 68 65 20 55  s a general description of the U
00000680  6C 74 72 61 53 6F 75 6E  64 20 63 61 72 64 20 61  6E 64 20 69 74 73 20 66  65 61 74 75 72 65 73 2C  ltraSound card and its features,
000006A0  20 74 68 65 20 4D 49 44  49 20 66 75 6E 63 74 69  6F 6E 61 6C 69 74 79 2C  20 74 68 65 20 4A 6F 79   the MIDI functionality, the Joy
000006C0  73 74 69 63 6B 20 69 6E  74 65 72 66 61 63 65 2C  20 61 6E 64 20 74 68 65  20 47 46 31 20 33 32 2D  stick interface, and the GF1 32-
000006E0  76 6F 69 63 65 20 53 6F  75 6E 64 20 53 79 6E 74  68 65 73 69 7A 65 72 2E  20 20 54 68 72 6F 75 67  voice Sound Synthesizer.  Throug
00000700  68 6F 75 74 20 74 68 69  73 20 64 6F 63 75 6D 65  6E 74 61 74 69 6F 6E 2C  20 74 68 65 20 77 6F 72  hout this documentation, the wor
00000720  64 73 20 27 6C 6F 77 6C  65 76 65 6C 20 74 6F 6F  6C 6B 69 74 27 2C 20 27  6C 6F 77 6C 65 76 65 6C  ds 'lowlevel toolkit', 'lowlevel
00000740  20 72 6F 75 74 69 6E 65  73 27 20 61 6E 64 20 27  6C 6F 77 6C 65 76 65 6C  20 63 6F 64 65 27 20 61   routines' and 'lowlevel code' a
00000760  72 65 20 75 73 65 64 2E  20 20 54 68 69 73 20 72  65 66 65 72 73 20 74 6F  20 61 6E 79 20 61 6E 64  re used.  This refers to any and
00000780  20 61 6C 6C 20 6F 66 20  74 68 65 20 72 6F 75 74  69 6E 65 73 20 64 65 73  63 72 69 62 65 64 20 61   all of the routines described a
000007A0  6E 64 20 69 6E 63 6C 75  64 65 64 20 69 6E 20 74  68 65 20 43 20 61 6E 64  2F 6F 72 20 50 61 73 63  nd included in the C and/or Pasc
000007C0  61 6C 20 69 6E 74 65 72  66 61 63 65 73 2E 0D 0A  0D 0A 0D 0A 0D 0A 31 2E  31 20 46 65 61 74 75 72  al interfaces.1.1 Featur
000007E0  65 73 20 6F 66 20 74 68  65 20 55 6C 74 72 61 53  6F 75 6E 64 0D 0A 0D 0A  2D 09 4A 75 6D 70 65 72  es of the UltraSound-Jumper
00000800  20 73 65 6C 65 63 74 61  62 6C 65 20 62 61 73 65  20 70 6F 72 74 20 61 64  64 72 65 73 73 2E 0D 0A   selectable base port address.
00000820  2D 09 53 6F 66 74 77 61  72 65 20 73 65 6C 65 63  74 61 62 6C 65 20 49 52  51 20 76 65 63 74 6F 72  -Software selectable IRQ vector
00000840  73 20 61 6E 64 20 44 4D  41 20 63 68 61 6E 6E 65  6C 73 2E 0D 0A 2D 09 58  54 20 61 6E 64 20 41 54  s and DMA channels.-XT and AT
00000860  20 63 6F 6D 70 61 74 69  62 69 6C 69 74 79 2E 0D  0A 2D 09 38 20 6F 72 20  31 36 20 62 69 74 20 70   compatibility.-8 or 16 bit p
00000880  6C 61 79 62 61 63 6B 3A  20 53 74 65 72 65 6F 20  61 6E 64 20 4D 6F 6E 6F  70 68 6F 6E 69 63 2E 0D  layback: Stereo and Monophonic.
000008A0  0A 2D 09 38 20 62 69 74  20 72 65 63 6F 72 64 69  6E 67 3A 20 20 53 74 65  72 65 6F 20 6F 72 20 4D  -8 bit recording:  Stereo or M
000008C0  6F 6E 6F 70 68 6F 6E 69  63 2E 0D 0A 2D 09 50 6C  61 79 62 61 63 6B 20 61  6E 64 20 72 65 63 6F 72  onophonic.-Playback and recor
000008E0  64 69 6E 67 20 72 61 74  65 73 20 75 70 20 74 6F  20 34 34 2E 31 20 6B 48  7A 2E 0D 0A 2D 09 33 32  ding rates up to 44.1 kHz.-32
00000900  20 76 6F 69 63 65 20 77  61 76 65 74 61 62 6C 65  20 73 79 6E 74 68 65 73  69 73 3A 20 61 6C 6C 20   voice wavetable synthesis: all 
00000920  76 6F 69 63 65 73 20 6D  69 78 65 64 20 6F 6E 20  62 6F 61 72 64 2E 0D 0A  2D 09 53 69 6D 75 6C 74  voices mixed on board.-Simult
00000940  61 6E 65 6F 75 73 20 70  6C 61 79 62 61 63 6B 20  61 6E 64 20 72 65 63 6F  72 64 69 6E 67 20 69 73  aneous playback and recording is
00000960  20 70 6F 73 73 69 62 6C  65 2E 0D 0A 2D 09 45 61  63 68 20 76 6F 69 63 65  20 68 61 73 20 69 74 73   possible.-Each voice has its
00000980  20 6F 77 6E 20 76 6F 6C  75 6D 65 20 73 65 74 74  69 6E 67 73 2C 20 76 6F  6C 75 6D 65 20 65 6E 76   own volume settings, volume env
000009A0  65 6C 6F 70 69 6E 67 2C  20 70 6C 61 79 62 61 63  6B 20 72 61 74 65 20 61  6E 64 20 62 61 6C 61 6E  eloping, playback rate and balan
000009C0  63 65 2E 0D 0A 2D 09 42  6F 74 68 20 6C 69 6E 65  20 6C 65 76 65 6C 20 61  6E 64 20 61 6D 70 6C 69  ce.-Both line level and ampli
000009E0  66 69 65 64 20 6F 75 74  70 75 74 73 2E 0D 0A 2D  09 36 38 35 30 20 63 6F  6D 70 61 74 69 62 6C 65  fied outputs.-6850 compatible
00000A00  20 4D 49 44 49 20 55 41  52 54 20 6F 6E 2D 62 6F  61 72 64 2E 0D 0A 2D 09  47 72 61 76 69 73 20 45   MIDI UART on-board.-Gravis E
00000A20  6C 69 6D 69 6E 61 74 6F  72 20 6A 6F 79 73 74 69  63 6B 20 69 6E 74 65 72  66 61 63 65 20 77 69 74  liminator joystick interface wit
00000A40  68 20 6A 75 6D 70 65 72  20 65 6E 61 62 6C 65 2F  64 69 73 61 62 6C 65 2E  0D 0A 2D 09 32 35 36 4B  h jumper enable/disable.-256K
00000A60  62 20 44 52 41 4D 20 6F  6E 20 62 6F 61 72 64 20  66 6F 72 20 77 61 76 65  66 6F 72 6D 73 2E 20 20  b DRAM on board for waveforms.  
00000A80  45 78 70 61 6E 64 61 62  6C 65 20 74 6F 20 31 4D  62 2E 0D 0A 2D 09 53 74  65 72 65 6F 20 6D 69 63  Expandable to 1Mb.-Stereo mic
00000AA0  72 6F 70 68 6F 6E 65 20  69 6E 70 75 74 20 77 69  74 68 20 61 75 74 6F 6D  61 74 69 63 20 6C 65 76  rophone input with automatic lev
00000AC0  65 6C 20 63 6F 6E 74 72  6F 6C 2E 0D 0A 2D 09 4C  69 6E 65 20 6C 65 76 65  6C 20 69 6E 70 75 74 2E  el control.-Line level input.
00000AE0  0D 0A 2D 09 43 44 20 52  4F 4D 20 44 72 69 76 65  20 61 75 64 69 6F 20 69  6E 70 75 74 2E 0D 0A 2D  -CD ROM Drive audio input.-
00000B00  09 53 74 65 72 65 6F 20  6D 69 6E 69 2D 6A 61 63  6B 73 20 66 6F 72 20 6C  69 6E 65 20 26 20 61 6D  Stereo mini-jacks for line & am
00000B20  70 6C 69 66 69 65 64 20  6F 75 74 70 75 74 73 20  61 6E 64 20 4D 69 63 20  61 6E 64 20 4C 69 6E 65  plified outputs and Mic and Line
00000B40  20 69 6E 70 75 74 73 2E  0D 0A 0D 0A 0C 31 2E 32  20 42 65 6E 65 66 69 74  73 20 6F 66 20 73 75 70   inputs.1.2 Benefits of sup
00000B60  70 6F 72 74 69 6E 67 20  74 68 65 20 55 6C 74 72  61 53 6F 75 6E 64 0D 0A  0D 0A 54 68 65 20 55 6C  porting the UltraSoundThe Ul
00000B80  74 72 61 53 6F 75 6E 64  20 68 61 73 20 33 32 20  73 65 70 61 72 61 74 65  20 76 6F 69 63 65 73 2C  traSound has 32 separate voices,
00000BA0  20 65 61 63 68 20 6F 66  20 77 68 69 63 68 20 63  61 6E 20 62 65 20 75 73  65 64 20 74 6F 20 70 6C   each of which can be used to pl
00000BC0  61 79 20 62 61 63 6B 20  61 6E 79 20 38 2D 20 6F  72 20 31 36 2D 62 69 74  20 64 69 67 69 74 61 6C  ay back any 8- or 16-bit digital
00000BE0  20 64 61 74 61 20 74 68  61 74 20 69 73 20 6C 6F  61 64 65 64 20 69 6E 74  6F 20 69 74 73 20 44 52   data that is loaded into its DR
00000C00  41 4D 2E 20 20 54 68 69  73 20 64 61 74 61 20 63  61 6E 20 63 6F 6E 73 69  73 74 20 6F 66 20 69 6E  AM.  This data can consist of in
00000C20  64 69 76 69 64 75 61 6C  20 73 6F 75 6E 64 20 65  66 66 65 63 74 73 2C 20  61 20 77 68 6F 6C 65 20  dividual sound effects, a whole 
00000C40  73 6F 75 6E 64 20 74 72  61 63 6B 2C 20 6F 72 20  65 76 65 6E 20 73 69 6E  67 6C 65 20 6D 75 73 69  sound track, or even single musi
00000C60  63 61 6C 20 6E 6F 74 65  73 20 6F 66 20 61 20 64  69 67 69 74 69 7A 65 64  20 69 6E 73 74 72 75 6D  cal notes of a digitized instrum
00000C80  65 6E 74 2E 20 20 54 68  65 20 55 6C 74 72 61 53  6F 75 6E 64 20 69 73 20  63 6F 6D 70 6C 65 74 65  ent.  The UltraSound is complete
00000CA0  6C 79 20 63 6F 6E 74 72  6F 6C 6C 65 64 20 62 79  20 74 68 65 20 50 43 2C  20 74 68 75 73 20 67 69  ly controlled by the PC, thus gi
00000CC0  76 69 6E 67 20 6D 61 78  69 6D 75 6D 20 66 6C 65  78 69 62 69 6C 69 74 79  20 74 6F 20 61 70 70 6C  ving maximum flexibility to appl
00000CE0  69 63 61 74 69 6F 6E 73  20 77 68 69 63 68 20 75  73 65 20 69 74 2E 20 20  54 68 65 20 6D 61 69 6E  ications which use it.  The main
00000D00  20 63 68 69 70 20 77 68  69 63 68 20 72 75 6E 73  20 74 68 65 20 63 61 72  64 20 28 74 68 65 20 47   chip which runs the card (the G
00000D20  46 31 29 20 69 73 20 64  69 72 65 63 74 6C 79 20  61 64 64 72 65 73 73 61  62 6C 65 20 66 72 6F 6D  F1) is directly addressable from
00000D40  20 74 68 65 20 50 43 27  73 20 43 50 55 20 76 69  61 20 62 61 73 69 63 20  49 2F 4F 20 69 6E 73 74   the PC's CPU via basic I/O inst
00000D60  72 75 63 74 69 6F 6E 73  2E 0D 0A 0D 0A 48 65 72  65 20 61 72 65 20 73 6F  6D 65 20 6F 66 20 74 68  ructions.Here are some of th
00000D80  65 20 66 65 61 74 75 72  65 73 20 74 68 61 74 20  74 68 65 20 55 6C 74 72  61 53 6F 75 6E 64 20 6F  e features that the UltraSound o
00000DA0  66 66 65 72 73 3A 0D 0A  0D 0A 31 29 09 57 61 76  65 74 61 62 6C 65 20 73  79 6E 74 68 65 73 69 73  ffers:1)Wavetable synthesis
00000DC0  20 68 61 73 20 61 20 6D  75 63 68 20 68 69 67 68  65 72 20 73 6F 75 6E 64  20 71 75 61 6C 69 74 79   has a much higher sound quality
00000DE0  20 74 68 61 74 20 46 4D  2D 62 61 73 65 64 20 63  61 72 64 73 20 63 61 6E  20 65 76 65 72 20 61 63   that FM-based cards can ever ac
00000E00  68 69 65 76 65 2E 20 20  54 68 69 73 20 6D 65 74  68 6F 64 20 6F 66 20 61  75 64 69 6F 20 73 79 6E  hieve.  This method of audio syn
00000E20  74 68 65 73 69 73 20 69  73 20 74 68 65 20 73 61  6D 65 20 6D 65 74 68 6F  64 20 75 73 65 64 20 69  thesis is the same method used i
00000E40  6E 20 65 78 70 65 6E 73  69 76 65 20 70 72 6F 66  65 73 73 69 6F 6E 61 6C  20 6B 65 79 62 6F 61 72  n expensive professional keyboar
00000E60  64 73 2E 0D 0A 32 29 09  33 32 20 64 69 67 69 74  61 6C 20 76 6F 69 63 65  73 20 63 61 6E 20 62 65  ds.2)32 digital voices can be
00000E80  20 69 6E 64 65 70 65 6E  64 65 6E 74 6C 79 20 63  6F 6E 74 72 6F 6C 6C 65  64 2E 20 54 68 69 73 20   independently controlled. This 
00000EA0  61 6C 6C 6F 77 73 20 79  6F 75 20 74 6F 20 68 61  76 65 20 75 70 20 74 6F  20 33 32 20 73 6F 75 6E  allows you to have up to 32 soun
00000EC0  64 20 65 66 66 65 63 74  73 20 6F 72 20 69 6E 73  74 72 75 6D 65 6E 74 73  20 67 6F 69 6E 67 20 61  d effects or instruments going a
00000EE0  74 20 6F 6E 63 65 2E 0D  0A 33 29 09 54 68 65 20  63 61 72 64 20 69 73 20  52 41 4D 2D 62 61 73 65  t once.3)The card is RAM-base
00000F00  64 2E 20 20 53 69 6E 63  65 20 74 68 65 20 69 6E  73 74 72 75 6D 65 6E 74  20 70 61 74 63 68 65 73  d.  Since the instrument patches
00000F20  20 61 72 65 20 6B 65 70  74 20 6F 6E 20 64 69 73  6B 20 61 6E 64 20 6F 6E  6C 79 20 6C 6F 61 64 65   are kept on disk and only loade
00000F40  64 20 77 68 65 6E 20 74  68 65 79 20 61 72 65 20  6E 65 65 64 65 64 2C 20  74 68 65 79 20 63 61 6E  d when they are needed, they can
00000F60  20 62 65 20 63 68 61 6E  67 65 64 20 6F 72 20 69  6D 70 72 6F 76 65 64 20  61 74 20 77 69 6C 6C 2E   be changed or improved at will.
00000F80  0D 0A 34 29 09 46 6F 63  61 6C 20 50 6F 69 6E 74  20 33 44 20 73 6F 75 6E  64 20 67 65 6E 65 72 61  4)Focal Point 3D sound genera
00000FA0  74 69 6F 6E 2E 20 59 6F  75 20 63 61 6E 20 70 6F  73 69 74 69 6F 6E 20 79  6F 75 72 20 61 70 70 6C  tion. You can position your appl
00000FC0  69 63 61 74 69 6F 6E 73  20 73 6F 75 6E 64 73 20  61 6E 79 77 68 65 72 65  20 69 6E 20 33 44 20 73  ications sounds anywhere in 3D s
00000FE0  70 61 63 65 20 61 72 6F  75 6E 64 20 74 68 65 20  6C 69 73 74 65 6E 65 72  2E 0D 0A 35 29 09 41 6C  pace around the listener.5)Al
00001000  6C 20 6D 69 78 69 6E 67  20 69 73 20 64 6F 6E 65  20 6F 6E 20 74 68 65 20  63 61 72 64 2E 20 20 54  l mixing is done on the card.  T
00001020  68 65 72 65 20 69 73 20  6E 6F 20 62 75 72 64 65  6E 20 6F 6E 20 74 68 65  20 43 50 55 20 74 6F 20  here is no burden on the CPU to 
00001040  70 6C 61 79 62 61 63 6B  20 6D 75 6C 74 69 70 6C  65 20 63 68 61 6E 6E 65  6C 73 2E 0D 0A 36 29 09  playback multiple channels.6)
00001060  4D 75 6C 74 69 70 6C 65  20 63 61 72 64 73 20 63  61 6E 20 62 65 20 69 6E  73 74 61 6C 6C 65 64 20  Multiple cards can be installed 
00001080  69 6E 20 74 68 65 20 73  61 6D 65 20 50 43 2E 20  57 69 74 68 20 73 6F 6D  65 20 72 65 6C 61 74 69  in the same PC. With some relati
000010A0  76 65 6C 79 20 6D 69 6E  6F 72 20 61 64 6A 75 73  74 6D 65 6E 74 73 20 74  6F 20 74 68 65 20 53 44  vely minor adjustments to the SD
000010C0  4B 20 73 6F 66 74 77 61  72 65 2C 20 6D 75 6C 74  69 70 6C 65 20 63 61 72  64 73 20 63 61 6E 20 62  K software, multiple cards can b
000010E0  65 20 63 6F 6E 74 72 6F  6C 6C 65 64 20 69 6E 20  74 68 65 20 73 61 6D 65  20 50 43 2E 0D 0A 37 29  e controlled in the same PC.7)
00001100  09 48 61 72 64 77 61 72  65 2D 61 73 73 69 73 74  65 64 20 76 6F 69 63 65  20 65 6E 76 65 6C 6F 70  Hardware-assisted voice envelop
00001120  69 6E 67 2E 20 41 20 6D  75 6C 74 69 2D 70 6F 69  6E 74 20 61 74 74 61 63  6B 2D 64 65 63 61 79 2D  ing. A multi-point attack-decay-
00001140  73 75 73 74 61 69 6E 2D  72 65 6C 65 61 73 65 20  65 6E 76 65 6C 6F 70 65  20 63 61 6E 20 62 65 20  sustain-release envelope can be 
00001160  69 6D 70 6C 65 6D 65 6E  74 65 64 20 74 68 61 74  20 75 73 65 73 20 76 69  72 74 75 61 6C 6C 79 20  implemented that uses virtually 
00001180  6E 6F 20 43 50 55 20 6F  76 65 72 68 65 61 64 2E  20 54 72 65 6D 65 6C 6F  20 63 61 6E 20 61 6C 73  no CPU overhead. Tremelo can als
000011A0  6F 20 62 65 20 64 6F 6E  65 20 69 6E 20 68 61 72  64 77 61 72 65 2E 0D 0A  38 29 09 53 6F 75 6E 64  o be done in hardware.8)Sound
000011C0  20 65 66 66 65 63 74 73  20 63 61 6E 20 62 65 20  70 72 65 2D 6C 6F 61 64  65 64 20 69 6E 74 6F 20   effects can be pre-loaded into 
000011E0  44 52 41 4D 2C 20 75 73  69 6E 67 20 6C 69 74 74  6C 65 20 6F 72 20 6E 6F  20 50 43 20 6D 65 6D 6F  DRAM, using little or no PC memo
00001200  72 79 20 74 6F 20 6B 65  65 70 20 74 72 61 63 6B  20 6F 66 20 74 68 65 6D  2E 20 20 54 68 69 73 20  ry to keep track of them.  This 
00001220  6C 65 61 76 65 73 20 6D  6F 72 65 20 73 70 61 63  65 20 66 6F 72 20 79 6F  75 72 20 61 70 70 6C 69  leaves more space for your appli
00001240  63 61 74 69 6F 6E 20 61  6E 64 20 69 74 27 73 20  64 61 74 61 2E 20 20 49  74 20 61 6C 73 6F 20 61  cation and it's data.  It also a
00001260  6C 6C 6F 77 73 20 79 6F  75 20 74 6F 20 73 74 61  72 74 20 6F 72 20 73 74  6F 70 20 61 6E 79 20 73  llows you to start or stop any s
00001280  6F 75 6E 64 20 77 68 65  6E 65 76 65 72 20 79 6F  75 20 77 69 73 68 2E 0D  0A 0D 0A 0D 0A 0D 0A 31  ound whenever you wish.1
000012A0  2E 33 20 54 68 65 20 47  46 31 20 2D 20 33 32 20  56 6F 69 63 65 20 53 6F  75 6E 64 20 53 79 6E 74  .3 The GF1 - 32 Voice Sound Synt
000012C0  68 65 73 69 7A 65 72 0D  0A 0D 0A 54 68 65 20 55  6C 74 72 61 53 6F 75 6E  64 20 75 73 65 73 20 57  hesizerThe UltraSound uses W
000012E0  61 76 65 2D 54 61 62 6C  65 20 53 79 6E 74 68 65  73 69 73 20 74 6F 20 70  72 6F 64 75 63 65 20 73  ave-Table Synthesis to produce s
00001300  6F 75 6E 64 20 6F 75 74  70 75 74 2E 20 20 54 68  69 73 20 6D 65 61 6E 73  20 74 68 61 74 20 65 69  ound output.  This means that ei
00001320  74 68 65 72 20 73 61 6D  70 6C 65 64 20 64 61 74  61 20 66 72 6F 6D 20 61  63 74 75 61 6C 20 69 6E  ther sampled data from actual in
00001340  73 74 72 75 6D 65 6E 74  73 20 6F 72 20 6F 74 68  65 72 20 73 79 6E 74 68  65 73 69 7A 65 64 20 64  struments or other synthesized d
00001360  69 67 69 74 61 6C 20 61  75 64 69 6F 20 69 73 20  73 74 6F 72 65 64 20 69  6E 20 44 52 41 4D 20 6F  igital audio is stored in DRAM o
00001380  6E 20 74 68 65 20 55 6C  74 72 61 53 6F 75 6E 64  20 42 6F 61 72 64 2E 20  20 54 68 65 20 47 46 31  n the UltraSound Board.  The GF1
000013A0  20 63 68 69 70 20 77 68  69 63 68 20 63 6F 6E 74  72 6F 6C 73 20 74 68 65  20 62 6F 61 72 64 20 69   chip which controls the board i
000013C0  73 20 73 65 74 20 75 70  20 74 6F 20 70 6C 61 79  20 62 61 63 6B 20 72 65  6C 61 74 69 76 65 6C 79  s set up to play back relatively
000013E0  20 73 68 6F 72 74 20 64  69 67 69 74 61 6C 20 61  75 64 69 6F 20 73 61 6D  70 6C 65 73 20 61 6E 64   short digital audio samples and
00001400  20 70 72 6F 64 75 63 65  20 63 6F 6E 74 69 6E 75  6F 75 73 20 73 6F 75 6E  64 20 63 6C 6F 73 65 6C   produce continuous sound closel
00001420  79 20 72 65 70 72 6F 64  75 63 69 6E 67 20 74 68  65 20 6F 72 69 67 69 6E  61 6C 20 69 6E 73 74 72  y reproducing the original instr
00001440  75 6D 65 6E 74 2E 20 20  54 68 65 20 33 32 20 76  6F 69 63 65 73 20 61 72  65 20 69 6E 64 65 70 65  ument.  The 32 voices are indepe
00001460  6E 64 65 6E 74 6C 79 20  63 6F 6E 74 72 6F 6C 6C  65 64 20 61 6E 64 20 63  61 6E 20 62 65 20 70 72  ndently controlled and can be pr
00001480  6F 64 75 63 69 6E 67 20  64 69 66 66 65 72 65 6E  74 20 73 6F 75 6E 64 73  20 63 6F 6E 63 75 72 65  oducing different sounds concure
000014A0  6E 74 6C 79 2E 20 20 4F  75 74 70 75 74 20 66 72  6F 6D 20 61 6C 6C 20 76  6F 69 63 65 73 20 69 73  ntly.  Output from all voices is
000014C0  20 6D 69 78 65 64 20 69  6E 74 6F 20 74 68 65 20  6C 65 66 74 20 6F 72 20  72 69 67 68 74 20 63 68   mixed into the left or right ch
000014E0  61 6E 6E 65 6C 73 2E 20  20 43 69 72 63 75 69 74  72 79 20 69 6E 20 74 68  65 20 47 46 31 20 63 61  annels.  Circuitry in the GF1 ca
00001500  6E 20 62 65 20 70 72 6F  67 72 61 6D 6D 65 64 20  74 6F 20 70 65 72 66 6F  72 6D 20 74 68 65 20 66  n be programmed to perform the f
00001520  6F 6C 6C 6F 77 69 6E 67  20 61 75 64 69 6F 20 70  72 6F 63 65 73 73 69 6E  67 20 66 75 6E 63 74 69  ollowing audio processing functi
00001540  6F 6E 73 20 69 6E 64 65  70 65 6E 64 65 6E 74 6C  79 20 66 6F 72 20 65 61  63 68 20 76 6F 69 63 65  ons independently for each voice
00001560  3A 0D 0A 0D 0A 2D 09 46  72 65 71 75 65 6E 63 79  20 53 68 69 66 74 69 6E  67 20 74 6F 20 70 72 6F  :-Frequency Shifting to pro
00001580  64 75 63 65 20 64 69 66  66 65 72 65 6E 74 20 6E  6F 74 65 73 20 6F 66 20  74 68 65 20 73 61 6D 65  duce different notes of the same
000015A0  20 69 6E 73 74 72 75 6D  65 6E 74 2E 0D 0A 0D 0A  2D 09 41 6D 70 6C 69 74  75 64 65 20 4D 6F 64 75   instrument.-Amplitude Modu
000015C0  6C 61 74 69 6F 6E 20 74  6F 20 70 72 6F 64 75 63  65 20 6E 6F 74 65 20 65  6E 76 65 6C 6F 70 69 6E  lation to produce note envelopin
000015E0  67 20 28 61 74 74 61 63  6B 2C 20 64 65 63 61 79  2C 20 73 75 73 74 61 69  6E 2C 20 72 65 6C 65 61  g (attack, decay, sustain, relea
00001600  73 65 29 2C 20 6F 76 65  72 61 6C 6C 20 76 6F 6C  75 6D 65 20 63 6F 6E 74  72 6F 6C 20 6F 72 20 73  se), overall volume control or s
00001620  70 65 63 69 61 6C 20 65  66 66 65 63 74 73 20 73  75 63 68 20 61 73 20 4C  46 4F 20 28 6C 6F 77 20  pecial effects such as LFO (low 
00001640  66 72 65 71 75 65 6E 63  79 20 61 6D 70 6C 69 74  75 64 65 20 6D 6F 64 75  6C 61 74 69 6F 6E 29 2E  frequency amplitude modulation).
00001660  0D 0A 0D 0A 2D 09 50 61  6E 6E 69 6E 67 20 74 68  65 20 76 6F 69 63 65 20  66 72 6F 6D 20 6C 65 66  -Panning the voice from lef
00001680  74 20 74 6F 20 72 69 67  68 74 20 63 68 61 6E 6E  65 6C 20 6F 75 74 70 75  74 73 2E 0D 0A 0D 0A 4D  t to right channel outputs.M
000016A0  75 6C 74 69 2D 74 72 61  63 6B 20 64 69 67 69 74  61 6C 20 61 75 64 69 6F  20 72 65 63 6F 72 64 69  ulti-track digital audio recordi
000016C0  6E 67 73 20 63 61 6E 20  62 65 20 70 6C 61 79 65  64 20 74 68 72 6F 75 67  68 20 74 68 65 20 47 46  ngs can be played through the GF
000016E0  31 20 62 79 20 75 73 69  6E 67 20 6F 6E 65 20 76  6F 69 63 65 20 70 65 72  20 64 69 67 69 74 61 6C  1 by using one voice per digital
00001700  20 61 75 64 69 6F 20 74  72 61 63 6B 2E 20 20 54  68 65 20 47 46 31 20 69  73 20 63 6F 6D 70 61 74   audio track.  The GF1 is compat
00001720  69 62 6C 65 20 77 69 74  68 20 38 20 61 6E 64 20  31 36 20 62 69 74 20 64  61 74 61 2C 20 73 74 65  ible with 8 and 16 bit data, ste
00001740  72 65 6F 20 6F 72 20 6D  6F 6E 6F 2C 20 73 69 67  6E 65 64 20 6F 72 20 75  6E 73 69 67 6E 65 64 20  reo or mono, signed or unsigned 
00001760  64 61 74 61 2C 20 61 6E  64 20 38 20 6F 72 20 31  36 20 62 69 74 20 44 4D  41 20 63 68 61 6E 6E 65  data, and 8 or 16 bit DMA channe
00001780  6C 73 2E 0D 0A 0D 0A 54  68 65 20 47 46 31 20 69  73 20 62 61 73 69 63 61  6C 6C 79 20 61 20 70 69  ls.The GF1 is basically a pi
000017A0  70 65 6C 69 6E 65 20 70  72 6F 63 65 73 73 6F 72  2E 20 20 49 74 20 63 6F  6E 73 74 61 6E 74 6C 79  peline processor.  It constantly
000017C0  20 6C 6F 6F 70 73 20 66  72 6F 6D 20 76 6F 69 63  65 20 23 30 20 74 6F 20  74 68 65 20 65 6E 64 20   loops from voice #0 to the end 
000017E0  6F 66 20 74 68 65 20 61  63 74 69 76 65 20 76 6F  69 63 65 73 20 28 68 6F  77 20 74 6F 20 64 65 66  of the active voices (how to def
00001800  69 6E 65 20 74 68 65 20  6E 75 6D 62 65 72 20 6F  66 20 61 63 74 69 76 65  20 76 6F 69 63 65 73 20  ine the number of active voices 
00001820  69 73 20 73 68 6F 77 6E  20 6C 61 74 65 72 29 2E  20 45 76 65 72 79 20 31  2E 36 20 6D 69 63 72 6F  is shown later). Every 1.6 micro
00001840  73 65 63 6F 6E 64 73 2C  20 74 68 65 20 47 46 31  20 70 65 72 66 6F 72 6D  73 20 61 20 73 65 72 69  seconds, the GF1 performs a seri
00001860  65 73 20 6F 66 20 6F 70  65 72 61 74 69 6F 6E 73  20 6F 6E 20 61 20 70 61  72 74 69 63 75 6C 61 72  es of operations on a particular
00001880  20 76 6F 69 63 65 2E 20  20 54 68 65 20 6D 6F 72  65 20 61 63 74 69 76 65  20 76 6F 69 63 65 73 20   voice.  The more active voices 
000018A0  74 68 65 72 65 20 61 72  65 2C 20 74 68 65 20 6C  6F 6E 67 65 72 20 69 74  20 74 61 6B 65 73 20 62  there are, the longer it takes b
000018C0  65 74 77 65 65 6E 20 65  61 63 68 20 74 69 6D 65  20 61 20 70 61 72 74 69  63 75 6C 61 72 20 76 6F  etween each time a particular vo
000018E0  69 63 65 20 69 73 20 73  65 72 76 69 63 65 64 2E  20 20 54 68 69 73 20 70  75 74 73 20 61 20 6C 69  ice is serviced.  This puts a li
00001900  6D 69 74 20 6F 6E 20 74  68 65 20 72 61 74 65 20  61 74 20 77 68 69 63 68  20 70 6C 61 79 62 61 63  mit on the rate at which playbac
00001920  6B 20 63 61 6E 20 6F 63  63 75 72 2E 20 20 31 34  20 61 63 74 69 76 65 20  76 6F 69 63 65 73 20 77  k can occur.  14 active voices w
00001940  69 6C 6C 20 61 6C 6C 6F  77 20 61 20 6D 61 78 69  6D 75 6D 20 6F 66 20 34  34 2E 31 20 6B 48 7A 20  ill allow a maximum of 44.1 kHz 
00001960  70 6C 61 79 62 61 63 6B  2E 20 20 32 38 20 76 6F  69 63 65 73 20 77 69 6C  6C 20 61 6C 6C 6F 77 20  playback.  28 voices will allow 
00001980  32 32 20 6B 48 7A 2E 20  20 46 61 73 74 65 72 20  72 61 74 65 73 20 63 61  6E 20 62 65 20 61 63 68  22 kHz.  Faster rates can be ach
000019A0  69 65 76 65 64 20 62 79  20 6D 61 6B 69 6E 67 20  74 68 65 20 66 72 65 71  75 65 6E 63 79 20 63 6F  ieved by making the frequency co
000019C0  6E 73 74 61 6E 74 20 67  72 65 61 74 65 72 20 74  68 61 6E 20 31 2E 20 20  54 68 69 73 20 77 69 6C  nstant greater than 1.  This wil
000019E0  6C 20 63 61 75 73 65 20  74 68 65 20 47 46 31 20  74 6F 20 73 6B 69 70 20  73 6F 6D 65 20 64 61 74  l cause the GF1 to skip some dat
00001A00  61 20 62 79 74 65 73 20  74 6F 20 70 6C 61 79 20  61 20 73 61 6D 70 6C 65  20 62 61 63 6B 20 61 74  a bytes to play a sample back at
00001A20  20 74 68 65 20 72 65 71  75 65 73 74 65 64 20 66  72 65 71 75 65 6E 63 79  2E 20 20 54 68 69 73 20   the requested frequency.  This 
00001A40  69 73 20 6E 6F 74 20 67  65 6E 65 72 61 6C 6C 79  20 61 20 70 72 6F 62 6C  65 6D 2C 20 62 75 74 20  is not generally a problem, but 
00001A60  63 6F 75 6C 64 20 63 61  75 73 65 20 73 6F 6D 65  20 64 69 73 74 6F 72 74  69 6F 6E 20 6F 72 20 61  could cause some distortion or a
00001A80  6C 69 61 73 69 6E 67 2E  0D 0A 0D 0A 54 68 65 20  66 6F 72 6D 75 6C 61 20  66 6F 72 20 63 61 6C 63  liasing.The formula for calc
00001AA0  75 6C 61 74 69 6E 67 20  74 68 65 20 70 6C 61 79  62 61 63 6B 20 72 61 74  65 20 69 73 3A 0D 0A 0D  ulating the playback rate is:
00001AC0  0A 20 20 20 20 46 72 65  71 75 65 6E 63 79 20 20  20 41 63 74 69 76 65 20  56 6F 69 63 65 73 0D 0A      Frequency   Active Voices
00001AE0  34 34 31 30 30 20 20 20  20 20 20 20 20 20 20 31  34 0D 0A 34 31 31 36 30  20 20 20 20 20 20 20 20  44100          1441160        
00001B00  20 20 31 35 0D 0A 33 38  35 38 37 20 20 20 20 20  20 20 20 20 20 31 36 0D  0A 33 36 33 31 37 20 20    1538587          1636317  
00001B20  20 20 20 20 20 20 20 20  31 37 0D 0A 33 34 33 30  30 20 20 20 20 20 20 20  20 20 20 31 38 0D 0A 33          1734300          183
00001B40  32 34 39 34 20 20 20 20  20 20 20 20 20 20 31 39  0D 0A 33 30 38 37 30 20  20 20 20 20 20 20 20 20  2494          1930870         
00001B60  20 32 30 0D 0A 32 39 34  30 30 20 20 20 20 20 20  20 20 20 20 32 31 0D 0A  32 38 30 36 33 20 20 20   2029400          2128063   
00001B80  20 20 20 20 20 20 20 32  32 0D 0A 32 36 38 34 33  20 20 20 20 20 20 20 20  20 20 32 33 0D 0A 32 35         2226843          2325
00001BA0  37 32 35 20 20 20 20 20  20 20 20 20 20 32 34 0D  0A 32 34 36 39 36 20 20  20 20 20 20 20 20 20 20  725          2424696          
00001BC0  32 35 0D 0A 32 33 37 34  36 20 20 20 20 20 20 20  20 20 20 32 36 0D 0A 32  32 38 36 36 20 20 20 20  2523746          2622866    
00001BE0  20 20 20 20 20 20 32 37  0D 0A 32 32 30 35 30 20  20 20 20 20 20 20 20 20  20 32 38 0D 0A 32 31 32        2722050          28212
00001C00  38 39 20 20 20 20 20 20  20 20 20 20 32 39 0D 0A  32 30 35 38 30 20 20 20  20 20 20 20 20 20 20 33  89          2920580          3
00001C20  30 0D 0A 31 39 39 31 36  20 20 20 20 20 20 20 20  20 20 33 31 0D 0A 31 39  32 39 33 20 20 20 20 20  019916          3119293     
00001C40  20 20 20 20 20 33 32 0D  0A 0D 0A 54 68 69 73 20  74 61 62 6C 65 20 69 73  20 63 61 6C 63 75 6C 61       32This table is calcula
00001C60  74 65 64 20 62 79 20 6B  6E 6F 77 69 6E 67 20 74  68 61 74 20 31 34 20 61  63 74 69 76 65 20 76 6F  ted by knowing that 14 active vo
00001C80  69 63 65 73 20 77 69 6C  6C 20 67 69 76 65 20 65  78 61 63 74 6C 79 20 34  34 2E 31 20 6B 48 7A 20  ices will give exactly 44.1 kHz 
00001CA0  70 6C 61 79 62 61 63 6B  2E 20 20 54 68 65 72 65  66 6F 72 65 2C 20 74 68  65 20 76 6F 69 63 65 20  playback.  Therefore, the voice 
00001CC0  73 65 72 76 69 63 69 6E  67 20 72 61 74 65 20 27  58 27 20 63 61 6E 20 62  65 20 63 61 6C 63 75 6C  servicing rate 'X' can be calcul
00001CE0  61 74 65 64 20 66 72 6F  6D 3A 0D 0A 0D 0A 31 2C  30 30 30 2C 30 30 30 20  2F 20 28 58 20 2A 20 31  ated from:1,000,000 / (X * 1
00001D00  34 29 20 3D 20 34 34 31  30 30 20 48 7A 0D 0A 58  20 3D 20 31 2E 36 31 39  36 39 35 34 39 37 20 6D  4) = 44100 HzX = 1.619695497 m
00001D20  69 63 72 6F 73 65 63 6F  6E 64 73 0D 0A 0C 4F 6E  63 65 20 58 20 69 73 20  6B 6E 6F 77 6E 2C 20 74  icrosecondsOnce X is known, t
00001D40  68 65 20 66 72 65 71 75  65 6E 63 79 20 27 64 69  76 69 73 6F 72 27 20 69  73 20 63 61 6C 63 75 6C  he frequency 'divisor' is calcul
00001D60  61 74 65 64 20 62 79 3A  0D 0A 0D 0A 20 64 69 76  69 73 6F 72 20 3D 20 31  2C 30 30 30 2C 30 30 30  ated by: divisor = 1,000,000
00001D80  20 2F 20 28 31 2E 36 31  39 36 39 35 34 39 37 20  2A 20 23 20 6F 66 20 61  63 74 69 76 65 20 76 6F   / (1.619695497 * # of active vo
00001DA0  69 63 65 73 29 0D 0A 0D  0A 54 68 65 20 6C 6F 77  6C 65 76 65 6C 20 63 6F  64 65 20 70 72 65 2D 63  ices)The lowlevel code pre-c
00001DC0  61 6C 63 75 6C 61 74 65  73 20 74 68 69 73 20 74  61 62 6C 65 20 73 6F 20  74 68 61 74 20 66 6C 6F  alculates this table so that flo
00001DE0  61 74 69 6E 67 20 70 6F  69 6E 74 20 61 72 69 74  68 6D 65 74 69 63 20 64  6F 65 73 6E 27 74 20 6E  ating point arithmetic doesn't n
00001E00  65 65 64 20 74 6F 20 62  65 20 64 6F 6E 65 2E 20  20 41 20 66 72 65 71 75  65 6E 63 79 20 27 63 6F  eed to be done.  A frequency 'co
00001E20  75 6E 74 65 72 27 20 69  73 20 75 73 65 64 20 74  6F 20 63 61 6C 63 75 6C  61 74 65 20 68 6F 77 20  unter' is used to calculate how 
00001E40  6F 66 74 65 6E 20 61 20  76 6F 69 63 65 20 69 73  20 75 70 64 61 74 65 64  20 62 79 20 74 68 65 20  often a voice is updated by the 
00001E60  47 46 31 2E 20 20 54 6F  20 63 61 6C 63 75 6C 61  74 65 20 61 6E 20 46 43  20 28 66 72 65 71 75 65  GF1.  To calculate an FC (freque
00001E80  6E 63 79 20 63 6F 75 6E  74 65 72 29 20 66 6F 72  20 61 6E 79 20 67 69 76  65 6E 20 66 72 65 71 75  ncy counter) for any given frequ
00001EA0  65 6E 63 79 20 77 69 74  68 20 61 20 70 61 72 74  69 63 75 6C 61 72 20 23  20 6F 66 20 61 63 74 69  ency with a particular # of acti
00001EC0  76 65 20 76 6F 69 63 65  73 2C 20 72 75 6E 20 69  74 20 74 68 72 6F 75 67  68 20 74 68 69 73 20 66  ve voices, run it through this f
00001EE0  6F 72 6D 75 6C 61 3A 0D  0A 0D 0A 43 3A 0D 0A 20  20 20 66 63 20 3D 20 28  75 6E 73 69 67 6E 65 64  ormula:C:   fc = (unsigned
00001F00  20 69 6E 74 29 28 28 28  73 70 65 65 64 5F 6B 68  7A 3C 3C 39 4C 29 2B 28  64 69 76 69 73 6F 72 3E   int)(((speed_khz<<9L)+(divisor>
00001F20  3E 31 4C 29 29 20 2F 20  64 69 76 69 73 6F 72 29  3B 0D 0A 20 20 20 66 63  20 3D 20 66 63 20 3C 3C  >1L)) / divisor);   fc = fc <<
00001F40  20 31 3B 0D 0A 0D 0A 50  41 53 43 41 4C 3A 0D 0A  20 20 20 66 63 20 3A 3D  20 57 6F 72 64 28 28 28   1;PASCAL:   fc := Word(((
00001F60  53 70 65 65 64 5F 4B 68  7A 20 53 48 4C 20 39 29  2B 28 44 69 76 69 73 6F  72 20 53 48 52 20 31 29  Speed_Khz SHL 9)+(Divisor SHR 1)
00001F80  29 20 44 49 56 20 44 69  76 69 73 6F 72 29 3B 0D  0A 20 20 20 66 63 20 3A  3D 20 66 63 20 53 48 4C  ) DIV Divisor);   fc := fc SHL
00001FA0  20 31 3B 0D 0A 0D 0A 54  68 65 20 6C 65 66 74 20  73 68 69 66 74 20 69 73  20 6E 65 65 64 65 64 20   1;The left shift is needed 
00001FC0  73 69 6E 63 65 20 74 68  65 20 46 43 20 69 73 20  69 6E 20 62 69 74 73 20  31 35 2D 31 2E 20 20 46  since the FC is in bits 15-1.  F
00001FE0  6F 72 20 6D 6F 72 65 20  69 6E 66 6F 72 6D 61 74  69 6F 6E 20 61 62 6F 75  74 20 74 68 65 20 66 72  or more information about the fr
00002000  65 71 75 65 6E 63 79 20  63 6F 75 6E 74 65 72 2C  20 73 65 65 20 63 68 61  70 74 65 72 20 32 2C 20  equency counter, see chapter 2, 
00002020  74 68 65 20 68 61 72 64  77 61 72 65 20 73 65 63  74 69 6F 6E 2E 0D 0A 0D  0A 54 68 69 73 20 76 61  the hardware section.This va
00002040  6C 75 65 20 69 73 20 74  68 65 6E 20 70 75 74 20  69 6E 20 74 68 65 20 66  72 65 71 75 65 6E 63 79  lue is then put in the frequency
00002060  20 63 6F 6E 74 72 6F 6C  20 72 65 67 69 73 74 65  72 20 66 6F 72 20 74 68  61 74 20 70 61 72 74 69   control register for that parti
00002080  63 75 6C 61 72 20 76 6F  69 63 65 2E 20 20 49 66  20 74 68 65 20 6D 61 6E  74 69 73 73 61 20 70 6F  cular voice.  If the mantissa po
000020A0  72 74 69 6F 6E 20 6F 66  20 74 68 65 20 46 43 20  69 73 20 31 2C 20 74 68  65 6E 20 65 61 63 68 20  rtion of the FC is 1, then each 
000020C0  74 69 6D 65 20 61 72 6F  75 6E 64 20 74 68 65 20  6C 6F 6F 70 2C 20 74 68  65 20 47 46 31 20 75 73  time around the loop, the GF1 us
000020E0  65 73 20 65 61 63 68 20  64 61 74 61 20 70 6F 69  6E 74 20 74 6F 20 70 6C  61 79 2E 20 20 49 66 20  es each data point to play.  If 
00002100  74 68 65 72 65 20 69 73  20 61 20 66 72 61 63 74  69 6F 6E 61 6C 20 70 6F  72 74 69 6F 6E 2C 20 74  there is a fractional portion, t
00002120  68 65 20 47 46 31 20 69  6E 74 65 72 70 6F 6C 61  74 65 73 20 74 68 65 20  61 63 74 75 61 6C 20 64  he GF1 interpolates the actual d
00002140  61 74 61 20 74 6F 20 70  6C 61 79 20 66 72 6F 6D  20 74 68 65 20 74 77 6F  20 64 61 74 61 20 70 6F  ata to play from the two data po
00002160  69 6E 74 73 20 74 68 61  74 20 69 74 20 69 73 20  62 65 74 77 65 65 6E 2E  20 20 54 68 69 73 20 6D  ints that it is between.  This m
00002180  61 6B 65 73 20 74 68 65  20 73 6F 75 6E 64 20 6D  75 63 68 20 27 73 6D 6F  6F 74 68 65 72 27 2C 20  akes the sound much 'smoother', 
000021A0  73 69 6E 63 65 20 74 68  65 20 47 46 31 20 77 69  6C 6C 20 63 72 65 61 74  65 20 70 6F 69 6E 74 73  since the GF1 will create points
000021C0  20 69 6E 20 62 65 74 77  65 65 6E 20 74 68 65 20  61 63 74 75 61 6C 20 64  61 74 61 20 70 6F 69 6E   in between the actual data poin
000021E0  74 73 2E 20 20 46 6F 72  20 65 78 61 6D 70 6C 65  2C 20 61 73 73 75 6D 65  20 61 6E 20 38 20 62 69  ts.  For example, assume an 8 bi
00002200  74 20 72 65 63 6F 72 64  69 6E 67 20 61 74 20 32  32 20 6B 48 7A 20 61 6E  64 20 31 34 20 61 63 74  t recording at 22 kHz and 14 act
00002220  69 76 65 20 76 6F 69 63  65 73 20 2E 20 20 54 68  65 20 66 72 65 71 75 65  6E 63 79 20 63 6F 6E 74  ive voices .  The frequency cont
00002240  72 6F 6C 20 72 65 67 69  73 74 65 72 20 69 73 20  73 65 74 20 75 70 20 74  6F 20 31 2F 32 20 28 65  rol register is set up to 1/2 (e
00002260  78 70 6F 6E 65 6E 74 20  3D 20 32 35 36 29 2E 20  20 54 68 69 73 20 6D 65  61 6E 73 20 74 68 61 74  xponent = 256).  This means that
00002280  20 65 76 65 72 79 20 74  69 6D 65 20 61 72 6F 75  6E 64 20 74 68 65 20 6C  6F 6F 70 2C 20 74 68 61   every time around the loop, tha
000022A0  74 20 70 61 72 74 69 63  75 6C 61 72 20 76 6F 69  63 65 27 73 20 61 63 63  75 6D 75 6C 61 74 6F 72  t particular voice's accumulator
000022C0  20 69 73 20 61 64 6A 75  73 74 65 64 20 62 79 20  31 2F 32 2E 20 20 53 6F  20 74 68 65 20 66 69 72   is adjusted by 1/2.  So the fir
000022E0  73 74 20 74 69 6D 65 20  74 68 65 20 61 63 63 75  6D 75 6C 61 74 6F 72 20  69 73 20 30 20 61 6E 64  st time the accumulator is 0 and
00002300  20 64 61 74 61 20 70 6F  69 6E 74 20 30 20 69 73  20 75 73 65 64 2E 20 20  54 68 65 20 73 65 63 6F   data point 0 is used.  The seco
00002320  6E 64 20 74 69 6D 65 20  61 72 6F 75 6E 64 20 74  68 65 20 6C 6F 6F 70 2C  20 74 68 65 20 61 63 63  nd time around the loop, the acc
00002340  75 6D 75 6C 61 74 6F 72  20 69 73 20 30 2E 35 2E  20 20 53 69 6E 63 65 20  74 68 65 72 65 20 6F 62  umulator is 0.5.  Since there ob
00002360  76 69 6F 75 73 6C 79 20  69 73 20 6E 6F 20 44 52  41 4D 20 6C 6F 63 61 74  69 6F 6E 20 30 2E 35 2C  viously is no DRAM location 0.5,
00002380  20 74 68 65 20 47 46 31  20 69 6E 74 65 72 70 6F  6C 61 74 65 73 20 77 68  61 74 20 74 68 65 20 64   the GF1 interpolates what the d
000023A0  61 74 61 20 77 6F 75 6C  64 20 62 65 20 62 79 20  6C 6F 6F 6B 69 6E 67 20  61 74 20 6C 6F 63 61 74  ata would be by looking at locat
000023C0  69 6F 6E 20 30 20 61 6E  64 20 6C 6F 63 61 74 69  6F 6E 20 31 20 61 6E 64  20 74 61 6B 69 6E 67 20  ion 0 and location 1 and taking 
000023E0  74 68 65 20 61 70 70 72  6F 70 72 69 61 74 65 20  72 61 74 69 6F 20 66 72  6F 6D 20 65 61 63 68 2E  the appropriate ratio from each.
00002400  20 20 49 6E 20 74 68 69  73 20 63 61 73 65 2C 20  69 74 20 70 69 63 6B 73  20 61 20 70 6F 69 6E 74    In this case, it picks a point
00002420  20 68 61 6C 66 2D 77 61  79 20 62 65 74 77 65 65  6E 20 74 68 65 20 74 77  6F 2E 20 20 49 66 20 74   half-way between the two.  If t
00002440  68 65 20 72 65 63 6F 72  64 69 6E 67 20 72 61 74  65 20 77 65 72 65 20 31  31 6B 48 7A 2C 20 69 74  he recording rate were 11kHz, it
00002460  20 77 6F 75 6C 64 20 74  61 6B 65 20 32 35 25 20  66 72 6F 6D 20 6C 6F 63  61 74 69 6F 6E 20 30 20   would take 25% from location 0 
00002480  61 6E 64 20 37 35 25 20  66 72 6F 6D 20 6C 6F 63  61 74 69 6F 6E 20 31 20  74 68 65 20 66 69 72 73  and 75% from location 1 the firs
000024A0  74 20 74 69 6D 65 20 74  68 72 6F 75 67 68 20 74  68 65 20 6C 6F 6F 70 2E  20 20 54 68 65 20 6E 65  t time through the loop.  The ne
000024C0  78 74 20 74 69 6D 65 20  69 74 20 77 6F 75 6C 64  20 74 61 6B 65 20 35 30  25 20 66 72 6F 6D 20 65  xt time it would take 50% from e
000024E0  61 63 68 2E 20 20 54 68  65 20 6E 65 78 74 20 74  69 6D 65 20 69 74 20 77  6F 75 6C 64 20 74 61 6B  ach.  The next time it would tak
00002500  65 20 32 35 25 20 66 72  6F 6D 20 6C 6F 63 61 74  69 6F 6E 20 30 20 61 6E  64 20 37 35 25 20 66 72  e 25% from location 0 and 75% fr
00002520  6F 6D 20 6C 6F 63 61 74  69 6F 6E 20 31 2E 20 20  54 68 65 20 66 6F 75 72  74 68 20 74 69 6D 65 20  om location 1.  The fourth time 
00002540  74 68 72 6F 75 67 68 20  69 74 20 75 73 65 73 20  31 30 30 25 20 6F 66 20  6C 6F 63 61 74 69 6F 6E  through it uses 100% of location
00002560  20 31 2E 0D 0A 0D 0A 54  68 65 20 69 6E 74 65 72  70 6F 6C 61 74 69 6F 6E  20 69 73 20 64 6F 6E 65   1.The interpolation is done
00002580  20 74 6F 20 61 20 72 65  73 6F 6C 75 74 69 6F 6E  20 6F 66 20 31 36 20 62  69 74 73 2C 20 65 76 65   to a resolution of 16 bits, eve
000025A0  6E 20 66 6F 72 20 38 20  62 69 74 20 70 6C 61 79  62 61 63 6B 2E 20 20 54  68 69 73 20 68 61 73 20  n for 8 bit playback.  This has 
000025C0  74 68 65 20 65 66 66 65  63 74 20 6F 66 20 6D 61  6B 69 6E 67 20 61 6E 20  38 20 62 69 74 20 72 65  the effect of making an 8 bit re
000025E0  63 6F 72 64 69 6E 67 20  73 6F 75 6E 64 20 62 65  74 74 65 72 20 77 68 65  6E 20 70 6C 61 79 65 64  cording sound better when played
00002600  20 62 61 63 6B 20 6F 6E  20 74 68 65 20 47 46 31  20 74 68 61 6E 20 6F 6E  20 61 20 73 74 61 6E 64   back on the GF1 than on a stand
00002620  61 72 64 20 38 20 62 69  74 20 63 61 72 64 2E 0D  0A 0D 0A 52 65 6D 65 6D  62 65 72 20 74 68 61 74  ard 8 bit card.Remember that
00002640  20 74 68 65 20 47 46 31  20 77 6F 72 6B 73 20 6F  6E 20 61 20 76 6F 69 63  65 20 65 76 65 72 79 20   the GF1 works on a voice every 
00002660  31 2E 36 20 6D 69 63 72  6F 73 65 63 6F 6E 64 73  2E 20 20 54 68 69 73 20  6D 65 61 6E 73 20 74 68  1.6 microseconds.  This means th
00002680  61 74 20 74 68 65 20 66  65 77 65 72 20 76 6F 69  63 65 73 2C 20 74 68 65  20 66 61 73 74 65 72 20  at the fewer voices, the faster 
000026A0  65 61 63 68 20 76 6F 69  63 65 20 67 65 74 73 20  75 70 64 61 74 65 64 2E  20 20 54 68 65 20 66 72  each voice gets updated.  The fr
000026C0  65 71 75 65 6E 63 79 20  63 6F 6E 74 72 6F 6C 20  72 65 67 69 73 74 65 72  20 73 65 74 74 69 6E 67  equency control register setting
000026E0  20 66 6F 72 20 74 68 65  20 76 6F 69 63 65 20 4D  55 53 54 20 74 61 6B 65  20 74 68 69 73 20 69 6E   for the voice MUST take this in
00002700  74 6F 20 61 63 63 6F 75  6E 74 2E 20 20 54 68 65  20 46 43 20 6D 75 73 74  20 67 65 74 20 73 6D 61  to account.  The FC must get sma
00002720  6C 6C 65 72 20 69 66 20  74 68 65 20 6E 75 6D 62  65 72 20 6F 66 20 61 63  74 69 76 65 20 76 6F 69  ller if the number of active voi
00002740  63 65 73 20 67 65 74 73  20 73 6D 61 6C 6C 65 72  2E 20 20 54 68 69 73 20  77 69 6C 6C 20 69 6E 63  ces gets smaller.  This will inc
00002760  72 65 61 73 65 20 74 68  65 20 6E 75 6D 62 65 72  20 6F 66 20 70 6F 69 6E  74 73 20 63 72 65 61 74  rease the number of points creat
00002780  65 64 20 62 65 74 77 65  65 6E 20 74 68 65 20 61  63 74 75 61 6C 20 64 61  74 61 20 70 6F 69 6E 74  ed between the actual data point
000027A0  73 20 73 6F 20 74 68 65  20 70 65 72 63 65 69 76  65 64 20 70 6C 61 79 62  61 63 6B 20 73 70 65 65  s so the perceived playback spee
000027C0  64 20 72 65 6D 61 69 6E  73 20 74 68 65 20 73 61  6D 65 2E 0D 0A 0D 0A 0C  31 2E 34 20 4D 49 44 49  d remains the same.1.4 MIDI
000027E0  20 49 6E 74 65 72 66 61  63 65 20 0D 0A 0D 0A 54  68 65 20 4D 49 44 49 20  31 30 31 20 69 6E 74 65   Interface The MIDI 101 inte
00002800  72 66 61 63 65 20 63 6F  6E 73 69 73 74 73 20 6F  66 20 73 74 61 6E 64 61  72 64 20 55 41 52 54 20  rface consists of standard UART 
00002820  66 75 6E 63 74 69 6F 6E  61 6C 69 74 79 20 2D 20  4D 6F 74 6F 72 6F 6C 61  20 4D 43 36 38 43 35 30  functionality - Motorola MC68C50
00002840  2E 20 20 41 6E 20 69 6E  74 65 72 72 75 70 74 20  74 6F 20 74 68 65 20 50  43 20 63 61 6E 20 62 65  .  An interrupt to the PC can be
00002860  20 67 65 6E 65 72 61 74  65 64 20 66 6F 72 20 65  61 63 68 20 62 79 74 65  20 6F 66 20 4D 49 44 49   generated for each byte of MIDI
00002880  20 64 61 74 61 20 72 65  63 65 69 76 65 64 20 6F  72 20 74 72 61 6E 73 6D  69 74 74 65 64 2E 20 20   data received or transmitted.  
000028A0  54 68 69 73 20 68 61 72  64 77 61 72 65 20 69 73  20 69 6E 64 65 70 65 6E  64 65 6E 74 20 6F 66 20  This hardware is independent of 
000028C0  61 6E 79 20 6F 66 20 74  68 65 20 6F 74 68 65 72  20 68 61 72 64 77 61 72  65 2E 20 20 54 68 65 20  any of the other hardware.  The 
000028E0  6D 61 69 6E 20 4D 49 44  49 20 63 69 72 63 75 69  74 72 79 20 69 73 20 69  6E 63 6C 75 64 65 64 20  main MIDI circuitry is included 
00002900  69 6E 20 74 68 65 20 47  46 31 20 70 72 6F 63 65  73 73 6F 72 2C 20 62 75  74 20 65 78 74 65 72 6E  in the GF1 processor, but extern
00002920  61 6C 20 74 6F 20 74 68  65 20 63 68 69 70 20 69  73 20 61 6E 20 6F 70 74  69 63 61 6C 20 69 73 6F  al to the chip is an optical iso
00002940  6C 61 74 6F 72 20 74 68  61 74 20 69 73 20 75 73  65 64 20 6F 6E 20 74 68  65 20 73 65 72 69 61 6C  lator that is used on the serial
00002960  20 69 6E 70 75 74 20 64  61 74 61 20 61 6E 64 20  61 6E 20 6F 70 65 6E 20  63 6F 6C 6C 65 63 74 6F   input data and an open collecto
00002980  72 20 64 72 69 76 65 72  20 74 68 61 74 20 69 73  20 75 73 65 64 20 66 6F  72 20 74 68 65 20 73 65  r driver that is used for the se
000029A0  72 69 61 6C 20 6F 75 74  70 75 74 2E 20 20 49 6E  20 61 64 64 69 74 69 6F  6E 2C 20 65 78 74 65 72  rial output.  In addition, exter
000029C0  6E 61 6C 20 6C 6F 67 69  63 20 69 73 20 69 6E 63  6C 75 64 65 64 20 6F 6E  20 62 6F 61 72 64 20 74  nal logic is included on board t
000029E0  6F 20 6C 6F 6F 70 20 62  61 63 6B 20 74 72 61 6E  73 6D 69 74 20 64 61 74  61 20 74 6F 20 74 68 65  o loop back transmit data to the
00002A00  20 72 65 63 65 69 76 65  20 64 61 74 61 20 75 6E  64 65 72 20 73 6F 66 74  77 61 72 65 20 63 6F 6E   receive data under software con
00002A20  74 72 6F 6C 2E 20 20 54  68 65 20 73 65 72 69 61  6C 20 69 6E 74 65 72 66  61 63 65 20 68 61 73 20  trol.  The serial interface has 
00002A40  61 20 66 69 78 65 64 20  63 6F 6E 66 69 67 75 72  61 74 69 6F 6E 20 77 69  74 68 20 6E 6F 20 70 72  a fixed configuration with no pr
00002A60  6F 67 72 61 6D 6D 61 62  6C 65 20 6F 70 74 69 6F  6E 73 2C 20 61 73 20 69  6E 20 74 68 65 20 4D 43  ogrammable options, as in the MC
00002A80  36 38 35 30 2E 20 41 20  63 6F 6E 74 72 6F 6C 20  72 65 67 69 73 74 65 72  20 69 73 20 75 73 65 64  6850. A control register is used
00002AA0  20 74 6F 20 65 6E 61 62  6C 65 20 61 6E 64 20 64  69 73 61 62 6C 65 20 74  68 65 20 69 6E 74 65 72   to enable and disable the inter
00002AC0  72 75 70 74 20 67 65 6E  65 72 61 74 69 6F 6E 20  6C 6F 67 69 63 2E 20 20  41 20 73 74 61 74 75 73  rupt generation logic.  A status
00002AE0  20 72 65 67 69 73 74 65  72 20 69 73 20 75 73 65  64 20 74 6F 20 64 65 74  65 72 6D 69 6E 65 20 69   register is used to determine i
00002B00  66 20 74 68 65 20 74 72  61 6E 73 6D 69 74 20 6F  72 20 72 65 63 65 69 76  65 20 72 65 67 69 73 74  f the transmit or receive regist
00002B20  65 72 20 69 73 20 69 6E  74 65 72 72 75 70 74 69  6E 67 2E 20 20 41 20 72  65 61 64 20 6F 72 20 77  er is interrupting.  A read or w
00002B40  72 69 74 65 20 74 6F 20  74 68 65 20 64 61 74 61  20 72 65 67 69 73 74 65  72 20 63 6C 65 61 72 73  rite to the data register clears
00002B60  20 74 68 65 20 69 6E 74  65 72 72 75 70 74 20 73  74 61 74 75 73 2E 20 20  0D 0A 0D 0A 54 68 65 20   the interrupt status.  The 
00002B80  73 70 65 63 69 66 69 63  61 74 69 6F 6E 73 20 66  6F 72 20 74 68 65 20 69  6E 74 65 72 66 61 63 65  specifications for the interface
00002BA0  20 61 72 65 3A 0D 0A 0D  0A 33 31 2E 32 35 20 6B  48 7A 20 2B 2D 20 31 25  0D 0A 61 73 79 6E 63 68   are:31.25 kHz +- 1%asynch
00002BC0  72 6F 6E 6F 75 73 0D 0A  31 20 73 74 61 72 74 20  62 69 74 0D 0A 38 20 64  61 74 61 20 62 69 74 73  ronous1 start bit8 data bits
00002BE0  0D 0A 31 20 73 74 6F 70  20 62 69 74 0D 0A 0D 0A  54 68 65 20 4D 49 44 49  20 73 69 67 6E 61 6C 73  1 stop bitThe MIDI signals
00002C00  20 61 72 65 20 61 76 61  69 6C 61 62 6C 65 20 6F  6E 20 74 68 65 20 31 35  20 70 69 6E 20 44 20 63   are available on the 15 pin D c
00002C20  6F 6E 6E 65 63 74 6F 72  20 75 73 65 64 20 66 6F  72 20 74 68 65 20 6A 6F  79 73 74 69 63 6B 2E 20  onnector used for the joystick. 
00002C40  20 41 6E 20 65 78 74 65  72 6E 61 6C 20 63 61 62  6C 65 20 61 73 73 65 6D  62 6C 79 20 63 6F 6E 74   An external cable assembly cont
00002C60  61 69 6E 69 6E 67 20 74  68 65 20 6F 70 74 69 63  61 6C 20 69 73 6F 6C 61  74 6F 72 20 61 6E 64 20  aining the optical isolator and 
00002C80  64 72 69 76 65 72 20 69  73 20 72 65 71 75 69 72  65 64 20 74 6F 20 75 73  65 20 74 68 65 20 4D 49  driver is required to use the MI
00002CA0  44 49 20 69 6E 74 65 72  66 61 63 65 2E 0D 0A 0D  0A 0D 0A 0D 0A 31 2E 35  20 4A 6F 79 73 74 69 63  DI interface.1.5 Joystic
00002CC0  6B 20 49 6E 74 65 72 66  61 63 65 0D 0A 0D 0A 54  68 65 20 6A 6F 79 73 74  69 63 6B 20 69 6E 74 65  k InterfaceThe joystick inte
00002CE0  72 66 61 63 65 20 69 73  20 61 6E 20 45 6C 69 6D  69 6E 61 74 6F 72 20 4A  6F 79 73 74 69 63 6B 20  rface is an Eliminator Joystick 
00002D00  69 6E 74 65 72 66 61 63  65 20 64 65 73 69 67 6E  65 64 20 62 79 20 41 64  76 61 6E 63 65 64 20 47  interface designed by Advanced G
00002D20  72 61 76 69 73 2E 20 20  49 74 20 62 61 73 69 63  61 6C 6C 79 20 63 6F 6E  73 69 73 74 73 20 6F 66  ravis.  It basically consists of
00002D40  20 61 20 73 69 6E 67 6C  65 20 65 69 67 68 74 20  62 69 74 20 72 65 67 69  73 74 65 72 2E 20 20 57   a single eight bit register.  W
00002D60  68 65 6E 20 77 72 69 74  74 65 6E 20 74 6F 2C 20  66 6F 75 72 20 66 6C 69  70 2D 66 6C 6F 70 73 20  hen written to, four flip-flops 
00002D80  61 72 65 20 72 65 73 65  74 20 61 6E 64 20 63 6F  6D 70 61 72 61 74 6F 72  20 69 6E 70 75 74 73 20  are reset and comparator inputs 
00002DA0  28 4C 4D 33 33 39 29 20  62 65 67 69 6E 20 74 6F  20 63 68 61 72 67 65 20  75 70 20 62 61 73 65 64  (LM339) begin to charge up based
00002DC0  20 6F 6E 20 74 68 65 20  70 6F 73 69 74 69 6F 6E  20 6F 66 20 74 68 65 20  6A 6F 79 73 74 69 63 6B   on the position of the joystick
00002DE0  2E 20 20 54 68 65 20 63  6F 6D 70 61 72 61 74 6F  72 20 74 68 72 65 73 68  6F 6C 64 20 69 73 20 73  .  The comparator threshold is s
00002E00  65 74 75 70 20 69 6E 20  74 68 65 20 47 46 31 2E  20 20 43 72 6F 73 73 69  6E 67 20 74 68 65 20 74  etup in the GF1.  Crossing the t
00002E20  68 72 65 73 68 6F 6C 64  20 6F 66 20 74 68 65 20  63 6F 6D 70 61 72 61 74  6F 72 73 20 63 61 75 73  hreshold of the comparators caus
00002E40  65 20 74 68 65 20 66 6C  69 70 2D 66 6C 6F 70 73  20 74 6F 20 62 65 20 70  72 65 73 65 74 20 61 6E  e the flip-flops to be preset an
00002E60  64 20 74 68 65 20 63 61  70 61 63 69 74 6F 72 20  74 6F 20 62 65 20 64 69  73 63 68 61 72 67 65 64  d the capacitor to be discharged
00002E80  2E 20 20 52 65 61 64 73  20 6F 66 20 74 68 65 20  72 65 67 69 73 74 65 72  20 72 65 74 75 72 6E 20  .  Reads of the register return 
00002EA0  74 68 65 20 73 74 61 74  65 20 6F 66 20 66 6F 75  72 20 64 69 67 69 74 61  6C 20 69 6E 70 75 74 73  the state of four digital inputs
00002EC0  20 28 69 6E 74 65 72 6E  61 6C 6C 79 20 70 75 6C  6C 65 64 20 75 70 29 20  61 6E 64 20 74 68 65 20   (internally pulled up) and the 
00002EE0  73 74 61 74 65 20 6F 66  20 74 68 65 20 66 6C 69  70 2D 66 6C 6F 70 73 2E  20 20 54 68 65 20 72 61  state of the flip-flops.  The ra
00002F00  74 65 20 6F 66 20 64 69  73 63 68 61 72 67 65 20  6F 66 20 74 68 65 20 63  61 70 61 63 69 74 6F 72  te of discharge of the capacitor
00002F20  73 20 68 61 73 20 61 20  6D 69 6E 69 6D 75 6D 20  74 69 6D 65 20 63 6F 6E  73 74 61 6E 74 20 6F 66  s has a minimum time constant of
00002F40  20 31 20 6D 69 63 72 6F  73 65 63 6F 6E 64 2E 20  20 0D 0A 0D 0A 55 6C 74  72 61 53 6F 75 6E 64 20   1 microsecond.  UltraSound 
00002F60  62 6F 61 72 64 73 20 77  69 74 68 20 61 20 72 65  76 69 73 69 6F 6E 20 76  65 72 73 69 6F 6E 20 28  boards with a revision version (
00002F80  70 72 69 6E 74 65 64 20  6F 6E 20 74 68 65 20 63  61 72 64 29 20 6F 66 20  33 2E 33 20 61 6E 64 20  printed on the card) of 3.3 and 
00002FA0  6C 6F 77 65 72 20 68 61  76 65 20 61 20 6A 75 6D  70 65 72 20 77 68 69 63  68 20 69 73 20 75 73 65  lower have a jumper which is use
00002FC0  64 20 74 6F 20 65 6E 61  62 6C 65 20 6F 72 20 64  69 73 61 62 6C 65 20 74  68 65 20 6A 6F 79 73 74  d to enable or disable the joyst
00002FE0  69 63 6B 2E 20 20 42 6F  61 72 64 73 20 77 69 74  68 20 61 20 72 65 76 69  73 69 6F 6E 20 76 65 72  ick.  Boards with a revision ver
00003000  73 69 6F 6E 20 6F 66 20  33 2E 34 20 61 6E 64 20  61 62 6F 76 65 20 68 61  76 65 20 61 20 73 6F 66  sion of 3.4 and above have a sof
00003020  74 77 61 72 65 20 65 6E  61 62 6C 65 2F 64 69 73  61 62 6C 65 20 66 6F 72  20 74 68 65 20 6A 6F 79  tware enable/disable for the joy
00003040  73 74 69 63 6B 20 69 6E  73 74 65 61 64 20 6F 66  20 61 20 6A 75 6D 70 65  72 2E 20 20 54 68 65 72  stick instead of a jumper.  Ther
00003060  65 20 69 73 20 61 20 6A  6F 79 73 74 69 63 6B 20  53 44 4B 20 61 76 61 69  6C 61 62 6C 65 20 73 70  e is a joystick SDK available sp
00003080  65 72 61 74 65 6C 79 20  66 72 6F 6D 20 47 72 61  76 69 73 2E 0D 0A 0D 0A  0D 0A 0C 43 68 61 70 74  erately from Gravis.Chapt
000030A0  65 72 20 32 20 2D 20 48  61 72 64 77 61 72 65 20  49 6E 66 6F 72 6D 61 74  69 6F 6E 0D 0A 0D 0A 32  er 2 - Hardware Information2
000030C0  2E 31 20 20 49 2F 4F 20  50 6F 72 74 20 4D 61 70  0D 0A 0D 0A 54 68 65 20  66 6F 6C 6C 6F 77 69 6E  .1  I/O Port MapThe followin
000030E0  67 20 64 65 73 63 72 69  62 65 73 20 49 2F 4F 20  61 64 64 72 65 73 73 20  6D 61 70 20 75 73 65 64  g describes I/O address map used
00003100  20 6F 6E 20 74 68 65 20  62 6F 61 72 64 2E 20 54  68 65 20 27 58 27 20 69  73 20 64 65 66 69 6E 65   on the board. The 'X' is define
00003120  64 20 62 79 20 74 68 65  20 6A 75 6D 70 65 72 20  73 65 74 74 69 6E 67 73  20 6F 6E 20 74 68 65 20  d by the jumper settings on the 
00003140  55 6C 74 72 61 53 6F 75  6E 64 20 61 6E 64 20 73  68 6F 75 6C 64 20 6D 61  74 63 68 20 74 68 61 74  UltraSound and should match that
00003160  20 73 70 65 63 69 66 69  65 64 20 69 6E 20 74 68  65 20 55 4C 54 52 41 53  4E 44 20 65 6E 76 69 72   specified in the ULTRASND envir
00003180  6F 6E 6D 65 6E 74 20 76  61 72 69 61 62 6C 65 2E  0D 0A 0D 0A 09 49 4E 54  45 52 46 41 43 45 20 20  onment variable.INTERFACE  
000031A0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 49  2F 4F 2C 4D 45 4D 2C 20                         I/O,MEM, 
000031C0  20 52 2C 57 20 20 20 20  20 20 20 41 44 44 52 45  53 53 0D 0A 09 20 20 20  20 20 20 20 20 20 20 20   R,W       ADDRESS           
000031E0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 49  4E 54 2C 44 4D 41 20 20                         INT,DMA  
00003200  20 20 20 20 20 20 20 20  20 20 20 48 45 58 0D 0A  09 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D             HEX---------------
00003220  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  --------------------------------
00003240  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 0D 0A 09  55 6C 74 72 61 53 6F 75  6E 64 20 42 61 73 65 20  -------------UltraSound Base 
00003260  50 6F 72 74 3A 20 20 20  20 20 20 20 20 20 20 20  20 20 20 2D 2D 2D 20 20  20 20 20 20 20 2D 2D 20  Port:              ---       -- 
00003280  20 20 20 20 20 20 20 32  58 30 0D 0A 0D 0A 09 4D  49 44 49 20 49 6E 74 65  72 66 61 63 65 3A 0D 0A         2X0MIDI Interface:
000032A0  09 20 20 20 20 20 43 6F  6E 74 72 6F 6C 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20       Control                   
000032C0  20 20 20 20 49 2F 4F 20  20 20 20 20 20 20 57 20  20 20 20 20 20 20 20 20  33 58 30 0D 0A 09 20 20      I/O       W         3X0  
000032E0  20 20 20 53 74 61 74 75  73 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20     Status                       
00003300  20 49 2F 4F 20 20 20 20  20 20 20 52 20 20 20 20  20 20 20 20 20 33 58 30  0D 0A 09 20 20 20 20 20   I/O       R         3X0     
00003320  54 72 61 6E 73 6D 69 74  20 44 61 74 61 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 49 2F  Transmit Data                 I/
00003340  4F 20 20 20 20 20 20 20  57 20 20 20 20 20 20 20  20 20 33 58 31 0D 0A 09  20 20 20 20 20 52 65 63  O       W         3X1     Rec
00003360  65 69 76 65 20 44 61 74  61 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 49 2F 4F 20 20  eive Data                  I/O  
00003380  20 20 20 20 20 52 20 20  20 20 20 20 20 20 20 33  58 31 0D 0A 09 09 4A 6F  79 73 74 69 63 6B 20 49       R         3X1Joystick I
000033A0  6E 74 65 72 66 61 63 65  3A 0D 0A 09 20 20 20 20  20 20 20 54 72 69 67 67  65 72 20 54 69 6D 65 72  nterface:       Trigger Timer
000033C0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 49  2F 4F 20 20 20 20 20 20  20 57 20 20 20 20 20 20                 I/O       W      
000033E0  20 20 20 32 30 31 0D 0A  09 20 20 20 20 20 20 20  52 65 61 64 20 44 61 74  61 20 20 20 20 20 20 20     201       Read Data       
00003400  20 20 20 20 20 20 20 20  20 20 20 20 49 2F 4F 20  20 20 20 20 20 20 52 20  20 20 20 20 20 20 20 20              I/O       R         
00003420  32 30 31 0D 0A 0D 0A 09  47 46 31 20 53 79 6E 74  68 65 73 69 7A 65 72 3A  0D 0A 09 20 20 20 20 20  201GF1 Synthesizer:     
00003440  47 46 31 20 50 61 67 65  20 52 65 67 69 73 74 65  72 20 20 20 20 20 20 20  20 20 20 20 20 20 49 2F  GF1 Page Register             I/
00003460  4F 20 20 20 20 20 20 20  52 2F 57 20 20 20 20 20  20 20 33 58 32 0D 0A 09  20 20 20 20 20 47 46 31  O       R/W       3X2     GF1
00003480  2F 47 6C 6F 62 61 6C 20  52 65 67 69 73 74 65 72  20 53 65 6C 65 63 74 20  20 20 20 49 2F 4F 20 20  /Global Register Select    I/O  
000034A0  20 20 20 20 20 52 2F 57  20 20 20 20 20 20 20 33  58 33 0D 0A 09 20 20 20  20 20 47 46 31 2F 47 6C       R/W       3X3     GF1/Gl
000034C0  6F 62 61 6C 20 44 61 74  61 20 4C 6F 77 20 42 79  74 65 20 20 20 20 20 20  49 2F 4F 20 20 20 20 20  obal Data Low Byte      I/O     
000034E0  20 20 52 2C 57 20 20 20  20 20 20 20 33 58 34 0D  0A 09 20 20 20 20 20 47  46 31 2F 47 6C 6F 62 61    R,W       3X4     GF1/Globa
00003500  6C 20 44 61 74 61 20 48  69 67 68 20 42 79 74 65  20 20 20 20 20 49 2F 4F  20 20 20 20 20 20 20 52  l Data High Byte     I/O       R
00003520  2F 57 20 20 20 20 20 20  20 33 58 35 0D 0A 09 20  20 20 20 20 49 52 51 20  53 74 61 74 75 73 20 52  /W       3X5     IRQ Status R
00003540  65 67 69 73 74 65 72 20  31 3D 41 43 54 49 56 45  20 20 49 2F 4F 20 20 20  20 20 20 20 52 20 20 20  egister 1=ACTIVE  I/O       R   
00003560  20 20 20 20 20 20 32 58  36 0D 0A 09 20 20 20 20  20 54 69 6D 65 72 20 43  6F 6E 74 72 6F 6C 20 52        2X6     Timer Control R
00003580  65 67 20 20 20 20 20 20  20 20 20 20 20 20 20 49  2F 4F 20 20 20 20 20 20  20 52 2F 57 20 20 20 20  eg             I/O       R/W    
000035A0  20 20 20 32 58 38 0D 0A  09 20 20 20 20 20 54 69  6D 65 72 20 44 61 74 61  20 20 20 20 20 20 20 20     2X8     Timer Data        
000035C0  20 20 20 20 20 20 20 20  20 20 20 20 49 2F 4F 20  20 20 20 20 20 20 57 20  20 20 20 20 20 20 20 20              I/O       W         
000035E0  32 58 39 0D 0A 09 20 20  20 20 20 44 52 41 4D 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  2X9     DRAM                 
00003600  20 20 20 20 20 20 20 20  20 49 2F 4F 20 20 20 20  20 20 20 52 2C 57 20 20  20 20 20 20 20 33 58 37           I/O       R,W       3X7
00003620  0D 0A 09 20 20 20 20 20  44 52 41 4D 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20       DRAM                    
00003640  20 20 20 20 20 20 44 4D  41 20 20 20 20 20 20 20  52 2C 57 20 20 20 20 20  20 20 31 2C 33 2C 35 2C        DMA       R,W       1,3,5,
00003660  36 2C 37 0D 0A 09 20 20  20 20 20 52 65 63 6F 72  64 20 44 69 67 69 74 61  6C 20 41 75 64 69 6F 20  6,7     Record Digital Audio 
00003680  20 20 20 20 20 20 20 20  20 44 4D 41 20 20 20 20  20 20 20 52 20 20 20 20  20 20 20 20 20 31 2C 33           DMA       R         1,3
000036A0  2C 35 2C 36 2C 37 0D 0A  09 09 42 4F 41 52 44 20  4F 4E 4C 59 0D 0A 09 20  20 20 20 20 20 20 4D 69  ,5,6,7BOARD ONLY       Mi
000036C0  78 20 43 6F 6E 74 72 6F  6C 20 72 65 67 69 73 74  65 72 20 20 20 20 20 20  20 20 49 2F 4F 20 20 20  x Control register        I/O   
000036E0  20 20 20 20 57 20 20 20  20 20 20 20 20 20 32 58  30 0D 0A 09 20 20 20 20  20 20 20 49 52 51 20 20      W         2X0       IRQ  
00003700  63 6F 6E 74 72 6F 6C 20  72 65 67 69 73 74 65 72  20 20 20 20 20 20 20 49  2F 4F 20 20 20 20 20 20  control register       I/O      
00003720  20 57 20 20 20 20 20 20  20 20 20 32 58 42 0D 0A  09 20 20 20 20 20 20 20  28 32 58 30 2D 20 62 69   W         2XB       (2X0- bi
00003740  74 20 36 20 3D 20 31 29  0D 0A 09 20 20 20 20 20  20 20 44 4D 41 20 63 6F  6E 74 72 6F 6C 20 72 65  t 6 = 1)       DMA control re
00003760  67 69 73 74 65 72 20 20  20 20 20 20 20 20 49 2F  4F 20 20 20 20 20 20 20  57 20 20 20 20 20 20 20  gister        I/O       W       
00003780  20 20 32 58 42 0D 0A 09  20 20 20 20 20 20 20 28  32 58 30 2D 20 62 69 74  20 36 20 3D 20 30 29 0D    2XB       (2X0- bit 6 = 0)
000037A0  0A 09 20 20 20 20 20 20  20 52 65 67 69 73 74 65  72 20 43 6F 6E 74 72 6F  6C 73 20 20 20 20 20 20         Register Controls      
000037C0  20 20 20 20 20 49 2F 4F  20 20 20 20 20 20 20 52  2F 57 20 20 20 20 20 20  20 32 58 46 20 28 52 65       I/O       R/W       2XF (Re
000037E0  76 20 33 2E 34 2B 29 0D  0A 09 20 20 20 20 20 20  20 4D 69 78 65 72 20 43  6F 6E 74 72 6F 6C 20 20  v 3.4+)       Mixer Control  
00003800  20 20 20 20 20 20 20 20  20 20 20 20 20 49 2F 4F  20 20 20 20 20 20 20 57  20 20 20 20 20 20 20 20               I/O       W        
00003820  20 33 58 36 20 28 52 65  76 20 33 2E 37 2B 29 0D  0A 0D 0A 41 74 20 70 6F  77 65 72 2D 75 70 20 74   3X6 (Rev 3.7+)At power-up t
00003840  68 65 20 62 6F 61 72 64  20 68 61 73 20 6F 70 65  72 61 74 69 6F 6E 61 6C  20 4A 6F 79 73 74 69 63  he board has operational Joystic
00003860  6B 20 61 6E 64 20 4D 49  44 49 20 69 6E 74 65 72  66 61 63 65 73 2E 20 54  68 69 73 20 61 6C 6C 6F  k and MIDI interfaces. This allo
00003880  77 73 20 74 68 65 69 72  20 64 69 72 65 63 74 20  75 73 65 20 77 69 74 68  20 65 78 69 73 74 69 6E  ws their direct use with existin
000038A0  67 20 73 6F 66 74 77 61  72 65 2E 20 54 68 65 20  47 46 31 20 41 53 49 43  20 70 6F 77 65 72 73 20  g software. The GF1 ASIC powers 
000038C0  75 70 20 77 69 74 68 20  61 6C 6C 20 76 6F 69 63  65 73 20 64 69 73 61 62  6C 65 64 2C 20 6E 6F 74  up with all voices disabled, not
000038E0  20 72 65 71 75 69 72 69  6E 67 20 61 20 73 6F 66  74 77 61 72 65 20 69 6E  69 74 69 61 6C 69 7A 61   requiring a software initializa
00003900  74 69 6F 6E 2E 20 54 68  69 73 20 68 65 6C 70 73  20 65 6C 69 6D 69 6E 61  74 65 20 6E 6F 69 73 65  tion. This helps eliminate noise
00003920  20 61 74 20 70 6F 77 65  72 75 70 20 61 6E 64 20  61 6C 6C 6F 77 73 20 74  68 65 20 4A 6F 79 73 74   at powerup and allows the Joyst
00003940  69 63 6B 20 61 6E 64 20  4D 49 44 49 20 69 6E 74  65 72 66 61 63 65 73 20  74 6F 20 62 65 20 75 73  ick and MIDI interfaces to be us
00003960  65 64 20 62 79 20 65 78  69 73 74 69 6E 67 20 61  70 70 6C 69 63 61 74 69  6F 6E 73 2E 20 54 68 65  ed by existing applications. The
00003980  20 49 52 51 20 63 6F 6E  74 72 6F 6C 20 72 65 67  69 73 74 65 72 20 4D 55  53 54 20 62 65 20 73 65   IRQ control register MUST be se
000039A0  74 20 75 70 20 62 65 66  6F 72 65 20 74 68 65 20  4D 49 44 49 20 69 6E 74  65 72 66 61 63 65 20 63  t up before the MIDI interface c
000039C0  61 6E 20 67 65 6E 65 72  61 74 65 20 61 6E 20 49  52 51 2E 20 20 54 68 69  73 20 69 73 20 64 6F 6E  an generate an IRQ.  This is don
000039E0  65 20 69 6E 20 55 4C 54  52 49 4E 49 54 2E 45 58  45 20 61 6E 64 20 77 68  65 6E 20 61 6E 20 61 70  e in ULTRINIT.EXE and when an ap
00003A00  70 6C 69 63 61 74 69 6F  6E 20 73 65 74 73 20 75  70 20 74 68 65 20 6C 61  74 63 68 65 73 20 74 6F  plication sets up the latches to
00003A20  20 74 68 65 20 55 4C 54  52 41 53 4E 44 20 70 61  72 61 6D 65 74 65 72 73  2E 0D 0A 0D 0A 0C 32 2E   the ULTRASND parameters.2.
00003A40  32 20 20 4D 49 44 49 20  43 6F 6E 74 72 6F 6C 20  50 6F 72 74 20 2D 20 33  58 30 0D 0A 0D 0A 48 65  2  MIDI Control Port - 3X0He
00003A60  72 65 20 61 72 65 20 74  68 65 20 62 69 74 20 64  65 66 69 6E 69 74 69 6F  6E 73 20 66 6F 72 20 74  re are the bit definitions for t
00003A80  68 65 20 4D 49 44 49 20  63 6F 6E 74 72 6F 6C 20  62 79 74 65 2E 20 49 74  20 69 73 20 6C 6F 63 61  he MIDI control byte. It is loca
00003AA0  74 65 64 20 61 74 20 61  64 64 72 65 73 73 20 33  58 30 20 68 65 78 20 61  6E 64 20 69 73 20 77 72  ted at address 3X0 hex and is wr
00003AC0  69 74 65 20 6F 6E 6C 79  2E 0D 0A 0D 0A 09 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  ite only.==================
00003AE0  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 0D  0A 09 7C 20 37 20 7C 20  36 20 7C 20 35 20 7C 20  ===============| 7 | 6 | 5 | 
00003B00  34 20 7C 20 33 20 7C 20  32 20 7C 20 31 20 7C 20  30 20 7C 0D 0A 09 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  4 | 3 | 2 | 1 | 0 |==========
00003B20  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 0D  0A 09 20 20 7C 20 20 20  =======================  |   
00003B40  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  7C 0D 0A 09 20 20 7C 20  |   |   |   |   |   |   |  | 
00003B60  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 2B 2D 2D 2D 2D 20    |   |   |   |   |   |   +---- 
00003B80  31 20 5C 20 4D 61 73 74  65 72 20 72 65 73 65 74  20 28 77 68 65 6E 20 73  65 74 29 0D 0A 09 20 20  1 \ Master reset (when set)  
00003BA0  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  2B 2D 2D 2D 2D 2D 2D 2D  |   |   |   |   |   |   +-------
00003BC0  2D 20 31 20 2F 0D 0A 09  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 2B 2D  - 1 /  |   |   |   |   |   +-
00003BE0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 52 65 73 65  72 76 65 64 0D 0A 09 20  20 7C 20 20 20 7C 20 20  ----------- Reserved  |   |  
00003C00  20 7C 20 20 20 7C 20 20  20 2B 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 20 52 65 73 65 72   |   |   +---------------- Reser
00003C20  76 65 64 0D 0A 09 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 2B 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  ved  |   |   |   +-----------
00003C40  2D 2D 2D 2D 2D 2D 2D 2D  2D 20 52 65 73 65 72 76  65 64 0D 0A 09 20 20 7C  20 20 20 7C 20 20 20 2B  --------- Reserved  |   |   +
00003C60  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  20 31 20 5C 20 78 6D 69  ------------------------ 1 \ xmi
00003C80  74 20 49 52 51 20 65 6E  61 62 6C 65 64 0D 0A 09  20 20 7C 20 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 2D  t IRQ enabled  |   +---------
00003CA0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 30 20 2F 0D  0A 09 20 20 2B 2D 2D 2D  ------------------- 0 /  +---
00003CC0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 20 31 20  ----------------------------- 1 
00003CE0  3D 20 52 65 63 65 69 76  65 20 49 52 51 20 65 6E  61 62 6C 65 64 0D 0A 0D  0A 42 69 74 20 30 20 26  = Receive IRQ enabledBit 0 &
00003D00  20 31 20 77 69 6C 6C 20  63 61 75 73 65 20 61 20  6D 61 73 74 65 72 20 72  65 73 65 74 20 77 68 65   1 will cause a master reset whe
00003D20  6E 20 74 6F 67 67 6C 65  64 20 68 69 67 68 20 61  6E 64 20 74 68 65 6E 20  6C 6F 77 2E 20 54 68 65  n toggled high and then low. The
00003D40  79 20 6D 75 73 74 20 62  65 20 6C 65 66 74 20 6C  6F 77 20 77 68 65 6E 20  75 73 69 6E 67 20 70 6F  y must be left low when using po
00003D60  72 74 2E 20 54 68 69 73  20 77 69 6C 6C 20 6E 6F  72 6D 61 6C 6C 79 20 63  61 75 73 65 20 61 20 74  rt. This will normally cause a t
00003D80  72 61 6E 73 6D 69 74 20  62 75 66 66 65 72 20 65  6D 70 74 79 20 49 52 51  2E 0D 0A 0D 0A 0D 0A 0D  ransmit buffer empty IRQ.
00003DA0  0A 32 2E 33 20 20 4D 49  44 49 20 53 74 61 74 75  73 20 50 6F 72 74 20 2D  20 33 58 30 0D 0A 0D 0A  2.3  MIDI Status Port - 3X0
00003DC0  48 65 72 65 20 61 72 65  20 74 68 65 20 62 69 74  20 64 65 66 69 6E 69 74  69 6F 6E 73 20 66 6F 72  Here are the bit definitions for
00003DE0  20 74 68 65 20 4D 49 44  49 20 73 74 61 74 75 73  20 62 79 74 65 2E 20 20  49 74 20 69 73 20 6C 6F   the MIDI status byte.  It is lo
00003E00  63 61 74 65 64 20 61 74  20 61 64 64 72 65 73 73  20 33 58 30 20 68 65 78  20 61 6E 64 20 69 73 20  cated at address 3X0 hex and is 
00003E20  72 65 61 64 2D 6F 6E 6C  79 2E 0D 0A 0D 0A 09 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  read-only.=================
00003E40  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  0D 0A 09 7C 20 37 20 7C  20 36 20 7C 20 35 20 7C  ================| 7 | 6 | 5 |
00003E60  20 34 20 7C 20 33 20 7C  20 32 20 7C 20 31 20 7C  20 30 20 7C 0D 0A 09 3D  3D 3D 3D 3D 3D 3D 3D 3D   4 | 3 | 2 | 1 | 0 |=========
00003E80  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  0D 0A 09 20 20 7C 20 20  ========================  |  
00003EA0  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 0D 0A 09 20 20 7C   |   |   |   |   |   |   |  |
00003EC0  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 2B 2D 2D 2D 2D     |   |   |   |   |   |   +----
00003EE0  20 52 65 63 65 69 76 65  20 72 65 67 2E 20 66 75  6C 6C 0D 0A 09 20 20 7C  20 20 20 7C 20 20 20 7C   Receive reg. full  |   |   |
00003F00  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 2B  2D 2D 2D 2D 2D 2D 2D 2D  20 54 72 61 6E 73 6D 69     |   |   |   +-------- Transmi
00003F20  74 20 72 65 67 2E 20 65  6D 70 74 79 0D 0A 09 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  t reg. empty  |   |   |   |  
00003F40  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 20 52 65 73 65 72  76 65 64 0D 0A 09 20 20   |   +------------ Reserved  
00003F60  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  2B 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  |   |   |   |   +---------------
00003F80  2D 20 52 65 73 65 72 76  65 64 0D 0A 09 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 2B 2D 2D 2D 2D  - Reserved  |   |   |   +----
00003FA0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  20 46 72 61 6D 69 6E 67  20 45 72 72 6F 72 0D 0A  ---------------- Framing Error
00003FC0  09 20 20 7C 20 20 20 7C  20 20 20 2B 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D    |   |   +--------------------
00003FE0  2D 2D 2D 2D 20 4F 76 65  72 72 75 6E 20 65 72 72  6F 72 0D 0A 09 20 20 7C  20 20 20 2B 2D 2D 2D 2D  ---- Overrun error  |   +----
00004000  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  20 52 65 73 65 72 76 65  ------------------------ Reserve
00004020  64 0D 0A 09 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  d  +-------------------------
00004040  2D 2D 2D 2D 2D 2D 2D 20  49 6E 74 65 72 72 75 70  74 20 70 65 6E 64 69 6E  67 0D 0A 0D 0A 54 68 65  ------- Interrupt pendingThe
00004060  20 4D 49 44 49 20 63 6F  6E 74 72 6F 6C 20 69 6E  74 65 72 66 61 63 65 20  62 65 68 61 76 65 73 20   MIDI control interface behaves 
00004080  69 64 65 6E 74 69 63 61  6C 6C 79 20 74 6F 20 61  20 36 38 35 30 20 55 41  52 54 2E 0D 0A 0D 0A 0D  identically to a 6850 UART.
000040A0  0A 0D 0A 32 2E 34 20 20  4D 49 44 49 20 44 61 74  61 20 50 6F 72 74 20 2D  20 33 58 31 0D 0A 0D 0A  2.4  MIDI Data Port - 3X1
000040C0  54 68 65 20 74 72 61 6E  73 6D 69 74 20 61 6E 64  20 72 65 63 65 69 76 65  20 72 65 67 69 73 74 65  The transmit and receive registe
000040E0  72 73 20 61 72 65 20 61  74 20 33 58 31 20 68 65  78 20 61 6E 64 20 61 72  65 20 38 20 62 69 74 73  rs are at 3X1 hex and are 8 bits
00004100  20 77 69 64 65 2E 0D 0A  0D 0A 0D 0A 0C 32 2E 35  20 20 50 61 67 65 20 52  65 67 69 73 74 65 72 20   wide.2.5  Page Register 
00004120  2D 20 33 58 32 0D 0A 0D  0A 54 68 69 73 20 63 6F  75 6C 64 20 61 6C 73 6F  20 62 65 20 63 61 6C 6C  - 3X2This could also be call
00004140  65 64 20 74 68 65 20 76  6F 69 63 65 20 73 65 6C  65 63 74 20 72 65 67 69  73 74 65 72 2E 20 54 68  ed the voice select register. Th
00004160  69 73 20 72 65 67 69 73  74 65 72 20 69 73 20 75  73 65 64 20 74 6F 20 73  70 65 63 69 66 79 20 77  is register is used to specify w
00004180  68 69 63 68 20 76 6F 69  63 65 27 73 20 72 65 67  69 73 74 65 72 73 20 79  6F 75 20 77 61 6E 74 20  hich voice's registers you want 
000041A0  74 6F 20 72 65 61 64 2F  77 72 69 74 65 2E 20 54  68 69 73 20 76 61 6C 75  65 20 63 61 6E 20 72 61  to read/write. This value can ra
000041C0  6E 67 65 20 66 72 6F 6D  20 30 20 74 6F 20 74 68  65 20 6E 75 6D 62 65 72  20 6F 66 20 61 63 74 69  nge from 0 to the number of acti
000041E0  76 65 20 76 6F 69 63 65  73 20 73 70 65 63 69 66  69 65 64 20 28 31 33 2D  33 31 29 2E 20 4F 6E 63  ve voices specified (13-31). Onc
00004200  65 20 74 68 69 73 20 68  61 73 20 62 65 65 6E 20  73 70 65 63 69 66 69 65  64 2C 20 79 6F 75 20 6D  e this has been specified, you m
00004220  61 79 20 73 65 6C 65 63  74 20 74 68 65 20 73 70  65 63 69 66 69 63 20 72  65 67 69 73 74 65 72 20  ay select the specific register 
00004240  77 69 74 68 69 6E 20 74  68 61 74 20 76 6F 69 63  65 2E 20 42 65 20 63 61  72 65 66 75 6C 20 74 68  within that voice. Be careful th
00004260  61 74 20 49 52 51 73 20  61 72 65 20 6F 66 66 20  64 75 72 69 6E 67 20 74  68 65 20 74 69 6D 65 20  at IRQs are off during the time 
00004280  74 68 61 74 20 74 68 65  20 70 61 67 65 20 61 6E  64 20 73 65 6C 65 63 74  20 72 65 67 69 73 74 65  that the page and select registe
000042A0  72 73 20 61 72 65 20 62  65 69 6E 67 20 6D 6F 64  69 66 69 65 64 2E 20 54  68 69 73 20 77 69 6C 6C  rs are being modified. This will
000042C0  20 70 72 65 76 65 6E 74  20 74 68 65 20 66 6F 72  65 67 72 6F 75 6E 64 20  66 72 6F 6D 20 73 65 6C   prevent the foreground from sel
000042E0  65 63 74 69 6E 67 20 61  20 76 6F 69 63 65 20 61  6E 64 20 68 61 76 69 6E  67 20 74 68 65 20 62 61  ecting a voice and having the ba
00004300  63 6B 67 72 6F 75 6E 64  20 63 68 61 6E 67 65 20  69 74 20 69 6E 20 74 68  65 20 62 61 63 6B 67 72  ckground change it in the backgr
00004320  6F 75 6E 64 2E 0D 0A 0D  0A 0D 0A 0D 0A 32 2E 36  20 20 53 65 6C 65 63 74  20 52 65 67 69 73 74 65  ound.2.6  Select Registe
00004340  72 20 2D 20 33 58 33 0D  0A 32 2E 36 2E 31 20 20  47 6C 6F 62 61 6C 20 52  65 67 69 73 74 65 72 73  r - 3X32.6.1  Global Registers
00004360  0D 0A 0D 0A 54 68 65 73  65 20 61 72 65 20 74 68  65 20 67 6C 6F 62 61 6C  20 72 65 67 69 73 74 65  These are the global registe
00004380  72 73 2E 20 54 68 65 79  20 61 72 65 20 6E 6F 74  20 76 6F 69 63 65 2D 73  70 65 63 69 66 69 63 2E  rs. They are not voice-specific.
000043A0  0D 0A 0D 0A 09 09 20 20  20 20 20 41 64 64 72 65  73 73 20 20 20 20 20 4D  6F 64 65 20 20 20 20 57       Address     Mode    W
000043C0  69 64 74 68 20 20 20 44  65 73 63 72 69 70 74 69  6F 6E 0D 0A 0D 0A 09 09  20 20 20 20 20 20 20 34  idth   Description       4
000043E0  31 20 20 20 20 20 20 20  20 52 2F 57 20 20 20 20  20 20 20 38 20 20 20 20  20 44 52 41 4D 20 44 4D  1        R/W       8     DRAM DM
00004400  41 20 43 6F 6E 74 72 6F  6C 0D 0A 09 09 20 20 20  20 20 20 20 34 32 20 20  20 20 20 20 20 20 57 20  A Control       42        W 
00004420  20 20 20 20 20 20 20 31  36 20 20 20 20 20 44 4D  41 20 53 74 61 72 74 20  41 64 64 72 65 73 73 0D         16     DMA Start Address
00004440  0A 09 09 20 20 20 20 20  20 20 34 33 20 20 20 20  20 20 20 20 57 20 20 20  20 20 20 20 20 31 36 20         43        W        16 
00004460  20 20 20 20 44 52 41 4D  20 49 2F 4F 20 41 64 64  72 65 73 73 20 28 4C 4F  57 29 0D 0A 09 09 20 20      DRAM I/O Address (LOW)  
00004480  20 20 20 20 20 34 34 20  20 20 20 20 20 20 20 57  20 20 20 20 20 20 20 20  20 38 20 20 20 20 20 44       44        W         8     D
000044A0  52 41 4D 20 49 2F 4F 20  41 64 64 72 65 73 73 20  28 48 49 47 48 29 0D 0A  09 09 20 20 20 20 20 20  RAM I/O Address (HIGH)      
000044C0  20 34 35 20 20 20 20 20  20 20 20 52 2F 57 20 20  20 20 20 20 20 38 20 20  20 20 20 54 69 6D 65 72   45        R/W       8     Timer
000044E0  20 43 6F 6E 74 72 6F 6C  0D 0A 09 09 20 20 20 20  20 20 20 34 36 20 20 20  20 20 20 20 20 57 20 20   Control       46        W  
00004500  20 20 20 20 20 20 20 38  20 20 20 20 20 54 69 6D  65 72 20 31 20 43 6F 75  6E 74 0D 0A 09 09 20 20         8     Timer 1 Count  
00004520  20 20 20 20 20 34 37 20  20 20 20 20 20 20 20 57  20 20 20 20 20 20 20 20  20 38 20 20 20 20 20 54       47        W         8     T
00004540  69 6D 65 72 20 32 20 43  6F 75 6E 74 0D 0A 09 09  20 20 20 20 20 20 20 34  38 20 20 20 20 20 20 20  imer 2 Count       48       
00004560  20 57 20 20 20 20 20 20  20 20 20 38 20 20 20 20  20 53 61 6D 70 6C 69 6E  67 20 46 72 65 71 75 65   W         8     Sampling Freque
00004580  6E 63 79 0D 0A 09 09 20  20 20 20 20 20 20 34 39  20 20 20 20 20 20 20 20  52 2F 57 20 20 20 20 20  ncy       49        R/W     
000045A0  20 20 38 20 20 20 20 20  53 61 6D 70 6C 69 6E 67  20 43 6F 6E 74 72 6F 6C  0D 0A 09 09 20 20 20 20    8     Sampling Control    
000045C0  20 20 20 34 42 20 20 20  20 20 20 20 20 57 20 20  20 20 20 20 20 20 20 38  20 20 20 20 20 4A 6F 79     4B        W         8     Joy
000045E0  73 74 69 63 6B 20 74 72  69 6D 20 44 41 43 0D 0A  09 09 20 20 20 20 20 20  20 34 43 20 20 20 20 20  stick trim DAC       4C     
00004600  20 20 20 52 2F 57 20 20  20 20 20 20 20 38 20 20  20 20 20 52 45 53 45 54  0D 0A 0D 0A 0D 0A 0C 32     R/W       8     RESET2
00004620  2E 36 2E 31 2E 31 20 20  44 52 41 4D 20 44 4D 41  20 43 6F 6E 74 72 6F 6C  20 52 65 67 69 73 74 65  .6.1.1  DRAM DMA Control Registe
00004640  72 20 2D 20 28 34 31 29  0D 0A 0D 0A 09 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  r - (41)===================
00004660  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 0D 0A  09 7C 20 37 20 7C 20 36  20 7C 20 35 20 7C 20 34  ==============| 7 | 6 | 5 | 4
00004680  20 7C 20 33 20 7C 20 32  20 7C 20 31 20 7C 20 30  20 7C 0D 0A 09 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D   | 3 | 2 | 1 | 0 |===========
000046A0  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 0D 0A  09 20 20 7C 20 20 20 7C  ======================  |   |
000046C0  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  0D 0A 09 20 20 7C 20 20     |   |   |   |   |   |  |  
000046E0  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 2B 2D 2D 2D 2D 20 45   |   |   |   |   |   |   +---- E
00004700  6E 61 62 6C 65 20 44 4D  41 20 28 31 3D 67 6F 29  0D 0A 09 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  nable DMA (1=go)  |   |   |  
00004720  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 20 44  4D 41 20 64 69 72 65 63   |   |   |   +-------- DMA direc
00004740  74 69 6F 6E 20 28 31 3D  72 65 61 64 29 0D 0A 09  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  tion (1=read)  |   |   |   | 
00004760  20 20 7C 20 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 44 4D 41 20  63 68 61 6E 6E 65 6C 20    |   +------------ DMA channel 
00004780  77 69 64 74 68 0D 0A 09  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 2B 2D 2D 2D 2D 2D  width  |   |   |   |   +-----
000047A0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 5C 0D 0A 09  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 2B 2D  ----------- \  |   |   |   +-
000047C0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 2F 20 44 4D  41 20 52 61 74 65 20 64  ------------------- / DMA Rate d
000047E0  69 76 69 64 65 72 0D 0A  09 20 20 7C 20 20 20 7C  20 20 20 2B 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  ivider  |   |   +------------
00004800  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 20 44 4D 41  20 49 52 51 20 45 6E 61  62 6C 65 0D 0A 09 20 20  ------------ DMA IRQ Enable  
00004820  7C 20 20 20 2B 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  |   +---------------------------
00004840  2D 20 28 52 29 20 44 4D  41 20 49 52 51 20 50 65  6E 64 69 6E 67 0D 0A 09  20 20 7C 20 20 20 20 20  - (R) DMA IRQ Pending  |     
00004860  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 28 57 29 20                              (W) 
00004880  44 41 54 41 20 53 49 5A  45 20 28 30 3D 38 62 69  74 2C 31 3D 31 36 62 69  74 29 0D 0A 09 20 20 2B  DATA SIZE (0=8bit,1=16bit)  +
000048A0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  --------------------------------
000048C0  20 49 6E 76 65 72 74 20  4D 53 42 20 28 77 72 69  74 65 20 6F 6E 6C 79 29  0D 0A 0D 0A 42 69 74 20   Invert MSB (write only)Bit 
000048E0  30 20 2D 09 45 6E 61 62  6C 65 20 74 68 65 20 44  4D 41 20 63 68 61 6E 6E  65 6C 2E 20 54 68 65 20  0 -Enable the DMA channel. The 
00004900  47 46 31 20 77 69 6C 6C  20 62 65 67 69 6E 20 73  65 6E 64 69 6E 67 20 44  4D 41 20 41 43 4B 20 70  GF1 will begin sending DMA ACK p
00004920  72 6F 74 6F 63 6F 6C 2E  20 49 66 20 50 43 20 44  4D 41 20 63 6F 6E 74 72  6F 6C 6C 65 72 20 69 73  rotocol. If PC DMA controller is
00004940  20 70 72 6F 67 72 61 6D  6D 65 64 2C 20 64 61 74  61 20 77 69 6C 6C 20 62  65 67 69 6E 20 62 65 69   programmed, data will begin bei
00004960  6E 67 20 74 72 61 6E 73  66 65 72 72 65 64 2E 20  49 66 20 6E 6F 74 2C 20  64 61 74 61 20 77 69 6C  ng transferred. If not, data wil
00004980  6C 20 6D 6F 76 65 20 61  73 20 73 6F 6F 6E 20 61  73 20 69 74 20 69 73 20  70 72 6F 67 72 61 6D 6D  l move as soon as it is programm
000049A0  65 64 2E 0D 0A 42 69 74  20 31 20 2D 09 44 4D 41  20 74 72 61 6E 73 66 65  72 20 64 69 72 65 63 74  ed.Bit 1 -DMA transfer direct
000049C0  69 6F 6E 2E 20 52 65 61  64 20 69 73 20 74 61 6B  69 6E 67 20 64 61 74 61  20 4F 55 54 20 6F 66 20  ion. Read is taking data OUT of 
000049E0  74 68 65 20 55 6C 74 72  61 53 6F 75 6E 64 2C 20  57 72 69 74 65 20 73 65  6E 64 73 20 64 61 74 61  the UltraSound, Write sends data
00004A00  20 74 6F 20 69 74 2E 0D  0A 42 69 74 20 32 20 2D  09 30 20 3D 20 69 66 20  44 4D 41 20 63 68 61 6E   to it.Bit 2 -0 = if DMA chan
00004A20  6E 65 6C 20 69 73 20 61  6E 20 38 20 62 69 74 20  63 68 61 6E 6E 65 6C 20  28 30 2D 33 29 2E 0D 0A  nel is an 8 bit channel (0-3).
00004A40  09 31 20 3D 20 49 66 20  69 74 20 69 73 20 61 20  31 36 20 62 69 74 20 63  68 61 6E 6E 65 6C 20 28  1 = If it is a 16 bit channel (
00004A60  34 2D 37 29 0D 0A 09 20  20 4E 6F 74 65 3A 20 54  68 69 73 20 69 73 20 49  4E 44 45 50 45 4E 44 45  4-7)  Note: This is INDEPENDE
00004A80  4E 54 20 6F 66 20 74 68  65 20 64 61 74 61 20 73  69 7A 65 2E 0D 0A 42 69  74 20 33 2C 34 20 2D 09  NT of the data size.Bit 3,4 -
00004AA0  44 4D 41 20 52 61 74 65  20 64 69 76 69 73 6F 72  2E 20 54 68 65 20 4D 61  78 69 6D 75 6D 20 72 61  DMA Rate divisor. The Maximum ra
00004AC0  74 65 20 69 73 20 61 70  70 72 6F 78 20 36 35 30  20 6B 68 7A 2E 0D 0A 09  20 20 30 30 20 3D 20 64  te is approx 650 khz.  00 = d
00004AE0  69 76 69 64 65 20 62 79  20 31 0D 0A 09 20 20 30  31 20 3D 20 64 69 76 69  64 65 20 62 79 20 32 0D  ivide by 1  01 = divide by 2
00004B00  0A 09 20 20 31 30 20 3D  20 64 69 76 69 64 65 20  62 79 20 33 0D 0A 09 20  20 31 31 20 3D 20 64 69    10 = divide by 3  11 = di
00004B20  76 69 64 65 20 62 79 20  34 0D 0A 42 69 74 20 35  20 2D 09 44 4D 41 20 74  65 72 6D 69 6E 61 6C 20  vide by 4Bit 5 -DMA terminal 
00004B40  63 6F 75 6E 74 20 69 6E  74 65 72 72 75 70 74 20  65 6E 61 62 6C 65 0D 0A  42 69 74 20 36 20 2D 09  count interrupt enableBit 6 -
00004B60  52 65 61 64 20 20 2D 20  44 4D 41 20 74 65 72 6D  69 6E 61 6C 20 63 6F 75  6E 74 20 49 52 51 20 70  Read  - DMA terminal count IRQ p
00004B80  65 6E 64 69 6E 67 0D 0A  09 57 72 69 74 65 20 2D  20 44 61 74 61 20 73 69  7A 65 20 30 20 3D 20 38  endingWrite - Data size 0 = 8
00004BA0  20 42 69 74 20 64 61 74  61 0D 0A 09 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 31 20   Bit data                  1 
00004BC0  3D 20 31 36 20 62 69 74  20 64 61 74 61 0D 0A 09  20 20 20 20 4E 6F 74 65  3A 20 44 61 74 61 20 73  = 16 bit data    Note: Data s
00004BE0  69 7A 65 20 69 73 20 69  6E 64 65 70 65 6E 64 65  6E 74 20 6F 66 20 63 68  61 6E 6E 65 6C 20 73 69  ize is independent of channel si
00004C00  7A 65 0D 0A 42 69 74 20  37 20 2D 09 31 20 3D 20  49 6E 76 65 72 74 20 48  69 67 68 20 62 69 74 20  zeBit 7 -1 = Invert High bit 
00004C20  74 6F 20 66 6C 69 70 20  64 61 74 61 20 74 6F 20  74 77 6F 73 20 63 6F 6D  70 6C 65 6D 65 6E 74 20  to flip data to twos complement 
00004C40  66 6F 72 6D 2E 0D 0A 09  20 20 20 20 4E 6F 74 65  3A 20 54 68 69 73 20 66  6C 69 70 73 20 62 69 74  form.    Note: This flips bit
00004C60  20 37 20 66 6F 72 20 38  20 62 69 74 20 64 61 74  61 20 61 6E 64 20 62 69  74 20 31 35 20 66 6F 72   7 for 8 bit data and bit 15 for
00004C80  0D 0A 09 20 20 20 20 20  20 20 20 20 20 31 36 20  62 69 74 20 64 61 74 61  2E 0D 0A 0D 0A 0D 0A 0D            16 bit data.
00004CA0  0A 32 2E 36 2E 31 2E 32  20 20 44 4D 41 20 53 74  61 72 74 20 41 64 64 72  65 73 73 20 2D 20 28 34  2.6.1.2  DMA Start Address - (4
00004CC0  32 29 0D 0A 0D 0A 42 69  74 73 20 31 35 2D 30 20  61 72 65 20 41 64 64 72  65 73 73 20 6C 69 6E 65  2)Bits 15-0 are Address line
00004CE0  73 20 31 39 2D 34 2E 0D  0A 0D 0A 54 68 69 73 20  72 65 67 69 73 74 65 72  20 64 65 66 69 6E 65 73  s 19-4.This register defines
00004D00  20 77 68 65 72 65 20 74  68 65 20 44 4D 41 20 77  69 6C 6C 20 74 72 61 6E  73 66 65 72 20 64 61 74   where the DMA will transfer dat
00004D20  61 20 74 6F 20 6F 72 20  66 72 6F 6D 2E 20 20 53  69 6E 63 65 20 6F 6E 6C  79 20 74 68 65 20 75 70  a to or from.  Since only the up
00004D40  70 65 72 20 31 36 20 61  64 64 72 65 73 73 20 62  69 74 73 20 61 72 65 20  75 73 65 64 20 61 6E 64  per 16 address bits are used and
00004D60  20 74 68 65 20 6C 6F 77  65 72 20 34 20 62 69 74  73 20 61 72 65 20 73 65  74 20 74 6F 20 30 2C 20   the lower 4 bits are set to 0, 
00004D80  61 20 44 4D 41 20 74 72  61 6E 73 66 65 72 20 4D  55 53 54 20 62 65 67 69  6E 20 6F 6E 20 61 6E 20  a DMA transfer MUST begin on an 
00004DA0  31 36 20 62 79 74 65 20  62 6F 75 6E 64 61 72 79  20 66 6F 72 20 61 6E 20  38 20 62 69 74 20 44 4D  16 byte boundary for an 8 bit DM
00004DC0  41 20 63 68 61 6E 6E 65  6C 20 28 30 2D 33 29 2E  20 49 66 20 61 20 31 36  20 62 69 74 20 44 4D 41  A channel (0-3). If a 16 bit DMA
00004DE0  20 63 68 61 6E 6E 65 6C  20 69 73 20 62 65 69 6E  67 20 75 73 65 64 2C 20  74 68 65 20 74 72 61 6E   channel is being used, the tran
00004E00  73 66 65 72 20 4D 55 53  54 20 62 65 69 6E 67 20  6F 6E 20 61 20 33 32 20  62 79 74 65 20 62 6F 75  sfer MUST being on a 32 byte bou
00004E20  6E 64 61 72 79 2E 20 41  6E 20 61 64 64 69 74 69  6F 6E 61 6C 20 61 64 64  72 65 73 73 20 74 72 61  ndary. An additional address tra
00004E40  6E 73 6C 61 74 69 6F 6E  20 69 73 20 6E 65 63 65  73 73 61 72 79 20 69 66  20 61 20 31 36 20 62 69  nslation is necessary if a 16 bi
00004E60  74 20 44 4D 41 20 63 68  61 6E 6E 65 6C 20 69 73  20 75 73 65 64 2E 20 46  6F 72 20 73 69 6D 70 6C  t DMA channel is used. For simpl
00004E80  65 20 65 78 61 6D 70 6C  65 20 63 6F 64 65 20 6F  6E 20 68 6F 77 20 74 6F  20 64 6F 20 74 68 69 73  e example code on how to do this
00004EA0  20 74 72 61 6E 73 6C 61  74 69 6F 6E 2C 20 73 65  65 20 74 68 65 20 43 20  66 75 6E 63 74 69 6F 6E   translation, see the C function
00004EC0  20 63 6F 6E 76 65 72 74  5F 74 6F 5F 31 36 28 29  2E 0D 0A 0C 32 2E 36 2E  31 2E 33 20 20 44 52 41   convert_to_16().2.6.1.3  DRA
00004EE0  4D 20 49 2F 4F 20 41 64  64 72 65 73 73 20 28 34  33 2C 34 34 29 0D 0A 0D  0A 54 68 65 73 65 20 32  M I/O Address (43,44)These 2
00004F00  20 72 65 67 69 73 74 65  72 73 20 61 6C 6C 6F 77  20 79 6F 75 20 74 6F 20  73 70 65 63 69 66 79 20   registers allow you to specify 
00004F20  61 6E 20 61 64 64 72 65  73 73 20 74 6F 20 70 65  65 6B 20 61 6E 64 20 70  6F 6B 65 20 64 69 72 65  an address to peek and poke dire
00004F40  63 74 6C 79 20 69 6E 74  6F 20 55 6C 74 72 61 53  6F 75 6E 64 20 44 52 41  4D 2E 20 52 65 67 69 73  ctly into UltraSound DRAM. Regis
00004F60  74 65 72 20 34 33 20 69  73 20 74 68 65 20 6C 6F  77 65 72 20 31 36 20 61  64 64 72 65 73 73 20 6C  ter 43 is the lower 16 address l
00004F80  69 6E 65 73 2E 20 52 65  67 69 73 74 65 72 20 34  34 20 69 73 20 74 68 65  20 75 70 70 65 72 20 34  ines. Register 44 is the upper 4
00004FA0  20 61 64 64 72 65 73 73  20 6C 69 6E 65 73 2E 20  28 62 69 74 73 20 30 2D  33 29 2E 20 52 65 61 64   address lines. (bits 0-3). Read
00004FC0  20 6F 72 20 77 72 69 74  65 20 74 6F 20 72 65 67  69 73 74 65 72 20 33 58  37 20 74 6F 20 67 65 74   or write to register 3X7 to get
00004FE0  20 61 74 20 74 68 65 20  61 64 64 72 65 73 73 20  6C 6F 63 61 74 69 6F 6E  2E 0D 0A 0D 0A 0D 0A 0D   at the address location.
00005000  0A 32 2E 36 2E 31 2E 34  20 20 54 69 6D 65 72 20  43 6F 6E 74 72 6F 6C 20  2D 20 28 34 35 29 0D 0A  2.6.1.4  Timer Control - (45)
00005020  0D 0A 09 09 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  ============================
00005040  3D 3D 3D 3D 3D 0D 0A 09  09 7C 20 37 20 7C 20 36  20 7C 20 35 20 7C 20 34  20 7C 20 33 20 7C 20 32  =====| 7 | 6 | 5 | 4 | 3 | 2
00005060  20 7C 20 31 20 7C 20 30  20 7C 0D 0A 09 09 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D   | 1 | 0 |==================
00005080  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 0D  0A 09 09 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  ===============  |   |   |  
000050A0  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 0D 0A 09 09 20 20  7C 20 20 20 7C 20 20 20   |   |   |   |   |  |   |   
000050C0  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 2B 2D 2D 2D  2D 20 52 65 73 65 72 76  |   |   |   |   |   +---- Reserv
000050E0  65 64 20 28 53 65 74 20  74 6F 20 30 29 0D 0A 09  09 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  ed (Set to 0)  |   |   |   |
00005100  20 20 20 7C 20 20 20 7C  20 20 20 2B 2D 2D 2D 2D  2D 2D 2D 2D 20 52 65 73  65 72 76 65 64 20 28 53     |   |   +-------- Reserved (S
00005120  65 74 20 74 6F 20 30 29  0D 0A 09 09 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  et to 0)  |   |   |   |   | 
00005140  20 20 2B 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 20  45 6E 61 62 6C 65 20 54  69 6D 65 72 20 31 20 49    +------------ Enable Timer 1 I
00005160  52 51 0D 0A 09 09 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  2B 2D 2D 2D 2D 2D 2D 2D  RQ  |   |   |   |   +-------
00005180  2D 2D 2D 2D 2D 2D 2D 2D  2D 20 45 6E 61 62 6C 65  20 54 69 6D 65 72 20 32  20 49 52 51 0D 0A 09 09  --------- Enable Timer 2 IRQ
000051A0  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D    |   |   |   +-----------------
000051C0  2D 2D 2D 20 52 65 73 65  72 76 65 64 20 28 53 65  74 20 74 6F 20 30 29 0D  0A 09 09 20 20 7C 20 20  --- Reserved (Set to 0)  |  
000051E0  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 20 52   |   +------------------------ R
00005200  65 73 65 72 76 65 64 20  28 53 65 74 20 74 6F 20  30 29 0D 0A 09 09 20 20  7C 20 20 20 2B 2D 2D 2D  eserved (Set to 0)  |   +---
00005220  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 20 52 65 73 65 72 76  ------------------------- Reserv
00005240  65 64 20 28 53 65 74 20  74 6F 20 30 29 0D 0A 09  09 20 20 2B 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  ed (Set to 0)  +------------
00005260  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 20 52 65 73  65 72 76 65 64 20 28 53  -------------------- Reserved (S
00005280  65 74 20 74 6F 20 30 29  0D 0A 0D 0A 0D 0A 0D 0A  32 2E 36 2E 31 2E 35 20  20 54 69 6D 65 72 20 31  et to 0)2.6.1.5  Timer 1
000052A0  20 61 6E 64 20 54 69 6D  65 72 20 32 20 43 6F 75  6E 74 20 2D 20 28 34 36  2C 34 37 29 0D 0A 0D 0A   and Timer 2 Count - (46,47)
000052C0  54 68 65 73 65 20 63 6F  75 6E 74 73 20 61 72 65  20 6C 6F 61 64 65 64 20  62 79 20 74 68 65 20 61  These counts are loaded by the a
000052E0  70 70 6C 69 63 61 74 69  6F 6E 20 61 6E 64 20 74  68 65 6E 20 74 68 65 79  20 77 69 6C 6C 20 63 6F  pplication and then they will co
00005300  75 6E 74 20 75 70 20 74  6F 20 24 46 46 20 61 6E  64 20 67 65 6E 65 72 61  74 65 20 61 6E 64 20 49  unt up to $FF and generate and I
00005320  52 51 2E 20 54 69 6D 65  72 20 31 20 68 61 73 20  61 20 67 72 61 6E 75 6C  61 72 69 74 79 20 6F 66  RQ. Timer 1 has a granularity of
00005340  20 38 30 20 6D 69 63 72  6F 73 65 63 6F 6E 64 73  20 28 30 2E 30 30 30 30  38 20 73 65 63 29 20 61   80 microseconds (0.00008 sec) a
00005360  6E 64 20 54 69 6D 65 72  20 32 20 68 61 73 20 61  20 67 72 61 6E 75 6C 61  72 69 74 79 20 6F 66 20  nd Timer 2 has a granularity of 
00005380  33 32 30 20 6D 69 63 72  6F 73 65 63 6F 6E 64 73  20 28 30 2E 30 30 30 33  32 20 73 65 63 29 2E 0D  320 microseconds (0.00032 sec).
000053A0  0A 0D 0A 0D 0A 0D 0A 32  2E 36 2E 31 2E 36 20 20  53 61 6D 70 6C 69 6E 67  20 46 72 65 71 75 65 6E  2.6.1.6  Sampling Frequen
000053C0  63 79 20 2D 20 28 34 38  29 0D 0A 0D 0A 54 68 65  20 66 6F 72 6D 75 6C 61  20 66 6F 72 20 63 61 6C  cy - (48)The formula for cal
000053E0  63 75 6C 61 74 69 6E 67  20 74 68 69 73 20 76 61  6C 75 65 20 69 73 3A 0D  0A 09 72 61 74 65 20 3D  culating this value is:rate =
00005400  20 39 38 37 38 34 30 30  2F 28 31 36 2A 28 46 52  45 51 2B 32 29 29 0D 0A  0D 0A 0D 0A 0C 32 2E 36   9878400/(16*(FREQ+2))2.6
00005420  2E 31 2E 37 20 20 53 61  6D 70 6C 69 6E 67 20 43  6F 6E 74 72 6F 6C 20 52  65 67 69 73 74 65 72 20  .1.7  Sampling Control Register 
00005440  2D 20 28 34 39 29 0D 0A  0D 0A 09 09 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  - (49)====================
00005460  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 0D 0A 09  09 7C 20 37 20 7C 20 36  20 7C 20 35 20 7C 20 34  =============| 7 | 6 | 5 | 4
00005480  20 7C 20 33 20 7C 20 32  20 7C 20 31 20 7C 20 30  20 7C 0D 0A 09 09 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D   | 3 | 2 | 1 | 0 |==========
000054A0  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 0D  0A 09 09 20 20 7C 20 20  =======================  |  
000054C0  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 0D 0A 09 09 20 20   |   |   |   |   |   |   |  
000054E0  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 2B 2D 2D 2D  |   |   |   |   |   |   |   +---
00005500  2D 20 53 74 61 72 74 20  73 61 6D 70 6C 69 6E 67  0D 0A 09 09 20 20 7C 20  20 20 7C 20 20 20 7C 20  - Start sampling  |   |   | 
00005520  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 20  4D 6F 64 65 20 28 30 3D    |   |   |   +-------- Mode (0=
00005540  6D 6F 6E 6F 2C 20 31 3D  73 74 65 72 65 6F 29 0D  0A 09 09 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  mono, 1=stereo)  |   |   |  
00005560  20 7C 20 20 20 7C 20 20  20 2B 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 20 44  4D 41 20 77 69 64 74 68   |   |   +------------ DMA width
00005580  20 28 30 3D 38 62 69 74  2C 31 3D 31 36 62 69 74  29 0D 0A 09 09 20 20 7C  20 20 20 7C 20 20 20 7C   (0=8bit,1=16bit)  |   |   |
000055A0  20 20 20 7C 20 20 20 2B  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  20 52 65 73 65 72 76 65     |   +---------------- Reserve
000055C0  64 20 28 53 65 74 20 74  6F 20 30 29 0D 0A 09 09  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 2B 2D  d (Set to 0)  |   |   |   +-
000055E0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 52 65 73 65  72 76 65 64 20 28 53 65  ------------------- Reserved (Se
00005600  74 20 74 6F 20 30 29 0D  0A 09 09 20 20 7C 20 20  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  t to 0)  |   |   +----------
00005620  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 20 44  4D 41 20 49 52 51 20 65  6E 61 62 6C 65 0D 0A 09  -------------- DMA IRQ enable
00005640  09 20 20 7C 20 20 20 2B  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D    |   +------------------------
00005660  2D 2D 2D 2D 20 28 52 65  61 64 29 20 44 4D 41 20  49 52 51 20 70 65 6E 64  69 6E 67 0D 0A 09 09 20  ---- (Read) DMA IRQ pending 
00005680  20 2B 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D   +------------------------------
000056A0  2D 2D 20 49 6E 76 65 72  74 20 4D 53 42 0D 0A 0D  0A 42 69 74 20 30 20 2D  09 49 66 20 50 43 20 44  -- Invert MSBBit 0 -If PC D
000056C0  4D 41 20 63 6F 6E 74 72  6F 6C 6C 65 72 20 69 73  20 70 72 6F 67 72 61 6D  6D 65 64 2C 20 69 74 20  MA controller is programmed, it 
000056E0  77 69 6C 6C 20 62 65 67  69 6E 20 73 61 6D 70 6C  69 6E 67 20 61 73 20 73  6F 6F 6E 20 61 73 20 74  will begin sampling as soon as t
00005700  68 69 73 20 69 73 20 65  6E 61 62 6C 65 64 2E 0D  0A 42 69 74 20 31 20 2D  09 30 20 3D 20 6D 6F 6E  his is enabled.Bit 1 -0 = mon
00005720  6F 20 0D 0A 09 31 20 3D  20 73 74 65 72 65 6F 20  0D 0A 09 49 6E 20 73 74  65 72 65 6F 20 6D 6F 64  o 1 = stereo In stereo mod
00005740  65 2C 20 74 68 65 20 6F  72 64 65 72 20 6F 66 20  74 68 65 20 64 61 74 61  20 62 79 74 65 73 20 69  e, the order of the data bytes i
00005760  73 20 6C 65 66 74 20 69  73 20 66 69 72 73 74 2C  20 61 6E 64 20 72 69 67  68 74 20 69 73 20 73 65  s left is first, and right is se
00005780  63 6F 6E 64 2E 20 49 66  20 61 20 31 36 20 62 69  74 20 64 61 74 61 20 63  68 61 6E 6E 65 6C 20 69  cond. If a 16 bit data channel i
000057A0  73 20 75 73 65 64 2C 20  74 68 65 20 6C 65 66 74  20 69 73 20 69 6E 20 74  68 65 20 6C 6F 77 65 72  s used, the left is in the lower
000057C0  20 62 79 74 65 2E 0D 0A  42 69 74 20 32 20 2D 09  44 4D 41 20 43 68 61 6E  6E 65 6C 20 77 69 64 74   byte.Bit 2 -DMA Channel widt
000057E0  68 20 28 30 20 3D 20 38  20 62 69 74 2C 20 31 20  3D 20 31 36 20 62 69 74  29 0D 0A 42 69 74 20 35  h (0 = 8 bit, 1 = 16 bit)Bit 5
00005800  20 2D 09 45 6E 61 62 6C  65 20 44 4D 41 20 74 65  72 6D 69 6E 61 6C 20 63  6F 75 6E 74 20 49 52 51   -Enable DMA terminal count IRQ
00005820  0D 0A 42 69 74 20 36 20  2D 09 44 4D 41 20 74 65  72 6D 69 6E 61 6C 20 63  6F 75 6E 74 20 49 52 51  Bit 6 -DMA terminal count IRQ
00005840  20 70 65 6E 64 69 6E 67  0D 0A 42 69 74 20 37 20  2D 09 46 6C 69 70 20 62  69 74 20 37 20 74 6F 20   pendingBit 7 -Flip bit 7 to 
00005860  67 65 74 20 6E 6F 6E 2D  74 77 6F 73 20 63 6F 6D  70 6C 69 6D 65 6E 74 20  64 61 74 61 0D 0A 0D 0A  get non-twos compliment data
00005880  0D 0A 0D 0A 32 2E 36 2E  31 2E 38 20 20 4A 6F 79  73 74 69 63 6B 20 54 72  69 6D 20 44 41 43 20 2D  2.6.1.8  Joystick Trim DAC -
000058A0  20 28 34 42 29 0D 0A 0D  0A 54 68 69 73 20 72 65  67 69 73 74 65 72 20 69  73 20 69 6E 69 74 69 61   (4B)This register is initia
000058C0  6C 69 7A 65 64 20 74 6F  20 34 2E 33 20 76 6F 6C  74 73 20 28 76 61 6C 75  65 20 3D 20 32 39 29 2E  lized to 4.3 volts (value = 29).
000058E0  20 49 74 20 6F 6E 6C 79  20 6E 65 65 64 73 20 74  6F 20 62 65 20 6D 6F 64  69 66 69 65 64 20 74 6F   It only needs to be modified to
00005900  20 61 63 63 6F 75 6E 74  20 66 6F 72 20 66 61 73  74 65 72 2F 73 6C 6F 77  65 72 20 6D 61 63 68 69   account for faster/slower machi
00005920  6E 65 73 2E 20 41 20 75  74 69 6C 69 74 79 20 69  73 20 70 72 6F 76 69 64  65 64 20 28 55 4C 54 52  nes. A utility is provided (ULTR
00005940  41 4A 4F 59 2E 45 58 45  29 20 74 68 61 74 20 73  65 74 73 20 74 68 69 73  20 75 70 2E 20 20 54 68  AJOY.EXE) that sets this up.  Th
00005960  65 72 65 20 73 68 6F 75  6C 64 20 62 65 20 6E 6F  20 72 65 61 73 6F 6E 20  66 6F 72 20 79 6F 75 72  ere should be no reason for your
00005980  20 61 70 70 6C 69 63 61  74 69 6F 6E 20 74 6F 20  6D 6F 64 69 66 79 20 74  68 69 73 20 72 65 67 69   application to modify this regi
000059A0  73 74 65 72 2E 0D 0A 0D  0A 0D 0A 0C 32 2E 36 2E  31 2E 39 20 20 52 65 73  65 74 20 52 65 67 69 73  ster.2.6.1.9  Reset Regis
000059C0  74 65 72 20 2D 20 28 34  43 29 0D 0A 0D 0A 09 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  ter - (4C)=================
000059E0  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  0D 0A 09 7C 20 37 20 7C  20 36 20 7C 20 35 20 7C  ================| 7 | 6 | 5 |
00005A00  20 34 20 7C 20 33 20 7C  20 32 20 7C 20 31 20 7C  20 30 20 7C 0D 0A 09 3D  3D 3D 3D 3D 3D 3D 3D 3D   4 | 3 | 2 | 1 | 0 |=========
00005A20  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  0D 0A 09 20 20 7C 20 20  ========================  |  
00005A40  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 0D 0A 09 20 20 7C   |   |   |   |   |   |   |  |
00005A60  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 2B 2D 2D 2D 2D     |   |   |   |   |   |   +----
00005A80  20 4D 61 73 74 65 72 20  52 65 73 65 74 0D 0A 09  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20   Master Reset  |   |   |   | 
00005AA0  20 20 7C 20 20 20 7C 20  20 20 2B 2D 2D 2D 2D 2D  2D 2D 2D 20 44 41 43 20  45 6E 61 62 6C 65 0D 0A    |   |   +-------- DAC Enable
00005AC0  09 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 2B  2D 2D 2D 2D 2D 2D 2D 2D    |   |   |   |   |   +--------
00005AE0  2D 2D 2D 2D 20 47 46 31  20 4D 61 73 74 65 72 20  49 52 51 20 45 6E 61 62  6C 65 0D 0A 09 20 20 7C  ---- GF1 Master IRQ Enable  |
00005B00  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 2B  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D     |   |   |   +----------------
00005B20  20 52 65 73 65 72 76 65  64 20 28 53 65 74 20 74  6F 20 30 29 0D 0A 09 20  20 7C 20 20 20 7C 20 20   Reserved (Set to 0)  |   |  
00005B40  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 20 52 65 73 65 72   |   +-------------------- Reser
00005B60  76 65 64 20 28 53 65 74  20 74 6F 20 30 29 0D 0A  09 20 20 7C 20 20 20 7C  20 20 20 2B 2D 2D 2D 2D  ved (Set to 0)  |   |   +----
00005B80  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 20 52 65 73  65 72 76 65 64 20 28 53  -------------------- Reserved (S
00005BA0  65 74 20 74 6F 20 30 29  0D 0A 09 20 20 7C 20 20  20 2B 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  et to 0)  |   +--------------
00005BC0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 20 52  65 73 65 72 76 65 64 20  28 53 65 74 20 74 6F 20  -------------- Reserved (Set to 
00005BE0  30 29 0D 0A 09 20 20 2B  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  0)  +------------------------
00005C00  2D 2D 2D 2D 2D 2D 2D 2D  20 52 65 73 65 72 76 65  64 20 28 53 65 74 20 74  6F 20 30 29 0D 0A 0D 0A  -------- Reserved (Set to 0)
00005C20  42 69 74 20 30 20 2D 09  47 46 31 20 4D 61 73 74  65 72 20 52 65 73 65 74  2E 20 30 20 3D 20 72 65  Bit 0 -GF1 Master Reset. 0 = re
00005C40  73 65 74 2C 20 31 20 3D  20 72 75 6E 2E 20 41 73  20 6C 6F 6E 67 20 61 73  20 74 68 69 73 20 69 73  set, 1 = run. As long as this is
00005C60  20 61 20 30 2C 20 69 74  20 77 69 6C 6C 20 62 65  20 68 65 6C 64 20 69 6E  20 61 20 72 65 73 65 74   a 0, it will be held in a reset
00005C80  20 73 74 61 74 65 2E 0D  0A 42 69 74 20 31 20 2D  09 45 6E 61 62 6C 65 20  44 41 43 20 6F 75 74 70   state.Bit 1 -Enable DAC outp
00005CA0  75 74 2E 20 44 41 43 27  73 20 77 69 6C 6C 20 6E  6F 74 20 72 75 6E 20 75  6E 6C 65 73 73 20 74 68  ut. DAC's will not run unless th
00005CC0  69 73 20 62 69 74 20 69  73 20 73 65 74 2E 0D 0A  42 69 74 20 32 20 2D 09  4D 61 73 74 65 72 20 49  is bit is set.Bit 2 -Master I
00005CE0  52 51 20 65 6E 61 62 6C  65 2E 20 54 68 69 73 20  62 69 74 20 4D 55 53 54  20 62 65 20 73 65 74 20  RQ enable. This bit MUST be set 
00005D00  74 6F 20 67 65 74 20 41  4E 59 20 6F 66 20 74 68  65 20 47 46 31 2D 67 65  6E 65 72 61 74 65 64 20  to get ANY of the GF1-generated 
00005D20  49 52 51 73 20 28 77 61  76 65 74 61 62 6C 65 2C  20 76 6F 6C 75 6D 65 2C  20 65 74 63 29 2E 0D 0A  IRQs (wavetable, volume, etc).
00005D40  0D 0A 54 68 69 73 20 72  65 67 69 73 74 65 72 20  77 69 6C 6C 20 6E 6F 72  6D 61 6C 6C 79 20 63 6F  This register will normally co
00005D60  6E 74 61 69 6E 20 74 68  65 20 76 61 6C 75 65 20  24 30 37 20 77 68 69 6C  65 20 79 6F 75 72 20 61  ntain the value $07 while your a
00005D80  70 70 6C 69 63 61 74 69  6F 6E 20 69 73 20 72 75  6E 6E 69 6E 67 2E 0D 0A  0D 0A 0D 0A 0D 0A 32 2E  pplication is running.2.
00005DA0  36 2E 32 20 20 56 6F 69  63 65 2D 73 70 65 63 69  66 69 63 20 52 65 67 69  73 74 65 72 73 0D 0A 0D  6.2  Voice-specific Registers
00005DC0  0A 54 68 65 20 66 6F 6C  6C 6F 77 69 6E 67 20 61  72 65 20 74 68 65 20 76  6F 69 63 65 2D 73 70 65  The following are the voice-spe
00005DE0  63 69 66 69 63 20 72 65  67 69 73 74 65 72 73 2E  20 45 61 63 68 20 76 6F  69 63 65 20 68 61 73 20  cific registers. Each voice has 
00005E00  69 74 73 20 6F 77 6E 20  62 61 6E 6B 20 6F 66 20  72 65 61 64 20 61 6E 64  20 77 72 69 74 65 20 72  its own bank of read and write r
00005E20  65 67 69 73 74 65 72 73  20 74 68 61 74 20 61 6C  74 65 72 20 69 74 73 20  62 65 68 61 76 69 6F 72  egisters that alter its behavior
00005E40  2E 20 54 68 65 20 77 72  69 74 65 20 72 65 67 69  73 74 65 72 73 20 72 61  6E 67 65 20 66 72 6F 6D  . The write registers range from
00005E60  20 30 20 74 6F 20 46 20  61 6E 64 20 74 68 65 20  63 6F 72 72 65 73 70 6F  6E 64 69 6E 67 20 72 65   0 to F and the corresponding re
00005E80  61 64 20 72 65 67 69 73  74 65 72 73 20 72 61 6E  67 65 20 66 72 6F 6D 20  38 30 20 74 6F 20 38 46  ad registers range from 80 to 8F
00005EA0  2E 20 54 6F 20 63 6F 6E  76 65 72 74 20 66 72 6F  6D 20 74 68 65 20 77 72  69 74 65 20 74 6F 20 74  . To convert from the write to t
00005EC0  68 65 20 72 65 61 64 2C  20 6A 75 73 74 20 61 64  64 20 38 30 20 68 65 78  2E 0D 0A 0D 0A 09 09 57  he read, just add 80 hex.W
00005EE0  72 69 74 65 20 20 20 20  52 65 61 64 20 20 20 20  20 57 69 64 74 68 20 20  20 44 65 73 63 72 69 70  rite    Read     Width   Descrip
00005F00  74 69 6F 6E 0D 0A 09 09  20 20 30 20 20 20 20 20  20 20 38 30 20 20 20 20  20 20 20 20 38 20 20 20  tion  0       80        8   
00005F20  20 20 56 6F 69 63 65 20  43 6F 6E 74 72 6F 6C 0D  0A 09 09 20 20 31 20 20  20 20 20 20 20 38 31 20    Voice Control  1       81 
00005F40  20 20 20 20 20 20 31 36  20 20 20 20 20 46 72 65  71 75 65 6E 63 79 20 43  6F 6E 74 72 6F 6C 0D 0A        16     Frequency Control
00005F60  09 09 20 20 32 20 20 20  20 20 20 20 38 32 20 20  20 20 20 20 20 31 36 20  20 20 20 20 53 74 61 72    2       82       16     Star
00005F80  74 69 6E 67 20 41 64 64  72 65 73 73 20 28 48 49  47 48 29 0D 0A 09 09 20  20 33 20 20 20 20 20 20  ting Address (HIGH)  3      
00005FA0  20 38 33 20 20 20 20 20  20 20 31 36 20 20 20 20  20 53 74 61 72 74 69 6E  67 20 41 64 64 72 65 73   83       16     Starting Addres
00005FC0  73 20 28 4C 4F 57 29 0D  0A 09 09 20 20 34 20 20  20 20 20 20 20 38 34 20  20 20 20 20 20 20 31 36  s (LOW)  4       84       16
00005FE0  20 20 20 20 20 45 6E 64  20 41 64 64 72 65 73 73  20 28 48 49 47 48 29 0D  0A 09 09 20 20 35 20 20       End Address (HIGH)  5  
00006000  20 20 20 20 20 38 35 20  20 20 20 20 20 20 31 36  20 20 20 20 20 45 6E 64  20 41 64 64 72 65 73 73       85       16     End Address
00006020  20 28 4C 4F 57 29 0D 0A  09 09 20 20 36 20 20 20  20 20 20 20 38 36 20 20  20 20 20 20 20 20 38 20   (LOW)  6       86        8 
00006040  20 20 20 20 56 6F 6C 75  6D 65 20 52 61 6D 70 20  52 61 74 65 0D 0A 09 09  20 20 37 20 20 20 20 20      Volume Ramp Rate  7     
00006060  20 20 38 37 20 20 20 20  20 20 20 20 38 20 20 20  20 20 56 6F 6C 75 6D 65  20 52 61 6D 70 20 53 74    87        8     Volume Ramp St
00006080  61 72 74 0D 0A 09 09 20  20 38 20 20 20 20 20 20  20 38 38 20 20 20 20 20  20 20 20 38 20 20 20 20  art  8       88        8    
000060A0  20 56 6F 6C 75 6D 65 20  52 61 6D 70 20 45 6E 64  0D 0A 09 09 20 20 39 20  20 20 20 20 20 20 38 39   Volume Ramp End  9       89
000060C0  20 20 20 20 20 20 20 31  36 20 20 20 20 20 43 75  72 72 65 6E 74 20 56 6F  6C 75 6D 65 0D 0A 09 09         16     Current Volume
000060E0  20 20 41 20 20 20 20 20  20 20 38 41 20 20 20 20  20 20 20 31 36 20 20 20  20 20 43 75 72 72 65 6E    A       8A       16     Curren
00006100  74 20 41 64 64 72 65 73  73 20 28 48 49 47 48 29  0D 0A 09 09 20 20 42 20  20 20 20 20 20 20 38 42  t Address (HIGH)  B       8B
00006120  20 20 20 20 20 20 20 31  36 20 20 20 20 20 43 75  72 72 65 6E 74 20 41 64  64 72 65 73 73 20 28 4C         16     Current Address (L
00006140  4F 57 29 0D 0A 09 09 20  20 43 20 20 20 20 20 20  20 38 43 20 20 20 20 20  20 20 20 38 20 20 20 20  OW)  C       8C        8    
00006160  20 50 61 6E 20 50 6F 73  69 74 69 6F 6E 0D 0A 09  09 20 20 44 20 20 20 20  20 20 20 38 44 20 20 20   Pan Position  D       8D   
00006180  20 20 20 20 20 38 20 20  20 20 20 56 6F 6C 75 6D  65 20 43 6F 6E 74 72 6F  6C 0D 0A 09 09 20 20 45       8     Volume Control  E
000061A0  20 20 20 20 20 20 20 38  45 20 20 20 20 20 20 20  20 38 20 20 20 20 20 41  63 74 69 76 65 20 56 6F         8E        8     Active Vo
000061C0  69 63 65 73 20 28 56 6F  69 63 65 20 69 6E 64 65  70 65 6E 64 65 6E 74 29  0D 0A 09 09 20 20 2D 20  ices (Voice independent)  - 
000061E0  20 20 20 20 20 20 38 46  20 20 20 20 20 20 20 20  38 20 20 20 20 20 49 52  51 20 53 74 61 74 75 73        8F        8     IRQ Status
00006200  20 28 56 6F 69 63 65 20  69 6E 64 65 70 65 6E 64  65 6E 74 29 0D 0A 0D 0A  54 68 65 72 65 20 61 72   (Voice independent)There ar
00006220  65 20 73 65 76 65 72 61  6C 20 27 73 65 6C 66 2D  6D 6F 64 69 66 79 69 6E  67 27 20 62 69 74 73 20  e several 'self-modifying' bits 
00006240  64 65 66 69 6E 65 64 20  66 6F 72 20 74 68 65 73  65 20 72 65 67 69 73 74  65 72 73 2E 20 54 68 69  defined for these registers. Thi
00006260  73 20 6D 65 61 6E 73 20  74 68 61 74 20 74 68 65  20 47 46 31 20 6D 61 79  20 63 68 61 6E 67 65 20  s means that the GF1 may change 
00006280  74 68 65 6D 20 61 74 20  61 6E 79 74 69 6D 65 20  6F 6E 20 69 74 73 20 6F  77 6E 2E 20 44 75 65 20  them at anytime on its own. Due 
000062A0  74 6F 20 74 68 65 20 66  61 63 74 20 74 68 61 74  20 74 68 65 20 73 6F 66  74 77 61 72 65 20 6D 75  to the fact that the software mu
000062C0  73 74 20 61 63 63 6F 6D  6D 6F 64 61 74 65 20 74  68 69 73 20 70 68 65 6E  6F 6D 65 6E 61 2C 20 69  st accommodate this phenomena, i
000062E0  74 20 69 73 20 70 6F 73  73 69 62 6C 65 20 74 68  61 74 20 74 68 65 20 47  46 31 20 6D 61 79 20 63  t is possible that the GF1 may c
00006300  68 61 6E 67 65 20 73 6F  6D 65 74 68 69 6E 67 20  69 6D 6D 65 64 69 61 74  65 6C 79 20 61 66 74 65  hange something immediately afte
00006320  72 20 79 6F 75 72 20 61  70 70 6C 69 63 61 74 69  6F 6E 20 68 61 73 20 73  65 74 2F 72 65 73 65 74  r your application has set/reset
00006340  20 6F 6E 65 20 6F 66 20  74 68 65 20 62 69 74 73  2E 20 54 68 69 73 20 69  73 20 64 75 65 20 74 6F   one of the bits. This is due to
00006360  20 74 68 65 20 47 46 31  27 73 20 70 69 70 65 6C  69 6E 65 20 70 72 6F 63  65 73 73 6F 72 20 74 79   the GF1's pipeline processor ty
00006380  70 65 20 6F 66 20 61 72  63 68 69 74 65 63 74 75  72 65 3A 20 69 74 20 64  6F 65 73 20 61 20 72 65  pe of architecture: it does a re
000063A0  61 64 2D 6D 6F 64 69 66  79 2D 77 72 69 74 65 20  63 79 63 6C 65 2C 20 61  6E 64 20 69 66 20 79 6F  ad-modify-write cycle, and if yo
000063C0  75 72 20 61 70 70 6C 69  63 61 74 69 6F 6E 20 6D  6F 64 69 66 69 65 73 20  6F 6E 65 20 6F 66 20 74  ur application modifies one of t
000063E0  68 65 73 65 20 62 69 74  73 20 41 46 54 45 52 20  69 74 20 68 61 73 20 64  6F 6E 65 20 74 68 65 20  hese bits AFTER it has done the 
00006400  72 65 61 64 20 70 6F 72  74 69 6F 6E 20 61 6E 64  20 42 45 46 4F 52 45 20  69 74 20 64 6F 65 73 20  read portion and BEFORE it does 
00006420  74 68 65 20 77 72 69 74  65 20 70 6F 72 74 69 6F  6E 2C 20 69 74 27 73 20  70 6F 73 73 69 62 6C 65  the write portion, it's possible
00006440  20 66 6F 72 20 74 68 65  20 63 68 69 70 20 74 6F  20 70 65 72 66 6F 72 6D  20 69 6E 63 6F 72 72 65   for the chip to perform incorre
00006460  63 74 6C 79 2E 20 54 6F  20 6F 76 65 72 63 6F 6D  65 20 74 68 69 73 2C 20  79 6F 75 20 6E 65 65 64  ctly. To overcome this, you need
00006480  20 74 6F 20 64 6F 20 61  20 64 6F 75 62 6C 65 20  77 72 69 74 65 20 28 77  69 74 68 20 61 20 64 65   to do a double write (with a de
000064A0  6C 61 79 20 69 6E 20 62  65 74 77 65 65 6E 29 20  77 68 65 6E 20 74 68 6F  73 65 20 70 61 72 74 69  lay in between) when those parti
000064C0  63 75 6C 61 72 20 62 69  74 73 20 61 72 65 20 69  6E 76 6F 6C 76 65 64 2E  20 54 68 69 73 20 64 65  cular bits are involved. This de
000064E0  6C 61 79 20 6D 75 73 74  20 62 65 20 61 74 20 6C  65 61 73 74 20 33 20 74  69 6D 65 73 20 74 68 65  lay must be at least 3 times the
00006500  20 6C 65 6E 67 74 68 20  6F 66 20 74 69 6D 65 20  6E 65 63 65 73 73 61 72  79 20 74 6F 20 70 72 6F   length of time necessary to pro
00006520  63 65 73 73 20 61 20 76  6F 69 63 65 2E 20 28 33  2A 31 2E 36 20 6D 69 63  72 6F 73 65 63 73 29 2E  cess a voice. (3*1.6 microsecs).
00006540  20 49 6E 20 74 68 65 20  6C 6F 77 6C 65 76 65 6C  20 63 6F 64 65 2C 20 74  68 69 73 20 69 73 20 64   In the lowlevel code, this is d
00006560  6F 6E 65 20 77 69 74 68  20 61 20 66 75 6E 63 74  69 6F 6E 20 63 61 6C 6C  65 64 20 47 46 31 5F 44  one with a function called GF1_D
00006580  65 6C 61 79 2E 20 54 68  65 20 73 65 6C 66 2D 6D  6F 64 69 66 79 69 6E 67  20 62 69 74 73 20 61 72  elay. The self-modifying bits ar
000065A0  65 20 64 65 73 69 67 6E  61 74 65 64 20 77 69 74  68 20 61 6E 20 28 2A 29  20 61 66 74 65 72 20 74  e designated with an (*) after t
000065C0  68 65 20 70 61 72 74 69  63 75 6C 61 72 20 62 69  74 20 64 65 66 69 6E 69  74 69 6F 6E 2E 0D 0A 0D  he particular bit definition.
000065E0  0A 43 68 61 6E 67 69 6E  67 20 74 68 65 20 73 74  61 72 74 20 61 6E 64 20  65 6E 64 20 70 6F 69 6E  Changing the start and end poin
00006600  74 73 20 6F 66 20 61 20  76 6F 69 63 65 20 77 68  69 6C 65 20 69 74 73 20  70 6C 61 79 69 6E 67 20  ts of a voice while its playing 
00006620  63 61 6E 20 68 61 76 65  20 73 6F 6D 65 20 73 74  72 61 6E 67 65 20 73 69  64 65 20 65 66 66 65 63  can have some strange side effec
00006640  74 73 2E 20 46 6F 72 20  65 78 61 6D 70 6C 65 2C  20 69 66 20 79 6F 75 20  63 68 61 6E 67 65 20 65  ts. For example, if you change e
00006660  6E 64 20 70 6F 69 73 74  69 6F 6E 20 74 6F 20 61  20 6C 6F 77 65 72 20 6C  6F 63 61 74 69 6F 6E 20  nd poistion to a lower location 
00006680  74 68 61 6E 20 69 74 20  69 73 20 63 75 72 72 65  6E 74 6C 79 20 70 6C 61  79 69 6E 67 2C 20 79 6F  than it is currently playing, yo
000066A0  75 20 77 69 6C 6C 20 67  65 74 20 61 6E 64 20 49  52 51 20 28 69 66 20 74  68 65 79 20 61 72 65 20  u will get and IRQ (if they are 
000066C0  65 6E 61 62 6C 65 64 29  2E 20 41 6C 73 6F 2C 20  73 69 6E 63 65 20 74 68  65 20 68 69 67 68 20 61  enabled). Also, since the high a
000066E0  6E 64 20 6C 6F 77 20 62  79 74 65 73 20 61 72 65  20 73 65 74 20 69 6E 64  69 76 69 64 75 61 6C 6C  nd low bytes are set individuall
00006700  79 20 61 6E 64 20 61 73  79 6E 63 68 72 6F 6E 6F  75 73 6C 79 20 74 6F 20  77 68 65 6E 20 74 68 65  y and asynchronously to when the
00006720  20 47 46 31 20 69 73 20  77 6F 72 6B 69 6E 67 20  6F 6E 20 61 20 76 6F 69  63 65 2C 20 69 74 20 69   GF1 is working on a voice, it i
00006740  73 20 70 6F 73 73 69 62  6C 65 20 74 6F 20 67 65  74 20 61 6E 20 75 6E 65  78 70 65 63 74 65 64 20  s possible to get an unexpected 
00006760  49 52 51 20 69 66 20 74  68 65 20 63 75 72 72 65  6E 74 20 20 70 6F 73 69  74 69 6F 6E 20 61 6E 64  IRQ if the current  position and
00006780  20 74 68 65 20 6E 65 77  20 65 6E 64 20 70 6F 73  69 74 69 6F 6E 20 63 72  6F 73 73 2E 0D 0A 0D 0A   the new end position cross.
000067A0  0D 0A 0D 0A 32 2E 36 2E  32 2E 31 20 20 56 6F 69  63 65 20 43 6F 6E 74 72  6F 6C 20 52 65 67 69 73  2.6.2.1  Voice Control Regis
000067C0  74 65 72 20 2D 20 28 30  2C 38 30 29 0D 0A 0D 0A  09 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  ter - (0,80)===============
000067E0  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 0D 0A 09 7C 20 37  20 7C 20 36 20 7C 20 35  ==================| 7 | 6 | 5
00006800  20 7C 20 34 20 7C 20 33  20 7C 20 32 20 7C 20 31  20 7C 20 30 20 7C 0D 0A  09 3D 3D 3D 3D 3D 3D 3D   | 4 | 3 | 2 | 1 | 0 |=======
00006820  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 0D 0A 09 20 20 7C  ==========================  |
00006840  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 7C 0D 0A 09 20     |   |   |   |   |   |   | 
00006860  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 2B 2D 2D   |   |   |   |   |   |   |   +--
00006880  2D 2D 20 56 6F 69 63 65  20 53 74 6F 70 70 65 64  0D 0A 09 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  -- Voice Stopped  |   |   |  
000068A0  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 20 53  74 6F 70 20 56 6F 69 63   |   |   |   +-------- Stop Voic
000068C0  65 0D 0A 09 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 2B 2D 2D 2D 2D 2D  e  |   |   |   |   |   +-----
000068E0  2D 2D 2D 2D 2D 2D 2D 20  31 36 20 62 69 74 20 64  61 74 61 0D 0A 09 20 20  7C 20 20 20 7C 20 20 20  ------- 16 bit data  |   |   
00006900  7C 20 20 20 7C 20 20 20  2B 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 20 4C 6F 6F 70 20 65  |   |   +---------------- Loop e
00006920  6E 61 62 6C 65 0D 0A 09  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 2D  nable  |   |   |   +---------
00006940  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 42 69 2D 64  69 72 65 63 74 69 6F 6E  61 6C 20 6C 6F 6F 70 20  ----------- Bi-directional loop 
00006960  65 6E 61 62 6C 65 0D 0A  09 20 20 7C 20 20 20 7C  20 20 20 2B 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  enable  |   |   +------------
00006980  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 20 57 61 76  65 20 74 61 62 6C 65 20  49 52 51 0D 0A 09 20 20  ------------ Wave table IRQ  
000069A0  7C 20 20 20 2B 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  |   +---------------------------
000069C0  2D 20 44 69 72 65 63 74  69 6F 6E 20 6F 66 20 6D  6F 76 65 6D 65 6E 74 0D  0A 09 20 20 2B 2D 2D 2D  - Direction of movement  +---
000069E0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 20 49 52  ----------------------------- IR
00006A00  51 20 70 65 6E 64 69 6E  67 0D 0A 0D 0A 2A 09 42  69 74 20 30 2D 09 31 20  3D 20 56 6F 69 63 65 20  Q pending*Bit 0-1 = Voice 
00006A20  69 73 20 73 74 6F 70 70  65 64 2E 20 54 68 69 73  20 67 65 74 73 20 73 65  74 20 62 79 20 68 69 74  is stopped. This gets set by hit
00006A40  74 69 6E 67 20 74 68 65  20 65 6E 64 20 61 64 64  72 65 73 73 20 28 6E 6F  74 20 6C 6F 6F 70 69 6E  ting the end address (not loopin
00006A60  67 29 20 6F 72 20 62 79  20 73 65 74 74 69 6E 67  20 62 69 74 20 31 20 69  6E 20 74 68 69 73 20 72  g) or by setting bit 1 in this r
00006A80  65 67 2E 0D 0A 09 42 69  74 20 31 2D 09 31 20 3D  20 53 74 6F 70 20 56 6F  69 63 65 2E 20 4D 61 6E  eg.Bit 1-1 = Stop Voice. Man
00006AA0  75 61 6C 6C 79 20 66 6F  72 63 65 20 76 6F 69 63  65 20 74 6F 20 73 74 6F  70 2E 0D 0A 09 42 69 74  ually force voice to stop.Bit
00006AC0  20 32 2D 09 31 20 3D 20  31 36 20 62 69 74 20 77  61 76 65 20 64 61 74 61  2C 20 30 20 3D 20 38 20   2-1 = 16 bit wave data, 0 = 8 
00006AE0  62 69 74 20 64 61 74 61  0D 0A 09 42 69 74 20 33  2D 09 31 20 3D 20 4C 6F  6F 70 20 74 6F 20 62 65  bit dataBit 3-1 = Loop to be
00006B00  67 69 6E 20 61 64 64 72  65 73 73 20 77 68 65 6E  20 69 74 20 68 69 74 73  20 74 68 65 20 65 6E 64  gin address when it hits the end
00006B20  20 61 64 64 72 65 73 73  2E 0D 0A 09 42 69 74 20  34 2D 09 31 20 3D 20 42  69 2D 64 69 72 65 63 74   address.Bit 4-1 = Bi-direct
00006B40  69 6F 6E 61 6C 20 6C 6F  6F 70 69 6E 67 20 65 6E  61 62 6C 65 64 0D 0A 09  42 69 74 20 35 2D 09 31  ional looping enabledBit 5-1
00006B60  20 3D 20 45 6E 61 62 6C  65 20 77 61 76 65 74 61  62 6C 65 20 49 52 51 2E  20 47 65 6E 65 72 61 74   = Enable wavetable IRQ. Generat
00006B80  65 20 61 6E 20 49 52 51  20 77 68 65 6E 20 74 68  65 20 76 6F 69 63 65 20  68 69 74 73 20 74 68 65  e an IRQ when the voice hits the
00006BA0  20 65 6E 64 20 61 64 64  72 65 73 73 2E 20 57 69  6C 6C 20 67 65 6E 65 72  61 74 65 20 49 52 51 20   end address. Will generate IRQ 
00006BC0  65 76 65 6E 20 69 66 20  6C 6F 6F 70 69 6E 67 20  69 73 20 65 6E 61 62 6C  65 64 2E 0D 0A 2A 09 42  even if looping is enabled.*B
00006BE0  69 74 20 36 2D 09 31 20  3D 20 44 65 63 72 65 61  73 69 6E 67 20 61 64 64  72 65 73 73 65 73 2C 20  it 6-1 = Decreasing addresses, 
00006C00  30 20 3D 20 69 6E 63 72  65 61 73 69 6E 67 20 61  64 64 72 65 73 73 65 73  2E 20 49 74 20 69 73 20  0 = increasing addresses. It is 
00006C20  73 65 6C 66 2D 6D 6F 64  69 66 79 69 6E 67 20 62  65 63 61 75 73 65 20 69  74 20 6D 69 67 68 74 20  self-modifying because it might 
00006C40  73 68 69 66 74 20 64 69  72 65 63 74 69 6F 6E 73  20 77 68 65 6E 20 69 74  20 68 69 74 73 20 6F 6E  shift directions when it hits on
00006C60  65 20 6F 66 20 74 68 65  20 6C 6F 6F 70 20 62 6F  75 6E 64 61 72 69 65 73  20 61 6E 64 20 6C 6F 6F  e of the loop boundaries and loo
00006C80  70 69 6E 67 20 69 73 20  65 6E 61 62 6C 65 64 2E  0D 0A 2A 09 42 69 74 20  37 2D 09 31 20 3D 20 57  ping is enabled.*Bit 7-1 = W
00006CA0  61 76 65 74 61 62 6C 65  20 49 52 51 20 70 65 6E  64 69 6E 67 2E 20 49 66  20 49 52 51 27 73 20 61  avetable IRQ pending. If IRQ's a
00006CC0  72 65 20 65 6E 61 62 6C  65 64 20 61 6E 64 20 6C  6F 6F 70 69 6E 67 20 69  73 20 4E 4F 54 20 65 6E  re enabled and looping is NOT en
00006CE0  61 62 6C 65 64 2C 20 61  6E 20 49 52 51 20 77 69  6C 6C 20 62 65 20 63 6F  6E 73 74 61 6E 74 6C 79  abled, an IRQ will be constantly
00006D00  20 67 65 6E 65 72 61 74  65 64 20 75 6E 74 69 6C  20 74 68 65 20 76 6F 69  63 65 20 69 73 20 73 74   generated until the voice is st
00006D20  6F 70 70 65 64 2E 20 54  68 69 73 20 6D 65 61 6E  73 20 74 68 61 74 20 79  6F 75 20 6D 61 79 20 67  opped. This means that you may g
00006D40  65 74 20 6D 6F 72 65 20  74 68 61 6E 20 31 20 49  52 51 20 69 66 20 69 74  20 69 73 6E 27 74 20 68  et more than 1 IRQ if it isn't h
00006D60  61 6E 64 6C 65 64 20 70  72 6F 70 65 72 6C 79 2E  0D 0A 0D 0A 0C 32 2E 36  2E 32 2E 32 20 20 46 72  andled properly.2.6.2.2  Fr
00006D80  65 71 75 65 6E 63 79 20  43 6F 6E 74 72 6F 6C 20  52 65 67 69 73 74 65 72  20 2D 20 28 31 2C 38 31  equency Control Register - (1,81
00006DA0  29 0D 0A 0D 0A 09 42 69  74 73 20 31 35 2D 31 30  20 2D 20 49 6E 74 65 67  65 72 20 50 6F 72 74 69  )Bits 15-10 - Integer Porti
00006DC0  6F 6E 0D 0A 09 42 69 74  73 20 39 2D 31 20 20 20  2D 20 46 72 61 63 74 69  6F 6E 61 6C 20 50 6F 72  onBits 9-1   - Fractional Por
00006DE0  74 69 6F 6E 0D 0A 09 42  69 74 20 30 20 20 20 20  20 20 2D 20 4E 6F 74 20  75 73 65 64 2E 0D 0A 0D  tionBit 0      - Not used.
00006E00  0A 54 68 69 73 20 72 65  67 69 73 74 65 72 20 64  65 74 65 72 6D 69 6E 65  73 20 74 68 65 20 61 6D  This register determines the am
00006E20  6F 75 6E 74 20 61 64 64  65 64 20 74 6F 20 28 6F  72 20 73 75 62 74 72 61  63 74 65 64 20 66 72 6F  ount added to (or subtracted fro
00006E40  6D 29 20 74 68 65 20 63  75 72 72 65 6E 74 20 70  6F 73 69 74 69 6F 6E 20  6F 66 20 74 68 65 20 76  m) the current position of the v
00006E60  6F 69 63 65 20 74 6F 20  64 65 74 65 72 6D 69 6E  65 20 77 68 65 72 65 20  74 68 65 20 6E 65 78 74  oice to determine where the next
00006E80  20 70 6F 73 69 74 69 6F  6E 20 77 69 6C 6C 20 62  65 2E 20 54 68 69 73 20  69 73 20 68 6F 77 20 74   position will be. This is how t
00006EA0  68 65 20 69 6E 74 65 72  70 6F 6C 61 74 65 64 20  64 61 74 61 20 70 6F 69  6E 74 73 20 61 72 65 20  he interpolated data points are 
00006EC0  64 65 74 65 72 6D 69 6E  65 64 2E 20 49 66 20 74  68 65 20 46 43 20 72 65  67 69 73 74 65 72 20 69  determined. If the FC register i
00006EE0  73 20 6C 65 73 73 20 74  68 61 6E 20 30 2C 20 74  68 65 20 47 46 31 20 77  69 6C 6C 20 69 6E 74 65  s less than 0, the GF1 will inte
00006F00  72 70 6F 6C 61 74 65 20  74 68 65 20 64 61 74 61  20 70 6F 69 6E 74 20 69  6E 20 62 65 74 77 65 65  rpolate the data point in betwee
00006F20  6E 20 74 68 65 20 74 77  6F 20 61 63 74 75 61 6C  20 64 61 74 61 20 70 6F  69 6E 74 73 2E 20 4E 6F  n the two actual data points. No
00006F40  74 65 20 74 68 61 74 20  74 68 65 20 46 43 20 63  61 6E 20 62 65 20 67 72  65 61 74 65 72 20 74 68  te that the FC can be greater th
00006F60  61 6E 20 31 2E 20 54 68  69 73 20 61 6C 6C 6F 77  73 20 66 6F 72 20 73 6B  69 70 70 69 6E 67 20 6F  an 1. This allows for skipping o
00006F80  76 65 72 20 64 61 74 61  20 62 79 74 65 73 2E 20  54 68 65 20 61 63 74 75  61 6C 20 66 72 65 71 75  ver data bytes. The actual frequ
00006FA0  65 6E 63 79 20 74 68 61  74 20 69 74 20 77 69 6C  6C 20 70 6C 61 79 20 62  61 63 6B 20 69 73 20 64  ency that it will play back is d
00006FC0  69 72 65 63 74 6C 79 20  72 65 6C 61 74 65 64 20  74 6F 20 74 68 65 20 6E  75 6D 62 65 72 20 6F 66  irectly related to the number of
00006FE0  20 61 63 74 69 76 65 20  76 6F 69 63 65 20 73 70  65 63 69 66 69 65 64 20  28 72 65 67 69 73 74 65   active voice specified (registe
00007000  72 20 38 45 29 2E 0D 0A  0D 0A 0D 0A 0D 0A 32 2E  36 2E 32 2E 33 20 20 53  74 61 72 74 69 6E 67 20  r 8E).2.6.2.3  Starting 
00007020  6C 6F 63 61 74 69 6F 6E  20 48 49 47 48 20 2D 20  28 32 2C 38 32 29 0D 0A  0D 0A 42 69 74 73 20 31  location HIGH - (2,82)Bits 1
00007040  32 2D 30 09 61 72 65 20  74 68 65 20 48 49 47 48  20 31 33 20 62 69 74 73  20 6F 66 20 74 68 65 20  2-0are the HIGH 13 bits of the 
00007060  61 64 64 72 65 73 73 20  6F 66 20 74 68 65 20 73  74 61 72 74 69 6E 67 20  6C 6F 63 61 74 69 6F 6E  address of the starting location
00007080  20 6F 66 20 74 68 65 20  77 61 76 65 66 6F 72 6D  20 28 41 64 64 72 20 6C  69 6E 65 73 20 31 39 2D   of the waveform (Addr lines 19-
000070A0  37 29 2E 0D 0A 42 69 74  73 20 31 35 2D 31 33 09  61 72 65 20 6E 6F 74 20  75 73 65 64 2E 0D 0A 0D  7).Bits 15-13are not used.
000070C0  0A 0D 0A 0D 0A 32 2E 36  2E 32 2E 34 20 20 53 74  61 72 74 69 6E 67 20 6C  6F 63 61 74 69 6F 6E 20  2.6.2.4  Starting location 
000070E0  4C 4F 57 20 2D 20 28 33  2C 38 33 29 0D 0A 0D 0A  42 69 74 73 20 31 35 2D  39 09 61 72 65 20 74 68  LOW - (3,83)Bits 15-9are th
00007100  65 20 6C 6F 77 20 37 20  62 69 74 73 20 6F 66 20  74 68 65 20 61 64 64 72  65 73 73 20 6F 66 20 74  e low 7 bits of the address of t
00007120  68 65 20 73 74 61 72 74  69 6E 67 20 6C 6F 63 61  74 69 6F 6E 20 6F 66 20  74 68 65 20 77 61 76 65  he starting location of the wave
00007140  66 6F 72 6D 2E 20 28 41  64 64 72 20 6C 69 6E 65  73 20 36 2D 30 29 2E 0D  0A 42 69 74 73 20 38 2D  form. (Addr lines 6-0).Bits 8-
00007160  35 09 61 72 65 20 74 68  65 20 66 72 61 63 74 69  6F 6E 61 6C 20 70 61 72  74 20 6F 66 20 74 68 65  5are the fractional part of the
00007180  20 73 74 61 72 74 69 6E  67 20 61 64 64 72 65 73  73 2E 0D 0A 42 69 74 73  20 34 2D 30 09 61 72 65   starting address.Bits 4-0are
000071A0  20 6E 6F 74 20 75 73 65  64 2E 0D 0A 0D 0A 0D 0A  0D 0A 32 2E 36 2E 32 2E  35 20 20 45 6E 64 20 41   not used.2.6.2.5  End A
000071C0  64 64 72 65 73 73 20 48  49 47 48 20 2D 20 28 34  2C 38 34 29 0D 0A 0D 0A  42 69 74 73 20 31 32 2D  ddress HIGH - (4,84)Bits 12-
000071E0  30 09 61 72 65 20 74 68  65 20 68 69 67 68 20 31  33 20 62 69 74 73 20 6F  66 20 74 68 65 20 61 64  0are the high 13 bits of the ad
00007200  64 72 65 73 73 20 6F 66  20 74 68 65 20 65 6E 64  69 6E 67 20 6C 6F 63 61  74 69 6F 6E 20 6F 66 20  dress of the ending location of 
00007220  74 68 65 20 77 61 76 65  66 6F 72 6D 2E 20 28 41  64 64 72 20 6C 69 6E 65  73 20 31 39 2D 37 29 0D  the waveform. (Addr lines 19-7)
00007240  0A 42 69 74 73 20 31 35  2D 31 33 09 61 72 65 20  6E 6F 74 20 75 73 65 64  2E 0D 0A 0D 0A 0D 0A 0D  Bits 15-13are not used.
00007260  0A 32 2E 36 2E 32 2E 36  20 20 45 6E 64 20 41 64  64 72 65 73 73 20 4C 4F  57 20 2D 20 28 35 2C 38  2.6.2.6  End Address LOW - (5,8
00007280  35 29 0D 0A 0D 0A 42 69  74 73 20 31 35 2D 39 09  61 72 65 20 74 68 65 20  6C 6F 77 20 37 20 62 69  5)Bits 15-9are the low 7 bi
000072A0  74 73 20 6F 66 20 74 68  65 20 61 64 64 72 65 73  73 20 6F 66 20 74 68 65  20 65 6E 64 69 6E 67 20  ts of the address of the ending 
000072C0  6C 6F 63 61 74 69 6F 6E  20 6F 66 20 74 68 65 20  77 61 76 65 66 6F 72 6D  2E 20 28 41 64 64 72 20  location of the waveform. (Addr 
000072E0  6C 69 6E 65 73 20 36 2D  30 29 2E 0D 0A 42 69 74  73 20 38 2D 35 09 61 72  65 20 74 68 65 20 66 72  lines 6-0).Bits 8-5are the fr
00007300  61 63 74 69 6F 6E 61 6C  20 70 61 72 74 20 6F 66  20 74 68 65 20 65 6E 64  69 6E 67 20 61 64 64 72  actional part of the ending addr
00007320  65 73 73 2E 0D 0A 42 69  74 73 20 34 2D 30 09 61  72 65 20 6E 6F 74 20 75  73 65 64 2E 0D 0A 0D 0A  ess.Bits 4-0are not used.
00007340  0C 32 2E 36 2E 32 2E 37  20 20 56 6F 6C 75 6D 65  20 52 61 6D 70 20 52 61  74 65 20 2D 20 28 36 2C  2.6.2.7  Volume Ramp Rate - (6,
00007360  38 36 29 0D 0A 0D 0A 42  69 74 73 20 35 2D 30 09  69 73 20 74 68 65 20 61  6D 6F 75 6E 74 20 61 64  86)Bits 5-0is the amount ad
00007380  64 65 64 20 74 6F 20 28  6F 72 20 73 75 62 74 72  61 63 74 65 64 20 66 72  6F 6D 29 20 74 68 65 20  ded to (or subtracted from) the 
000073A0  63 75 72 72 65 6E 74 20  76 6F 6C 75 6D 65 20 74  6F 20 67 65 74 20 74 68  65 20 6E 65 78 74 20 76  current volume to get the next v
000073C0  6F 6C 75 6D 65 2E 20 54  68 65 20 72 61 6E 67 65  20 69 73 20 66 72 6F 6D  20 31 20 74 6F 20 36 33  olume. The range is from 1 to 63
000073E0  2E 20 54 68 65 20 6C 61  72 67 65 72 20 74 68 65  20 6E 75 6D 62 65 72 2C  20 74 68 65 20 67 72 65  . The larger the number, the gre
00007400  61 74 65 72 20 74 68 65  20 76 6F 6C 75 6D 65 20  73 74 65 70 2E 0D 0A 42  69 74 73 20 37 2D 36 09  ater the volume step.Bits 7-6
00007420  64 65 66 69 6E 65 73 20  74 68 65 20 72 61 74 65  20 61 74 20 77 68 69 63  68 20 74 68 65 20 69 6E  defines the rate at which the in
00007440  63 72 65 6D 65 6E 74 20  69 73 20 61 70 70 6C 69  65 64 2E 0D 0A 0D 0A 50  6C 65 61 73 65 20 73 65  crement is applied.Please se
00007460  65 20 73 65 63 74 69 6F  6E 20 32 2E 31 36 20 66  6F 72 20 6D 6F 72 65 20  69 6E 66 6F 72 6D 61 74  e section 2.16 for more informat
00007480  69 6F 6E 20 6F 6E 20 68  61 72 64 77 61 72 65 20  76 6F 6C 75 6D 65 20 72  61 6D 70 69 6E 67 2E 0D  ion on hardware volume ramping.
000074A0  0A 0D 0A 0D 0A 0D 0A 32  2E 36 2E 32 2E 38 20 20  56 6F 6C 75 6D 65 20 52  61 6D 70 20 53 74 61 72  2.6.2.8  Volume Ramp Star
000074C0  74 20 2D 20 28 37 2C 38  37 29 0D 0A 0D 0A 42 69  74 73 20 37 2D 34 09 45  78 70 6F 6E 65 6E 74 0D  t - (7,87)Bits 7-4Exponent
000074E0  0A 42 69 74 73 20 33 2D  30 09 4D 61 6E 74 69 73  73 61 0D 0A 0D 0A 54 68  69 73 20 72 65 67 69 73  Bits 3-0MantissaThis regis
00007500  74 65 72 20 73 70 65 63  69 66 69 65 73 20 74 68  65 20 73 74 61 72 74 69  6E 67 20 70 6F 73 69 74  ter specifies the starting posit
00007520  69 6F 6E 20 6F 66 20 61  20 76 6F 6C 75 6D 65 20  72 61 6D 70 2E 20 53 65  65 20 74 68 65 20 73 70  ion of a volume ramp. See the sp
00007540  65 63 69 61 6C 20 73 65  63 74 69 6F 6E 20 6F 6E  20 76 6F 6C 75 6D 65 20  72 61 6D 70 69 6E 67 20  ecial section on volume ramping 
00007560  66 6F 72 20 61 20 6D 6F  72 65 20 63 6F 6D 70 6C  65 74 65 20 65 78 70 6C  61 6E 61 74 69 6F 6E 20  for a more complete explanation 
00007580  6F 66 20 68 6F 77 20 74  68 69 73 20 72 65 67 69  73 74 65 72 20 77 6F 72  6B 73 2E 0D 0A 0D 0A 50  of how this register works.P
000075A0  6C 65 61 73 65 20 73 65  65 20 73 65 63 74 69 6F  6E 20 32 2E 31 36 20 66  6F 72 20 6D 6F 72 65 20  lease see section 2.16 for more 
000075C0  69 6E 66 6F 72 6D 61 74  69 6F 6E 20 6F 6E 20 68  61 72 64 77 61 72 65 20  76 6F 6C 75 6D 65 20 72  information on hardware volume r
000075E0  61 6D 70 69 6E 67 2E 0D  0A 0D 0A 0D 0A 0D 0A 32  2E 36 2E 32 2E 39 20 20  56 6F 6C 75 6D 65 20 52  amping.2.6.2.9  Volume R
00007600  61 6D 70 20 45 6E 64 20  2D 20 28 38 2C 38 38 29  0D 0A 0D 0A 42 69 74 73  20 37 2D 34 09 45 78 70  amp End - (8,88)Bits 7-4Exp
00007620  6F 6E 65 6E 74 0D 0A 42  69 74 73 20 33 2D 30 09  4D 61 6E 74 69 73 73 61  0D 0A 0D 0A 54 68 69 73  onentBits 3-0MantissaThis
00007640  20 72 65 67 69 73 74 65  72 20 73 70 65 63 69 66  69 65 73 20 74 68 65 20  65 6E 64 69 6E 67 20 70   register specifies the ending p
00007660  6F 73 69 74 69 6F 6E 20  6F 66 20 61 20 76 6F 6C  75 6D 65 20 72 61 6D 70  2E 20 20 53 65 65 20 74  osition of a volume ramp.  See t
00007680  68 65 20 73 70 65 63 69  61 6C 20 73 65 63 74 69  6F 6E 20 6F 6E 20 76 6F  6C 75 6D 65 20 72 61 6D  he special section on volume ram
000076A0  70 69 6E 67 20 66 6F 72  20 61 20 6D 6F 72 65 20  63 6F 6D 70 6C 65 74 65  20 65 78 70 6C 61 6E 61  ping for a more complete explana
000076C0  74 69 6F 6E 20 6F 66 20  68 6F 77 20 74 68 69 73  20 72 65 67 69 73 74 65  72 20 77 6F 72 6B 73 2E  tion of how this register works.
000076E0  0D 0A 0D 0A 4E 6F 74 65  3A 09 54 68 65 20 73 74  61 72 74 69 6E 67 20 76  6F 6C 75 6D 65 20 6D 75  Note:The starting volume mu
00007700  73 74 20 61 6C 77 61 79  73 20 62 65 20 6C 65 73  73 20 74 68 61 6E 20 74  68 65 20 65 6E 64 69 6E  st always be less than the endin
00007720  67 20 76 6F 6C 75 6D 65  2E 20 49 66 20 79 6F 75  20 77 61 6E 74 20 74 68  65 20 76 6F 6C 75 6D 65  g volume. If you want the volume
00007740  20 74 6F 20 72 61 6D 70  20 64 6F 77 6E 2C 20 74  75 72 6E 20 6F 6E 20 74  68 65 20 64 65 63 72 65   to ramp down, turn on the decre
00007760  61 73 69 6E 67 20 76 6F  6C 75 6D 65 20 62 69 74  20 69 6E 20 74 68 65 20  56 6F 6C 75 6D 65 20 43  asing volume bit in the Volume C
00007780  6F 6E 74 72 6F 6C 20 52  65 67 69 73 74 65 72 2E  0D 0A 0D 0A 50 6C 65 61  73 65 20 73 65 65 20 73  ontrol Register.Please see s
000077A0  65 63 74 69 6F 6E 20 32  2E 31 36 20 66 6F 72 20  6D 6F 72 65 20 69 6E 66  6F 72 6D 61 74 69 6F 6E  ection 2.16 for more information
000077C0  20 6F 6E 20 68 61 72 64  77 61 72 65 20 76 6F 6C  75 6D 65 20 72 61 6D 70  69 6E 67 2E 0D 0A 0D 0A   on hardware volume ramping.
000077E0  0D 0A 0C 32 2E 36 2E 32  2E 31 30 20 20 43 75 72  72 65 6E 74 20 56 6F 6C  75 6D 65 20 2D 20 28 39  2.6.2.10  Current Volume - (9
00007800  2C 38 39 29 0D 0A 0D 0A  2A 20 42 69 74 73 20 31  35 2D 31 32 09 45 78 70  6F 6E 65 6E 74 0D 0A 2A  ,89)* Bits 15-12Exponent*
00007820  20 42 69 74 73 20 31 31  2D 34 09 09 4D 61 6E 74  69 73 73 61 0D 0A 20 20  42 69 74 73 20 33 2D 30   Bits 11-4Mantissa  Bits 3-0
00007840  09 09 52 65 73 65 72 76  65 64 20 28 53 65 74 20  74 6F 20 30 29 0D 0A 0D  0A 4E 6F 74 65 3A 20 09  Reserved (Set to 0)Note: 
00007860  54 68 69 73 20 72 65 67  69 73 74 65 72 20 68 61  73 20 34 20 65 78 74 72  61 20 62 69 74 73 20 6F  This register has 4 extra bits o
00007880  66 20 70 72 65 63 69 73  69 6F 6E 20 74 68 61 74  20 69 73 20 6E 65 63 65  73 73 61 72 79 20 66 6F  f precision that is necessary fo
000078A0  72 20 66 69 6E 65 72 20  67 72 61 6E 75 6C 61 72  69 74 79 20 6F 66 20 76  6F 6C 75 6D 65 20 70 6C  r finer granularity of volume pl
000078C0  61 63 65 6D 65 6E 74 2E  20 20 54 68 65 20 65 78  74 72 61 20 62 69 74 73  20 61 72 65 20 75 73 65  acement.  The extra bits are use
000078E0  64 20 64 75 72 69 6E 67  20 61 20 76 6F 6C 75 6D  65 20 72 61 6D 70 2E 0D  0A 0D 0A 4E 6F 74 65 3A  d during a volume ramp.Note:
00007900  20 09 54 68 69 73 20 69  73 20 61 20 73 65 6C 66  2D 6D 6F 64 69 66 79 69  6E 67 20 76 61 6C 75 65   This is a self-modifying value
00007920  2E 20 54 68 65 20 47 46  31 20 77 69 6C 6C 20 75  70 64 61 74 65 20 74 68  69 73 20 72 65 67 69 73  . The GF1 will update this regis
00007940  74 65 72 20 61 73 20 69  74 20 72 61 6D 70 73 2E  0D 0A 0D 0A 4E 6F 74 65  3A 20 09 59 6F 75 20 73  ter as it ramps.Note: You s
00007960  68 6F 75 6C 64 20 61 6C  77 61 79 73 20 73 65 74  20 74 68 69 73 20 72 65  67 69 73 74 65 72 20 65  hould always set this register e
00007980  71 75 61 6C 20 74 6F 20  74 68 65 20 76 61 6C 75  65 20 6F 66 20 74 68 65  20 62 65 67 69 6E 6E 69  qual to the value of the beginni
000079A0  6E 67 20 6F 66 20 74 68  65 20 76 6F 6C 75 6D 65  20 72 61 6D 70 20 28 73  74 61 72 74 20 4F 52 20  ng of the volume ramp (start OR 
000079C0  65 6E 64 29 2E 0D 0A 0D  0A 50 6C 65 61 73 65 20  73 65 65 20 73 65 63 74  69 6F 6E 20 32 2E 31 36  end).Please see section 2.16
000079E0  20 66 6F 72 20 6D 6F 72  65 20 69 6E 66 6F 72 6D  61 74 69 6F 6E 20 6F 6E  20 68 61 72 64 77 61 72   for more information on hardwar
00007A00  65 20 76 6F 6C 75 6D 65  20 72 61 6D 70 69 6E 67  2E 0D 0A 0D 0A 0D 0A 0D  0A 32 2E 36 2E 32 2E 31  e volume ramping.2.6.2.1
00007A20  31 20 20 43 75 72 72 65  6E 74 20 4C 6F 63 61 74  69 6F 6E 20 48 49 47 48  20 2D 20 28 41 2C 38 41  1  Current Location HIGH - (A,8A
00007A40  29 0D 0A 0D 0A 42 69 74  73 20 31 35 2D 31 33 09  52 65 73 65 72 76 65 64  20 28 53 65 74 20 74 6F  )Bits 15-13Reserved (Set to
00007A60  20 30 29 0D 0A 42 69 74  73 20 31 32 2D 30 09 48  69 67 68 20 31 33 20 62  69 74 73 20 6F 66 20 61   0)Bits 12-0High 13 bits of a
00007A80  64 64 72 65 73 73 20 28  61 64 64 72 65 73 73 20  6C 69 6E 65 73 20 31 39  2D 37 29 0D 0A 0D 0A 0D  ddress (address lines 19-7)
00007AA0  0A 0D 0A 32 2E 36 2E 32  2E 31 32 20 20 43 75 72  72 65 6E 74 20 4C 6F 63  61 74 69 6F 6E 20 4C 4F  2.6.2.12  Current Location LO
00007AC0  57 20 2D 20 28 42 2C 38  42 29 0D 0A 0D 0A 42 69  74 73 20 31 35 2D 39 09  4C 6F 77 20 37 20 62 69  W - (B,8B)Bits 15-9Low 7 bi
00007AE0  74 73 20 6F 66 20 61 64  64 72 65 73 73 2E 20 28  61 64 64 72 65 73 73 20  6C 69 6E 65 73 20 36 2D  ts of address. (address lines 6-
00007B00  30 29 0D 0A 42 69 74 73  20 38 2D 30 09 39 20 62  69 74 20 66 72 61 63 74  69 6F 6E 61 6C 20 70 6F  0)Bits 8-09 bit fractional po
00007B20  73 69 74 69 6F 6E 2E 0D  0A 0D 0A 0D 0A 0D 0A 32  2E 36 2E 32 2E 31 33 20  20 50 61 6E 20 50 6F 73  sition.2.6.2.13  Pan Pos
00007B40  69 74 69 6F 6E 20 2D 20  28 43 2C 38 43 29 0D 0A  0D 0A 42 69 74 73 20 38  2D 34 09 52 65 73 65 72  ition - (C,8C)Bits 8-4Reser
00007B60  76 65 64 20 28 53 65 74  20 74 6F 20 30 29 0D 0A  42 69 74 73 20 33 2D 30  09 50 61 6E 20 70 6F 73  ved (Set to 0)Bits 3-0Pan pos
00007B80  69 74 69 6F 6E 2E 20 28  30 3D 66 75 6C 6C 20 6C  65 66 74 2C 20 31 35 3D  66 75 6C 6C 20 72 69 67  ition. (0=full left, 15=full rig
00007BA0  68 74 29 0D 0A 0D 0A 0D  0A 0C 32 2E 36 2E 32 2E  31 34 20 20 56 6F 6C 75  6D 65 20 52 61 6D 70 20  ht)2.6.2.14  Volume Ramp 
00007BC0  43 6F 6E 74 72 6F 6C 20  52 65 67 69 73 74 65 72  20 2D 20 28 44 2C 38 44  29 0D 0A 0D 0A 09 3D 3D  Control Register - (D,8D)==
00007BE0  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 0D  ===============================
00007C00  0A 09 7C 20 37 20 7C 20  36 20 7C 20 35 20 7C 20  34 20 7C 20 33 20 7C 20  32 20 7C 20 31 20 7C 20  | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 
00007C20  30 20 7C 0D 0A 09 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  0 |==========================
00007C40  3D 3D 3D 3D 3D 3D 3D 0D  0A 09 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  =======  |   |   |   |   |   
00007C60  7C 20 20 20 7C 20 20 20  7C 0D 0A 09 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  |   |   |  |   |   |   |   | 
00007C80  20 20 7C 20 20 20 7C 20  20 20 2B 2D 2D 2D 2D 20  52 61 6D 70 20 53 74 6F  70 70 65 64 0D 0A 09 20    |   |   +---- Ramp Stopped 
00007CA0  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 2B 2D 2D 2D 2D 2D 2D   |   |   |   |   |   |   +------
00007CC0  2D 2D 20 53 74 6F 70 20  52 61 6D 70 0D 0A 09 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  -- Stop Ramp  |   |   |   |  
00007CE0  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 20 52 6F 6C 6C 6F  76 65 72 20 63 6F 6E 64   |   +------------ Rollover cond
00007D00  69 74 69 6F 6E 0D 0A 09  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 2B 2D 2D 2D 2D 2D  ition  |   |   |   |   +-----
00007D20  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 4C 6F 6F 70  20 45 6E 61 62 6C 65 0D  0A 09 20 20 7C 20 20 20  ----------- Loop Enable  |   
00007D40  7C 20 20 20 7C 20 20 20  2B 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 20 42 69  |   |   +-------------------- Bi
00007D60  2D 64 69 72 65 63 74 69  6F 6E 61 6C 20 6C 6F 6F  70 20 65 6E 61 62 6C 65  0D 0A 09 20 20 7C 20 20  -directional loop enable  |  
00007D80  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 20 56   |   +------------------------ V
00007DA0  6F 6C 75 6D 65 20 72 61  6D 70 20 49 52 51 20 65  6E 61 62 6C 65 0D 0A 09  20 20 7C 20 20 20 2B 2D  olume ramp IRQ enable  |   +-
00007DC0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 44 69 72 65  --------------------------- Dire
00007DE0  63 74 69 6F 6E 0D 0A 09  20 20 2B 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  ction  +---------------------
00007E00  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 49 52 51 20  70 65 6E 64 69 6E 67 0D  0A 0D 0A 2A 09 42 69 74  ----------- IRQ pending*Bit
00007E20  20 30 2D 09 53 68 6F 77  20 74 68 65 20 72 61 6D  70 20 68 61 73 20 73 74  6F 70 70 65 64 0D 0A 09   0-Show the ramp has stopped
00007E40  42 69 74 20 31 2D 09 4D  61 6E 75 61 6C 6C 79 20  73 74 6F 70 20 74 68 65  20 72 61 6D 70 2E 0D 0A  Bit 1-Manually stop the ramp.
00007E60  09 42 69 74 20 32 2D 09  52 6F 6C 6C 20 6F 76 65  72 20 63 6F 6E 64 69 74  69 6F 6E 2E 20 54 68 69  Bit 2-Roll over condition. Thi
00007E80  73 20 62 69 74 20 70 65  72 74 61 69 6E 73 20 6D  6F 72 65 20 74 6F 77 61  72 64 73 20 74 68 65 20  s bit pertains more towards the 
00007EA0  6C 6F 63 61 74 69 6F 6E  20 6F 66 20 74 68 65 20  76 6F 69 63 65 20 72 61  74 68 65 72 20 74 68 61  location of the voice rather tha
00007EC0  6E 20 69 74 73 20 76 6F  6C 75 6D 65 2E 20 49 74  73 20 70 75 72 70 6F 73  65 20 69 73 20 74 6F 20  n its volume. Its purpose is to 
00007EE0  67 65 6E 65 72 61 74 65  20 61 6E 20 49 52 51 20  61 6E 64 20 4E 4F 54 20  73 74 6F 70 20 28 6F 72  generate an IRQ and NOT stop (or
00007F00  20 6C 6F 6F 70 29 2E 20  49 74 20 77 69 6C 6C 20  67 65 6E 65 72 61 74 65  20 61 6E 20 49 52 51 20   loop). It will generate an IRQ 
00007F20  61 6E 64 20 74 68 65 20  76 6F 69 63 65 27 73 20  61 64 64 72 65 73 73 20  77 69 6C 6C 20 63 6F 6E  and the voice's address will con
00007F40  74 69 6E 75 65 20 74 6F  20 6D 6F 76 65 20 74 68  72 75 20 44 52 41 4D 20  69 6E 20 74 68 65 20 73  tinue to move thru DRAM in the s
00007F60  61 6D 65 20 64 69 72 65  63 74 69 6F 6E 2E 20 54  68 69 73 20 63 61 6E 20  62 65 20 61 20 76 65 72  ame direction. This can be a ver
00007F80  79 20 70 6F 77 65 72 66  75 6C 20 66 65 61 74 75  72 65 2E 20 49 74 20 61  6C 6C 6F 77 73 20 74 68  y powerful feature. It allows th
00007FA0  65 20 61 70 70 6C 69 63  61 74 69 6F 6E 20 74 6F  20 67 65 74 20 61 6E 20  69 6E 74 65 72 72 75 70  e application to get an interrup
00007FC0  74 20 77 69 74 68 6F 75  74 20 68 61 76 69 6E 67  20 74 68 65 20 73 6F 75  6E 64 20 73 74 6F 70 2E  t without having the sound stop.
00007FE0  20 54 68 69 73 20 63 61  6E 20 62 65 20 65 61 73  69 6C 79 20 75 73 65 64  20 74 6F 20 69 6D 70 6C   This can be easily used to impl
00008000  65 6D 65 6E 74 20 61 20  70 69 6E 67 2D 70 6F 6E  67 20 62 75 66 66 65 72  20 61 6C 67 6F 72 69 74  ement a ping-pong buffer algorit
00008020  68 6D 20 73 6F 20 61 6E  20 61 70 70 6C 69 63 61  74 69 6F 6E 20 63 61 6E  20 6B 65 65 70 20 66 65  hm so an application can keep fe
00008040  65 64 69 6E 67 20 69 74  20 64 61 74 61 20 61 6E  64 20 74 68 65 72 65 20  77 69 6C 6C 20 62 65 20  eding it data and there will be 
00008060  6E 6F 20 70 6F 70 73 2E  20 45 76 65 6E 20 69 66  20 6C 6F 6F 70 69 6E 67  20 69 73 20 65 6E 61 62  no pops. Even if looping is enab
00008080  6C 65 64 2C 20 69 74 20  77 69 6C 6C 20 6E 6F 74  20 6C 6F 6F 70 2E 0D 0A  09 42 69 74 20 33 2D 09  led, it will not loop.Bit 3-
000080A0  45 6E 61 62 6C 65 20 6C  6F 6F 70 69 6E 67 2E 20  4C 6F 6F 70 20 66 72 6F  6D 20 65 6E 64 20 74 6F  Enable looping. Loop from end to
000080C0  20 73 74 61 72 74 20 28  6F 72 20 73 74 61 72 74  20 74 6F 20 65 6E 64 29  2E 0D 0A 09 42 69 74 20   start (or start to end).Bit 
000080E0  34 2D 09 45 6E 61 62 6C  65 20 62 69 2D 64 69 72  65 63 74 69 6F 6E 61 6C  20 6C 6F 6F 70 69 6E 67  4-Enable bi-directional looping
00008100  2E 20 57 68 65 6E 20 69  74 20 68 69 74 73 20 65  6E 64 20 28 6F 72 20 73  74 61 72 74 29 20 69 74  . When it hits end (or start) it
00008120  20 77 69 6C 6C 20 63 68  61 6E 67 65 20 64 69 72  65 63 74 69 6F 6E 73 20  61 6E 64 20 70 72 6F 63   will change directions and proc
00008140  65 65 64 20 74 6F 77 61  72 64 20 74 68 65 20 6F  74 68 65 72 20 6C 69 6D  69 74 2E 0D 0A 09 42 69  eed toward the other limit.Bi
00008160  74 20 35 2D 09 45 6E 61  62 6C 65 20 67 65 74 74  69 6E 67 20 61 6E 20 49  52 51 20 77 68 65 6E 20  t 5-Enable getting an IRQ when 
00008180  72 61 6D 70 20 68 69 74  73 20 65 6E 64 2E 0D 0A  2A 09 42 69 74 20 36 2D  09 52 61 6D 70 20 64 69  ramp hits end.*Bit 6-Ramp di
000081A0  72 65 63 74 69 6F 6E 2E  20 30 3D 69 6E 63 72 65  61 73 69 6E 67 2C 20 31  3D 64 65 63 72 65 61 73  rection. 0=increasing, 1=decreas
000081C0  69 6E 67 2E 0D 0A 2A 09  42 69 74 20 37 2D 09 28  52 45 41 44 29 20 56 6F  6C 75 6D 65 20 72 61 6D  ing.*Bit 7-(READ) Volume ram
000081E0  70 20 49 52 51 20 70 65  6E 64 69 6E 67 2E 0D 0A  0D 0A 50 6C 65 61 73 65  20 73 65 65 20 73 65 63  p IRQ pending.Please see sec
00008200  74 69 6F 6E 20 32 2E 31  36 20 66 6F 72 20 6D 6F  72 65 20 69 6E 66 6F 72  6D 61 74 69 6F 6E 20 6F  tion 2.16 for more information o
00008220  6E 20 68 61 72 64 77 61  72 65 20 76 6F 6C 75 6D  65 20 72 61 6D 70 69 6E  67 2E 0D 0A 0D 0A 0D 0A  n hardware volume ramping.
00008240  0D 0A 32 2E 36 2E 32 2E  31 35 20 20 41 63 74 69  76 65 20 56 6F 69 63 65  73 20 2D 20 28 45 2C 38  2.6.2.15  Active Voices - (E,8
00008260  45 29 0D 0A 0D 0A 42 69  74 73 20 37 2D 36 09 4D  75 73 74 20 62 65 20 73  65 74 20 74 6F 20 61 20  E)Bits 7-6Must be set to a 
00008280  31 0D 0A 42 69 74 73 20  35 2D 30 09 23 20 6F 66  20 76 6F 69 63 65 73 20  74 6F 20 65 6E 61 62 6C  1Bits 5-0# of voices to enabl
000082A0  65 20 2D 20 31 2E 0D 0A  0D 0A 54 68 65 20 72 61  6E 67 65 20 69 73 20 66  72 6F 6D 20 31 34 20 2D  e - 1.The range is from 14 -
000082C0  20 33 32 2E 20 41 6E 79  20 76 61 6C 75 65 20 6C  65 73 73 20 74 68 61 6E  20 31 34 20 77 69 6C 6C   32. Any value less than 14 will
000082E0  20 62 65 20 66 6F 72 63  65 64 20 74 6F 20 31 34  2E 0D 0A 0D 0A 0D 0A 0C  32 2E 36 2E 32 2E 31 36   be forced to 14.2.6.2.16
00008300  20 20 49 52 51 20 53 6F  75 72 63 65 20 52 65 67  69 73 74 65 72 20 2D 20  28 46 2C 38 46 29 0D 0A    IRQ Source Register - (F,8F)
00008320  0D 0A 09 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  =============================
00008340  3D 3D 3D 3D 0D 0A 09 7C  20 37 20 7C 20 36 20 7C  20 35 20 7C 20 34 20 7C  20 33 20 7C 20 32 20 7C  ====| 7 | 6 | 5 | 4 | 3 | 2 |
00008360  20 31 20 7C 20 30 20 7C  0D 0A 09 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D   1 | 0 |=====================
00008380  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 0D 0A 09 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  ============  |   |   |   |  
000083A0  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 0D 0A  09 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C   |   |   |   |  |   |   |   |
000083C0  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 2B  2D 2D 2D 2D 5C 0D 0A 09  20 20 7C 20 20 20 7C 20     |   |   |   +----\  |   | 
000083E0  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 2B 2D 2D 2D 2D 2D  2D 2D 2D 20 5C 0D 0A 09    |   |   |   |   +-------- \
00008400  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 2D    |   |   |   |   |   +---------
00008420  2D 2D 2D 20 20 2D 20 49  6E 74 65 72 72 75 70 74  69 6E 67 20 76 6F 69 63  65 20 23 0D 0A 09 20 20  ---  - Interrupting voice #  
00008440  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  2B 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  |   |   |   |   +---------------
00008460  2D 20 2F 0D 0A 09 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 2B 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  - /  |   |   |   +-----------
00008480  2D 2D 2D 2D 2D 2D 2D 2D  2D 2F 0D 0A 09 20 20 7C  20 20 20 7C 20 20 20 2B  2D 2D 2D 2D 2D 2D 2D 2D  ---------/  |   |   +--------
000084A0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  20 31 0D 0A 09 20 20 7C  20 20 20 2B 2D 2D 2D 2D  ---------------- 1  |   +----
000084C0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  20 56 6F 6C 75 6D 65 20  ------------------------ Volume 
000084E0  52 61 6D 70 20 49 52 51  20 70 65 6E 64 69 6E 67  0D 0A 09 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  Ramp IRQ pending  +----------
00008500  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 20 57  61 76 65 54 61 62 6C 65  ---------------------- WaveTable
00008520  20 49 52 51 20 70 65 6E  64 69 6E 67 0D 0A 0D 0A  42 69 74 20 34 2D 31 2D  09 56 6F 69 63 65 20 23   IRQ pendingBit 4-1-Voice #
00008540  20 28 30 2D 33 31 29 20  6F 66 20 69 6E 74 65 72  72 75 70 74 69 6E 67 20  76 6F 69 63 65 0D 0A 42   (0-31) of interrupting voiceB
00008560  69 74 20 35 2D 09 41 4C  57 41 59 53 20 61 20 31  0D 0A 42 69 74 20 36 2D  09 30 20 3D 20 56 6F 6C  it 5-ALWAYS a 1Bit 6-0 = Vol
00008580  75 6D 65 20 52 61 6D 70  20 49 52 51 20 6F 63 63  75 72 72 65 64 0D 0A 42  69 74 20 37 2D 09 30 20  ume Ramp IRQ occurredBit 7-0 
000085A0  3D 20 57 61 76 65 74 61  62 6C 65 20 49 52 51 20  6F 63 63 75 72 72 65 64  0D 0A 0D 0A 4E 6F 74 65  = Wavetable IRQ occurredNote
000085C0  3A 20 09 54 68 69 73 20  69 73 20 61 20 67 6C 6F  62 61 6C 20 72 65 61 64  20 6F 6E 6C 79 20 72 65  : This is a global read only re
000085E0  67 69 73 74 65 72 2E 20  54 68 65 72 65 20 69 73  20 6F 6E 6C 79 20 31 20  66 6F 72 20 41 4C 4C 20  gister. There is only 1 for ALL 
00008600  76 6F 69 63 65 73 2E 20  59 6F 75 20 4D 55 53 54  20 73 65 72 76 69 63 65  20 61 6E 79 20 69 6E 64  voices. You MUST service any ind
00008620  69 63 61 74 65 64 20 49  52 51 27 73 20 73 69 6E  63 65 20 61 20 72 65 61  64 20 6F 66 20 74 68 69  icated IRQ's since a read of thi
00008640  73 20 70 6F 72 74 20 77  69 6C 6C 20 63 6C 65 61  72 20 74 68 65 20 61 73  73 6F 63 69 61 74 65 64  s port will clear the associated
00008660  20 49 52 51 20 62 69 74  73 20 69 6E 20 74 68 65  20 70 61 72 74 69 63 75  6C 61 72 20 76 6F 69 63   IRQ bits in the particular voic
00008680  65 27 73 20 63 6F 6E 74  72 6F 6C 20 61 6E 64 2F  6F 72 20 76 6F 6C 75 6D  65 20 63 6F 6E 74 72 6F  e's control and/or volume contro
000086A0  6C 20 72 65 67 69 73 74  65 72 73 2E 0D 0A 0D 0A  4E 6F 74 65 3A 20 09 49  74 20 69 73 20 70 6F 73  l registers.Note: It is pos
000086C0  73 69 62 6C 65 20 74 68  61 74 20 6D 75 6C 74 69  70 6C 65 20 76 6F 69 63  65 73 20 63 6F 75 6C 64  sible that multiple voices could
000086E0  20 69 6E 74 65 72 72 75  70 74 20 61 74 20 76 69  72 74 75 61 6C 6C 79 20  74 68 65 20 73 61 6D 65   interrupt at virtually the same
00008700  20 74 69 6D 65 2E 20 49  6E 20 74 68 69 73 20 63  61 73 65 2C 20 74 68 69  73 20 72 65 67 69 73 74   time. In this case, this regist
00008720  65 72 20 77 69 6C 6C 20  62 65 68 61 76 65 20 6C  69 6B 65 20 61 20 66 69  66 6F 2E 20 57 68 65 6E  er will behave like a fifo. When
00008740  20 69 6E 20 79 6F 75 72  20 49 52 51 20 68 61 6E  64 6C 65 72 2C 20 6B 65  65 70 20 72 65 61 64 69   in your IRQ handler, keep readi
00008760  6E 67 20 28 61 6E 64 20  73 65 72 76 69 63 69 6E  67 29 20 74 68 69 73 20  72 65 67 69 73 74 65 72  ng (and servicing) this register
00008780  20 75 6E 74 69 6C 20 79  6F 75 20 64 6F 20 61 20  72 65 61 64 20 77 69 74  68 20 62 6F 74 68 20 49   until you do a read with both I
000087A0  52 51 20 62 69 74 73 20  73 65 74 20 74 6F 20 61  20 31 2E 20 54 68 69 73  20 6D 65 61 6E 73 20 74  RQ bits set to a 1. This means t
000087C0  68 65 72 65 20 61 72 65  20 6E 6F 20 76 6F 69 63  65 20 49 52 51 73 20 6C  65 66 74 20 74 6F 20 64  here are no voice IRQs left to d
000087E0  65 61 6C 20 77 69 74 68  2E 0D 0A 0D 0A 4E 6F 74  65 3A 20 09 53 69 6E 63  65 20 69 74 20 69 73 20  eal with.Note: Since it is 
00008800  70 6F 73 73 69 62 6C 65  20 74 6F 20 67 65 74 20  41 4E 4F 54 48 45 52 20  49 52 51 20 66 72 6F 6D  possible to get ANOTHER IRQ from
00008820  20 74 68 65 20 73 61 6D  65 20 76 6F 69 63 65 20  66 6F 72 20 74 68 65 20  53 41 4D 45 20 72 65 61   the same voice for the SAME rea
00008840  73 6F 6E 2C 20 79 6F 75  20 6D 75 73 74 20 69 67  6E 6F 72 65 20 61 6E 79  20 73 75 62 73 65 71 75  son, you must ignore any subsequ
00008860  65 6E 74 20 49 52 51 20  66 72 6F 6D 20 74 68 61  74 20 76 6F 69 63 65 20  77 68 69 6C 65 20 69 6E  ent IRQ from that voice while in
00008880  20 74 68 65 20 49 52 51  20 68 61 6E 64 6C 65 72  2E 20 46 6F 72 20 65 78  61 6D 70 6C 65 2C 20 77   the IRQ handler. For example, w
000088A0  68 65 6E 20 61 20 76 6F  69 63 65 20 68 69 74 73  20 69 74 73 20 65 6E 64  20 70 6F 73 69 74 69 6F  hen a voice hits its end positio
000088C0  6E 20 61 6E 64 20 67 65  6E 65 72 61 74 65 73 20  61 6E 20 49 52 51 20 62  61 63 6B 20 74 6F 20 79  n and generates an IRQ back to y
000088E0  6F 75 72 20 61 70 70 6C  69 63 61 74 69 6F 6E 2C  20 69 74 20 77 69 6C 6C  20 63 6F 6E 74 69 6E 75  our application, it will continu
00008900  65 20 74 6F 20 67 65 6E  65 72 61 74 65 20 49 52  51 27 73 20 75 6E 74 69  6C 20 65 69 74 68 65 72  e to generate IRQ's until either
00008920  20 74 68 65 20 76 6F 69  63 65 20 69 73 20 73 74  6F 70 70 65 64 2C 20 74  68 65 20 49 52 51 20 65   the voice is stopped, the IRQ e
00008940  6E 61 62 6C 65 20 69 73  20 74 75 72 6E 65 64 20  6F 66 66 2C 20 6F 72 20  74 68 65 20 65 6E 64 20  nable is turned off, or the end 
00008960  6C 6F 63 61 74 69 6F 6E  20 69 73 20 6D 6F 76 65  64 2E 0D 0A 0D 0A 0D 0A  0D 0A 32 2E 37 20 20 47  location is moved.2.7  G
00008980  6C 6F 62 61 6C 20 44 61  74 61 20 4C 6F 77 20 2D  20 33 58 34 0D 0A 0D 0A  54 68 69 73 20 72 65 67  lobal Data Low - 3X4This reg
000089A0  69 73 74 65 72 20 63 61  6E 20 62 65 20 75 73 65  64 20 74 6F 20 64 6F 20  65 69 74 68 65 72 20 61  ister can be used to do either a
000089C0  20 31 36 20 62 69 74 20  74 72 61 6E 73 66 65 72  20 66 6F 72 20 6F 6E 65  20 6F 66 20 74 68 65 20   16 bit transfer for one of the 
000089E0  31 36 20 62 69 74 20 77  69 64 65 20 47 46 31 20  72 65 67 69 73 74 65 72  73 20 28 53 74 61 72 74  16 bit wide GF1 registers (Start
00008A00  20 61 64 64 72 20 68 69  67 68 20 65 74 63 29 20  77 68 65 6E 20 75 73 69  6E 67 20 61 20 31 36 20   addr high etc) when using a 16 
00008A20  62 69 74 20 49 2F 4F 20  69 6E 73 74 72 75 63 74  69 6F 6E 20 6F 72 20 74  68 65 20 6C 6F 77 20 70  bit I/O instruction or the low p
00008A40  61 72 74 20 6F 66 20 61  20 31 36 20 62 69 74 20  77 69 64 65 20 72 65 67  69 73 74 65 72 20 77 68  art of a 16 bit wide register wh
00008A60  65 6E 20 75 73 69 6E 67  20 61 6E 20 38 20 62 69  74 20 49 2F 4F 20 69 6E  73 74 72 75 63 74 69 6F  en using an 8 bit I/O instructio
00008A80  6E 2E 0D 0A 0D 0A 0D 0A  0D 0A 32 2E 38 20 20 47  6C 6F 62 61 6C 20 44 61  74 61 20 48 69 67 68 20  n.2.8  Global Data High 
00008AA0  2D 20 33 58 35 0D 0A 0D  0A 54 68 69 73 20 72 65  67 69 73 74 65 72 20 69  73 20 75 73 65 64 20 74  - 3X5This register is used t
00008AC0  6F 20 64 6F 20 65 69 74  68 65 72 20 61 6E 20 38  20 62 69 74 20 74 72 61  6E 73 66 65 72 20 66 6F  o do either an 8 bit transfer fo
00008AE0  72 20 6F 6E 65 20 6F 66  20 74 68 65 20 47 46 31  20 38 20 62 69 74 20 72  65 67 69 73 74 65 72 73  r one of the GF1 8 bit registers
00008B00  20 6F 72 20 74 6F 20 64  6F 20 74 68 65 20 68 69  67 68 20 70 61 72 74 20  6F 66 20 61 20 31 36 20   or to do the high part of a 16 
00008B20  62 69 74 20 77 69 64 65  20 72 65 67 69 73 74 65  72 2E 0D 0A 0C 32 2E 39  20 20 49 52 51 20 53 74  bit wide register.2.9  IRQ St
00008B40  61 74 75 73 20 2D 20 32  58 36 0D 0A 0D 0A 43 41  55 54 49 4F 4E 3A 20 4E  6F 74 65 20 74 68 61 74  atus - 2X6CAUTION: Note that
00008B60  20 74 68 69 73 20 69 73  20 61 74 20 32 58 36 20  2A 2A 2A 20 4E 4F 54 20  33 58 36 20 2A 2A 2A 2E   this is at 2X6 *** NOT 3X6 ***.
00008B80  0D 0A 0D 0A 09 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  ===========================
00008BA0  3D 3D 3D 3D 3D 3D 0D 0A  09 7C 20 37 20 7C 20 36  20 7C 20 35 20 7C 20 34  20 7C 20 33 20 7C 20 32  ======| 7 | 6 | 5 | 4 | 3 | 2
00008BC0  20 7C 20 31 20 7C 20 30  20 7C 0D 0A 09 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D   | 1 | 0 |===================
00008BE0  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 0D 0A  09 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  ==============  |   |   |   |
00008C00  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  0D 0A 09 20 20 7C 20 20  20 7C 20 20 20 7C 20 20     |   |   |   |  |   |   |  
00008C20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 2B 2D 2D 2D 2D 20 4D  49 44 49 20 54 72 61 6E   |   |   |   |   +---- MIDI Tran
00008C40  73 6D 69 74 20 49 52 51  0D 0A 09 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  smit IRQ  |   |   |   |   |  
00008C60  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 20 4D  49 44 49 20 52 65 63 65  69 76 65 20 49 52 51 0D   |   +-------- MIDI Receive IRQ
00008C80  0A 09 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  2B 2D 2D 2D 2D 2D 2D 2D    |   |   |   |   |   +-------
00008CA0  2D 2D 2D 2D 2D 20 54 69  6D 65 72 20 31 20 49 52  51 0D 0A 09 20 20 7C 20  20 20 7C 20 20 20 7C 20  ----- Timer 1 IRQ  |   |   | 
00008CC0  20 20 7C 20 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 20  54 69 6D 65 72 20 32 20    |   +---------------- Timer 2 
00008CE0  49 52 51 0D 0A 09 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 2B 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  IRQ  |   |   |   +-----------
00008D00  2D 2D 2D 2D 2D 2D 2D 2D  2D 20 52 65 73 65 72 76  65 64 20 28 53 65 74 20  74 6F 20 30 29 0D 0A 09  --------- Reserved (Set to 0)
00008D20  20 20 7C 20 20 20 7C 20  20 20 2B 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D    |   |   +---------------------
00008D40  2D 2D 2D 20 57 61 76 65  54 61 62 6C 65 20 49 52  51 20 28 61 6E 79 20 76  6F 69 63 65 29 0D 0A 09  --- WaveTable IRQ (any voice)
00008D60  20 20 7C 20 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D    |   +-------------------------
00008D80  2D 2D 2D 20 56 6F 6C 75  6D 65 20 52 61 6D 70 20  49 52 51 20 28 61 6E 79  20 76 6F 69 63 65 29 0D  --- Volume Ramp IRQ (any voice)
00008DA0  0A 09 20 20 2B 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D    +---------------------------
00008DC0  2D 2D 2D 2D 2D 20 44 4D  41 20 54 43 20 49 52 51  20 28 44 52 41 4D 20 6F  72 20 53 61 6D 70 6C 65  ----- DMA TC IRQ (DRAM or Sample
00008DE0  29 0D 0A 0D 0A 0D 0A 0D  0A 32 2E 31 30 20 20 54  69 6D 65 72 20 43 6F 6E  74 72 6F 6C 20 52 65 67  )2.10  Timer Control Reg
00008E00  69 73 74 65 72 20 2D 20  32 58 38 0D 0A 0D 0A 54  68 69 73 20 72 65 67 69  73 74 65 72 20 6D 61 70  ister - 2X8This register map
00008E20  73 20 74 6F 20 74 68 65  20 73 61 6D 65 20 6C 6F  63 61 74 69 6F 6E 20 61  73 20 74 68 65 20 41 44  s to the same location as the AD
00008E40  4C 49 42 20 62 6F 61 72  64 27 73 20 63 6F 6E 74  72 6F 6C 20 72 65 67 69  73 74 65 72 2E 20 57 72  LIB board's control register. Wr
00008E60  69 74 69 6E 67 20 61 20  34 20 68 65 72 65 20 73  65 6C 65 63 74 73 20 74  68 65 20 74 69 6D 65 72  iting a 4 here selects the timer
00008E80  20 73 74 75 66 66 2E 20  42 69 74 20 36 20 77 69  6C 6C 20 62 65 20 73 65  74 20 69 66 20 74 69 6D   stuff. Bit 6 will be set if tim
00008EA0  65 72 20 23 31 20 68 61  73 20 65 78 70 69 72 65  64 2E 20 42 69 74 20 35  20 77 69 6C 6C 20 62 65  er #1 has expired. Bit 5 will be
00008EC0  20 73 65 74 20 69 74 20  74 69 6D 65 72 20 23 32  20 68 61 73 20 65 78 70  69 72 65 64 2E 0D 0A 0D   set it timer #2 has expired.
00008EE0  0A 0D 0A 0D 0A 32 2E 31  31 20 20 54 69 6D 65 72  20 44 61 74 61 20 52 65  67 69 73 74 65 72 20 2D  2.11  Timer Data Register -
00008F00  20 32 58 39 0D 0A 0D 0A  09 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D   2X9=======================
00008F20  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 0D 0A 09 7C 20 37  20 7C 20 36 20 7C 20 35  20 7C 20 34 20 7C 20 33  ==========| 7 | 6 | 5 | 4 | 3
00008F40  20 7C 20 32 20 7C 20 31  20 7C 20 30 20 7C 0D 0A  09 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D   | 2 | 1 | 0 |===============
00008F60  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 0D 0A 09 20 20 7C  20 20 20 7C 20 20 20 7C  ==================  |   |   |
00008F80  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 7C 0D 0A 09 20  20 7C 20 20 20 7C 20 20     |   |   |   |   |  |   |  
00008FA0  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 2B 2D 2D  2D 2D 20 54 69 6D 65 72   |   |   |   |   |   +---- Timer
00008FC0  20 31 20 53 74 61 72 74  0D 0A 09 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20   1 Start  |   |   |   |   |  
00008FE0  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 20 54  69 6D 65 72 20 32 20 53  74 61 72 74 0D 0A 09 20   |   +-------- Timer 2 Start 
00009000  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D   |   |   |   |   |   +----------
00009020  2D 2D 20 52 65 73 65 72  76 65 64 20 28 53 65 74  20 74 6F 20 30 29 0D 0A  09 20 20 7C 20 20 20 7C  -- Reserved (Set to 0)  |   |
00009040  20 20 20 7C 20 20 20 7C  20 20 20 2B 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 20 52 65 73     |   |   +---------------- Res
00009060  65 72 76 65 64 20 28 53  65 74 20 74 6F 20 30 29  0D 0A 09 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  erved (Set to 0)  |   |   |  
00009080  20 2B 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 20 52  65 73 65 72 76 65 64 20   +-------------------- Reserved 
000090A0  28 53 65 74 20 74 6F 20  30 29 0D 0A 09 20 20 7C  20 20 20 7C 20 20 20 2B  2D 2D 2D 2D 2D 2D 2D 2D  (Set to 0)  |   |   +--------
000090C0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  20 4D 61 73 6B 20 54 69  6D 65 72 20 32 0D 0A 09  ---------------- Mask Timer 2
000090E0  20 20 7C 20 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D    |   +-------------------------
00009100  2D 2D 2D 20 4D 61 73 6B  20 54 69 6D 65 72 20 31  0D 0A 09 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  --- Mask Timer 1  +----------
00009120  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 20 52  65 73 65 74 20 54 69 6D  ---------------------- Reset Tim
00009140  65 72 20 49 52 51 0D 0A  0D 0A 09 42 69 74 20 30  20 2D 20 53 74 61 72 74  20 75 70 20 74 69 6D 65  er IRQBit 0 - Start up time
00009160  72 20 23 31 0D 0A 09 42  69 74 20 31 20 2D 20 53  74 61 72 74 20 75 70 20  74 69 6D 65 72 20 23 32  r #1Bit 1 - Start up timer #2
00009180  0D 0A 09 42 69 74 20 35  20 2D 20 4D 61 73 6B 20  6F 66 66 20 74 69 6D 65  72 20 32 0D 0A 09 42 69  Bit 5 - Mask off timer 2Bi
000091A0  74 20 36 20 2D 20 4D 61  73 6B 20 6F 66 66 20 74  69 6D 65 72 20 31 0D 0A  09 42 69 74 20 37 20 2D  t 6 - Mask off timer 1Bit 7 -
000091C0  20 43 6C 65 61 72 20 54  69 6D 65 72 20 49 52 51  0D 0A 0D 0A 0D 0A 32 2E  31 32 20 20 44 52 41 4D   Clear Timer IRQ2.12  DRAM
000091E0  20 49 2F 4F 20 2D 20 33  58 37 0D 0A 0D 0A 54 68  69 73 20 72 65 67 69 73  74 65 72 20 69 73 20 75   I/O - 3X7This register is u
00009200  73 65 64 20 74 6F 20 72  65 61 64 20 6F 72 20 77  72 69 74 65 20 64 61 74  61 20 61 74 20 74 68 65  sed to read or write data at the
00009220  20 6C 6F 63 61 74 69 6F  6E 20 70 6F 69 6E 74 65  64 20 61 74 20 62 79 20  72 65 67 69 73 74 65 72   location pointed at by register
00009240  73 20 34 33 20 61 6E 64  20 34 34 2E 20 54 68 69  73 20 69 73 20 75 73 65  64 20 74 6F 20 70 65 65  s 43 and 44. This is used to pee
00009260  6B 20 61 6E 64 20 70 6F  6B 65 20 64 69 72 65 63  74 6C 79 20 74 6F 20 44  52 41 4D 2E 0D 0A 0C 32  k and poke directly to DRAM.2
00009280  2E 31 33 20 20 4D 69 78  20 43 6F 6E 74 72 6F 6C  20 52 65 67 69 73 74 65  72 20 2D 20 32 58 30 0D  .13  Mix Control Register - 2X0
000092A0  0A 0D 0A 09 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  ============================
000092C0  3D 3D 3D 3D 3D 0D 0A 09  7C 20 37 20 7C 20 36 20  7C 20 35 20 7C 20 34 20  7C 20 33 20 7C 20 32 20  =====| 7 | 6 | 5 | 4 | 3 | 2 
000092E0  7C 20 31 20 7C 20 30 20  7C 0D 0A 09 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  | 1 | 0 |====================
00009300  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 0D 0A 09  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  =============  |   |   |   | 
00009320  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 0D  0A 09 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20    |   |   |   |  |   |   |   
00009340  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  2B 2D 2D 2D 2D 20 30 3D  45 6E 61 62 6C 65 20 4C  |   |   |   |   +---- 0=Enable L
00009360  69 6E 65 20 49 4E 0D 0A  09 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  ine IN  |   |   |   |   |   |
00009380  20 20 20 2B 2D 2D 2D 2D  2D 2D 2D 2D 20 30 3D 45  6E 61 62 6C 65 20 4C 69  6E 65 20 4F 55 54 0D 0A     +-------- 0=Enable Line OUT
000093A0  09 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 2B  2D 2D 2D 2D 2D 2D 2D 2D    |   |   |   |   |   +--------
000093C0  2D 2D 2D 2D 20 31 3D 45  6E 61 62 6C 65 20 4D 49  43 20 49 4E 0D 0A 09 20  20 7C 20 20 20 7C 20 20  ---- 1=Enable MIC IN  |   |  
000093E0  20 7C 20 20 20 7C 20 20  20 2B 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 20 45 6E 61 62 6C   |   |   +---------------- Enabl
00009400  65 20 6C 61 74 63 68 65  73 0D 0A 09 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 2B 2D 2D 2D 2D 2D  e latches  |   |   |   +-----
00009420  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 20  43 6F 6D 62 69 6E 65 20  63 68 61 6E 31 20 49 52  --------------- Combine chan1 IR
00009440  51 20 77 69 74 68 20 43  68 61 6E 32 0D 0A 09 20  20 7C 20 20 20 7C 20 20  20 2B 2D 2D 2D 2D 2D 2D  Q with Chan2  |   |   +------
00009460  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 20 45 6E 61 62 6C  65 20 4D 49 44 49 20 6C  ------------------ Enable MIDI l
00009480  6F 6F 70 62 61 63 6B 20  54 78 44 20 74 6F 20 52  78 44 0D 0A 09 20 20 7C  20 20 20 2B 2D 2D 2D 2D  oopback TxD to RxD  |   +----
000094A0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  20 43 6F 6E 74 72 6F 6C  ------------------------ Control
000094C0  20 52 65 67 20 53 65 6C  65 63 74 0D 0A 09 20 20  2B 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D   Reg Select  +---------------
000094E0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 20 52 65 73 65 72 76  65 64 20 28 53 65 74 20  ----------------- Reserved (Set 
00009500  74 6F 20 30 29 0D 0A 0D  0A 42 69 74 20 30 20 2D  09 45 6E 61 62 6C 65 20  55 6C 74 72 61 53 6F 75  to 0)Bit 0 -Enable UltraSou
00009520  6E 64 20 6C 69 6E 65 20  49 6E 70 75 74 0D 0A 42  69 74 20 31 20 2D 09 45  6E 61 62 6C 65 20 55 6C  nd line InputBit 1 -Enable Ul
00009540  74 72 61 53 6F 75 6E 64  20 4C 69 6E 65 20 6F 75  74 70 75 74 0D 0A 42 69  74 20 32 20 2D 09 45 6E  traSound Line outputBit 2 -En
00009560  61 62 6C 65 20 53 74 65  72 65 6F 20 4D 69 63 20  49 6E 70 75 74 0D 0A 42  69 74 20 33 20 2D 09 45  able Stereo Mic InputBit 3 -E
00009580  6E 61 62 6C 65 20 6C 61  74 63 68 65 73 2E 54 68  69 73 20 70 72 6F 76 69  64 65 73 20 70 6F 77 65  nable latches.This provides powe
000095A0  72 20 74 6F 20 74 68 65  20 44 4D 41 2F 49 52 51  20 6C 61 74 63 68 65 73  2E 20 4F 6E 63 65 20 74  r to the DMA/IRQ latches. Once t
000095C0  68 65 73 65 20 61 72 65  20 65 6E 61 62 6C 65 64  2C 20 4E 45 56 45 52 20  64 69 73 61 62 6C 65 20  hese are enabled, NEVER disable 
000095E0  74 68 65 6D 2E 20 20 44  69 73 61 62 6C 69 6E 67  20 74 68 65 6D 20 77 69  6C 6C 20 63 61 75 73 65  them.  Disabling them will cause
00009600  20 72 61 6E 64 6F 6D 20  49 52 51 27 73 20 69 6E  20 74 68 65 20 50 43 20  73 69 6E 63 65 20 74 68   random IRQ's in the PC since th
00009620  65 20 44 4D 41 20 61 6E  64 20 49 52 51 20 6C 69  6E 65 73 20 61 72 65 20  6E 6F 74 20 62 65 69 6E  e DMA and IRQ lines are not bein
00009640  67 20 64 72 69 76 65 6E  20 61 6E 79 20 6D 6F 72  65 2E 0D 0A 42 69 74 20  34 20 2D 09 43 6F 6D 62  g driven any more.Bit 4 -Comb
00009660  69 6E 65 20 43 68 61 6E  6E 65 6C 20 31 20 28 47  46 31 29 20 49 52 51 27  73 20 77 69 74 68 20 43  ine Channel 1 (GF1) IRQ's with C
00009680  68 61 6E 6E 65 6C 20 32  20 28 4D 49 44 49 29 0D  0A 42 69 74 20 35 20 2D  09 45 6E 61 62 6C 65 20  hannel 2 (MIDI)Bit 5 -Enable 
000096A0  4D 49 44 49 20 6C 6F 6F  70 62 61 63 6B 2E 20 41  6E 79 20 64 61 74 61 20  73 65 6E 74 20 6F 75 74  MIDI loopback. Any data sent out
000096C0  20 54 72 61 6E 73 6D 69  74 20 70 6F 72 74 20 77  69 6C 6C 20 62 65 20 6C  6F 6F 70 65 64 20 62 61   Transmit port will be looped ba
000096E0  63 6B 20 69 6E 74 6F 20  74 68 65 20 69 6E 70 75  74 20 70 6F 72 74 2E 0D  0A 42 69 74 20 36 20 2D  ck into the input port.Bit 6 -
00009700  09 43 6F 6E 74 72 6F 6C  20 52 65 67 69 73 74 65  72 20 53 65 6C 65 63 74  2E 20 57 68 65 6E 20 74  Control Register Select. When t
00009720  68 69 73 20 69 73 20 73  65 74 20 74 6F 20 61 20  31 2C 20 74 68 65 20 6E  65 78 74 20 49 4F 20 77  his is set to a 1, the next IO w
00009740  72 69 74 65 20 74 6F 20  32 58 42 20 77 69 6C 6C  20 62 65 20 74 6F 20 74  68 65 20 49 52 51 20 63  rite to 2XB will be to the IRQ c
00009760  6F 6E 74 72 6F 6C 20 6C  61 74 63 68 65 73 2E 20  57 68 65 6E 20 74 68 69  73 20 69 73 20 73 65 74  ontrol latches. When this is set
00009780  20 74 6F 20 61 20 30 2C  20 74 68 65 20 6E 65 78  74 20 49 4F 20 77 72 69  74 65 20 74 6F 20 32 58   to a 0, the next IO write to 2X
000097A0  42 20 77 69 6C 6C 20 62  65 20 74 6F 20 74 68 65  20 44 4D 41 20 63 68 61  6E 6E 65 6C 20 6C 61 74  B will be to the DMA channel lat
000097C0  63 68 65 73 2E 20 54 68  65 20 77 72 69 74 65 20  74 6F 20 32 58 42 20 66  6F 72 20 65 69 74 68 65  ches. The write to 2XB for eithe
000097E0  72 20 6F 66 20 74 68 65  73 65 20 4D 55 53 54 20  6F 63 63 75 72 20 61 73  20 74 68 65 20 4E 45 58  r of these MUST occur as the NEX
00009800  54 20 49 4F 57 20 6F 72  20 65 6C 73 65 20 74 68  65 20 77 72 69 74 65 20  74 6F 20 32 58 42 20 77  T IOW or else the write to 2XB w
00009820  69 6C 6C 20 62 65 20 6C  6F 63 6B 65 64 20 6F 75  74 20 61 6E 64 20 6E 6F  74 20 6F 63 63 75 72 2E  ill be locked out and not occur.
00009840  20 54 68 69 73 20 69 73  20 74 6F 20 70 72 65 76  65 6E 74 20 61 6E 20 61  70 70 6C 69 63 61 74 69   This is to prevent an applicati
00009860  6F 6E 20 74 68 61 74 20  69 73 20 70 72 6F 62 69  6E 67 20 66 6F 72 20 63  61 72 64 73 20 74 6F 20  on that is probing for cards to 
00009880  61 63 63 69 64 65 6E 74  61 6C 79 20 63 6F 72 72  75 70 74 20 74 68 65 20  6C 61 74 63 68 65 73 2E  accidentaly corrupt the latches.
000098A0  0D 0A 0D 0A 0D 0A 0D 0A  32 2E 31 34 20 20 49 52  51 20 43 6F 6E 74 72 6F  6C 20 52 65 67 69 73 74  2.14  IRQ Control Regist
000098C0  65 72 20 2D 20 32 58 42  0D 0A 0D 0A 20 20 20 20  20 49 52 51 20 20 63 6F  6E 74 72 6F 6C 20 72 65  er - 2XB     IRQ  control re
000098E0  67 69 73 74 65 72 20 20  20 20 20 20 20 20 20 49  2F 4F 20 20 20 20 20 20  20 57 20 20 20 20 20 20  gister         I/O       W      
00009900  20 20 20 32 58 42 0D 0A  20 20 20 20 20 28 32 58  30 2D 20 62 69 74 20 36  20 3D 20 31 29 0D 0A 0D     2XB     (2X0- bit 6 = 1)
00009920  0A 20 20 20 20 20 42 69  74 73 20 32 2D 30 20 43  68 61 6E 6E 65 6C 20 31  20 28 47 46 31 29 20 49       Bits 2-0 Channel 1 (GF1) I
00009940  52 51 20 53 65 6C 65 63  74 6F 72 0D 0A 20 20 20  20 20 20 20 20 20 30 3D  4E 6F 20 49 6E 74 65 72  RQ Selector         0=No Inter
00009960  72 75 70 74 0D 0A 20 20  20 20 20 20 20 20 20 31  3D 49 52 51 32 0D 0A 20  20 20 20 20 20 20 20 20  rupt         1=IRQ2         
00009980  32 3D 49 52 51 35 0D 0A  20 20 20 20 20 20 20 20  20 33 3D 49 52 51 33 0D  0A 20 20 20 20 20 20 20  2=IRQ5         3=IRQ3       
000099A0  20 20 34 3D 49 52 51 37  0D 0A 20 20 20 20 20 20  20 20 20 35 3D 49 52 51  31 31 0D 0A 20 20 20 20    4=IRQ7         5=IRQ11    
000099C0  20 20 20 20 20 36 3D 49  52 51 31 32 0D 0A 20 20  20 20 20 20 20 20 20 37  3D 49 52 51 31 35 0D 0A       6=IRQ12         7=IRQ15
000099E0  0D 0A 0C 20 20 20 20 20  42 69 74 73 20 35 2D 33  20 43 68 61 6E 6E 65 6C  20 32 20 28 4D 49 44 49       Bits 5-3 Channel 2 (MIDI
00009A00  29 20 49 52 51 20 73 65  6C 65 63 74 6F 72 0D 0A  20 20 20 20 20 20 20 20  20 30 3D 4E 6F 20 49 6E  ) IRQ selector         0=No In
00009A20  74 65 72 72 75 70 74 0D  0A 20 20 20 20 20 20 20  20 20 31 3D 49 52 51 32  0D 0A 20 20 20 20 20 20  terrupt         1=IRQ2      
00009A40  20 20 20 32 3D 49 52 51  35 0D 0A 20 20 20 20 20  20 20 20 20 33 3D 49 52  51 33 0D 0A 20 20 20 20     2=IRQ5         3=IRQ3    
00009A60  20 20 20 20 20 34 3D 49  52 51 37 0D 0A 20 20 20  20 20 20 20 20 20 35 3D  49 52 51 31 31 0D 0A 20       4=IRQ7         5=IRQ11 
00009A80  20 20 20 20 20 20 20 20  36 3D 49 52 51 31 32 0D  0A 20 20 20 20 20 20 20  20 20 37 3D 49 52 51 31          6=IRQ12         7=IRQ1
00009AA0  35 0D 0A 0D 0A 20 20 20  20 42 69 74 20 36 20 31  20 3D 20 43 6F 6D 62 69  6E 65 20 42 6F 74 68 20  5    Bit 6 1 = Combine Both 
00009AC0  49 52 51 53 20 75 73 69  6E 67 20 43 68 61 6E 6E  65 6C 20 31 27 73 20 49  52 51 0D 0A 20 20 20 20  IRQS using Channel 1's IRQ    
00009AE0  42 69 74 20 37 20 52 65  73 65 72 76 65 64 20 28  53 65 74 20 74 6F 20 30  29 0D 0A 0D 0A 4E 6F 74  Bit 7 Reserved (Set to 0)Not
00009B00  65 3A 09 49 66 20 74 68  65 20 63 68 61 6E 6E 65  6C 73 20 61 72 65 20 73  68 61 72 69 6E 67 20 61  e:If the channels are sharing a
00009B20  6E 20 49 52 51 2C 20 63  68 61 6E 6E 65 6C 20 32  27 73 20 49 52 51 20 6D  75 73 74 20 62 65 20 73  n IRQ, channel 2's IRQ must be s
00009B40  65 74 20 74 6F 20 30 20  61 6E 64 20 74 75 72 6E  20 6F 6E 20 62 69 74 20  36 2E 20 41 20 62 75 73  et to 0 and turn on bit 6. A bus
00009B60  20 63 6F 6E 66 6C 69 63  74 20 77 69 6C 6C 20 6F  63 63 75 72 20 69 66 20  62 6F 74 68 20 6C 61 74   conflict will occur if both lat
00009B80  63 68 65 73 20 61 72 65  20 70 72 6F 67 72 61 6D  6D 65 64 20 77 69 74 68  20 74 68 65 20 73 61 6D  ches are programmed with the sam
00009BA0  65 20 49 52 51 20 23 2E  0D 0A 0D 0A 0D 0A 20 20  20 20 20 44 4D 41 20 63  6F 6E 74 72 6F 6C 20 72  e IRQ #.     DMA control r
00009BC0  65 67 69 73 74 65 72 20  20 20 20 20 20 20 20 20  20 49 2F 4F 20 20 20 20  20 20 20 57 20 20 20 20  egister          I/O       W    
00009BE0  20 20 20 20 20 32 58 42  0D 0A 20 20 20 20 20 28  32 58 30 2D 20 62 69 74  20 36 20 3D 20 30 29 0D       2XB     (2X0- bit 6 = 0)
00009C00  0A 0D 0A 20 20 20 20 20  42 69 74 73 20 32 2D 30  20 44 4D 41 20 53 65 6C  65 63 74 20 52 65 67 69       Bits 2-0 DMA Select Regi
00009C20  73 74 65 72 20 31 0D 0A  20 20 20 20 20 20 20 20  30 3D 4E 4F 20 44 4D 41  0D 0A 20 20 20 20 20 20  ster 1        0=NO DMA      
00009C40  20 20 31 3D 44 4D 41 31  0D 0A 20 20 20 20 20 20  20 20 32 3D 44 4D 41 33  0D 0A 20 20 20 20 20 20    1=DMA1        2=DMA3      
00009C60  20 20 33 3D 44 4D 41 35  0D 0A 20 20 20 20 20 20  20 20 34 3D 44 4D 41 36  0D 0A 20 20 20 20 20 20    3=DMA5        4=DMA6      
00009C80  20 20 35 3D 44 4D 41 37  0D 0A 0D 0A 20 20 20 20  20 42 69 74 73 20 35 2D  33 20 44 4D 41 20 53 65    5=DMA7     Bits 5-3 DMA Se
00009CA0  6C 65 63 74 20 52 65 67  69 73 74 65 72 20 32 0D  0A 20 20 20 20 20 20 20  20 30 3D 4E 4F 20 44 4D  lect Register 2        0=NO DM
00009CC0  41 0D 0A 20 20 20 20 20  20 20 20 31 3D 44 4D 41  31 0D 0A 20 20 20 20 20  20 20 20 32 3D 44 4D 41  A        1=DMA1        2=DMA
00009CE0  33 0D 0A 20 20 20 20 20  20 20 20 33 3D 44 4D 41  35 0D 0A 20 20 20 20 20  20 20 20 34 3D 44 4D 41  3        3=DMA5        4=DMA
00009D00  36 0D 0A 20 20 20 20 20  20 20 20 35 3D 44 4D 41  37 0D 0A 0D 0A 20 20 20  20 42 69 74 20 36 20 2D  6        5=DMA7    Bit 6 -
00009D20  20 43 6F 6D 62 69 6E 65  20 42 6F 74 68 20 6F 6E  20 74 68 65 20 73 61 6D  65 20 44 4D 41 20 63 68   Combine Both on the same DMA ch
00009D40  61 6E 6E 65 6C 2E 0D 0A  20 20 20 20 42 69 74 20  37 20 2D 20 52 65 73 65  72 76 65 64 20 28 53 65  annel.    Bit 7 - Reserved (Se
00009D60  74 20 74 6F 20 30 29 2E  0D 0A 0D 0A 4E 6F 74 65  3A 09 49 66 20 74 68 65  20 63 68 61 6E 6E 65 6C  t to 0).Note:If the channel
00009D80  73 20 61 72 65 20 73 68  61 72 69 6E 67 20 61 6E  20 44 4D 41 2C 20 63 68  61 6E 6E 65 6C 20 32 27  s are sharing an DMA, channel 2'
00009DA0  73 20 44 4D 41 20 6D 75  73 74 20 62 65 20 73 65  74 20 74 6F 20 30 20 61  6E 64 20 74 75 72 6E 20  s DMA must be set to 0 and turn 
00009DC0  6F 6E 20 62 69 74 20 36  2E 20 41 20 62 75 73 20  63 6F 6E 66 6C 69 63 74  20 77 69 6C 6C 20 6F 63  on bit 6. A bus conflict will oc
00009DE0  63 75 72 20 69 66 20 62  6F 74 68 20 6C 61 74 63  68 65 73 20 61 72 65 20  70 72 6F 67 72 61 6D 6D  cur if both latches are programm
00009E00  65 64 20 77 69 74 68 20  74 68 65 20 73 61 6D 65  20 44 4D 41 20 23 2E 0D  0A 0D 0A 43 20 70 72 6F  ed with the same DMA #.C pro
00009E20  67 72 61 6D 6D 65 72 73  20 63 61 6E 20 72 65 66  65 72 20 74 6F 20 74 68  65 20 55 6C 74 72 61 53  grammers can refer to the UltraS
00009E40  65 74 49 6E 74 65 72 66  61 63 65 20 72 6F 75 74  69 6E 65 20 69 6E 20 49  4E 49 54 2E 43 20 6F 66  etInterface routine in INIT.C of
00009E60  20 74 68 65 20 6C 6F 77  6C 65 76 65 6C 20 73 6F  75 72 63 65 20 63 6F 64  65 20 66 6F 72 20 74 68   the lowlevel source code for th
00009E80  65 20 70 72 6F 70 65 72  20 73 65 71 75 65 6E 63  65 20 66 6F 72 20 70 72  6F 67 72 61 6D 6D 69 6E  e proper sequence for programmin
00009EA0  67 20 74 68 65 73 65 20  6C 61 74 63 68 65 73 2E  20 49 66 20 74 68 65 20  6F 72 64 65 72 20 69 73  g these latches. If the order is
00009EC0  20 6E 6F 74 20 72 69 67  68 74 2C 20 75 6E 70 72  65 64 69 63 74 61 62 6C  65 20 74 68 69 6E 67 73   not right, unpredictable things
00009EE0  20 6D 61 79 20 68 61 70  70 65 6E 2E 0D 0A 0D 0A  43 68 61 6E 67 69 6E 67  20 74 68 65 20 49 52 51   may happen.Changing the IRQ
00009F00  20 73 65 74 74 69 6E 67  73 20 77 69 6C 6C 20 75  73 75 61 6C 6C 79 20 63  61 75 73 65 20 61 6E 20   settings will usually cause an 
00009F20  49 52 51 20 6F 6E 20 74  68 65 20 4F 4C 44 20 49  52 51 20 62 65 63 61 75  73 65 20 69 74 20 69 73  IRQ on the OLD IRQ because it is
00009F40  20 6E 6F 20 6C 6F 6E 67  65 72 20 62 65 69 6E 67  20 64 72 69 76 65 6E 20  6C 6F 77 20 62 79 20 74   no longer being driven low by t
00009F60  68 65 20 6C 61 74 63 68  65 73 20 61 6E 64 20 69  74 20 77 69 6C 6C 20 74  65 6E 64 20 74 6F 20 66  he latches and it will tend to f
00009F80  6C 6F 61 74 20 75 70 2E  20 54 68 61 74 20 6C 6F  77 20 74 6F 20 68 69 67  68 20 74 72 61 6E 73 69  loat up. That low to high transi
00009FA0  74 69 6F 6E 20 63 61 75  73 65 73 20 61 6E 20 49  52 51 20 6F 6E 20 74 68  65 20 50 43 2E 20 4E 6F  tion causes an IRQ on the PC. No
00009FC0  72 6D 61 6C 6C 79 2C 20  74 68 69 73 20 69 73 20  6E 6F 74 20 61 20 70 72  6F 62 6C 65 6D 2C 20 62  rmally, this is not a problem, b
00009FE0  75 74 20 69 74 20 69 73  20 73 6F 6D 65 74 68 69  6E 67 20 74 6F 20 62 65  20 61 77 61 72 65 20 6F  ut it is something to be aware o
0000A000  66 2E 0D 0A 0C 32 2E 31  35 20 52 65 67 69 73 74  65 72 20 43 6F 6E 74 72  6F 6C 20 2D 20 32 58 46  f.2.15 Register Control - 2XF
0000A020  0D 0A 0D 0A 54 68 69 73  20 72 65 67 69 73 74 65  72 20 69 73 20 6F 6E 6C  79 20 76 61 6C 69 64 20  This register is only valid 
0000A040  66 6F 72 20 55 6C 74 72  61 53 6F 75 6E 64 20 62  6F 61 72 64 73 20 74 68  61 74 20 61 72 65 20 61  for UltraSound boards that are a
0000A060  74 20 6F 72 20 61 62 6F  76 65 20 72 65 76 69 73  69 6F 6E 20 33 2E 34 2E  20 49 74 20 69 73 20 6E  t or above revision 3.4. It is n
0000A080  6F 74 20 76 61 6C 69 64  20 66 6F 72 20 62 6F 61  72 64 73 20 77 68 69 63  68 20 68 61 76 65 20 61  ot valid for boards which have a
0000A0A0  20 70 72 69 6F 72 20 72  65 76 69 73 69 6F 6E 20  6E 75 6D 62 65 72 2E 0D  0A 0D 0A 4F 6E 20 33 2E   prior revision number.On 3.
0000A0C0  34 20 61 6E 64 20 61 62  6F 76 65 20 62 6F 61 72  64 73 2C 20 74 68 65 72  65 20 69 73 20 61 20 62  4 and above boards, there is a b
0000A0E0  61 6E 6B 20 6F 66 20 36  20 72 65 67 69 73 74 65  72 73 20 74 68 61 74 20  65 78 69 73 74 20 61 74  ank of 6 registers that exist at
0000A100  20 6C 6F 63 61 74 69 6F  6E 20 32 58 42 2E 20 52  65 67 69 73 74 65 72 20  32 58 46 20 69 73 20 75   location 2XB. Register 2XF is u
0000A120  73 65 64 20 74 6F 20 73  65 6C 65 63 74 20 77 68  69 63 68 20 6F 6E 65 20  69 73 20 62 65 69 6E 67  sed to select which one is being
0000A140  20 74 61 6C 6B 65 64 20  74 6F 2E 20 0D 0A 0D 0A  52 65 67 69 73 74 65 72  20 23 09 55 73 65 0D 0A   talked to. Register #Use
0000A160  0D 0A 09 30 09 09 53 61  6D 65 20 61 73 20 70 72  65 2D 33 2E 34 20 62 6F  61 72 64 73 0D 0A 09 31  0Same as pre-3.4 boards1
0000A180  2D 34 09 09 55 6E 75 73  65 64 20 2D 20 52 65 73  65 72 76 65 64 0D 0A 09  35 09 09 57 72 69 74 65  -4Unused - Reserved5Write
0000A1A0  20 61 20 30 20 74 6F 20  63 6C 65 61 72 20 49 52  51 73 20 6F 6E 20 70 6F  77 65 72 2D 75 70 0D 0A   a 0 to clear IRQs on power-up
0000A1C0  09 36 09 09 27 4A 75 6D  70 65 72 20 72 65 67 69  73 74 65 72 27 0D 0A 0D  0A 0D 0A 20 20 20 4A 75  6'Jumper register'   Ju
0000A1E0  6D 70 65 72 20 72 65 67  69 73 74 65 72 20 64 65  66 69 6E 69 74 69 6F 6E  3A 0D 0A 0D 0A 09 3D 3D  mper register definition:==
0000A200  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 0D  ===============================
0000A220  0A 09 7C 20 37 20 7C 20  36 20 7C 20 35 20 7C 20  34 20 7C 20 33 20 7C 20  32 20 7C 20 31 20 7C 20  | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 
0000A240  30 20 7C 0D 0A 09 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  0 |==========================
0000A260  3D 3D 3D 3D 3D 3D 3D 0D  0A 09 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  =======  |   |   |   |   |   
0000A280  7C 20 20 20 7C 20 20 20  7C 0D 0A 09 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  |   |   |  |   |   |   |   | 
0000A2A0  20 20 7C 20 20 20 7C 20  20 20 2B 2D 2D 2D 2D 20  52 65 73 65 72 76 65 64  20 28 53 65 74 20 74 6F    |   |   +---- Reserved (Set to
0000A2C0  20 30 29 20 20 20 20 20  0D 0A 09 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20   0)       |   |   |   |   |  
0000A2E0  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 20 31  3D 45 6E 61 62 6C 65 20  4D 49 44 49 20 70 6F 72   |   +-------- 1=Enable MIDI por
0000A300  74 20 61 64 64 72 20 64  65 63 6F 64 65 0D 0A 09  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  t addr decode  |   |   |   | 
0000A320  20 20 7C 20 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 31 3D 45 6E  61 62 6C 65 20 6A 6F 79    |   +------------ 1=Enable joy
0000A340  73 74 69 63 6B 20 70 6F  72 74 20 64 65 63 6F 64  65 0D 0A 09 20 20 7C 20  20 20 7C 20 20 20 7C 20  stick port decode  |   |   | 
0000A360  20 20 7C 20 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 20  52 65 73 65 72 76 65 64    |   +---------------- Reserved
0000A380  20 28 53 65 74 20 74 6F  20 30 29 20 20 20 20 20  20 20 20 0D 0A 09 20 20  7C 20 20 20 7C 20 20 20   (Set to 0)          |   |   
0000A3A0  7C 20 20 20 2B 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 20 52 65 73 65 72 76  |   +-------------------- Reserv
0000A3C0  65 64 20 28 53 65 74 20  74 6F 20 30 29 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  ed (Set to 0)                   
0000A3E0  20 20 20 20 0D 0A 09 20  20 7C 20 20 20 7C 20 20  20 2B 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D        |   |   +--------------
0000A400  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 20 52 65 73 65 72  76 65 64 20 28 53 65 74  20 74 6F 20 30 29 20 20  ---------- Reserved (Set to 0)  
0000A420  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 0D  0A 09 20 20 7C 20 20 20                           |   
0000A440  2B 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 20 52 65  +---------------------------- Re
0000A460  73 65 72 76 65 64 20 28  53 65 74 20 74 6F 20 30  29 20 20 20 20 20 20 20  20 20 20 20 20 20 0D 0A  served (Set to 0)             
0000A480  09 20 20 2B 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D    +----------------------------
0000A4A0  2D 2D 2D 2D 20 52 65 73  65 72 76 65 64 20 28 53  65 74 20 74 6F 20 30 29  0D 0A 0D 0A 0D 0A 0D 0A  ---- Reserved (Set to 0)
0000A4C0  32 2E 31 36 20 56 6F 6C  75 6D 65 20 72 61 6D 70  69 6E 67 20 64 65 73 63  72 69 70 74 69 6F 6E 0D  2.16 Volume ramping description
0000A4E0  0A 0D 0A 54 68 65 20 55  6C 74 72 61 53 6F 75 6E  64 20 68 61 73 20 62 75  69 6C 74 2D 69 6E 20 76  The UltraSound has built-in v
0000A500  6F 6C 75 6D 65 20 72 61  6D 70 69 6E 67 20 74 6F  20 66 61 63 69 6C 69 74  61 74 65 20 74 68 65 20  olume ramping to facilitate the 
0000A520  69 6D 70 6C 65 6D 65 6E  74 61 74 69 6F 6E 20 6F  66 20 74 68 65 20 61 74  74 61 63 6B 20 64 65 63  implementation of the attack dec
0000A540  61 79 20 73 75 73 74 61  69 6E 20 72 65 6C 65 61  73 65 20 65 6E 76 65 6C  6F 70 65 73 2E 20 20 54  ay sustain release envelopes.  T
0000A560  68 69 73 20 72 61 6D 70  69 6E 67 20 75 73 65 73  20 74 68 65 20 73 61 6D  65 20 70 72 69 6E 63 69  his ramping uses the same princi
0000A580  70 6C 65 20 61 73 20 74  68 65 20 76 6F 69 63 65  73 20 66 6F 72 20 75 70  64 61 74 69 6E 67 20 74  ple as the voices for updating t
0000A5A0  68 65 20 76 6F 6C 75 6D  65 20 76 61 6C 75 65 73  2E 20 20 41 20 73 65 63  74 69 6F 6E 20 6F 66 20  he volume values.  A section of 
0000A5C0  74 68 65 20 65 6E 76 65  6C 6F 70 65 20 63 61 6E  20 62 65 20 70 72 6F 67  72 61 6D 6D 65 64 20 73  the envelope can be programmed s
0000A5E0  75 63 68 20 74 68 61 74  20 74 68 65 20 50 43 20  64 6F 65 73 20 6E 6F 74  20 6E 65 65 64 20 74 6F  uch that the PC does not need to
0000A600  20 62 65 20 62 75 72 64  65 6E 65 64 20 77 69 74  68 20 74 68 65 20 74 61  73 6B 20 6F 66 20 63 68   be burdened with the task of ch
0000A620  61 6E 67 69 6E 67 20 65  61 63 68 20 76 6F 6C 75  6D 65 20 61 74 20 73 70  65 63 69 66 69 65 64 20  anging each volume at specified 
0000A640  69 6E 74 65 72 76 61 6C  73 2E 20 20 41 74 20 74  68 65 20 65 6E 64 20 6F  66 20 74 68 61 74 20 70  intervals.  At the end of that p
0000A660  61 72 74 69 63 75 6C 61  72 20 73 65 63 74 69 6F  6E 2C 20 61 6E 20 49 52  51 20 63 61 6E 20 62 65  articular section, an IRQ can be
0000A680  20 67 65 6E 65 72 61 74  65 64 20 73 6F 20 74 68  61 74 20 74 68 65 20 6E  65 78 74 20 73 65 63 74   generated so that the next sect
0000A6A0  69 6F 6E 20 63 61 6E 20  62 65 20 70 72 6F 67 72  61 6D 6D 65 64 20 69 6E  2E 20 20 0D 0A 0D 0A 54  ion can be programmed in.  T
0000A6C0  68 69 73 20 63 6F 6E 74  69 6E 75 65 73 20 75 6E  74 69 6C 20 74 68 65 20  65 6E 74 69 72 65 20 65  his continues until the entire e
0000A6E0  6E 76 65 6C 6F 70 65 20  68 61 73 20 62 65 65 6E  20 63 6F 6D 70 6C 65 74  65 64 2E 20 20 54 68 65  nvelope has been completed.  The
0000A700  20 73 74 61 72 74 20 61  6E 64 20 65 6E 64 20 70  6F 69 6E 74 73 20 61 73  20 77 65 6C 6C 20 61 73   start and end points as well as
0000A720  20 74 68 65 20 69 6E 63  72 65 6D 65 6E 74 20 72  61 74 65 20 61 72 65 20  66 75 6C 6C 79 20 70 72   the increment rate are fully pr
0000A740  6F 67 72 61 6D 6D 61 62  6C 65 2E 0D 0A 0D 0A 54  68 65 20 68 61 72 64 77  61 72 65 20 76 6F 6C 75  ogrammable.The hardware volu
0000A760  6D 65 20 72 65 67 69 73  74 65 72 73 20 61 6E 64  20 62 69 74 20 64 65 66  69 6E 69 74 69 6F 6E 73  me registers and bit definitions
0000A780  20 61 72 65 3A 0D 0A 0D  0A 20 20 20 20 20 20 43  75 72 72 65 6E 74 20 56  6F 6C 75 6D 65 20 28 39   are:      Current Volume (9
0000A7A0  2C 38 39 29 20 20 20 20  45 45 45 45 4D 4D 4D 4D  4D 4D 4D 4D 20 20 20 20  28 42 69 74 73 20 31 35  ,89)    EEEEMMMMMMMM    (Bits 15
0000A7C0  2D 34 29 0D 0A 0D 0A 20  20 20 20 20 20 56 6F 6C  75 6D 65 20 53 74 61 72  74 20 20 20 28 37 2C 38  -4)      Volume Start   (7,8
0000A7E0  37 29 20 20 20 20 45 45  45 45 4D 4D 4D 4D 20 20  20 20 20 20 20 20 28 42  69 74 73 20 37 2D 30 29  7)    EEEEMMMM        (Bits 7-0)
0000A800  0D 0A 0D 0A 20 20 20 20  20 20 56 6F 6C 75 6D 65  20 45 6E 64 20 20 20 20  20 28 38 2C 38 38 29 20        Volume End     (8,88) 
0000A820  20 20 20 45 45 45 45 4D  4D 4D 4D 20 20 20 20 20  20 20 20 28 42 69 74 73  20 37 2D 30 29 0D 0A 0D     EEEEMMMM        (Bits 7-0)
0000A840  0A 20 20 20 20 20 20 56  6F 6C 75 6D 65 20 49 6E  63 72 20 20 20 20 28 36  2C 38 36 29 20 20 20 20        Volume Incr    (6,86)    
0000A860  52 52 4D 4D 4D 4D 4D 4D  20 20 20 20 20 20 20 20  28 42 69 74 73 20 37 2D  30 29 0D 0A 0D 0A 4F 6E  RRMMMMMM        (Bits 7-0)On
0000A880  63 65 20 74 68 65 20 63  75 72 72 65 6E 74 20 76  6F 6C 75 6D 65 2C 20 73  74 61 72 74 20 61 6E 64  ce the current volume, start and
0000A8A0  20 65 6E 64 20 76 6F 6C  75 6D 65 73 20 61 72 65  20 70 72 6F 67 72 61 6D  6D 65 64 2C 20 74 68 65   end volumes are programmed, the
0000A8C0  20 6F 6E 6C 79 20 74 68  69 6E 67 20 6C 65 66 74  20 69 73 20 74 6F 20 73  65 74 20 75 70 20 74 68   only thing left is to set up th
0000A8E0  65 20 76 6F 6C 75 6D 65  20 69 6E 63 72 65 6D 65  6E 74 20 72 65 67 69 73  74 65 72 2E 20 20 54 68  e volume increment register.  Th
0000A900  69 73 20 72 65 67 69 73  74 65 72 20 64 65 74 65  72 6D 69 6E 65 73 20 68  6F 77 20 66 61 73 74 20  is register determines how fast 
0000A920  74 68 65 20 72 61 6D 70  20 74 61 6B 65 73 20 70  6C 61 63 65 20 61 6E 64  20 77 69 74 68 20 77 68  the ramp takes place and with wh
0000A940  61 74 20 67 72 61 6E 75  6C 61 72 69 74 79 2E 20  20 54 68 65 20 66 69 6E  65 72 20 74 68 65 20 67  at granularity.  The finer the g
0000A960  72 61 6E 75 6C 61 72 69  74 79 2C 20 74 68 65 20  73 6D 6F 6F 74 68 65 72  20 28 62 75 74 20 73 6C  ranularity, the smoother (but sl
0000A980  6F 77 65 72 29 20 74 68  65 20 72 61 6D 70 2E 20  20 54 68 65 20 69 6E 63  72 65 6D 65 6E 74 20 72  ower) the ramp.  The increment r
0000A9A0  65 67 69 73 74 65 72 20  68 61 73 20 32 20 66 69  65 6C 64 73 2E 20 20 54  68 65 20 66 69 72 73 74  egister has 2 fields.  The first
0000A9C0  20 69 73 20 74 68 65 20  61 6D 6F 75 6E 74 20 61  64 64 65 64 20 74 6F 20  28 6F 72 20 73 75 62 74   is the amount added to (or subt
0000A9E0  72 61 63 74 65 64 20 66  72 6F 6D 29 20 74 68 65  20 63 75 72 72 65 6E 74  20 76 6F 6C 75 6D 65 20  racted from) the current volume 
0000AA00  74 6F 20 67 65 74 20 74  6F 20 74 68 65 20 6E 65  78 74 20 6F 6E 65 2E 20  20 54 68 65 73 65 20 61  to get to the next one.  These a
0000AA20  72 65 20 74 68 65 20 6C  6F 77 20 36 20 62 69 74  73 20 61 6E 64 20 63 61  6E 20 72 61 6E 67 65 20  re the low 6 bits and can range 
0000AA40  66 72 6F 6D 20 31 20 74  6F 20 36 33 2E 20 20 41  20 31 20 69 73 20 61 20  6C 6F 6E 67 2C 20 73 6C  from 1 to 63.  A 1 is a long, sl
0000AA60  6F 77 20 72 61 6D 70 20  63 6F 6D 70 61 72 65 64  20 74 6F 20 61 20 36 33  2E 20 20 54 68 65 20 75  ow ramp compared to a 63.  The u
0000AA80  70 70 65 72 20 32 20 62  69 74 73 20 64 65 74 65  72 6D 69 6E 65 20 68 6F  77 20 6F 66 74 65 6E 20  pper 2 bits determine how often 
0000AAA0  74 68 65 20 69 6E 63 72  65 6D 65 6E 74 20 69 73  20 61 70 70 6C 69 65 64  20 74 6F 20 74 68 65 20  the increment is applied to the 
0000AAC0  63 75 72 72 65 6E 74 20  76 6F 6C 75 6D 65 2E 20  20 54 68 65 20 72 61 74  65 20 62 69 74 73 20 61  current volume.  The rate bits a
0000AAE0  72 65 20 64 65 66 69 6E  65 64 20 61 73 3A 0D 0A  0D 0A 20 52 61 74 65 20  42 69 74 73 20 20 20 20  re defined as: Rate Bits    
0000AB00  20 20 20 56 6F 6C 75 6D  65 20 55 70 64 61 74 65  20 52 61 74 65 0D 0A 20  20 20 20 20 30 30 20 20     Volume Update Rate     00  
0000AB20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 46 55  52 20 20 20 20 28 46 55  52 20 3D 20 31 2F 28 31                FUR    (FUR = 1/(1
0000AB40  2E 36 2A 23 61 63 74 69  76 65 20 76 6F 69 63 65  73 29 29 0D 0A 20 20 20  20 20 30 31 20 20 20 20  .6*#active voices))     01    
0000AB60  20 20 20 20 20 20 20 20  20 20 20 20 46 55 52 2F  38 0D 0A 20 20 20 20 20  31 30 20 20 20 20 20 20              FUR/8     10      
0000AB80  20 20 20 20 20 20 20 20  20 20 46 55 52 2F 36 34  0D 0A 20 20 20 20 20 31  31 20 20 20 20 20 20 20            FUR/64     11       
0000ABA0  20 20 20 20 20 20 20 20  20 46 55 52 2F 35 31 32  0D 0A 0D 0A 45 61 63 68  20 72 61 74 65 20 69 6E           FUR/512Each rate in
0000ABC0  63 72 65 6D 65 6E 74 20  69 73 20 38 20 74 69 6D  65 73 20 6C 6F 6E 67 65  72 20 74 68 61 6E 20 74  crement is 8 times longer than t
0000ABE0  68 65 20 70 72 65 63 65  64 69 6E 67 20 6F 6E 65  2E 20 20 54 68 69 73 20  6D 65 61 6E 73 20 74 68  he preceding one.  This means th
0000AC00  61 74 20 74 68 65 20 76  61 6C 75 65 20 74 6F 20  73 74 6F 72 65 20 66 6F  72 20 74 68 65 20 66 61  at the value to store for the fa
0000AC20  73 74 65 73 74 20 70 6F  73 73 69 62 6C 65 20 72  61 6D 70 20 69 73 20 31  46 68 20 28 36 33 29 2C  stest possible ramp is 1Fh (63),
0000AC40  20 61 6E 64 20 74 68 65  20 76 61 6C 75 65 20 66  6F 72 20 74 68 65 20 73  6C 6F 77 65 73 74 20 70   and the value for the slowest p
0000AC60  6F 73 73 69 62 6C 65 20  72 61 6D 70 20 69 73 20  31 43 68 20 28 31 39 33  29 2E 20 20 54 68 65 20  ossible ramp is 1Ch (193).  The 
0000AC80  61 70 70 72 6F 78 69 6D  61 74 65 20 74 69 6D 65  73 20 66 6F 72 20 61 20  66 75 6C 6C 20 73 63 61  approximate times for a full sca
0000ACA0  6C 65 20 76 6F 6C 75 6D  65 20 72 61 6D 70 20 28  30 2D 34 30 39 35 29 20  61 72 65 3A 0D 0A 0D 0A  le volume ramp (0-4095) are:
0000ACC0  52 61 74 65 20 20 20 20  56 6F 6C 20 49 6E 63 20  20 20 20 31 34 20 56 6F  69 63 65 73 20 20 20 20  Rate    Vol Inc    14 Voices    
0000ACE0  20 33 32 20 56 6F 69 63  65 73 0D 0A 2D 2D 2D 2D  20 20 20 20 2D 2D 2D 2D  2D 2D 2D 20 20 20 20 2D   32 Voices----    -------    -
0000AD00  2D 2D 2D 2D 2D 2D 2D 2D  20 20 20 20 20 2D 2D 2D  2D 2D 2D 2D 2D 2D 0D 0A  20 30 20 20 20 20 20 20  --------     --------- 0      
0000AD20  20 36 33 20 20 20 20 20  20 20 20 20 31 2E 34 20  6D 73 20 20 20 20 20 20  20 20 33 2E 33 20 6D 73   63         1.4 ms        3.3 ms
0000AD40  20 0D 0A 20 30 20 20 20  20 20 20 20 20 31 20 20  20 20 20 20 20 20 39 31  2E 37 20 6D 73 20 20 20    0        1        91.7 ms   
0000AD60  20 20 20 32 30 39 2E 37  20 6D 73 20 0D 0A 20 31  20 20 20 20 20 20 20 36  33 20 20 20 20 20 20 20     209.7 ms  1       63       
0000AD80  20 31 31 2E 35 20 6D 73  20 20 20 20 20 20 20 32  36 2E 32 20 6D 73 20 0D  0A 20 20 31 20 20 20 20   11.5 ms       26.2 ms   1    
0000ADA0  20 20 20 20 31 20 20 20  20 20 20 20 37 33 33 2E  38 20 6D 73 20 20 20 20  20 20 20 20 31 2E 37 20      1       733.8 ms        1.7 
0000ADC0  73 65 63 0D 0A 20 32 20  20 20 20 20 20 20 36 33  20 20 20 20 20 20 20 20  39 31 2E 38 20 6D 73 20  sec 2       63        91.8 ms 
0000ADE0  20 20 20 20 20 32 30 39  2E 37 20 6D 73 20 0D 0A  20 20 33 20 20 20 20 20  20 20 20 31 20 20 20 20       209.7 ms   3        1    
0000AE00  20 20 20 20 20 35 2E 39  20 73 65 63 20 20 20 20  20 20 31 33 2E 34 20 73  65 63 0D 0A 20 20 33 20       5.9 sec      13.4 sec  3 
0000AE20  20 20 20 20 20 20 36 33  20 20 20 20 20 20 20 37  33 34 2E 30 20 6D 73 20  20 20 20 20 20 20 20 31        63       734.0 ms        1
0000AE40  2E 37 20 73 65 63 0D 0A  20 20 33 20 20 20 20 20  20 20 20 31 20 20 20 20  20 20 20 20 34 37 2E 30  .7 sec  3        1        47.0
0000AE60  20 73 65 63 20 20 20 20  20 31 30 37 2E 33 20 73  65 63 0D 0A 0D 0A 4E 6F  74 65 20 74 68 61 74 20   sec     107.3 secNote that 
0000AE80  74 68 65 73 65 20 74 69  6D 65 73 20 61 72 65 20  66 6F 72 20 66 75 6C 6C  20 73 77 65 65 70 20 72  these times are for full sweep r
0000AEA0  61 6D 70 69 6E 67 2E 20  20 53 69 6E 63 65 20 61  20 76 6F 6C 75 6D 65 20  72 61 6D 70 20 75 73 75  amping.  Since a volume ramp usu
0000AEC0  61 6C 6C 79 20 67 6F 65  73 20 62 65 74 77 65 65  6E 20 70 6F 69 6E 74 73  20 69 6E 20 62 65 74 77  ally goes between points in betw
0000AEE0  65 65 6E 20 74 68 65 20  6C 69 6D 69 74 73 2C 20  74 68 65 20 61 63 74 75  61 6C 20 72 61 6D 70 20  een the limits, the actual ramp 
0000AF00  74 69 6D 65 73 20 77 69  6C 6C 20 62 65 20 6D 75  63 68 20 73 6D 61 6C 6C  65 72 2E 0D 0A 0D 0A 41  times will be much smaller.A
0000AF20  6C 6C 6F 77 69 6E 67 20  74 6F 20 6C 65 74 20 74  68 65 20 76 6F 6C 75 6D  65 20 72 61 6D 70 73 20  llowing to let the volume ramps 
0000AF40  74 6F 20 67 6F 20 74 6F  20 74 68 65 20 65 78 74  72 65 6D 65 73 20 63 61  6E 20 63 61 75 73 65 20  to go to the extremes can cause 
0000AF60  61 20 72 61 6E 64 6F 6D  20 6F 73 63 69 6C 6C 61  74 69 6F 6E 20 6F 66 20  74 68 65 20 76 6F 6C 75  a random oscillation of the volu
0000AF80  6D 65 20 77 68 65 6E 20  69 74 20 72 65 61 63 68  65 73 20 74 68 65 20 6C  69 6D 69 74 73 2E 20 20  me when it reaches the limits.  
0000AFA0  54 68 69 73 20 69 73 20  63 61 75 73 65 64 20 62  79 20 61 6E 20 6F 76 65  72 73 68 6F 6F 74 20 70  This is caused by an overshoot p
0000AFC0  61 73 74 20 74 68 65 20  6C 69 6D 69 74 20 64 75  65 20 74 6F 20 61 20 6C  61 72 67 65 20 73 74 65  ast the limit due to a large ste
0000AFE0  70 20 73 69 7A 65 2E 20  20 54 68 65 20 53 44 4B  20 72 6F 75 74 69 6E 65  73 20 70 72 6F 74 65 63  p size.  The SDK routines protec
0000B000  74 20 61 67 61 69 6E 73  74 20 74 68 69 73 20 62  79 20 6C 69 6D 69 74 69  6E 67 20 68 6F 77 20 63  t against this by limiting how c
0000B020  6C 6F 73 65 20 74 6F 20  74 68 65 20 72 61 69 6C  73 20 79 6F 75 20 63 61  6E 20 67 65 74 2E 20 20  lose to the rails you can get.  
0000B040  0D 0A 0D 0A 0C 43 68 61  70 74 65 72 20 33 20 2D  20 50 72 6F 67 72 61 6D  6D 69 6E 67 20 74 68 65  Chapter 3 - Programming the
0000B060  20 55 6C 74 72 61 53 6F  75 6E 64 0D 0A 0D 0A 33  2E 30 20 49 6E 74 72 6F  64 75 63 74 69 6F 6E 20   UltraSound3.0 Introduction 
0000B080  0D 0A 0D 0A 54 68 65 20  55 6C 74 72 61 53 6F 75  6E 64 20 69 73 20 66 72  65 71 75 65 6E 74 6C 79  The UltraSound is frequently
0000B0A0  20 72 65 66 65 72 72 65  64 20 74 6F 20 61 73 20  27 47 55 53 27 2C 20 66  6F 72 20 47 72 61 76 69   referred to as 'GUS', for Gravi
0000B0C0  73 27 20 55 6C 74 72 61  53 6F 75 6E 64 2E 20 20  54 68 65 20 63 61 72 64  20 68 61 73 20 61 20 76  s' UltraSound.  The card has a v
0000B0E0  65 72 79 20 67 6F 6F 64  20 72 65 70 75 74 61 74  69 6F 6E 20 61 6D 6F 6E  67 20 70 72 6F 67 72 61  ery good reputation among progra
0000B100  6D 6D 65 72 73 2C 20 73  69 6E 63 65 20 69 74 20  69 73 20 76 65 72 79 20  65 61 73 79 20 74 6F 20  mmers, since it is very easy to 
0000B120  70 72 6F 67 72 61 6D 20  75 73 69 6E 67 20 61 20  68 69 67 68 20 6C 65 76  65 6C 20 6C 61 6E 67 75  program using a high level langu
0000B140  61 67 65 2C 20 61 6E 64  20 70 72 6F 76 69 64 65  73 20 69 6E 63 72 65 64  69 62 6C 65 20 73 6F 75  age, and provides incredible sou
0000B160  6E 64 2E 20 20 48 6F 77  65 76 65 72 2C 20 74 68  65 72 65 20 61 72 65 20  73 6F 6D 65 20 74 68 69  nd.  However, there are some thi
0000B180  6E 67 73 20 74 68 61 74  20 79 6F 75 20 6E 65 65  64 20 74 6F 20 62 65 20  61 77 61 72 65 20 6F 66  ngs that you need to be aware of
0000B1A0  20 74 6F 20 73 75 63 63  65 73 73 66 75 6C 6C 79  20 70 72 6F 67 72 61 6D  20 74 68 65 20 62 6F 61   to successfully program the boa
0000B1C0  72 64 2E 20 20 55 73 65  72 73 20 6F 66 20 65 69  74 68 65 72 20 6C 61 6E  67 75 61 67 65 20 73 68  rd.  Users of either language sh
0000B1E0  6F 75 6C 64 20 63 6F 6E  73 75 6C 74 20 74 68 65  69 72 20 72 65 73 70 65  63 74 69 76 65 20 65 78  ould consult their respective ex
0000B200  61 6D 70 6C 65 20 70 72  6F 67 72 61 6D 73 20 62  65 66 6F 72 65 20 61 74  74 65 6D 70 74 69 6E 67  ample programs before attempting
0000B220  20 74 6F 20 75 73 65 20  74 68 65 20 63 61 72 64  2E 20 20 41 6C 73 6F 2C  20 43 20 75 73 65 72 73   to use the card.  Also, C users
0000B240  20 73 68 6F 75 6C 64 20  63 6F 6E 73 75 6C 74 20  73 65 63 74 69 6F 6E 20  33 2E 31 32 2C 20 77 68   should consult section 3.12, wh
0000B260  69 6C 65 20 50 61 73 63  61 6C 20 75 73 65 72 73  20 73 68 6F 75 6C 64 20  63 6F 6E 73 75 6C 74 20  ile Pascal users should consult 
0000B280  73 65 63 74 69 6F 6E 20  33 2E 31 33 2E 20 20 0D  0A 0D 0A 0D 0A 0D 0A 33  2E 31 20 53 6F 75 6E 64  section 3.13.  3.1 Sound
0000B2A0  0D 0A 0D 0A 41 20 73 6F  75 6E 64 20 69 73 20 73  6F 6D 65 74 68 69 6E 67  20 74 68 61 74 20 79 6F  A sound is something that yo
0000B2C0  75 20 68 65 61 72 2E 20  49 74 20 69 73 20 70 72  6F 64 75 63 65 64 20 62  79 20 61 20 73 6F 75 72  u hear. It is produced by a sour
0000B2E0  63 65 20 61 6E 64 20 72  65 63 65 69 76 65 64 20  62 79 20 74 68 65 20 65  61 72 73 20 6F 66 20 74  ce and received by the ears of t
0000B300  68 65 20 6C 69 73 74 65  6E 65 72 2E 20 20 54 68  65 72 65 20 61 72 65 20  73 65 76 65 72 61 6C 20  he listener.  There are several 
0000B320  6D 65 64 69 75 6D 73 20  66 6F 72 20 74 68 65 20  73 74 6F 72 61 67 65 20  6F 66 20 73 6F 75 6E 64  mediums for the storage of sound
0000B340  2C 20 69 6E 63 6C 75 64  69 6E 67 20 76 69 6E 79  6C 2C 20 6D 61 67 6E 65  74 69 63 20 73 75 72 66  , including vinyl, magnetic surf
0000B360  61 63 65 73 2C 20 61 6E  64 20 6D 6F 72 65 20 72  65 63 65 6E 74 6C 79 20  6F 70 74 69 63 61 6C 20  aces, and more recently optical 
0000B380  64 69 73 6B 73 2E 0D 0A  0D 0A 57 68 65 6E 20 73  6F 6D 65 74 68 69 6E 67  20 6D 61 6B 65 73 20 61  disks.When something makes a
0000B3A0  20 73 6F 75 6E 64 2C 20  69 74 20 63 72 65 61 74  65 73 20 77 61 76 65 73  20 6F 66 20 64 69 66 66   sound, it creates waves of diff
0000B3C0  65 72 65 6E 74 20 61 69  72 20 69 6E 74 65 6E 73  69 74 79 2E 20 20 54 68  65 73 65 20 77 61 76 65  erent air intensity.  These wave
0000B3E0  73 20 61 72 65 20 72 65  67 69 73 74 65 72 65 64  20 61 73 20 27 73 6F 75  6E 64 27 2C 20 61 6E 64  s are registered as 'sound', and
0000B400  20 74 68 65 20 61 6D 70  6C 69 74 75 64 65 20 61  6E 64 20 66 72 65 71 75  65 6E 63 79 20 6F 66 20   the amplitude and frequency of 
0000B420  74 68 65 73 65 20 77 61  76 65 73 20 64 65 74 65  72 6D 69 6E 65 20 74 68  65 20 27 74 79 70 65 27  these waves determine the 'type'
0000B440  20 6F 66 20 73 6F 75 6E  64 2E 20 20 0D 0A 0D 0A  41 6D 70 6C 69 74 75 64  65 20 69 73 20 64 65 74   of sound.  Amplitude is det
0000B460  65 72 6D 69 6E 65 64 20  62 79 20 74 68 65 20 68  69 67 68 65 73 74 20 61  6E 64 20 6C 6F 77 65 73  ermined by the highest and lowes
0000B480  74 20 70 6F 69 6E 74 73  20 6F 66 20 74 68 65 20  77 61 76 65 2C 20 61 6E  64 20 69 73 20 72 65 67  t points of the wave, and is reg
0000B4A0  69 73 74 65 72 65 64 20  62 79 20 79 6F 75 72 20  65 61 72 20 61 73 20 74  68 65 20 76 6F 6C 75 6D  istered by your ear as the volum
0000B4C0  65 20 6F 66 20 74 68 65  20 73 6F 75 6E 64 2E 20  20 54 68 65 72 65 66 6F  72 65 2C 20 74 68 65 20  e of the sound.  Therefore, the 
0000B4E0  6C 6F 75 64 6E 65 73 73  20 6F 66 20 61 20 73 6F  75 6E 64 20 69 73 20 63  68 61 6E 67 65 64 20 62  loudness of a sound is changed b
0000B500  79 20 76 61 72 79 69 6E  67 20 74 68 65 20 61 6D  70 6C 69 74 75 64 65 20  6F 66 20 74 68 65 20 73  y varying the amplitude of the s
0000B520  6F 75 6E 64 27 73 20 77  61 76 65 2E 20 20 46 72  65 71 75 65 6E 63 79 20  69 73 20 64 65 74 65 72  ound's wave.  Frequency is deter
0000B540  6D 69 6E 65 64 20 62 79  20 74 68 65 20 6E 75 6D  62 65 72 20 6F 66 20 70  75 6C 73 65 73 20 28 70  mined by the number of pulses (p
0000B560  61 73 73 65 73 20 6F 66  20 61 20 73 69 6E 67 6C  65 20 77 61 76 65 20 70  65 61 6B 20 61 6E 64 20  asses of a single wave peak and 
0000B580  74 72 6F 75 67 68 29 20  77 68 69 63 68 20 70 61  73 73 20 61 20 63 65 72  74 61 69 6E 20 70 6F 69  trough) which pass a certain poi
0000B5A0  6E 74 20 69 6E 20 61 20  63 65 72 74 61 69 6E 20  61 6D 6F 75 6E 74 20 6F  66 20 74 69 6D 65 2E 20  nt in a certain amount of time. 
0000B5C0  20 54 68 65 20 6D 65 61  73 75 72 65 20 6F 66 20  73 6F 75 6E 64 20 66 72  65 71 75 65 6E 63 79 20   The measure of sound frequency 
0000B5E0  69 73 20 64 6F 6E 65 20  75 73 69 6E 67 20 74 68  65 20 73 74 61 6E 64 61  72 64 20 6D 65 61 73 75  is done using the standard measu
0000B600  72 65 20 66 6F 72 20 66  72 65 71 75 65 6E 63 79  20 2D 20 48 65 72 74 7A  20 28 48 7A 29 2E 20 20  re for frequency - Hertz (Hz).  
0000B620  54 68 65 20 68 69 67 68  65 72 20 74 68 65 20 66  72 65 71 75 65 6E 63 79  2C 20 74 68 65 20 68 69  The higher the frequency, the hi
0000B640  67 68 65 72 20 74 68 65  20 70 69 74 63 68 20 6F  66 20 74 68 65 20 73 6F  75 6E 64 20 74 68 61 74  gher the pitch of the sound that
0000B660  20 69 73 20 68 65 61 72  64 2E 0D 0A 0D 0A 4E 6F  72 6D 61 6C 20 73 6F 75  6E 64 20 6C 69 6B 65 20   is heard.Normal sound like 
0000B680  73 70 65 65 63 68 20 61  6E 64 20 73 6F 75 6E 64  20 74 68 61 74 20 63 6F  6D 65 73 20 66 72 6F 6D  speech and sound that comes from
0000B6A0  20 6D 69 78 65 73 20 6F  66 20 64 69 66 66 65 72  65 6E 74 20 69 6E 73 74  72 75 6D 65 6E 74 73 20   mixes of different instruments 
0000B6C0  69 73 20 61 20 76 65 72  79 20 63 6F 6D 70 6C 65  78 20 70 61 74 74 65 72  6E 20 6F 66 20 63 68 61  is a very complex pattern of cha
0000B6E0  6E 67 65 73 20 69 6E 20  61 6D 70 6C 69 74 75 64  65 20 61 6E 64 20 66 72  65 71 75 65 6E 63 79 2E  nges in amplitude and frequency.
0000B700  20 20 54 6F 20 72 65 63  6F 72 64 20 74 68 65 20  77 61 76 65 27 73 20 70  61 74 74 65 72 6E 2C 20    To record the wave's pattern, 
0000B720  61 20 63 6F 6D 70 75 74  65 72 20 74 61 6B 65 73  20 61 20 6C 61 72 67 65  20 6E 75 6D 62 65 72 20  a computer takes a large number 
0000B740  6F 66 20 27 73 61 6D 70  6C 65 73 27 20 6F 66 20  74 68 65 20 77 61 76 65  20 70 72 6F 64 75 63 65  of 'samples' of the wave produce
0000B760  64 20 62 79 20 74 68 65  20 73 6F 75 6E 64 2E 20  20 54 68 65 6E 20 77 68  65 6E 20 69 74 20 67 6F  d by the sound.  Then when it go
0000B780  65 73 20 74 68 72 6F 75  67 68 20 74 68 65 20 69  6E 64 69 76 69 64 75 61  6C 20 27 73 61 6D 70 6C  es through the individual 'sampl
0000B7A0  65 73 27 20 61 74 20 74  68 65 20 73 61 6D 65 20  72 61 74 65 20 74 68 65  79 20 77 65 72 65 20 72  es' at the same rate they were r
0000B7C0  65 63 6F 72 64 65 64 2C  20 69 74 20 63 61 6E 20  72 65 63 6F 6E 73 74 72  75 63 74 20 74 68 65 20  ecorded, it can reconstruct the 
0000B7E0  6F 72 69 67 69 6E 61 6C  20 77 61 76 65 20 61 6E  64 20 70 72 6F 64 75 63  65 20 61 20 73 6F 75 6E  original wave and produce a soun
0000B800  64 20 77 68 69 63 68 20  69 73 20 63 6C 6F 73 65  20 74 6F 20 74 68 65 20  6F 72 69 67 69 6E 61 6C  d which is close to the original
0000B820  20 73 6F 75 6E 64 2E 20  20 49 66 20 74 68 65 20  73 61 6D 70 6C 65 20 72  61 74 65 20 69 73 20 6E   sound.  If the sample rate is n
0000B840  6F 74 20 68 69 67 68 20  65 6E 6F 75 67 68 2C 20  74 68 65 20 63 6F 6D 70  75 74 65 72 20 63 61 6E  ot high enough, the computer can
0000B860  20 6D 69 73 73 20 63 68  61 6E 67 65 73 20 69 6E  20 74 68 65 20 61 6D 70  6C 69 74 75 64 65 20 61   miss changes in the amplitude a
0000B880  6E 64 20 66 72 65 71 75  65 6E 63 79 2C 20 61 6E  64 20 74 68 65 20 73 6F  75 6E 64 20 72 65 70 72  nd frequency, and the sound repr
0000B8A0  6F 64 75 63 65 64 20 77  69 6C 6C 20 6E 6F 74 20  73 6F 75 6E 64 20 65 78  61 63 74 6C 79 20 6C 69  oduced will not sound exactly li
0000B8C0  6B 65 20 74 68 65 20 6F  72 69 67 69 6E 61 6C 20  73 6F 75 6E 64 2E 0D 0A  0D 0A 54 68 65 20 6E 75  ke the original sound.The nu
0000B8E0  6D 62 65 72 20 6F 66 20  73 61 6D 70 6C 65 73 20  74 61 6B 65 6E 20 65 61  63 68 20 73 65 63 6F 6E  mber of samples taken each secon
0000B900  64 20 69 73 20 72 65 66  65 72 72 65 64 20 74 6F  20 61 73 20 74 68 65 20  27 73 61 6D 70 6C 69 6E  d is referred to as the 'samplin
0000B920  67 20 72 61 74 65 27 2C  20 61 6E 64 20 74 68 65  20 6E 75 6D 62 65 72 20  6F 66 20 73 61 6D 70 6C  g rate', and the number of sampl
0000B940  65 73 20 70 6C 61 79 65  64 20 62 61 63 6B 20 65  61 63 68 20 73 65 63 6F  6E 64 20 69 73 20 72 65  es played back each second is re
0000B960  66 65 72 72 65 64 20 74  6F 20 61 73 20 74 68 65  20 27 70 6C 61 79 62 61  63 6B 20 72 61 74 65 27  ferred to as the 'playback rate'
0000B980  2E 20 20 57 68 65 6E 20  61 20 72 6F 63 6B 20 62  61 6E 64 20 70 6C 61 79  73 20 61 20 73 6F 6E 67  .  When a rock band plays a song
0000B9A0  2C 20 74 68 65 20 63 6F  6D 62 69 6E 65 64 20 73  6F 75 6E 64 20 77 61 76  65 20 70 72 6F 64 75 63  , the combined sound wave produc
0000B9C0  65 64 20 62 79 20 74 68  65 20 73 69 6E 67 65 72  73 20 61 6E 64 20 69 6E  73 74 72 75 6D 65 6E 74  ed by the singers and instrument
0000B9E0  73 20 69 73 20 70 72 6F  64 75 63 65 64 2E 20 20  54 6F 20 72 65 63 6F 72  64 20 74 68 69 73 20 77  s is produced.  To record this w
0000BA00  61 76 65 20 61 74 20 43  44 2D 71 75 61 6C 69 74  79 20 6F 6E 20 61 20 63  6F 6D 70 75 74 65 72 20  ave at CD-quality on a computer 
0000BA20  6D 65 64 69 75 6D 20 28  6C 69 6B 65 20 6D 65 6D  6F 72 79 20 6F 72 20 61  20 68 61 72 64 20 64 69  medium (like memory or a hard di
0000BA40  73 6B 29 2C 20 74 68 65  20 77 61 76 65 20 69 73  20 27 73 61 6D 70 6C 65  64 27 20 34 34 31 30 30  sk), the wave is 'sampled' 44100
0000BA60  20 74 69 6D 65 73 20 65  61 63 68 20 73 65 63 6F  6E 64 2E 20 20 53 69 6E  63 65 20 74 68 65 20 6E   times each second.  Since the n
0000BA80  75 6D 62 65 72 20 6F 66  20 73 61 6D 70 6C 65 73  20 70 65 72 20 73 65 63  6F 6E 64 20 69 73 20 61  umber of samples per second is a
0000BAA0  20 66 72 65 71 75 65 6E  63 79 2C 20 74 68 69 73  20 72 61 74 65 20 69 73  20 6D 65 61 73 75 72 65   frequency, this rate is measure
0000BAC0  64 20 61 67 61 69 6E 20  69 6E 20 48 65 72 74 7A  2E 20 20 54 68 65 72 65  66 6F 72 65 2C 20 77 65  d again in Hertz.  Therefore, we
0000BAE0  20 73 61 79 20 74 68 61  74 20 74 68 65 20 72 65  63 6F 72 64 69 6E 67 20  66 72 65 71 75 65 6E 63   say that the recording frequenc
0000BB00  79 20 69 73 20 34 34 2E  31 20 6B 48 7A 2E 0D 0A  0D 0A 49 66 20 49 20 72  65 63 6F 72 64 20 61 20  y is 44.1 kHz.If I record a 
0000BB20  73 6F 75 6E 64 20 61 74  20 34 34 2E 31 20 6B 48  7A 20 66 6F 72 20 74 77  6F 20 73 65 63 6F 6E 64  sound at 44.1 kHz for two second
0000BB40  73 2C 20 49 20 77 69 6C  6C 20 68 61 76 65 20 38  38 32 30 30 20 69 6E 64  69 76 69 64 75 61 6C 20  s, I will have 88200 individual 
0000BB60  27 73 61 6D 70 6C 65 73  27 2E 20 20 54 68 65 20  64 61 74 61 20 74 68 61  74 20 63 6F 6D 70 72 69  'samples'.  The data that compri
0000BB80  73 65 73 20 74 68 65 73  65 20 27 73 61 6D 70 6C  65 73 27 20 69 73 20 74  79 70 69 63 61 6C 6C 79  ses these 'samples' is typically
0000BBA0  20 72 65 66 65 72 72 65  64 20 74 6F 20 61 73 20  61 20 27 73 61 6D 70 6C  65 27 20 69 74 73 65 6C   referred to as a 'sample' itsel
0000BBC0  66 2E 0D 0A 0D 0A 57 68  65 6E 20 61 20 72 65 63  6F 72 64 69 6E 67 20 6D  61 64 65 20 61 74 20 34  f.When a recording made at 4
0000BBE0  34 2E 31 20 6B 48 7A 20  69 73 20 70 6C 61 79 65  64 20 62 61 63 6B 20 61  74 20 34 34 2E 31 20 6B  4.1 kHz is played back at 44.1 k
0000BC00  48 7A 2C 20 74 68 65 20  6F 72 69 67 69 6E 61 6C  20 73 6F 75 6E 64 20 69  73 20 72 65 70 72 6F 64  Hz, the original sound is reprod
0000BC20  75 63 65 64 20 61 6C 6D  6F 73 74 20 65 78 61 63  74 6C 79 2E 20 20 4E 6F  74 65 20 74 68 61 74 20  uced almost exactly.  Note that 
0000BC40  74 68 65 20 72 65 63 6F  72 64 69 6E 67 20 61 6E  64 20 70 6C 61 79 62 61  63 6B 20 66 72 65 71 75  the recording and playback frequ
0000BC60  65 6E 63 79 20 61 72 65  20 64 69 66 66 65 72 65  6E 74 20 66 72 6F 6D 20  74 68 65 20 66 72 65 71  ency are different from the freq
0000BC80  75 65 6E 63 79 20 6F 66  20 74 68 65 20 73 6F 75  6E 64 20 69 74 73 65 6C  66 2E 0D 0A 0D 0A 4D 6F  uency of the sound itself.Mo
0000BCA0  73 74 20 6F 74 68 65 72  20 73 6F 75 6E 64 20 63  61 72 64 73 20 64 6F 20  6E 6F 74 20 68 61 76 65  st other sound cards do not have
0000BCC0  20 61 6E 79 20 52 41 4D  20 6F 6E 20 74 68 65 6D  2C 20 61 6E 64 20 74 68  65 72 65 66 6F 72 65 20   any RAM on them, and therefore 
0000BCE0  68 61 76 65 20 74 6F 20  75 73 65 20 74 68 65 20  50 43 27 73 20 52 41 4D  20 74 6F 20 73 74 6F 72  have to use the PC's RAM to stor
0000BD00  65 20 74 68 65 20 73 6F  75 6E 64 73 20 74 68 65  79 20 70 72 6F 64 75 63  65 2E 20 20 54 68 69 73  e the sounds they produce.  This
0000BD20  20 6C 65 61 76 65 73 20  6C 65 73 73 20 72 6F 6F  6D 20 66 6F 72 20 61 70  70 6C 69 63 61 74 69 6F   leaves less room for applicatio
0000BD40  6E 20 70 72 6F 67 72 61  6D 73 2C 20 61 6E 64 20  69 73 20 6A 75 73 74 20  61 6E 6F 74 68 65 72 20  n programs, and is just another 
0000BD60  74 68 69 6E 67 20 74 68  61 74 20 74 68 65 20 43  50 55 20 68 61 73 20 74  6F 20 74 72 61 63 6B 20  thing that the CPU has to track 
0000BD80  61 6E 64 20 70 72 6F 63  65 73 73 20 2D 20 73 6C  6F 77 69 6E 67 20 64 6F  77 6E 20 74 68 65 20 6D  and process - slowing down the m
0000BDA0  61 63 68 69 6E 65 2E 20  20 0D 0A 0D 0A 4F 6E 20  74 68 65 20 55 6C 74 72  61 53 6F 75 6E 64 2C 20  achine.  On the UltraSound, 
0000BDC0  73 61 6D 70 6C 65 73 20  61 72 65 20 73 74 6F 72  65 64 20 6F 6E 20 74 68  65 20 63 61 72 64 20 69  samples are stored on the card i
0000BDE0  6E 20 69 74 27 73 20 44  52 41 4D 2E 20 20 54 68  69 73 20 6C 65 61 76 65  73 20 6D 6F 72 65 20 73  n it's DRAM.  This leaves more s
0000BE00  70 61 63 65 20 69 6E 20  50 43 20 52 41 4D 20 66  6F 72 20 70 72 6F 67 72  61 6D 73 2E 20 20 41 6C  pace in PC RAM for programs.  Al
0000BE20  73 6F 2C 20 74 68 65 20  47 46 31 20 63 68 69 70  20 69 6E 20 74 68 65 20  55 6C 74 72 61 53 6F 75  so, the GF1 chip in the UltraSou
0000BE40  6E 64 20 63 61 6E 20 70  6C 61 79 20 33 32 20 69  6E 64 65 70 65 6E 64 65  6E 74 20 73 6F 75 6E 64  nd can play 32 independent sound
0000BE60  73 20 61 74 20 6F 6E 63  65 20 77 69 74 68 6F 75  74 20 75 73 69 6E 67 20  61 6E 79 20 43 50 55 20  s at once without using any CPU 
0000BE80  74 69 6D 65 20 2D 20 73  6F 20 74 68 65 20 6D 61  63 68 69 6E 65 20 64 6F  65 73 6E 27 74 20 73 6C  time - so the machine doesn't sl
0000BEA0  6F 77 20 64 6F 77 6E 20  61 74 20 61 6C 6C 21 0D  0A 0D 0A 0D 0A 0D 0A 33  2E 32 20 54 68 65 20 42  ow down at all!3.2 The B
0000BEC0  61 73 69 63 73 20 6F 66  20 74 68 65 20 55 6C 74  72 61 53 6F 75 6E 64 0D  0A 0D 0A 54 68 65 20 6F  asics of the UltraSoundThe o
0000BEE0  6E 6C 79 20 74 68 69 6E  67 73 20 79 6F 75 20 6E  65 65 64 20 74 6F 20 6B  6E 6F 77 20 74 6F 20 73  nly things you need to know to s
0000BF00  65 74 20 75 70 20 74 68  65 20 63 61 72 64 20 77  68 65 6E 20 79 6F 75 72  20 70 72 6F 67 72 61 6D  et up the card when your program
0000BF20  20 73 74 61 72 74 73 20  69 73 20 74 68 65 20 6D  61 78 69 6D 75 6D 20 23  20 6F 66 20 76 6F 69 63   starts is the maximum # of voic
0000BF40  65 73 20 79 6F 75 20 61  72 65 20 67 6F 69 6E 67  20 74 6F 20 6E 65 65 64  20 61 6E 64 20 74 68 65  es you are going to need and the
0000BF60  20 6D 61 78 69 6D 75 6D  20 70 6C 61 79 62 61 63  6B 20 66 72 65 71 75 65  6E 63 79 20 79 6F 75 27   maximum playback frequency you'
0000BF80  72 65 20 67 6F 69 6E 67  20 74 6F 20 6E 65 65 64  20 66 6F 72 20 61 6E 79  20 73 61 6D 70 6C 65 2E  re going to need for any sample.
0000BFA0  0D 0A 0D 0A 43 6F 6E 73  75 6C 74 20 74 68 65 20  66 72 65 71 75 65 6E 63  79 20 74 61 62 6C 65 20  Consult the frequency table 
0000BFC0  69 6E 20 73 65 63 74 69  6F 6E 20 31 2E 33 20 74  6F 20 73 65 65 20 68 6F  77 20 6D 61 6E 79 20 76  in section 1.3 to see how many v
0000BFE0  6F 69 63 65 73 20 79 6F  75 20 73 68 6F 75 6C 64  20 69 6E 69 74 69 61 6C  69 7A 65 20 74 68 65 20  oices you should initialize the 
0000C000  63 61 72 64 20 77 69 74  68 2E 20 20 49 66 20 79  6F 75 20 64 6F 6E 27 74  20 6E 65 65 64 20 61 20  card with.  If you don't need a 
0000C020  6C 61 72 67 65 20 6E 75  6D 62 65 72 20 6F 66 20  76 6F 69 63 65 73 2C 20  69 6E 69 74 69 61 6C 69  large number of voices, initiali
0000C040  7A 69 6E 67 20 74 68 65  20 63 61 72 64 20 74 6F  20 75 73 65 20 66 65 77  65 72 20 76 6F 69 63 65  zing the card to use fewer voice
0000C060  73 20 6D 65 61 6E 73 20  74 68 61 74 20 73 6F 6D  65 20 27 6F 76 65 72 73  61 6D 70 6C 69 6E 67 27  s means that some 'oversampling'
0000C080  20 77 69 6C 6C 20 6F 63  63 75 72 2C 20 6D 61 6B  69 6E 67 20 74 68 65 20  73 6F 75 6E 64 20 62 65   will occur, making the sound be
0000C0A0  74 74 65 72 20 69 6E 20  71 75 61 6C 69 74 79 2E  20 20 59 6F 75 20 63 61  6E 6E 6F 74 20 69 6E 69  tter in quality.  You cannot ini
0000C0C0  74 69 61 6C 69 7A 65 20  66 6F 72 20 66 65 77 65  72 20 74 68 61 6E 20 31  34 20 76 6F 69 63 65 73  tialize for fewer than 14 voices
0000C0E0  20 6F 72 20 6C 61 72 67  65 72 20 74 68 61 6E 20  33 32 2E 0D 0A 0D 0A 54  6F 20 6F 70 65 6E 20 74   or larger than 32.To open t
0000C100  68 65 20 63 61 72 64 2C  20 79 6F 75 20 63 61 6C  6C 20 74 68 65 20 55 6C  74 72 61 4F 70 65 6E 20  he card, you call the UltraOpen 
0000C120  66 75 6E 63 74 69 6F 6E  2E 20 20 54 68 69 73 20  77 69 6C 6C 20 73 65 74  20 75 70 20 74 68 65 20  function.  This will set up the 
0000C140  69 6E 74 65 72 72 75 70  74 20 76 65 63 74 6F 72  73 20 61 6E 64 20 63 6F  6E 74 72 6F 6C 20 70 72  interrupt vectors and control pr
0000C160  6F 63 65 64 75 72 65 73  20 66 6F 72 20 74 68 65  20 63 61 72 64 2C 20 61  6E 64 20 74 68 65 6E 20  ocedures for the card, and then 
0000C180  72 65 73 65 74 20 74 68  65 20 63 61 72 64 20 74  6F 20 75 73 65 20 74 68  65 20 6E 75 6D 62 65 72  reset the card to use the number
0000C1A0  20 6F 66 20 76 6F 69 63  65 73 20 79 6F 75 20 73  70 65 63 69 66 79 2E 20  20 57 68 65 6E 20 79 6F   of voices you specify.  When yo
0000C1C0  75 20 61 72 65 20 66 69  6E 69 73 68 65 64 20 77  69 74 68 20 74 68 65 20  63 61 72 64 2C 20 79 6F  u are finished with the card, yo
0000C1E0  75 20 6E 65 65 64 20 74  6F 20 63 6C 6F 73 65 20  69 74 20 73 6F 20 74 68  61 74 20 74 68 65 20 69  u need to close it so that the i
0000C200  6E 74 65 72 72 75 70 74  20 70 72 6F 63 65 64 75  72 65 73 2C 20 76 6F 69  63 65 73 2C 20 61 6E 64  nterrupt procedures, voices, and
0000C220  20 76 6F 6C 75 6D 65 73  20 67 65 74 20 73 74 6F  70 70 65 64 20 61 6E 64  20 72 65 73 65 74 20 74   volumes get stopped and reset t
0000C240  6F 20 27 6E 6F 72 6D 61  6C 27 2E 20 20 54 6F 20  64 6F 20 74 68 69 73 2C  20 63 61 6C 6C 20 74 68  o 'normal'.  To do this, call th
0000C260  65 20 55 6C 74 72 61 43  6C 6F 73 65 20 66 75 6E  63 74 69 6F 6E 2E 20 20  50 6C 65 61 73 65 20 73  e UltraClose function.  Please s
0000C280  65 65 20 63 68 61 70 74  65 72 20 34 2C 20 74 68  65 20 72 65 66 65 72 65  6E 63 65 20 67 75 69 64  ee chapter 4, the reference guid
0000C2A0  65 2C 20 66 6F 72 20 6D  6F 72 65 20 69 6E 66 6F  72 6D 61 74 69 6F 6E 20  6F 6E 20 74 68 65 20 73  e, for more information on the s
0000C2C0  79 6E 74 61 78 20 61 6E  64 20 75 73 61 67 65 20  6F 66 20 74 68 65 73 65  20 72 6F 75 74 69 6E 65  yntax and usage of these routine
0000C2E0  73 2E 0D 0A 0D 0A 0D 0A  33 2E 33 20 55 73 69 6E  67 20 47 55 53 20 4D 65  6D 6F 72 79 0D 0A 0D 0A  s.3.3 Using GUS Memory
0000C300  54 68 65 20 55 6C 74 72  61 53 6F 75 6E 64 20 68  61 73 20 61 20 64 65 66  61 75 6C 74 20 61 6D 6F  The UltraSound has a default amo
0000C320  75 6E 74 20 6F 66 20 32  35 36 4B 20 6F 66 20 6D  65 6D 6F 72 79 20 6F 6E  20 74 68 65 20 63 61 72  unt of 256K of memory on the car
0000C340  64 20 74 68 61 74 20 63  61 6E 20 62 65 20 75 70  67 72 61 64 65 64 20 69  6E 20 32 35 36 4B 20 69  d that can be upgraded in 256K i
0000C360  6E 63 72 65 6D 65 6E 74  73 20 75 70 20 74 6F 20  31 20 4D 42 2E 20 20 49  66 20 79 6F 75 20 61 72  ncrements up to 1 MB.  If you ar
0000C380  65 20 64 65 76 65 6C 6F  70 69 6E 67 20 66 6F 72  20 74 68 65 20 63 61 72  64 2C 20 79 6F 75 20 6D  e developing for the card, you m
0000C3A0  61 79 20 77 61 6E 74 20  74 6F 20 75 70 67 72 61  64 65 20 74 6F 20 61 20  66 75 6C 6C 20 6D 65 67  ay want to upgrade to a full meg
0000C3C0  61 62 79 74 65 2E 20 20  41 6C 73 6F 2C 20 79 6F  75 20 73 68 6F 75 6C 64  20 62 65 20 61 77 61 72  abyte.  Also, you should be awar
0000C3E0  65 20 74 68 61 74 20 6D  61 6E 79 20 75 73 65 72  73 20 6F 66 20 74 68 65  20 63 61 72 64 20 64 6F  e that many users of the card do
0000C400  20 4E 4F 54 20 68 61 76  65 20 31 20 4D 42 20 6F  66 20 52 41 4D 20 69 6E  73 74 61 6C 6C 65 64 2C   NOT have 1 MB of RAM installed,
0000C420  20 61 6E 64 20 74 68 61  74 20 69 66 20 79 6F 75  20 61 72 65 20 67 6F 69  6E 67 20 74 6F 20 6C 6F   and that if you are going to lo
0000C440  61 64 20 73 61 6D 70 6C  65 73 20 69 6E 74 6F 20  74 68 65 20 63 61 72 64  27 73 20 6D 65 6D 6F 72  ad samples into the card's memor
0000C460  79 2C 20 79 6F 75 20 6E  65 65 64 20 74 6F 20 63  68 65 63 6B 20 74 6F 20  6D 61 6B 65 20 73 75 72  y, you need to check to make sur
0000C480  65 20 79 6F 75 20 68 61  76 65 20 65 6E 6F 75 67  68 20 72 6F 6F 6D 2E 20  20 54 68 65 20 66 75 6E  e you have enough room.  The fun
0000C4A0  63 74 69 6F 6E 20 55 6C  74 72 61 4D 61 78 41 6C  6C 6F 63 20 28 61 64 64  69 74 69 6F 6E 61 6C 6C  ction UltraMaxAlloc (additionall
0000C4C0  79 20 66 6F 72 20 50 61  73 63 61 6C 20 75 73 65  72 73 20 74 68 65 20 66  75 6E 63 74 69 6F 6E 73  y for Pascal users the functions
0000C4E0  20 55 6C 74 72 61 4D 65  6D 41 76 61 69 6C 20 61  6E 64 20 55 6C 74 72 61  4D 61 78 41 76 61 69 6C   UltraMemAvail and UltraMaxAvail
0000C500  29 20 77 69 6C 6C 20 74  65 6C 6C 20 79 6F 75 20  68 6F 77 20 6D 75 63 68  20 52 41 4D 20 79 6F 75  ) will tell you how much RAM you
0000C520  20 73 74 69 6C 6C 20 68  61 76 65 20 61 76 61 69  6C 61 62 6C 65 2E 20 20  42 65 63 61 75 73 65 20   still have available.  Because 
0000C540  6F 66 20 74 68 65 20 77  61 79 20 74 68 65 20 47  55 53 20 6D 65 6D 6F 72  79 20 69 73 20 73 74 72  of the way the GUS memory is str
0000C560  75 63 74 75 72 65 64 20  70 68 79 73 69 63 61 6C  6C 79 2C 20 79 6F 75 20  63 61 6E 6E 6F 74 20 61  uctured physically, you cannot a
0000C580  6C 6C 6F 63 61 74 65 20  63 68 75 6E 6B 73 20 6C  61 72 67 65 72 20 74 68  61 6E 20 32 35 36 6B 20  llocate chunks larger than 256k 
0000C5A0  61 74 20 6F 6E 65 20 74  69 6D 65 2E 0D 0A 0D 0A  54 68 65 20 43 20 61 6E  64 20 50 61 73 63 61 6C  at one time.The C and Pascal
0000C5C0  20 76 65 72 73 69 6F 6E  73 20 6F 66 20 74 68 65  20 53 44 4B 20 75 73 65  20 64 69 66 66 65 72 65   versions of the SDK use differe
0000C5E0  6E 74 20 6D 65 74 68 6F  64 73 20 66 6F 72 20 6B  65 65 70 69 6E 67 20 74  72 61 63 6B 20 6F 66 20  nt methods for keeping track of 
0000C600  62 6C 6F 63 6B 73 20 6F  66 20 6D 65 6D 6F 72 79  20 74 68 61 74 20 68 61  76 65 20 62 65 65 6E 20  blocks of memory that have been 
0000C620  61 6C 6C 6F 63 61 74 65  64 20 61 6E 64 20 62 6C  6F 63 6B 73 20 74 68 61  74 20 72 65 6D 61 69 6E  allocated and blocks that remain
0000C640  20 66 72 65 65 2E 20 20  54 68 65 20 43 20 76 65  72 73 69 6F 6E 20 75 73  65 73 20 61 20 73 6D 61   free.  The C version uses a sma
0000C660  6C 6C 20 70 6F 72 74 69  6F 6E 20 6F 66 20 47 55  53 20 52 41 4D 20 74 6F  20 6B 65 65 70 20 74 72  ll portion of GUS RAM to keep tr
0000C680  61 63 6B 20 6F 66 20 74  68 65 20 62 6C 6F 63 6B  73 2C 20 77 68 65 72 65  61 73 20 74 68 65 20 50  ack of the blocks, whereas the P
0000C6A0  61 73 63 61 6C 20 76 65  72 73 69 6F 6E 20 75 73  65 73 20 61 20 73 6D 61  6C 6C 20 61 6D 6F 75 6E  ascal version uses a small amoun
0000C6C0  74 20 6F 66 20 6E 6F 72  6D 61 6C 20 68 65 61 70  20 73 70 61 63 65 2E 20  20 49 6E 20 61 6E 79 20  t of normal heap space.  In any 
0000C6E0  65 76 65 6E 74 2C 20 79  6F 75 20 64 6F 20 6E 6F  74 20 68 61 76 65 20 74  6F 20 77 6F 72 72 79 20  event, you do not have to worry 
0000C700  61 62 6F 75 74 20 74 68  65 20 69 6E 74 65 72 6E  61 6C 20 6F 70 65 72 61  74 69 6F 6E 20 6F 66 20  about the internal operation of 
0000C720  74 68 65 73 65 20 72 6F  75 74 69 6E 65 73 2E 20  20 54 6F 20 73 65 65 20  68 6F 77 20 74 68 65 20  these routines.  To see how the 
0000C740  50 61 73 63 61 6C 20 76  65 72 73 69 6F 6E 20 75  73 65 73 20 61 20 73 6D  61 6C 6C 20 61 6D 6F 75  Pascal version uses a small amou
0000C760  6E 74 20 6F 66 20 68 65  61 70 20 73 70 61 63 65  20 74 6F 20 6D 61 6E 61  67 65 20 47 55 53 20 6D  nt of heap space to manage GUS m
0000C780  65 6D 6F 72 79 2C 20 73  65 65 20 73 65 63 74 69  6F 6E 20 33 2E 31 33 2E  33 2E 0D 0A 0D 0A 54 68  emory, see section 3.13.3.Th
0000C7A0  65 20 6D 65 6D 6F 72 79  20 61 6C 6C 6F 63 61 74  69 6F 6E 20 72 6F 75 74  69 6E 65 73 20 77 69 6C  e memory allocation routines wil
0000C7C0  6C 20 4F 4E 4C 59 20 72  65 74 75 72 6E 20 33 32  20 62 79 74 65 20 61 6C  69 67 6E 65 64 20 61 64  l ONLY return 32 byte aligned ad
0000C7E0  64 72 65 73 73 65 73 2C  20 73 6F 20 69 66 20 79  6F 75 72 20 61 70 70 6C  69 63 61 74 69 6F 6E 20  dresses, so if your application 
0000C800  75 73 65 73 20 74 68 65  6D 2C 20 74 68 69 73 20  77 69 6C 6C 20 6E 6F 74  20 62 65 20 61 20 70 72  uses them, this will not be a pr
0000C820  6F 62 6C 65 6D 2E 20 49  66 20 79 6F 75 20 63 68  6F 73 65 20 6E 6F 74 20  74 6F 20 75 73 65 20 74  oblem. If you chose not to use t
0000C840  68 65 20 61 6C 6C 6F 63  61 74 69 6F 6E 20 72 6F  75 74 69 6E 65 73 20 70  72 6F 76 69 64 65 64 2C  he allocation routines provided,
0000C860  20 62 65 20 73 75 72 65  20 61 6E 64 20 66 6F 6C  6C 6F 77 20 74 68 65 73  65 20 72 75 6C 65 73 2E   be sure and follow these rules.
0000C880  20 20 54 6F 20 6F 62 74  61 69 6E 20 61 20 6C 65  67 61 6C 20 62 6C 6F 63  6B 20 6F 66 20 55 6C 74    To obtain a legal block of Ult
0000C8A0  72 61 53 6F 75 6E 64 20  52 41 4D 20 74 68 61 74  20 69 73 20 67 75 61 72  61 6E 74 65 65 64 20 74  raSound RAM that is guaranteed t
0000C8C0  6F 20 62 65 20 61 6C 69  67 6E 65 64 20 6F 6E 20  61 20 33 32 2D 62 79 74  65 20 62 6F 75 6E 64 61  o be aligned on a 32-byte bounda
0000C8E0  72 79 2C 20 75 73 65 20  74 68 65 20 55 6C 74 72  61 4D 65 6D 41 6C 6C 6F  63 20 66 75 6E 63 74 69  ry, use the UltraMemAlloc functi
0000C900  6F 6E 2E 20 20 54 6F 20  66 72 65 65 20 75 70 20  74 68 65 20 6D 65 6D 6F  72 79 20 61 66 74 65 72  on.  To free up the memory after
0000C920  20 79 6F 75 20 68 61 76  65 20 75 73 65 64 20 69  74 2C 20 75 73 65 20 74  68 65 20 55 6C 74 72 61   you have used it, use the Ultra
0000C940  4D 65 6D 46 72 65 65 20  66 75 6E 63 74 69 6F 6E  2E 20 20 4F 6E 63 65 20  61 67 61 69 6E 2C 20 73  MemFree function.  Once again, s
0000C960  65 65 20 63 68 61 70 74  65 72 20 34 2C 20 74 68  65 20 72 65 66 65 72 65  6E 63 65 20 67 75 69 64  ee chapter 4, the reference guid
0000C980  65 2C 20 66 6F 72 20 6D  6F 72 65 20 69 6E 66 6F  72 6D 61 74 69 6F 6E 20  6F 6E 20 74 68 65 20 73  e, for more information on the s
0000C9A0  79 6E 74 61 78 20 61 6E  64 20 75 73 61 67 65 20  6F 66 20 74 68 65 73 65  20 72 6F 75 74 69 6E 65  yntax and usage of these routine
0000C9C0  73 2E 0D 0A 0D 0A 59 6F  75 20 44 4F 20 4E 4F 54  20 6E 65 63 65 73 73 61  72 69 6C 79 20 6E 65 65  s.You DO NOT necessarily nee
0000C9E0  64 20 74 6F 20 75 73 65  20 74 68 65 20 6D 65 6D  6F 72 79 20 61 6C 6C 6F  63 61 74 69 6F 6E 20 61  d to use the memory allocation a
0000CA00  6E 64 20 64 65 61 6C 6C  6F 63 61 74 69 6F 6E 20  72 6F 75 74 69 6E 65 73  20 74 6F 20 70 72 6F 67  nd deallocation routines to prog
0000CA20  72 61 6D 20 74 68 65 20  63 61 72 64 2E 20 20 59  6F 75 20 44 4F 20 68 61  76 65 20 74 6F 20 62 65  ram the card.  You DO have to be
0000CA40  20 63 61 72 65 66 75 6C  20 69 66 20 79 6F 75 20  63 68 6F 6F 73 65 20 74  6F 20 64 6F 20 77 69 74   careful if you choose to do wit
0000CA60  68 6F 75 74 20 74 68 65  6D 2E 20 20 54 68 65 20  44 4D 41 20 63 61 6E 20  6F 6E 6C 79 20 62 65 67  hout them.  The DMA can only beg
0000CA80  69 6E 20 6F 6E 20 61 20  31 36 20 6F 72 20 33 32  20 62 79 74 65 20 62 6F  75 6E 64 61 72 79 2E 20  in on a 16 or 32 byte boundary. 
0000CAA0  41 6E 20 38 20 62 69 74  20 44 4D 41 20 63 68 61  6E 6E 65 6C 20 28 30 2D  33 29 20 6D 75 73 74 20  An 8 bit DMA channel (0-3) must 
0000CAC0  73 74 61 72 74 20 6F 6E  20 61 20 31 36 20 62 79  74 65 20 62 6F 75 6E 64  61 72 79 20 77 68 69 6C  start on a 16 byte boundary whil
0000CAE0  65 20 61 20 31 36 20 62  69 74 20 44 4D 41 20 63  68 61 6E 6E 65 6C 20 28  34 2D 37 29 20 6D 75 73  e a 16 bit DMA channel (4-7) mus
0000CB00  74 20 73 74 61 72 74 20  6F 6E 20 61 20 33 32 20  62 79 74 65 20 62 6F 75  6E 64 61 72 79 2E 20 49  t start on a 32 byte boundary. I
0000CB20  66 20 61 6E 20 69 6D 70  72 6F 70 65 72 20 61 64  64 72 65 73 73 20 69 73  20 73 75 70 70 6C 69 65  f an improper address is supplie
0000CB40  64 2C 20 74 68 65 20 61  64 64 72 65 73 73 20 77  69 6C 6C 20 62 65 20 74  72 75 6E 63 61 74 65 64  d, the address will be truncated
0000CB60  20 64 6F 77 6E 20 77 68  65 6E 20 74 68 65 20 44  4D 41 20 6F 63 63 75 72  73 2E 20 20 41 20 44 4D   down when the DMA occurs.  A DM
0000CB80  41 20 74 6F 20 6F 72 20  66 72 6F 6D 20 74 68 65  20 63 61 72 64 20 63 61  6E 6E 6F 74 20 63 72 6F  A to or from the card cannot cro
0000CBA0  73 73 20 61 20 32 35 36  4B 20 62 6F 75 6E 64 61  72 79 2E 20 20 0D 0A 0D  0A 54 6F 20 73 65 6E 64  ss a 256K boundary.  To send
0000CBC0  20 64 61 74 61 20 66 72  6F 6D 20 50 43 20 6D 65  6D 6F 72 79 20 74 6F 20  74 68 65 20 63 61 72 64   data from PC memory to the card
0000CBE0  2C 20 75 73 65 20 74 68  65 20 55 6C 74 72 61 44  6F 77 6E 6C 6F 61 64 20  66 75 6E 63 74 69 6F 6E  , use the UltraDownload function
0000CC00  2E 20 20 54 6F 20 72 65  61 64 20 64 61 74 61 20  66 72 6F 6D 20 74 68 65  20 63 61 72 64 20 69 6E  .  To read data from the card in
0000CC20  74 6F 20 50 43 20 6D 65  6D 6F 72 79 2C 20 75 73  65 20 74 68 65 20 55 6C  74 72 61 55 70 6C 6F 61  to PC memory, use the UltraUploa
0000CC40  64 20 66 75 6E 63 74 69  6F 6E 2E 20 20 49 66 20  79 6F 75 20 64 6F 77 6E  6C 6F 61 64 20 64 61 74  d function.  If you download dat
0000CC60  61 20 74 6F 20 74 68 65  20 63 61 72 64 2C 20 65  6E 73 75 72 65 20 74 68  61 74 20 69 66 20 74 68  a to the card, ensure that if th
0000CC80  65 20 64 61 74 61 20 69  73 20 6E 6F 74 20 69 6E  20 74 77 6F 27 73 20 63  6F 6D 70 6C 69 6D 65 6E  e data is not in two's complimen
0000CCA0  74 20 66 6F 72 6D 20 79  6F 75 20 63 6F 6E 76 65  72 74 20 69 74 20 74 6F  20 74 77 6F 27 73 20 63  t form you convert it to two's c
0000CCC0  6F 6D 70 6C 69 6D 65 6E  74 20 6F 6E 20 74 68 65  20 64 6F 77 6E 6C 6F 61  64 2E 20 20 54 6F 20 64  ompliment on the download.  To d
0000CCE0  6F 20 74 68 69 73 2C 20  75 73 65 20 74 68 65 20  44 4D 41 20 63 6F 6E 74  72 6F 6C 20 62 69 74 73  o this, use the DMA control bits
0000CD00  20 28 73 65 65 20 41 70  70 65 6E 64 69 78 20 44  29 2E 20 20 41 6E 79 20  64 61 74 61 20 79 6F 75   (see Appendix D).  Any data you
0000CD20  20 55 70 6C 6F 61 64 20  66 72 6F 6D 20 74 68 65  20 63 61 72 64 20 74 68  61 74 20 69 73 20 70 6C   Upload from the card that is pl
0000CD40  61 79 61 62 6C 65 20 77  69 6C 6C 20 62 65 20 69  6E 20 74 77 6F 27 73 20  63 6F 6D 70 6C 69 6D 65  ayable will be in two's complime
0000CD60  6E 74 20 66 6F 72 6D 61  74 2E 0D 0A 0D 0A 0D 0A  0D 0A 33 2E 34 20 57 68  61 74 20 61 72 65 20 53  nt format.3.4 What are S
0000CD80  61 6D 70 6C 65 73 3F 0D  0A 0D 0A 41 73 20 6D 65  6E 74 69 6F 6E 65 64 20  61 62 6F 76 65 2C 20 61  amples?As mentioned above, a
0000CDA0  20 27 73 61 6D 70 6C 65  27 20 69 73 20 72 61 77  20 64 61 74 61 20 74 68  61 74 20 68 61 73 20 62   'sample' is raw data that has b
0000CDC0  65 65 6E 20 72 65 63 6F  72 64 65 64 20 75 73 69  6E 67 20 74 68 65 20 47  55 53 20 6F 72 20 61 6E  een recorded using the GUS or an
0000CDE0  6F 74 68 65 72 20 64 69  67 69 74 61 6C 20 73 6F  75 6E 64 20 72 65 63 6F  72 64 69 6E 67 20 64 65  other digital sound recording de
0000CE00  76 69 63 65 2E 20 20 4D  6F 73 74 20 6F 66 20 74  68 65 73 65 20 66 69 6C  65 73 20 77 69 6C 6C 20  vice.  Most of these files will 
0000CE20  68 61 76 65 20 65 78 74  65 6E 73 69 6F 6E 73 20  6F 66 20 2E 53 4E 44 20  6F 72 20 2E 57 41 56 2E  have extensions of .SND or .WAV.
0000CE40  20 20 54 68 65 72 65 20  61 72 65 20 6F 74 68 65  72 20 65 78 74 65 6E 73  69 6F 6E 73 20 61 76 61    There are other extensions ava
0000CE60  69 6C 61 62 6C 65 2C 20  62 75 74 20 74 68 65 73  65 20 61 72 65 20 74 68  65 20 6D 6F 73 74 20 63  ilable, but these are the most c
0000CE80  6F 6D 6D 6F 6E 2E 0D 0A  0D 0A 41 20 74 65 63 68  6E 69 71 75 65 20 6B 6E  6F 77 6E 20 61 73 20 27  ommon.A technique known as '
0000CEA0  66 72 65 71 75 65 6E 63  79 20 73 68 69 66 74 69  6E 67 27 20 69 73 20 73  6F 6D 65 74 69 6D 65 73  frequency shifting' is sometimes
0000CEC0  20 75 73 65 64 20 74 6F  20 70 72 6F 64 75 63 65  20 61 6C 74 65 72 6E 61  74 65 20 27 6E 6F 74 65   used to produce alternate 'note
0000CEE0  73 27 20 6F 66 20 61 20  73 70 65 63 69 66 69 65  64 20 69 6E 73 74 72 75  6D 65 6E 74 2E 20 20 41  s' of a specified instrument.  A
0000CF00  6D 69 67 61 20 27 2E 4D  4F 44 27 20 66 69 6C 65  20 70 6C 61 79 65 72 73  20 75 73 65 20 74 68 69  miga '.MOD' file players use thi
0000CF20  73 20 74 65 63 68 6E 69  71 75 65 20 74 6F 20 6D  61 6B 65 20 61 20 73 69  6E 67 6C 65 20 69 6E 73  s technique to make a single ins
0000CF40  74 72 75 6D 65 6E 74 20  73 61 6D 70 6C 65 20 73  6F 75 6E 64 20 64 69 66  66 65 72 65 6E 74 6C 79  trument sample sound differently
0000CF60  20 66 6F 72 20 65 61 63  68 20 6E 6F 74 65 20 70  6C 61 79 65 64 20 6F 76  65 72 20 33 20 6F 63 74   for each note played over 3 oct
0000CF80  61 76 65 73 2E 20 20 45  73 73 65 6E 74 69 61 6C  6C 79 2C 20 74 68 65 20  74 65 63 68 6E 69 71 75  aves.  Essentially, the techniqu
0000CFA0  65 20 75 74 69 6C 69 7A  65 73 20 74 68 65 20 31  32 2D 6E 6F 74 65 20 73  63 61 6C 65 20 77 69 74  e utilizes the 12-note scale wit
0000CFC0  68 20 74 68 65 20 70 72  69 6E 63 69 70 6C 65 20  74 68 61 74 20 65 61 63  68 20 68 61 6C 66 2D 73  h the principle that each half-s
0000CFE0  74 65 70 20 69 73 20 31  2F 31 32 20 72 6F 6F 74  20 6F 66 20 32 20 74 69  6D 65 73 20 74 68 65 20  tep is 1/12 root of 2 times the 
0000D000  76 61 6C 75 65 20 6F 66  20 69 74 73 20 70 72 65  64 65 63 65 73 73 6F 72  20 69 6E 20 66 72 65 71  value of its predecessor in freq
0000D020  75 65 6E 63 79 20 28 77  6F 72 6B 69 6E 67 20 66  72 6F 6D 20 6C 65 66 74  20 74 6F 20 72 69 67 68  uency (working from left to righ
0000D040  74 29 2E 20 46 6F 72 20  69 6E 73 74 61 6E 63 65  2C 20 69 66 20 77 65 20  74 61 6B 65 20 43 20 61  t). For instance, if we take C a
0000D060  73 20 28 31 2A 66 72 65  71 75 65 6E 63 79 29 2C  20 43 23 20 77 6F 75 6C  64 20 62 65 20 28 31 2E  s (1*frequency), C# would be (1.
0000D080  30 35 39 34 36 2A 66 72  65 71 75 65 6E 63 79 29  2E 20 20 53 69 6E 63 65  20 74 68 65 72 65 20 61  05946*frequency).  Since there a
0000D0A0  72 65 20 31 32 20 6E 6F  74 65 73 20 69 6E 20 61  6E 20 6F 63 74 61 76 65  2C 20 77 68 65 6E 20 79  re 12 notes in an octave, when y
0000D0C0  6F 75 20 72 65 61 63 68  20 42 20 28 74 68 65 20  65 6E 64 20 6F 66 20 74  68 65 20 6F 63 74 61 76  ou reach B (the end of the octav
0000D0E0  65 29 2C 20 74 68 65 20  6E 65 78 74 20 6E 6F 74  65 20 69 73 20 28 32 2A  66 72 65 71 75 65 6E 63  e), the next note is (2*frequenc
0000D100  79 29 20 2D 20 73 6F 20  64 6F 75 62 6C 69 6E 67  20 74 68 65 20 6F 72 69  67 69 6E 61 6C 20 66 72  y) - so doubling the original fr
0000D120  65 71 75 65 6E 63 79 20  6D 65 61 6E 73 20 79 6F  75 20 72 61 69 73 65 20  74 68 65 20 6E 6F 74 65  equency means you raise the note
0000D140  20 6F 6E 65 20 6F 63 74  61 76 65 2E 0D 0A 0D 0A  0C 54 68 65 72 65 20 69  73 20 61 20 64 72 61 77   one octave.There is a draw
0000D160  62 61 63 6B 20 74 6F 20  74 68 65 20 74 65 63 68  6E 69 71 75 65 20 6D 65  6E 74 69 6F 6E 65 64 20  back to the technique mentioned 
0000D180  61 62 6F 76 65 2E 20 20  49 66 20 61 20 73 61 6D  70 6C 65 20 77 61 73 20  72 65 63 6F 72 64 65 64  above.  If a sample was recorded
0000D1A0  20 61 74 20 31 31 6B 48  7A 20 66 6F 72 20 74 77  6F 20 73 65 63 6F 6E 64  73 2C 20 61 6E 64 20 74   at 11kHz for two seconds, and t
0000D1C0  68 65 6E 20 70 6C 61 79  65 64 20 62 61 63 6B 20  61 74 20 32 32 6B 48 7A  20 74 6F 20 72 61 69 73  hen played back at 22kHz to rais
0000D1E0  65 20 74 68 65 20 6E 6F  74 65 20 6F 6E 65 20 6F  63 74 61 76 65 2C 20 69  74 20 77 6F 75 6C 64 20  e the note one octave, it would 
0000D200  6F 6E 6C 79 20 70 6C 61  79 20 66 6F 72 20 6F 6E  65 20 73 65 63 6F 6E 64  20 69 6E 73 74 65 61 64  only play for one second instead
0000D220  20 6F 66 20 74 77 6F 2E  20 20 54 68 69 73 20 69  73 20 62 65 63 61 75 73  65 20 79 6F 75 20 68 61   of two.  This is because you ha
0000D240  76 65 20 28 31 31 30 32  35 20 2A 20 32 20 73 65  63 6F 6E 64 73 29 20 3D  20 32 32 30 35 30 20 62  ve (11025 * 2 seconds) = 22050 b
0000D260  79 74 65 73 20 6F 66 20  64 61 74 61 2E 20 20 49  66 20 79 6F 75 20 70 6C  61 79 20 74 68 69 73 20  ytes of data.  If you play this 
0000D280  61 74 20 32 32 30 35 30  20 48 7A 2C 20 6F 72 20  32 32 30 35 30 20 62 79  74 65 73 20 70 65 72 20  at 22050 Hz, or 22050 bytes per 
0000D2A0  73 65 63 6F 6E 64 2C 20  79 6F 75 20 77 69 6C 6C  20 68 61 76 65 20 6F 6E  65 20 31 20 73 65 63 6F  second, you will have one 1 seco
0000D2C0  6E 64 20 6F 66 20 73 6F  75 6E 64 2E 20 20 54 68  75 73 2C 20 69 66 20 79  6F 75 20 72 61 69 73 65  nd of sound.  Thus, if you raise
0000D2E0  20 6F 72 20 6C 6F 77 65  72 20 74 68 65 20 66 72  65 71 75 65 6E 63 79 20  69 6E 20 74 68 69 73 20   or lower the frequency in this 
0000D300  6D 61 6E 6E 65 72 2C 20  74 68 65 20 73 6F 75 6E  64 20 77 69 6C 6C 20 72  65 73 70 65 63 74 69 76  manner, the sound will respectiv
0000D320  65 6C 79 20 74 61 6B 65  20 61 20 73 68 6F 72 74  65 72 20 6F 72 20 6C 6F  6E 67 65 72 20 61 6D 6F  ely take a shorter or longer amo
0000D340  75 6E 74 20 6F 66 20 74  69 6D 65 20 74 6F 20 70  6C 61 79 2E 0D 0A 0D 0A  41 20 63 6F 6D 6D 6F 6E  unt of time to play.A common
0000D360  20 70 72 6F 62 6C 65 6D  20 77 69 74 68 20 73 61  6D 70 6C 65 73 20 69 73  20 74 68 61 74 20 74 68   problem with samples is that th
0000D380  65 20 73 74 61 72 74 20  61 6E 64 2F 6F 72 20 65  6E 64 20 6F 66 20 74 68  65 6D 20 69 73 20 61 74  e start and/or end of them is at
0000D3A0  20 61 20 72 65 61 73 6F  6E 61 62 6C 79 20 68 69  67 68 20 61 6D 70 6C 69  74 75 64 65 2E 20 20 57   a reasonably high amplitude.  W
0000D3C0  68 65 6E 20 74 68 65 20  73 61 6D 70 6C 65 20 73  74 61 72 74 73 20 61 6E  64 2F 6F 72 20 73 74 6F  hen the sample starts and/or sto
0000D3E0  70 73 2C 20 74 68 65 20  76 61 6C 75 65 73 20 66  6C 6F 77 69 6E 67 20 74  68 72 6F 75 67 68 20 74  ps, the values flowing through t
0000D400  68 65 20 44 41 43 73 20  6F 6E 20 74 68 65 20 63  61 72 64 20 63 68 61 6E  67 65 20 73 75 64 64 65  he DACs on the card change sudde
0000D420  6E 6C 79 2E 20 20 54 68  69 73 20 75 73 75 61 6C  6C 79 20 72 65 73 75 6C  74 73 20 69 6E 20 61 6E  nly.  This usually results in an
0000D440  20 61 75 64 69 62 6C 65  20 27 63 6C 69 63 6B 27  20 6F 72 20 27 70 6F 70  27 20 74 68 72 6F 75 67   audible 'click' or 'pop' throug
0000D460  68 20 74 68 65 20 73 70  65 61 6B 65 72 73 2E 20  20 53 65 63 74 69 6F 6E  20 33 2E 38 20 6C 6F 6F  h the speakers.  Section 3.8 loo
0000D480  6B 73 20 61 74 20 74 68  65 20 72 65 6D 6F 76 61  6C 20 6F 66 20 74 68 69  73 20 61 6E 64 20 6F 74  ks at the removal of this and ot
0000D4A0  68 65 72 20 74 79 70 65  73 20 6F 66 20 63 6C 69  63 6B 73 20 61 6E 64 20  70 6F 70 73 20 74 68 61  her types of clicks and pops tha
0000D4C0  6E 20 63 61 6E 20 6F 63  63 75 72 2E 0D 0A 0D 0A  0D 0A 0D 0A 33 2E 35 20  55 73 69 6E 67 20 56 6F  n can occur.3.5 Using Vo
0000D4E0  69 63 65 73 0D 0A 0D 0A  44 65 70 65 6E 64 69 6E  67 20 6F 6E 20 74 68 65  20 6E 75 6D 62 65 72 20  icesDepending on the number 
0000D500  79 6F 75 20 63 68 6F 6F  73 65 20 77 68 65 6E 20  6F 70 65 6E 69 6E 67 20  28 6F 72 20 69 6E 69 74  you choose when opening (or init
0000D520  69 61 6C 69 7A 69 6E 67  29 20 74 68 65 20 63 61  72 64 2C 20 79 6F 75 20  63 61 6E 20 75 73 65 20  ializing) the card, you can use 
0000D540  61 6E 79 77 68 65 72 65  20 66 72 6F 6D 20 31 34  20 74 6F 20 33 32 20 76  6F 69 63 65 73 20 61 74  anywhere from 14 to 32 voices at
0000D560  20 6F 6E 63 65 2E 20 20  59 6F 75 20 63 61 6E 20  6C 6F 6F 6B 20 61 74 20  74 68 65 20 76 6F 69 63   once.  You can look at the voic
0000D580  65 73 20 61 73 20 74 68  6F 73 65 20 6F 66 20 74  68 65 20 70 65 6F 70 6C  65 20 69 6E 20 61 20 63  es as those of the people in a c
0000D5A0  68 6F 69 72 2E 20 20 59  6F 75 20 63 61 6E 20 74  65 6C 6C 20 74 68 65 20  76 6F 69 63 65 73 20 74  hoir.  You can tell the voices t
0000D5C0  6F 20 73 74 61 72 74 20  6F 72 20 73 74 6F 70 20  73 69 6E 67 69 6E 67 20  28 55 6C 74 72 61 53 74  o start or stop singing (UltraSt
0000D5E0  61 72 74 56 6F 69 63 65  2C 20 55 6C 74 72 61 53  74 6F 70 56 6F 69 63 65  29 2C 20 73 69 6E 67 20  artVoice, UltraStopVoice), sing 
0000D600  61 74 20 61 20 73 70 65  63 69 66 69 65 64 20 70  69 74 63 68 20 6F 72 20  66 72 65 71 75 65 6E 63  at a specified pitch or frequenc
0000D620  79 20 28 55 6C 74 72 61  53 65 74 46 72 65 71 75  65 6E 63 79 29 2C 20 6C  6F 75 64 6C 79 20 6F 72  y (UltraSetFrequency), loudly or
0000D640  20 73 6F 66 74 6C 79 20  28 55 6C 74 72 61 53 65  74 56 6F 6C 75 6D 65 2C  20 55 6C 74 72 61 53 65   softly (UltraSetVolume, UltraSe
0000D660  74 4C 69 6E 65 61 72 56  6F 6C 75 6D 65 29 2C 20  61 6E 64 20 61 74 20 61  20 73 70 65 63 69 66 69  tLinearVolume), and at a specifi
0000D680  65 64 20 62 61 6C 61 6E  63 65 20 28 55 6C 74 72  61 53 65 74 42 61 6C 61  6E 63 65 29 2E 0D 0A 0D  ed balance (UltraSetBalance).
0000D6A0  0A 54 68 65 20 65 78 63  69 74 69 6E 67 20 74 68  69 6E 67 20 61 62 6F 75  74 20 74 68 65 20 76 6F  The exciting thing about the vo
0000D6C0  69 63 65 73 20 69 73 20  74 68 61 74 20 61 6E 79  20 6E 75 6D 62 65 72 20  6F 66 20 74 68 65 6D 20  ices is that any number of them 
0000D6E0  63 61 6E 20 62 65 20 70  6C 61 79 65 64 20 61 74  20 6F 6E 63 65 2C 20 61  6E 64 20 74 68 65 72 65  can be played at once, and there
0000D700  20 69 73 20 6E 6F 20 65  78 74 72 61 20 64 72 61  69 6E 20 6F 6E 20 74 68  65 20 43 50 55 20 69 66   is no extra drain on the CPU if
0000D720  20 79 6F 75 20 61 72 65  20 70 6C 61 79 69 6E 67  20 61 20 6C 61 72 67 65  72 20 6E 75 6D 62 65 72   you are playing a larger number
0000D740  20 6F 66 20 76 6F 69 63  65 73 20 61 73 20 6F 70  70 6F 73 65 64 20 74 6F  20 61 20 73 6D 61 6C 6C   of voices as opposed to a small
0000D760  65 72 20 6F 6E 65 2E 20  20 41 6C 73 6F 2C 20 74  68 65 73 65 20 76 6F 69  63 65 73 20 63 61 6E 20  er one.  Also, these voices can 
0000D780  70 6C 61 79 20 61 6E 79  20 74 79 70 65 20 6F 66  20 73 61 6D 70 6C 65 64  20 73 6F 75 6E 64 2C 20  play any type of sampled sound, 
0000D7A0  38 2D 20 6F 72 20 31 36  2D 62 69 74 2C 20 61 74  20 66 72 65 71 75 65 6E  63 69 65 73 20 75 70 20  8- or 16-bit, at frequencies up 
0000D7C0  74 6F 20 34 34 2E 31 20  6B 48 7A 2E 20 20 41 6E  79 20 6E 75 6D 62 65 72  20 6F 66 20 76 6F 69 63  to 44.1 kHz.  Any number of voic
0000D7E0  65 73 20 63 61 6E 20 65  76 65 6E 20 70 6C 61 79  20 74 68 65 20 73 61 6D  65 20 73 61 6D 70 6C 65  es can even play the same sample
0000D800  20 61 74 20 74 68 65 20  73 61 6D 65 20 74 69 6D  65 2E 20 20 0D 0A 0D 0A  54 6F 20 73 74 61 72 74   at the same time.  To start
0000D820  20 75 70 20 61 20 76 6F  69 63 65 2C 20 79 6F 75  20 75 73 65 20 74 68 65  20 55 6C 74 72 61 53 74   up a voice, you use the UltraSt
0000D840  61 72 74 56 6F 69 63 65  20 6F 72 20 55 6C 74 72  61 50 72 69 6D 65 56 6F  69 63 65 2F 20 55 6C 74  artVoice or UltraPrimeVoice/ Ult
0000D860  72 61 47 6F 56 6F 69 63  65 20 63 6F 6D 62 69 6E  61 74 69 6F 6E 2E 20 20  45 69 74 68 65 72 20 6F  raGoVoice combination.  Either o
0000D880  6E 65 20 6F 66 20 74 68  65 73 65 20 74 77 6F 20  72 6F 75 74 69 6E 65 73  20 77 69 6C 6C 20 61 73  ne of these two routines will as
0000D8A0  6B 20 66 6F 72 20 61 20  76 6F 69 63 65 20 6E 75  6D 62 65 72 2C 20 61 73  20 77 65 6C 6C 20 61 73  k for a voice number, as well as
0000D8C0  20 61 20 62 65 67 69 6E  2C 20 73 74 61 72 74 2C  20 61 6E 64 20 65 6E 64  20 6C 6F 63 61 74 69 6F   a begin, start, and end locatio
0000D8E0  6E 2E 20 20 54 68 65 20  72 65 61 73 6F 6E 20 62  65 67 69 6E 20 61 6E 64  20 73 74 61 72 74 20 6C  n.  The reason begin and start l
0000D900  6F 63 61 74 69 6F 6E 73  20 61 72 65 20 62 6F 74  68 20 61 73 6B 65 64 20  66 6F 72 20 69 73 20 69  ocations are both asked for is i
0000D920  6E 20 63 61 73 65 20 79  6F 75 20 77 69 73 68 20  74 6F 20 70 6C 61 79 20  61 20 73 61 6D 70 6C 65  n case you wish to play a sample
0000D940  20 62 61 63 6B 77 61 72  64 73 20 6F 72 20 6C 6F  6F 70 20 61 74 20 61 20  73 70 65 63 69 66 69 63   backwards or loop at a specific
0000D960  20 70 6F 73 69 74 69 6F  6E 20 77 68 69 63 68 20  69 73 20 6E 6F 74 20 74  68 65 20 73 74 61 72 74   position which is not the start
0000D980  2E 20 20 54 68 65 20 66  6F 6C 6C 6F 77 69 6E 67  20 64 69 61 67 72 61 6D  20 6D 61 79 20 6D 61 6B  .  The following diagram may mak
0000D9A0  65 20 74 68 69 73 20 63  6C 65 61 72 65 72 3A 0D  0A 0D 0A 46 6F 72 77 61  72 64 20 70 6C 61 79 69  e this clearer:Forward playi
0000D9C0  6E 67 3A 0D 0A 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 0D 0A 2D  2D 2D 2D 2D 2D 2D 2D 3E  ng:================-------->
0000D9E0  2D 2D 2D 2D 2D 2D 2D 3E  2D 2D 2D 2D 2D 2D 2D 2D  3E 2D 2D 2D 2D 2D 2D 7C  0D 0A 20 20 20 20 20 20  ------->-------->------|      
0000DA00  20 20 20 20 20 20 20 5E  2D 2D 2D 2D 2D 2D 2D 2D  2D 3C 2D 2D 2D 2D 2D 2D  3C 2D 7C 0D 0A 42 65 67         ^---------<------<-|Beg
0000DA20  69 6E 20 2E 2E 2E 2E 2E  2E 20 53 74 61 72 74 20  4C 6F 6F 70 2E 2E 2E 2E  2E 2E 2E 2E 2E 20 45 6E  in ...... Start Loop......... En
0000DA40  64 20 4C 6F 6F 70 0D 0A  6C 6F 63 61 74 69 6F 6E  20 2E 2E 2E 20 6C 6F 63  61 74 69 6F 6E 20 20 2E  d Looplocation ... location  .
0000DA60  2E 2E 2E 2E 2E 2E 2E 2E  20 6C 6F 63 61 74 69 6F  6E 0D 0A 0D 0A 42 61 63  6B 77 61 72 64 20 70 6C  ........ locationBackward pl
0000DA80  61 79 69 6E 67 3A 0D 0A  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 0D 0A 7C 2D 2D 2D 2D  aying:=================|----
0000DAA0  2D 2D 3C 2D 2D 2D 2D 2D  3C 2D 2D 2D 2D 2D 2D 3C  2D 2D 2D 2D 2D 2D 3C 2D  2D 2D 2D 2D 2D 2D 2D 2D  --<-----<------<------<---------
0000DAC0  2D 0D 0A 20 20 20 20 20  20 20 20 20 20 20 20 7C  2D 2D 2D 2D 2D 2D 2D 2D  2D 3E 2D 2D 2D 2D 2D 3E  -            |--------->----->
0000DAE0  2D 2D 2D 2D 3E 2D 2D 2D  5E 0D 0A 45 6E 64 20 4C  6F 6F 70 2E 2E 2E 2E 20  53 74 61 72 74 20 4C 6F  ---->---^End Loop.... Start Lo
0000DB00  6F 70 2E 2E 2E 2E 2E 2E  2E 2E 2E 2E 2E 2E 2E 2E  2E 20 42 65 67 69 6E 0D  0A 20 20 20 6C 6F 63 61  op............... Begin   loca
0000DB20  74 69 6F 6E 20 2E 2E 2E  2E 20 6C 6F 63 61 74 69  6F 6E 20 2E 2E 2E 2E 2E  2E 2E 2E 2E 2E 2E 2E 2E  tion .... location .............
0000DB40  2E 2E 2E 6C 6F 63 61 74  69 6F 6E 0D 0A 0D 0A 41  20 76 6F 69 63 65 20 73  74 61 72 74 73 20 61 74  ...locationA voice starts at
0000DB60  20 74 68 65 20 27 62 65  67 69 6E 27 20 6C 6F 63  61 74 69 6F 6E 2C 20 61  6E 64 20 63 6F 6E 74 69   the 'begin' location, and conti
0000DB80  6E 75 65 73 20 70 6C 61  79 69 6E 67 20 75 6E 74  69 6C 20 69 74 20 68 69  74 73 20 74 68 65 20 27  nues playing until it hits the '
0000DBA0  65 6E 64 27 20 6C 6F 63  61 74 69 6F 6E 2E 20 20  49 66 20 74 68 65 20 27  62 65 67 69 6E 27 20 69  end' location.  If the 'begin' i
0000DBC0  73 20 61 20 67 72 65 61  74 65 72 20 6C 6F 63 61  74 69 6F 6E 20 74 68 61  6E 20 74 68 65 20 27 65  s a greater location than the 'e
0000DBE0  6E 64 27 2C 20 74 68 65  20 73 61 6D 70 6C 65 20  77 69 6C 6C 20 62 65 20  70 6C 61 79 65 64 20 62  nd', the sample will be played b
0000DC00  61 63 6B 77 61 72 64 73  2E 20 20 54 68 65 20 27  73 74 61 72 74 27 20 6C  6F 63 61 74 69 6F 6E 20  ackwards.  The 'start' location 
0000DC20  69 73 20 74 68 65 20 73  74 61 72 74 20 6F 66 20  74 68 65 20 6C 6F 6F 70  20 69 66 20 6C 6F 6F 70  is the start of the loop if loop
0000DC40  69 6E 67 20 69 73 20 65  6E 61 62 6C 65 64 20 66  6F 72 20 74 68 65 20 76  6F 69 63 65 20 62 65 67  ing is enabled for the voice beg
0000DC60  69 6E 20 70 6C 61 79 65  64 2E 20 20 44 65 70 65  6E 64 69 6E 67 20 6F 6E  20 77 68 65 74 68 65 72  in played.  Depending on whether
0000DC80  20 61 6E 64 20 68 6F 77  20 79 6F 75 20 77 69 73  68 20 74 6F 20 6C 6F 6F  70 20 74 68 65 20 76 6F   and how you wish to loop the vo
0000DCA0  69 63 65 2C 20 79 6F 75  20 63 61 6E 20 6D 61 6B  65 20 76 61 72 69 6F 75  73 20 65 66 66 65 63 74  ice, you can make various effect
0000DCC0  73 20 6F 63 63 75 72 2E  20 20 4C 6F 6F 70 69 6E  67 20 6F 66 20 74 68 65  20 76 6F 69 63 65 73 20  s occur.  Looping of the voices 
0000DCE0  69 73 20 64 69 73 63 75  73 73 65 64 20 69 6E 20  74 68 65 20 6E 65 78 74  20 73 65 63 74 69 6F 6E  is discussed in the next section
0000DD00  2E 0D 0A 0D 0A 57 68 65  6E 20 79 6F 75 20 68 61  76 65 20 66 69 6E 69 73  68 65 64 20 77 69 74 68  .When you have finished with
0000DD20  20 61 20 76 6F 69 63 65  2C 20 59 6F 75 20 73 68  6F 75 6C 64 20 73 74 6F  70 20 69 74 20 28 55 6C   a voice, You should stop it (Ul
0000DD40  74 72 61 53 74 6F 70 56  6F 69 63 65 29 2C 20 61  6E 64 20 64 65 61 6C 6C  6F 63 61 74 65 20 69 74  traStopVoice), and deallocate it
0000DD60  20 28 55 6C 74 72 61 46  72 65 65 56 6F 69 63 65  29 2E 20 20 50 6C 65 61  73 65 20 73 65 65 20 73   (UltraFreeVoice).  Please see s
0000DD80  65 63 74 69 6F 6E 20 33  2E 38 20 6F 6E 20 63 6C  69 63 6B 20 72 65 6D 6F  76 61 6C 20 66 6F 72 20  ection 3.8 on click removal for 
0000DDA0  69 6E 66 6F 72 6D 61 74  69 6F 6E 20 6F 6E 20 70  72 6F 62 6C 65 6D 73 20  77 69 74 68 20 73 74 6F  information on problems with sto
0000DDC0  70 70 69 6E 67 20 61 20  76 6F 69 63 65 20 61 62  72 75 70 74 6C 79 2E 0D  0A 0D 0A 0D 0A 33 2E 36  pping a voice abruptly.3.6
0000DDE0  20 56 6F 6C 75 6D 65 73  0D 0A 0D 0A 41 20 76 6F  6C 75 6D 65 20 69 73 20  61 76 61 69 6C 61 62 6C   VolumesA volume is availabl
0000DE00  65 20 66 6F 72 20 65 61  63 68 20 76 6F 69 63 65  2E 20 20 49 66 20 74 68  65 20 76 6F 6C 75 6D 65  e for each voice.  If the volume
0000DE20  20 66 6F 72 20 61 20 76  6F 69 63 65 20 69 73 20  6E 6F 74 20 73 65 74 20  74 6F 20 7A 65 72 6F 2C   for a voice is not set to zero,
0000DE40  20 74 68 65 20 64 61 74  61 20 61 74 20 74 68 65  20 70 6F 73 69 74 69 6F  6E 20 6F 66 20 74 68 65   the data at the position of the
0000DE60  20 76 6F 69 63 65 27 73  20 61 63 63 75 6D 75 6C  61 74 6F 72 20 77 69 6C  6C 20 62 65 20 73 75 6D   voice's accumulator will be sum
0000DE80  6D 65 64 20 69 6E 74 6F  20 74 68 65 20 66 69 6E  61 6C 20 6F 75 74 70 75  74 2E 20 20 54 68 65 72  med into the final output.  Ther
0000DEA0  65 66 6F 72 65 2C 20 69  74 20 69 73 20 69 6D 70  6F 72 74 61 6E 74 20 74  68 61 74 20 69 66 20 79  efore, it is important that if y
0000DEC0  6F 75 20 61 72 65 20 6E  6F 74 20 75 73 69 6E 67  20 61 20 76 6F 69 63 65  20 79 6F 75 20 73 68 6F  ou are not using a voice you sho
0000DEE0  75 6C 64 20 73 65 74 20  69 74 27 73 20 76 6F 6C  75 6D 65 20 74 6F 20 7A  65 72 6F 2E 0D 0A 0D 0A  uld set it's volume to zero.
0000DF00  54 68 65 20 55 6C 74 72  61 53 6F 75 6E 64 20 75  73 65 73 20 6C 6F 67 61  72 69 74 68 6D 69 63 20  The UltraSound uses logarithmic 
0000DF20  76 6F 6C 75 6D 65 73 20  75 73 69 6E 67 20 61 6E  20 65 78 70 6F 6E 65 6E  74 20 61 6E 64 20 61 20  volumes using an exponent and a 
0000DF40  6D 61 6E 74 69 73 73 61  2E 20 20 46 6F 72 20 64  65 74 61 69 6C 65 64 20  69 6E 66 6F 72 6D 61 74  mantissa.  For detailed informat
0000DF60  69 6F 6E 20 61 62 6F 75  74 20 68 6F 77 20 74 68  65 20 76 6F 6C 75 6D 65  73 20 77 6F 72 6B 2C 20  ion about how the volumes work, 
0000DF80  70 6C 65 61 73 65 20 73  65 65 20 73 65 63 74 69  6F 6E 20 32 2E 31 36 2E  20 20 41 73 20 61 6E 20  please see section 2.16.  As an 
0000DFA0  61 6C 74 65 72 6E 61 74  69 76 65 20 74 6F 20 75  73 69 6E 67 20 74 68 65  20 6C 6F 67 61 72 69 74  alternative to using the logarit
0000DFC0  68 6D 69 63 20 75 6E 69  74 73 2C 20 61 20 74 61  62 6C 65 20 68 61 73 20  62 65 65 6E 20 70 72 6F  hmic units, a table has been pro
0000DFE0  76 69 64 65 64 20 69 6E  20 74 68 65 20 6C 6F 77  6C 65 76 65 6C 20 63 6F  64 65 20 77 68 69 63 68  vided in the lowlevel code which
0000E000  20 67 69 76 65 73 20 6C  69 6E 65 61 72 20 65 71  75 69 76 61 6C 65 6E 74  73 20 6F 66 20 74 68 65   gives linear equivalents of the
0000E020  20 66 75 6C 6C 20 76 6F  6C 75 6D 65 20 72 61 6E  67 65 2E 20 20 59 6F 75  20 63 61 6E 20 74 68 65   full volume range.  You can the
0000E040  72 65 66 6F 72 65 20 75  73 65 20 74 68 65 20 6C  6F 67 61 72 69 74 68 6D  69 63 20 76 6F 6C 75 6D  refore use the logarithmic volum
0000E060  65 20 72 6F 75 74 69 6E  65 73 20 6F 72 20 74 68  65 20 6C 69 6E 65 61 72  20 76 6F 6C 75 6D 65 20  e routines or the linear volume 
0000E080  72 6F 75 74 69 6E 65 73  20 2D 20 77 68 69 63 68  65 76 65 72 20 79 6F 75  72 20 61 70 70 6C 69 63  routines - whichever your applic
0000E0A0  61 74 69 6F 6E 20 72 65  71 75 69 72 65 73 2E 0D  0A 0D 0A 56 6F 6C 75 6D  65 73 20 66 6F 72 20 65  ation requires.Volumes for e
0000E0C0  61 63 68 20 76 6F 69 63  65 20 6D 61 79 20 62 65  20 27 72 61 6D 70 65 64  27 2E 20 20 54 68 69 73  ach voice may be 'ramped'.  This
0000E0E0  20 6D 65 61 6E 73 20 74  68 61 74 20 79 6F 75 20  63 61 6E 20 73 70 65 63  69 66 79 20 61 20 73 74   means that you can specify a st
0000E100  61 72 74 20 61 6E 64 20  65 6E 64 20 76 6F 6C 75  6D 65 2C 20 61 6E 64 20  74 68 65 20 63 61 72 64  art and end volume, and the card
0000E120  20 77 69 6C 6C 20 73 6D  6F 6F 74 68 6C 79 20 63  68 61 6E 67 65 20 74 68  65 20 76 6F 6C 75 6D 65   will smoothly change the volume
0000E140  20 66 72 6F 6D 20 74 68  65 20 62 65 67 69 6E 6E  69 6E 67 20 6C 65 76 65  6C 20 74 6F 20 74 68 65   from the beginning level to the
0000E160  20 65 6E 64 20 6C 65 76  65 6C 2E 20 20 49 6E 20  72 61 6D 70 69 6E 67 20  74 68 65 20 76 6F 6C 75   end level.  In ramping the volu
0000E180  6D 65 73 2C 20 61 20 27  72 61 74 65 27 20 6D 75  73 74 20 62 65 20 73 70  65 63 69 66 69 65 64 20  mes, a 'rate' must be specified 
0000E1A0  77 68 69 63 68 20 61 73  73 69 67 6E 73 20 68 6F  77 20 66 61 73 74 20 74  68 65 20 76 6F 6C 75 6D  which assigns how fast the volum
0000E1C0  65 20 69 73 20 63 68 61  6E 67 65 64 2E 20 20 50  6C 65 61 73 65 20 73 65  65 20 73 65 63 74 69 6F  e is changed.  Please see sectio
0000E1E0  6E 20 32 2E 31 36 20 66  6F 72 20 64 65 74 61 69  6C 65 64 20 69 6E 66 6F  72 6D 61 74 69 6F 6E 20  n 2.16 for detailed information 
0000E200  6F 6E 20 68 6F 77 20 74  6F 20 73 65 74 20 75 70  20 61 20 76 6F 6C 75 6D  65 20 72 61 6D 70 20 72  on how to set up a volume ramp r
0000E220  61 74 65 2E 0D 0A 0D 0A  0D 0A 0D 0A 33 2E 37 20  55 73 69 6E 67 20 4C 6F  6F 70 69 6E 67 0D 0A 0D  ate.3.7 Using Looping
0000E240  0A 59 6F 75 20 63 61 6E  20 6C 6F 6F 70 20 62 6F  74 68 20 76 6F 69 63 65  73 20 61 6E 64 20 76 6F  You can loop both voices and vo
0000E260  6C 75 6D 65 73 20 6F 6E  20 74 68 65 20 55 6C 74  72 61 53 6F 75 6E 64 2E  20 20 4C 6F 6F 70 69 6E  lumes on the UltraSound.  Loopin
0000E280  67 20 61 20 76 6F 69 63  65 20 63 61 6E 20 72 65  73 75 6C 74 20 69 6E 20  73 75 73 74 61 69 6E 69  g a voice can result in sustaini
0000E2A0  6E 67 20 61 20 70 61 72  74 69 63 75 6C 61 72 20  6E 6F 74 65 2C 20 74 68  65 20 67 65 6E 65 72 61  ng a particular note, the genera
0000E2C0  74 69 6F 6E 20 6F 66 20  61 20 75 6E 69 71 75 65  20 73 6F 75 6E 64 2C 20  6F 72 20 61 6E 79 20 6E  tion of a unique sound, or any n
0000E2E0  75 6D 62 65 72 20 6F 66  20 6F 74 68 65 72 20 27  73 70 65 63 69 61 6C 20  65 66 66 65 63 74 73 27  umber of other 'special effects'
0000E300  2E 20 20 4C 6F 6F 70 69  6E 67 20 74 68 65 20 76  6F 6C 75 6D 65 20 63 61  6E 20 72 65 73 75 6C 74  .  Looping the volume can result
0000E320  20 69 6E 20 61 20 74 72  65 6D 65 6C 6F 20 65 66  66 65 63 74 20 61 74 20  76 61 72 69 6F 75 73 20   in a tremelo effect at various 
0000E340  69 6E 74 65 72 76 61 6C  73 2E 0D 0A 0D 0A 4C 6F  6F 70 69 6E 67 20 61 20  73 61 6D 70 6C 65 20 69  intervals.Looping a sample i
0000E360  73 20 61 20 73 69 6D 70  6C 65 20 74 61 73 6B 20  6F 66 20 73 65 74 74 69  6E 67 20 74 68 65 20 6D  s a simple task of setting the m
0000E380  6F 64 65 20 62 69 74 73  20 77 68 65 6E 20 73 70  65 63 69 66 79 69 6E 67  20 74 68 65 20 73 74 61  ode bits when specifying the sta
0000E3A0  72 74 20 6F 66 20 61 20  76 6F 69 63 65 20 28 74  68 72 6F 75 67 68 20 55  6C 74 72 61 50 72 69 6D  rt of a voice (through UltraPrim
0000E3C0  65 56 6F 69 63 65 2C 20  55 6C 74 72 61 53 74 61  72 74 56 6F 69 63 65 29  2C 20 6F 72 20 77 68 65  eVoice, UltraStartVoice), or whe
0000E3E0  6E 20 75 73 69 6E 67 20  55 6C 74 72 61 53 65 74  4C 6F 6F 70 4D 6F 64 65  2E 20 20 53 65 65 20 61  n using UltraSetLoopMode.  See a
0000E400  70 70 65 6E 64 69 78 20  43 20 66 6F 72 20 61 20  64 65 66 69 6E 69 74 69  6F 6E 20 6F 66 20 77 68  ppendix C for a definition of wh
0000E420  69 63 68 20 62 69 74 73  20 69 6E 20 74 68 65 20  6D 6F 64 65 20 62 79 74  65 20 63 6F 6E 74 72 6F  ich bits in the mode byte contro
0000E440  6C 20 6C 6F 6F 70 69 6E  67 2E 20 20 41 6C 73 6F  2C 20 50 61 73 63 61 6C  20 75 73 65 72 73 20 73  l looping.  Also, Pascal users s
0000E460  68 6F 75 6C 64 20 62 65  20 61 77 61 72 65 20 6F  66 20 74 68 65 20 63 6F  6E 73 74 61 6E 74 73 20  hould be aware of the constants 
0000E480  74 68 61 74 20 61 72 65  20 61 76 61 69 6C 61 62  6C 65 20 66 6F 72 20 75  73 65 20 69 6E 73 74 65  that are available for use inste
0000E4A0  61 64 20 28 73 65 65 20  73 65 63 74 69 6F 6E 20  33 2E 31 33 29 2E 0D 0A  0D 0A 4C 6F 6F 70 69 6E  ad (see section 3.13).Loopin
0000E4C0  67 20 74 68 65 20 76 6F  6C 75 6D 65 20 69 73 20  65 73 73 65 6E 74 69 61  6C 6C 79 20 61 73 20 73  g the volume is essentially as s
0000E4E0  69 6D 70 6C 65 20 61 73  20 6C 6F 6F 70 69 6E 67  20 61 20 76 6F 69 63 65  2E 20 20 57 68 65 6E 20  imple as looping a voice.  When 
0000E500  73 70 65 63 69 66 79 69  6E 67 20 74 68 65 20 76  6F 6C 75 6D 65 20 66 6F  72 20 61 20 70 61 72 74  specifying the volume for a part
0000E520  69 63 75 6C 61 72 20 76  6F 69 63 65 20 28 75 73  69 6E 67 20 55 6C 74 72  61 53 65 74 56 6F 6C 75  icular voice (using UltraSetVolu
0000E540  6D 65 20 6F 72 20 55 6C  74 72 61 53 65 74 4C 69  6E 65 61 72 56 6F 6C 75  6D 65 29 2C 20 79 6F 75  me or UltraSetLinearVolume), you
0000E560  20 73 65 74 20 74 68 65  20 76 6F 6C 75 6D 65 20  6D 6F 64 65 20 62 79 74  65 20 64 65 70 65 6E 64   set the volume mode byte depend
0000E580  69 6E 67 20 6F 6E 20 68  6F 77 20 79 6F 75 20 77  69 73 68 20 74 6F 20 6C  6F 6F 70 20 74 68 65 20  ing on how you wish to loop the 
0000E5A0  76 6F 6C 75 6D 65 2E 20  20 53 65 65 20 61 70 70  65 6E 64 69 78 20 42 20  66 6F 72 20 61 20 64 65  volume.  See appendix B for a de
0000E5C0  66 69 6E 69 74 69 6F 6E  20 6F 66 20 77 68 69 63  68 20 62 69 74 73 20 69  6E 20 74 68 65 20 6D 6F  finition of which bits in the mo
0000E5E0  64 65 20 62 79 74 65 20  63 6F 6E 74 72 6F 6C 20  6C 6F 6F 70 69 6E 67 2E  0D 0A 0C 33 2E 38 20 43  de byte control looping.3.8 C
0000E600  6C 69 63 6B 73 20 61 6E  64 20 63 6C 69 63 6B 20  72 65 6D 6F 76 61 6C 0D  0A 0D 0A 41 73 20 77 61  licks and click removalAs wa
0000E620  73 20 6D 65 6E 74 69 6F  6E 65 64 20 69 6E 20 61  20 66 65 77 20 6F 66 20  74 68 65 20 70 72 65 63  s mentioned in a few of the prec
0000E640  65 64 69 6E 67 20 73 65  63 74 69 6F 6E 73 2C 20  27 63 6C 69 63 6B 73 27  20 61 6E 64 20 27 70 6F  eding sections, 'clicks' and 'po
0000E660  70 73 27 20 63 61 6E 20  6F 63 63 75 72 20 77 68  65 6E 20 74 68 65 20 6F  75 74 70 75 74 20 6F 66  ps' can occur when the output of
0000E680  20 74 68 65 20 44 41 43  20 63 68 61 6E 67 65 73  20 73 75 64 64 65 6E 6C  79 2E 20 20 54 68 69 73   the DAC changes suddenly.  This
0000E6A0  20 69 73 20 74 68 65 20  6D 6F 73 74 20 66 72 65  71 75 65 6E 74 20 74 79  70 65 20 6F 66 20 63 6C   is the most frequent type of cl
0000E6C0  69 63 6B 2C 20 73 69 6E  63 65 20 74 68 65 72 65  20 6D 61 79 20 6E 6F 74  20 62 65 20 61 20 77 61  ick, since there may not be a wa
0000E6E0  79 20 74 6F 20 63 6F 6E  74 72 6F 6C 20 74 68 65  20 64 61 74 61 20 76 61  6C 75 65 73 20 74 68 65  y to control the data values the
0000E700  20 76 6F 69 63 65 73 20  61 72 65 20 74 72 79 69  6E 67 20 74 6F 20 70 6C  61 79 2E 20 20 0D 0A 0D   voices are trying to play.  
0000E720  0A 49 6E 20 67 65 6E 65  72 61 6C 2C 20 69 74 20  69 73 20 6E 65 63 65 73  73 61 72 79 20 74 6F 20  In general, it is necessary to 
0000E740  72 65 6D 65 6D 62 65 72  20 74 68 61 74 20 61 6C  6C 20 76 6F 69 63 65 73  20 61 72 65 20 62 65 69  remember that all voices are bei
0000E760  6E 67 20 73 75 6D 6D 65  64 20 69 6E 20 74 6F 20  74 68 65 20 66 69 6E 61  6C 20 6F 75 74 70 75 74  ng summed in to the final output
0000E780  2C 20 65 76 65 6E 20 69  66 20 74 68 65 79 20 61  72 65 20 6E 6F 74 20 72  75 6E 6E 69 6E 67 2E 20  , even if they are not running. 
0000E7A0  20 54 68 69 73 20 6D 65  61 6E 73 20 74 68 61 74  20 77 68 61 74 65 76 65  72 20 64 61 74 61 20 76   This means that whatever data v
0000E7C0  61 6C 75 65 20 74 68 61  74 20 74 68 65 20 76 6F  69 63 65 20 69 73 20 70  6F 69 6E 74 69 6E 67 20  alue that the voice is pointing 
0000E7E0  61 74 20 69 73 20 63 6F  6E 74 72 69 62 75 74 69  6E 67 20 74 6F 20 74 68  65 20 73 75 6D 6D 61 74  at is contributing to the summat
0000E800  69 6F 6E 2E 20 20 49 74  20 69 73 20 69 6D 70 6F  72 74 61 6E 74 20 74 68  61 74 20 61 20 76 6F 69  ion.  It is important that a voi
0000E820  63 65 20 62 65 20 70 6F  69 6E 74 65 64 20 74 6F  20 61 20 6B 6E 6F 77 6E  20 76 61 6C 75 65 20 61  ce be pointed to a known value a
0000E840  74 20 61 20 6B 6E 6F 77  6E 20 6C 6F 63 61 74 69  6F 6E 20 61 66 74 65 72  20 69 74 20 69 73 20 73  t a known location after it is s
0000E860  74 6F 70 70 65 64 20 73  6F 20 74 68 61 74 20 73  6F 6D 65 20 63 6F 6E 74  72 6F 6C 20 69 73 20 6B  topped so that some control is k
0000E880  65 70 74 20 6F 76 65 72  20 69 74 2E 20 20 46 6F  72 20 69 6E 73 74 61 6E  63 65 2C 20 69 66 20 61  ept over it.  For instance, if a
0000E8A0  20 76 6F 69 63 65 20 77  65 72 65 20 6C 65 66 74  20 61 74 20 77 68 65 72  65 65 76 65 72 20 74 68   voice were left at whereever th
0000E8C0  65 20 65 6E 64 20 70 6F  73 69 74 69 6F 6E 20 77  61 73 20 66 6F 72 20 74  68 65 20 6C 61 73 74 20  e end position was for the last 
0000E8E0  74 69 6D 65 20 69 74 20  70 6C 61 79 65 64 2C 20  61 20 70 6F 70 20 63 6F  75 6C 64 20 6F 63 63 75  time it played, a pop could occu
0000E900  72 20 69 66 20 6E 65 77  20 64 61 74 61 20 77 65  72 65 20 65 69 74 68 65  72 20 44 4D 41 27 65 64  r if new data were either DMA'ed
0000E920  20 6F 72 20 70 6F 6B 65  64 20 6F 76 65 72 20 74  68 65 20 74 6F 70 20 6F  66 20 69 74 2E 20 20 46   or poked over the top of it.  F
0000E940  6F 72 20 74 68 69 73 20  72 65 61 73 6F 6E 2C 20  69 74 20 69 73 20 72 65  63 6F 6D 6D 65 6E 64 65  or this reason, it is recommende
0000E960  64 20 74 68 61 74 20 61  20 76 6F 69 63 65 20 62  65 20 70 6F 69 6E 74 65  64 20 74 6F 20 61 20 6C  d that a voice be pointed to a l
0000E980  6F 63 61 74 69 6F 6E 20  63 6F 6E 74 61 69 6E 69  6E 67 20 61 20 30 20 61  6E 64 20 74 68 61 74 20  ocation containing a 0 and that 
0000E9A0  69 74 73 20 76 6F 6C 75  6D 65 20 62 65 20 73 65  74 20 74 6F 20 30 2E 20  20 41 74 20 74 68 61 74  its volume be set to 0.  At that
0000E9C0  20 70 6F 69 6E 74 2C 20  74 68 65 20 76 6F 69 63  65 20 77 69 6C 6C 20 68  61 76 65 20 6E 6F 20 63   point, the voice will have no c
0000E9E0  6F 6E 74 72 69 62 75 74  69 6F 6E 20 74 6F 20 74  68 65 20 6F 75 74 70 75  74 2E 20 20 20 20 54 68  ontribution to the output.    Th
0000EA00  65 72 65 20 61 72 65 20  73 6F 6D 65 20 70 61 72  74 69 63 75 6C 61 72 20  63 61 73 65 73 20 77 68  ere are some particular cases wh
0000EA20  65 72 65 20 63 6C 69 63  6B 73 20 6D 6F 73 74 20  66 72 65 71 75 65 6E 74  6C 79 20 6F 63 63 75 72  ere clicks most frequently occur
0000EA40  3A 0D 0A 0D 0A 44 75 72  69 6E 67 20 52 65 73 65  74 0D 0A 2D 09 42 65 63  61 75 73 65 20 6F 66 20  :During Reset-Because of 
0000EA60  74 68 65 20 77 61 79 20  74 68 65 20 63 61 72 64  20 69 73 20 72 65 73 65  74 2C 20 61 20 70 6F 70  the way the card is reset, a pop
0000EA80  20 63 61 6E 20 6F 63 63  75 72 20 74 68 72 6F 75  67 68 20 74 68 65 20 73  70 65 61 6B 65 72 73 20   can occur through the speakers 
0000EAA0  77 68 65 6E 20 61 20 72  65 73 65 74 20 6F 63 63  75 72 73 2E 20 20 54 68  65 20 77 61 79 20 74 6F  when a reset occurs.  The way to
0000EAC0  20 72 65 6D 6F 76 65 20  74 68 69 73 20 70 6F 70  20 69 73 20 74 6F 20 64  69 73 61 62 6C 65 20 74   remove this pop is to disable t
0000EAE0  68 65 20 6F 75 74 70 75  74 2C 20 72 65 73 65 74  20 74 68 65 20 63 61 72  64 2C 20 61 6E 64 20 74  he output, reset the card, and t
0000EB00  68 65 6E 20 65 6E 61 62  6C 65 20 74 68 65 20 6F  75 74 70 75 74 20 61 67  61 69 6E 2E 0D 0A 0D 0A  hen enable the output again.
0000EB20  44 75 72 69 6E 67 20 61  20 62 61 6C 61 6E 63 65  20 73 77 65 65 70 0D 0A  2D 09 53 69 6E 63 65 20  During a balance sweep-Since 
0000EB40  74 68 65 72 65 20 61 72  65 20 6F 6E 6C 79 20 31  36 20 70 61 6E 20 70 6F  73 69 74 69 6F 6E 73 20  there are only 16 pan positions 
0000EB60  61 6E 64 20 74 68 65 72  65 20 69 73 20 73 75 63  68 20 61 20 6C 61 72 67  65 20 6A 75 6D 70 20 62  and there is such a large jump b
0000EB80  65 74 77 65 65 6E 20 69  6E 64 69 76 69 64 75 61  6C 20 70 6F 73 69 74 69  6F 6E 73 2C 20 61 20 72  etween individual positions, a r
0000EBA0  65 6C 61 74 69 76 65 6C  79 20 66 61 73 74 20 62  61 6C 61 6E 63 65 20 73  77 65 65 70 20 66 72 6F  elatively fast balance sweep fro
0000EBC0  6D 20 6F 6E 65 20 73 69  64 65 20 74 6F 20 61 6E  6F 74 68 65 72 20 6D 61  79 20 70 72 6F 64 75 63  m one side to another may produc
0000EBE0  65 20 63 6C 69 63 6B 73  2E 20 20 59 6F 75 20 63  61 6E 20 67 65 74 20 61  20 76 65 72 79 20 73 6D  e clicks.  You can get a very sm
0000EC00  6F 6F 74 68 20 62 61 6C  61 6E 63 65 20 73 77 65  65 70 20 75 73 69 6E 67  20 32 20 76 6F 69 63 65  ooth balance sweep using 2 voice
0000EC20  73 20 61 6E 64 20 76 6F  6C 75 6D 65 20 72 61 6D  70 69 6E 67 2E 20 20 53  65 74 20 6F 6E 65 20 76  s and volume ramping.  Set one v
0000EC40  6F 69 63 65 20 75 70 20  74 6F 20 6F 6E 65 20 73  69 64 65 20 61 6E 64 20  6F 6E 65 20 74 6F 20 74  oice up to one side and one to t
0000EC60  68 65 20 6F 74 68 65 72  2C 20 61 6E 64 20 72 61  6D 70 20 6F 6E 65 20 64  6F 77 6E 20 66 72 6F 6D  he other, and ramp one down from
0000EC80  20 76 6F 6C 75 6D 65 20  58 20 74 6F 20 7A 65 72  6F 20 61 74 20 74 68 65  20 73 61 6D 65 20 72 61   volume X to zero at the same ra
0000ECA0  74 65 20 61 73 20 79 6F  75 20 72 61 6D 70 20 74  68 65 20 6F 74 68 65 72  20 66 72 6F 6D 20 30 20  te as you ramp the other from 0 
0000ECC0  75 70 20 74 6F 20 76 6F  6C 75 6D 65 20 58 2E 20  20 54 68 65 20 72 65 73  75 6C 74 20 69 73 20 61  up to volume X.  The result is a
0000ECE0  20 76 65 72 79 20 73 6D  6F 6F 74 68 20 62 61 6C  61 6E 63 65 20 73 77 65  65 70 2E 0D 0A 0D 0A 57   very smooth balance sweep.W
0000ED00  68 65 6E 20 73 74 61 72  74 69 6E 67 20 61 6E 64  20 73 74 6F 70 70 69 6E  67 20 61 20 76 6F 69 63  hen starting and stopping a voic
0000ED20  65 0D 0A 2D 09 42 79 20  73 65 74 74 69 6E 67 20  75 70 20 66 61 69 72 6C  79 20 66 61 73 74 20 72  e-By setting up fairly fast r
0000ED40  61 74 65 73 20 77 68 65  6E 20 61 20 73 61 6D 70  6C 65 20 73 74 61 72 74  20 6F 72 20 65 6E 64 73  ates when a sample start or ends
0000ED60  20 61 6E 64 20 72 61 6D  70 69 6E 67 20 75 70 20  6F 72 20 64 6F 77 6E 20  61 70 70 72 6F 70 72 69   and ramping up or down appropri
0000ED80  61 74 65 6C 79 2C 20 61  6E 79 20 70 6F 70 20 63  72 65 61 74 65 64 20 62  79 20 61 20 73 75 64 64  ately, any pop created by a sudd
0000EDA0  65 6E 20 63 68 61 6E 67  65 20 69 6E 20 74 68 65  20 44 41 43 20 76 61 6C  75 65 20 77 69 6C 6C 20  en change in the DAC value will 
0000EDC0  62 65 20 73 75 6D 6D 65  64 20 69 6E 20 61 74 20  73 75 63 68 20 61 20 6C  6F 77 20 76 6F 6C 75 6D  be summed in at such a low volum
0000EDE0  65 2C 20 69 74 20 77 69  6C 6C 20 6E 65 76 65 72  20 62 65 20 68 65 61 72  64 2E 0D 0A 0D 0A 45 6E  e, it will never be heard.En
0000EE00  64 20 70 6F 69 6E 74 73  20 6E 6F 74 20 73 65 74  20 70 72 6F 70 65 72 6C  79 0D 0A 2D 09 4D 61 6B  d points not set properly-Mak
0000EE20  65 20 73 75 72 65 20 79  6F 75 72 20 65 6E 64 20  70 6F 69 6E 74 73 20 61  72 65 20 61 74 20 74 68  e sure your end points are at th
0000EE40  65 20 65 6E 64 73 20 6F  66 20 79 6F 75 72 20 73  61 6D 70 6C 65 73 2E 20  49 74 20 69 73 20 61 20  e ends of your samples. It is a 
0000EE60  76 65 72 79 20 63 6F 6D  6D 6F 6E 20 6D 69 73 74  61 6B 65 20 74 6F 20 73  65 74 20 61 6E 20 65 6E  very common mistake to set an en
0000EE80  64 20 70 6F 69 6E 74 20  74 6F 20 31 20 73 61 6D  70 6C 65 20 62 65 79 6F  6E 64 20 74 68 65 20 65  d point to 1 sample beyond the e
0000EEA0  6E 64 2E 20 46 6F 72 20  65 78 61 6D 70 6C 65 2C  20 69 66 20 61 20 73 61  6D 70 6C 65 20 69 73 20  nd. For example, if a sample is 
0000EEC0  31 30 30 20 62 79 74 65  73 20 6C 6F 6E 67 20 61  6E 20 73 74 61 72 74 73  20 61 74 20 6C 6F 63 61  100 bytes long an starts at loca
0000EEE0  74 69 6F 6E 20 31 30 30  2C 20 74 68 65 20 65 6E  64 20 70 6F 69 6E 74 20  69 73 20 61 74 20 70 6F  tion 100, the end point is at po
0000EF00  73 69 74 69 6F 6E 20 31  39 39 2C 20 4E 4F 54 20  70 6F 73 69 74 69 6F 6E  20 32 30 30 2E 20 20 41  sition 199, NOT position 200.  A
0000EF20  6C 73 6F 2C 20 69 74 20  69 73 20 70 6F 73 73 69  62 6C 65 20 74 68 61 74  20 74 68 65 20 47 46 31  lso, it is possible that the GF1
0000EF40  20 77 69 6C 6C 20 69 6E  74 65 72 70 6F 6C 61 74  65 20 64 61 74 61 20 61  74 20 70 6F 69 6E 74 73   will interpolate data at points
0000EF60  20 62 65 79 6F 6E 64 20  74 68 65 20 65 6E 64 20  70 6F 69 6E 74 2E 20 20  54 6F 20 65 6E 73 75 72   beyond the end point.  To ensur
0000EF80  65 20 74 68 61 74 20 74  68 69 73 20 64 6F 65 73  20 6E 6F 74 20 63 61 75  73 65 20 27 63 6C 69 63  e that this does not cause 'clic
0000EFA0  6B 73 27 2C 20 75 73 65  20 61 20 66 65 77 20 65  78 74 72 61 20 62 79 74  65 73 20 61 66 74 65 72  ks', use a few extra bytes after
0000EFC0  20 74 68 65 20 65 6E 64  20 70 6F 69 6E 74 20 6F  66 20 74 68 65 20 73 61  6D 70 6C 65 20 74 6F 20   the end point of the sample to 
0000EFE0  6D 61 69 6E 74 61 69 6E  20 69 74 2E 0D 0A 0D 0A  4C 6F 6F 70 20 70 6F 69  6E 74 73 20 6E 6F 74 20  maintain it.Loop points not 
0000F000  73 65 74 20 70 72 6F 70  65 72 6C 79 0D 0A 2D 09  54 68 65 20 73 61 6D 65  20 70 72 6F 62 6C 65 6D  set properly-The same problem
0000F020  20 61 73 20 73 74 61 74  65 64 20 61 62 6F 76 65  20 28 65 6E 64 20 70 6F  69 6E 74 73 29 20 69 73   as stated above (end points) is
0000F040  20 63 6F 6D 6D 6F 6E 20  66 6F 72 20 6C 6F 6F 70  20 73 74 61 72 74 20 61  6E 64 20 65 6E 64 20 70   common for loop start and end p
0000F060  6F 69 6E 74 73 2E 20 20  42 65 20 73 75 72 65 20  74 68 61 74 20 74 68 65  20 64 61 74 61 20 61 74  oints.  Be sure that the data at
0000F080  20 74 68 65 20 65 6E 64  20 6F 66 20 74 68 65 20  6C 6F 6F 70 20 61 6E 64  20 74 68 65 20 62 65 67   the end of the loop and the beg
0000F0A0  69 6E 6E 69 6E 67 20 6F  66 20 74 68 65 20 6C 6F  6F 70 20 61 72 65 20 70  72 61 63 74 69 63 61 6C  inning of the loop are practical
0000F0C0  6C 79 20 69 64 65 6E 74  69 63 61 6C 2C 20 73 69  6E 63 65 20 69 66 20 74  68 65 72 65 20 69 73 20  ly identical, since if there is 
0000F0E0  61 20 6C 61 72 67 65 20  73 74 65 70 20 62 65 74  77 65 65 6E 20 74 68 65  6D 20 61 20 63 6C 69 63  a large step between them a clic
0000F100  6B 20 77 69 6C 6C 20 72  65 73 75 6C 74 20 62 65  63 61 75 73 65 20 74 68  65 20 44 41 43 20 76 61  k will result because the DAC va
0000F120  6C 75 65 20 77 69 6C 6C  20 63 68 61 6E 67 65 20  73 75 64 64 65 6E 6C 79  2E 0D 0A 0C 33 2E 39 20  lue will change suddenly.3.9 
0000F140  49 6E 74 65 72 72 75 70  74 20 48 61 6E 64 6C 69  6E 67 20 46 75 6E 63 74  69 6F 6E 73 0D 0A 0D 0A  Interrupt Handling Functions
0000F160  54 68 65 72 65 20 61 72  65 20 39 20 66 75 6E 63  74 69 6F 6E 73 20 28 70  72 6F 63 65 64 75 72 65  There are 9 functions (procedure
0000F180  73 20 66 6F 72 20 50 61  73 63 61 6C 20 75 73 65  72 73 29 20 77 68 69 63  68 20 63 61 6E 20 62 65  s for Pascal users) which can be
0000F1A0  20 75 73 65 64 20 74 6F  20 64 65 66 69 6E 65 20  61 20 68 61 6E 64 6C 65  72 20 66 6F 72 20 65 76   used to define a handler for ev
0000F1C0  65 6E 74 73 20 74 68 61  74 20 68 61 70 70 65 6E  20 75 6E 64 65 72 20 69  6E 74 65 72 72 75 70 74  ents that happen under interrupt
0000F1E0  20 6F 6E 20 74 68 65 20  55 6C 74 72 61 53 6F 75  6E 64 2E 20 20 54 68 65  73 65 20 61 72 65 20 4E   on the UltraSound.  These are N
0000F200  4F 54 20 69 6E 74 65 72  72 75 70 74 20 68 61 6E  64 6C 65 72 73 20 62 75  74 20 61 72 65 20 63 61  OT interrupt handlers but are ca
0000F220  6C 6C 62 61 63 6B 73 20  66 72 6F 6D 20 74 68 65  20 69 6E 74 65 72 72 75  70 74 20 68 61 6E 64 6C  llbacks from the interrupt handl
0000F240  65 72 2E 20 20 54 68 69  73 20 6D 65 61 6E 73 20  74 68 61 74 20 74 68 65  79 20 73 68 6F 75 6C 64  er.  This means that they should
0000F260  20 6E 6F 74 20 62 65 20  64 65 66 69 6E 65 64 20  61 73 20 69 6E 74 65 72  72 75 70 74 20 74 79 70   not be defined as interrupt typ
0000F280  65 20 66 75 6E 63 74 69  6F 6E 73 20 62 75 74 20  6D 75 73 74 20 61 64 68  65 72 65 20 74 6F 20 74  e functions but must adhere to t
0000F2A0  68 65 20 67 65 6E 65 72  61 6C 20 72 75 6C 65 73  20 6F 66 20 69 6E 74 65  72 72 75 70 74 20 63 6F  he general rules of interrupt co
0000F2C0  64 65 2E 20 20 4E 6F 20  44 4F 53 20 63 61 6C 6C  73 20 73 68 6F 75 6C 64  20 62 65 20 6D 61 64 65  de.  No DOS calls should be made
0000F2E0  20 61 6E 64 20 63 61 72  65 20 6D 75 73 74 20 62  65 20 74 61 6B 65 6E 20  6E 6F 74 20 74 6F 20 63   and care must be taken not to c
0000F300  61 75 73 65 20 70 72 6F  62 6C 65 6D 73 20 77 69  74 68 20 63 6F 64 65 20  72 75 6E 6E 69 6E 67 20  ause problems with code running 
0000F320  69 6E 20 74 68 65 20 66  6F 72 65 67 72 6F 75 6E  64 2E 20 20 0D 0A 0D 0A  55 6C 74 72 61 44 72 61  in the foreground.  UltraDra
0000F340  6D 54 63 48 61 6E 64 6C  65 72 20 20 20 20 20 20  20 20 20 20 55 6C 74 72  61 52 65 63 6F 72 64 48  mTcHandler          UltraRecordH
0000F360  61 6E 64 6C 65 72 20 20  0D 0A 20 20 55 6C 74 72  61 4D 49 44 49 58 6D 69  74 48 61 6E 64 6C 65 72  andler    UltraMIDIXmitHandler
0000F380  20 20 20 20 20 20 20 20  55 6C 74 72 61 4D 49 44  49 52 65 63 76 48 61 6E  64 6C 65 72 0D 0A 55 6C          UltraMIDIRecvHandlerUl
0000F3A0  74 72 61 54 69 6D 65 72  31 48 61 6E 64 6C 65 72  20 20 20 20 20 20 20 20  20 20 55 6C 74 72 61 54  traTimer1Handler          UltraT
0000F3C0  69 6D 65 72 32 48 61 6E  64 6C 65 72 20 20 0D 0A  55 6C 74 72 61 57 61 76  65 48 61 6E 64 6C 65 72  imer2Handler  UltraWaveHandler
0000F3E0  20 20 20 20 20 20 20 20  20 20 20 20 55 6C 74 72  61 56 6F 6C 75 6D 65 48  61 6E 64 6C 65 72 20 20              UltraVolumeHandler  
0000F400  0D 0A 55 6C 74 72 61 41  75 78 48 61 6E 64 6C 65  72 0D 0A 0D 0A 41 6C 6C  20 74 68 65 73 65 20 72  UltraAuxHandlerAll these r
0000F420  6F 75 74 69 6E 65 73 20  72 65 74 75 72 6E 20 74  68 65 20 6F 6C 64 20 63  61 6C 6C 62 61 63 6B 20  outines return the old callback 
0000F440  61 64 64 72 65 73 73 20  73 6F 20 63 68 61 69 6E  69 6E 67 20 63 6F 75 6C  64 20 62 65 20 64 6F 6E  address so chaining could be don
0000F460  65 20 69 66 20 64 65 73  69 72 65 64 2E 20 20 54  68 69 73 20 6E 6F 74 20  75 73 75 61 6C 6C 79 20  e if desired.  This not usually 
0000F480  6E 65 63 65 73 73 61 72  79 2E 20 20 49 74 20 69  73 20 61 6C 73 6F 20 6E  6F 74 20 6E 65 63 65 73  necessary.  It is also not neces
0000F4A0  73 61 72 79 20 74 6F 20  72 65 73 74 6F 72 65 20  74 68 65 20 68 61 6E 64  6C 65 72 20 62 61 63 6B  sary to restore the handler back
0000F4C0  20 74 6F 20 74 68 65 20  6F 6C 64 20 6F 6E 65 20  77 68 65 6E 20 65 78 69  74 69 6E 67 20 79 6F 75   to the old one when exiting you
0000F4E0  72 20 61 70 70 6C 69 63  61 74 69 6F 6E 2E 20 20  48 6F 77 65 76 65 72 2C  20 74 68 65 20 55 6C 74  r application.  However, the Ult
0000F500  72 61 43 6C 6F 73 65 20  66 75 6E 63 74 69 6F 6E  20 4D 55 53 54 20 62 65  20 63 61 6C 6C 65 64 20  raClose function MUST be called 
0000F520  74 6F 20 72 65 73 74 6F  72 65 20 74 68 65 20 61  63 74 75 61 6C 20 69 6E  74 65 72 72 75 70 74 20  to restore the actual interrupt 
0000F540  68 61 6E 64 6C 65 72 2E  20 20 0D 0A 0D 0A 54 68  65 73 65 20 77 69 6C 6C  20 6F 6E 6C 79 20 62 65  handler.  These will only be
0000F560  20 43 41 4C 4C 45 44 20  69 66 20 74 68 65 20 69  6E 74 65 72 72 75 70 74  20 66 6F 72 20 74 68 65   CALLED if the interrupt for the
0000F580  20 70 61 72 74 69 63 75  6C 61 72 20 66 75 6E 63  74 69 6F 6E 20 69 73 20  65 6E 61 62 6C 65 64 20   particular function is enabled 
0000F5A0  69 6E 20 74 68 65 20 6D  6F 64 65 20 70 61 72 61  6D 65 74 65 72 20 28 73  65 65 20 74 68 65 20 41  in the mode parameter (see the A
0000F5C0  70 70 65 6E 64 69 63 65  73 20 66 6F 72 20 74 68  65 20 62 69 74 20 64 65  66 69 6E 69 74 69 6F 6E  ppendices for the bit definition
0000F5E0  73 2E 29 20 49 74 20 69  73 20 61 6C 73 6F 20 6E  6F 74 20 6E 65 63 65 73  73 61 72 79 20 74 6F 20  s.) It is also not necessary to 
0000F600  73 65 74 20 75 70 20 61  20 63 61 6C 6C 62 61 63  6B 20 73 69 6E 63 65 20  69 74 20 68 61 73 20 61  set up a callback since it has a
0000F620  20 64 65 66 61 75 6C 74  20 61 73 73 6F 63 69 61  74 65 64 20 77 69 74 68  20 69 74 2E 0D 0A 0D 0A   default associated with it.
0000F640  59 6F 75 20 73 68 6F 75  6C 64 20 62 65 20 61 62  6C 65 20 74 6F 20 6D 61  6B 65 20 61 6E 79 20 53  You should be able to make any S
0000F660  44 4B 20 6C 69 62 72 61  72 79 20 63 61 6C 6C 73  20 66 72 6F 6D 20 77 69  74 68 69 6E 20 74 68 65  DK library calls from within the
0000F680  20 69 6E 74 65 72 72 75  70 74 20 68 61 6E 64 6C  65 72 73 2E 20 20 41 6C  6C 20 74 68 65 20 6C 69   interrupt handlers.  All the li
0000F6A0  62 72 61 72 79 20 66 75  6E 63 74 69 6F 6E 73 20  70 72 6F 74 65 63 74 20  74 68 65 6D 73 65 6C 76  brary functions protect themselv
0000F6C0  65 73 20 66 72 6F 6D 20  62 65 69 6E 67 20 69 6E  74 65 72 72 75 70 74 65  64 20 77 68 69 6C 65 20  es from being interrupted while 
0000F6E0  64 6F 69 6E 67 20 63 72  69 74 69 63 61 6C 20 6F  70 65 72 61 74 69 6F 6E  73 2E 0D 0A 0D 0A 0D 0A  doing critical operations.
0000F700  0D 0A 33 2E 31 30 20 52  6F 6C 6C 6F 76 65 72 20  66 65 61 74 75 72 65 0D  0A 0D 0A 45 61 63 68 20  3.10 Rollover featureEach 
0000F720  76 6F 69 63 65 20 68 61  73 20 61 20 27 72 6F 6C  6C 6F 76 65 72 27 20 66  65 61 74 75 72 65 20 74  voice has a 'rollover' feature t
0000F740  68 61 74 20 61 6C 6C 6F  77 73 20 61 6E 20 61 70  70 6C 69 63 61 74 69 6F  6E 20 74 6F 20 62 65 20  hat allows an application to be 
0000F760  6E 6F 74 69 66 69 65 64  20 77 68 65 6E 20 61 20  76 6F 69 63 65 27 73 20  70 6C 61 79 62 61 63 6B  notified when a voice's playback
0000F780  20 70 6F 73 69 74 69 6F  6E 20 70 61 73 73 65 73  20 6F 76 65 72 20 61 20  70 61 72 74 69 63 75 6C   position passes over a particul
0000F7A0  61 72 20 70 6C 61 63 65  20 69 6E 20 44 52 41 4D  2E 20 20 54 68 69 73 20  69 73 20 76 65 72 79 20  ar place in DRAM.  This is very 
0000F7C0  75 73 65 66 75 6C 20 66  6F 72 20 67 65 74 74 69  6E 67 20 73 65 61 6D 6C  65 73 73 20 64 69 67 69  useful for getting seamless digi
0000F7E0  74 61 6C 20 61 75 64 69  6F 20 70 6C 61 79 62 61  63 6B 2E 20 20 42 61 73  69 63 61 6C 6C 79 2C 20  tal audio playback.  Basically, 
0000F800  74 68 65 20 47 46 31 20  77 69 6C 6C 20 67 65 6E  65 72 61 74 65 20 61 6E  20 49 52 51 20 77 68 65  the GF1 will generate an IRQ whe
0000F820  6E 20 61 20 76 6F 69 63  65 27 73 20 63 75 72 72  65 6E 74 20 70 6F 73 69  74 69 6F 6E 20 69 73 20  n a voice's current position is 
0000F840  20 65 71 75 61 6C 20 74  6F 20 74 68 65 20 65 6E  64 20 70 6F 73 69 74 69  6F 6E 2E 20 20 48 6F 77   equal to the end position.  How
0000F860  65 76 65 72 2C 20 69 6E  73 74 65 61 64 20 6F 66  20 73 74 6F 70 70 69 6E  67 20 6F 72 20 6C 6F 6F  ever, instead of stopping or loo
0000F880  70 69 6E 67 20 62 61 63  6B 20 74 6F 20 74 68 65  20 73 74 61 72 74 20 70  6F 73 69 74 69 6F 6E 2C  ping back to the start position,
0000F8A0  20 74 68 65 20 76 6F 69  63 65 20 77 69 6C 6C 20  63 6F 6E 74 69 6E 75 65  20 70 6C 61 79 69 6E 67   the voice will continue playing
0000F8C0  20 69 6E 20 74 68 65 20  73 61 6D 65 20 64 69 72  65 63 74 69 6F 6E 2E 20  20 54 68 69 73 20 6D 65   in the same direction.  This me
0000F8E0  61 6E 73 20 74 68 61 74  20 74 68 65 72 65 20 77  69 6C 6C 20 62 65 20 6E  6F 20 70 61 75 73 65 20  ans that there will be no pause 
0000F900  28 6F 72 20 67 61 70 29  20 69 6E 20 74 68 65 20  70 6C 61 79 62 61 63 6B  2E 20 20 4E 6F 74 65 20  (or gap) in the playback.  Note 
0000F920  74 68 61 74 20 74 68 69  73 20 66 65 61 74 75 72  65 20 69 73 20 65 6E 61  62 6C 65 64 2F 64 69 73  that this feature is enabled/dis
0000F940  61 62 6C 65 64 20 74 68  72 75 20 74 68 65 20 76  6F 69 63 65 27 73 20 56  4F 4C 55 4D 45 20 63 6F  abled thru the voice's VOLUME co
0000F960  6E 74 72 6F 6C 20 72 65  67 69 73 74 65 72 20 28  73 69 6E 63 65 20 74 68  65 72 65 20 61 72 65 20  ntrol register (since there are 
0000F980  6E 6F 20 6D 6F 72 65 20  62 69 74 73 20 61 76 61  69 6C 61 62 6C 65 20 69  6E 20 74 68 65 20 76 6F  no more bits available in the vo
0000F9A0  69 63 65 20 63 6F 6E 74  72 6F 6C 20 72 65 67 69  73 74 65 72 73 29 2E 20  20 41 20 76 6F 69 63 65  ice control registers).  A voice
0000F9C0  27 73 20 6C 6F 6F 70 20  65 6E 61 62 6C 65 20 62  69 74 20 74 61 6B 65 73  20 70 72 65 63 65 64 65  's loop enable bit takes precede
0000F9E0  6E 63 65 20 6F 76 65 72  20 74 68 65 20 72 6F 6C  6C 6F 76 65 72 2E 20 20  54 68 69 73 20 6D 65 61  nce over the rollover.  This mea
0000FA00  6E 73 20 74 68 61 74 20  69 66 20 61 20 76 6F 69  63 65 27 73 20 6C 6F 6F  70 20 65 6E 61 62 6C 65  ns that if a voice's loop enable
0000FA20  20 69 73 20 6F 6E 2C 20  69 74 20 77 69 6C 6C 20  6C 6F 6F 70 20 77 68 65  6E 20 69 74 20 68 69 74   is on, it will loop when it hit
0000FA40  73 20 74 68 65 20 65 6E  64 20 70 6F 73 69 74 69  6F 6E 2C 20 72 65 67 61  72 64 6C 65 73 73 20 6F  s the end position, regardless o
0000FA60  66 20 74 68 65 20 73 74  61 74 65 20 6F 66 20 74  68 65 20 72 6F 6C 6C 6F  76 65 72 20 65 6E 61 62  f the state of the rollover enab
0000FA80  6C 65 2E 0D 0A 0D 0A 41  20 73 69 6D 70 6C 65 20  65 78 61 6D 70 6C 65 20  6F 66 20 74 68 69 73 20  le.A simple example of this 
0000FAA0  74 65 63 68 6E 69 71 75  65 20 69 73 3A 0D 0A 0D  0A 31 29 09 41 6C 6C 6F  63 61 74 65 20 61 20 63  technique is:1)Allocate a c
0000FAC0  68 75 6E 6B 20 6F 66 20  44 52 41 4D 3A 20 32 30  4B 2C 20 66 6F 72 20 65  78 61 6D 70 6C 65 2E 0D  hunk of DRAM: 20K, for example.
0000FAE0  0A 32 29 09 4C 6F 61 64  20 74 68 65 20 65 6E 74  69 72 65 20 32 30 4B 20  77 69 74 68 20 77 61 76  2)Load the entire 20K with wav
0000FB00  65 20 64 61 74 61 2E 0D  0A 33 29 09 53 74 61 72  74 20 75 70 20 61 20 76  6F 69 63 65 20 77 69 74  e data.3)Start up a voice wit
0000FB20  68 20 6C 6F 6F 70 69 6E  67 20 64 69 73 61 62 6C  65 64 20 61 6E 64 20 72  6F 6C 6C 6F 76 65 72 20  h looping disabled and rollover 
0000FB40  65 6E 61 62 6C 65 64 2E  20 20 53 65 74 20 69 74  73 20 65 6E 64 20 70 6F  73 69 74 69 6F 6E 20 74  enabled.  Set its end position t
0000FB60  6F 20 74 68 65 20 4D 49  44 44 4C 45 20 6F 66 20  74 68 65 20 62 75 66 66  65 72 2E 0D 0A 34 29 09  o the MIDDLE of the buffer.4)
0000FB80  57 68 65 6E 20 74 68 65  20 76 6F 69 63 65 20 68  69 74 73 20 74 68 65 20  6D 69 64 64 6C 65 2C 20  When the voice hits the middle, 
0000FBA0  79 6F 75 20 77 69 6C 6C  20 67 65 74 20 61 6E 20  49 52 51 2C 20 62 75 74  20 74 68 65 20 76 6F 69  you will get an IRQ, but the voi
0000FBC0  63 65 20 77 69 6C 6C 20  63 6F 6E 74 69 6E 75 65  20 74 6F 20 70 6C 61 79  2E 0D 0A 35 29 09 41 74  ce will continue to play.5)At
0000FBE0  20 74 68 69 73 20 70 6F  69 6E 74 2C 20 65 6E 61  62 6C 65 20 6C 6F 6F 70  69 6E 67 20 61 6E 64 20   this point, enable looping and 
0000FC00  64 69 73 61 62 6C 65 20  74 68 65 20 72 6F 6C 6C  6F 76 65 72 2E 20 20 41  6C 73 6F 2C 20 73 65 74  disable the rollover.  Also, set
0000FC20  20 74 68 65 20 65 6E 64  20 70 6F 73 69 74 69 6F  6E 20 74 6F 20 74 68 65  20 65 6E 64 20 6F 66 20   the end position to the end of 
0000FC40  74 68 65 20 62 75 66 66  65 72 2E 20 54 68 69 73  20 77 69 6C 6C 20 6D 61  6B 65 20 74 68 65 20 76  the buffer. This will make the v
0000FC60  6F 69 63 65 20 6C 6F 6F  70 20 62 61 63 6B 20 74  6F 20 74 68 65 20 62 65  67 69 6E 6E 69 6E 67 20  oice loop back to the beginning 
0000FC80  77 69 74 68 6F 75 74 20  73 74 6F 70 70 69 6E 67  2E 0D 0A 36 29 09 4E 6F  77 20 6C 6F 61 64 20 74  without stopping.6)Now load t
0000FCA0  68 65 20 46 49 52 53 54  20 31 30 4B 20 77 69 74  68 20 6D 6F 72 65 20 77  61 76 65 20 64 61 74 61  he FIRST 10K with more wave data
0000FCC0  2E 20 54 68 69 73 20 77  69 6C 6C 20 6D 61 6B 65  20 73 75 72 65 20 74 68  61 74 20 74 68 65 72 65  . This will make sure that there
0000FCE0  20 69 73 20 63 6F 72 72  65 63 74 20 64 61 74 61  20 74 6F 20 70 6C 61 79  20 77 68 65 6E 20 74 68   is correct data to play when th
0000FD00  65 20 76 6F 69 63 65 20  6C 6F 6F 70 73 2E 0D 0A  37 29 09 57 68 65 6E 20  74 68 65 20 76 6F 69 63  e voice loops.7)When the voic
0000FD20  65 20 6C 6F 6F 70 73 2C  20 79 6F 75 20 77 69 6C  6C 20 67 65 74 20 61 6E  64 20 49 52 51 2E 20 0D  e loops, you will get and IRQ. 
0000FD40  0A 38 29 09 41 74 20 74  68 69 73 20 70 6F 69 6E  74 2C 20 64 69 73 61 62  6C 65 20 6C 6F 6F 70 69  8)At this point, disable loopi
0000FD60  6E 67 2C 20 65 6E 61 62  6C 65 20 72 6F 6C 6C 6F  76 65 72 20 61 6E 64 20  73 65 74 20 74 68 65 20  ng, enable rollover and set the 
0000FD80  65 6E 64 20 70 6F 73 69  74 69 6F 6E 20 62 61 63  6B 20 74 6F 20 74 68 65  20 6D 69 64 64 6C 65 20  end position back to the middle 
0000FDA0  6F 66 20 74 68 65 20 62  75 66 66 65 72 2E 0D 0A  39 29 09 4E 6F 77 20 6C  6F 61 64 20 74 68 65 20  of the buffer.9)Now load the 
0000FDC0  53 45 43 4F 4E 44 20 31  30 4B 20 77 69 74 68 20  6D 6F 72 65 20 77 61 76  65 20 64 61 74 61 2E 20  SECOND 10K with more wave data. 
0000FDE0  54 68 69 73 20 77 69 6C  6C 20 6D 61 6B 65 20 73  75 72 65 20 74 68 61 74  20 74 68 65 72 65 20 69  This will make sure that there i
0000FE00  73 20 63 6F 72 65 63 74  20 64 61 74 61 20 74 6F  20 70 6C 61 79 20 77 68  65 6E 20 74 68 65 20 72  s corect data to play when the r
0000FE20  6F 6C 6C 6F 76 65 72 20  6F 63 63 75 72 73 2E 0D  0A 31 30 29 09 43 6F 6E  74 69 6E 75 65 20 69 6E  ollover occurs.10)Continue in
0000FE40  20 61 20 6C 6F 6F 70 2C  20 73 74 61 72 74 69 6E  67 20 61 74 20 73 74 65  70 20 23 34 2E 0D 0A 0D   a loop, starting at step #4.
0000FE60  0A 4E 6F 74 65 3A 09 54  68 69 73 20 61 6C 67 6F  72 69 74 68 6D 20 64 6F  65 73 20 6E 6F 74 20 74  Note:This algorithm does not t
0000FE80  61 6B 65 20 63 61 72 65  20 6F 66 20 61 6E 20 69  6E 69 74 69 61 6C 20 63  6F 6E 64 69 74 69 6F 6E  ake care of an initial condition
0000FEA0  20 77 68 65 72 65 20 6E  6F 74 20 65 6E 6F 75 67  68 20 64 61 74 61 20 65  78 69 73 74 73 20 74 6F   where not enough data exists to
0000FEC0  20 66 69 6C 6C 20 6F 6E  65 20 63 6F 6D 70 6C 65  74 65 20 62 75 66 66 65  72 2E 20 49 74 20 61 6C   fill one complete buffer. It al
0000FEE0  73 6F 20 64 6F 65 73 6E  27 74 20 61 64 64 72 65  73 73 20 68 6F 77 20 74  6F 20 66 69 6E 69 73 68  so doesn't address how to finish
0000FF00  20 70 6C 61 79 69 6E 67  20 74 68 65 20 6C 61 73  74 20 69 6E 63 6F 6D 70  6C 65 74 65 20 62 75 66   playing the last incomplete buf
0000FF20  66 65 72 2E 20 20 54 68  65 73 65 20 70 6F 69 6E  74 73 20 61 72 65 20 6C  65 66 74 20 75 70 20 74  fer.  These points are left up t
0000FF40  6F 20 79 6F 75 72 20 69  6D 70 6C 65 6D 65 6E 74  61 74 69 6F 6E 20 74 6F  20 72 65 73 6F 6C 76 65  o your implementation to resolve
0000FF60  2E 0D 0A 0D 0A 0D 0A 0D  0A 33 2E 31 31 20 53 74  65 72 65 6F 20 70 6C 61  79 62 61 63 6B 0D 0A 0D  .3.11 Stereo playback
0000FF80  0A 53 74 65 72 65 6F 20  64 61 74 61 20 69 73 20  72 65 70 72 65 73 65 6E  74 65 64 20 69 6E 20 61  Stereo data is represented in a
0000FFA0  6E 20 69 6E 74 65 72 6C  65 61 76 65 64 20 66 6F  72 6D 61 74 2C 20 6D 65  61 6E 69 6E 67 20 74 68  n interleaved format, meaning th
0000FFC0  61 74 20 74 68 65 20 64  61 74 61 20 61 6C 74 65  72 6E 61 74 65 73 20 62  65 74 77 65 65 6E 20 61  at the data alternates between a
0000FFE0  20 73 61 6D 70 6C 65 20  66 6F 72 20 74 68 65 20  6C 65 66 74 20 63 68 61  6E 6E 65 6C 20 61 6E 64   sample for the left channel and
00010000  20 61 20 73 61 6D 70 6C  65 20 66 6F 72 20 74 68  65 20 72 69 67 68 74 20  63 68 61 6E 6E 65 6C 2E   a sample for the right channel.
00010020  20 20 49 74 20 69 73 20  65 69 74 68 65 72 20 74  68 65 20 72 65 73 70 6F  6E 73 69 62 69 6C 69 74    It is either the responsibilit
00010040  79 20 6F 66 20 74 68 65  20 68 61 72 64 77 61 72  65 20 6F 72 20 74 68 65  20 73 6F 66 74 77 61 72  y of the hardware or the softwar
00010060  65 20 74 6F 20 65 6E 73  75 72 65 20 74 68 61 74  20 74 68 65 20 64 61 74  61 20 67 65 74 73 20 75  e to ensure that the data gets u
00010080  73 65 64 20 70 72 6F 70  65 72 6C 79 2E 20 53 74  65 72 65 6F 20 64 61 74  61 20 63 61 6E 20 62 65  sed properly. Stereo data can be
000100A0  20 70 6C 61 79 65 64 20  62 61 63 6B 20 74 77 6F  20 63 6F 6D 70 6C 65 74  65 6C 79 20 64 69 66 66   played back two completely diff
000100C0  65 72 65 6E 74 20 77 61  79 73 2C 20 65 69 74 68  65 72 20 75 6E 64 65 72  20 73 6F 66 74 77 61 72  erent ways, either under softwar
000100E0  65 20 63 6F 6E 74 72 6F  6C 20 6F 72 20 68 61 72  64 77 61 72 65 20 63 6F  6E 74 72 6F 6C 3A 0D 0A  e control or hardware control:
00010100  0D 0A 53 6F 66 74 77 61  72 65 20 43 6F 6E 74 72  6F 6C 0D 0A 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  Software Control============
00010120  3D 3D 3D 3D 0D 0A 0D 0A  54 68 69 73 20 69 73 20  74 68 65 20 6D 6F 73 74  20 66 6C 65 78 69 62 6C  ====This is the most flexibl
00010140  65 20 6D 65 74 68 6F 64  2C 20 73 69 6E 63 65 20  69 74 20 61 6C 6C 6F 77  73 20 66 6F 72 20 70 6C  e method, since it allows for pl
00010160  61 79 62 61 63 6B 20 61  74 20 61 6E 79 20 66 72  65 71 75 65 6E 63 79 2E  20 20 54 68 65 20 62 61  ayback at any frequency.  The ba
00010180  73 69 63 20 61 6C 67 6F  72 69 74 68 6D 20 69 73  20 74 6F 20 64 65 2D 69  6E 74 65 72 6C 65 61 76  sic algorithm is to de-interleav
000101A0  65 20 74 68 65 20 64 61  74 61 20 69 6E 74 6F 20  61 20 6C 65 66 74 20 63  68 61 6E 6E 65 6C 20 62  e the data into a left channel b
000101C0  75 66 66 65 72 20 61 6E  64 20 61 20 72 69 67 68  74 20 63 68 61 6E 6E 65  6C 20 62 75 66 66 65 72  uffer and a right channel buffer
000101E0  2C 20 74 68 65 6E 20 73  65 6E 64 20 74 68 65 20  64 61 74 61 20 74 6F 20  74 77 6F 20 69 6E 64 65  , then send the data to two inde
00010200  70 65 6E 64 65 6E 74 20  76 6F 69 63 65 73 20 6F  6E 20 74 68 65 20 63 61  72 64 2E 20 20 48 65 72  pendent voices on the card.  Her
00010220  65 20 69 73 20 61 20 62  72 69 65 66 20 64 65 73  63 72 69 70 74 69 6F 6E  20 6F 66 20 74 68 65 20  e is a brief description of the 
00010240  61 6C 67 6F 72 69 74 68  6D 20 74 68 61 74 20 77  6F 75 6C 64 20 62 65 20  75 73 65 64 3A 0D 0A 0D  algorithm that would be used:
00010260  0A 31 29 09 41 6C 6C 6F  63 61 74 65 20 32 20 76  6F 69 63 65 73 2E 20 4F  6E 65 20 66 6F 72 20 6C  1)Allocate 2 voices. One for l
00010280  65 66 74 20 61 6E 64 20  6F 6E 65 20 66 6F 72 20  72 69 67 68 74 2E 0D 0A  32 29 09 53 65 74 20 74  eft and one for right.2)Set t
000102A0  68 65 20 6C 65 66 74 20  76 6F 69 63 65 20 70 61  6E 20 70 6F 73 69 74 69  6F 6E 20 61 6C 6C 20 74  he left voice pan position all t
000102C0  68 65 20 77 61 79 20 6C  65 66 74 2E 0D 0A 33 29  09 53 65 74 20 74 68 65  20 72 69 67 68 74 20 76  he way left.3)Set the right v
000102E0  6F 69 63 65 20 70 61 6E  20 70 6F 73 69 74 69 6F  6E 20 61 6C 6C 20 74 68  65 20 77 61 79 20 72 69  oice pan position all the way ri
00010300  67 68 74 2E 0D 0A 34 29  09 53 65 74 20 62 6F 74  68 20 76 6F 69 63 65 20  76 6F 6C 75 6D 65 73 20  ght.4)Set both voice volumes 
00010320  74 6F 20 74 68 65 20 73  61 6D 65 20 76 61 6C 75  65 2E 0D 0A 35 29 09 41  6C 6C 6F 63 61 74 65 20  to the same value.5)Allocate 
00010340  32 20 63 68 75 6E 6B 73  20 6F 66 20 55 6C 74 72  61 53 6F 75 6E 64 20 44  52 41 4D 20 6F 66 20 74  2 chunks of UltraSound DRAM of t
00010360  68 65 20 73 61 6D 65 20  73 69 7A 65 2C 20 73 61  79 20 32 30 4B 20 61 70  69 65 63 65 2E 0D 0A 36  he same size, say 20K apiece.6
00010380  29 09 52 65 61 64 20 69  6E 20 34 30 4B 20 6F 66  20 73 74 65 72 65 6F 20  64 61 74 61 2E 0D 0A 37  )Read in 40K of stereo data.7
000103A0  29 09 44 65 2D 69 6E 74  65 72 6C 65 61 76 65 20  64 61 74 61 20 69 6E 74  6F 20 32 30 4B 20 6F 66  )De-interleave data into 20K of
000103C0  20 6C 65 66 74 20 64 61  74 61 20 61 6E 64 20 32  30 4B 20 6F 66 20 72 69  67 68 74 20 64 61 74 61   left data and 20K of right data
000103E0  2E 0D 0A 38 29 09 44 4D  41 20 6C 65 66 74 20 62  75 66 66 65 72 20 69 6E  74 6F 20 44 52 41 4D 20  .8)DMA left buffer into DRAM 
00010400  62 75 66 66 65 72 20 23  31 2E 0D 0A 39 29 09 44  4D 41 20 72 69 67 68 74  20 62 75 66 66 65 72 20  buffer #1.9)DMA right buffer 
00010420  69 6E 74 6F 20 44 52 41  4D 20 62 75 66 66 65 72  20 23 32 2E 0D 0A 31 30  29 09 50 72 69 6D 65 20  into DRAM buffer #2.10)Prime 
00010440  72 69 67 68 74 20 76 6F  69 63 65 20 74 6F 20 6C  6F 6F 70 20 6F 6E 20 61  6C 6C 20 32 30 4B 20 6F  right voice to loop on all 20K o
00010460  66 20 64 61 74 61 20 66  6F 72 65 76 65 72 2E 20  4E 6F 20 49 52 51 2E 0D  0A 31 31 29 09 50 72 69  f data forever. No IRQ.11)Pri
00010480  6D 65 20 6C 65 66 74 20  76 6F 69 63 65 20 74 6F  20 70 6C 61 79 20 31 30  4B 20 6F 66 20 69 74 73  me left voice to play 10K of its
000104A0  20 64 61 74 61 20 77 69  74 68 20 74 68 65 20 72  6F 6C 6C 6F 76 65 72 20  66 65 61 74 75 72 65 20   data with the rollover feature 
000104C0  65 6E 61 62 6C 65 64 20  28 53 65 65 20 64 69 73  63 75 73 73 69 6F 6E 20  6F 6E 20 73 65 61 6D 6C  enabled (See discussion on seaml
000104E0  65 73 73 20 64 69 67 69  74 61 6C 20 70 6C 61 79  62 61 63 6B 20 61 62 6F  76 65 29 2E 0D 0A 31 32  ess digital playback above).12
00010500  29 09 53 74 61 72 74 20  62 6F 74 68 20 63 68 61  6E 6E 65 6C 73 20 75 70  20 61 73 20 63 6C 6F 73  )Start both channels up as clos
00010520  65 20 74 6F 67 65 74 68  65 72 20 61 73 20 70 6F  73 73 69 62 6C 65 20 73  6F 20 74 68 65 79 20 74  e together as possible so they t
00010540  72 61 63 6B 20 74 6F 67  65 74 68 65 72 2E 20 54  68 65 20 72 69 67 68 74  20 63 68 61 6E 6E 65 6C  rack together. The right channel
00010560  20 77 69 6C 6C 20 6E 6F  74 20 62 65 20 74 6F 75  63 68 65 64 2C 20 65 78  63 65 70 74 20 74 6F 20   will not be touched, except to 
00010580  44 4D 41 20 6E 65 77 20  64 61 74 61 20 69 6E 74  6F 20 69 74 73 20 62 75  66 66 65 72 2E 0D 0A 31  DMA new data into its buffer.1
000105A0  33 29 09 41 74 20 74 68  69 73 20 70 6F 69 6E 74  20 74 68 65 20 73 6F 66  74 77 61 72 65 20 77 69  3)At this point the software wi
000105C0  6C 6C 20 6C 6F 6F 70 20  6F 6E 20 74 68 65 20 66  6F 6C 6C 6F 77 69 6E 67  20 73 74 65 70 73 20 75  ll loop on the following steps u
000105E0  6E 74 69 6C 20 74 68 65  20 64 61 74 61 20 69 73  20 65 78 68 61 75 73 74  65 64 2E 20 54 68 65 20  ntil the data is exhausted. The 
00010600  72 6F 6C 6C 6F 76 65 72  20 77 69 6C 6C 20 61 6C  6C 6F 77 20 74 68 65 20  73 6F 66 74 77 61 72 65  rollover will allow the software
00010620  20 74 6F 20 70 6C 61 79  20 68 61 6C 66 20 74 68  65 20 62 75 66 66 65 72  20 61 6E 64 20 67 65 74   to play half the buffer and get
00010640  20 6E 6F 74 69 66 69 65  64 20 77 68 65 6E 20 69  74 20 68 61 73 20 66 69  6E 69 73 68 65 64 2C 20   notified when it has finished, 
00010660  62 75 74 20 74 68 65 20  70 6C 61 79 62 61 63 6B  20 77 69 6C 6C 20 63 6F  6E 74 69 6E 75 65 20 75  but the playback will continue u
00010680  6E 69 6E 74 65 72 72 75  70 74 65 64 2E 20 57 68  65 6E 20 74 68 65 20 72  6F 6C 6C 6F 76 65 72 20  ninterrupted. When the rollover 
000106A0  49 52 51 20 68 61 70 70  65 6E 73 2C 20 74 68 65  20 6C 65 66 74 20 76 6F  69 63 65 20 77 69 6C 6C  IRQ happens, the left voice will
000106C0  20 62 65 20 63 68 61 6E  67 65 64 20 74 6F 20 6C  6F 6F 70 20 61 74 20 74  68 65 20 32 30 4B 20 70   be changed to loop at the 20K p
000106E0  6F 73 69 74 69 6F 6E 2E  20 41 74 20 74 68 69 73  20 70 6F 69 6E 74 20 74  68 65 20 73 6F 66 74 77  osition. At this point the softw
00010700  61 72 65 20 77 69 6C 6C  20 62 65 20 61 62 6C 65  20 74 6F 20 6C 6F 61 64  20 74 68 65 20 6E 65 78  are will be able to load the nex
00010720  74 20 31 30 4B 20 6F 66  20 6C 65 66 74 20 63 68  61 6E 6E 65 6C 20 64 61  74 61 20 69 6E 74 6F 20  t 10K of left channel data into 
00010740  74 68 65 20 46 49 52 53  54 20 31 30 4B 20 6F 66  20 74 68 65 20 6C 65 66  74 20 63 68 61 6E 6E 65  the FIRST 10K of the left channe
00010760  6C 20 44 52 41 4D 2E 20  54 68 65 20 72 69 67 68  74 20 63 68 61 6E 6E 65  6C 20 69 73 20 61 6C 73  l DRAM. The right channel is als
00010780  6F 20 73 65 6E 74 20 31  30 4B 20 6F 66 20 64 61  74 61 20 69 6E 74 6F 20  69 74 73 20 46 49 52 53  o sent 10K of data into its FIRS
000107A0  54 20 31 30 4B 2E 0D 0A  31 34 29 09 4E 6F 77 20  65 61 63 68 20 63 68 61  6E 6E 65 6C 20 68 61 73  T 10K.14)Now each channel has
000107C0  20 74 68 65 20 64 61 74  61 20 74 6F 20 70 6C 61  79 20 77 68 65 6E 20 74  68 65 79 20 6C 6F 6F 70   the data to play when they loop
000107E0  20 61 74 20 74 68 65 69  72 20 32 30 4B 20 6D 61  72 6B 73 2E 0D 0A 31 35  29 09 57 68 65 6E 20 74   at their 20K marks.15)When t
00010800  68 65 20 6C 65 66 74 20  63 68 61 6E 6E 65 6C 27  73 20 6C 6F 6F 70 20 49  52 51 20 68 61 70 70 65  he left channel's loop IRQ happe
00010820  6E 73 2C 20 62 6F 74 68  20 74 68 65 20 6C 65 66  74 20 61 6E 64 20 72 69  67 68 74 20 63 68 61 6E  ns, both the left and right chan
00010840  6E 65 6C 20 63 61 6E 20  62 65 20 73 65 6E 74 20  6D 6F 72 65 20 64 61 74  61 20 69 6E 74 6F 20 74  nel can be sent more data into t
00010860  68 65 69 72 20 53 45 43  4F 4E 44 20 31 30 4B 20  62 75 66 66 65 72 2E 20  41 6C 73 6F 2C 20 74 68  heir SECOND 10K buffer. Also, th
00010880  65 20 6C 65 66 74 20 63  68 61 6E 6E 65 6C 27 73  20 6C 6F 6F 70 69 6E 67  20 77 69 6C 6C 20 62 65  e left channel's looping will be
000108A0  20 74 75 72 6E 65 64 20  6F 66 66 20 61 6E 64 20  69 74 20 77 69 6C 6C 20  62 65 20 74 6F 6C 64 20   turned off and it will be told 
000108C0  74 6F 20 72 6F 6C 6C 6F  76 65 72 20 61 74 20 69  74 73 20 31 30 4B 20 6D  61 72 6B 20 61 67 61 69  to rollover at its 10K mark agai
000108E0  6E 2E 20 4E 6F 77 20 62  6F 74 68 20 63 68 61 6E  6E 65 6C 27 73 20 61 72  65 20 72 65 61 64 79 20  n. Now both channel's are ready 
00010900  74 6F 20 70 6C 61 79 20  74 68 72 75 20 74 68 65  69 72 20 31 30 4B 20 6D  61 72 6B 73 20 77 69 74  to play thru their 10K marks wit
00010920  68 20 6E 6F 20 69 6E 74  65 72 72 75 70 74 69 6F  6E 2E 0D 0A 31 36 29 09  47 6F 20 62 61 63 6B 20  h no interruption.16)Go back 
00010940  74 6F 20 73 74 65 70 20  31 33 20 61 6E 64 20 6C  6F 6F 70 0D 0A 0D 0A 54  68 65 20 61 62 6F 76 65  to step 13 and loopThe above
00010960  20 61 6C 67 6F 72 69 74  68 6D 20 64 6F 65 73 20  6E 6F 74 20 64 65 74 61  69 6C 20 74 68 65 20 73   algorithm does not detail the s
00010980  74 61 72 74 75 70 20 63  6F 6E 64 69 74 69 6F 6E  73 20 6F 72 20 74 68 65  20 73 68 75 74 64 6F 77  tartup conditions or the shutdow
000109A0  6E 20 63 6F 6E 64 69 74  69 6F 6E 73 2E 20 0D 0A  0D 0A 54 68 69 6E 67 73  20 74 68 61 74 20 79 6F  n conditions. Things that yo
000109C0  75 20 77 69 6C 6C 20 6E  65 65 64 20 74 6F 20 61  63 63 6F 6D 6F 64 61 74  65 20 61 72 65 3A 0D 0A  u will need to accomodate are:
000109E0  0D 0A 31 29 09 4C 65 73  73 20 74 68 61 6E 20 31  20 62 75 66 66 65 72 20  66 75 6C 6C 20 6F 66 20  1)Less than 1 buffer full of 
00010A00  64 61 74 61 2E 0D 0A 32  29 09 48 6F 77 20 74 6F  20 74 65 72 6D 69 6E 61  74 65 20 77 68 65 6E 20  data.2)How to terminate when 
00010A20  64 61 74 61 20 65 6E 64  73 20 69 6E 20 66 69 72  73 74 20 62 75 66 66 65  72 2E 20 59 6F 75 20 6D  data ends in first buffer. You m
00010A40  75 73 74 20 61 6C 6C 6F  77 20 69 74 20 74 6F 20  6C 6F 6F 70 20 62 61 63  6B 20 66 72 6F 6D 20 74  ust allow it to loop back from t
00010A60  68 65 20 65 6E 64 20 61  6E 64 20 74 68 65 6E 20  73 74 6F 70 20 61 74 20  74 68 65 20 65 6E 64 20  he end and then stop at the end 
00010A80  6F 66 20 74 68 65 20 64  61 74 61 20 69 6E 73 74  65 61 64 20 6F 66 20 72  6F 6C 6C 69 6E 67 20 6F  of the data instead of rolling o
00010AA0  76 65 72 20 61 74 20 74  68 65 20 6D 69 64 64 6C  65 2E 20 42 6F 74 68 20  72 69 67 68 74 20 61 6E  ver at the middle. Both right an
00010AC0  64 20 6C 65 66 74 20 6D  75 73 74 20 62 65 20 74  61 6B 65 6E 20 63 61 72  65 20 6F 66 2E 0D 0A 33  d left must be taken care of.3
00010AE0  29 09 48 6F 77 20 74 6F  20 74 65 72 6D 69 6E 61  74 65 20 77 68 65 6E 20  64 61 74 61 20 65 6E 64  )How to terminate when data end
00010B00  73 20 69 6E 20 74 68 65  20 73 65 63 6F 6E 64 20  62 75 66 66 65 72 2E 20  20 41 66 74 65 72 20 66  s in the second buffer.  After f
00010B20  69 6C 6C 69 6E 67 20 69  6E 20 74 68 65 20 64 61  74 61 20 69 6E 20 74 68  65 20 73 65 63 6F 6E 64  illing in the data in the second
00010B40  20 62 75 66 66 65 72 2C  20 79 6F 75 20 63 61 6E  20 74 75 72 6E 20 6F 66  66 20 74 68 65 20 72 6F   buffer, you can turn off the ro
00010B60  6C 6C 69 6E 67 20 6F 76  65 72 20 61 74 20 74 68  65 20 6D 69 64 64 6C 65  20 61 6E 64 20 74 65 6C  lling over at the middle and tel
00010B80  6C 20 69 74 20 74 6F 20  73 74 6F 70 20 61 74 20  74 68 65 20 65 6E 64 20  6F 66 20 74 68 65 20 64  l it to stop at the end of the d
00010BA0  61 74 61 20 69 6E 20 74  68 65 20 73 65 63 6F 6E  64 20 62 75 66 66 65 72  2E 0D 0A 0D 0A 42 65 20  ata in the second buffer.Be 
00010BC0  73 75 72 65 20 79 6F 75  20 75 6E 64 65 72 73 74  61 6E 64 20 61 6C 6C 20  74 68 65 20 73 74 61 72  sure you understand all the star
00010BE0  74 69 6E 67 20 61 6E 64  20 65 6E 64 69 6E 67 20  70 6F 73 73 69 62 69 6C  74 69 65 73 20 77 68 65  ting and ending possibilties whe
00010C00  6E 20 63 6F 64 69 6E 67  20 79 6F 75 20 61 70 70  6C 69 63 61 74 69 6F 6E  2E 0D 0A 0D 0A 54 68 65  n coding you application.The
00010C20  20 62 61 73 69 63 20 69  64 65 61 20 69 73 20 74  6F 20 6C 65 74 20 74 68  65 20 72 69 67 68 74 20   basic idea is to let the right 
00010C40  76 6F 69 63 65 20 6C 6F  6F 70 20 66 6F 72 65 76  65 72 20 6F 6E 20 61 20  62 75 66 66 65 72 20 6F  voice loop forever on a buffer o
00010C60  66 20 64 61 74 61 20 61  6E 64 20 66 65 65 64 20  69 74 20 64 61 74 61 20  62 61 73 65 64 20 6F 6E  f data and feed it data based on
00010C80  20 49 52 51 20 67 65 6E  65 72 61 74 65 64 20 66  72 6F 6D 20 74 68 65 20  6C 65 66 74 20 63 68 61   IRQ generated from the left cha
00010CA0  6E 6E 65 6C 2E 20 54 68  65 20 6C 65 66 74 20 63  68 61 6E 6E 65 6C 20 63  61 6E 20 62 65 20 6D 6F  nnel. The left channel can be mo
00010CC0  6E 69 74 6F 72 65 64 20  76 69 61 20 74 68 65 20  72 6F 6C 6C 6F 76 65 72  20 66 65 61 74 75 72 65  nitored via the rollover feature
00010CE0  20 74 6F 20 67 65 6E 65  72 61 74 65 20 61 6E 64  20 49 52 51 20 61 74 20  74 68 65 20 68 61 6C 66   to generate and IRQ at the half
00010D00  77 61 79 20 70 6F 69 6E  74 20 61 6E 64 20 61 6E  20 49 52 51 20 61 74 20  74 68 65 20 6C 6F 6F 70  way point and an IRQ at the loop
00010D20  20 70 6F 69 6E 74 20 61  74 20 74 68 65 20 65 6E  64 20 6F 66 20 74 68 65  20 62 75 66 66 65 72 20   point at the end of the buffer 
00010D40  74 6F 20 6B 6E 6F 77 20  77 68 65 6E 20 74 68 65  20 73 65 63 6F 6E 64 20  62 75 66 66 65 72 20 66  to know when the second buffer f
00010D60  69 6E 69 73 68 65 73 2E  20 44 61 74 61 20 77 69  6C 6C 20 74 68 65 6E 20  62 65 20 73 65 6E 74 20  inishes. Data will then be sent 
00010D80  74 6F 20 42 4F 54 48 20  76 6F 69 63 65 73 20 66  6F 72 20 74 68 65 20 70  6F 72 74 69 6F 6E 20 6F  to BOTH voices for the portion o
00010DA0  66 20 64 61 74 61 20 74  68 61 74 20 69 74 20 6A  75 73 74 20 66 69 6E 69  73 68 65 64 20 70 6C 61  f data that it just finished pla
00010DC0  79 69 6E 67 2E 0D 0A 0D  0A 0D 0A 48 61 72 64 77  61 72 65 20 43 6F 6E 74  72 6F 6C 0D 0A 3D 3D 3D  ying.Hardware Control===
00010DE0  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 0D 0A 0D  0A 54 68 69 73 20 6D 65  74 68 6F 64 20 68 61 73  =============This method has
00010E00  20 74 68 65 20 61 64 76  61 6E 74 61 67 65 20 6F  66 20 6E 6F 74 20 6E 65  65 64 69 6E 67 20 74 6F   the advantage of not needing to
00010E20  20 64 65 2D 69 6E 74 65  72 6C 65 61 76 65 20 74  68 65 20 64 61 74 61 20  62 65 66 6F 72 65 20 44   de-interleave the data before D
00010E40  4D 41 69 6E 67 20 69 74  20 69 6E 74 6F 20 55 6C  74 72 61 53 6F 75 6E 64  20 44 52 41 4D 3A 20 74  MAing it into UltraSound DRAM: t
00010E60  68 65 20 64 61 74 61 20  69 73 20 20 73 65 6E 74  20 74 6F 20 44 52 41 4D  20 69 6E 20 74 68 65 20  he data is  sent to DRAM in the 
00010E80  69 6E 74 65 72 6C 65 61  76 65 64 20 66 6F 72 6D  61 74 2E 20 54 68 69 73  20 6D 65 61 6E 73 20 74  interleaved format. This means t
00010EA0  68 61 74 20 61 20 76 6F  69 63 65 20 6D 75 73 74  20 62 65 20 61 62 6C 65  20 74 6F 20 70 6C 61 79  hat a voice must be able to play
00010EC0  20 65 76 65 72 79 20 6F  74 68 65 72 20 73 61 6D  70 6C 65 20 74 6F 20 63  6F 72 72 65 63 74 6C 79   every other sample to correctly
00010EE0  20 73 65 70 61 72 61 74  65 20 74 68 65 20 72 69  67 68 74 20 61 6E 64 20  6C 65 66 74 20 63 68 61   separate the right and left cha
00010F00  6E 6E 65 6C 2E 20 49 74  20 69 73 20 70 6F 73 73  69 62 6C 65 20 74 6F 20  73 65 74 20 75 70 20 74  nnel. It is possible to set up t
00010F20  68 65 20 47 46 31 20 61  6E 64 20 74 68 65 20 32  20 76 6F 69 63 65 73 20  74 6F 20 64 6F 20 74 68  he GF1 and the 2 voices to do th
00010F40  69 73 2C 20 68 6F 77 65  76 65 72 2C 20 69 74 20  77 69 6C 6C 20 6F 6E 6C  79 20 77 6F 72 6B 20 66  is, however, it will only work f
00010F60  6F 72 20 32 20 75 73 61  62 6C 65 20 66 72 65 71  65 6E 63 69 65 73 2E 20  28 34 34 31 30 30 20 61  or 2 usable freqencies. (44100 a
00010F80  6E 64 20 32 32 30 35 30  29 2E 20 41 6E 79 20 6F  74 68 65 72 20 66 72 65  71 75 65 6E 63 69 65 73  nd 22050). Any other frequencies
00010FA0  20 6D 75 73 74 20 62 65  20 64 6F 6E 65 20 75 73  69 6E 67 20 74 68 65 20  73 6F 66 74 77 61 72 65   must be done using the software
00010FC0  20 63 6F 6E 74 72 6F 6C  20 64 65 2D 69 6E 74 65  72 6C 65 61 76 69 6E 67  20 6D 65 74 68 6F 64 2E   control de-interleaving method.
00010FE0  0D 0A 0D 0A 0C 54 68 65  20 74 68 65 6F 72 79 20  62 65 68 69 6E 64 20 68  6F 77 20 74 6F 20 61 63  The theory behind how to ac
00011000  68 69 65 76 65 20 74 68  69 73 20 69 73 20 71 75  69 74 65 20 63 6F 6D 70  6C 65 78 2E 20 49 74 20  hieve this is quite complex. It 
00011020  69 6E 76 6F 6C 76 65 73  20 75 73 69 6E 67 20 74  68 65 20 23 20 6F 66 20  61 63 74 69 76 65 20 76  involves using the # of active v
00011040  6F 69 63 65 73 20 61 6E  64 20 74 68 65 20 76 6F  69 63 65 27 73 20 66 72  65 71 75 65 6E 63 79 20  oices and the voice's frequency 
00011060  63 6F 6E 74 72 6F 6C 20  72 65 67 69 73 74 65 72  20 74 6F 20 67 65 74 20  69 74 20 74 6F 20 67 72  control register to get it to gr
00011080  61 62 20 74 68 65 20 63  6F 72 72 65 63 74 20 73  61 6D 70 6C 65 73 20 61  74 20 74 68 65 20 70 72  ab the correct samples at the pr
000110A0  6F 70 65 72 20 66 72 65  71 75 65 6E 63 79 2E 20  20 48 65 72 65 20 69 73  20 74 68 65 20 73 65 74  oper frequency.  Here is the set
000110C0  75 70 20 6E 65 63 65 73  73 61 72 79 20 74 6F 20  70 6C 61 79 62 61 63 6B  20 34 34 31 30 30 20 48  up necessary to playback 44100 H
000110E0  7A 20 73 74 65 72 65 6F  20 61 6E 64 20 32 32 30  35 30 20 48 7A 20 73 74  65 72 65 6F 20 64 61 74  z stereo and 22050 Hz stereo dat
00011100  61 3A 0D 0A 0D 0A 34 34  31 30 30 20 48 7A 3A 09  53 65 74 20 74 68 65 20  23 20 6F 66 20 61 63 74  a:44100 Hz:Set the # of act
00011120  69 76 65 20 76 6F 69 63  65 73 20 74 6F 20 31 34  20 61 6E 64 20 73 65 74  20 62 6F 74 68 20 76 6F  ive voices to 14 and set both vo
00011140  69 63 65 73 20 70 6C 61  79 62 61 63 6B 20 72 61  74 65 20 74 6F 20 38 38  32 30 30 20 68 7A 2E 0D  ices playback rate to 88200 hz.
00011160  0A 0D 0A 32 32 30 35 30  20 48 7A 3A 09 53 65 74  20 74 68 65 20 23 20 6F  66 20 61 63 74 69 76 65  22050 Hz:Set the # of active
00011180  20 76 6F 69 63 65 73 20  74 6F 20 32 38 20 61 6E  64 20 73 65 74 20 62 6F  74 68 20 76 6F 69 63 65   voices to 28 and set both voice
000111A0  73 20 70 6C 61 79 62 61  63 6B 20 72 61 74 65 20  74 6F 20 34 34 31 30 30  20 68 7A 0D 0A 0D 0A 54  s playback rate to 44100 hzT
000111C0  68 65 73 65 20 74 77 6F  20 63 6F 6E 66 69 67 75  72 61 74 69 6F 6E 73 20  77 69 6C 6C 20 6D 61 6B  hese two configurations will mak
000111E0  65 20 62 6F 74 68 20 76  6F 69 63 65 73 20 68 61  76 65 20 61 20 66 72 65  71 75 65 6E 63 79 20 63  e both voices have a frequency c
00011200  6F 6E 74 72 6F 6C 20 72  65 67 69 73 74 65 72 20  65 71 75 61 6C 20 74 6F  20 32 2E 20 54 68 65 20  ontrol register equal to 2. The 
00011220  66 72 65 71 75 65 6E 63  79 20 63 6F 6E 74 72 6F  6C 20 72 65 67 69 73 74  65 72 20 68 6F 6C 64 73  frequency control register holds
00011240  20 74 68 65 20 61 6D 6F  75 6E 74 20 61 64 64 65  64 20 74 6F 20 74 68 65  20 63 75 72 72 65 6E 74   the amount added to the current
00011260  20 76 6F 69 63 65 20 70  6C 61 79 62 61 63 6B 20  6C 6F 63 61 74 69 6F 6E  20 74 6F 20 67 65 74 20   voice playback location to get 
00011280  74 68 65 20 6E 65 78 74  20 70 6C 61 79 62 61 63  6B 20 6C 6F 63 61 74 69  6F 6E 2E 0D 0A 0D 0A 4E  the next playback location.N
000112A0  6F 72 6D 61 6C 6C 79 2C  20 74 68 69 73 20 6E 75  6D 62 65 72 20 69 73 20  61 20 66 72 61 63 74 69  ormally, this number is a fracti
000112C0  6F 6E 20 73 6F 20 69 6E  74 65 72 70 6F 6C 61 74  69 6F 6E 20 69 73 20 64  6F 6E 65 20 74 6F 20 67  on so interpolation is done to g
000112E0  65 6E 65 72 61 74 65 20  69 6E 74 65 72 6D 65 64  69 61 74 65 20 70 6F 69  6E 74 73 20 62 65 74 77  enerate intermediate points betw
00011300  65 65 6E 20 73 75 63 63  65 73 73 69 76 65 20 6C  6F 63 61 74 69 6F 6E 73  2E 20 57 69 74 68 20 69  een successive locations. With i
00011320  6E 74 65 72 6C 65 61 76  65 64 20 64 61 74 61 2C  20 77 65 20 64 6F 6E 27  74 20 77 61 6E 74 20 74  nterleaved data, we don't want t
00011340  6F 20 69 6E 74 65 72 70  6F 6C 61 74 65 20 73 69  6E 63 65 20 74 68 65 20  6E 65 69 67 68 62 6F 72  o interpolate since the neighbor
00011360  69 6E 67 20 64 61 74 61  20 70 6F 69 6E 74 73 20  62 65 6C 6F 6E 67 20 74  6F 20 74 68 65 20 6F 74  ing data points belong to the ot
00011380  68 65 72 20 63 68 61 6E  6E 65 6C 2E 20 20 57 65  20 77 61 6E 74 20 74 6F  20 63 6F 6D 70 6C 65 74  her channel.  We want to complet
000113A0  65 6C 79 20 73 6B 69 70  20 6F 76 65 72 20 74 68  65 20 70 6F 69 6E 74 20  61 66 74 65 72 20 74 68  ely skip over the point after th
000113C0  65 20 63 75 72 72 65 6E  74 20 6F 6E 65 2C 20 61  6E 64 20 67 6F 20 74 6F  20 6F 75 72 20 63 75 72  e current one, and go to our cur
000113E0  72 65 6E 74 20 70 6F 73  69 74 69 6F 6E 20 70 6C  75 73 20 32 2E 20 0D 0A  0D 0A 54 68 65 20 6E 75  rent position plus 2. The nu
00011400  6D 62 65 72 20 6F 66 20  61 63 74 69 76 65 20 76  6F 69 63 65 73 20 73 65  6C 65 63 74 65 64 20 77  mber of active voices selected w
00011420  69 6C 6C 20 64 65 74 65  72 6D 69 6E 65 20 74 68  65 20 75 70 64 61 74 65  20 72 61 74 65 2E 20 54  ill determine the update rate. T
00011440  68 65 20 6D 6F 72 65 20  76 6F 69 63 65 73 20 74  68 61 74 20 61 72 65 20  61 63 74 69 76 65 2C 20  he more voices that are active, 
00011460  74 68 65 20 6C 6F 6E 67  65 72 20 74 69 6D 65 20  62 65 74 77 65 65 6E 20  75 70 64 61 74 65 73 2C  the longer time between updates,
00011480  20 74 68 75 73 20 73 6C  6F 77 69 6E 67 20 64 6F  77 6E 20 74 68 65 20 66  72 65 71 75 65 6E 63 79   thus slowing down the frequency
000114A0  2E 20 31 34 20 61 63 74  69 76 65 20 76 6F 69 63  65 73 20 77 69 6C 6C 20  67 69 76 65 20 61 6E 64  . 14 active voices will give and
000114C0  20 75 70 64 61 74 65 20  72 61 74 65 20 6F 66 20  61 62 6F 75 74 20 32 32  2E 35 20 6D 69 63 72 6F   update rate of about 22.5 micro
000114E0  73 65 63 6F 6E 64 73 20  28 34 34 31 30 30 20 68  7A 29 2C 20 77 68 65 72  65 61 73 20 32 38 20 76  seconds (44100 hz), whereas 28 v
00011500  6F 69 63 65 73 20 77 69  6C 6C 20 67 69 76 65 20  61 6E 64 20 75 70 64 61  74 65 20 72 61 74 65 20  oices will give and update rate 
00011520  6F 66 20 61 62 6F 75 74  20 34 35 20 6D 69 63 72  6F 73 65 63 6F 6E 64 73  20 28 32 32 30 35 30 20  of about 45 microseconds (22050 
00011540  68 7A 29 2E 20 0D 0A 0D  0A 54 68 65 20 69 6E 74  69 61 6C 69 7A 61 74 69  6F 6E 20 6F 66 20 74 68  hz). The intialization of th
00011560  65 20 76 6F 69 63 65 73  20 69 6E 20 74 68 69 73  20 6D 6F 64 65 20 77 69  6C 6C 20 6F 62 76 69 6F  e voices in this mode will obvio
00011580  75 73 6C 79 20 62 65 20  64 69 66 66 65 72 65 6E  74 2E 20 45 73 73 65 6E  6E 74 69 61 6C 6C 79 2C  usly be different. Essenntially,
000115A0  20 74 68 65 20 76 6F 69  63 65 73 20 6D 75 73 74  20 62 65 20 73 65 74 20  75 70 20 74 6F 20 70 6C   the voices must be set up to pl
000115C0  61 79 20 74 68 65 20 73  61 6D 65 20 64 61 74 61  20 62 75 74 20 6F 66 66  73 65 74 20 74 68 65 69  ay the same data but offset thei
000115E0  72 20 73 74 61 72 74 20  61 6E 64 20 65 6E 64 20  70 6F 69 6E 74 73 20 62  79 20 6F 6E 65 20 6F 72  r start and end points by one or
00011600  20 74 77 6F 20 62 79 74  65 73 2C 20 64 65 70 65  6E 64 69 6E 67 20 6F 6E  20 77 68 65 74 68 65 72   two bytes, depending on whether
00011620  20 69 74 20 69 73 20 61  6E 20 38 2D 20 6F 72 20  31 36 2D 62 69 74 20 73  61 6D 70 6C 65 2E 20 0D   it is an 8- or 16-bit sample. 
00011640  0A 09 0D 0A 0D 0A 33 2E  31 32 20 43 2D 73 70 65  63 69 66 69 63 20 69 6E  66 6F 72 6D 61 74 69 6F  3.12 C-specific informatio
00011660  6E 0D 0A 0D 0A 43 75 72  72 65 6E 74 6C 79 2C 20  31 30 20 64 69 66 66 65  72 65 6E 74 20 43 20 6D  nCurrently, 10 different C m
00011680  65 6D 6F 72 79 20 6D 6F  64 65 6C 2F 63 6F 6D 70  69 6C 65 72 20 63 6F 6E  66 69 67 75 72 61 74 69  emory model/compiler configurati
000116A0  6F 6E 73 20 61 72 65 20  73 75 70 70 6C 69 65 64  2E 20 20 4C 61 72 67 65  2C 20 6D 65 64 69 75 6D  ons are supplied.  Large, medium
000116C0  2C 20 73 6D 61 6C 6C 20  61 6E 64 20 74 69 6E 79  20 6D 6F 64 65 6C 73 20  66 6F 72 20 42 6F 72 6C  , small and tiny models for Borl
000116E0  61 6E 64 20 61 6E 64 20  4D 69 63 72 6F 73 6F 66  74 20 63 6F 6D 70 69 6C  65 72 73 20 61 72 65 20  and and Microsoft compilers are 
00011700  61 76 61 69 6C 61 62 6C  65 2C 20 61 73 20 77 65  6C 6C 20 61 73 20 66 6C  61 74 20 6D 6F 64 65 6C  available, as well as flat model
00011720  20 66 6F 72 20 57 61 74  43 6F 6D 20 61 6E 64 20  4D 65 74 61 57 61 72 65  20 63 6F 6D 70 69 6C 65   for WatCom and MetaWare compile
00011740  72 73 2E 20 20 54 68 65  20 6C 65 76 65 6C 20 30  20 6C 69 62 72 61 72 79  20 63 6F 6E 74 61 69 6E  rs.  The level 0 library contain
00011760  73 20 74 68 65 20 6C 6F  77 65 73 74 20 6C 65 76  65 6C 20 66 75 6E 63 74  69 6F 6E 20 63 61 6C 6C  s the lowest level function call
00011780  73 20 74 68 61 74 20 74  61 6C 6B 20 64 69 72 65  63 74 6C 79 20 74 6F 20  74 68 65 20 68 61 72 64  s that talk directly to the hard
000117A0  77 61 72 65 2E 20 20 54  68 65 20 6C 65 76 65 6C  20 31 20 6C 69 62 72 61  72 79 20 69 73 20 61 20  ware.  The level 1 library is a 
000117C0  6C 69 74 74 6C 65 20 68  69 67 68 65 72 20 61 6E  64 20 63 6F 6E 74 61 69  6E 73 20 66 75 6E 63 74  little higher and contains funct
000117E0  69 6F 6E 73 20 74 68 61  74 20 63 61 6C 6C 20 6C  65 76 65 6C 20 30 20 66  75 6E 63 74 69 6F 6E 73  ions that call level 0 functions
00011800  2E 20 20 54 68 65 20 33  44 20 6C 69 62 72 61 72  69 65 73 20 63 6F 6E 74  61 69 6E 20 74 68 65 20  .  The 3D libraries contain the 
00011820  66 75 6E 63 74 69 6F 6E  73 20 6E 65 63 65 73 73  61 72 79 20 66 6F 72 20  69 6D 70 6C 65 6D 65 6E  functions necessary for implemen
00011840  74 69 6E 67 20 74 68 65  20 46 6F 63 61 6C 20 50  6F 69 6E 74 20 33 44 20  73 6F 75 6E 64 73 2E 20  ting the Focal Point 3D sounds. 
00011860  20 42 6F 72 6C 61 6E 64  20 43 2B 2B 20 32 2E 30  20 61 6E 64 20 33 2E 31  2C 20 4D 69 63 72 6F 73   Borland C++ 2.0 and 3.1, Micros
00011880  6F 66 74 20 43 20 36 2E  30 2C 20 57 61 74 63 6F  6D 20 43 39 2E 30 2F 33  38 36 2C 20 61 6E 64 20  oft C 6.0, Watcom C9.0/386, and 
000118A0  4D 65 74 61 77 61 72 65  20 48 69 67 68 20 43 2F  43 2B 2B 20 77 65 72 65  20 75 73 65 64 20 74 6F  Metaware High C/C++ were used to
000118C0  20 74 65 73 74 20 74 68  65 20 6C 69 62 72 61 72  79 20 72 6F 75 74 69 6E  65 73 2E 20 20 54 68 65   test the library routines.  The
000118E0  73 65 20 61 72 65 20 74  68 65 20 6E 61 6D 69 6E  67 20 63 6F 6E 76 65 6E  74 69 6F 6E 73 20 66 6F  se are the naming conventions fo
00011900  72 20 74 68 65 20 43 20  6C 69 62 72 61 72 69 65  73 3A 0D 0A 0D 0A 09 75  6C 74 72 61 30 6C 62 2E  r the C libraries:ultra0lb.
00011920  6C 69 62 20 4C 65 76 65  6C 20 30 2C 20 6C 61 72  67 65 20 6D 6F 64 65 6C  2C 20 20 42 6F 72 6C 61  lib Level 0, large model,  Borla
00011940  6E 64 20 43 0D 0A 09 75  6C 74 72 61 31 6C 62 2E  6C 69 62 20 4C 65 76 65  6C 20 31 2C 20 6C 61 72  nd Cultra1lb.lib Level 1, lar
00011960  67 65 20 6D 6F 64 65 6C  2C 20 20 42 6F 72 6C 61  6E 64 20 43 0D 0A 09 75  6C 74 33 44 5F 6C 62 2E  ge model,  Borland Cult3D_lb.
00011980  6C 69 62 20 20 20 20 20  20 33 44 2C 20 6C 61 72  67 65 20 6D 6F 64 65 6C  2C 20 20 42 6F 72 6C 61  lib      3D, large model,  Borla
000119A0  6E 64 20 43 0D 0A 0D 0A  09 75 6C 74 72 61 30 6D  62 2E 6C 69 62 20 4C 65  76 65 6C 20 30 2C 20 6D  nd Cultra0mb.lib Level 0, m
000119C0  65 64 69 75 6D 20 6D 6F  64 65 6C 2C 20 42 6F 72  6C 61 6E 64 20 43 0D 0A  09 75 6C 74 72 61 31 6D  edium model, Borland Cultra1m
000119E0  62 2E 6C 69 62 20 4C 65  76 65 6C 20 31 2C 20 6D  65 64 69 75 6D 20 6D 6F  64 65 6C 2C 20 42 6F 72  b.lib Level 1, medium model, Bor
00011A00  6C 61 6E 64 20 43 0D 0A  09 75 6C 74 33 44 5F 6D  62 2E 6C 69 62 20 20 20  20 20 20 33 44 2C 20 6D  land Cult3D_mb.lib      3D, m
00011A20  65 64 69 75 6D 20 6D 6F  64 65 6C 2C 20 42 6F 72  6C 61 6E 64 20 43 0D 0A  0C 09 75 6C 74 72 61 30  edium model, Borland Cultra0
00011A40  73 62 2E 6C 69 62 20 4C  65 76 65 6C 20 30 2C 20  73 6D 61 6C 6C 20 6D 6F  64 65 6C 2C 20 20 42 6F  sb.lib Level 0, small model,  Bo
00011A60  72 6C 61 6E 64 20 43 0D  0A 09 75 6C 74 72 61 31  73 62 2E 6C 69 62 20 4C  65 76 65 6C 20 31 2C 20  rland Cultra1sb.lib Level 1, 
00011A80  73 6D 61 6C 6C 20 6D 6F  64 65 6C 2C 20 20 42 6F  72 6C 61 6E 64 20 43 0D  0A 09 75 6C 74 33 44 5F  small model,  Borland Cult3D_
00011AA0  73 62 2E 6C 69 62 20 20  20 20 20 20 33 44 2C 20  73 6D 61 6C 6C 20 6D 6F  64 65 6C 2C 20 20 42 6F  sb.lib      3D, small model,  Bo
00011AC0  72 6C 61 6E 64 20 43 0D  0A 0D 0A 09 75 6C 74 72  61 30 74 62 2E 6C 69 62  20 4C 65 76 65 6C 20 30  rland Cultra0tb.lib Level 0
00011AE0  2C 20 74 69 6E 79 20 6D  6F 64 65 6C 2C 20 20 20  42 6F 72 6C 61 6E 64 20  43 0D 0A 09 75 6C 74 72  , tiny model,   Borland Cultr
00011B00  61 31 74 62 2E 6C 69 62  20 4C 65 76 65 6C 20 31  2C 20 74 69 6E 79 20 6D  6F 64 65 6C 2C 20 20 20  a1tb.lib Level 1, tiny model,   
00011B20  42 6F 72 6C 61 6E 64 20  43 0D 0A 09 75 6C 74 33  44 5F 74 62 2E 6C 69 62  20 20 20 20 20 20 33 44  Borland Cult3D_tb.lib      3D
00011B40  2C 20 74 69 6E 79 20 6D  6F 64 65 6C 2C 20 20 20  42 6F 72 6C 61 6E 64 20  43 0D 0A 0D 0A 09 75 6C  , tiny model,   Borland Cul
00011B60  74 72 61 30 6C 6D 2E 6C  69 62 20 4C 65 76 65 6C  20 30 2C 20 6C 61 72 67  65 20 6D 6F 64 65 6C 2C  tra0lm.lib Level 0, large model,
00011B80  20 20 4D 69 63 72 6F 73  6F 66 74 20 43 0D 0A 09  75 6C 74 72 61 31 6C 6D  2E 6C 69 62 20 4C 65 76    Microsoft Cultra1lm.lib Lev
00011BA0  65 6C 20 31 2C 20 6C 61  72 67 65 20 6D 6F 64 65  6C 2C 20 20 4D 69 63 72  6F 73 6F 66 74 20 43 0D  el 1, large model,  Microsoft C
00011BC0  0A 09 75 6C 74 33 44 5F  6C 6D 2E 6C 69 62 20 20  20 20 20 20 33 44 2C 20  6C 61 72 67 65 20 6D 6F  ult3D_lm.lib      3D, large mo
00011BE0  64 65 6C 2C 20 20 4D 69  63 72 6F 73 6F 66 74 20  43 0D 0A 0D 0A 09 75 6C  74 72 61 30 6D 6D 2E 6C  del,  Microsoft Cultra0mm.l
00011C00  69 62 20 4C 65 76 65 6C  20 30 2C 20 6D 65 64 69  75 6D 20 6D 6F 64 65 6C  2C 20 4D 69 63 72 6F 73  ib Level 0, medium model, Micros
00011C20  6F 66 74 20 43 0D 0A 09  75 6C 74 72 61 31 6D 6D  2E 6C 69 62 20 4C 65 76  65 6C 20 31 2C 20 6D 65  oft Cultra1mm.lib Level 1, me
00011C40  64 69 75 6D 20 6D 6F 64  65 6C 2C 20 4D 69 63 72  6F 73 6F 66 74 20 43 0D  0A 09 75 6C 74 33 44 5F  dium model, Microsoft Cult3D_
00011C60  6D 6D 2E 6C 69 62 20 20  20 20 20 20 33 44 2C 20  6D 65 64 69 75 6D 20 6D  6F 64 65 6C 2C 20 4D 69  mm.lib      3D, medium model, Mi
00011C80  63 72 6F 73 6F 66 74 20  43 0D 0A 0D 0A 09 75 6C  74 72 61 30 73 6D 2E 6C  69 62 20 4C 65 76 65 6C  crosoft Cultra0sm.lib Level
00011CA0  20 30 2C 20 73 6D 61 6C  6C 20 6D 6F 64 65 6C 2C  20 20 4D 69 63 72 6F 73  6F 66 74 20 43 0D 0A 09   0, small model,  Microsoft C
00011CC0  75 6C 74 72 61 31 73 6D  2E 6C 69 62 20 4C 65 76  65 6C 20 31 2C 20 73 6D  61 6C 6C 20 6D 6F 64 65  ultra1sm.lib Level 1, small mode
00011CE0  6C 2C 20 20 4D 69 63 72  6F 73 6F 66 74 20 43 0D  0A 09 75 6C 74 33 44 5F  73 6D 2E 6C 69 62 20 20  l,  Microsoft Cult3D_sm.lib  
00011D00  20 20 20 20 33 44 2C 20  73 6D 61 6C 6C 20 6D 6F  64 65 6C 2C 20 20 4D 69  63 72 6F 73 6F 66 74 20      3D, small model,  Microsoft 
00011D20  43 0D 0A 0D 0A 09 75 6C  74 72 61 30 74 6D 2E 6C  69 62 20 4C 65 76 65 6C  20 30 2C 20 74 69 6E 79  Cultra0tm.lib Level 0, tiny
00011D40  20 6D 6F 64 65 6C 2C 20  20 20 4D 69 63 72 6F 73  6F 66 74 20 43 0D 0A 09  75 6C 74 72 61 31 74 6D   model,   Microsoft Cultra1tm
00011D60  2E 6C 69 62 20 4C 65 76  65 6C 20 31 2C 20 74 69  6E 79 20 6D 6F 64 65 6C  2C 20 20 20 4D 69 63 72  .lib Level 1, tiny model,   Micr
00011D80  6F 73 6F 66 74 20 43 0D  0A 09 75 6C 74 33 44 5F  74 6D 2E 6C 69 62 20 20  20 20 20 20 33 44 2C 20  osoft Cult3D_tm.lib      3D, 
00011DA0  74 69 6E 79 20 6D 6F 64  65 6C 2C 20 20 20 4D 69  63 72 6F 73 6F 66 74 20  43 0D 0A 0D 0A 09 75 6C  tiny model,   Microsoft Cul
00011DC0  74 72 61 30 77 63 2E 6C  69 62 20 4C 65 76 65 6C  20 30 2C 20 46 6C 61 74  20 6D 6F 64 65 6C 2C 20  tra0wc.lib Level 0, Flat model, 
00011DE0  20 20 57 61 74 63 6F 6D  20 43 0D 0A 09 75 6C 74  72 61 31 77 63 2E 6C 69  62 20 4C 65 76 65 6C 20    Watcom Cultra1wc.lib Level 
00011E00  31 2C 20 46 6C 61 74 20  6D 6F 64 65 6C 2C 20 20  20 57 61 74 63 6F 6D 20  43 0D 0A 09 75 6C 74 33  1, Flat model,   Watcom Cult3
00011E20  44 5F 77 63 2E 6C 69 62  20 20 20 20 20 20 33 44  2C 20 46 6C 61 74 20 6D  6F 64 65 6C 2C 20 20 20  D_wc.lib      3D, Flat model,   
00011E40  57 61 74 63 6F 6D 20 43  0D 0A 0D 0A 09 75 6C 74  72 61 30 6D 77 2E 6C 69  62 20 4C 65 76 65 6C 20  Watcom Cultra0mw.lib Level 
00011E60  30 2C 20 46 6C 61 74 20  6D 6F 64 65 6C 2C 20 20  20 4D 65 74 61 77 61 72  65 20 48 69 67 68 20 43  0, Flat model,   Metaware High C
00011E80  2F 43 2B 2B 0D 0A 09 75  6C 74 72 61 31 6D 77 2E  6C 69 62 20 4C 65 76 65  6C 20 31 2C 20 46 6C 61  /C++ultra1mw.lib Level 1, Fla
00011EA0  74 20 6D 6F 64 65 6C 2C  20 20 20 4D 65 74 61 77  61 72 65 20 48 69 67 68  20 43 2F 43 2B 2B 0D 0A  t model,   Metaware High C/C++
00011EC0  09 75 6C 74 33 44 5F 6D  77 2E 6C 69 62 20 20 20  20 20 20 33 44 2C 20 46  6C 61 74 20 6D 6F 64 65  ult3D_mw.lib      3D, Flat mode
00011EE0  6C 2C 20 20 20 4D 65 74  61 77 61 72 65 20 48 69  67 68 20 43 2F 43 2B 2B  0D 0A 0D 0A 53 65 76 65  l,   Metaware High C/C++Seve
00011F00  72 61 6C 20 65 78 61 6D  70 6C 65 20 61 70 70 6C  69 63 61 74 69 6F 6E 73  20 61 72 65 20 73 75 70  ral example applications are sup
00011F20  70 6C 69 65 64 20 6F 6E  20 74 68 65 20 74 6F 6F  6C 6B 69 74 20 64 69 73  6B 73 20 74 6F 20 73 68  plied on the toolkit disks to sh
00011F40  6F 77 20 79 6F 75 20 68  6F 77 20 74 6F 20 69 6E  74 65 72 66 61 63 65 20  74 6F 20 74 68 65 20 6C  ow you how to interface to the l
00011F60  69 62 72 61 72 69 65 73  2E 20 20 50 6C 65 61 73  65 20 6C 6F 6F 6B 20 74  68 65 6D 20 6F 76 65 72  ibraries.  Please look them over
00011F80  20 63 61 72 65 66 75 6C  6C 79 2E 20 54 68 65 79  20 61 72 65 20 74 68 65  20 62 65 73 74 20 77 61   carefully. They are the best wa
00011FA0  79 20 74 6F 20 67 65 74  20 61 20 68 61 6E 64 6C  65 20 6F 6E 20 74 68 65  20 77 61 79 20 74 68 65  y to get a handle on the way the
00011FC0  20 63 61 72 64 20 6F 70  65 72 61 74 65 73 2E 20  0D 0A 0D 0A 0D 0A 0D 0A  33 2E 31 33 20 50 41 53   card operates. 3.13 PAS
00011FE0  43 41 4C 2D 73 70 65 63  69 66 69 63 20 69 6E 66  6F 72 6D 61 74 69 6F 6E  0D 0A 0D 0A 56 65 72 73  CAL-specific informationVers
00012000  69 6F 6E 20 32 2E 31 30  20 6F 66 20 74 68 65 20  55 6C 74 72 61 53 6F 75  6E 64 20 53 44 4B 20 69  ion 2.10 of the UltraSound SDK i
00012020  73 20 74 68 65 20 66 69  72 73 74 20 76 65 72 73  69 6F 6E 20 77 68 69 63  68 20 68 61 73 20 66 75  s the first version which has fu
00012040  6C 6C 20 73 75 70 70 6F  72 74 20 66 6F 72 20 54  75 72 62 6F 20 50 61 73  63 61 6C 20 36 2E 30 20  ll support for Turbo Pascal 6.0 
00012060  61 6E 64 20 37 2E 30 2C  20 61 73 20 77 65 6C 6C  20 61 73 20 42 6F 72 6C  61 6E 64 20 50 61 73 63  and 7.0, as well as Borland Pasc
00012080  61 6C 20 37 2E 30 2E 20  46 6F 72 20 74 68 6F 73  65 20 6F 66 20 79 6F 75  20 77 68 6F 20 61 72 65  al 7.0. For those of you who are
000120A0  20 63 75 72 69 6F 75 73  2C 20 42 6F 72 6C 61 6E  64 20 50 61 73 63 61 6C  20 37 2E 30 20 69 73 20   curious, Borland Pascal 7.0 is 
000120C0  74 68 65 20 70 72 6F 66  65 73 73 69 6F 6E 61 6C  20 76 65 72 73 69 6F 6E  20 6F 66 20 54 75 72 62  the professional version of Turb
000120E0  6F 20 50 61 73 63 61 6C  20 37 2E 30 2E 20 20 49  74 20 63 6F 73 74 73 20  6D 6F 72 65 2C 20 62 75  o Pascal 7.0.  It costs more, bu
00012100  74 20 69 6E 63 6C 75 64  65 73 20 61 20 6C 6F 74  20 6F 66 20 62 65 6C 6C  73 20 61 6E 64 20 77 68  t includes a lot of bells and wh
00012120  69 73 74 6C 65 73 20 74  68 61 74 20 61 72 65 20  6E 6F 74 20 69 6E 63 6C  75 64 65 64 20 69 6E 20  istles that are not included in 
00012140  74 68 65 20 72 65 67 75  6C 61 72 20 27 54 75 72  62 6F 27 20 76 65 72 73  69 6F 6E 20 28 66 6F 72  the regular 'Turbo' version (for
00012160  20 6D 6F 72 65 20 69 6E  66 6F 72 6D 61 74 69 6F  6E 2C 20 63 6F 6E 74 61  63 74 20 42 6F 72 6C 61   more information, contact Borla
00012180  6E 64 29 2E 0D 0A 0D 0A  54 68 65 20 74 72 61 6E  73 6C 61 74 69 6F 6E 20  77 61 73 20 64 6F 6E 65  nd).The translation was done
000121A0  20 65 6E 74 69 72 65 6C  79 20 62 79 20 4B 75 72  74 20 4B 65 6E 6E 65 74  74 20 6F 66 20 49 6E 67   entirely by Kurt Kennett of Ing
000121C0  65 6E 75 69 74 79 20 53  6F 66 74 77 61 72 65 2C  20 61 6E 64 20 69 73 20  61 20 64 69 72 65 63 74  enuity Software, and is a direct
000121E0  20 74 72 61 6E 73 6C 61  74 69 6F 6E 20 6F 66 20  74 68 65 20 43 20 74 6F  6F 6C 6B 69 74 2E 20 20   translation of the C toolkit.  
00012200  54 68 65 20 63 6F 64 65  20 77 61 73 20 77 72 69  74 74 65 6E 20 69 6E 20  42 6F 72 6C 61 6E 64 20  The code was written in Borland 
00012220  50 61 73 63 61 6C 20 37  20 61 6E 64 20 74 68 65  6E 20 6D 69 6E 6F 72 20  61 64 6A 75 73 74 6D 65  Pascal 7 and then minor adjustme
00012240  6E 74 73 20 77 65 72 65  20 6D 61 64 65 20 74 6F  20 6D 61 6B 65 20 69 74  20 63 6F 6D 70 69 6C 65  nts were made to make it compile
00012260  20 75 6E 64 65 72 20 54  75 72 62 6F 20 36 20 61  6E 64 20 37 2E 20 20 0D  0A 0C 44 75 65 20 74 6F   under Turbo 6 and 7.  Due to
00012280  20 74 68 65 20 66 61 63  74 20 74 68 61 74 20 74  68 65 20 50 61 73 63 61  6C 20 74 72 61 6E 73 6C   the fact that the Pascal transl
000122A0  61 74 69 6F 6E 20 77 61  73 20 64 6F 6E 65 20 61  66 74 65 72 20 74 68 65  20 43 20 63 6F 64 65 20  ation was done after the C code 
000122C0  77 61 73 20 66 69 6E 69  73 68 65 64 2C 20 73 6F  6D 65 20 6F 66 20 74 68  65 20 6E 61 6D 69 6E 67  was finished, some of the naming
000122E0  20 63 6F 6E 76 65 6E 74  69 6F 6E 73 20 66 6F 72  20 73 6F 6D 65 20 6F 66  20 74 68 65 20 66 75 6E   conventions for some of the fun
00012300  63 74 69 6F 6E 73 20 61  6E 64 20 72 65 63 6F 72  64 20 74 79 70 65 73 20  72 65 66 6C 65 63 74 73  ctions and record types reflects
00012320  20 61 20 27 43 2D 6C 69  6B 65 27 20 73 79 6E 74  61 78 20 61 6E 64 20 73  74 79 6C 65 2E 20 20 53   a 'C-like' syntax and style.  S
00012340  6F 6D 65 20 63 6F 6E 76  65 72 73 69 6F 6E 20 6F  66 20 66 75 6E 63 74 69  6F 6E 20 72 65 73 75 6C  ome conversion of function resul
00012360  74 20 74 79 70 65 73 20  68 61 73 20 62 65 65 6E  20 64 6F 6E 65 20 74 6F  20 72 65 66 6C 65 63 74  t types has been done to reflect
00012380  20 61 20 6D 6F 72 65 20  50 61 73 63 61 6C 2D 6C  69 6B 65 20 73 74 72 75  63 74 75 72 65 2E 0D 0A   a more Pascal-like structure.
000123A0  0D 0A 41 66 74 65 72 20  69 6E 73 74 61 6C 6C 61  74 69 6F 6E 20 6F 66 20  74 68 65 20 53 44 4B 2C  After installation of the SDK,
000123C0  20 74 68 65 72 65 20 77  69 6C 6C 20 62 65 20 74  77 6F 20 75 6E 69 74 73  20 61 6E 64 20 6F 6E 65   there will be two units and one
000123E0  20 69 6E 74 65 72 66 61  63 65 20 66 69 6C 65 20  61 76 61 69 6C 61 62 6C  65 20 69 6E 20 74 68 65   interface file available in the
00012400  20 50 41 53 43 41 4C 20  73 75 62 64 69 72 65 63  74 6F 72 79 3A 0D 0A 0D  0A 09 55 4C 54 52 41 44   PASCAL subdirectory:ULTRAD
00012420  52 56 2E 56 36 30 20 20  54 75 72 62 6F 20 50 61  73 63 61 6C 20 36 2E 30  20 76 65 72 73 69 6F 6E  RV.V60  Turbo Pascal 6.0 version
00012440  0D 0A 09 55 4C 54 52 41  44 52 56 2E 56 37 30 20  20 54 75 72 62 6F 2F 42  6F 72 6C 61 6E 64 20 50  ULTRADRV.V70  Turbo/Borland P
00012460  61 73 63 61 6C 20 37 2E  30 20 76 65 72 73 69 6F  6E 0D 0A 09 55 4C 54 52  41 44 52 56 2E 49 4E 54  ascal 7.0 versionULTRADRV.INT
00012480  20 20 54 68 69 73 20 69  73 20 74 68 65 20 69 6E  74 65 72 66 61 63 65 20  73 65 63 74 69 6F 6E 20    This is the interface section 
000124A0  66 6F 72 20 61 6C 6C 20  75 6E 69 74 73 2E 0D 0A  0D 0A 59 6F 75 20 73 68  6F 75 6C 64 20 63 6F 70  for all units.You should cop
000124C0  79 20 74 68 65 20 75 6E  69 74 20 79 6F 75 20 77  69 73 68 20 74 6F 20 75  73 65 20 74 6F 20 6F 6E  y the unit you wish to use to on
000124E0  65 20 6F 66 20 79 6F 75  72 20 75 6E 69 74 20 64  69 72 65 63 74 6F 72 69  65 73 2C 20 61 6E 64 20  e of your unit directories, and 
00012500  74 68 65 6E 20 72 65 6E  61 6D 65 20 74 68 65 20  75 6E 69 74 20 74 6F 20  27 55 4C 54 52 41 44 52  then rename the unit to 'ULTRADR
00012520  56 2E 54 50 55 27 2E 20  20 59 6F 75 20 6D 61 79  20 65 78 70 65 72 69 65  6E 63 65 20 63 6F 6D 70  V.TPU'.  You may experience comp
00012540  69 6C 69 6E 67 20 70 72  6F 62 6C 65 6D 73 20 69  66 20 79 6F 75 20 64 6F  20 6E 6F 74 20 72 65 6E  iling problems if you do not ren
00012560  61 6D 65 20 74 68 65 20  66 69 6C 65 2E 20 20 59  6F 75 20 6D 61 79 20 61  6C 73 6F 20 77 69 73 68  ame the file.  You may also wish
00012580  20 74 6F 20 63 6F 70 79  20 74 68 65 20 69 6E 74  65 72 66 61 63 65 20 66  69 6C 65 20 74 6F 20 75   to copy the interface file to u
000125A0  73 65 20 61 73 20 61 20  71 75 69 63 6B 2D 72 65  66 65 72 65 6E 63 65 2E  0D 0A 0D 0A 46 6F 72 20  se as a quick-reference.For 
000125C0  75 73 65 72 73 20 6F 66  20 54 75 72 62 6F 20 61  6E 64 20 42 6F 72 6C 61  6E 64 20 50 61 73 63 61  users of Turbo and Borland Pasca
000125E0  6C 20 37 2E 30 2C 20 61  20 68 65 6C 70 20 66 69  6C 65 20 68 61 73 20 62  65 65 6E 20 70 72 6F 76  l 7.0, a help file has been prov
00012600  69 64 65 64 20 74 6F 20  61 6C 6C 6F 77 20 71 75  69 63 6B 20 63 6F 6E 74  65 78 74 2D 73 65 6E 73  ided to allow quick context-sens
00012620  69 74 69 76 65 20 68 65  6C 70 20 66 72 6F 6D 20  69 6E 73 69 64 65 20 74  68 65 20 49 44 45 20 65  itive help from inside the IDE e
00012640  64 69 74 6F 72 2E 20 20  41 6C 73 6F 2C 20 61 20  4D 41 4B 45 48 45 4C 50  2E 54 58 54 20 76 65 72  ditor.  Also, a MAKEHELP.TXT ver
00012660  73 69 6F 6E 20 6F 66 20  74 68 69 73 20 68 65 6C  70 20 66 69 6C 65 20 68  61 73 20 62 65 65 6E 20  sion of this help file has been 
00012680  70 72 6F 76 69 64 65 64  20 66 6F 72 20 74 68 6F  73 65 20 75 73 65 72 73  20 77 68 6F 20 65 6D 70  provided for those users who emp
000126A0  6C 6F 79 20 54 75 72 62  6F 50 6F 77 65 72 27 73  20 63 6F 6E 74 65 78 74  2D 73 65 6E 73 69 74 69  loy TurboPower's context-sensiti
000126C0  76 65 20 68 65 6C 70 20  73 79 73 74 65 6D 2E 0D  0A 0D 0A 54 6F 20 69 6E  73 74 61 6C 6C 20 74 68  ve help system.To install th
000126E0  65 20 49 44 45 20 68 65  6C 70 20 66 69 6C 65 2C  20 6C 6F 61 64 20 54 75  72 62 6F 20 6F 72 20 42  e IDE help file, load Turbo or B
00012700  6F 72 6C 61 6E 64 20 50  61 73 63 61 6C 20 37 20  61 6E 64 20 73 65 6C 65  63 74 20 74 68 65 20 27  orland Pascal 7 and select the '
00012720  48 65 6C 70 27 20 6D 65  6E 75 20 66 72 6F 6D 20  74 68 65 20 6D 65 6E 75  20 62 61 72 2E 20 20 43  Help' menu from the menu bar.  C
00012740  68 6F 6F 73 65 20 74 68  65 20 27 46 69 6C 65 73  2E 2E 2E 27 20 6F 70 74  69 6F 6E 2C 20 61 6E 64  hoose the 'Files...' option, and
00012760  20 73 65 6C 65 63 74 20  74 68 65 20 27 41 64 64  27 20 62 75 74 74 6F 6E  2E 20 20 43 68 6F 6F 73   select the 'Add' button.  Choos
00012780  65 20 74 68 65 20 66 69  6C 65 20 27 55 4C 54 52  41 44 52 56 2E 54 50 48  27 20 66 72 6F 6D 20 74  e the file 'ULTRADRV.TPH' from t
000127A0  68 65 20 55 6C 74 72 61  53 6F 75 6E 64 20 50 41  53 43 41 4C 20 73 75 62  64 69 72 65 63 74 6F 72  he UltraSound PASCAL subdirector
000127C0  79 2E 20 20 41 66 74 65  72 20 79 6F 75 20 68 61  76 65 20 64 6F 6E 65 20  74 68 69 73 2C 20 79 6F  y.  After you have done this, yo
000127E0  75 20 6D 61 79 20 75 73  65 20 74 68 65 20 46 31  20 6B 65 79 20 61 6E 64  20 69 74 27 73 20 64 65  u may use the F1 key and it's de
00012800  72 69 76 61 74 69 76 65  73 20 74 6F 20 61 63 63  65 73 73 20 72 65 66 65  72 65 6E 63 65 20 69 6E  rivatives to access reference in
00012820  66 6F 72 6D 61 74 69 6F  6E 20 66 6F 72 20 61 6E  79 20 6F 66 20 74 68 65  20 66 75 6E 63 74 69 6F  formation for any of the functio
00012840  6E 73 20 61 6E 64 20 70  72 6F 63 65 64 75 72 65  73 20 69 6E 20 74 68 65  20 53 44 4B 20 72 65 66  ns and procedures in the SDK ref
00012860  65 72 65 6E 63 65 20 6D  61 6E 75 61 6C 20 28 63  68 61 70 74 65 72 20 33  29 2E 0D 0A 0D 0A 46 6F  erence manual (chapter 3).Fo
00012880  72 20 65 78 61 6D 70 6C  65 2C 20 61 66 74 65 72  20 69 6E 73 74 61 6C 6C  69 6E 67 20 74 68 65 20  r example, after installing the 
000128A0  68 65 6C 70 20 66 69 6C  65 2C 20 74 79 70 65 20  74 68 65 20 77 6F 72 64  20 27 55 6C 74 72 61 53  help file, type the word 'UltraS
000128C0  65 74 46 72 65 71 75 65  6E 63 79 27 20 69 6E 74  6F 20 74 68 65 20 49 44  45 2C 20 6D 6F 76 65 20  etFrequency' into the IDE, move 
000128E0  74 68 65 20 63 75 72 73  6F 72 20 6F 6E 20 74 6F  70 20 6F 66 20 74 68 65  20 77 6F 72 64 2C 20 61  the cursor on top of the word, a
00012900  6E 64 20 70 72 65 73 73  20 43 54 52 4C 2D 46 31  2E 20 20 59 6F 75 20 77  69 6C 6C 20 62 65 20 67  nd press CTRL-F1.  You will be g
00012920  69 76 65 6E 20 61 6E 20  65 78 70 6C 61 6E 61 74  69 6F 6E 20 6F 66 20 74  68 65 20 73 79 6E 74 61  iven an explanation of the synta
00012940  78 20 61 6E 64 20 75 73  61 67 65 20 6F 66 20 74  68 65 20 50 72 6F 63 65  64 75 72 65 2C 20 61 73  x and usage of the Procedure, as
00012960  20 77 65 6C 6C 20 61 73  20 69 6E 66 6F 72 6D 61  74 69 6F 6E 20 6F 6E 20  72 65 6C 61 74 65 64 20   well as information on related 
00012980  70 72 6F 63 65 64 75 72  65 73 2C 20 66 75 6E 63  74 69 6F 6E 73 2C 20 63  6F 6E 73 74 61 6E 74 73  procedures, functions, constants
000129A0  2C 20 61 6E 64 20 76 61  72 69 61 62 6C 65 73 2E  0D 0A 0D 0A 41 20 73 68  6F 72 74 20 73 65 63 74  , and variables.A short sect
000129C0  69 6F 6E 20 64 65 74 61  69 6C 69 6E 67 20 73 70  65 63 69 66 69 63 20 69  6E 66 6F 72 6D 61 74 69  ion detailing specific informati
000129E0  6F 6E 20 61 62 6F 75 74  20 74 79 70 65 73 20 61  6E 64 20 63 6F 6E 73 74  61 6E 74 73 20 61 76 61  on about types and constants ava
00012A00  69 6C 61 62 6C 65 20 66  6F 6C 6C 6F 77 73 2E 20  20 46 6F 72 20 6D 6F 72  65 20 69 6E 66 6F 72 6D  ilable follows.  For more inform
00012A20  61 74 69 6F 6E 2C 20 70  6C 65 61 73 65 20 73 65  65 20 74 68 65 20 69 6E  74 65 72 66 61 63 65 20  ation, please see the interface 
00012A40  66 69 6C 65 20 55 4C 54  52 41 44 52 56 2E 49 4E  54 2E 0D 0A 0D 0A 0D 0A  0D 0A 33 2E 31 33 2E 31  file ULTRADRV.INT.3.13.1
00012A60  20 41 76 61 69 6C 61 62  6C 65 20 63 6F 6E 73 74  61 6E 74 73 20 61 6E 64  20 76 61 72 69 61 62 6C   Available constants and variabl
00012A80  65 73 0D 0A 0D 0A 54 68  65 20 53 44 4B 20 54 50  55 20 28 6F 72 20 27 64  72 69 76 65 72 27 29 20  esThe SDK TPU (or 'driver') 
00012AA0  68 61 73 20 73 6F 6D 65  20 70 72 65 64 65 66 69  6E 65 64 20 63 6F 6E 73  74 61 6E 74 73 20 74 6F  has some predefined constants to
00012AC0  20 61 73 73 69 73 74 20  79 6F 75 20 69 6E 20 70  72 6F 67 72 61 6D 6D 69  6E 67 20 76 61 72 69 6F   assist you in programming vario
00012AE0  75 73 20 61 73 70 65 63  74 73 20 6F 66 20 74 68  65 20 63 61 72 64 2E 20  20 54 68 65 72 65 20 61  us aspects of the card.  There a
00012B00  72 65 20 74 68 72 65 65  20 63 6F 6D 6D 6F 6E 20  66 72 65 71 75 65 6E 63  69 65 73 20 74 68 61 74  re three common frequencies that
00012B20  20 73 61 6D 70 6C 65 64  20 73 6F 75 6E 64 73 20  61 72 65 20 70 6C 61 79  65 64 20 61 74 3A 20 31   sampled sounds are played at: 1
00012B40  31 2C 20 32 32 2C 20 61  6E 64 20 34 34 20 4B 48  7A 3A 0D 0A 0D 0A 20 20  20 20 20 4B 68 7A 5F 31  1, 22, and 44 KHz:     Khz_1
00012B60  31 20 3D 20 31 31 30 32  35 3B 0D 0A 20 20 20 20  20 4B 68 7A 5F 32 32 20  3D 20 32 32 30 35 30 3B  1 = 11025;     Khz_22 = 22050;
00012B80  0D 0A 20 20 20 20 20 4B  68 7A 5F 34 34 20 3D 20  34 34 31 30 30 3B 0D 0A  0C 57 68 65 6E 65 76 65       Khz_44 = 44100;Wheneve
00012BA0  72 20 76 6F 6C 75 6D 65  20 69 73 20 73 70 65 63  69 66 69 65 64 2C 20 74  68 65 72 65 20 69 73 20  r volume is specified, there is 
00012BC0  61 20 76 6F 6C 75 6D 65  20 63 6F 6E 74 72 6F 6C  20 62 79 74 65 2E 20 20  54 68 65 20 62 69 74 73  a volume control byte.  The bits
00012BE0  20 69 6E 20 74 68 69 73  20 62 79 74 65 20 63 6F  6E 74 72 6F 6C 20 73 65  76 65 72 61 6C 20 69 6D   in this byte control several im
00012C00  70 6F 72 74 61 6E 74 20  66 75 6E 63 74 69 6F 6E  73 2E 20 20 4F 52 20 74  68 65 20 66 6F 6C 6C 6F  portant functions.  OR the follo
00012C20  77 69 6E 67 20 63 6F 6E  73 74 61 6E 74 73 20 74  6F 67 65 74 68 65 72 20  77 69 74 68 20 7A 65 72  wing constants together with zer
00012C40  6F 20 69 66 20 79 6F 75  20 6E 65 65 64 20 74 68  65 6D 2E 20 20 49 66 20  79 6F 75 20 64 6F 6E 27  o if you need them.  If you don'
00012C60  74 2C 20 6A 75 73 74 20  73 70 65 63 69 66 79 20  7A 65 72 6F 20 61 73 20  74 68 65 20 76 6F 6C 75  t, just specify zero as the volu
00012C80  6D 65 20 63 6F 6E 74 72  6F 6C 20 62 79 74 65 3A  0D 0A 0D 0A 20 20 20 20  20 4C 6F 6F 70 5F 56 6F  me control byte:     Loop_Vo
00012CA0  6C 75 6D 65 20 20 20 20  20 20 20 20 20 20 20 3D  20 30 38 3B 0D 0A 20 20  20 20 20 42 69 5F 44 69  lume           = 08;     Bi_Di
00012CC0  72 65 63 74 69 6F 6E 61  6C 5F 56 6F 6C 75 6D 65  20 3D 20 31 36 3B 0D 0A  20 20 20 20 20 45 6E 61  rectional_Volume = 16;     Ena
00012CE0  62 6C 65 5F 56 6F 6C 75  6D 65 5F 48 61 6E 64 6C  65 72 20 3D 20 33 32 3B  0D 0A 0D 0A 57 68 65 6E  ble_Volume_Handler = 32;When
00012D00  65 76 65 72 20 61 20 76  6F 69 63 65 20 69 73 20  73 74 61 72 74 65 64 20  6F 72 20 63 68 61 6E 67  ever a voice is started or chang
00012D20  65 64 2C 20 74 68 65 72  65 20 69 73 20 61 20 76  6F 69 63 65 20 63 6F 6E  74 72 6F 6C 20 62 79 74  ed, there is a voice control byt
00012D40  65 2E 20 20 54 68 65 20  62 69 74 73 20 69 6E 20  74 68 69 73 20 62 79 74  65 20 63 6F 6E 74 72 6F  e.  The bits in this byte contro
00012D60  6C 20 73 65 76 65 72 61  6C 20 69 6D 70 6F 72 74  61 6E 74 20 66 75 6E 63  74 69 6F 6E 73 20 66 6F  l several important functions fo
00012D80  72 20 65 61 63 68 20 76  6F 69 63 65 2E 20 20 4F  52 20 74 68 65 20 66 6F  6C 6C 6F 77 69 6E 67 20  r each voice.  OR the following 
00012DA0  63 6F 6E 73 74 61 6E 74  73 20 74 6F 67 65 74 68  65 72 20 77 69 74 68 20  7A 65 72 6F 20 69 66 20  constants together with zero if 
00012DC0  79 6F 75 20 6E 65 65 64  20 74 68 65 6D 2E 20 20  49 66 20 79 6F 75 20 64  6F 6E 27 74 2C 20 6A 75  you need them.  If you don't, ju
00012DE0  73 74 20 73 70 65 63 69  66 79 20 7A 65 72 6F 20  61 73 20 74 68 65 20 76  6F 69 63 65 20 63 6F 6E  st specify zero as the voice con
00012E00  74 72 6F 6C 20 62 79 74  65 3A 0D 0A 0D 0A 09 56  6F 69 63 65 5F 44 61 74  61 5F 31 36 42 69 74 20  trol byte:Voice_Data_16Bit 
00012E20  20 20 20 20 20 20 20 3D  20 30 34 3B 0D 0A 09 4C  6F 6F 70 5F 56 6F 69 63  65 20 20 20 20 20 20 20         = 04;Loop_Voice       
00012E40  20 20 20 20 20 20 20 3D  20 30 38 3B 0D 0A 09 42  69 5F 44 69 72 65 63 74  69 6F 6E 61 6C 5F 56 6F         = 08;Bi_Directional_Vo
00012E60  69 63 65 20 20 20 20 3D  20 31 36 3B 0D 0A 09 45  6E 61 62 6C 65 5F 56 6F  69 63 65 45 6E 64 5F 48  ice    = 16;Enable_VoiceEnd_H
00012E80  61 6E 64 6C 65 72 20 3D  20 33 32 3B 0D 0A 0D 0A  57 68 65 6E 20 61 20 44  4D 41 20 74 72 61 6E 73  andler = 32;When a DMA trans
00012EA0  66 65 72 20 69 73 20 73  74 61 72 74 65 64 2C 20  79 6F 75 20 6E 65 65 64  20 74 6F 20 74 65 6C 6C  fer is started, you need to tell
00012EC0  20 74 68 65 20 44 4D 41  20 63 6F 6E 74 72 6F 6C  6C 65 72 20 77 68 61 74  20 74 79 70 65 20 6F 66   the DMA controller what type of
00012EE0  20 64 61 74 61 20 79 6F  75 20 61 72 65 20 73 65  6E 64 69 6E 67 20 74 6F  20 74 68 65 20 55 6C 74   data you are sending to the Ult
00012F00  72 61 53 6F 75 6E 64 2C  20 61 73 20 77 65 6C 6C  20 61 73 20 69 66 20 74  68 65 20 63 6F 6E 74 72  raSound, as well as if the contr
00012F20  6F 6C 6C 65 72 20 73 68  6F 75 6C 64 20 63 6F 6E  76 65 72 74 20 74 68 65  20 64 61 74 61 20 74 6F  oller should convert the data to
00012F40  20 32 27 73 20 63 6F 6D  70 6C 65 6D 65 6E 74 2E  20 20 49 66 20 79 6F 75  20 61 72 65 20 64 6F 77   2's complement.  If you are dow
00012F60  6E 6C 6F 61 64 69 6E 67  20 72 61 6D 20 2E 53 4E  44 20 66 69 6C 65 73 20  74 6F 20 74 68 65 20 63  nloading ram .SND files to the c
00012F80  61 72 64 2C 20 79 6F 75  20 6E 65 65 64 20 74 6F  20 4F 52 20 74 68 65 20  43 6F 6E 76 65 72 74 5F  ard, you need to OR the Convert_
00012FA0  44 61 74 61 20 63 6F 6E  73 74 61 6E 74 20 74 6F  20 30 20 61 73 20 74 68  65 20 63 6F 6E 74 72 6F  Data constant to 0 as the contro
00012FC0  6C 20 62 79 74 65 2E 20  20 49 66 20 79 6F 75 20  61 72 65 20 64 6F 77 6E  6C 6F 61 64 69 6E 67 20  l byte.  If you are downloading 
00012FE0  31 36 20 42 69 74 20 64  61 74 61 2C 20 79 6F 75  20 6E 65 65 64 20 74 6F  20 4F 52 20 74 68 65 20  16 Bit data, you need to OR the 
00013000  63 6F 6E 74 72 6F 6C 20  62 79 74 65 20 77 69 74  68 20 44 4D 41 5F 44 61  74 61 5F 31 36 42 69 74  control byte with DMA_Data_16Bit
00013020  2E 0D 0A 0D 0A 09 44 4D  41 5F 44 61 74 61 5F 31  36 42 69 74 20 3D 20 36  34 3B 0D 0A 09 43 6F 6E  .DMA_Data_16Bit = 64;Con
00013040  76 65 72 74 5F 44 61 74  61 20 20 20 3D 20 31 32  38 3B 0D 0A 0D 0A 54 68  65 72 65 20 61 72 65 20  vert_Data   = 128;There are 
00013060  73 65 76 65 72 61 6C 20  70 72 65 64 65 66 69 6E  65 64 20 76 61 72 69 61  62 6C 65 73 20 74 6F 20  several predefined variables to 
00013080  68 65 6C 70 20 79 6F 75  20 6D 61 6E 61 67 65 20  74 68 65 20 55 6C 74 72  61 53 6F 75 6E 64 20 63  help you manage the UltraSound c
000130A0  61 72 64 20 61 73 20 79  6F 75 20 75 73 65 20 69  74 2E 20 20 54 68 65 73  65 20 76 61 72 69 61 62  ard as you use it.  These variab
000130C0  6C 65 73 20 64 65 74 65  72 6D 69 6E 65 20 74 68  65 20 43 6F 6E 66 69 67  75 72 61 74 69 6F 6E 2C  les determine the Configuration,
000130E0  20 65 72 72 6F 72 20 63  6F 64 65 73 2C 20 61 6E  64 20 77 68 65 74 68 65  72 20 6F 72 20 6E 6F 74   error codes, and whether or not
00013100  20 74 68 65 20 63 61 72  64 20 69 73 20 69 6E 73  74 61 6C 6C 65 64 3A 0D  0A 0D 0A 55 6C 74 72 61   the card is installed:Ultra
00013120  5F 49 6E 73 74 61 6C 6C  65 64 20 3A 20 42 4F 4F  4C 45 41 4E 3B 0D 0A 49  66 20 74 68 65 20 64 72  _Installed : BOOLEAN;If the dr
00013140  69 76 65 72 20 63 61 6E  6E 6F 74 20 72 65 61 64  20 74 68 65 20 65 6E 76  69 72 6F 6E 6D 65 6E 74  iver cannot read the environment
00013160  20 76 61 72 69 61 62 6C  65 20 27 55 4C 54 52 41  53 4E 44 27 20 77 68 65  6E 20 69 74 20 69 73 20   variable 'ULTRASND' when it is 
00013180  69 6E 69 74 69 61 6C 69  7A 65 64 20 28 69 2E 65  2E 20 77 68 65 6E 20 79  6F 75 72 20 70 72 6F 67  initialized (i.e. when your prog
000131A0  72 61 6D 20 73 74 61 72  74 73 29 2C 20 74 68 69  73 20 42 4F 4F 4C 45 41  4E 20 77 69 6C 6C 20 72  ram starts), this BOOLEAN will r
000131C0  65 6D 61 69 6E 20 66 61  6C 73 65 2E 20 20 4F 74  68 65 72 77 69 73 65 2C  20 74 68 65 20 76 61 72  emain false.  Otherwise, the var
000131E0  69 61 62 6C 65 20 55 6C  74 72 61 5F 43 6F 6E 66  69 67 20 28 73 65 65 20  62 65 6C 6F 77 29 20 77  iable Ultra_Config (see below) w
00013200  69 6C 6C 20 62 65 20 73  65 74 20 75 70 20 77 69  74 68 20 74 68 65 20 76  61 6C 75 65 73 20 66 6F  ill be set up with the values fo
00013220  75 6E 64 20 69 6E 20 74  68 65 20 65 6E 76 69 72  6F 6E 6D 65 6E 74 20 76  61 72 69 61 62 6C 65 2E  und in the environment variable.
00013240  0D 0A 0D 0A 55 6C 74 72  61 5F 43 6F 6E 66 69 67  20 20 3A 20 55 6C 74 72  61 5F 43 46 47 3B 0D 0A  Ultra_Config  : Ultra_CFG;
00013260  49 66 20 74 68 65 20 64  72 69 76 65 72 20 77 61  73 20 61 62 6C 65 20 74  6F 20 72 65 61 64 20 61  If the driver was able to read a
00013280  20 63 6F 6E 66 69 67 75  72 61 74 69 6F 6E 20 66  72 6F 6D 20 74 68 65 20  27 55 4C 54 52 41 53 4E   configuration from the 'ULTRASN
000132A0  44 27 20 65 6E 76 69 72  6F 6E 6D 65 6E 74 20 76  61 72 69 61 62 6C 65 2C  20 74 68 69 73 20 76 61  D' environment variable, this va
000132C0  72 69 61 62 6C 65 20 72  65 63 6F 72 64 20 77 69  6C 6C 20 62 65 20 66 69  6C 6C 65 64 20 69 6E 20  riable record will be filled in 
000132E0  77 69 74 68 20 74 68 65  20 61 70 70 72 6F 70 72  69 61 74 65 20 69 6E 66  6F 72 6D 61 74 69 6F 6E  with the appropriate information
00013300  20 66 6F 75 6E 64 20 69  6E 20 74 68 65 20 65 6E  76 69 72 6F 6E 6D 65 6E  74 2E 20 20 49 66 20 74   found in the environment.  If t
00013320  68 65 20 65 6E 76 69 72  6F 6E 6D 65 6E 74 20 73  74 72 69 6E 67 20 69 73  20 6E 6F 74 20 66 6F 75  he environment string is not fou
00013340  6E 64 2C 20 74 68 69 73  20 76 61 72 69 61 62 6C  65 20 77 69 6C 6C 20 61  73 73 75 6D 65 20 61 20  nd, this variable will assume a 
00013360  64 65 66 61 75 6C 74 20  63 6F 6E 66 69 67 75 72  61 74 69 6F 6E 2E 20 20  41 6C 6C 20 6F 66 20 74  default configuration.  All of t
00013380  68 65 20 66 75 6E 63 74  69 6F 6E 73 20 61 6E 64  20 70 72 6F 63 65 64 75  72 65 73 20 69 6E 20 74  he functions and procedures in t
000133A0  68 65 20 64 72 69 76 65  72 20 75 73 65 20 74 68  69 73 20 63 6F 6E 66 69  67 75 72 61 74 69 6F 6E  he driver use this configuration
000133C0  20 74 6F 20 69 6E 69 74  69 61 6C 69 7A 65 20 61  6E 64 20 75 73 65 20 74  68 65 20 63 61 72 64 2E   to initialize and use the card.
000133E0  20 20 42 65 20 63 61 72  65 66 75 6C 20 69 66 20  79 6F 75 27 72 65 20 67  6F 69 6E 67 20 74 6F 20    Be careful if you're going to 
00013400  67 6F 20 73 74 69 63 6B  69 6E 67 20 76 61 6C 75  65 73 20 69 6E 74 6F 20  74 68 69 73 20 72 65 63  go sticking values into this rec
00013420  6F 72 64 2E 20 20 54 68  65 20 6D 61 69 6E 20 75  73 65 20 6F 66 20 74 68  69 73 20 76 61 72 69 61  ord.  The main use of this varia
00013440  62 6C 65 20 69 73 20 74  6F 20 64 69 73 70 6C 61  79 20 74 68 65 20 61 63  74 69 76 65 20 63 6F 6E  ble is to display the active con
00013460  66 69 67 75 72 61 74 69  6F 6E 20 74 6F 20 74 68  65 20 75 73 65 72 2E 0D  0A 0C 54 68 65 20 64 72  figuration to the user.The dr
00013480  69 76 65 72 20 70 72 65  64 65 66 69 6E 65 73 20  74 68 72 65 65 20 76 61  72 69 61 62 6C 65 73 20  iver predefines three variables 
000134A0  74 6F 20 68 65 6C 70 20  79 6F 75 20 77 69 74 68  20 65 72 72 6F 72 20 63  6F 6E 74 72 6F 6C 3A 0D  to help you with error control:
000134C0  0A 0D 0A 55 6C 74 72 61  4F 6B 20 20 20 20 20 20  20 3A 20 42 6F 6F 6C 65  61 6E 3B 0D 0A 54 68 69  UltraOk       : Boolean;Thi
000134E0  73 20 62 6F 6F 6C 65 61  6E 20 61 6C 77 61 79 73  20 6D 61 69 6E 74 61 69  6E 73 20 74 68 65 20 73  s boolean always maintains the s
00013500  74 61 74 75 73 20 6F 66  20 74 68 65 20 6C 61 73  74 20 55 6C 74 72 61 53  6F 75 6E 64 20 70 72 6F  tatus of the last UltraSound pro
00013520  63 65 64 75 72 65 20 6F  72 20 66 75 6E 63 74 69  6F 6E 2E 20 20 49 66 20  74 68 65 72 65 20 77 61  cedure or function.  If there wa
00013540  73 20 61 20 70 72 6F 62  6C 65 6D 20 77 69 74 68  20 74 68 65 20 72 6F 75  74 69 6E 65 2C 20 74 68  s a problem with the routine, th
00013560  69 73 20 76 61 72 69 61  62 6C 65 20 77 69 6C 6C  20 62 65 20 46 41 4C 53  45 2E 20 20 4F 74 68 65  is variable will be FALSE.  Othe
00013580  72 77 69 73 65 2C 20 69  74 20 77 69 6C 6C 20 62  65 20 54 52 55 45 20 28  69 6E 64 69 63 61 74 69  rwise, it will be TRUE (indicati
000135A0  6E 67 20 6E 6F 20 65 72  72 6F 72 29 2E 0D 0A 0D  0A 55 6C 74 72 61 45 72  72 6F 72 20 20 20 20 3A  ng no error).UltraError    :
000135C0  20 49 6E 74 65 67 65 72  3B 0D 0A 54 68 69 73 20  69 73 20 74 68 65 20 22  45 72 72 6F 72 20 43 6F   Integer;This is the "Error Co
000135E0  64 65 22 20 6F 66 20 74  68 65 20 45 72 72 6F 72  2E 20 20 54 68 69 73 20  76 61 72 69 61 62 6C 65  de" of the Error.  This variable
00013600  20 69 73 20 73 65 74 20  74 6F 20 30 20 69 66 20  6E 6F 20 65 72 72 6F 72  20 68 61 73 20 6F 63 63   is set to 0 if no error has occ
00013620  75 72 72 65 64 2C 20 61  6E 64 20 69 73 20 6F 6E  6C 79 20 73 65 74 20 77  68 65 6E 20 55 6C 74 72  urred, and is only set when Ultr
00013640  61 4F 6B 20 62 65 63 6F  6D 65 73 20 46 41 4C 53  45 2E 0D 0A 0D 0A 55 6C  74 72 61 45 72 72 6F 72  aOk becomes FALSE.UltraError
00013660  53 74 72 20 3A 20 53 74  72 69 6E 67 3B 0D 0A 54  68 69 73 20 69 73 20 74  68 65 20 22 64 65 73 63  Str : String;This is the "desc
00013680  72 69 70 74 69 6F 6E 22  20 6F 66 20 74 68 65 20  65 72 72 6F 72 20 77 68  69 63 68 20 68 61 73 20  ription" of the error which has 
000136A0  6F 63 63 75 72 72 65 64  2E 20 20 41 73 20 61 6E  20 61 64 64 65 64 20 62  6F 6E 75 73 20 74 6F 20  occurred.  As an added bonus to 
000136C0  79 6F 75 2C 20 74 68 65  20 70 72 6F 67 72 61 6D  6D 65 72 2C 20 74 68 69  73 20 73 74 72 69 6E 67  you, the programmer, this string
000136E0  20 69 73 20 73 65 74 20  77 69 74 68 20 61 20 28  64 65 73 63 72 69 70 74  69 76 65 29 20 65 72 72   is set with a (descriptive) err
00013700  6F 72 20 6D 65 73 73 61  67 65 20 77 68 65 6E 65  76 65 72 20 61 20 63 61  72 64 2D 72 65 6C 61 74  or message whenever a card-relat
00013720  65 64 20 65 72 72 6F 72  20 6F 63 63 75 72 73 2E  0D 0A 0D 0A 0D 0A 0D 0A  33 2E 31 33 2E 32 20 45  ed error occurs.3.13.2 E
00013740  78 61 6D 70 6C 65 73 0D  0A 0D 0A 54 68 65 72 65  20 61 72 65 20 73 65 76  65 72 61 6C 20 65 78 61  xamplesThere are several exa
00013760  6D 70 6C 65 20 70 72 6F  67 72 61 6D 73 20 69 6E  63 6C 75 64 65 64 20 77  69 74 68 20 74 68 65 20  mple programs included with the 
00013780  75 6E 69 74 73 20 64 65  73 63 72 69 62 65 64 20  69 6E 20 74 68 65 20 70  72 65 76 69 6F 75 73 20  units described in the previous 
000137A0  73 65 63 74 69 6F 6E 3A  0D 0A 0D 0A 47 55 53 49  4E 49 54 2E 50 41 53 0D  0A 54 68 69 73 20 65 78  section:GUSINIT.PASThis ex
000137C0  61 6D 70 6C 65 20 66 69  6C 65 20 69 73 20 61 20  73 6D 61 6C 6C 20 75 6E  69 74 20 74 68 61 74 20  ample file is a small unit that 
000137E0  79 6F 75 20 6D 61 79 20  77 61 6E 74 20 74 6F 20  75 73 65 20 74 6F 20 69  6E 69 74 69 61 6C 69 7A  you may want to use to initializ
00013800  65 20 74 68 65 20 47 55  53 20 62 65 66 6F 72 65  20 79 6F 75 20 75 73 65  20 69 74 2E 20 20 54 68  e the GUS before you use it.  Th
00013820  65 20 69 6D 70 6F 72 74  61 6E 74 20 74 68 69 6E  67 20 61 62 6F 75 74 20  74 68 69 73 20 75 6E 69  e important thing about this uni
00013840  74 20 69 73 20 74 68 61  74 20 69 74 20 69 6E 73  74 61 6C 6C 73 20 61 6E  20 27 45 78 69 74 20 50  t is that it installs an 'Exit P
00013860  72 6F 63 65 64 75 72 65  27 20 77 68 69 63 68 20  69 73 20 63 61 6C 6C 65  64 20 75 70 6F 6E 20 70  rocedure' which is called upon p
00013880  72 6F 67 72 61 6D 20 74  65 72 6D 69 6E 61 74 69  6F 6E 20 28 6E 6F 72 6D  61 6C 20 6F 72 20 63 72  rogram termination (normal or cr
000138A0  61 73 68 2D 6F 75 74 29  2E 20 20 54 68 65 20 65  78 69 74 20 70 72 6F 63  65 64 75 72 65 20 63 6C  ash-out).  The exit procedure cl
000138C0  6F 73 65 73 20 64 6F 77  6E 20 74 68 65 20 63 61  72 64 20 62 65 66 6F 72  65 20 72 65 74 75 72 6E  oses down the card before return
000138E0  69 6E 67 20 74 6F 20 44  4F 53 20 28 6F 72 20 74  68 65 20 49 44 45 2C 20  64 65 70 65 6E 64 69 6E  ing to DOS (or the IDE, dependin
00013900  67 20 75 70 6F 6E 20 77  68 65 72 65 20 79 6F 75  20 61 72 65 29 2E 20 20  49 6E 20 54 50 20 61 6E  g upon where you are).  In TP an
00013920  64 20 42 50 20 37 2C 20  79 6F 75 20 63 61 6E 20  74 79 70 65 20 27 45 78  69 74 50 72 6F 63 27 20  d BP 7, you can type 'ExitProc' 
00013940  69 6E 74 6F 20 74 68 65  20 49 44 45 2C 20 6D 6F  76 65 20 74 68 65 20 63  75 72 73 6F 72 20 6F 6E  into the IDE, move the cursor on
00013960  20 74 6F 70 20 6F 66 20  69 74 2C 20 61 6E 64 20  68 69 74 20 43 54 52 4C  2D 46 31 20 66 6F 72 20   top of it, and hit CTRL-F1 for 
00013980  61 20 64 65 74 61 69 6C  65 64 20 65 78 70 6C 61  6E 61 74 69 6F 6E 20 6F  66 20 77 68 61 74 20 61  a detailed explanation of what a
000139A0  6E 20 65 78 69 74 20 70  72 6F 63 65 64 75 72 65  20 69 73 2E 20 20 41 66  74 65 72 20 69 6E 63 6C  n exit procedure is.  After incl
000139C0  75 64 69 6E 67 20 74 68  69 73 20 75 6E 69 74 20  69 6E 20 79 6F 75 72 20  27 75 73 65 73 27 20 63  uding this unit in your 'uses' c
000139E0  6C 61 75 73 65 2C 20 79  6F 75 72 20 6D 61 69 6E  20 70 72 6F 67 72 61 6D  20 63 61 6E 20 6A 75 73  lause, your main program can jus
00013A00  74 20 67 6F 20 61 68 65  61 64 20 61 6E 64 20 73  74 61 72 74 20 75 73 69  6E 67 20 69 74 2E 20 20  t go ahead and start using it.  
00013A20  59 6F 75 20 64 6F 6E 27  74 20 6E 65 65 64 20 74  6F 20 63 61 6C 6C 20 55  6C 74 72 61 4F 70 65 6E  You don't need to call UltraOpen
00013A40  2C 20 55 6C 74 72 61 52  65 73 65 74 2C 20 6F 72  20 65 76 65 6E 20 55 6C  74 72 61 43 6C 6F 73 65  , UltraReset, or even UltraClose
00013A60  20 77 68 65 6E 20 79 6F  75 27 72 65 20 66 69 6E  69 73 68 65 64 2E 20 0D  0A 0D 0A 47 55 53 31 2E   when you're finished. GUS1.
00013A80  50 41 53 0D 0A 54 68 69  73 20 69 73 20 74 68 65  20 70 72 69 6D 69 74 69  76 65 20 65 78 61 6D 70  PASThis is the primitive examp
00013AA0  6C 65 20 70 72 6F 67 72  61 6D 20 66 6F 72 20 74  68 65 20 63 61 72 64 20  77 68 69 63 68 20 6C 6F  le program for the card which lo
00013AC0  61 64 73 20 74 68 72 65  65 20 73 6F 75 6E 64 73  20 28 61 20 6C 61 73 65  72 20 62 6C 61 73 74 2C  ads three sounds (a laser blast,
00013AE0  20 61 20 70 68 6F 74 6F  6E 20 74 6F 72 70 65 64  6F 2C 20 61 6E 64 20 61  20 6D 69 73 73 69 6C 65   a photon torpedo, and a missile
00013B00  29 20 69 6E 74 6F 20 74  68 65 20 63 61 72 64 27  73 20 52 41 4D 20 61 6E  64 20 74 68 65 6E 20 61  ) into the card's RAM and then a
00013B20  6C 6C 6F 77 73 20 79 6F  75 20 74 6F 20 70 72 65  73 73 20 74 68 65 20 27  31 27 2E 2E 27 33 27 20  llows you to press the '1'..'3' 
00013B40  6B 65 79 73 20 74 6F 20  70 6C 61 79 20 74 68 65  6D 2E 20 20 54 68 69 73  20 65 78 61 6D 70 6C 65  keys to play them.  This example
00013B60  20 75 73 65 73 20 74 68  65 20 47 55 53 49 4E 49  54 20 75 6E 69 74 20 2D  20 73 68 6F 77 69 6E 67   uses the GUSINIT unit - showing
00013B80  20 79 6F 75 20 68 6F 77  20 65 61 73 79 20 69 74  20 69 73 20 74 6F 20 75  73 65 2E 0D 0A 0D 0A 4C   you how easy it is to use.L
00013BA0  4F 41 44 4D 4F 44 2E 50  41 53 0D 0A 54 68 69 73  20 69 73 20 61 20 75 6E  69 74 20 77 68 69 63 68  OADMOD.PASThis is a unit which
00013BC0  20 70 72 6F 76 69 64 65  73 20 73 65 72 76 69 63  65 73 20 74 6F 20 6C 6F  61 64 20 41 6D 69 67 61   provides services to load Amiga
00013BE0  20 27 2E 4D 4F 44 27 20  66 69 6C 65 73 20 69 6E  74 6F 20 47 55 53 20 52  41 4D 20 61 6E 64 20 6D   '.MOD' files into GUS RAM and m
00013C00  61 69 6E 20 6D 65 6D 6F  72 79 2E 20 20 41 66 74  65 72 20 63 61 6C 6C 69  6E 67 20 61 20 73 69 6E  ain memory.  After calling a sin
00013C20  67 6C 65 20 66 75 6E 63  74 69 6F 6E 2C 20 74 68  65 20 66 69 6C 65 20 77  69 6C 6C 20 68 61 76 65  gle function, the file will have
00013C40  20 62 65 65 6E 20 6C 6F  61 64 65 64 20 61 6E 64  20 74 68 65 20 73 61 6D  70 6C 65 73 20 63 6F 6E   been loaded and the samples con
00013C60  74 61 69 6E 65 64 20 69  6E 20 69 74 20 73 65 74  20 75 70 20 74 6F 20 70  6C 61 79 2E 20 20 49 74  tained in it set up to play.  It
00013C80  20 69 73 20 6C 65 66 74  20 75 70 20 74 6F 20 79  6F 75 20 74 6F 20 73 75  70 70 6C 79 20 70 6C 61   is left up to you to supply pla
00013CA0  79 62 61 63 6B 20 72 6F  75 74 69 6E 65 73 20 6F  72 20 74 72 69 76 69 61  6C 20 73 61 6D 70 6C 65  yback routines or trivial sample
00013CC0  2D 70 6C 61 79 69 6E 67  20 72 6F 75 74 69 6E 65  73 2E 0D 0A 0D 0A 0D 0A  0C 33 2E 31 33 2E 33 20  -playing routines.3.13.3 
00013CE0  4D 61 6E 61 67 65 6D 65  6E 74 20 6F 66 20 47 55  53 20 52 41 4D 2E 0D 0A  0D 0A 54 68 65 20 50 61  Management of GUS RAM.The Pa
00013D00  73 63 61 6C 20 76 65 72  73 69 6F 6E 20 6F 66 20  74 68 65 20 53 44 4B 20  65 6D 70 6C 6F 79 73 20  scal version of the SDK employs 
00013D20  61 20 64 69 66 66 65 72  65 6E 74 20 61 70 70 72  6F 61 63 68 20 74 6F 20  6D 65 6D 6F 72 79 20 63  a different approach to memory c
00013D40  6F 6E 74 72 6F 6C 20 74  68 61 6E 20 74 68 65 20  43 20 74 6F 6F 6C 6B 69  74 2E 20 20 49 6E 20 74  ontrol than the C toolkit.  In t
00013D60  68 65 20 43 20 53 44 4B  2C 20 61 20 73 6D 61 6C  6C 20 61 6D 6F 75 6E 74  20 6F 66 20 74 68 65 20  he C SDK, a small amount of the 
00013D80  47 55 53 20 52 41 4D 20  69 73 20 75 73 65 64 20  74 6F 20 6B 65 65 70 20  74 72 61 63 6B 20 6F 66  GUS RAM is used to keep track of
00013DA0  20 61 6C 6C 6F 63 61 74  65 64 20 62 6C 6F 63 6B  73 2E 20 20 49 6E 20 74  68 65 20 50 61 73 63 61   allocated blocks.  In the Pasca
00013DC0  6C 20 53 44 4B 2C 20 61  20 76 65 72 79 20 73 6D  61 6C 6C 20 61 6D 6F 75  6E 74 20 6F 66 20 68 65  l SDK, a very small amount of he
00013DE0  61 70 20 73 70 61 63 65  20 69 73 20 75 73 65 64  20 74 6F 20 6B 65 65 70  20 74 72 61 63 6B 20 6F  ap space is used to keep track o
00013E00  66 20 74 68 65 20 62 6C  6F 63 6B 73 2E 0D 0A 0D  0A 42 65 63 61 75 73 65  20 6F 66 20 74 68 65 20  f the blocks.Because of the 
00013E20  77 61 79 20 74 68 65 20  55 6C 74 72 61 53 6F 75  6E 64 20 52 41 4D 20 69  73 20 73 74 72 75 63 74  way the UltraSound RAM is struct
00013E40  75 72 65 64 2C 20 61 6E  79 20 70 61 72 74 69 63  75 6C 61 72 20 63 61 72  64 20 68 61 73 20 61 20  ured, any particular card has a 
00013E60  74 6F 74 61 6C 20 61 6D  6F 75 6E 74 20 6F 66 20  69 6E 73 74 61 6C 6C 65  64 20 52 41 4D 20 74 68  total amount of installed RAM th
00013E80  61 74 20 69 73 20 61 20  6D 75 6C 74 69 70 6C 65  20 6F 66 20 32 35 36 6B  2E 20 20 53 69 6E 63 65  at is a multiple of 256k.  Since
00013EA0  20 73 61 6D 70 6C 65 73  20 63 61 6E 6E 6F 74 20  62 65 20 70 6C 61 79 65  64 20 61 63 72 6F 73 73   samples cannot be played across
00013EC0  20 74 68 65 73 65 20 62  6F 75 6E 64 61 72 69 65  73 2C 20 74 68 65 20 64  72 69 76 65 72 20 75 6E   these boundaries, the driver un
00013EE0  69 74 20 64 69 76 69 64  65 73 20 74 68 65 20 74  6F 74 61 6C 20 52 41 4D  20 62 79 20 32 35 36 6B  it divides the total RAM by 256k
00013F00  20 69 6E 74 6F 20 31 20  74 6F 20 34 20 27 70 6F  6F 6C 73 27 2E 0D 0A 0D  0A 20 20 20 20 20 20 20   into 1 to 4 'pools'.       
00013F20  20 7C 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D   |------------------------------
00013F40  2D 2D 2D 2D 2D 2D 2D 2D  7C 0D 0A 20 20 20 20 20  20 20 20 7C 20 20 20 20  20 20 20 20 20 20 20 20  --------|        |            
00013F60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 7C 20 32 35 36 6B                            | 256k
00013F80  20 28 61 20 73 69 6E 67  6C 65 20 27 70 6F 6F 6C  27 29 0D 0A 20 20 20 20  20 20 20 20 7C 2D 2D 2D   (a single 'pool')        |---
00013FA0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  --------------------------------
00013FC0  2D 2D 2D 7C 0D 0A 0D 0A  45 61 63 68 20 6F 66 20  74 68 65 73 65 20 70 6F  6F 6C 73 20 69 73 20 73  ---|Each of these pools is s
00013FE0  65 65 6E 20 61 73 20 61  20 73 69 6E 67 6C 65 20  75 6E 69 74 20 77 68 69  63 68 20 63 61 6E 20 62  een as a single unit which can b
00014000  65 20 73 75 62 64 69 76  69 64 65 64 2E 20 20 46  6F 72 20 74 68 65 20 70  75 72 70 6F 73 65 73 20  e subdivided.  For the purposes 
00014020  6F 66 20 74 68 69 73 20  65 78 61 6D 70 6C 65 2C  20 77 65 20 77 69 6C 6C  20 75 73 65 20 61 20 47  of this example, we will use a G
00014040  55 53 20 77 68 69 63 68  20 68 61 73 20 35 31 32  6B 20 69 6E 73 74 61 6C  6C 65 64 2E 20 49 66 20  US which has 512k installed. If 
00014060  74 68 69 73 20 69 73 20  74 68 65 20 63 61 73 65  2C 20 74 68 65 72 65 20  77 69 6C 6C 20 62 65 20  this is the case, there will be 
00014080  74 77 6F 20 70 6F 6F 6C  73 20 6F 66 20 52 41 4D  20 61 76 61 69 6C 61 62  6C 65 3A 0D 0A 0D 0A 20  two pools of RAM available: 
000140A0  20 20 20 20 20 20 20 7C  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D         |------------------------
000140C0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 7C 0D  0A 20 20 20 20 20 20 20  20 7C 20 20 20 20 20 20  --------------|        |      
000140E0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20                                  
00014100  7C 20 50 6F 6F 6C 20 31  0D 0A 20 20 20 20 20 20  20 20 7C 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  | Pool 1        |-------------
00014120  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 7C 0D 0A 20 20 20 20  -------------------------|    
00014140  20 20 20 20 7C 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20      |                           
00014160  20 20 20 20 20 20 20 20  20 20 20 7C 20 50 6F 6F  6C 20 32 0D 0A 20 20 20  20 20 20 20 20 7C 2D 2D             | Pool 2        |--
00014180  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  --------------------------------
000141A0  2D 2D 2D 2D 7C 0D 0A 0D  0A 4F 6E 63 65 20 74 68  65 20 63 61 72 64 20 68  61 73 20 62 65 65 6E 20  ----|Once the card has been 
000141C0  69 6E 69 74 69 61 6C 69  7A 65 64 2C 20 74 68 65  72 65 20 77 69 6C 6C 20  62 65 20 61 20 73 6D 61  initialized, there will be a sma
000141E0  6C 6C 20 61 6D 6F 75 6E  74 20 6F 66 20 68 65 61  70 20 73 70 61 63 65 20  62 65 69 6E 67 20 75 73  ll amount of heap space being us
00014200  65 64 20 74 6F 20 6B 65  65 70 20 74 72 61 63 6B  20 6F 66 20 74 68 65 73  65 20 70 6F 6F 6C 73 20  ed to keep track of these pools 
00014220  28 75 73 75 61 6C 6C 79  20 6C 65 73 73 20 74 68  61 6E 20 31 30 30 20 62  79 74 65 73 29 2E 20 20  (usually less than 100 bytes).  
00014240  41 74 20 74 68 69 73 20  70 6F 69 6E 74 2C 20 74  68 65 20 55 6C 74 72 61  4D 61 78 46 72 65 65 20  At this point, the UltraMaxFree 
00014260  66 75 6E 63 74 69 6F 6E  20 77 69 6C 6C 20 72 65  74 75 72 6E 20 32 35 36  6B 2C 20 73 69 6E 63 65  function will return 256k, since
00014280  20 74 68 65 20 73 69 7A  65 20 6F 66 20 74 68 65  20 6C 61 72 67 65 73 74  20 62 6C 6F 63 6B 20 74   the size of the largest block t
000142A0  68 61 74 20 63 61 6E 20  62 65 20 61 6C 6C 6F 63  61 74 65 64 20 69 73 20  6F 6E 65 20 65 6E 74 69  hat can be allocated is one enti
000142C0  72 65 20 70 6F 6F 6C 2E  20 20 54 68 65 20 55 6C  72 61 4D 65 6D 41 76 61  69 6C 20 66 75 6E 63 74  re pool.  The UlraMemAvail funct
000142E0  69 6F 6E 20 77 69 6C 6C  20 72 65 74 75 72 6E 20  35 31 32 6B 20 68 6F 77  65 76 65 72 2C 20 72 65  ion will return 512k however, re
00014300  66 6C 65 63 74 69 6E 67  20 74 68 65 20 74 6F 74  61 6C 20 61 6D 6F 75 6E  74 20 6F 66 20 6D 65 6D  flecting the total amount of mem
00014320  6F 72 79 20 73 74 69 6C  6C 20 61 76 61 69 6C 61  62 6C 65 2E 0D 0A 0D 0A  49 66 20 61 20 75 73 65  ory still available.If a use
00014340  72 20 77 65 72 65 20 74  6F 20 61 6C 6C 6F 63 61  74 65 20 61 20 31 32 38  6B 20 63 68 75 6E 6B 20  r were to allocate a 128k chunk 
00014360  6F 66 20 6D 65 6D 6F 72  79 2C 20 74 68 65 20 61  6C 6C 6F 63 61 74 69 6F  6E 20 72 6F 75 74 69 6E  of memory, the allocation routin
00014380  65 73 20 77 6F 75 6C 64  20 6C 6F 6F 6B 20 69 6E  20 65 61 63 68 20 70 6F  6F 6C 20 73 65 71 75 65  es would look in each pool seque
000143A0  6E 74 69 61 6C 6C 79 20  75 6E 74 69 6C 20 61 20  70 6F 6F 6C 20 69 73 20  66 6F 75 6E 64 20 77 69  ntially until a pool is found wi
000143C0  74 68 20 65 6E 6F 75 67  68 20 72 6F 6F 6D 20 66  6F 72 20 74 68 65 20 6E  65 77 20 62 6C 6F 63 6B  th enough room for the new block
000143E0  2E 20 20 41 74 20 74 68  69 73 20 70 6F 69 6E 74  20 69 6E 20 6F 75 72 20  65 78 61 6D 70 6C 65 2C  .  At this point in our example,
00014400  20 69 74 20 77 6F 75 6C  64 20 75 73 65 20 50 6F  6F 6C 20 31 2E 0D 0A 0D  0A 20 20 20 20 20 20 20   it would use Pool 1.       
00014420  20 7C 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D   |------------------------------
00014440  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 7C 0D 0A 20 20 20  20 20 20 20 20 7C 58 58  58 58 58 58 58 58 58 58  ----------|        |XXXXXXXXXX
00014460  58 58 58 58 58 58 58 58  58 58 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 7C 20  XXXXXXXXXX                    | 
00014480  50 6F 6F 6C 20 31 0D 0A  20 20 20 20 20 20 20 20  7C 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  Pool 1        |---------------
000144A0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 7C 0D 0A 20 20 20 20  -------------------------|    
000144C0  20 20 20 20 7C 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20      |                           
000144E0  20 20 20 20 20 20 20 20  20 20 20 20 20 7C 20 50  6F 6F 6C 20 32 0D 0A 20  20 20 20 20 20 20 20 7C               | Pool 2        |
00014500  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  --------------------------------
00014520  2D 2D 2D 2D 2D 2D 2D 2D  7C 0D 0A 0D 0A 54 68 65  20 58 27 73 20 69 6E 20  74 68 65 20 64 69 61 67  --------|The X's in the diag
00014540  72 61 6D 20 61 62 6F 76  65 20 72 65 66 6C 65 63  74 20 75 73 65 64 20 73  70 61 63 65 2E 20 20 49  ram above reflect used space.  I
00014560  66 20 74 68 65 20 73 69  7A 65 20 6F 66 20 74 68  65 20 62 6C 6F 63 6B 20  62 65 69 6E 67 20 61 6C  f the size of the block being al
00014580  6C 6F 63 61 74 65 64 20  69 73 20 6E 6F 74 20 64  69 76 69 73 69 62 6C 65  20 62 79 20 33 32 2C 20  located is not divisible by 32, 
000145A0  74 68 65 20 61 63 74 75  61 6C 20 73 69 7A 65 20  6F 66 20 74 68 65 20 62  6C 6F 63 6B 20 69 6E 20  the actual size of the block in 
000145C0  6D 65 6D 6F 72 79 20 69  73 20 69 6E 63 72 65 61  73 65 64 20 74 6F 20 74  68 65 20 6E 65 78 74 20  memory is increased to the next 
000145E0  6D 75 6C 74 69 70 6C 65  20 6F 66 20 33 32 2E 20  20 46 6F 72 20 65 78 61  6D 70 6C 65 2C 20 69 66  multiple of 32.  For example, if
00014600  20 49 20 77 65 72 65 20  74 6F 20 61 73 6B 20 66  6F 72 20 61 20 35 30 20  62 79 74 65 20 63 68 75   I were to ask for a 50 byte chu
00014620  6E 6B 20 6F 66 20 52 41  4D 2C 20 74 68 65 20 61  63 74 75 61 6C 20 73 69  7A 65 20 6F 66 20 72 61  nk of RAM, the actual size of ra
00014640  6D 20 74 68 61 74 20 49  20 77 6F 75 6C 64 20 62  65 20 75 73 69 6E 67 20  77 6F 75 6C 64 20 62 65  m that I would be using would be
00014660  20 36 34 20 62 79 74 65  73 20 69 6E 20 73 69 7A  65 2E 20 20 54 68 69 73  20 69 73 20 73 6F 20 74   64 bytes in size.  This is so t
00014680  68 61 74 20 61 6C 6C 20  6D 65 6D 6F 72 79 20 6C  6F 63 61 74 69 6F 6E 73  20 72 65 74 75 72 6E 65  hat all memory locations returne
000146A0  64 20 77 69 6C 6C 20 62  65 20 61 6C 69 67 6E 65  64 20 6F 6E 20 61 20 33  32 2D 62 79 74 65 20 62  d will be aligned on a 32-byte b
000146C0  6F 75 6E 64 61 72 79 2E  20 20 41 74 20 74 68 69  73 20 70 6F 69 6E 74 2C  20 74 68 65 20 55 6C 74  oundary.  At this point, the Ult
000146E0  72 61 4D 61 78 46 72 65  65 20 66 75 6E 63 74 69  6F 6E 20 77 69 6C 6C 20  72 65 74 75 72 6E 20 32  raMaxFree function will return 2
00014700  35 36 6B 2C 20 73 69 6E  63 65 20 74 68 65 20 73  69 7A 65 20 6F 66 20 74  68 65 20 6C 61 72 67 65  56k, since the size of the large
00014720  73 74 20 62 6C 6F 63 6B  20 74 68 61 74 20 63 61  6E 20 62 65 20 61 6C 6C  6F 63 61 74 65 64 20 69  st block that can be allocated i
00014740  73 20 73 74 69 6C 6C 20  6F 6E 65 20 65 6E 74 69  72 65 20 70 6F 6F 6C 20  28 50 6F 6F 6C 20 32 29  s still one entire pool (Pool 2)
00014760  2E 20 20 54 68 65 20 55  6C 74 72 61 4D 65 6D 41  76 61 69 6C 20 66 75 6E  63 74 69 6F 6E 20 77 69  .  The UltraMemAvail function wi
00014780  6C 6C 20 72 65 74 75 72  6E 20 33 38 34 6B 2C 20  72 65 66 6C 65 63 74 69  6E 67 20 74 68 65 20 74  ll return 384k, reflecting the t
000147A0  6F 74 61 6C 20 61 6D 6F  75 6E 74 20 6F 66 20 6D  65 6D 6F 72 79 20 73 74  69 6C 6C 20 61 76 61 69  otal amount of memory still avai
000147C0  6C 61 62 6C 65 2E 0D 0A  0D 0A 49 66 20 61 20 75  73 65 72 20 77 65 72 65  20 74 6F 20 6E 6F 77 20  lable.If a user were to now 
000147E0  61 6C 6C 6F 63 61 74 65  20 61 20 32 30 30 6B 20  63 68 75 6E 6B 20 6F 66  20 6D 65 6D 6F 72 79 2C  allocate a 200k chunk of memory,
00014800  20 74 68 65 20 61 6C 6C  6F 63 61 74 69 6F 6E 20  72 6F 75 74 69 6E 65 73  20 77 6F 75 6C 64 20 6F   the allocation routines would o
00014820  6E 63 65 20 61 67 61 69  6E 20 6C 6F 6F 6B 20 69  6E 20 65 61 63 68 20 70  6F 6F 6C 20 73 65 71 75  nce again look in each pool sequ
00014840  65 6E 74 69 61 6C 6C 79  20 75 6E 74 69 6C 20 61  20 70 6F 6F 6C 20 69 73  20 66 6F 75 6E 64 20 77  entially until a pool is found w
00014860  69 74 68 20 65 6E 6F 75  67 68 20 72 6F 6F 6D 20  66 6F 72 20 74 68 65 20  6E 65 77 20 62 6C 6F 63  ith enough room for the new bloc
00014880  6B 2E 20 20 41 74 20 74  68 69 73 20 70 6F 69 6E  74 20 69 6E 20 6F 75 72  20 65 78 61 6D 70 6C 65  k.  At this point in our example
000148A0  2C 20 69 74 20 77 6F 75  6C 64 20 68 61 76 65 20  74 6F 20 75 73 65 20 50  6F 6F 6C 20 32 2C 20 73  , it would have to use Pool 2, s
000148C0  69 6E 63 65 20 74 68 65  72 65 20 69 73 20 6E 6F  74 20 65 6E 6F 75 67 68  20 72 6F 6F 6D 20 6C 65  ince there is not enough room le
000148E0  66 74 20 69 6E 20 50 6F  6F 6C 20 31 2E 0D 0A 0D  0A 20 20 20 20 20 20 20  20 7C 2D 2D 2D 2D 2D 2D  ft in Pool 1.        |------
00014900  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  --------------------------------
00014920  2D 2D 7C 0D 0A 20 20 20  20 20 20 20 20 7C 58 58  58 58 58 58 58 58 58 58  58 58 58 58 58 58 58 58  --|        |XXXXXXXXXXXXXXXXXX
00014940  58 58 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 7C 20  50 6F 6F 6C 20 31 0D 0A  XX                    | Pool 1
00014960  20 20 20 20 20 20 20 20  7C 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D          |-----------------------
00014980  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 7C 0D 0A 20 20 20 20  20 20 20 20 7C 59 59 59  -----------------|        |YYY
000149A0  59 59 59 59 59 59 59 59  59 59 59 59 59 59 59 59  59 59 59 59 59 59 59 59  59 59 59 59 20 20 20 20  YYYYYYYYYYYYYYYYYYYYYYYYYYYY    
000149C0  20 20 20 20 20 7C 20 50  6F 6F 6C 20 32 0D 0A 20  20 20 20 20 20 20 20 7C  2D 2D 2D 2D 2D 2D 2D 2D       | Pool 2        |--------
000149E0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  --------------------------------
00014A00  7C 0D 0A 0D 0A 41 74 20  74 68 69 73 20 70 6F 69  6E 74 2C 20 74 68 65 20  55 6C 74 72 61 4D 61 78  |At this point, the UltraMax
00014A20  46 72 65 65 20 66 75 6E  63 74 69 6F 6E 20 77 6F  75 6C 64 20 72 65 74 75  72 6E 20 31 32 38 6B 2C  Free function would return 128k,
00014A40  20 73 69 6E 63 65 20 74  68 65 20 6C 61 72 67 65  73 74 20 62 6C 6F 63 6B  20 66 72 65 65 20 69 73   since the largest block free is
00014A60  20 69 6E 20 50 6F 6F 6C  20 31 2E 20 20 55 6C 74  72 61 4D 65 6D 46 72 65  65 20 77 6F 75 6C 64 20   in Pool 1.  UltraMemFree would 
00014A80  6E 6F 77 20 72 65 74 75  72 6E 20 31 38 34 6B 2E  20 20 49 66 20 77 65 20  77 65 72 65 20 74 6F 20  now return 184k.  If we were to 
00014AA0  61 6C 6C 6F 63 61 74 65  20 61 20 74 68 69 72 64  20 62 6C 6F 63 6B 20 6F  66 20 37 30 6B 2C 20 74  allocate a third block of 70k, t
00014AC0  68 65 20 64 69 61 67 72  61 6D 20 77 6F 75 6C 64  20 6C 6F 6F 6B 20 6C 69  6B 65 3A 0D 0A 0D 0A 20  he diagram would look like: 
00014AE0  20 20 20 20 20 20 20 7C  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D         |------------------------
00014B00  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  7C 0D 0A 20 20 20 20 20  20 20 20 7C 58 58 58 58  ----------------|        |XXXX
00014B20  58 58 58 58 58 58 58 58  58 58 58 58 58 58 58 58  5A 5A 5A 5A 5A 5A 5A 5A  5A 5A 20 20 20 20 20 20  XXXXXXXXXXXXXXXXZZZZZZZZZZ      
00014B40  20 20 20 20 7C 20 50 6F  6F 6C 20 31 0D 0A 20 20  20 20 20 20 20 20 7C 2D  2D 2D 2D 2D 2D 2D 2D 2D      | Pool 1        |---------
00014B60  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 7C  -------------------------------|
00014B80  0D 0A 20 20 20 20 20 20  20 20 7C 59 59 59 59 59  59 59 59 59 59 59 59 59  59 59 59 59 59 59 59 59          |YYYYYYYYYYYYYYYYYYYYY
00014BA0  59 59 59 59 59 59 59 59  59 59 20 20 20 20 20 20  20 20 20 7C 20 50 6F 6F  6C 20 32 0D 0A 20 20 20  YYYYYYYYYY         | Pool 2   
00014BC0  20 20 20 20 20 7C 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D       |--------------------------
00014BE0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 7C 0D  0A 0D 0A 49 66 20 77 65  20 77 65 72 65 20 74 6F  --------------|If we were to
00014C00  20 6E 6F 77 20 44 45 61  6C 6C 6F 63 61 74 65 20  74 68 65 20 66 69 72 73  74 20 62 6C 6F 63 6B 20   now DEallocate the first block 
00014C20  28 74 68 65 20 58 27 73  20 69 6E 20 74 68 65 20  64 69 61 67 72 61 6D 29  2C 20 77 65 20 77 6F 75  (the X's in the diagram), we wou
00014C40  6C 64 20 62 65 20 6C 65  66 74 20 77 69 74 68 20  61 20 27 68 6F 6C 65 27  20 69 6E 20 74 68 65 20  ld be left with a 'hole' in the 
00014C60  72 61 6D 2E 20 20 54 68  69 73 20 69 73 20 72 65  6D 69 6E 69 73 63 65 6E  74 20 6F 66 20 61 20 68  ram.  This is reminiscent of a h
00014C80  61 72 64 20 64 69 73 6B  27 73 20 66 72 65 65 20  73 70 61 63 65 20 66 72  61 67 6D 65 6E 74 61 74  ard disk's free space fragmentat
00014CA0  69 6F 6E 2E 0D 0A 0D 0A  20 20 20 20 20 20 20 20  7C 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  ion.        |---------------
00014CC0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 7C 0D 0A 20 20 20 20  -------------------------|    
00014CE0  20 20 20 20 7C 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 5A 5A 5A 5A 5A 5A 5A      |                    ZZZZZZZ
00014D00  5A 5A 5A 20 20 20 20 20  20 20 20 20 20 7C 20 50  6F 6F 6C 20 31 0D 0A 20  20 20 20 20 20 20 20 7C  ZZZ          | Pool 1        |
00014D20  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  --------------------------------
00014D40  2D 2D 2D 2D 2D 2D 2D 2D  7C 0D 0A 20 20 20 20 20  20 20 20 7C 59 59 59 59  59 59 59 59 59 59 59 59  --------|        |YYYYYYYYYYYY
00014D60  59 59 59 59 59 59 59 59  59 59 59 59 59 59 59 59  59 59 59 20 20 20 20 20  20 20 20 20 7C 20 50 6F  YYYYYYYYYYYYYYYYYYY         | Po
00014D80  6F 6C 20 32 0D 0A 20 20  20 20 20 20 20 20 7C 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  ol 2        |-----------------
00014DA0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 7C  0D 0A 0D 0A 4E 6F 74 65  -----------------------|Note
00014DC0  20 74 68 61 74 20 74 68  65 20 53 44 4B 27 73 20  6D 65 6D 6F 72 79 20 61  6C 6C 6F 63 61 74 69 6F   that the SDK's memory allocatio
00014DE0  6E 20 72 6F 75 74 69 6E  65 73 20 64 6F 20 4E 4F  54 20 72 65 6C 6F 63 61  74 65 20 73 61 6D 70 6C  n routines do NOT relocate sampl
00014E00  65 73 20 74 6F 20 66 65  6E 64 20 6F 66 66 20 66  72 61 67 6D 65 6E 74 61  74 69 6F 6E 2E 20 20 4E  es to fend off fragmentation.  N
00014E20  6F 74 65 20 61 6C 73 6F  20 74 68 61 74 20 74 68  65 20 6D 65 6D 6F 72 79  20 72 6F 75 74 69 6E 65  ote also that the memory routine
00014E40  73 20 61 72 65 20 73 65  74 20 75 70 20 61 6E 64  20 61 72 65 20 72 65 61  64 79 20 74 6F 20 62 65  s are set up and are ready to be
00014E60  20 75 73 65 64 20 61 73  20 73 6F 6F 6E 20 61 73  20 79 6F 75 20 63 61 6C  6C 20 55 6C 74 72 61 4F   used as soon as you call UltraO
00014E80  70 65 6E 2C 20 61 6E 64  20 61 72 65 20 63 6C 6F  73 65 64 20 64 6F 77 6E  20 61 75 74 6F 6D 61 74  pen, and are closed down automat
00014EA0  69 63 61 6C 6C 79 20 28  61 6E 64 20 74 68 65 20  68 65 61 70 20 73 70 61  63 65 20 74 68 65 79 20  ically (and the heap space they 
00014EC0  75 73 65 20 64 65 61 6C  6C 6F 63 61 74 65 64 29  20 77 68 65 6E 20 79 6F  75 20 63 61 6C 6C 20 55  use deallocated) when you call U
00014EE0  6C 74 72 61 43 6C 6F 73  65 2E 0D 0A 0D 0A 0D 0A  0D 0A 33 2E 31 34 20 43  6F 6D 69 6E 67 20 41 74  ltraClose.3.14 Coming At
00014F00  74 72 61 63 74 69 6F 6E  73 0D 0A 0D 0A 54 68 65  72 65 20 61 72 65 20 61  20 63 6F 75 70 6C 65 20  tractionsThere are a couple 
00014F20  6F 66 20 61 64 64 65 6E  64 75 6D 73 20 74 6F 20  74 68 65 20 53 44 4B 20  74 68 61 74 20 77 69 6C  of addendums to the SDK that wil
00014F40  6C 20 62 65 20 72 65 6C  65 61 73 65 64 20 61 73  20 74 68 65 79 20 61 72  65 20 63 6F 6D 70 6C 65  l be released as they are comple
00014F60  74 65 64 2E 20 20 54 68  65 79 20 64 65 61 6C 20  77 69 74 68 20 68 61 72  64 77 61 72 65 20 74 68  ted.  They deal with hardware th
00014F80  61 74 20 69 73 20 69 6E  20 74 68 65 20 70 72 6F  63 65 73 73 20 6F 66 20  62 65 69 6E 67 20 20 69  at is in the process of being  i
00014FA0  6D 70 6C 65 6D 65 6E 74  65 64 2E 20 20 43 6F 64  65 20 61 6E 64 20 64 6F  63 75 6D 65 6E 74 61 74  mplemented.  Code and documentat
00014FC0  69 6F 6E 20 6E 65 63 65  73 73 61 72 79 20 74 6F  20 6D 61 6B 65 20 74 68  65 6D 20 6F 70 65 72 61  ion necessary to make them opera
00014FE0  74 65 20 77 69 6C 6C 20  62 65 20 6D 61 64 65 20  61 76 61 69 6C 61 62 6C  65 20 61 73 20 73 6F 6F  te will be made available as soo
00015000  6E 20 61 73 20 70 6F 73  73 69 62 6C 65 2E 0D 0A  0D 0A 31 29 20 4E 65 77  20 6D 69 78 65 72 2E 20  n as possible.1) New mixer. 
00015020  41 6C 6C 20 55 6C 74 72  61 53 6F 75 6E 64 73 20  74 68 61 74 20 61 72 65  20 6D 61 64 65 20 74 68  All UltraSounds that are made th
00015040  61 74 20 68 61 76 65 20  61 20 62 6F 61 72 64 20  72 65 76 69 73 69 6F 6E  20 6E 75 6D 62 65 72 20  at have a board revision number 
00015060  67 72 65 61 74 65 72 20  74 68 61 6E 20 33 2E 36  20 77 69 6C 6C 20 69 6E  63 6F 72 70 6F 72 61 74  greater than 3.6 will incorporat
00015080  65 20 61 20 6E 65 77 20  6D 69 78 65 72 2E 20 20  42 61 73 69 63 61 6C 6C  79 2C 20 74 68 69 73 20  e a new mixer.  Basically, this 
000150A0  6D 69 78 65 72 20 61 6C  6C 6F 77 73 20 73 6F 66  74 77 61 72 65 20 63 6F  6E 74 72 6F 6C 20 6F 76  mixer allows software control ov
000150C0  65 72 20 74 68 65 20 6C  65 76 65 6C 73 20 6F 66  20 74 68 65 20 69 6E 70  75 74 20 61 6E 64 20 6F  er the levels of the input and o
000150E0  75 74 70 75 74 20 73 69  67 6E 61 6C 73 2E 20 20  54 68 69 73 20 69 73 20  61 20 31 20 63 68 69 70  utput signals.  This is a 1 chip
00015100  20 6D 69 78 65 72 3A 20  47 72 61 76 69 73 20 77  69 6C 6C 20 6D 61 6B 65  20 73 70 65 63 73 20 61   mixer: Gravis will make specs a
00015120  6E 64 20 62 6C 6F 63 6B  20 64 69 61 67 72 61 6D  73 20 61 76 61 69 6C 61  62 6C 65 20 61 73 20 73  nd block diagrams available as s
00015140  6F 6F 6E 20 61 73 20 77  65 20 63 61 6E 2E 0D 0A  0C 32 29 20 31 36 20 62  69 74 20 72 65 63 6F 72  oon as we can.2) 16 bit recor
00015160  64 69 6E 67 20 73 75 70  70 6F 72 74 2E 20 54 68  69 73 20 66 61 6C 6C 73  20 69 6E 74 6F 20 32 20  ding support. This falls into 2 
00015180  63 61 74 65 67 6F 72 69  65 73 3A 20 64 61 75 67  68 74 65 72 20 63 61 72  64 20 73 75 70 70 6F 72  categories: daughter card suppor
000151A0  74 20 61 6E 64 20 55 6C  74 72 61 4D 61 78 20 73  75 70 70 6F 72 74 2E 20  20 42 6F 74 68 20 6F 66  t and UltraMax support.  Both of
000151C0  20 74 68 65 73 65 20 75  73 65 20 74 68 65 20 73  61 6D 65 20 63 68 69 70  20 28 43 72 79 73 74 61   these use the same chip (Crysta
000151E0  6C 20 53 65 6D 69 63 6F  6E 64 75 63 74 6F 72 73  20 43 53 34 32 33 31 20  43 4F 44 45 43 29 2E 20  l Semiconductors CS4231 CODEC). 
00015200  20 43 6F 6E 74 61 63 74  20 43 72 79 73 74 61 6C  20 74 6F 20 67 65 74 20  61 20 64 61 74 61 20 73   Contact Crystal to get a data s
00015220  68 65 65 74 20 66 6F 72  20 73 70 65 63 73 20 6F  6E 20 68 6F 77 20 74 6F  20 70 72 6F 67 72 61 6D  heet for specs on how to program
00015240  20 69 74 3A 20 74 68 65  69 72 20 74 65 6C 65 70  68 6F 6E 65 20 6E 75 6D  62 65 72 20 69 73 20 28   it: their telephone number is (
00015260  35 31 32 29 20 34 34 35  2D 37 32 32 32 2E 20 54  68 65 20 6F 6E 6C 79 20  64 69 66 66 65 72 65 6E  512) 445-7222. The only differen
00015280  63 65 20 69 6E 20 74 68  65 20 31 36 20 62 69 74  20 72 65 63 6F 72 64 69  6E 67 20 63 61 70 61 62  ce in the 16 bit recording capab
000152A0  69 6C 69 74 69 65 73 20  6F 66 20 74 68 65 20 32  20 63 61 72 64 73 20 69  73 20 69 6E 20 68 6F 77  ilities of the 2 cards is in how
000152C0  20 69 74 20 69 6E 74 65  72 66 61 63 65 73 20 74  6F 20 74 68 65 20 72 65  73 74 20 6F 66 20 74 68   it interfaces to the rest of th
000152E0  65 20 55 6C 74 72 61 53  6F 75 6E 64 20 63 61 72  64 2E 20 20 42 6C 6F 63  6B 20 64 69 61 67 72 61  e UltraSound card.  Block diagra
00015300  6D 73 20 66 6F 72 20 62  6F 74 68 20 6F 66 20 74  68 65 73 65 20 62 6F 61  72 64 73 20 77 69 6C 6C  ms for both of these boards will
00015320  20 62 65 20 6D 61 64 65  20 61 76 61 69 6C 61 62  6C 65 20 77 68 65 6E 20  74 68 65 20 74 6F 6F 6C   be made available when the tool
00015340  6B 69 74 20 66 6F 72 20  74 68 65 20 63 6F 64 65  63 20 69 73 20 72 65 6C  65 61 73 65 64 2E 0D 0A  kit for the codec is released.
00015360  0D 0A 0D 0A 0D 0A 33 2E  31 35 20 54 65 63 68 6E  69 63 61 6C 20 53 75 70  70 6F 72 74 0D 0A 0D 0A  3.15 Technical Support
00015380  51 75 65 73 74 69 6F 6E  73 20 72 65 67 61 72 64  69 6E 67 20 74 68 65 20  53 44 4B 20 63 61 6E 20  Questions regarding the SDK can 
000153A0  62 65 20 73 65 6E 74 20  74 6F 3A 0D 0A 0D 0A 53  44 4B 20 54 65 63 68 6E  69 63 61 6C 20 53 75 70  be sent to:SDK Technical Sup
000153C0  70 6F 72 74 0D 0A 41 64  76 61 6E 63 65 64 20 47  72 61 76 69 73 0D 0A 31  30 31 2D 33 37 35 30 20  portAdvanced Gravis101-3750 
000153E0  4E 6F 72 74 68 20 46 72  61 73 65 72 20 57 61 79  0D 0A 42 75 72 6E 61 62  79 2C 20 42 72 69 74 69  North Fraser WayBurnaby, Briti
00015400  73 68 20 43 6F 6C 75 6D  62 69 61 20 56 35 4A 20  35 45 39 0D 0A 46 41 58  20 28 36 30 34 29 20 34  sh Columbia V5J 5E9FAX (604) 4
00015420  33 31 2D 35 31 35 35 0D  0A 0D 0A 49 66 20 79 6F  75 20 68 61 76 65 20 61  63 63 65 73 73 20 74 6F  31-5155If you have access to
00015440  20 61 20 6D 6F 64 65 6D  2C 20 79 6F 75 20 63 61  6E 20 63 6F 6E 74 61 63  74 20 47 72 61 76 69 73   a modem, you can contact Gravis
00015460  27 20 42 42 53 20 61 74  3A 0D 0A 28 36 30 34 29  20 34 33 31 2D 35 39 32  37 0D 0A 0D 0A 49 66 20  ' BBS at:(604) 431-5927If 
00015480  79 6F 75 20 68 61 76 65  20 61 63 63 65 73 73 20  74 6F 20 69 6E 74 65 72  6E 65 74 20 6D 61 69 6C  you have access to internet mail
000154A0  20 73 65 72 76 69 63 65  73 2C 20 79 6F 75 20 63  61 6E 20 73 65 6E 64 20  6D 61 69 6C 20 74 6F 20   services, you can send mail to 
000154C0  27 6A 6F 68 6E 2E 73 6D  69 74 68 40 67 72 61 76  69 73 2E 63 6F 6D 27 20  66 6F 72 20 67 65 6E 65  'john.smith@gravis.com' for gene
000154E0  72 61 6C 20 71 75 65 73  74 69 6F 6E 73 2C 20 6F  72 20 27 6B 75 72 74 2E  6B 65 6E 6E 65 74 74 40  ral questions, or 'kurt.kennett@
00015500  67 72 61 76 69 73 2E 63  6F 6D 27 20 66 6F 72 20  71 75 65 73 74 69 6F 6E  73 20 72 65 67 61 72 64  gravis.com' for questions regard
00015520  69 6E 67 20 74 68 65 20  50 61 73 63 61 6C 20 76  65 72 73 69 6F 6E 20 6F  66 20 74 68 65 20 53 44  ing the Pascal version of the SD
00015540  4B 2E 0D 0A 0D 0A 50 6C  65 61 73 65 20 6D 61 6B  65 20 73 75 72 65 20 79  6F 75 20 68 61 76 65 20  K.Please make sure you have 
00015560  63 6F 6E 73 75 6C 74 65  64 20 74 68 69 73 20 64  6F 63 75 6D 65 6E 74 61  74 69 6F 6E 20 62 65 66  consulted this documentation bef
00015580  6F 72 65 20 63 6F 6E 74  61 63 74 69 6E 67 20 54  65 63 68 6E 69 63 61 6C  20 73 75 70 70 6F 72 74  ore contacting Technical support
000155A0  2E 20 28 52 54 46 4D 21  29 0D 0A 0D 0A 0D 0A 0C  43 68 61 70 74 65 72 20  34 20 2D 20 52 65 66 65  . (RTFM!)Chapter 4 - Refe
000155C0  72 65 6E 63 65 20 47 75  69 64 65 0D 0A 0D 0A 54  68 69 73 20 63 68 61 70  74 65 72 20 69 73 20 61  rence GuideThis chapter is a
000155E0  20 72 65 66 65 72 65 6E  63 65 20 67 75 69 64 65  20 66 6F 72 20 74 68 65  20 72 6F 75 74 69 6E 65   reference guide for the routine
00015600  73 20 74 68 61 74 20 63  6F 6D 70 72 6F 6D 69 73  65 20 62 6F 74 68 20 74  68 65 20 43 20 61 6E 64  s that compromise both the C and
00015620  20 50 61 73 63 61 6C 20  76 65 72 73 69 6F 6E 73  20 6F 66 20 74 68 65 20  53 44 4B 2E 20 20 50 6C   Pascal versions of the SDK.  Pl
00015640  65 61 73 65 20 73 65 65  20 74 68 65 20 74 61 62  6C 65 20 6F 66 20 63 6F  6E 74 65 6E 74 73 20 74  ease see the table of contents t
00015660  6F 20 6C 6F 6F 6B 20 75  70 20 61 20 70 61 72 74  69 63 75 6C 61 72 20 72  6F 75 74 69 6E 65 20 71  o look up a particular routine q
00015680  75 69 63 6B 6C 79 20 62  79 20 6E 61 6D 65 2E 0D  0A 0D 0A 0D 0A 55 6C 74  72 61 43 61 6C 63 52 61  uickly by name.UltraCalcRa
000156A0  74 65 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  te____________________________
000156C0  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 63 61 6C  63 75 6C 61 74 65 20 74  _____Purpose:To calculate t
000156E0  68 65 20 72 61 74 65 20  66 6F 72 20 61 20 76 6F  6C 75 6D 65 20 72 61 6D  70 2E 0D 0A 0D 0A 43 3A  he rate for a volume ramp.C:
00015700  09 09 09 75 6E 73 69 67  6E 65 64 20 63 68 61 72  20 55 6C 74 72 61 43 61  6C 63 52 61 74 65 28 73  unsigned char UltraCalcRate(s
00015720  74 61 72 74 2C 65 6E 64  2C 6D 69 6C 5F 73 65 63  73 29 3B 0D 0A 09 09 09  75 6E 73 69 67 6E 65 64  tart,end,mil_secs);unsigned
00015740  20 69 6E 74 20 73 74 61  72 74 3B 0D 0A 09 09 09  75 6E 73 69 67 6E 65 64  20 69 6E 74 20 65 6E 64   int start;unsigned int end
00015760  3B 0D 0A 09 09 09 75 6E  73 69 67 6E 65 64 20 6C  6F 6E 67 20 6D 69 6C 5F  73 65 63 73 3B 0D 0A 0D  ;unsigned long mil_secs;
00015780  0A 50 41 53 43 41 4C 3A  09 46 55 4E 43 54 49 4F  4E 20 55 6C 74 72 61 43  61 6C 63 52 61 74 65 28  PASCAL:FUNCTION UltraCalcRate(
000157A0  53 74 61 72 74 56 20 20  20 3A 20 57 4F 52 44 3B  0D 0A 09 09 09 20 20 20  20 20 20 20 20 20 20 20  StartV   : WORD;           
000157C0  20 20 20 20 20 20 20 20  20 20 20 20 45 6E 64 56  20 20 20 20 20 3A 20 57  4F 52 44 3B 0D 0A 09 09              EndV     : WORD;
000157E0  09 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  4D 69 6C 5F 53 65 63 73                         Mil_Secs
00015800  20 3A 20 4C 4F 4E 47 49  4E 54 29 20 3A 20 42 59  54 45 3B 0D 0A 0D 0A 52  65 6D 61 72 6B 73 3A 09   : LONGINT) : BYTE;Remarks:
00015820  54 68 69 73 20 72 6F 75  74 69 6E 65 20 63 61 6C  63 75 6C 61 74 65 73 20  74 68 65 20 72 61 74 65  This routine calculates the rate
00015840  20 6E 65 63 65 73 73 61  72 79 20 74 6F 20 72 61  6D 70 20 74 68 65 20 76  6F 6C 75 6D 65 20 66 72   necessary to ramp the volume fr
00015860  6F 6D 20 53 74 61 72 74  56 20 76 6F 6C 75 6D 65  20 28 6C 6F 67 61 72 69  74 68 6D 69 63 29 20 74  om StartV volume (logarithmic) t
00015880  6F 20 45 6E 64 56 20 76  6F 6C 75 6D 65 20 28 6C  6F 67 61 72 69 74 68 6D  69 63 29 20 69 6E 20 61  o EndV volume (logarithmic) in a
000158A0  20 64 65 73 69 72 65 64  20 23 20 6F 66 20 6D 69  6C 6C 69 73 65 63 6F 6E  64 73 2E 20 20 54 68 69   desired # of milliseconds.  Thi
000158C0  73 20 76 61 6C 75 65 20  73 68 6F 75 6C 64 20 62  65 20 70 61 73 73 65 64  20 74 6F 20 55 6C 74 72  s value should be passed to Ultr
000158E0  61 52 61 6D 70 56 6F 6C  75 6D 65 2E 20 20 54 68  69 73 20 69 73 20 6F 6E  6C 79 20 61 6E 20 61 70  aRampVolume.  This is only an ap
00015900  70 72 6F 78 69 6D 61 74  69 6F 6E 2E 20 20 54 68  65 20 6C 6F 6E 67 65 72  20 74 68 65 20 74 69 6D  proximation.  The longer the tim
00015920  65 20 73 70 61 6E 2C 20  74 68 65 20 6C 65 73 73  20 70 72 65 63 69 73 65  20 74 68 65 20 72 65 73  e span, the less precise the res
00015940  75 6C 74 20 69 73 20 6C  69 6B 65 6C 79 20 74 6F  20 62 65 2E 0D 0A 0D 0A  52 65 74 75 72 6E 73 3A  ult is likely to be.Returns:
00015960  09 41 20 76 61 6C 75 65  20 77 68 69 63 68 20 63  61 6E 20 62 65 20 70 61  73 73 65 64 20 74 6F 20  A value which can be passed to 
00015980  55 6C 74 72 61 52 61 6D  70 56 6F 6C 75 6D 65 20  6F 72 20 55 6C 74 72 61  52 61 6D 70 4C 69 6E 65  UltraRampVolume or UltraRampLine
000159A0  61 72 56 6F 6C 75 6D 65  2E 0D 0A 0D 0A 53 65 65  20 61 6C 73 6F 3A 09 55  6C 74 72 61 52 61 6D 70  arVolume.See also:UltraRamp
000159C0  56 6F 6C 75 6D 65 2C 20  55 6C 74 72 61 52 61 6D  70 4C 69 6E 65 61 72 56  6F 6C 75 6D 65 0D 0A 0D  Volume, UltraRampLinearVolume
000159E0  0A 0D 0A 0D 0A 55 6C 74  72 61 43 6C 6F 73 65 0D  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraClose_______________
00015A00  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  __________________Purpose:T
00015A20  6F 20 63 6C 6F 73 65 20  6F 75 74 20 74 68 65 20  55 6C 74 72 61 53 6F 75  6E 64 20 63 61 72 64 2E  o close out the UltraSound card.
00015A40  0D 0A 0D 0A 43 3A 09 09  09 69 6E 74 20 55 6C 74  72 61 43 6C 6F 73 65 28  76 6F 69 64 29 3B 0D 0A  C:int UltraClose(void);
00015A60  0D 0A 50 41 53 43 41 4C  3A 09 46 55 4E 43 54 49  4F 4E 20 55 6C 74 72 61  43 6C 6F 73 65 20 3A 20  PASCAL:FUNCTION UltraClose : 
00015A80  42 4F 4F 4C 45 41 4E 3B  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 54 68 69  73 20 72 6F 75 74 69 6E  BOOLEAN;Remarks:This routin
00015AA0  65 20 73 68 6F 75 6C 64  20 62 65 20 63 61 6C 6C  65 64 20 62 65 66 6F 72  65 20 79 6F 75 72 20 61  e should be called before your a
00015AC0  70 70 6C 69 63 61 74 69  6F 6E 20 65 78 69 74 73  2E 20 20 49 74 20 73 68  75 74 73 20 64 6F 77 6E  pplication exits.  It shuts down
00015AE0  20 61 6C 6C 20 61 75 64  69 6F 20 61 6E 64 20 70  75 74 73 20 74 68 65 20  63 61 72 64 20 69 6E 20   all audio and puts the card in 
00015B00  61 20 73 74 61 62 6C 65  20 73 74 61 74 65 2E 20  20 49 74 20 61 6C 73 6F  20 70 75 74 73 20 74 68  a stable state.  It also puts th
00015B20  65 20 50 43 20 62 61 63  6B 20 74 6F 20 74 68 65  20 73 74 61 74 65 20 70  72 69 6F 72 20 74 6F 20  e PC back to the state prior to 
00015B40  72 75 6E 6E 69 6E 67 20  79 6F 75 72 20 61 70 70  6C 69 63 61 74 69 6F 6E  20 28 72 65 73 65 74 73  running your application (resets
00015B60  20 69 6E 74 65 72 72 75  70 74 20 76 65 63 74 6F  72 73 20 65 74 63 29 2E  0D 0A 0D 0A 52 65 74 75   interrupt vectors etc).Retu
00015B80  72 6E 73 3A 09 54 52 55  45 20 69 66 20 43 6C 6F  73 65 20 77 61 73 20 73  75 63 63 65 73 73 66 75  rns:TRUE if Close was successfu
00015BA0  6C 2C 20 46 41 4C 53 45  20 6F 74 68 65 72 77 69  73 65 2E 0D 0A 0D 0A 53  65 65 20 61 6C 73 6F 3A  l, FALSE otherwise.See also:
00015BC0  09 55 6C 74 72 61 4F 70  65 6E 2C 20 55 6C 74 72  61 52 65 73 65 74 0D 0A  0D 0A 0C 55 6C 74 72 61  UltraOpen, UltraResetUltra
00015BE0  44 6F 77 6E 6C 6F 61 64  0D 0A 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  Download______________________
00015C00  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 0D 0A 0D 0A 50  75 72 70 6F 73 65 3A 09  44 6F 77 6E 6C 6F 61 64  ___________Purpose:Download
00015C20  20 61 20 63 68 75 6E 6B  20 6F 66 20 64 61 74 61  20 69 6E 74 6F 20 55 6C  74 72 61 53 6F 75 6E 64   a chunk of data into UltraSound
00015C40  20 44 52 41 4D 2E 0D 0A  0D 0A 43 3A 09 09 09 69  6E 74 20 55 6C 74 72 61  44 6F 77 6E 6C 6F 61 64   DRAM.C:int UltraDownload
00015C60  28 64 61 74 61 70 74 72  2C 63 6F 6E 74 72 6F 6C  2C 64 72 61 6D 5F 6C 6F  63 2C 6C 65 6E 2C 77 61  (dataptr,control,dram_loc,len,wa
00015C80  69 74 29 3B 0D 0A 09 09  09 76 6F 69 64 20 2A 64  61 74 61 70 74 72 3B 0D  0A 09 09 09 75 6E 73 69  it);void *dataptr;unsi
00015CA0  67 6E 65 64 20 63 68 61  72 20 63 6F 6E 74 72 6F  6C 3B 0D 0A 09 09 09 75  6E 73 69 67 6E 65 64 20  gned char control;unsigned 
00015CC0  6C 6F 6E 67 20 64 72 61  6D 5F 6C 6F 63 3B 0D 0A  09 09 09 75 6E 73 69 67  6E 65 64 20 69 6E 74 20  long dram_loc;unsigned int 
00015CE0  6C 65 6E 3B 0D 0A 09 09  09 69 6E 74 20 77 61 69  74 3B 0D 0A 0D 0A 50 41  53 43 41 4C 3A 09 46 55  len;int wait;PASCAL:FU
00015D00  4E 43 54 49 4F 4E 20 55  6C 74 72 61 44 6F 77 6E  4C 6F 61 64 28 44 61 74  61 50 74 72 20 20 3A 20  NCTION UltraDownLoad(DataPtr  : 
00015D20  50 4F 49 4E 54 45 52 3B  0D 0A 09 09 09 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  POINTER;                   
00015D40  20 20 20 20 43 6F 6E 74  72 6F 6C 20 20 3A 20 42  59 54 45 3B 0D 0A 09 09  09 20 20 20 20 20 20 20      Control  : BYTE;       
00015D60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  44 52 41 4D 5F 4C 6F 63  20 3A 20 4C 4F 4E 47 49                  DRAM_Loc : LONGI
00015D80  4E 54 3B 0D 0A 09 09 09  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 4C  NT;                       L
00015DA0  65 6E 20 20 20 20 20 20  3A 20 57 4F 52 44 3B 0D  0A 09 09 09 20 20 20 20  20 20 20 20 20 20 20 20  en      : WORD;            
00015DC0  20 20 20 20 20 20 20 20  20 20 20 57 61 69 74 20  20 20 20 20 3A 20 42 4F  4F 4C 45 41 4E 29 20 3A             Wait     : BOOLEAN) :
00015DE0  20 42 4F 4F 4C 45 41 4E  3B 0D 0A 0D 0A 52 65 6D  61 72 6B 73 3A 09 54 68  69 73 20 72 6F 75 74 69   BOOLEAN;Remarks:This routi
00015E00  6E 65 20 77 69 6C 6C 20  74 72 61 6E 73 66 65 72  20 61 20 63 68 75 6E 6B  20 6F 66 20 64 61 74 61  ne will transfer a chunk of data
00015E20  20 66 72 6F 6D 20 74 68  65 20 50 43 27 73 20 52  41 4D 20 74 6F 20 74 68  65 20 55 6C 74 72 61 53   from the PC's RAM to the UltraS
00015E40  6F 75 6E 64 27 73 20 44  52 41 4D 2E 20 20 49 74  20 77 69 6C 6C 20 74 72  61 6E 73 66 65 72 20 27  ound's DRAM.  It will transfer '
00015E60  4C 65 6E 27 20 23 20 6F  66 20 62 79 74 65 73 20  66 72 6F 6D 20 44 61 74  61 50 74 72 20 28 69 6E  Len' # of bytes from DataPtr (in
00015E80  20 50 43 29 20 74 6F 20  44 52 41 4D 5F 4C 6F 63  20 28 69 6E 20 55 6C 74  72 61 53 6F 75 6E 64 29   PC) to DRAM_Loc (in UltraSound)
00015EA0  2E 20 20 49 66 20 27 57  61 69 74 27 20 69 73 20  54 52 55 45 2C 20 74 68  65 6E 20 69 74 20 77 69  .  If 'Wait' is TRUE, then it wi
00015EC0  6C 6C 20 77 61 69 74 20  75 6E 74 69 6C 20 74 68  65 20 74 72 61 6E 73 66  65 72 20 69 73 20 63 6F  ll wait until the transfer is co
00015EE0  6D 70 6C 65 74 65 2E 20  20 49 66 20 27 57 61 69  74 27 20 69 73 20 46 41  4C 53 45 2C 20 69 74 20  mplete.  If 'Wait' is FALSE, it 
00015F00  77 69 6C 6C 20 72 65 74  75 72 6E 20 61 73 20 73  6F 6F 6E 20 61 73 20 74  72 61 6E 73 66 65 72 20  will return as soon as transfer 
00015F20  69 73 20 73 74 61 72 74  65 64 2E 20 20 49 6E 20  73 6F 6D 65 20 63 61 73  65 73 20 77 68 65 72 65  is started.  In some cases where
00015F40  20 79 6F 75 20 6E 65 65  64 20 74 6F 20 67 65 74  20 6F 75 74 70 75 74 20  71 75 69 63 6B 6C 79 2C   you need to get output quickly,
00015F60  20 79 6F 75 20 63 61 6E  20 73 74 61 72 74 20 74  68 65 20 64 6F 77 6E 6C  6F 61 64 20 61 6E 64 20   you can start the download and 
00015F80  74 68 65 6E 20 69 6D 6D  65 64 69 61 74 65 6C 79  20 73 74 61 72 74 20 61  20 76 6F 69 63 65 20 70  then immediately start a voice p
00015FA0  6C 61 79 69 6E 67 20 74  68 65 20 64 61 74 61 2E  20 20 54 68 65 20 44 4D  41 20 74 72 61 6E 73 66  laying the data.  The DMA transf
00015FC0  65 72 20 69 73 20 4D 55  43 48 20 66 61 73 74 65  72 20 74 68 61 6E 20 74  68 65 20 76 6F 69 63 65  er is MUCH faster than the voice
00015FE0  20 70 6C 61 79 62 61 63  6B 2C 20 73 6F 20 69 74  20 77 69 6C 6C 20 62 65  20 61 62 6C 65 20 74 6F   playback, so it will be able to
00016000  20 64 6F 77 6E 6C 6F 61  64 20 64 61 74 61 20 61  68 65 61 64 20 6F 66 20  74 68 65 20 70 6C 61 79   download data ahead of the play
00016020  62 61 63 6B 2E 20 20 46  6F 72 20 6F 62 76 69 6F  75 73 20 72 65 61 73 6F  6E 73 2C 20 74 68 69 73  back.  For obvious reasons, this
00016040  20 77 69 6C 6C 20 6E 6F  74 20 77 6F 72 6B 20 69  66 20 79 6F 75 20 77 61  6E 74 20 74 6F 20 70 6C   will not work if you want to pl
00016060  61 79 20 74 68 65 20 64  61 74 61 20 62 61 63 6B  77 61 72 64 73 2E 20 20  53 65 65 20 41 70 70 65  ay the data backwards.  See Appe
00016080  6E 64 69 78 20 44 20 66  6F 72 20 61 20 64 65 66  69 6E 69 74 69 6F 6E 20  6F 66 20 74 68 65 20 63  ndix D for a definition of the c
000160A0  6F 6E 74 72 6F 6C 20 62  69 74 73 2E 20 20 54 68  65 79 20 73 70 65 63 69  66 79 20 74 68 65 20 74  ontrol bits.  They specify the t
000160C0  79 70 65 20 6F 66 20 64  61 74 61 20 62 65 69 6E  67 20 74 72 61 6E 73 66  65 72 72 65 64 2E 0D 0A  ype of data being transferred.
000160E0  0D 0A 52 65 74 75 72 6E  73 3A 09 43 3A 20 20 20  20 20 20 55 4C 54 52 41  5F 4F 4B 20 69 66 20 6E  Returns:C:      ULTRA_OK if n
00016100  6F 20 70 72 6F 62 6C 65  6D 2E 0D 0A 09 09 09 20  20 20 20 20 20 20 20 44  4D 41 5F 42 55 53 59 20  o problem.        DMA_BUSY 
00016120  69 66 20 44 4D 41 20 43  68 61 6E 6E 65 6C 20 69  73 20 62 75 73 79 2E 0D  0A 0D 0A 09 09 09 50 41  if DMA Channel is busy.PA
00016140  53 43 41 4C 3A 20 54 52  55 45 20 69 66 20 74 72  61 6E 73 66 65 72 20 77  61 73 20 73 75 63 63 65  SCAL: TRUE if transfer was succe
00016160  73 73 66 75 6C 2E 20 20  20 46 41 4C 53 45 20 6F  74 68 65 72 77 69 73 65  2E 0D 0A 09 09 09 20 20  ssful.   FALSE otherwise.  
00016180  20 20 20 20 20 20 49 66  20 75 6E 73 75 63 63 65  73 73 66 75 6C 2C 20 63  68 65 63 6B 20 55 6C 74        If unsuccessful, check Ult
000161A0  72 61 45 72 72 6F 72 53  74 72 20 66 6F 72 20 74  68 65 20 72 65 61 73 6F  6E 2E 0D 0A 0D 0A 53 65  raErrorStr for the reason.Se
000161C0  65 20 61 6C 73 6F 3A 09  55 6C 74 72 61 55 70 6C  6F 61 64 2C 20 55 6C 74  72 61 44 52 41 4D 44 4D  e also:UltraUpload, UltraDRAMDM
000161E0  41 42 75 73 79 0D 0A 0D  0A 0D 0A 0C 55 6C 74 72  61 44 52 41 4D 44 4D 41  42 75 73 79 0D 0A 5F 5F  ABusyUltraDRAMDMABusy__
00016200  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  _______________________________
00016220  0A 0D 0A 50 75 72 70 6F  73 65 3A 09 54 65 73 74  20 74 6F 20 73 65 65 20  69 66 20 74 68 65 20 44  Purpose:Test to see if the D
00016240  4D 41 20 63 68 61 6E 6E  65 6C 20 69 73 20 62 75  73 79 2E 0D 0A 0D 0A 43  3A 09 09 09 69 6E 74 20  MA channel is busy.C:int 
00016260  55 6C 74 72 61 44 72 61  6D 44 4D 41 42 75 73 79  28 76 6F 69 64 29 3B 0D  0A 0D 0A 50 41 53 43 41  UltraDramDMABusy(void);PASCA
00016280  4C 3A 09 46 55 4E 43 54  49 4F 4E 20 55 6C 74 72  61 44 52 41 4D 44 4D 41  42 75 73 79 20 3A 20 42  L:FUNCTION UltraDRAMDMABusy : B
000162A0  4F 4F 4C 45 41 4E 3B 0D  0A 0D 0A 52 65 6D 61 72  6B 73 3A 09 54 68 69 73  20 72 6F 75 74 69 6E 65  OOLEAN;Remarks:This routine
000162C0  20 77 69 6C 6C 20 63 68  65 63 6B 20 74 6F 20 73  65 65 20 69 66 20 74 68  65 20 74 6F 2F 66 72 6F   will check to see if the to/fro
000162E0  6D 20 44 52 41 4D 20 44  4D 41 20 63 68 61 6E 6E  65 6C 20 69 73 20 62 75  73 79 2E 20 20 49 74 20  m DRAM DMA channel is busy.  It 
00016300  6D 69 67 68 74 20 62 65  20 75 73 65 66 75 6C 20  73 6F 20 79 6F 75 72 20  61 70 70 6C 69 63 61 74  might be useful so your applicat
00016320  69 6F 6E 20 64 6F 65 73  6E 27 74 20 68 61 6E 67  20 61 72 6F 75 6E 64 20  77 68 69 6C 65 20 77 61  ion doesn't hang around while wa
00016340  69 74 69 6E 67 20 66 6F  72 20 61 20 44 4D 41 20  74 72 61 6E 73 66 65 72  20 74 6F 20 63 6F 6D 70  iting for a DMA transfer to comp
00016360  6C 65 74 65 2E 0D 0A 0D  0A 52 65 74 75 72 6E 73  3A 09 54 52 55 45 20 69  66 20 74 68 65 20 63 68  lete.Returns:TRUE if the ch
00016380  61 6E 6E 65 6C 20 69 73  20 73 74 69 6C 6C 20 62  75 73 79 2E 20 20 20 46  41 4C 53 45 20 69 66 20  annel is still busy.   FALSE if 
000163A0  69 74 27 73 20 66 72 65  65 2E 0D 0A 0D 0A 53 65  65 20 61 6C 73 6F 3A 09  55 6C 74 72 61 57 61 69  it's free.See also:UltraWai
000163C0  74 44 52 41 4D 44 4D 41  2C 20 55 6C 74 72 61 44  6F 77 6E 6C 6F 61 64 2C  20 55 6C 74 72 61 55 70  tDRAMDMA, UltraDownload, UltraUp
000163E0  6C 6F 61 64 0D 0A 0D 0A  0D 0A 0D 0A 55 6C 74 72  61 47 6F 52 65 63 6F 72  64 0D 0A 5F 5F 5F 5F 5F  loadUltraGoRecord_____
00016400  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 0D 0A 0D 0A  ____________________________
00016420  50 75 72 70 6F 73 65 3A  09 54 6F 20 73 74 61 72  74 20 75 70 20 61 20 70  72 65 2D 73 65 74 20 72  Purpose:To start up a pre-set r
00016440  65 63 6F 72 64 2E 0D 0A  0D 0A 43 3A 09 09 09 69  6E 74 20 55 6C 74 72 61  47 6F 52 65 63 6F 72 64  ecord.C:int UltraGoRecord
00016460  28 63 6F 6E 74 72 6F 6C  29 3B 0D 0A 09 09 09 75  6E 73 69 67 6E 65 64 20  63 68 61 72 20 63 6F 6E  (control);unsigned char con
00016480  74 72 6F 6C 3B 0D 0A 0D  0A 50 41 53 43 41 4C 3A  09 46 55 4E 43 54 49 4F  4E 20 55 6C 74 72 61 47  trol;PASCAL:FUNCTION UltraG
000164A0  6F 52 65 63 6F 72 64 28  43 6F 6E 74 72 6F 6C 20  3A 20 42 59 54 45 29 20  3A 20 42 4F 4F 4C 45 41  oRecord(Control : BYTE) : BOOLEA
000164C0  4E 3B 0D 0A 0D 0A 52 65  6D 61 72 6B 73 3A 09 54  68 69 73 20 72 6F 75 74  69 6E 65 20 77 69 6C 6C  N;Remarks:This routine will
000164E0  20 73 74 61 72 74 20 75  70 20 61 20 70 72 65 2D  70 72 69 6D 65 64 20 72  65 63 6F 72 64 20 28 64   start up a pre-primed record (d
00016500  6F 6E 65 20 77 69 74 68  20 55 6C 74 72 61 50 72  69 6D 65 52 65 63 6F 72  64 29 2E 20 20 49 74 20  one with UltraPrimeRecord).  It 
00016520  63 61 6E 20 61 6C 73 6F  20 62 65 20 75 73 65 64  20 74 6F 20 72 65 73 74  61 72 74 20 61 20 69 6E  can also be used to restart a in
00016540  64 65 66 69 6E 69 74 65  20 72 65 63 6F 72 64 69  6E 67 20 70 72 6F 63 65  73 73 20 66 72 6F 6D 20  definite recording process from 
00016560  74 68 65 20 72 65 63 6F  72 64 69 6E 67 20 68 61  6E 64 6C 65 72 20 63 61  6C 6C 62 61 63 6B 2E 0D  the recording handler callback.
00016580  0A 0D 0A 52 65 74 75 72  6E 73 3A 09 43 3A 20 20  20 20 20 20 55 4C 54 52  41 5F 4F 4B 20 69 66 20  Returns:C:      ULTRA_OK if 
000165A0  6E 6F 20 65 72 72 6F 72  0D 0A 09 09 09 20 20 20  20 20 20 20 20 44 4D 41  5F 42 55 53 59 20 69 66  no error        DMA_BUSY if
000165C0  20 74 68 65 20 63 68 61  6E 6E 65 6C 20 69 73 20  62 75 73 79 0D 0A 0D 0A  09 09 09 50 41 53 43 41   the channel is busyPASCA
000165E0  4C 3A 20 54 52 55 45 20  69 66 20 52 65 63 6F 72  64 20 73 74 61 72 74 65  64 20 6F 6B 2E 20 20 46  L: TRUE if Record started ok.  F
00016600  41 4C 53 45 20 6F 74 68  65 72 77 69 73 65 2E 0D  0A 09 09 09 20 20 20 20  20 20 20 20 49 66 20 46  ALSE otherwise.        If F
00016620  41 4C 53 45 20 63 68 65  63 6B 20 74 68 65 20 55  6C 74 72 61 45 72 72 6F  72 53 74 72 20 66 6F 72  ALSE check the UltraErrorStr for
00016640  20 74 68 65 20 72 65 61  73 6F 6E 2E 0D 0A 0D 0A  53 65 65 20 61 6C 73 6F  3A 09 55 6C 74 72 61 52   the reason.See also:UltraR
00016660  65 63 6F 72 64 44 61 74  61 2C 20 55 6C 74 72 61  50 72 69 6D 65 52 65 63  6F 72 64 2C 20 55 6C 74  ecordData, UltraPrimeRecord, Ult
00016680  72 61 52 65 63 6F 72 64  48 61 6E 64 6C 65 72 0D  0A 0D 0A 0D 0A 0C 55 6C  74 72 61 47 6F 56 6F 69  raRecordHandlerUltraGoVoi
000166A0  63 65 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ce____________________________
000166C0  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 73 74 61  72 74 20 61 20 76 6F 69  _____Purpose:To start a voi
000166E0  63 65 20 74 68 61 74 20  68 61 73 20 61 6C 72 65  61 64 79 20 62 65 65 6E  20 70 72 69 6D 65 64 2E  ce that has already been primed.
00016700  0D 0A 0D 0A 43 3A 09 09  09 76 6F 69 64 20 55 6C  74 72 61 47 6F 56 6F 69  63 65 28 76 6F 69 63 65  C:void UltraGoVoice(voice
00016720  2C 6D 6F 64 65 29 3B 0D  0A 09 09 09 69 6E 74 20  76 6F 69 63 65 3B 0D 0A  09 09 09 75 6E 73 69 67  ,mode);int voice;unsig
00016740  6E 65 64 20 63 68 61 72  20 6D 6F 64 65 3B 0D 0A  0D 0A 50 41 53 43 41 4C  3A 09 50 52 4F 43 45 44  ned char mode;PASCAL:PROCED
00016760  55 52 45 20 55 6C 74 72  61 47 6F 56 6F 69 63 65  28 56 6F 69 63 65 20 3A  20 49 4E 54 45 47 45 52  URE UltraGoVoice(Voice : INTEGER
00016780  3B 0D 0A 09 09 09 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 56 4D 6F  ;                       VMo
000167A0  64 65 20 3A 20 42 59 54  45 29 3B 0D 0A 0D 0A 52  65 6D 61 72 6B 73 3A 09  54 68 69 73 20 72 6F 75  de : BYTE);Remarks:This rou
000167C0  74 69 6E 65 20 77 69 6C  6C 20 73 74 61 72 74 20  75 70 20 61 20 76 6F 69  63 65 20 74 68 61 74 20  tine will start up a voice that 
000167E0  68 61 73 20 61 6C 72 65  61 64 79 20 62 65 65 6E  20 70 72 69 6D 65 64 20  77 69 74 68 20 73 65 74  has already been primed with set
00016800  2D 75 70 20 76 61 6C 75  65 73 20 62 79 20 55 6C  74 72 61 50 72 69 6D 65  56 6F 69 63 65 2E 20 20  -up values by UltraPrimeVoice.  
00016820  54 68 69 73 20 63 61 6E  20 62 65 20 75 73 65 66  75 6C 20 69 66 20 79 6F  75 20 6E 65 65 64 20 74  This can be useful if you need t
00016840  6F 20 73 74 61 72 74 20  6D 75 6C 74 69 70 6C 65  20 76 6F 69 63 65 73 20  61 73 20 63 6C 6F 73 65  o start multiple voices as close
00016860  20 74 6F 67 65 74 68 65  72 20 61 73 20 70 6F 73  73 69 62 6C 65 2E 20 20  53 65 65 20 41 70 70 65   together as possible.  See Appe
00016880  6E 64 69 78 20 43 20 66  6F 72 20 74 68 65 20 6D  6F 64 65 20 62 69 74 20  64 65 66 69 6E 69 74 69  ndix C for the mode bit definiti
000168A0  6F 6E 73 2E 0D 0A 0D 0A  53 65 65 20 61 6C 73 6F  3A 09 55 6C 74 72 61 50  72 69 6D 65 56 6F 69 63  ons.See also:UltraPrimeVoic
000168C0  65 2C 20 55 6C 74 72 61  53 74 61 72 74 56 6F 69  63 65 0D 0A 0D 0A 0D 0A  0D 0A 55 6C 74 72 61 44  e, UltraStartVoiceUltraD
000168E0  69 73 61 62 6C 65 4C 69  6E 65 49 6E 0D 0A 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  isableLineIn__________________
00016900  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  0A 0D 0A 50 75 72 70 6F  73 65 3A 09 54 6F 20 64  _______________Purpose:To d
00016920  69 73 61 62 6C 65 20 6C  69 6E 65 20 6C 65 76 65  6C 20 69 6E 70 75 74 2E  0D 0A 0D 0A 43 3A 09 09  isable line level input.C:
00016940  09 76 6F 69 64 20 55 6C  74 72 61 44 69 73 61 62  6C 65 4C 69 6E 65 49 6E  28 76 6F 69 64 29 3B 0D  void UltraDisableLineIn(void);
00016960  0A 0D 0A 50 41 53 43 41  4C 3A 09 50 52 4F 43 45  44 55 52 45 20 55 6C 74  72 61 44 69 73 61 62 6C  PASCAL:PROCEDURE UltraDisabl
00016980  65 4C 69 6E 65 49 6E 3B  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 49 66 20  6C 69 6E 65 20 6C 65 76  eLineIn;Remarks:If line lev
000169A0  65 6C 20 69 6E 70 75 74  20 69 73 20 65 6E 61 62  6C 65 64 20 61 6E 64 20  6F 75 74 70 75 74 20 69  el input is enabled and output i
000169C0  73 20 65 6E 61 62 6C 65  64 2C 20 74 68 65 20 69  6E 70 75 74 20 69 73 20  72 6F 75 74 65 64 20 64  s enabled, the input is routed d
000169E0  69 72 65 63 74 6C 79 20  74 6F 20 74 68 65 20 6F  75 74 70 75 74 20 61 6E  64 20 61 75 64 69 6F 20  irectly to the output and audio 
00016A00  77 69 6C 6C 20 62 65 20  68 65 61 72 64 2E 20 20  49 66 20 74 68 69 73 20  69 73 20 6E 6F 74 20 64  will be heard.  If this is not d
00016A20  65 73 69 72 65 64 2C 20  75 73 65 20 74 68 69 73  20 74 6F 20 64 69 73 61  62 6C 65 20 6C 69 6E 65  esired, use this to disable line
00016A40  20 69 6E 2E 0D 0A 0D 0A  53 65 65 20 61 6C 73 6F  3A 09 55 6C 74 72 61 45  6E 61 62 6C 65 4C 69 6E   in.See also:UltraEnableLin
00016A60  65 49 6E 2C 20 55 6C 74  72 61 47 65 74 4C 69 6E  65 49 6E 0D 0A 0D 0A 0D  0A 0D 0A 55 6C 74 72 61  eIn, UltraGetLineInUltra
00016A80  44 69 73 61 62 6C 65 4D  69 63 49 6E 0D 0A 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  DisableMicIn__________________
00016AA0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  0A 0D 0A 50 75 72 70 6F  73 65 3A 09 54 6F 20 64  _______________Purpose:To d
00016AC0  69 73 61 62 6C 65 20 6D  69 63 72 6F 70 68 6F 6E  65 20 69 6E 70 75 74 2E  0D 0A 0D 0A 43 3A 09 09  isable microphone input.C:
00016AE0  09 76 6F 69 64 20 55 6C  74 72 61 44 69 73 61 62  6C 65 4D 69 63 49 6E 28  76 6F 69 64 29 3B 0D 0A  void UltraDisableMicIn(void);
00016B00  0D 0A 50 41 53 43 41 4C  3A 09 50 52 4F 43 45 44  55 52 45 20 55 6C 74 72  61 44 69 73 61 62 6C 65  PASCAL:PROCEDURE UltraDisable
00016B20  4D 69 63 49 6E 3B 0D 0A  0D 0A 52 65 6D 61 72 6B  73 3A 09 49 66 20 6D 69  63 72 6F 70 68 6F 6E 65  MicIn;Remarks:If microphone
00016B40  20 69 6E 70 75 74 20 69  73 20 65 6E 61 62 6C 65  64 20 61 6E 64 20 6F 75  74 70 75 74 20 69 73 20   input is enabled and output is 
00016B60  65 6E 61 62 6C 65 64 2C  20 74 68 65 20 69 6E 70  75 74 20 69 73 20 72 6F  75 74 65 64 20 64 69 72  enabled, the input is routed dir
00016B80  65 63 74 6C 79 20 74 6F  20 74 68 65 20 6F 75 74  70 75 74 20 61 6E 64 20  61 75 64 69 6F 20 77 69  ectly to the output and audio wi
00016BA0  6C 6C 20 62 65 20 68 65  61 72 64 2E 20 20 49 66  20 74 68 69 73 20 69 73  20 6E 6F 74 20 64 65 73  ll be heard.  If this is not des
00016BC0  69 72 65 64 2C 20 75 73  65 20 74 68 69 73 20 74  6F 20 64 69 73 61 62 6C  65 20 6D 69 63 72 6F 70  ired, use this to disable microp
00016BE0  68 6F 6E 65 20 69 6E 2E  0D 0A 0D 0A 53 65 65 20  61 6C 73 6F 3A 09 55 6C  74 72 61 45 6E 61 62 6C  hone in.See also:UltraEnabl
00016C00  65 4D 69 63 49 6E 2C 20  55 6C 74 72 61 47 65 74  4D 69 63 49 6E 0D 0A 0C  55 6C 74 72 61 44 69 73  eMicIn, UltraGetMicInUltraDis
00016C20  61 62 6C 65 4F 75 74 70  75 74 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ableOutput____________________
00016C40  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 74 75 72  _____________Purpose:To tur
00016C60  6E 20 6F 66 66 20 61 6C  6C 20 6F 75 74 70 75 74  20 66 72 6F 6D 20 74 68  65 20 55 6C 74 72 61 53  n off all output from the UltraS
00016C80  6F 75 6E 64 2E 0D 0A 0D  0A 43 3A 09 09 09 76 6F  69 64 20 55 6C 74 72 61  44 69 73 61 62 6C 65 4F  ound.C:void UltraDisableO
00016CA0  75 74 70 75 74 28 76 6F  69 64 29 3B 0D 0A 0D 0A  50 41 53 43 41 4C 3A 09  50 52 4F 43 45 44 55 52  utput(void);PASCAL:PROCEDUR
00016CC0  45 20 55 6C 74 72 61 44  69 73 61 62 6C 65 4F 75  74 70 75 74 3B 0D 0A 0D  0A 52 65 6D 61 72 6B 73  E UltraDisableOutput;Remarks
00016CE0  3A 09 54 68 69 73 20 72  6F 75 74 69 6E 65 20 77  69 6C 6C 20 64 69 73 61  62 6C 65 20 61 6C 6C 20  :This routine will disable all 
00016D00  6F 75 74 70 75 74 20 66  72 6F 6D 20 74 68 65 20  55 6C 74 72 61 53 6F 75  6E 64 2E 20 20 54 68 69  output from the UltraSound.  Thi
00016D20  73 20 63 61 6E 20 62 65  20 75 73 65 64 20 64 75  72 69 6E 67 20 72 65 63  6F 72 64 69 6E 67 20 73  s can be used during recording s
00016D40  6F 20 74 68 61 74 20 74  68 65 20 69 6E 70 75 74  20 77 69 6C 6C 20 6E 6F  74 20 62 65 20 6C 6F 6F  o that the input will not be loo
00016D60  70 65 64 20 62 61 63 6B  20 74 6F 20 74 68 65 20  6F 75 74 70 75 74 2E 20  20 49 74 20 69 73 20 61  ped back to the output.  It is a
00016D80  6C 73 6F 20 75 73 65 66  75 6C 20 74 6F 20 64 69  73 61 62 6C 65 20 6F 75  74 70 75 74 20 64 75 72  lso useful to disable output dur
00016DA0  69 6E 67 20 72 65 73 65  74 73 20 73 69 6E 63 65  20 74 68 61 74 20 77 69  6C 6C 20 68 65 6C 70 20  ing resets since that will help 
00016DC0  65 6C 69 6D 69 6E 61 74  65 20 27 70 6F 70 73 27  20 64 75 72 69 6E 67 20  69 6E 69 74 69 61 6C 69  eliminate 'pops' during initiali
00016DE0  7A 61 74 69 6F 6E 2E 0D  0A 0D 0A 53 65 65 20 61  6C 73 6F 3A 09 55 6C 74  72 61 45 6E 61 62 6C 65  zation.See also:UltraEnable
00016E00  4F 75 74 70 75 74 2C 20  55 6C 74 72 61 47 65 74  4F 75 74 70 75 74 0D 0A  0D 0A 0D 0A 0D 0A 55 6C  Output, UltraGetOutputUl
00016E20  74 72 61 45 6E 61 62 6C  65 4C 69 6E 65 49 6E 0D  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  traEnableLineIn_______________
00016E40  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  __________________Purpose:T
00016E60  6F 20 65 6E 61 62 6C 65  20 6C 69 6E 65 20 6C 65  76 65 6C 20 69 6E 70 75  74 2E 0D 0A 0D 0A 43 3A  o enable line level input.C:
00016E80  09 09 09 76 6F 69 64 20  55 6C 74 72 61 45 6E 61  62 6C 65 4C 69 6E 65 49  6E 28 76 6F 69 64 29 3B  void UltraEnableLineIn(void);
00016EA0  0D 0A 0D 0A 50 41 53 43  41 4C 3A 09 50 52 4F 43  45 44 55 52 45 20 55 6C  74 72 61 45 6E 61 62 6C  PASCAL:PROCEDURE UltraEnabl
00016EC0  65 4C 69 6E 65 49 6E 3B  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 54 75 72  6E 73 20 6F 6E 20 74 68  eLineIn;Remarks:Turns on th
00016EE0  65 20 6C 69 6E 65 20 6C  65 76 65 6C 20 69 6E 70  75 74 2E 20 20 49 66 20  79 6F 75 20 61 72 65 20  e line level input.  If you are 
00016F00  6E 6F 74 20 72 65 63 6F  72 64 69 6E 67 20 66 72  6F 6D 20 74 68 65 20 6C  69 6E 65 20 69 6E 70 75  not recording from the line inpu
00016F20  74 2C 20 69 74 20 69 73  20 70 72 6F 62 61 62 6C  79 20 6E 6F 74 20 64 65  73 69 72 61 62 6C 65 20  t, it is probably not desirable 
00016F40  74 6F 20 68 61 76 65 20  74 68 69 73 20 65 6E 61  62 6C 65 64 20 73 69 6E  63 65 20 69 74 20 77 69  to have this enabled since it wi
00016F60  6C 6C 20 62 65 20 6C 6F  6F 70 65 64 20 62 61 63  6B 20 74 6F 20 74 68 65  20 6F 75 74 70 75 74 20  ll be looped back to the output 
00016F80  28 69 66 20 6F 75 74 70  75 74 20 69 73 20 65 6E  61 62 6C 65 64 29 2E 0D  0A 0D 0A 53 65 65 20 61  (if output is enabled).See a
00016FA0  6C 73 6F 3A 09 55 6C 74  72 61 44 69 73 61 62 6C  65 4C 69 6E 65 49 6E 2C  20 55 6C 74 72 61 47 65  lso:UltraDisableLineIn, UltraGe
00016FC0  74 4C 69 6E 65 49 6E 0D  0A 0D 0A 0D 0A 0D 0A 55  6C 74 72 61 45 6E 61 62  6C 65 4D 69 63 49 6E 0D  tLineInUltraEnableMicIn
00016FE0  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  _______________________________
00017000  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  6F 20 74 75 72 6E 20 6F  6E 20 74 68 65 20 6D 69  __Purpose:To turn on the mi
00017020  63 72 6F 70 68 6F 6E 65  20 69 6E 70 75 74 2E 0D  0A 0D 0A 43 3A 09 09 09  76 6F 69 64 20 55 6C 74  crophone input.C:void Ult
00017040  72 61 45 6E 61 62 6C 65  4D 69 63 49 6E 28 76 6F  69 64 29 3B 0D 0A 0D 0A  50 41 53 43 41 4C 3A 09  raEnableMicIn(void);PASCAL:
00017060  50 52 4F 43 45 44 55 52  45 20 55 6C 74 72 61 45  6E 61 62 6C 65 4D 69 63  49 6E 3B 0D 0A 0D 0A 52  PROCEDURE UltraEnableMicIn;R
00017080  65 6D 61 72 6B 73 3A 09  54 68 69 73 20 72 6F 75  74 69 6E 65 20 73 68 6F  75 6C 64 20 62 65 20 63  emarks:This routine should be c
000170A0  61 6C 6C 65 64 20 77 68  65 6E 20 79 6F 75 20 77  61 6E 74 20 74 6F 20 72  65 63 6F 72 64 20 66 72  alled when you want to record fr
000170C0  6F 6D 20 74 68 65 20 6D  69 63 72 6F 70 68 6F 6E  65 2E 20 20 49 74 20 69  73 20 70 6F 73 73 69 62  om the microphone.  It is possib
000170E0  6C 65 20 74 6F 20 68 61  76 65 20 62 6F 74 68 20  74 68 65 20 6D 69 63 72  6F 70 68 6F 6E 65 20 69  le to have both the microphone i
00017100  6E 70 75 74 20 65 6E 61  62 6C 65 64 20 61 6E 64  20 6C 69 6E 65 20 6C 65  76 65 6C 20 69 6E 70 75  nput enabled and line level inpu
00017120  74 20 65 6E 61 62 6C 65  64 2E 20 20 49 66 20 79  6F 75 20 61 72 65 20 6E  6F 74 20 72 65 63 6F 72  t enabled.  If you are not recor
00017140  64 69 6E 67 20 66 72 6F  6D 20 74 68 65 20 6D 69  63 72 6F 70 68 6F 6E 65  2C 20 69 74 20 69 73 20  ding from the microphone, it is 
00017160  72 65 63 6F 6D 6D 65 6E  64 65 64 20 74 68 61 74  20 69 74 20 62 65 20 64  69 73 61 62 6C 65 64 2C  recommended that it be disabled,
00017180  20 73 69 6E 63 65 20 69  74 20 77 69 6C 6C 20 72  65 64 75 63 65 20 6E 6F  69 73 65 20 6F 6E 20 74   since it will reduce noise on t
000171A0  68 65 20 6F 75 74 70 75  74 2E 0D 0A 0D 0A 53 65  65 20 61 6C 73 6F 3A 09  55 6C 74 72 61 44 69 73  he output.See also:UltraDis
000171C0  61 62 6C 65 4D 69 63 49  6E 2C 20 55 6C 74 72 61  47 65 74 4D 69 63 49 6E  0D 0A 0C 55 6C 74 72 61  ableMicIn, UltraGetMicInUltra
000171E0  45 6E 61 62 6C 65 4F 75  74 70 75 74 0D 0A 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  EnableOutput__________________
00017200  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  0A 0D 0A 50 75 72 70 6F  73 65 3A 09 54 6F 20 65  _______________Purpose:To e
00017220  6E 61 62 6C 65 20 6F 75  74 70 75 74 20 66 72 6F  6D 20 74 68 65 20 55 6C  74 72 61 53 6F 75 6E 64  nable output from the UltraSound
00017240  2E 0D 0A 0D 0A 43 3A 09  09 09 76 6F 69 64 20 55  6C 74 72 61 45 6E 61 62  6C 65 4F 75 74 70 75 74  .C:void UltraEnableOutput
00017260  28 76 6F 69 64 29 3B 0D  0A 0D 0A 50 41 53 43 41  4C 3A 09 50 52 4F 43 45  44 55 52 45 20 55 6C 74  (void);PASCAL:PROCEDURE Ult
00017280  72 61 45 6E 61 62 6C 65  4F 75 74 70 75 74 3B 0D  0A 0D 0A 52 65 6D 61 72  6B 73 3A 09 54 68 69 73  raEnableOutput;Remarks:This
000172A0  20 72 6F 75 74 69 6E 65  20 6D 75 73 74 20 62 65  20 63 61 6C 6C 65 64 20  74 6F 20 65 6E 61 62 6C   routine must be called to enabl
000172C0  65 20 61 6E 79 20 6F 75  74 70 75 74 20 66 72 6F  6D 20 74 68 65 20 55 6C  74 72 61 53 6F 75 6E 64  e any output from the UltraSound
000172E0  2E 20 20 54 68 69 73 20  63 61 6E 20 62 65 20 75  73 65 64 20 74 6F 20 74  75 72 6E 20 6F 6E 20 6F  .  This can be used to turn on o
00017300  75 74 70 75 74 20 61 66  74 65 72 20 6D 75 74 69  6E 67 20 69 74 20 77 69  74 68 20 55 6C 74 72 61  utput after muting it with Ultra
00017320  44 69 73 61 62 6C 65 4F  75 74 70 75 74 2E 0D 0A  0D 0A 53 65 65 20 61 6C  73 6F 3A 09 55 6C 74 72  DisableOutput.See also:Ultr
00017340  61 44 69 73 61 62 6C 65  4F 75 74 70 75 74 2C 20  55 6C 74 72 61 47 65 74  4F 75 74 70 75 74 0D 0A  aDisableOutput, UltraGetOutput
00017360  0D 0A 0D 0A 0D 0A 55 6C  74 72 61 47 65 74 4C 69  6E 65 49 6E 0D 0A 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraGetLineIn__________
00017380  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  0A 0D 0A 50 75 72 70 6F  _______________________Purpo
000173A0  73 65 3A 09 54 6F 20 72  65 74 75 72 6E 20 74 68  65 20 63 75 72 72 65 6E  74 20 73 74 61 74 65 20  se:To return the current state 
000173C0  6F 66 20 6C 69 6E 65 20  6C 65 76 65 6C 20 69 6E  70 75 74 0D 0A 0D 0A 43  3A 09 09 09 69 6E 74 20  of line level inputC:int 
000173E0  55 6C 74 72 61 47 65 74  4C 69 6E 65 49 6E 28 76  6F 69 64 29 3B 0D 0A 0D  0A 50 41 53 43 41 4C 3A  UltraGetLineIn(void);PASCAL:
00017400  09 46 55 4E 43 54 49 4F  4E 20 55 6C 74 72 61 47  65 74 4C 69 6E 65 49 6E  20 3A 20 42 4F 4F 4C 45  FUNCTION UltraGetLineIn : BOOLE
00017420  41 4E 3B 0D 0A 0D 0A 52  65 6D 61 72 6B 73 3A 09  54 68 69 73 20 63 61 6E  20 62 65 20 75 73 65 66  AN;Remarks:This can be usef
00017440  75 6C 20 69 66 20 79 6F  75 20 77 61 6E 74 20 74  6F 20 63 68 61 6E 67 65  20 74 68 65 20 73 74 61  ul if you want to change the sta
00017460  74 65 20 6F 66 20 74 68  65 20 6C 69 6E 65 20 6C  65 76 65 6C 20 69 6E 70  75 74 20 61 6E 64 20 74  te of the line level input and t
00017480  68 65 6E 20 72 65 73 74  6F 72 65 20 69 74 20 62  61 63 6B 20 74 6F 20 74  68 65 20 6F 72 69 67 69  hen restore it back to the origi
000174A0  6E 61 6C 20 73 74 61 74  65 2E 0D 0A 0D 0A 52 65  74 75 72 6E 73 3A 09 54  52 55 45 20 69 66 20 4C  nal state.Returns:TRUE if L
000174C0  69 6E 65 49 6E 20 69 73  20 45 6E 61 62 6C 65 64  2C 20 46 41 4C 53 45 20  6F 74 68 65 72 77 69 73  ineIn is Enabled, FALSE otherwis
000174E0  65 2E 0D 0A 0D 0A 53 65  65 20 61 6C 73 6F 3A 09  55 6C 74 72 61 45 6E 61  62 6C 65 4C 69 6E 65 49  e.See also:UltraEnableLineI
00017500  6E 2C 20 55 6C 74 72 61  44 69 73 61 62 6C 65 4C  69 6E 65 49 6E 0D 0A 0D  0A 0D 0A 0D 0A 55 6C 74  n, UltraDisableLineInUlt
00017520  72 61 47 65 74 4F 75 74  70 75 74 0D 0A 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  raGetOutput___________________
00017540  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 0D 0A  0D 0A 50 75 72 70 6F 73  65 3A 09 54 6F 20 72 65  ______________Purpose:To re
00017560  74 75 72 6E 20 74 68 65  20 63 75 72 72 65 6E 74  20 6F 75 74 70 75 74 20  65 6E 61 62 6C 65 64 20  turn the current output enabled 
00017580  73 74 61 74 65 2E 0D 0A  0D 0A 43 3A 09 09 09 69  6E 74 20 55 6C 74 72 61  47 65 74 4F 75 74 70 75  state.C:int UltraGetOutpu
000175A0  74 28 76 6F 69 64 29 3B  0D 0A 0D 0A 50 41 53 43  41 4C 3A 09 46 55 4E 43  54 49 4F 4E 20 55 6C 74  t(void);PASCAL:FUNCTION Ult
000175C0  72 61 47 65 74 4F 75 74  70 75 74 3B 0D 0A 0D 0A  52 65 6D 61 72 6B 73 3A  09 54 68 69 73 20 63 61  raGetOutput;Remarks:This ca
000175E0  6E 20 62 65 20 75 73 65  66 75 6C 20 69 66 20 79  6F 75 20 77 61 6E 74 20  74 6F 20 63 68 61 6E 67  n be useful if you want to chang
00017600  65 20 74 68 65 20 73 74  61 74 65 20 6F 66 20 74  68 65 20 6F 75 74 70 75  74 20 61 6E 64 20 74 68  e the state of the output and th
00017620  65 6E 20 72 65 73 74 6F  72 65 20 69 74 20 62 61  63 6B 20 74 6F 20 74 68  65 20 6F 72 69 67 69 6E  en restore it back to the origin
00017640  61 6C 20 73 74 61 74 65  2E 0D 0A 0D 0A 52 65 74  75 72 6E 73 3A 09 54 52  55 45 20 69 66 20 4F 75  al state.Returns:TRUE if Ou
00017660  74 70 75 74 20 69 73 20  45 6E 61 62 6C 65 64 2C  20 46 41 4C 53 45 20 6F  74 68 65 72 77 69 73 65  tput is Enabled, FALSE otherwise
00017680  2E 0D 0A 0D 0A 53 65 65  20 61 6C 73 6F 3A 09 55  6C 74 72 61 45 6E 61 62  6C 65 4F 75 74 70 75 74  .See also:UltraEnableOutput
000176A0  2C 20 55 6C 74 72 61 44  69 73 61 62 6C 65 4F 75  74 70 75 74 0D 0A 0C 55  6C 74 72 61 47 65 74 4D  , UltraDisableOutputUltraGetM
000176C0  69 63 49 6E 0D 0A 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  icIn__________________________
000176E0  5F 5F 5F 5F 5F 5F 5F 0D  0A 0D 0A 50 75 72 70 6F  73 65 3A 09 54 6F 20 72  65 74 75 72 6E 20 74 68  _______Purpose:To return th
00017700  65 20 63 75 72 72 65 6E  74 20 73 74 61 74 65 20  6F 66 20 74 68 65 20 6D  69 63 72 6F 70 68 6F 6E  e current state of the microphon
00017720  65 20 69 6E 70 75 74 2E  0D 0A 0D 0A 43 3A 09 09  09 69 6E 74 20 55 6C 74  72 61 47 65 74 4D 69 63  e input.C:int UltraGetMic
00017740  49 6E 28 76 6F 69 64 29  3B 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 46 55 4E  43 54 49 4F 4E 20 55 6C  In(void);PASCAL:FUNCTION Ul
00017760  74 72 61 47 65 74 4D 69  63 49 6E 3B 0D 0A 0D 0A  52 65 6D 61 72 6B 73 3A  09 54 68 69 73 20 63 61  traGetMicIn;Remarks:This ca
00017780  6E 20 62 65 20 75 73 65  66 75 6C 20 69 66 20 79  6F 75 20 77 61 6E 74 20  74 6F 20 63 68 61 6E 67  n be useful if you want to chang
000177A0  65 20 74 68 65 20 73 74  61 74 65 20 6F 66 20 74  68 65 20 6D 69 63 72 6F  70 68 6F 6E 65 20 69 6E  e the state of the microphone in
000177C0  70 75 74 20 61 6E 64 20  74 68 65 6E 20 72 65 73  74 6F 72 65 20 69 74 20  62 61 63 6B 20 74 6F 20  put and then restore it back to 
000177E0  74 68 65 20 6F 72 69 67  69 6E 61 6C 20 73 74 61  74 65 2E 0D 0A 0D 0A 52  65 74 75 72 6E 73 3A 09  the original state.Returns:
00017800  54 52 55 45 20 69 66 20  4F 75 74 70 75 74 20 69  73 20 45 6E 61 62 6C 65  64 2C 20 46 41 4C 53 45  TRUE if Output is Enabled, FALSE
00017820  20 6F 74 68 65 72 77 69  73 65 2E 0D 0A 0D 0A 53  65 65 20 61 6C 73 6F 3A  09 55 6C 74 72 61 45 6E   otherwise.See also:UltraEn
00017840  61 62 6C 65 4D 69 63 49  6E 2C 20 55 6C 74 72 61  44 69 73 61 62 6C 65 4D  69 63 49 6E 0D 0A 0D 0A  ableMicIn, UltraDisableMicIn
00017860  0D 0A 0C 55 6C 74 72 61  44 52 41 4D 54 63 48 61  6E 64 6C 65 72 0D 0A 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraDRAMTcHandler_________
00017880  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  0D 0A 0D 0A 50 75 72 70  ________________________Purp
000178A0  6F 73 65 3A 09 54 6F 20  64 65 66 69 6E 65 20 61  20 63 61 6C 6C 62 61 63  6B 20 66 6F 72 20 61 20  ose:To define a callback for a 
000178C0  44 4D 41 20 74 72 61 6E  73 66 65 72 20 63 6F 6D  70 6C 65 74 69 6F 6E 2E  0D 0A 0D 0A 43 3A 09 09  DMA transfer completion.C:
000178E0  09 50 46 56 20 2A 28 55  6C 74 72 61 44 72 61 6D  54 63 48 61 6E 64 6C 65  72 28 68 61 6E 64 6C 65  PFV *(UltraDramTcHandler(handle
00017900  72 29 29 3B 0D 0A 09 09  09 50 46 56 20 2A 68 61  6E 64 6C 65 72 3B 0D 0A  0D 0A 50 41 53 43 41 4C  r));PFV *handler;PASCAL
00017920  3A 09 50 52 4F 43 45 44  55 52 45 20 55 6C 74 72  61 44 52 41 4D 54 63 48  61 6E 64 6C 65 72 28 56  :PROCEDURE UltraDRAMTcHandler(V
00017940  41 52 20 48 61 6E 64 6C  65 72 20 3A 20 50 46 56  29 3B 0D 0A 0D 0A 52 65  6D 61 72 6B 73 3A 09 54  AR Handler : PFV);Remarks:T
00017960  68 69 73 20 70 72 6F 63  65 64 75 72 65 20 64 65  66 69 6E 65 73 20 61 20  63 61 6C 6C 62 61 63 6B  his procedure defines a callback
00017980  20 66 6F 72 20 77 68 65  6E 65 76 65 72 20 61 20  44 4D 41 20 74 72 61 6E  73 66 65 72 20 74 6F 20   for whenever a DMA transfer to 
000179A0  74 68 65 20 55 6C 74 72  61 53 6F 75 6E 64 20 68  61 73 20 62 65 65 6E 20  63 6F 6D 70 6C 65 74 65  the UltraSound has been complete
000179C0  64 2E 20 20 54 68 65 20  72 6F 75 74 69 6E 65 20  61 64 64 72 65 73 73 20  70 61 73 73 65 64 20 61  d.  The routine address passed a
000179E0  73 20 61 20 70 61 72 61  6D 65 74 65 72 20 69 73  20 73 65 74 20 61 73 20  74 68 65 20 6E 65 77 20  s a parameter is set as the new 
00017A00  68 61 6E 64 6C 65 72 2E  20 20 4E 6F 20 70 61 72  61 6D 65 74 65 72 73 20  61 72 65 20 70 61 73 73  handler.  No parameters are pass
00017A20  65 64 20 74 6F 20 79 6F  75 72 20 6E 65 77 20 68  61 6E 64 6C 65 72 2E 0D  0A 0D 0A 52 65 74 75 72  ed to your new handler.Retur
00017A40  6E 73 3A 09 46 6F 72 20  43 20 75 73 65 72 73 2C  20 74 68 69 73 20 72 6F  75 74 69 6E 65 20 72 65  ns:For C users, this routine re
00017A60  74 75 72 6E 73 20 74 68  65 20 61 64 64 72 65 73  73 20 6F 66 20 74 68 65  20 6F 6C 64 20 68 61 6E  turns the address of the old han
00017A80  64 6C 65 72 2E 0D 0A 0D  0A 50 41 53 43 41 4C 0D  0A 45 78 61 6D 70 6C 65  3A 09 53 69 6E 63 65 20  dler.PASCALExample:Since 
00017AA0  50 41 53 43 41 4C 20 63  61 6E 6E 6F 74 20 72 65  74 75 72 6E 20 66 75 6E  63 74 69 6F 6E 20 6F 72  PASCAL cannot return function or
00017AC0  20 70 72 6F 63 65 64 75  72 65 20 74 79 70 65 20  76 61 6C 75 65 73 20 66  72 6F 6D 20 66 75 6E 63   procedure type values from func
00017AE0  74 69 6F 6E 73 2C 20 74  68 65 20 65 71 75 69 76  61 6C 65 6E 74 20 72 6F  75 74 69 6E 65 20 77 61  tions, the equivalent routine wa
00017B00  73 20 6D 61 64 65 20 69  6E 74 6F 20 61 20 70 72  6F 63 65 64 75 72 65 20  77 68 69 63 68 20 74 6F  s made into a procedure which to
00017B20  6F 6B 20 61 20 73 69 6E  67 6C 65 20 56 41 52 20  70 61 72 61 6D 65 74 65  72 2E 20 20 54 68 75 73  ok a single VAR parameter.  Thus
00017B40  2C 20 77 68 65 6E 20 79  6F 75 20 61 72 65 20 67  6F 69 6E 67 20 74 6F 20  63 68 61 6E 67 65 20 74  , when you are going to change t
00017B60  68 65 20 61 64 64 72 65  73 73 20 6F 66 20 61 20  63 61 6C 6C 62 61 63 6B  20 72 6F 75 74 69 6E 65  he address of a callback routine
00017B80  2C 20 79 6F 75 20 70 75  74 20 74 68 65 20 6E 65  77 20 61 64 64 72 65 73  73 20 69 6E 74 6F 20 61  , you put the new address into a
00017BA0  20 76 61 72 69 61 62 6C  65 2C 20 72 75 6E 20 69  74 20 74 68 72 6F 75 67  68 20 74 68 65 20 70 72   variable, run it through the pr
00017BC0  6F 63 65 64 75 72 65 2C  20 61 6E 64 20 77 68 61  74 20 77 69 6C 6C 20 74  68 65 6E 20 62 65 20 69  ocedure, and what will then be i
00017BE0  6E 20 74 68 65 20 76 61  72 69 61 62 6C 65 20 69  73 20 74 68 65 20 61 64  64 72 65 73 73 20 6F 66  n the variable is the address of
00017C00  20 74 68 65 20 6F 6C 64  20 68 61 6E 64 6C 65 72  3A 0D 0A 0D 0A 09 09 09  56 41 52 0D 0A 09 09 09   the old handler:VAR
00017C20  20 20 4F 6C 64 50 72 6F  63 20 3A 20 50 46 56 3B  0D 0A 0D 0A 09 09 09 50  72 6F 63 65 64 75 72 65    OldProc : PFV;Procedure
00017C40  20 4D 79 4E 65 77 50 72  6F 63 3B 0D 0A 09 09 09  20 20 7B 20 54 68 65 20  6E 65 77 20 68 61 6E 64   MyNewProc;  { The new hand
00017C60  6C 65 72 20 2D 20 64 65  66 69 6E 65 64 20 61 73  20 61 20 6E 6F 72 6D 61  6C 20 70 72 6F 63 65 64  ler - defined as a normal proced
00017C80  75 72 65 20 7D 0D 0A 09  09 09 20 20 62 65 67 69  6E 0D 0A 09 09 09 20 20  20 20 2E 2E 2E 0D 0A 09  ure }  begin    ...
00017CA0  09 09 20 20 65 6E 64 3B  0D 0A 0D 0A 09 09 09 2E  2E 2E 0D 0A 09 09 09 7B  20 53 65 74 20 4F 6C 64    end;...{ Set Old
00017CC0  50 72 6F 63 20 74 6F 20  61 64 64 72 65 73 73 20  6F 66 20 6E 65 77 20 68  61 6E 64 6C 65 72 20 7D  Proc to address of new handler }
00017CE0  0D 0A 09 09 09 4F 6C 64  50 72 6F 63 20 3A 3D 20  4D 79 4E 65 77 50 72 6F  63 3B 20 0D 0A 09 09 09  OldProc := MyNewProc; 
00017D00  7B 20 4E 6F 77 20 73 65  74 20 74 68 65 20 6E 65  77 20 68 61 6E 64 6C 65  72 20 61 6E 64 20 72 65  { Now set the new handler and re
00017D20  74 75 72 6E 20 74 68 65  20 6F 6C 64 20 6F 6E 65  20 7D 0D 0A 09 09 09 55  6C 74 72 61 44 52 41 4D  turn the old one }UltraDRAM
00017D40  54 63 48 61 6E 64 6C 65  72 28 4F 6C 64 50 72 6F  63 29 3B 0D 0A 09 09 09  2E 2E 2E 0D 0A 0D 0A 09  TcHandler(OldProc);...
00017D60  09 09 41 74 20 74 68 69  73 20 70 6F 69 6E 74 2C  20 4F 6C 64 50 72 6F 63  20 68 6F 6C 64 73 20 74  At this point, OldProc holds t
00017D80  68 65 20 61 64 64 72 65  73 73 20 6F 66 20 74 68  65 20 6F 6C 64 20 72 6F  75 74 69 6E 65 2E 20 20  he address of the old routine.  
00017DA0  54 68 65 72 65 66 6F 72  65 2C 20 74 6F 20 63 68  61 69 6E 20 74 6F 20 74  68 65 20 6F 6C 64 20 72  Therefore, to chain to the old r
00017DC0  6F 75 74 69 6E 65 2C 20  79 6F 75 20 77 6F 75 6C  64 20 73 69 6D 70 6C 79  20 68 61 76 65 20 74 6F  outine, you would simply have to
00017DE0  20 63 61 6C 6C 20 4F 6C  64 50 72 6F 63 20 66 72  6F 6D 20 79 6F 75 72 20  68 61 6E 64 6C 65 72 2E   call OldProc from your handler.
00017E00  0D 0A 0D 0A 0D 0A 0C 55  6C 74 72 61 4D 49 44 49  58 6D 69 74 48 61 6E 64  6C 65 72 0D 0A 5F 5F 5F  UltraMIDIXmitHandler___
00017E20  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 0D 0A  ______________________________
00017E40  0D 0A 50 75 72 70 6F 73  65 3A 09 54 6F 20 64 65  66 69 6E 65 20 61 20 63  61 6C 6C 62 61 63 6B 20  Purpose:To define a callback 
00017E60  66 6F 72 20 4D 49 44 49  20 74 72 61 6E 73 6D 69  74 20 69 6E 74 65 72 72  75 70 74 2E 0D 0A 0D 0A  for MIDI transmit interrupt.
00017E80  43 3A 09 09 09 50 46 56  20 2A 28 55 6C 74 72 61  4D 49 44 49 58 6D 69 74  48 61 6E 64 6C 65 72 28  C:PFV *(UltraMIDIXmitHandler(
00017EA0  68 61 6E 64 6C 65 72 29  29 3B 0D 0A 09 09 09 50  46 56 20 2A 68 61 6E 64  6C 65 72 3B 0D 0A 0D 0A  handler));PFV *handler;
00017EC0  50 41 53 43 41 4C 3A 09  50 52 4F 43 45 44 55 52  45 20 55 6C 74 72 61 4D  49 44 49 58 4D 69 74 48  PASCAL:PROCEDURE UltraMIDIXMitH
00017EE0  61 6E 64 6C 65 72 28 56  41 52 20 48 61 6E 64 6C  65 72 20 3A 20 57 4F 52  44 5F 50 52 4F 43 29 3B  andler(VAR Handler : WORD_PROC);
00017F00  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 54 68 69  73 20 70 72 6F 63 65 64  75 72 65 20 64 65 66 69  Remarks:This procedure defi
00017F20  6E 65 73 20 61 20 63 61  6C 6C 62 61 63 6B 20 66  6F 72 20 77 68 65 6E 65  76 65 72 20 61 20 4D 49  nes a callback for whenever a MI
00017F40  44 49 20 74 72 61 6E 73  6D 69 74 20 65 6D 70 74  79 20 69 6E 74 65 72 72  75 70 74 20 6F 63 63 75  DI transmit empty interrupt occu
00017F60  72 73 2E 20 20 54 68 69  73 20 63 61 6E 20 62 65  20 75 73 65 64 20 74 6F  20 73 65 6E 64 20 6F 75  rs.  This can be used to send ou
00017F80  74 20 4D 49 44 49 20 64  61 74 61 20 75 6E 64 65  72 20 69 6E 74 65 72 72  75 70 74 20 63 6F 6E 74  t MIDI data under interrupt cont
00017FA0  72 6F 6C 2E 20 20 54 68  65 20 72 6F 75 74 69 6E  65 20 61 64 64 72 65 73  73 20 70 61 73 73 65 64  rol.  The routine address passed
00017FC0  20 61 73 20 61 20 70 61  72 61 6D 65 74 65 72 20  69 73 20 73 65 74 20 61  73 20 74 68 65 20 6E 65   as a parameter is set as the ne
00017FE0  77 20 68 61 6E 64 6C 65  72 2E 20 20 54 68 65 20  4D 49 44 49 20 53 74 61  74 75 73 20 42 79 74 65  w handler.  The MIDI Status Byte
00018000  20 69 73 20 70 61 73 73  65 64 20 74 6F 20 74 68  65 20 6E 65 77 20 68 61  6E 64 6C 65 72 20 64 65   is passed to the new handler de
00018020  66 69 6E 65 64 2E 0D 0A  0D 0A 52 65 74 75 72 6E  73 3A 09 46 6F 72 20 43  20 75 73 65 72 73 2C 20  fined.Returns:For C users, 
00018040  74 68 69 73 20 72 6F 75  74 69 6E 65 20 72 65 74  75 72 6E 73 20 74 68 65  20 61 64 64 72 65 73 73  this routine returns the address
00018060  20 6F 66 20 74 68 65 20  6F 6C 64 20 68 61 6E 64  6C 65 72 2E 0D 0A 0D 0A  50 41 53 43 41 4C 0D 0A   of the old handler.PASCAL
00018080  45 78 61 6D 70 6C 65 3A  09 53 65 65 20 74 68 65  20 65 78 61 6D 70 6C 65  20 66 6F 72 20 55 6C 74  Example:See the example for Ult
000180A0  72 61 44 52 41 4D 54 63  48 61 6E 64 6C 65 72 2E  0D 0A 0D 0A 53 65 65 20  61 6C 73 6F 3A 09 55 6C  raDRAMTcHandler.See also:Ul
000180C0  74 72 61 4D 49 44 49 52  65 63 76 48 61 6E 64 6C  65 72 0D 0A 0D 0A 0D 0A  0D 0A 55 6C 74 72 61 4D  traMIDIRecvHandlerUltraM
000180E0  49 44 49 52 65 63 76 48  61 6E 64 6C 65 72 0D 0A  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  IDIRecvHandler________________
00018100  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 0D 0A 0D 0A 50 75 72  70 6F 73 65 3A 09 54 6F  _________________Purpose:To
00018120  20 64 65 66 69 6E 65 20  61 20 63 61 6C 6C 62 61  63 6B 20 66 6F 72 20 61  20 4D 49 44 49 20 72 65   define a callback for a MIDI re
00018140  63 65 69 76 65 20 69 6E  74 65 72 72 75 70 74 2E  0D 0A 0D 0A 43 3A 09 09  09 50 46 56 20 2A 28 55  ceive interrupt.C:PFV *(U
00018160  6C 74 72 61 4D 49 44 49  52 65 63 76 48 61 6E 64  6C 65 72 28 68 61 6E 64  6C 65 72 29 29 3B 0D 0A  ltraMIDIRecvHandler(handler));
00018180  09 09 09 50 46 56 20 2A  68 61 6E 64 6C 65 72 3B  0D 0A 0D 0A 50 41 53 43  41 4C 3A 09 50 52 4F 43  PFV *handler;PASCAL:PROC
000181A0  45 44 55 52 45 20 55 6C  74 72 61 4D 49 44 49 52  65 63 76 48 61 6E 64 6C  65 72 28 56 41 52 20 48  EDURE UltraMIDIRecvHandler(VAR H
000181C0  61 6E 64 6C 65 72 20 3A  20 54 57 4F 57 4F 52 44  5F 50 52 4F 43 29 3B 0D  0A 0D 0A 52 65 6D 61 72  andler : TWOWORD_PROC);Remar
000181E0  6B 73 3A 09 54 68 69 73  20 70 72 6F 63 65 64 75  72 65 20 64 65 66 69 6E  65 73 20 61 20 63 61 6C  ks:This procedure defines a cal
00018200  6C 62 61 63 6B 20 66 6F  72 20 77 68 65 6E 65 76  65 72 20 61 20 62 79 74  65 20 69 73 20 72 65 63  lback for whenever a byte is rec
00018220  65 69 76 65 64 20 69 6E  20 74 68 65 20 4D 49 44  49 20 69 6E 70 75 74 20  70 6F 72 74 2E 20 20 54  eived in the MIDI input port.  T
00018240  68 69 73 20 63 61 6E 20  62 65 20 75 73 65 64 20  74 6F 20 67 65 74 20 64  61 74 61 20 66 72 6F 6D  his can be used to get data from
00018260  20 74 68 65 20 4D 49 44  49 20 70 6F 72 74 20 75  6E 64 65 72 20 69 6E 74  65 72 72 75 70 74 20 63   the MIDI port under interrupt c
00018280  6F 6E 74 6F 6C 2E 20 20  54 68 65 20 72 6F 75 74  69 6E 65 20 61 64 64 72  65 73 73 20 70 61 73 73  ontol.  The routine address pass
000182A0  65 64 20 61 73 20 61 20  70 61 72 61 6D 65 74 65  72 20 69 73 20 73 65 74  20 61 73 20 74 68 65 20  ed as a parameter is set as the 
000182C0  6E 65 77 20 68 61 6E 64  6C 65 72 2E 20 20 54 68  65 20 4D 49 44 49 20 70  6F 72 74 20 73 74 61 74  new handler.  The MIDI port stat
000182E0  75 73 20 61 6E 64 20 4D  49 44 49 20 64 61 74 61  20 61 72 65 20 70 61 73  73 65 64 20 74 6F 20 79  us and MIDI data are passed to y
00018300  6F 75 72 20 68 61 6E 64  6C 65 72 2E 20 20 54 68  65 20 73 74 61 74 75 73  20 62 69 74 73 20 61 72  our handler.  The status bits ar
00018320  65 20 64 65 66 69 6E 65  64 20 69 6E 20 41 70 70  65 6E 64 69 78 20 44 2E  0D 0A 0D 0A 52 65 74 75  e defined in Appendix D.Retu
00018340  72 6E 73 3A 09 46 6F 72  20 43 20 75 73 65 72 73  2C 20 74 68 69 73 20 72  6F 75 74 69 6E 65 20 72  rns:For C users, this routine r
00018360  65 74 75 72 6E 73 20 74  68 65 20 61 64 64 72 65  73 73 20 6F 66 20 74 68  65 20 6F 6C 64 20 68 61  eturns the address of the old ha
00018380  6E 64 6C 65 72 2E 0D 0A  0D 0A 50 41 53 43 41 4C  0D 0A 45 78 61 6D 70 6C  65 3A 09 53 65 65 20 74  ndler.PASCALExample:See t
000183A0  68 65 20 65 78 61 6D 70  6C 65 20 66 6F 72 20 55  6C 74 72 61 44 52 41 4D  54 63 48 61 6E 64 6C 65  he example for UltraDRAMTcHandle
000183C0  72 2E 0D 0A 0D 0A 53 65  65 20 61 6C 73 6F 3A 09  55 6C 74 72 61 4D 49 44  49 58 6D 69 74 48 61 6E  r.See also:UltraMIDIXmitHan
000183E0  64 6C 65 72 0D 0A 0D 0A  0C 55 6C 74 72 61 54 69  6D 65 72 31 48 61 6E 64  6C 65 72 0D 0A 5F 5F 5F  dlerUltraTimer1Handler___
00018400  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 0D 0A  ______________________________
00018420  0D 0A 50 75 72 70 6F 73  65 3A 09 54 6F 20 64 65  66 69 6E 65 20 61 20 63  61 6C 6C 62 61 63 6B 20  Purpose:To define a callback 
00018440  66 72 6F 6D 20 54 69 6D  65 72 20 23 31 2E 0D 0A  0D 0A 43 3A 09 09 09 50  46 56 20 2A 28 55 6C 74  from Timer #1.C:PFV *(Ult
00018460  72 61 54 69 6D 65 72 31  48 61 6E 64 6C 65 72 28  68 61 6E 64 6C 65 72 29  29 3B 0D 0A 09 09 09 50  raTimer1Handler(handler));P
00018480  46 56 20 2A 68 61 6E 64  6C 65 72 3B 0D 0A 0D 0A  50 41 53 43 41 4C 3A 09  50 52 4F 43 45 44 55 52  FV *handler;PASCAL:PROCEDUR
000184A0  45 20 55 6C 74 72 61 54  69 6D 65 72 31 48 61 6E  64 6C 65 72 28 56 41 52  20 48 61 6E 64 6C 65 72  E UltraTimer1Handler(VAR Handler
000184C0  20 3A 20 50 46 56 29 3B  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 54 68 69  73 20 70 72 6F 63 65 64   : PFV);Remarks:This proced
000184E0  75 72 65 20 64 65 66 69  6E 65 73 20 61 20 63 61  6C 6C 62 61 63 6B 20 66  6F 72 20 77 68 65 6E 65  ure defines a callback for whene
00018500  76 65 72 20 74 68 65 20  55 6C 74 72 61 53 6F 75  6E 64 27 73 20 54 69 6D  65 72 20 31 20 27 54 69  ver the UltraSound's Timer 1 'Ti
00018520  63 6B 73 27 2E 20 20 54  68 65 20 72 6F 75 74 69  6E 65 20 61 64 64 72 65  73 73 20 70 61 73 73 65  cks'.  The routine address passe
00018540  64 20 61 73 20 61 20 70  61 72 61 6D 65 74 65 72  20 69 73 20 73 65 74 20  61 73 20 74 68 65 20 6E  d as a parameter is set as the n
00018560  65 77 20 68 61 6E 64 6C  65 72 2E 20 20 4E 6F 20  70 61 72 61 6D 65 74 65  72 73 20 61 72 65 20 70  ew handler.  No parameters are p
00018580  61 73 73 65 64 20 74 6F  20 74 68 69 73 20 68 61  6E 64 6C 65 72 2E 0D 0A  0D 0A 52 65 74 75 72 6E  assed to this handler.Return
000185A0  73 3A 09 46 6F 72 20 43  20 75 73 65 72 73 2C 20  74 68 69 73 20 72 6F 75  74 69 6E 65 20 72 65 74  s:For C users, this routine ret
000185C0  75 72 6E 73 20 74 68 65  20 61 64 64 72 65 73 73  20 6F 66 20 74 68 65 20  6F 6C 64 20 68 61 6E 64  urns the address of the old hand
000185E0  6C 65 72 2E 0D 0A 0D 0A  50 41 53 43 41 4C 0D 0A  45 78 61 6D 70 6C 65 3A  09 53 65 65 20 74 68 65  ler.PASCALExample:See the
00018600  20 65 78 61 6D 70 6C 65  20 66 6F 72 20 55 6C 74  72 61 44 52 41 4D 54 63  48 61 6E 64 6C 65 72 2E   example for UltraDRAMTcHandler.
00018620  0D 0A 0D 0A 53 65 65 20  61 6C 73 6F 3A 09 55 6C  74 72 61 54 69 6D 65 72  32 48 61 6E 64 6C 65 72  See also:UltraTimer2Handler
00018640  2C 20 55 6C 74 72 61 53  74 61 72 74 54 69 6D 65  72 0D 0A 0D 0A 0D 0A 0D  0A 55 6C 74 72 61 54 69  , UltraStartTimerUltraTi
00018660  6D 65 72 32 48 61 6E 64  6C 65 72 0D 0A 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  mer2Handler___________________
00018680  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 0D 0A  0D 0A 50 75 72 70 6F 73  65 3A 09 54 6F 20 64 65  ______________Purpose:To de
000186A0  66 69 6E 65 20 61 20 63  61 6C 6C 62 61 63 6B 20  66 6F 72 20 54 69 6D 65  72 20 23 32 2E 0D 0A 0D  fine a callback for Timer #2.
000186C0  0A 43 3A 09 09 09 50 46  56 20 2A 28 55 6C 74 72  61 54 69 6D 65 72 32 48  61 6E 64 6C 65 72 28 68  C:PFV *(UltraTimer2Handler(h
000186E0  61 6E 64 6C 65 72 29 29  3B 0D 0A 09 09 09 50 46  56 20 2A 68 61 6E 64 6C  65 72 3B 0D 0A 0D 0A 50  andler));PFV *handler;P
00018700  41 53 43 41 4C 3A 09 50  52 4F 43 45 44 55 52 45  20 55 6C 74 72 61 54 69  6D 65 72 32 48 61 6E 64  ASCAL:PROCEDURE UltraTimer2Hand
00018720  6C 65 72 28 56 41 52 20  48 61 6E 64 6C 65 72 20  3A 20 50 46 56 29 3B 0D  0A 0D 0A 52 65 6D 61 72  ler(VAR Handler : PFV);Remar
00018740  6B 73 3A 09 54 68 69 73  20 70 72 6F 63 65 64 75  72 65 20 64 65 66 69 6E  65 73 20 61 20 63 61 6C  ks:This procedure defines a cal
00018760  6C 62 61 63 6B 20 66 6F  72 20 77 68 65 6E 65 76  65 72 20 74 68 65 20 55  6C 74 72 61 53 6F 75 6E  lback for whenever the UltraSoun
00018780  64 27 73 20 54 69 6D 65  72 20 32 20 27 54 69 63  6B 73 27 2E 20 20 54 68  65 20 72 6F 75 74 69 6E  d's Timer 2 'Ticks'.  The routin
000187A0  65 20 61 64 64 72 65 73  73 20 70 61 73 73 65 64  20 61 73 20 61 20 70 61  72 61 6D 65 74 65 72 20  e address passed as a parameter 
000187C0  69 73 20 73 65 74 20 61  73 20 74 68 65 20 6E 65  77 20 68 61 6E 64 6C 65  72 2E 20 20 4E 6F 20 70  is set as the new handler.  No p
000187E0  61 72 61 6D 65 74 65 72  73 20 61 72 65 20 70 61  73 73 65 64 20 74 6F 20  74 68 69 73 20 68 61 6E  arameters are passed to this han
00018800  64 6C 65 72 2E 0D 0A 0D  0A 52 65 74 75 72 6E 73  3A 09 46 6F 72 20 43 20  75 73 65 72 73 2C 20 74  dler.Returns:For C users, t
00018820  68 69 73 20 72 6F 75 74  69 6E 65 20 72 65 74 75  72 6E 73 20 74 68 65 20  61 64 64 72 65 73 73 20  his routine returns the address 
00018840  6F 66 20 74 68 65 20 6F  6C 64 20 68 61 6E 64 6C  65 72 2E 0D 0A 0D 0A 50  41 53 43 41 4C 0D 0A 45  of the old handler.PASCALE
00018860  78 61 6D 70 6C 65 3A 09  53 65 65 20 74 68 65 20  65 78 61 6D 70 6C 65 20  66 6F 72 20 55 6C 74 72  xample:See the example for Ultr
00018880  61 44 52 41 4D 54 63 48  61 6E 64 6C 65 72 2E 0D  0A 0D 0A 53 65 65 20 61  6C 73 6F 3A 09 55 6C 74  aDRAMTcHandler.See also:Ult
000188A0  72 61 54 69 6D 65 72 31  48 61 6E 64 6C 65 72 2C  20 55 6C 74 72 61 53 74  61 72 74 54 69 6D 65 72  raTimer1Handler, UltraStartTimer
000188C0  0D 0A 0D 0A 0C 55 6C 74  72 61 57 61 76 65 48 61  6E 64 6C 65 72 0D 0A 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraWaveHandler_________
000188E0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  0D 0A 0D 0A 50 75 72 70  ________________________Purp
00018900  6F 73 65 3A 09 54 6F 20  64 65 66 69 6E 65 20 61  20 63 61 6C 6C 62 61 63  6B 20 66 6F 72 20 61 6E  ose:To define a callback for an
00018920  20 65 6E 64 2D 6F 66 2D  77 61 76 65 20 69 6E 74  65 72 72 75 70 74 2E 0D  0A 0D 0A 43 3A 09 09 09   end-of-wave interrupt.C:
00018940  50 46 56 20 2A 28 55 6C  74 72 61 57 61 76 65 48  61 6E 64 6C 65 72 28 68  61 6E 64 6C 65 72 29 29  PFV *(UltraWaveHandler(handler))
00018960  3B 0D 0A 09 09 09 50 46  56 20 2A 68 61 6E 64 6C  65 72 3B 0D 0A 0D 0A 50  41 53 43 41 4C 3A 09 50  ;PFV *handler;PASCAL:P
00018980  52 4F 43 45 44 55 52 45  20 55 6C 74 72 61 57 61  76 65 48 61 6E 64 6C 65  72 28 56 41 52 20 48 61  ROCEDURE UltraWaveHandler(VAR Ha
000189A0  6E 64 6C 65 72 20 3A 20  49 4E 54 5F 50 52 4F 43  29 3B 0D 0A 0D 0A 52 65  6D 61 72 6B 73 3A 09 54  ndler : INT_PROC);Remarks:T
000189C0  68 69 73 20 70 72 6F 63  65 64 75 72 65 20 64 65  66 69 6E 65 73 20 61 20  63 61 6C 6C 62 61 63 6B  his procedure defines a callback
000189E0  20 66 6F 72 20 77 68 65  6E 65 76 65 72 20 61 20  76 6F 69 63 65 20 67 65  6E 65 72 61 74 65 73 20   for whenever a voice generates 
00018A00  61 20 77 61 76 65 74 61  62 6C 65 20 69 6E 74 65  72 72 75 70 74 2E 20 20  54 68 69 73 20 68 61 70  a wavetable interrupt.  This hap
00018A20  70 65 6E 73 20 77 68 65  6E 20 61 20 76 6F 69 63  65 20 68 69 74 73 20 69  74 27 73 20 65 6E 64 20  pens when a voice hits it's end 
00018A40  61 6E 64 20 69 6E 74 65  72 72 75 70 74 73 20 61  72 65 20 65 6E 61 62 6C  65 64 2E 20 20 49 74 20  and interrupts are enabled.  It 
00018A60  77 69 6C 6C 20 68 61 70  70 65 6E 20 65 76 65 6E  20 69 66 20 6C 6F 6F 70  69 6E 67 20 69 73 20 6F  will happen even if looping is o
00018A80  6E 20 28 69 2E 65 2E 20  20 74 68 65 20 76 6F 69  63 65 20 6B 65 65 70 73  20 70 6C 61 79 69 6E 67  n (i.e.  the voice keeps playing
00018AA0  29 2E 20 20 54 68 65 20  72 6F 75 74 69 6E 65 20  61 64 64 72 65 73 73 20  70 61 73 73 65 64 20 61  ).  The routine address passed a
00018AC0  73 20 61 20 70 61 72 61  6D 65 74 65 72 20 69 73  20 73 65 74 20 61 73 20  74 68 65 20 6E 65 77 20  s a parameter is set as the new 
00018AE0  68 61 6E 64 6C 65 72 2E  0D 0A 09 09 09 4E 6F 72  6D 61 6C 6C 79 2C 20 54  68 69 73 20 70 72 6F 63  handler.Normally, This proc
00018B00  65 64 75 72 65 20 69 73  20 75 73 65 64 20 74 6F  20 73 69 67 6E 69 66 79  20 74 68 61 74 20 61 20  edure is used to signify that a 
00018B20  76 6F 69 63 65 20 69 73  20 64 6F 6E 65 20 70 6C  61 79 69 6E 67 2E 20 20  54 68 69 73 20 68 61 6E  voice is done playing.  This han
00018B40  64 6C 65 72 20 63 61 6E  20 62 65 20 75 73 65 66  75 6C 20 66 6F 72 20 73  74 61 72 74 69 6E 67 20  dler can be useful for starting 
00018B60  61 6E 6F 74 68 65 72 20  76 6F 69 63 65 20 6F 72  20 63 6F 75 6E 74 69 6E  67 20 74 68 65 20 23 20  another voice or counting the # 
00018B80  6F 66 20 74 69 6D 65 73  20 74 68 61 74 20 61 20  76 6F 69 63 65 20 67 6F  65 73 20 74 68 72 6F 75  of times that a voice goes throu
00018BA0  67 68 20 61 20 6C 6F 6F  70 2E 20 20 54 68 65 20  76 6F 69 63 65 20 23 20  74 68 61 74 20 67 65 6E  gh a loop.  The voice # that gen
00018BC0  65 72 61 74 65 64 20 74  68 65 20 69 6E 74 65 72  72 75 70 74 20 69 73 20  70 61 73 73 65 64 20 62  erated the interrupt is passed b
00018BE0  61 63 6B 20 74 6F 20 79  6F 75 72 20 68 61 6E 64  6C 65 72 2E 0D 0A 0D 0A  52 65 74 75 72 6E 73 3A  ack to your handler.Returns:
00018C00  09 46 6F 72 20 43 20 75  73 65 72 73 2C 20 74 68  69 73 20 72 6F 75 74 69  6E 65 20 72 65 74 75 72  For C users, this routine retur
00018C20  6E 73 20 74 68 65 20 61  64 64 72 65 73 73 20 6F  66 20 74 68 65 20 6F 6C  64 20 68 61 6E 64 6C 65  ns the address of the old handle
00018C40  72 2E 0D 0A 0D 0A 50 41  53 43 41 4C 0D 0A 45 78  61 6D 70 6C 65 3A 09 53  65 65 20 74 68 65 20 65  r.PASCALExample:See the e
00018C60  78 61 6D 70 6C 65 20 66  6F 72 20 55 6C 74 72 61  44 52 41 4D 54 63 48 61  6E 64 6C 65 72 2E 0D 0A  xample for UltraDRAMTcHandler.
00018C80  0D 0A 0D 0A 0D 0A 55 6C  74 72 61 56 6F 6C 75 6D  65 48 61 6E 64 6C 65 72  0D 0A 5F 5F 5F 5F 5F 5F  UltraVolumeHandler______
00018CA0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 0D 0A 0D 0A 50  ___________________________P
00018CC0  75 72 70 6F 73 65 3A 09  54 6F 20 64 65 66 69 6E  65 20 61 20 63 61 6C 6C  62 61 63 6B 20 66 6F 72  urpose:To define a callback for
00018CE0  20 76 6F 6C 75 6D 65 20  72 61 6D 70 20 63 6F 6D  70 6C 65 74 65 20 69 6E  74 65 72 72 75 70 74 2E   volume ramp complete interrupt.
00018D00  0D 0A 0D 0A 43 3A 09 09  09 50 46 56 20 2A 28 55  6C 74 72 61 56 6F 6C 75  6D 65 48 61 6E 64 6C 65  C:PFV *(UltraVolumeHandle
00018D20  72 28 68 61 6E 64 6C 65  72 29 29 3B 0D 0A 09 09  09 50 46 56 20 2A 68 61  6E 64 6C 65 72 3B 0D 0A  r(handler));PFV *handler;
00018D40  0D 0A 50 41 53 43 41 4C  3A 09 50 52 4F 43 45 44  55 52 45 20 55 6C 74 72  61 56 6F 6C 75 6D 65 48  PASCAL:PROCEDURE UltraVolumeH
00018D60  61 6E 64 6C 65 72 28 56  41 52 20 48 61 6E 64 6C  65 72 20 3A 20 49 4E 54  5F 50 52 4F 43 29 3B 0D  andler(VAR Handler : INT_PROC);
00018D80  0A 0D 0A 52 65 6D 61 72  6B 73 3A 09 54 68 69 73  20 70 72 6F 63 65 64 75  72 65 20 64 65 66 69 6E  Remarks:This procedure defin
00018DA0  65 73 20 61 20 63 61 6C  6C 62 61 63 6B 20 66 6F  72 20 77 68 65 6E 65 76  65 72 20 61 20 76 6F 6C  es a callback for whenever a vol
00018DC0  75 6D 65 20 72 61 6D 70  20 65 6E 64 73 2E 20 20  54 68 65 20 72 6F 75 74  69 6E 65 20 61 64 64 72  ume ramp ends.  The routine addr
00018DE0  65 73 73 20 70 61 73 73  65 64 20 61 73 20 61 20  70 61 72 61 6D 65 74 65  72 20 69 73 20 73 65 74  ess passed as a parameter is set
00018E00  20 61 73 20 74 68 65 20  6E 65 77 20 68 61 6E 64  6C 65 72 2E 20 20 54 68  69 73 20 72 6F 75 74 69   as the new handler.  This routi
00018E20  6E 65 20 63 61 6E 20 62  65 20 75 73 65 64 20 74  6F 20 67 65 6E 65 72 61  74 65 20 61 20 76 6F 6C  ne can be used to generate a vol
00018E40  75 6D 65 20 65 6E 76 65  6C 6F 70 65 20 28 61 74  74 61 63 6B 2C 20 64 65  63 61 79 2C 20 73 75 73  ume envelope (attack, decay, sus
00018E60  74 61 69 6E 2C 20 72 65  6C 65 61 73 65 29 2E 20  20 54 68 69 73 20 69 73  20 64 6F 6E 65 20 62 79  tain, release).  This is done by
00018E80  20 63 68 61 6E 67 69 6E  67 20 74 6F 20 74 68 65  20 61 70 70 72 6F 70 72  69 61 74 65 20 76 6F 6C   changing to the appropriate vol
00018EA0  75 6D 65 20 72 61 6D 70  73 20 69 6E 20 74 68 65  20 68 61 6E 64 6C 65 72  20 74 6F 20 68 61 6E 64  ume ramps in the handler to hand
00018EC0  6C 65 20 74 68 65 20 6E  65 78 74 20 70 61 72 74  20 6F 66 20 74 68 65 20  65 6E 76 65 6C 6F 70 65  le the next part of the envelope
00018EE0  2E 20 20 54 68 65 20 76  6F 69 63 65 20 23 20 63  61 75 73 69 6E 67 20 74  68 65 20 69 6E 74 65 72  .  The voice # causing the inter
00018F00  72 75 70 74 20 77 69 6C  6C 20 62 65 20 70 61 73  73 65 64 20 62 61 63 6B  20 74 6F 20 79 6F 75 72  rupt will be passed back to your
00018F20  20 68 61 6E 64 6C 65 72  2E 0D 0A 0D 0A 52 65 74  75 72 6E 73 3A 09 46 6F  72 20 43 20 75 73 65 72   handler.Returns:For C user
00018F40  73 2C 20 74 68 69 73 20  72 6F 75 74 69 6E 65 20  72 65 74 75 72 6E 73 20  74 68 65 20 61 64 64 72  s, this routine returns the addr
00018F60  65 73 73 20 6F 66 20 74  68 65 20 6F 6C 64 20 68  61 6E 64 6C 65 72 2E 0D  0A 0D 0A 50 41 53 43 41  ess of the old handler.PASCA
00018F80  4C 0D 0A 45 78 61 6D 70  6C 65 3A 09 53 65 65 20  74 68 65 20 65 78 61 6D  70 6C 65 20 66 6F 72 20  LExample:See the example for 
00018FA0  55 6C 74 72 61 44 52 41  4D 54 63 48 61 6E 64 6C  65 72 2E 0D 0A 0C 55 6C  74 72 61 52 65 63 6F 72  UltraDRAMTcHandler.UltraRecor
00018FC0  64 48 61 6E 64 6C 65 72  0D 0A 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  dHandler______________________
00018FE0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 0D 0A 0D 0A 50  75 72 70 6F 73 65 3A 09  54 6F 20 64 65 66 69 6E  ___________Purpose:To defin
00019000  65 20 61 20 63 61 6C 6C  62 61 63 6B 20 66 6F 72  20 61 20 44 4D 41 20 72  65 63 6F 72 64 20 63 6F  e a callback for a DMA record co
00019020  6D 70 6C 65 74 65 20 69  6E 74 65 72 72 75 70 74  2E 0D 0A 0D 0A 43 3A 09  09 09 50 46 56 20 2A 28  mplete interrupt.C:PFV *(
00019040  55 6C 74 72 61 55 6C 74  72 61 52 65 63 6F 72 64  48 61 6E 64 6C 65 72 28  68 61 6E 64 6C 65 72 29  UltraUltraRecordHandler(handler)
00019060  29 3B 0D 0A 09 09 09 50  46 56 20 2A 68 61 6E 64  6C 65 72 3B 0D 0A 0D 0A  50 41 53 43 41 4C 3A 09  );PFV *handler;PASCAL:
00019080  50 52 4F 43 45 44 55 52  45 20 55 6C 74 72 61 52  65 63 6F 72 64 48 61 6E  64 6C 65 72 28 56 41 52  PROCEDURE UltraRecordHandler(VAR
000190A0  20 48 61 6E 64 6C 65 72  20 3A 20 50 46 56 29 3B  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 54 68 69   Handler : PFV);Remarks:Thi
000190C0  73 20 72 6F 75 74 69 6E  65 20 69 73 20 63 61 6C  6C 65 64 20 77 68 65 6E  20 61 20 62 75 66 66 65  s routine is called when a buffe
000190E0  72 20 74 68 61 74 20 77  61 73 20 62 65 69 6E 67  20 72 65 63 6F 72 64 65  64 20 69 6E 74 6F 20 69  r that was being recorded into i
00019100  73 20 66 75 6C 6C 2E 20  20 54 68 65 20 72 6F 75  74 69 6E 65 20 61 64 64  72 65 73 73 20 70 61 73  s full.  The routine address pas
00019120  73 65 64 20 61 73 20 61  20 70 61 72 61 6D 65 74  65 72 20 69 73 20 73 65  74 20 61 73 20 74 68 65  sed as a parameter is set as the
00019140  20 6E 65 77 20 68 61 6E  64 6C 65 72 2E 20 20 4E  6F 72 6D 61 6C 6C 79 2C  20 74 68 69 73 20 70 72   new handler.  Normally, this pr
00019160  6F 63 65 64 75 72 65 20  77 6F 75 6C 64 20 62 65  20 75 73 65 64 20 74 6F  20 6C 65 74 20 74 68 65  ocedure would be used to let the
00019180  20 61 70 70 6C 69 63 61  74 69 6F 6E 20 73 74 61  72 74 20 75 70 20 61 6E  6F 74 68 65 72 20 72 65   application start up another re
000191A0  63 6F 72 64 2E 20 20 41  20 64 6F 75 62 6C 65 20  62 75 66 66 65 72 69 6E  67 20 73 63 68 65 6D 65  cord.  A double buffering scheme
000191C0  20 63 6F 75 6C 64 20 62  65 20 75 73 65 64 20 74  6F 20 72 65 63 6F 72 64  20 64 61 74 61 20 63 6F   could be used to record data co
000191E0  6E 74 69 6E 75 6F 75 73  6C 79 2E 20 20 4E 6F 20  70 61 72 61 6D 65 74 65  72 73 20 61 72 65 20 70  ntinuously.  No parameters are p
00019200  61 73 73 65 64 20 74 6F  20 74 68 69 73 20 68 61  6E 64 6C 65 72 2E 0D 0A  09 09 09 41 73 20 6C 6F  assed to this handler.As lo
00019220  6E 67 20 61 73 20 74 68  65 20 44 4D 41 20 63 68  61 6E 6E 65 6C 73 20 66  6F 72 20 72 65 63 6F 72  ng as the DMA channels for recor
00019240  64 69 6E 67 20 61 6E 64  20 70 6C 61 79 62 61 63  6B 20 61 72 65 20 64 69  66 66 65 72 65 6E 74 2C  ding and playback are different,
00019260  20 74 68 65 20 55 6C 74  72 61 53 6F 75 6E 64 20  69 73 20 63 61 70 61 62  6C 65 20 6F 66 20 73 69   the UltraSound is capable of si
00019280  6D 75 6C 74 61 6E 65 6F  75 73 6C 79 20 72 65 63  6F 72 64 69 6E 67 20 61  6E 64 20 70 6C 61 79 62  multaneously recording and playb
000192A0  61 63 6B 2E 20 20 41 74  20 68 69 67 68 20 64 61  74 61 20 72 61 74 65 73  20 79 6F 75 72 20 61 70  ack.  At high data rates your ap
000192C0  70 6C 69 63 61 74 69 6F  6E 20 6D 61 79 20 68 61  76 65 20 61 20 70 72 6F  62 6C 65 6D 20 77 69 74  plication may have a problem wit
000192E0  68 20 74 68 72 6F 75 67  68 70 75 74 2E 0D 0A 0D  0A 52 65 74 75 72 6E 73  3A 09 46 6F 72 20 43 20  h throughput.Returns:For C 
00019300  75 73 65 72 73 2C 20 74  68 69 73 20 72 6F 75 74  69 6E 65 20 72 65 74 75  72 6E 73 20 74 68 65 20  users, this routine returns the 
00019320  61 64 64 72 65 73 73 20  6F 66 20 74 68 65 20 6F  6C 64 20 68 61 6E 64 6C  65 72 2E 0D 0A 0D 0A 50  address of the old handler.P
00019340  41 53 43 41 4C 0D 0A 45  78 61 6D 70 6C 65 3A 09  53 65 65 20 74 68 65 20  65 78 61 6D 70 6C 65 20  ASCALExample:See the example 
00019360  66 6F 72 20 55 6C 74 72  61 44 52 41 4D 54 63 48  61 6E 64 6C 65 72 2E 0D  0A 0D 0A 0D 0A 0D 0A 55  for UltraDRAMTcHandler.U
00019380  6C 74 72 61 41 75 78 48  61 6E 64 6C 65 72 0D 0A  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ltraAuxHandler________________
000193A0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 0D 0A 0D 0A 50 75 72  70 6F 73 65 3A 09 54 6F  _________________Purpose:To
000193C0  20 64 65 66 69 6E 65 20  61 20 63 61 6C 6C 62 61  63 6B 20 66 6F 72 20 61  6E 20 61 75 78 69 6C 69   define a callback for an auxili
000193E0  61 72 79 20 69 6E 74 65  72 72 75 70 74 2E 0D 0A  0D 0A 43 3A 09 09 09 50  46 56 20 2A 28 55 6C 74  ary interrupt.C:PFV *(Ult
00019400  72 61 55 6C 74 72 61 41  75 78 48 61 6E 64 6C 65  72 28 68 61 6E 64 6C 65  72 29 29 3B 0D 0A 09 09  raUltraAuxHandler(handler));
00019420  09 50 46 56 20 2A 68 61  6E 64 6C 65 72 3B 0D 0A  0D 0A 50 41 53 43 41 4C  3A 09 50 52 4F 43 45 44  PFV *handler;PASCAL:PROCED
00019440  55 52 45 20 55 6C 74 72  61 41 75 78 48 61 6E 64  6C 65 72 28 56 41 52 20  48 61 6E 64 6C 65 72 20  URE UltraAuxHandler(VAR Handler 
00019460  3A 20 50 46 56 29 3B 0D  0A 0D 0A 52 65 6D 61 72  6B 73 3A 09 54 68 69 73  20 68 61 6E 64 6C 65 72  : PFV);Remarks:This handler
00019480  20 77 69 6C 6C 20 62 65  20 63 61 6C 6C 65 64 20  61 74 20 74 68 65 20 65  6E 64 20 6F 66 20 41 4C   will be called at the end of AL
000194A0  4C 20 69 6E 74 65 72 72  75 70 74 73 20 74 68 61  74 20 68 61 70 70 65 6E  20 6F 6E 20 74 68 65 20  L interrupts that happen on the 
000194C0  55 6C 74 72 61 53 6F 75  6E 64 2E 20 20 49 74 73  20 70 72 69 6D 61 72 79  20 70 75 72 70 6F 73 65  UltraSound.  Its primary purpose
000194E0  20 69 73 20 66 6F 72 20  75 73 65 20 77 69 74 68  20 74 68 65 20 6E 65 77  20 55 6C 74 72 61 4D 61   is for use with the new UltraMa
00019500  78 20 63 61 72 64 20 73  69 6E 63 65 20 69 74 73  20 73 68 61 72 65 73 20  69 74 73 20 49 52 51 20  x card since its shares its IRQ 
00019520  77 69 74 68 20 74 68 65  20 47 46 31 2E 0D 0A 0D  0A 52 65 74 75 72 6E 73  3A 09 46 6F 72 20 43 20  with the GF1.Returns:For C 
00019540  75 73 65 72 73 2C 20 74  68 69 73 20 72 6F 75 74  69 6E 65 20 72 65 74 75  72 6E 73 20 74 68 65 20  users, this routine returns the 
00019560  61 64 64 72 65 73 73 20  6F 66 20 74 68 65 20 6F  6C 64 20 68 61 6E 64 6C  65 72 2E 0D 0A 0D 0A 50  address of the old handler.P
00019580  41 53 43 41 4C 0D 0A 45  78 61 6D 70 6C 65 3A 09  53 65 65 20 74 68 65 20  65 78 61 6D 70 6C 65 20  ASCALExample:See the example 
000195A0  66 6F 72 20 55 6C 74 72  61 44 52 41 4D 54 63 48  61 6E 64 6C 65 72 2E 0D  0A 0D 0A 0C 55 6C 74 72  for UltraDRAMTcHandler.Ultr
000195C0  61 4D 61 78 41 6C 6C 6F  63 0D 0A 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  aMaxAlloc_____________________
000195E0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 0D 0A 0D 0A  50 75 72 70 6F 73 65 3A  09 54 6F 20 66 69 6E 64  ____________Purpose:To find
00019600  20 74 68 65 20 73 69 7A  65 20 6F 66 20 74 68 65  20 6C 61 72 67 65 73 74  20 61 6C 6C 6F 63 61 74   the size of the largest allocat
00019620  61 62 6C 65 20 62 6C 6F  63 6B 20 6F 66 20 55 6C  74 72 61 53 6F 75 6E 64  20 44 52 41 4D 2E 0D 0A  able block of UltraSound DRAM.
00019640  0D 0A 43 3A 09 09 09 75  6E 73 69 67 6E 65 64 20  6C 6F 6E 67 20 55 6C 74  72 61 4D 61 78 41 6C 6C  C:unsigned long UltraMaxAll
00019660  6F 63 28 76 6F 69 64 29  3B 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 46 55 4E  43 54 49 4F 4E 20 55 6C  oc(void);PASCAL:FUNCTION Ul
00019680  74 72 61 4D 61 78 41 6C  6C 6F 63 20 3A 20 4C 4F  4E 47 49 4E 54 3B 0D 0A  0D 0A 52 65 6D 61 72 6B  traMaxAlloc : LONGINT;Remark
000196A0  73 3A 09 54 68 69 73 20  72 6F 75 74 69 6E 65 20  77 69 6C 6C 20 72 65 74  75 72 6E 20 74 68 65 20  s:This routine will return the 
000196C0  6C 61 72 67 65 73 74 20  62 6C 6F 63 6B 20 6F 66  20 44 52 41 4D 20 28 69  6E 20 62 79 74 65 73 29  largest block of DRAM (in bytes)
000196E0  20 74 68 61 74 20 63 61  6E 20 73 74 69 6C 6C 20  62 65 20 61 6C 6C 6F 63  61 74 65 64 2E 20 20 54   that can still be allocated.  T
00019700  68 69 73 20 63 61 6E 20  62 65 20 75 73 65 66 75  6C 20 66 6F 72 20 64 65  74 65 72 6D 69 6E 69 6E  his can be useful for determinin
00019720  67 20 77 68 65 74 68 65  72 20 6F 72 20 6E 6F 74  20 61 20 70 61 74 63 68  20 6F 72 20 73 61 6D 70  g whether or not a patch or samp
00019740  6C 65 20 63 61 6E 20 62  65 20 6C 6F 61 64 65 64  2E 20 20 54 68 65 20 6D  61 78 69 6D 75 6D 20 73  le can be loaded.  The maximum s
00019760  69 7A 65 20 6F 66 20 61  20 62 6C 6F 63 6B 20 69  73 20 32 35 36 4B 2E 0D  0A 0D 0A 52 65 74 75 72  ize of a block is 256K.Retur
00019780  6E 73 3A 09 23 20 6F 66  20 62 79 74 65 73 20 69  6E 20 6C 61 72 67 65 73  74 20 61 76 61 69 6C 61  ns:# of bytes in largest availa
000197A0  62 6C 65 20 62 6C 6F 63  6B 2E 0D 0A 0D 0A 53 65  65 20 61 6C 73 6F 3A 09  55 6C 74 72 61 4D 65 6D  ble block.See also:UltraMem
000197C0  41 6C 6C 6F 63 2C 20 55  6C 74 72 61 4D 65 6D 46  72 65 65 2C 20 0D 0A 09  09 09 66 6F 72 20 43 20  Alloc, UltraMemFree, for C 
000197E0  75 73 65 72 73 20 55 6C  74 72 61 4D 65 6D 49 6E  69 74 0D 0A 09 09 09 61  6E 64 20 66 6F 72 20 50  users UltraMemInitand for P
00019800  41 53 43 41 4C 20 75 73  65 72 73 20 55 6C 74 72  61 4D 65 6D 41 76 61 69  6C 20 61 6E 64 20 55 6C  ASCAL users UltraMemAvail and Ul
00019820  74 72 61 4D 61 78 41 76  61 69 6C 0D 0A 0D 0A 0D  0A 0D 0A 0D 0A 55 6C 74  72 61 4D 61 78 41 76 61  traMaxAvailUltraMaxAva
00019840  69 6C 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  il____________________________
00019860  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 66 69 6E  64 20 74 68 65 20 73 69  _____Purpose:To find the si
00019880  7A 65 20 6F 66 20 74 68  65 20 6C 61 72 67 65 73  74 20 61 6C 6C 6F 63 61  74 61 62 6C 65 20 62 6C  ze of the largest allocatable bl
000198A0  6F 63 6B 20 6F 66 20 55  6C 74 72 61 53 6F 75 6E  64 20 44 52 41 4D 2E 0D  0A 0D 0A 43 3A 09 09 09  ock of UltraSound DRAM.C:
000198C0  55 73 65 20 74 68 65 20  55 6C 74 72 61 4D 61 78  41 6C 6C 6F 63 20 66 75  6E 63 74 69 6F 6E 2E 0D  Use the UltraMaxAlloc function.
000198E0  0A 0D 0A 50 41 53 43 41  4C 3A 09 46 55 4E 43 54  49 4F 4E 20 55 6C 74 72  61 4D 61 78 41 76 61 69  PASCAL:FUNCTION UltraMaxAvai
00019900  6C 20 3A 20 4C 4F 4E 47  49 4E 54 3B 0D 0A 0D 0A  52 65 6D 61 72 6B 73 3A  09 54 68 69 73 20 72 6F  l : LONGINT;Remarks:This ro
00019920  75 74 69 6E 65 20 77 69  6C 6C 20 72 65 74 75 72  6E 20 74 68 65 20 6C 61  72 67 65 73 74 20 62 6C  utine will return the largest bl
00019940  6F 63 6B 20 6F 66 20 44  52 41 4D 20 28 69 6E 20  62 79 74 65 73 29 20 74  68 61 74 20 63 61 6E 20  ock of DRAM (in bytes) that can 
00019960  73 74 69 6C 6C 20 62 65  20 61 6C 6C 6F 63 61 74  65 64 2E 20 20 54 68 69  73 20 63 61 6E 20 62 65  still be allocated.  This can be
00019980  20 75 73 65 66 75 6C 20  66 6F 72 20 64 65 74 65  72 6D 69 6E 69 6E 67 20  77 68 65 74 68 65 72 20   useful for determining whether 
000199A0  6F 72 20 6E 6F 74 20 61  20 70 61 74 63 68 20 6F  72 20 73 61 6D 70 6C 65  20 63 61 6E 20 62 65 20  or not a patch or sample can be 
000199C0  6C 6F 61 64 65 64 2E 20  20 54 68 65 20 6D 61 78  69 6D 75 6D 20 73 69 7A  65 20 6F 66 20 61 20 62  loaded.  The maximum size of a b
000199E0  6C 6F 63 6B 20 69 73 20  32 35 36 4B 2E 20 20 54  68 69 73 20 72 6F 75 74  69 6E 65 20 69 73 20 69  lock is 256K.  This routine is i
00019A00  6E 63 6C 75 64 65 64 20  74 6F 20 70 72 6F 76 69  64 65 20 63 6F 6E 73 69  73 74 65 6E 63 79 20 6F  ncluded to provide consistency o
00019A20  66 20 6E 61 6D 69 6E 67  20 66 6F 72 20 50 41 53  43 41 4C 20 50 72 6F 67  72 61 6D 6D 65 72 73 2E  f naming for PASCAL Programmers.
00019A40  0D 0A 0D 0A 52 65 74 75  72 6E 73 3A 09 23 20 6F  66 20 62 79 74 65 73 20  69 6E 20 6C 61 72 67 65  Returns:# of bytes in large
00019A60  73 74 20 61 76 61 69 6C  61 62 6C 65 20 62 6C 6F  63 6B 2E 0D 0A 0D 0A 53  65 65 20 61 6C 73 6F 3A  st available block.See also:
00019A80  09 55 6C 74 72 61 4D 65  6D 41 6C 6C 6F 63 2C 20  55 6C 74 72 61 4D 65 6D  46 72 65 65 2C 20 0D 0A  UltraMemAlloc, UltraMemFree, 
00019AA0  09 09 09 66 6F 72 20 43  20 75 73 65 72 73 20 55  6C 74 72 61 4D 65 6D 49  6E 69 74 0D 0A 09 09 09  for C users UltraMemInit
00019AC0  61 6E 64 20 66 6F 72 20  50 41 53 43 41 4C 20 75  73 65 72 73 20 55 6C 74  72 61 4D 65 6D 41 76 61  and for PASCAL users UltraMemAva
00019AE0  69 6C 0D 0A 0D 0A 0D 0A  0C 55 6C 74 72 61 4D 65  6D 41 76 61 69 6C 0D 0A  5F 5F 5F 5F 5F 5F 5F 5F  ilUltraMemAvail________
00019B00  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 0D 0A 0D 0A 50 75 72  _________________________Pur
00019B20  70 6F 73 65 3A 09 54 6F  20 66 69 6E 64 20 74 68  65 20 74 6F 74 61 6C 20  61 6D 6F 75 6E 74 20 6F  pose:To find the total amount o
00019B40  66 20 66 72 65 65 20 55  6C 74 72 61 53 6F 75 6E  64 20 44 52 41 4D 2E 0D  0A 0D 0A 43 3A 09 09 09  f free UltraSound DRAM.C:
00019B60  54 68 69 73 20 66 75 6E  63 74 69 6F 6E 20 69 73  20 6E 6F 74 20 61 76 61  69 6C 61 62 6C 65 2E 0D  This function is not available.
00019B80  0A 0D 0A 50 41 53 43 41  4C 3A 09 46 55 4E 43 54  49 4F 4E 20 55 6C 74 72  61 4D 65 6D 41 76 61 69  PASCAL:FUNCTION UltraMemAvai
00019BA0  6C 20 3A 20 4C 4F 4E 47  49 4E 54 3B 0D 0A 0D 0A  52 65 6D 61 72 6B 73 3A  09 46 6F 72 20 50 41 53  l : LONGINT;Remarks:For PAS
00019BC0  43 41 4C 20 75 73 65 72  73 2C 20 74 68 69 73 20  77 69 6C 6C 20 72 65 74  75 72 6E 20 74 68 65 20  CAL users, this will return the 
00019BE0  74 6F 74 61 6C 20 61 6D  6F 75 6E 74 20 6F 66 20  44 52 41 4D 20 73 74 69  6C 6C 20 61 76 61 69 6C  total amount of DRAM still avail
00019C00  61 62 6C 65 20 66 6F 72  20 75 73 65 20 6F 6E 20  74 68 65 20 55 6C 74 72  61 53 6F 75 6E 64 2E 0D  able for use on the UltraSound.
00019C20  0A 0D 0A 52 65 74 75 72  6E 73 3A 09 23 20 6F 66  20 62 79 74 65 73 20 69  6E 20 6C 65 66 74 20 61  Returns:# of bytes in left a
00019C40  76 61 69 6C 61 62 6C 65  2E 0D 0A 0D 0A 53 65 65  20 61 6C 73 6F 3A 09 55  6C 74 72 61 4D 65 6D 41  vailable.See also:UltraMemA
00019C60  6C 6C 6F 63 2C 20 55 6C  74 72 61 4D 65 6D 46 72  65 65 2C 20 55 6C 74 72  61 4D 61 78 41 6C 6C 6F  lloc, UltraMemFree, UltraMaxAllo
00019C80  63 0D 0A 09 09 09 66 6F  72 20 43 20 75 73 65 72  73 20 55 6C 74 72 61 4D  65 6D 49 6E 69 74 0D 0A  cfor C users UltraMemInit
00019CA0  09 09 09 61 6E 64 20 66  6F 72 20 50 41 53 43 41  4C 20 75 73 65 72 73 20  55 6C 74 72 61 4D 61 78  and for PASCAL users UltraMax
00019CC0  41 76 61 69 6C 0D 0A 0D  0A 0D 0A 0D 0A 55 6C 74  72 61 4D 65 6D 41 6C 6C  6F 63 0D 0A 5F 5F 5F 5F  AvailUltraMemAlloc____
00019CE0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  _____________________________
00019D00  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 73 61 66  65 6C 79 20 61 6C 6C 6F  63 61 74 65 20 61 20 63  Purpose:To safely allocate a c
00019D20  68 75 6E 6B 20 6F 66 20  55 6C 74 72 61 53 6F 75  6E 64 20 44 52 41 4D 2E  0D 0A 0D 0A 43 3A 09 09  hunk of UltraSound DRAM.C:
00019D40  09 69 6E 74 20 55 6C 74  72 61 4D 65 6D 41 6C 6C  6F 63 28 73 69 7A 65 2C  20 6C 6F 63 61 74 69 6F  int UltraMemAlloc(size, locatio
00019D60  6E 29 3B 0D 0A 09 09 09  75 6E 73 69 67 6E 65 64  20 6C 6F 6E 67 20 73 69  7A 65 3B 0D 0A 09 09 09  n);unsigned long size;
00019D80  75 6E 73 69 67 6E 65 64  20 6C 6F 6E 67 20 2A 6C  6F 63 61 74 69 6F 6E 3B  0D 0A 0D 0A 50 41 53 43  unsigned long *location;PASC
00019DA0  41 4C 3A 09 46 55 4E 43  54 49 4F 4E 20 55 6C 74  72 61 4D 65 6D 41 6C 6C  6F 63 28 20 20 20 20 53  AL:FUNCTION UltraMemAlloc(    S
00019DC0  69 7A 65 20 20 20 20 20  3A 20 4C 4F 4E 47 49 4E  54 3B 0D 0A 09 09 09 20  20 20 20 20 20 20 20 20  ize     : LONGINT;         
00019DE0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 56 41  52 20 4C 6F 63 61 74 69  6F 6E 20 3A 20 4C 4F 4E                VAR Location : LON
00019E00  47 49 4E 54 29 20 3A 20  42 4F 4F 4C 45 41 4E 3B  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 54 68 69  GINT) : BOOLEAN;Remarks:Thi
00019E20  73 20 72 6F 75 74 69 6E  65 20 61 6C 6C 6F 63 61  74 65 73 20 61 20 63 68  75 6E 6B 20 6F 66 20 44  s routine allocates a chunk of D
00019E40  52 41 4D 20 6F 66 20 27  53 69 7A 65 27 20 62 79  74 65 73 20 66 72 6F 6D  20 74 68 65 20 55 6C 74  RAM of 'Size' bytes from the Ult
00019E60  72 61 53 6F 75 6E 64 27  73 20 44 52 41 4D 2E 20  20 54 68 65 20 6D 65 6D  6F 72 79 20 61 6C 6C 6F  raSound's DRAM.  The memory allo
00019E80  63 61 74 69 6F 6E 20 73  74 72 75 63 74 75 72 65  73 20 61 72 65 20 73 65  74 20 75 70 20 62 79 20  cation structures are set up by 
00019EA0  55 6C 74 72 61 4F 70 65  6E 2E 20 20 27 4C 6F 63  61 74 69 6F 6E 27 20 69  73 20 66 69 6C 6C 65 64  UltraOpen.  'Location' is filled
00019EC0  20 69 6E 20 77 69 74 68  20 74 68 65 20 44 52 41  4D 20 6C 6F 63 61 74 69  6F 6E 20 6F 66 20 74 68   in with the DRAM location of th
00019EE0  65 20 73 74 61 72 74 20  6F 66 20 74 68 65 20 63  68 75 6E 6B 20 6F 66 20  6D 65 6D 6F 72 79 2E 20  e start of the chunk of memory. 
00019F00  20 54 68 65 20 6D 65 6D  6F 72 79 20 61 64 64 72  65 73 73 20 72 65 74 75  72 6E 65 64 20 77 69 6C   The memory address returned wil
00019F20  6C 20 41 4C 57 41 59 53  20 62 65 20 61 6C 69 67  6E 65 64 20 6F 6E 20 61  20 33 32 20 62 79 74 65  l ALWAYS be aligned on a 32 byte
00019F40  20 62 6F 75 6E 64 61 72  79 20 73 6F 20 74 68 61  74 20 74 68 65 20 44 52  41 4D 20 63 61 6E 20 62   boundary so that the DRAM can b
00019F60  65 20 44 4D 41 27 65 64  20 69 6E 74 6F 20 77 69  74 68 6F 75 74 20 65 72  72 6F 72 2E 20 20 41 6C  e DMA'ed into without error.  Al
00019F80  73 6F 2C 20 74 68 65 20  73 69 7A 65 20 77 69 6C  6C 20 62 65 20 72 6F 75  6E 64 65 64 20 55 50 20  so, the size will be rounded UP 
00019FA0  74 6F 20 74 68 65 20 6E  65 78 74 20 33 32 20 62  79 74 65 20 62 6F 75 6E  64 61 72 79 2E 20 20 50  to the next 32 byte boundary.  P
00019FC0  41 53 43 41 4C 20 75 73  65 72 73 20 63 61 6E 20  72 65 66 65 72 65 6E 63  65 20 73 65 63 74 69 6F  ASCAL users can reference sectio
00019FE0  6E 20 31 2E 38 2E 33 20  66 6F 72 20 61 20 64 65  74 61 69 6C 65 64 20 6C  6F 6F 6B 20 61 74 20 68  n 1.8.3 for a detailed look at h
0001A000  6F 77 20 74 68 65 20 6D  65 6D 6F 72 79 20 69 73  20 6D 61 6E 61 67 65 64  2E 0D 0A 0D 0A 52 65 74  ow the memory is managed.Ret
0001A020  75 72 6E 73 3A 09 43 3A  20 20 20 20 20 20 55 4C  54 52 41 5F 4F 4B 20 69  66 20 6E 6F 20 70 72 6F  urns:C:      ULTRA_OK if no pro
0001A040  62 6C 65 6D 2E 0D 0A 09  09 09 20 20 20 20 20 20  20 20 4E 4F 5F 4D 45 4D  4F 52 59 20 69 66 20 74  blem.        NO_MEMORY if t
0001A060  68 65 72 65 20 69 73 20  6E 6F 20 63 68 75 6E 6B  20 6F 66 20 44 52 41 4D  20 6C 61 72 67 65 20 65  here is no chunk of DRAM large e
0001A080  6E 6F 75 67 68 2E 0D 0A  0D 0A 09 09 09 50 41 53  43 41 4C 3A 20 54 52 55  45 20 69 66 20 74 68 65  nough.PASCAL: TRUE if the
0001A0A0  20 61 6C 6C 6F 63 61 74  69 6F 6E 20 77 61 73 20  73 75 63 63 65 73 73 66  75 6C 2E 09 09 09 20 20   allocation was successful.  
0001A0C0  20 20 20 20 0D 0A 09 09  09 20 20 20 20 20 20 20  20 49 66 20 46 41 4C 53  45 2C 20 63 68 65 63 6B              If FALSE, check
0001A0E0  20 55 6C 74 72 61 45 72  72 6F 72 53 74 72 20 66  6F 72 20 74 68 65 20 72  65 61 73 6F 6E 2E 0D 0A   UltraErrorStr for the reason.
0001A100  0D 0A 53 65 65 20 61 6C  73 6F 3A 09 55 6C 74 72  61 4D 65 6D 46 72 65 65  2C 20 55 6C 74 72 61 4D  See also:UltraMemFree, UltraM
0001A120  61 78 41 6C 6C 6F 63 2C  0D 0A 09 09 09 66 6F 72  20 43 20 75 73 65 72 73  20 55 6C 74 72 61 4D 65  axAlloc,for C users UltraMe
0001A140  6D 49 6E 69 74 0D 0A 09  09 09 61 6E 64 20 66 6F  72 20 50 41 53 43 41 4C  20 75 73 65 72 73 20 55  mInitand for PASCAL users U
0001A160  6C 74 72 61 4D 61 78 41  76 61 69 6C 20 61 6E 64  20 55 6C 74 72 61 4D 65  6D 41 76 61 69 6C 0D 0A  ltraMaxAvail and UltraMemAvail
0001A180  0C 55 6C 74 72 61 4D 65  6D 46 72 65 65 0D 0A 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraMemFree_________________
0001A1A0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  0D 0A 0D 0A 50 75 72 70  6F 73 65 3A 09 54 6F 20  ________________Purpose:To 
0001A1C0  66 72 65 65 20 61 20 63  68 75 6E 6B 20 6F 66 20  44 52 41 4D 20 70 72 65  76 69 6F 75 73 6C 79 20  free a chunk of DRAM previously 
0001A1E0  61 6C 6C 6F 63 61 74 65  64 20 77 69 74 68 20 55  6C 74 72 61 4D 65 6D 41  6C 6C 6F 63 2E 0D 0A 0D  allocated with UltraMemAlloc.
0001A200  0A 43 3A 09 09 09 69 6E  74 20 55 6C 74 72 61 4D  65 6D 46 72 65 65 28 73  69 7A 65 2C 6C 6F 63 61  C:int UltraMemFree(size,loca
0001A220  74 69 6F 6E 29 3B 0D 0A  09 09 09 75 6E 73 69 67  6E 65 64 20 6C 6F 6E 67  20 73 69 7A 65 3B 0D 0A  tion);unsigned long size;
0001A240  09 09 09 75 6E 73 69 67  6E 65 64 20 6C 6F 6E 67  20 6C 6F 63 61 74 69 6F  6E 3B 0D 0A 0D 0A 50 41  unsigned long location;PA
0001A260  53 43 41 4C 3A 09 46 55  4E 43 54 49 4F 4E 20 20  55 6C 74 72 61 4D 65 6D  46 72 65 65 28 53 69 7A  SCAL:FUNCTION  UltraMemFree(Siz
0001A280  65 20 20 20 20 20 3A 20  4C 4F 4E 47 49 4E 54 3B  0D 0A 09 09 09 20 20 20  20 20 20 20 20 20 20 20  e     : LONGINT;           
0001A2A0  20 20 20 20 20 20 20 20  20 20 20 20 4C 6F 63 61  74 69 6F 6E 20 3A 20 4C  4F 4E 47 49 4E 54 29 20              Location : LONGINT) 
0001A2C0  3A 20 42 4F 4F 4C 45 41  4E 3B 0D 0A 0D 0A 52 65  6D 61 72 6B 73 3A 09 46  72 65 65 73 20 61 20 70  : BOOLEAN;Remarks:Frees a p
0001A2E0  72 65 76 69 6F 75 73 6C  79 20 61 6C 6C 6F 63 61  74 65 64 20 63 68 75 6E  6B 20 6F 66 20 55 6C 74  reviously allocated chunk of Ult
0001A300  72 61 53 6F 75 6E 64 20  6D 65 6D 6F 72 79 2E 20  20 54 68 65 20 73 69 7A  65 20 77 69 6C 6C 20 61  raSound memory.  The size will a
0001A320  75 74 6F 6D 61 74 69 63  61 6C 6C 79 20 62 65 20  72 6F 75 6E 64 65 64 20  55 50 20 74 6F 20 74 68  utomatically be rounded UP to th
0001A340  65 20 6E 65 78 74 20 33  32 20 62 79 74 65 20 62  6F 75 6E 64 61 72 79 2E  0D 0A 0D 0A 52 65 74 75  e next 32 byte boundary.Retu
0001A360  72 6E 73 3A 09 43 3A 20  20 20 20 20 20 55 4C 54  52 41 5F 4F 4B 20 69 66  20 6E 6F 20 70 72 6F 62  rns:C:      ULTRA_OK if no prob
0001A380  6C 65 6D 2E 0D 0A 09 09  09 20 20 20 20 20 20 20  20 43 4F 52 52 55 50 54  5F 4D 45 4D 20 69 66 20  lem.        CORRUPT_MEM if 
0001A3A0  74 68 65 20 6D 65 6D 6F  72 79 20 73 74 72 75 63  74 75 72 65 73 20 61 72  65 20 63 6F 72 72 75 70  the memory structures are corrup
0001A3C0  74 65 64 2E 0D 0A 0D 0A  09 09 09 50 41 53 43 41  4C 3A 20 54 52 55 45 20  69 66 20 64 65 61 6C 6C  ted.PASCAL: TRUE if deall
0001A3E0  6F 63 61 74 69 6F 6E 20  77 61 73 20 73 75 63 63  65 73 73 66 75 6C 2E 09  09 09 20 20 20 20 20 20  ocation was successful.      
0001A400  20 0D 0A 09 09 09 20 20  20 20 20 20 20 20 49 66  20 46 41 4C 53 45 2C 20  63 68 65 63 6B 20 55 6C           If FALSE, check Ul
0001A420  74 72 61 45 72 72 6F 72  53 74 72 20 66 6F 72 20  74 68 65 20 72 65 61 73  6F 6E 2E 0D 0A 0D 0A 53  traErrorStr for the reason.S
0001A440  65 65 20 61 6C 73 6F 3A  09 55 6C 74 72 61 4D 65  6D 49 6E 69 74 2C 20 55  6C 74 72 61 4D 65 6D 41  ee also:UltraMemInit, UltraMemA
0001A460  6C 6C 6F 63 0D 0A 09 09  09 66 6F 72 20 43 20 75  73 65 72 73 20 55 6C 74  72 61 4D 65 6D 49 6E 69  llocfor C users UltraMemIni
0001A480  74 0D 0A 09 09 09 61 6E  64 20 66 6F 72 20 50 41  53 43 41 4C 20 75 73 65  72 73 20 55 6C 74 72 61  tand for PASCAL users Ultra
0001A4A0  4D 61 78 41 76 61 69 6C  20 61 6E 64 20 55 6C 74  72 61 4D 65 6D 41 76 61  69 6C 0D 0A 0D 0A 0D 0A  MaxAvail and UltraMemAvail
0001A4C0  0D 0A 55 6C 74 72 61 4D  65 6D 49 6E 69 74 0D 0A  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraMemInit________________
0001A4E0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 0D 0A 0D 0A 50 75 72  70 6F 73 65 3A 09 54 6F  _________________Purpose:To
0001A500  20 69 6E 69 74 69 61 6C  69 7A 65 20 6F 72 20 72  65 2D 69 6E 69 74 69 61  6C 69 7A 65 20 74 68 65   initialize or re-initialize the
0001A520  20 6D 65 6D 6F 72 79 20  70 6F 6F 6C 20 73 74 72  75 63 74 75 72 65 73 2E  0D 0A 0D 0A 43 3A 09 09   memory pool structures.C:
0001A540  09 75 6E 73 69 67 6E 65  64 20 6C 6F 6E 67 20 55  6C 74 72 61 4D 65 6D 49  6E 69 74 28 76 6F 69 64  unsigned long UltraMemInit(void
0001A560  29 3B 0D 0A 0D 0A 50 41  53 43 41 4C 3A 09 54 68  69 73 20 72 6F 75 74 69  6E 65 20 69 73 20 6E 6F  );PASCAL:This routine is no
0001A580  74 20 75 73 65 64 2E 20  20 54 68 65 20 75 6E 69  74 20 61 75 74 6F 6D 61  74 69 63 61 6C 6C 79 20  t used.  The unit automatically 
0001A5A0  63 61 6C 6C 73 20 74 68  65 73 65 20 72 6F 75 74  69 6E 65 73 20 77 68 65  6E 20 79 6F 75 72 20 70  calls these routines when your p
0001A5C0  72 6F 67 72 61 6D 20 73  74 61 72 74 73 2E 0D 0A  0D 0A 52 65 6D 61 72 6B  73 3A 09 54 68 69 73 20  rogram starts.Remarks:This 
0001A5E0  72 6F 75 74 69 6E 65 20  73 65 74 73 20 75 70 20  74 68 65 20 55 6C 74 72  61 53 6F 75 6E 64 20 44  routine sets up the UltraSound D
0001A600  52 41 4D 20 73 6F 20 74  68 61 74 20 55 6C 74 72  61 4D 65 6D 41 6C 6C 6F  63 20 61 6E 64 20 55 6C  RAM so that UltraMemAlloc and Ul
0001A620  74 72 61 4D 65 6D 46 72  65 65 20 77 69 6C 6C 20  77 6F 72 6B 2E 20 20 49  74 20 69 73 20 63 61 6C  traMemFree will work.  It is cal
0001A640  6C 65 64 20 69 6E 20 55  6C 74 72 61 4F 70 65 6E  2E 20 20 49 74 20 63 61  6E 20 62 65 20 63 61 6C  led in UltraOpen.  It can be cal
0001A660  6C 65 64 20 61 74 20 61  6E 79 20 74 69 6D 65 20  69 66 20 61 6E 20 61 70  70 6C 69 63 61 74 69 6F  led at any time if an applicatio
0001A680  6E 20 77 61 6E 74 73 20  74 6F 20 63 6C 65 61 6E  20 75 70 20 61 6C 6C 20  69 74 73 20 61 6C 6C 6F  n wants to clean up all its allo
0001A6A0  63 61 74 65 64 20 6F 72  20 63 6F 72 72 75 70 74  65 64 20 6D 65 6D 6F 72  79 20 73 74 72 75 63 74  cated or corrupted memory struct
0001A6C0  75 72 65 73 2E 0D 0A 0D  0A 52 65 74 75 72 6E 73  3A 09 4E 75 6D 62 65 72  20 6F 66 20 4B 20 6F 66  ures.Returns:Number of K of
0001A6E0  20 44 52 41 4D 20 66 6F  75 6E 64 20 6F 6E 20 74  68 65 20 55 6C 74 72 61  53 6F 75 6E 64 2E 20 20   DRAM found on the UltraSound.  
0001A700  49 66 20 61 6E 20 61 70  70 6C 69 63 61 74 69 6F  6E 20 77 69 73 68 65 73  20 74 6F 20 72 65 73 65  If an application wishes to rese
0001A720  72 76 65 20 61 20 63 68  75 6E 6B 20 6F 66 20 44  52 41 4D 20 6F 75 74 73  69 64 65 20 6F 66 20 74  rve a chunk of DRAM outside of t
0001A740  68 65 20 6D 65 6D 6F 72  79 20 70 6F 6F 6C 2C 20  61 20 76 61 72 69 61 62  6C 65 20 63 61 6C 6C 65  he memory pool, a variable calle
0001A760  64 20 5F 75 6C 74 72 61  5F 72 65 73 65 72 76 65  64 5F 64 72 61 6D 20 6D  75 73 74 20 62 65 20 73  d _ultra_reserved_dram must be s
0001A780  65 74 20 75 70 20 77 69  74 68 20 74 68 65 20 23  20 6F 66 20 62 79 74 65  73 20 74 6F 20 72 65 73  et up with the # of bytes to res
0001A7A0  65 72 76 65 20 42 45 46  4F 52 45 20 55 6C 74 72  61 4D 65 6D 49 6E 69 74  20 69 73 20 63 61 6C 6C  erve BEFORE UltraMemInit is call
0001A7C0  65 64 2E 20 20 54 68 69  73 20 72 65 73 65 72 76  65 64 20 63 68 75 6E 6B  20 77 69 6C 6C 20 73 74  ed.  This reserved chunk will st
0001A7E0  61 72 74 20 61 74 20 30  2E 20 20 54 68 65 20 72  65 73 65 72 76 65 64 20  63 68 75 6E 6B 20 6D 75  art at 0.  The reserved chunk mu
0001A800  73 74 20 62 65 20 67 72  65 61 74 65 72 20 74 68  61 6E 20 33 32 20 62 79  74 65 73 20 61 6E 64 20  st be greater than 32 bytes and 
0001A820  6C 65 73 73 20 74 68 61  6E 20 32 35 36 4B 20 69  6E 20 73 69 7A 65 2E 0D  0A 0D 0A 53 65 65 20 61  less than 256K in size.See a
0001A840  6C 73 6F 3A 09 55 6C 74  72 61 4D 65 6D 41 6C 6C  6F 63 2C 20 55 6C 74 72  61 4D 65 6D 46 72 65 65  lso:UltraMemAlloc, UltraMemFree
0001A860  2C 20 61 6E 64 20 55 6C  74 72 61 4D 61 78 41 6C  6C 6F 63 0D 0A 0C 55 6C  74 72 61 4D 49 44 49 44  , and UltraMaxAllocUltraMIDID
0001A880  69 73 61 62 6C 65 52 65  63 76 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  isableRecv____________________
0001A8A0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 64 69 73  _____________Purpose:To dis
0001A8C0  61 62 6C 65 20 74 68 65  20 4D 49 44 49 20 72 65  63 65 69 76 65 20 64 61  74 61 20 69 6E 74 65 72  able the MIDI receive data inter
0001A8E0  72 75 70 74 2E 0D 0A 0D  0A 43 3A 09 09 09 76 6F  69 64 20 55 6C 74 72 61  4D 49 44 49 44 69 73 61  rupt.C:void UltraMIDIDisa
0001A900  62 6C 65 52 65 63 76 28  76 6F 69 64 29 3B 0D 0A  0D 0A 50 41 53 43 41 4C  3A 09 50 52 4F 43 45 44  bleRecv(void);PASCAL:PROCED
0001A920  55 52 45 20 55 6C 74 72  61 4D 49 44 49 44 69 73  61 62 6C 65 52 65 63 76  3B 0D 0A 0D 0A 52 65 6D  URE UltraMIDIDisableRecv;Rem
0001A940  61 72 6B 73 3A 09 54 68  69 73 20 72 6F 75 74 69  6E 65 20 77 69 6C 6C 20  64 69 73 61 62 6C 65 20  arks:This routine will disable 
0001A960  74 68 65 20 72 65 63 65  69 76 65 20 64 61 74 61  20 69 6E 74 65 72 72 75  70 74 73 20 66 72 6F 6D  the receive data interrupts from
0001A980  20 74 68 65 20 4D 49 44  49 2E 20 20 49 66 20 74  68 65 20 69 6E 74 65 72  72 75 70 74 20 69 73 20   the MIDI.  If the interrupt is 
0001A9A0  65 6E 61 62 6C 65 64 2C  20 69 74 20 73 68 6F 75  6C 64 20 62 65 20 64 69  73 61 62 6C 65 64 20 62  enabled, it should be disabled b
0001A9C0  65 66 6F 72 65 20 6C 65  61 76 69 6E 67 20 79 6F  75 72 20 61 70 70 6C 69  63 61 74 69 6F 6E 2E 0D  efore leaving your application.
0001A9E0  0A 0D 0A 53 65 65 20 61  6C 73 6F 3A 09 55 6C 74  72 61 4D 49 44 49 45 6E  61 62 6C 65 52 65 63 76  See also:UltraMIDIEnableRecv
0001AA00  2C 20 55 6C 74 72 61 4D  49 44 49 52 65 63 76 48  61 6E 64 6C 65 72 0D 0A  0D 0A 0D 0A 0D 0A 55 6C  , UltraMIDIRecvHandlerUl
0001AA20  74 72 61 44 69 73 61 62  6C 65 4D 49 44 49 58 6D  69 74 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  traDisableMIDIXmit____________
0001AA40  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  _____________________Purpose
0001AA60  3A 09 54 6F 20 64 69 73  61 62 6C 65 20 4D 49 44  49 20 74 72 61 6E 73 6D  69 74 20 69 6E 74 65 72  :To disable MIDI transmit inter
0001AA80  72 75 70 74 73 2E 0D 0A  0D 0A 43 3A 09 09 09 76  6F 69 64 20 55 6C 74 72  61 44 69 73 61 62 6C 65  rupts.C:void UltraDisable
0001AAA0  4D 49 44 49 58 6D 69 74  28 76 6F 69 64 29 3B 0D  0A 0D 0A 50 41 53 43 41  4C 3A 09 50 52 4F 43 45  MIDIXmit(void);PASCAL:PROCE
0001AAC0  44 55 52 45 20 55 6C 74  72 61 44 69 73 61 62 6C  65 4D 49 44 49 58 6D 69  74 3B 0D 0A 0D 0A 52 65  DURE UltraDisableMIDIXmit;Re
0001AAE0  6D 61 72 6B 73 3A 09 54  68 69 73 20 72 6F 75 74  69 6E 65 20 77 69 6C 6C  20 74 75 72 6E 20 6F 66  marks:This routine will turn of
0001AB00  66 20 4D 49 44 49 20 74  72 61 6E 73 6D 69 74 20  69 6E 74 65 72 72 75 70  74 73 2E 20 20 49 74 20  f MIDI transmit interrupts.  It 
0001AB20  4D 55 53 54 20 62 65 20  63 61 6C 6C 65 64 20 77  68 65 6E 20 79 6F 75 20  61 72 65 20 74 68 72 6F  MUST be called when you are thro
0001AB40  75 67 68 20 73 65 6E 64  69 6E 67 20 64 61 74 61  2E 0D 0A 0D 0A 53 65 65  20 61 6C 73 6F 3A 09 55  ugh sending data.See also:U
0001AB60  6C 74 72 61 4D 49 44 49  58 6D 69 74 48 61 6E 64  6C 65 72 2C 20 55 6C 74  72 61 4D 49 44 49 45 6E  ltraMIDIXmitHandler, UltraMIDIEn
0001AB80  61 62 6C 65 58 6D 69 74  0D 0A 0D 0A 0D 0A 0D 0A  55 6C 74 72 61 4D 49 44  49 45 6E 61 62 6C 65 52  ableXmitUltraMIDIEnableR
0001ABA0  65 63 76 0D 0A 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ecv___________________________
0001ABC0  5F 5F 5F 5F 5F 5F 0D 0A  0D 0A 50 75 72 70 6F 73  65 3A 09 54 6F 20 65 6E  61 62 6C 65 20 72 65 63  ______Purpose:To enable rec
0001ABE0  65 69 76 65 20 64 61 74  61 20 69 6E 74 65 72 72  75 70 74 73 20 66 6F 72  20 4D 49 44 49 20 70 6F  eive data interrupts for MIDI po
0001AC00  72 74 2E 0D 0A 0D 0A 43  3A 09 09 09 76 6F 69 64  20 55 6C 74 72 61 4D 49  44 49 45 6E 61 62 6C 65  rt.C:void UltraMIDIEnable
0001AC20  52 65 63 76 28 76 6F 69  64 29 3B 0D 0A 0D 0A 50  41 53 43 41 4C 3A 09 50  52 4F 43 45 44 55 52 45  Recv(void);PASCAL:PROCEDURE
0001AC40  20 55 6C 74 72 61 4D 49  44 49 45 6E 61 62 6C 65  52 65 63 76 3B 0D 0A 0D  0A 52 65 6D 61 72 6B 73   UltraMIDIEnableRecv;Remarks
0001AC60  3A 09 54 68 69 73 20 72  6F 75 74 69 6E 65 20 77  69 6C 6C 20 65 6E 61 62  6C 65 20 72 65 63 65 69  :This routine will enable recei
0001AC80  76 65 20 64 61 74 61 20  69 6E 74 65 72 72 75 70  74 73 20 66 72 6F 6D 20  74 68 65 20 4D 49 44 49  ve data interrupts from the MIDI
0001ACA0  20 70 6F 72 74 2E 20 20  49 74 20 69 73 20 6E 65  63 65 73 73 61 72 79 20  74 6F 20 73 65 74 20 75   port.  It is necessary to set u
0001ACC0  70 20 61 20 63 61 6C 6C  62 61 63 6B 20 72 6F 75  74 69 6E 65 20 66 6F 72  20 79 6F 75 72 20 61 70  p a callback routine for your ap
0001ACE0  70 6C 69 63 61 74 69 6F  6E 20 74 6F 20 70 72 6F  63 65 73 73 20 74 68 65  20 64 61 74 61 2E 0D 0A  plication to process the data.
0001AD00  0D 0A 53 65 65 20 61 6C  73 6F 3A 09 55 6C 74 72  61 4D 49 44 49 52 65 63  76 68 61 6E 64 6C 65 72  See also:UltraMIDIRecvhandler
0001AD20  2C 20 55 6C 74 72 61 4D  49 44 49 44 69 73 61 62  6C 65 52 65 63 76 0D 0A  0D 0A 0C 55 6C 74 72 61  , UltraMIDIDisableRecvUltra
0001AD40  45 6E 61 62 6C 65 4D 49  44 49 58 6D 69 74 0D 0A  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  EnableMIDIXmit________________
0001AD60  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 0D 0A 0D 0A 50 75 72  70 6F 73 65 3A 09 54 6F  _________________Purpose:To
0001AD80  20 65 6E 61 62 6C 65 20  74 72 61 6E 73 6D 69 74  20 69 6E 74 65 72 72 75  70 74 73 20 66 72 6F 6D   enable transmit interrupts from
0001ADA0  20 4D 49 44 49 2E 0D 0A  0D 0A 43 3A 09 09 09 76  6F 69 64 20 55 6C 74 72  61 45 6E 61 62 6C 65 4D   MIDI.C:void UltraEnableM
0001ADC0  49 44 49 58 6D 69 74 28  76 6F 69 64 29 3B 0D 0A  0D 0A 50 41 53 43 41 4C  3A 09 50 52 4F 43 45 44  IDIXmit(void);PASCAL:PROCED
0001ADE0  55 52 45 20 55 6C 74 72  61 45 6E 61 62 6C 65 4D  49 44 49 58 6D 69 74 3B  0D 0A 0D 0A 52 65 6D 61  URE UltraEnableMIDIXmit;Rema
0001AE00  72 6B 73 3A 09 54 68 69  73 20 72 6F 75 74 69 6E  65 20 77 69 6C 6C 20 65  6E 61 62 6C 65 20 74 72  rks:This routine will enable tr
0001AE20  61 6E 73 6D 69 74 20 64  61 74 61 20 69 6E 74 65  72 72 75 70 74 73 20 74  6F 20 62 65 20 67 65 6E  ansmit data interrupts to be gen
0001AE40  65 72 61 74 65 64 20 61  73 20 65 61 63 68 20 62  79 74 65 20 69 73 20 74  72 61 6E 73 6D 69 74 74  erated as each byte is transmitt
0001AE60  65 64 20 6F 75 74 20 74  68 65 20 4D 49 44 49 20  70 6F 72 74 2E 20 20 4E  6F 74 65 20 74 68 61 74  ed out the MIDI port.  Note that
0001AE80  20 61 20 74 72 61 6E 73  6D 69 74 20 69 6E 74 65  72 72 75 70 74 20 77 69  6C 6C 20 62 65 20 67 65   a transmit interrupt will be ge
0001AEA0  6E 65 72 61 74 65 64 20  61 73 20 73 6F 6F 6E 20  61 73 20 74 68 65 20 49  52 51 20 69 73 20 65 6E  nerated as soon as the IRQ is en
0001AEC0  61 62 6C 65 64 20 75 6E  6C 65 73 73 20 61 20 62  79 74 65 20 69 73 20 73  65 6E 74 20 6F 75 74 20  abled unless a byte is sent out 
0001AEE0  69 6D 6D 65 64 69 61 74  65 6C 79 20 70 72 69 6F  72 20 74 6F 20 65 6E 61  62 6C 69 6E 67 20 69 74  immediately prior to enabling it
0001AF00  2E 20 20 54 68 69 73 20  69 73 20 62 65 63 61 75  73 65 20 74 68 65 20 78  6D 69 74 20 62 75 66 66  .  This is because the xmit buff
0001AF20  65 72 20 69 73 20 69 6E  69 74 69 61 6C 6C 79 20  65 6D 70 74 79 20 28 75  6E 6C 65 73 73 20 70 72  er is initially empty (unless pr
0001AF40  69 6D 65 64 29 20 73 6F  20 69 74 20 77 69 6C 6C  20 70 6F 70 20 61 6E 20  69 6E 74 65 72 72 75 70  imed) so it will pop an interrup
0001AF60  74 2E 20 20 41 6C 73 6F  20 6E 6F 74 65 20 74 68  61 74 20 79 6F 75 20 4D  55 53 54 20 64 69 73 61  t.  Also note that you MUST disa
0001AF80  62 6C 65 20 74 68 69 73  20 69 6E 74 65 72 72 75  70 74 20 77 68 65 6E 20  79 6F 75 20 61 72 65 20  ble this interrupt when you are 
0001AFA0  6E 6F 74 20 73 65 6E 64  69 6E 67 20 61 6E 79 20  6D 6F 72 65 20 64 61 74  61 20 6F 72 20 65 6C 73  not sending any more data or els
0001AFC0  65 20 79 6F 75 20 77 69  6C 6C 20 62 65 20 68 75  6E 67 20 75 70 20 67 65  74 74 69 6E 67 20 74 72  e you will be hung up getting tr
0001AFE0  61 6E 73 6D 69 74 20 72  65 61 64 79 20 69 6E 74  65 72 72 75 70 74 73 2E  0D 0A 0D 0A 53 65 65 20  ansmit ready interrupts.See 
0001B000  61 6C 73 6F 3A 09 55 6C  74 72 61 4D 49 44 49 58  6D 69 74 48 61 6E 64 6C  65 72 2C 20 55 6C 74 72  also:UltraMIDIXmitHandler, Ultr
0001B020  61 4D 49 44 49 44 69 73  61 62 6C 65 58 6D 69 74  0D 0A 0D 0A 0D 0A 0D 0A  55 6C 74 72 61 4D 49 44  aMIDIDisableXmitUltraMID
0001B040  49 52 65 63 76 0D 0A 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  IRecv_________________________
0001B060  5F 5F 5F 5F 5F 5F 5F 5F  0D 0A 0D 0A 50 75 72 70  6F 73 65 3A 09 54 6F 20  72 65 61 64 20 61 20 62  ________Purpose:To read a b
0001B080  79 74 65 20 66 72 6F 6D  20 74 68 65 20 4D 49 44  49 20 70 6F 72 74 2E 0D  0A 0D 0A 43 3A 09 09 09  yte from the MIDI port.C:
0001B0A0  75 6E 73 69 67 6E 65 64  20 63 68 61 72 20 55 6C  74 72 61 4D 49 44 49 52  65 63 76 28 76 6F 69 64  unsigned char UltraMIDIRecv(void
0001B0C0  29 3B 0D 0A 0D 0A 50 41  53 43 41 4C 3A 09 46 55  4E 43 54 49 4F 4E 20 55  6C 74 72 61 4D 49 44 49  );PASCAL:FUNCTION UltraMIDI
0001B0E0  52 65 63 76 20 3A 20 42  59 54 45 3B 0D 0A 0D 0A  52 65 6D 61 72 6B 73 3A  09 54 68 69 73 20 72 6F  Recv : BYTE;Remarks:This ro
0001B100  75 74 69 6E 65 20 69 73  20 75 73 65 64 20 74 6F  20 72 65 61 64 20 61 20  62 79 74 65 20 66 72 6F  utine is used to read a byte fro
0001B120  6D 20 74 68 65 20 4D 49  44 49 20 70 6F 72 74 2E  20 20 49 74 20 61 73 73  75 6D 65 73 20 74 68 61  m the MIDI port.  It assumes tha
0001B140  74 20 74 68 65 20 62 79  74 65 20 69 73 20 77 61  69 74 69 6E 67 2E 20 20  54 68 65 20 42 79 74 65  t the byte is waiting.  The Byte
0001B160  20 69 73 20 74 68 65 72  65 20 69 66 20 69 74 20  67 6F 74 20 74 6F 20 74  68 65 20 4D 49 44 49 20   is there if it got to the MIDI 
0001B180  72 65 63 65 69 76 65 20  69 6E 74 65 72 72 75 70  74 20 63 61 6C 6C 62 61  63 6B 20 72 6F 75 74 69  receive interrupt callback routi
0001B1A0  6E 65 20 6F 72 20 69 66  20 79 6F 75 20 68 61 76  65 20 70 6F 6C 6C 65 64  20 74 68 65 20 73 74 61  ne or if you have polled the sta
0001B1C0  74 75 73 20 61 6E 64 20  64 65 74 65 72 6D 69 6E  65 64 20 74 68 65 20 72  65 63 65 69 76 65 20 62  tus and determined the receive b
0001B1E0  75 66 66 65 72 20 69 73  20 66 75 6C 6C 2E 0D 0A  0D 0A 52 65 74 75 72 6E  73 3A 09 4D 49 44 49 20  uffer is full.Returns:MIDI 
0001B200  64 61 74 61 20 62 79 74  65 0D 0A 0D 0A 53 65 65  20 61 6C 73 6F 3A 09 55  6C 74 72 61 4D 49 44 49  data byteSee also:UltraMIDI
0001B220  52 65 63 76 48 61 6E 64  6C 65 72 2C 20 55 6C 74  72 61 4D 49 44 49 53 74  61 74 75 73 0D 0A 0D 0A  RecvHandler, UltraMIDIStatus
0001B240  0D 0A 0C 55 6C 74 72 61  4D 49 44 49 52 65 73 65  74 0D 0A 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraMIDIReset_____________
0001B260  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 0D 0A 0D 0A  50 75 72 70 6F 73 65 3A  ____________________Purpose:
0001B280  09 54 6F 20 72 65 73 65  74 20 74 68 65 20 4D 49  44 49 20 70 6F 72 74 2E  0D 0A 0D 0A 43 3A 09 09  To reset the MIDI port.C:
0001B2A0  09 76 6F 69 64 20 55 6C  74 72 61 4D 49 44 49 52  65 73 65 74 28 76 6F 69  64 29 3B 0D 0A 0D 0A 50  void UltraMIDIReset(void);P
0001B2C0  41 53 43 41 4C 3A 09 50  52 4F 43 45 44 55 52 45  20 55 6C 74 72 61 4D 49  44 49 52 65 73 65 74 3B  ASCAL:PROCEDURE UltraMIDIReset;
0001B2E0  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 54 68 69  73 20 72 6F 75 74 69 6E  65 20 73 68 6F 75 6C 64  Remarks:This routine should
0001B300  20 62 65 20 75 73 65 64  20 74 6F 20 65 6E 73 75  72 65 20 74 68 61 74 20  74 68 65 20 4D 49 44 49   be used to ensure that the MIDI
0001B320  20 70 6F 72 74 20 69 73  20 72 65 61 64 79 20 74  6F 20 75 73 65 2E 20 20  41 6C 6C 20 4D 49 44 49   port is ready to use.  All MIDI
0001B340  20 69 6E 74 65 72 72 75  70 74 73 20 77 69 6C 6C  20 62 65 20 64 69 73 61  62 6C 65 64 20 62 79 20   interrupts will be disabled by 
0001B360  74 68 69 73 20 63 61 6C  6C 2E 0D 0A 0D 0A 53 65  65 20 61 6C 73 6F 3A 09  55 6C 74 72 61 45 6E 61  this call.See also:UltraEna
0001B380  62 6C 65 4D 49 44 49 58  6D 69 74 2C 20 55 6C 74  72 61 45 6E 61 62 6C 65  4D 49 44 49 52 65 63 76  bleMIDIXmit, UltraEnableMIDIRecv
0001B3A0  0D 0A 0D 0A 0D 0A 0D 0A  55 6C 74 72 61 4D 49 44  49 53 74 61 74 75 73 0D  0A 5F 5F 5F 5F 5F 5F 5F  UltraMIDIStatus_______
0001B3C0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 0D 0A 0D 0A 50 75  __________________________Pu
0001B3E0  72 70 6F 73 65 3A 09 54  6F 20 72 65 61 64 20 74  68 65 20 4D 49 44 49 20  73 74 61 74 75 73 20 62  rpose:To read the MIDI status b
0001B400  79 74 65 2E 0D 0A 0D 0A  43 3A 09 09 09 75 6E 73  69 67 6E 65 64 20 63 68  61 72 20 55 6C 74 72 61  yte.C:unsigned char Ultra
0001B420  4D 49 44 49 53 74 61 74  75 73 28 76 6F 69 64 29  3B 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 46 55 4E  MIDIStatus(void);PASCAL:FUN
0001B440  43 54 49 4F 4E 20 55 6C  74 72 61 4D 49 44 49 53  74 61 74 75 73 20 3A 20  42 59 54 45 3B 0D 0A 0D  CTION UltraMIDIStatus : BYTE;
0001B460  0A 52 65 6D 61 72 6B 73  3A 09 54 68 69 73 20 72  6F 75 74 69 6E 65 20 72  65 74 75 72 6E 73 20 74  Remarks:This routine returns t
0001B480  68 65 20 63 75 72 72 65  6E 74 20 4D 49 44 49 20  70 6F 72 74 20 73 74 61  74 75 73 20 62 69 74 73  he current MIDI port status bits
0001B4A0  2E 20 20 54 68 69 73 20  63 61 6E 20 62 65 20 75  73 65 64 20 74 6F 20 64  65 74 65 72 6D 69 6E 65  .  This can be used to determine
0001B4C0  20 69 66 20 61 6E 20 65  72 72 6F 72 20 68 61 73  20 6F 63 63 75 72 72 65  64 20 6F 72 20 69 66 20   if an error has occurred or if 
0001B4E0  74 68 65 20 70 6F 72 74  20 69 73 20 72 65 61 64  79 20 74 6F 20 62 65 20  72 65 61 64 20 6F 72 20  the port is ready to be read or 
0001B500  77 72 69 74 74 65 6E 2E  0D 0A 0D 0A 52 65 74 75  72 6E 73 3A 09 54 68 65  20 4D 49 44 49 20 73 74  written.Returns:The MIDI st
0001B520  61 74 75 73 20 62 79 74  65 2E 20 20 53 65 65 20  63 68 61 70 74 65 72 20  32 2E 0D 0A 0D 0A 53 65  atus byte.  See chapter 2.Se
0001B540  65 20 61 6C 73 6F 3A 09  55 6C 74 72 61 4D 49 44  49 58 6D 69 74 2C 20 55  6C 74 72 61 4D 49 44 49  e also:UltraMIDIXmit, UltraMIDI
0001B560  52 65 63 76 0D 0A 0D 0A  0D 0A 0D 0A 0D 0A 55 6C  74 72 61 4D 49 44 49 58  6D 69 74 0D 0A 5F 5F 5F  RecvUltraMIDIXmit___
0001B580  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 0D 0A  ______________________________
0001B5A0  0D 0A 50 75 72 70 6F 73  65 3A 09 54 6F 20 73 65  6E 64 20 61 20 62 79 74  65 20 6F 75 74 20 74 68  Purpose:To send a byte out th
0001B5C0  65 20 4D 49 44 49 20 70  6F 72 74 2E 0D 0A 0D 0A  43 3A 09 09 09 76 6F 69  64 20 55 6C 74 72 61 4D  e MIDI port.C:void UltraM
0001B5E0  49 44 49 58 6D 69 74 28  64 61 74 61 29 3B 0D 0A  09 09 09 75 6E 73 69 67  6E 65 64 20 63 68 61 72  IDIXmit(data);unsigned char
0001B600  20 64 61 74 61 3B 0D 0A  0D 0A 50 41 53 43 41 4C  3A 09 50 52 4F 43 45 44  55 52 45 20 55 6C 74 72   data;PASCAL:PROCEDURE Ultr
0001B620  61 4D 49 44 49 58 6D 69  74 28 44 61 74 61 20 3A  20 42 59 54 45 29 3B 0D  0A 0D 0A 52 65 6D 61 72  aMIDIXmit(Data : BYTE);Remar
0001B640  6B 73 3A 09 54 68 69 73  20 72 6F 75 74 69 6E 65  20 77 69 6C 6C 20 73 65  6E 64 20 74 68 65 20 27  ks:This routine will send the '
0001B660  44 61 74 61 27 20 62 79  74 65 20 6F 75 74 20 74  68 65 20 4D 49 44 49 20  64 61 74 61 20 70 6F 72  Data' byte out the MIDI data por
0001B680  74 2E 20 20 49 66 20 69  6E 74 65 72 72 75 70 74  73 20 61 72 65 20 65 6E  61 62 6C 65 64 2C 20 61  t.  If interrupts are enabled, a
0001B6A0  6E 20 69 6E 74 65 72 72  75 70 74 20 77 69 6C 6C  20 62 65 20 67 65 6E 65  72 61 74 65 64 20 77 68  n interrupt will be generated wh
0001B6C0  65 6E 20 74 68 65 20 42  79 74 65 20 68 61 73 20  62 65 65 6E 20 74 72 61  6E 73 6D 69 74 74 65 64  en the Byte has been transmitted
0001B6E0  2E 0D 0A 0D 0A 53 65 65  20 61 6C 73 6F 3A 09 55  6C 74 72 61 4D 49 44 49  58 6D 69 74 48 61 6E 64  .See also:UltraMIDIXmitHand
0001B700  6C 65 72 0D 0A 0C 55 6C  74 72 61 4F 70 65 6E 0D  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  lerUltraOpen_______________
0001B720  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  __________________Purpose:T
0001B740  6F 20 6F 70 65 6E 20 61  6E 64 20 69 6E 69 74 69  61 6C 69 7A 65 20 74 68  65 20 55 6C 74 72 61 53  o open and initialize the UltraS
0001B760  6F 75 6E 64 20 63 61 72  64 20 61 6E 64 20 74 68  65 20 53 44 4B 20 63 6F  64 65 2E 0D 0A 0D 0A 43  ound card and the SDK code.C
0001B780  3A 09 09 09 69 6E 74 20  55 6C 74 72 61 4F 70 65  6E 28 63 6F 6E 66 69 67  2C 76 6F 69 63 65 73 29  :int UltraOpen(config,voices)
0001B7A0  3B 0D 0A 09 09 09 55 4C  54 52 41 5F 43 46 47 20  2A 63 6F 6E 66 69 67 3B  0D 0A 09 09 09 69 6E 74  ;ULTRA_CFG *config;int
0001B7C0  20 76 6F 69 63 65 73 3B  0D 0A 0D 0A 50 41 53 43  41 4C 3A 09 46 55 4E 43  54 49 4F 4E 20 20 55 6C   voices;PASCAL:FUNCTION  Ul
0001B7E0  74 72 61 4F 70 65 6E 28  56 41 52 20 43 6F 6E 66  69 67 20 3A 20 55 6C 74  72 61 5F 43 46 47 3B 0D  traOpen(VAR Config : Ultra_CFG;
0001B800  0A 09 09 09 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 56 6F 69 63                          Voic
0001B820  65 73 20 3A 20 49 4E 54  45 47 45 52 29 20 3A 20  42 4F 4F 4C 45 41 4E 3B  0D 0A 0D 0A 52 65 6D 61  es : INTEGER) : BOOLEAN;Rema
0001B840  72 6B 73 3A 09 54 68 69  73 20 72 6F 75 74 69 6E  65 20 73 68 6F 75 6C 64  20 41 4C 57 41 59 53 20  rks:This routine should ALWAYS 
0001B860  62 65 20 63 61 6C 6C 65  64 20 74 6F 20 69 6E 69  74 69 61 6C 69 7A 65 20  74 68 65 20 55 6C 74 72  be called to initialize the Ultr
0001B880  61 53 6F 75 6E 64 2E 20  20 49 74 20 77 69 6C 6C  20 70 72 6F 62 65 20 66  6F 72 20 74 68 65 20 63  aSound.  It will probe for the c
0001B8A0  61 72 64 20 61 6E 64 20  70 72 6F 67 72 61 6D 20  74 68 65 20 49 52 51 20  61 6E 64 20 44 4D 41 20  ard and program the IRQ and DMA 
0001B8C0  6C 61 74 63 68 65 73 2E  20 20 49 74 20 77 69 6C  6C 20 74 68 65 6E 20 64  69 73 61 62 6C 65 20 6C  latches.  It will then disable l
0001B8E0  69 6E 65 20 61 6E 64 20  6D 69 63 72 6F 70 68 6F  6E 65 20 69 6E 70 75 74  20 61 6E 64 20 65 6E 61  ine and microphone input and ena
0001B900  62 6C 65 20 6F 75 74 70  75 74 2E 20 20 49 74 20  61 6C 73 6F 20 69 6E 69  74 69 61 6C 69 7A 65 73  ble output.  It also initializes
0001B920  20 74 68 65 20 6D 65 6D  6F 72 79 20 73 74 72 75  63 74 75 72 65 73 2E 20  20 54 68 65 20 23 20 6F   the memory structures.  The # o
0001B940  66 20 61 63 74 69 76 65  20 76 6F 69 63 65 73 20  69 73 20 61 6E 20 69 6D  70 6F 72 74 61 6E 74 20  f active voices is an important 
0001B960  70 61 72 61 6D 65 74 65  72 20 74 6F 20 74 68 65  20 55 6C 74 72 61 53 6F  75 6E 64 3A 20 74 68 65  parameter to the UltraSound: the
0001B980  20 66 65 77 65 72 20 74  68 65 20 23 20 6F 66 20  76 6F 69 63 65 73 2C 20  74 68 65 20 6D 6F 72 65   fewer the # of voices, the more
0001B9A0  20 6F 76 65 72 73 61 6D  70 6C 69 6E 67 20 74 68  61 74 20 6F 63 63 75 72  73 20 6F 6E 20 70 6C 61   oversampling that occurs on pla
0001B9C0  79 62 61 63 6B 2E 20 20  54 68 69 73 20 77 69 6C  6C 20 6D 61 6B 65 20 74  68 65 20 73 6F 75 6E 64  yback.  This will make the sound
0001B9E0  20 6D 75 63 68 20 27 63  6C 65 61 6E 65 72 27 2E  20 20 49 66 20 79 6F 75  20 73 70 65 63 69 66 79   much 'cleaner'.  If you specify
0001BA00  20 61 20 6E 75 6D 62 65  72 20 6F 66 20 76 6F 69  63 65 73 20 6C 65 73 73  20 74 68 61 6E 20 31 34   a number of voices less than 14
0001BA20  2C 20 74 68 65 20 63 61  72 64 20 77 69 6C 6C 20  73 74 69 6C 6C 20 62 65  20 69 6E 69 74 69 61 6C  , the card will still be initial
0001BA40  69 7A 65 64 20 74 6F 20  75 73 65 20 31 34 20 76  6F 69 63 65 73 2E 20 20  4C 69 6B 65 77 69 73 65  ized to use 14 voices.  Likewise
0001BA60  2C 20 69 66 20 79 6F 75  20 73 65 6C 65 63 74 20  6C 61 72 67 65 72 20 74  68 61 6E 20 33 32 20 76  , if you select larger than 32 v
0001BA80  6F 69 63 65 73 2C 20 79  6F 75 20 77 69 6C 6C 20  73 74 69 6C 6C 20 6F 6E  6C 79 20 68 61 76 65 20  oices, you will still only have 
0001BAA0  33 32 2E 0D 0A 0D 0A 52  65 74 75 72 6E 73 3A 09  43 3A 20 20 20 20 20 20  55 4C 54 52 41 5F 4F 4B  32.Returns:C:      ULTRA_OK
0001BAC0  20 69 66 20 6E 6F 20 70  72 6F 62 6C 65 6D 2E 0D  0A 09 09 09 20 20 20 20  20 20 20 20 4E 4F 5F 55   if no problem.        NO_U
0001BAE0  4C 54 52 41 20 69 66 20  6E 6F 20 55 6C 74 72 61  53 6F 75 6E 64 20 63 61  72 64 20 66 6F 75 6E 64  LTRA if no UltraSound card found
0001BB00  2E 0D 0A 09 09 09 20 20  20 20 20 20 20 20 42 41  44 5F 4E 55 4D 5F 4F 46  5F 56 4F 49 43 45 53 20  .        BAD_NUM_OF_VOICES 
0001BB20  69 66 20 23 20 6F 66 20  61 63 74 69 76 65 20 76  6F 69 63 65 73 20 6F 75  74 20 6F 66 20 72 61 6E  if # of active voices out of ran
0001BB40  67 65 0D 0A 0D 0A 09 09  09 50 41 53 43 41 4C 3A  20 54 52 55 45 20 69 66  20 74 68 65 20 63 61 72  gePASCAL: TRUE if the car
0001BB60  64 20 77 61 73 20 73 75  63 63 65 73 73 66 75 6C  6C 79 20 6F 70 65 6E 65  64 2E 0D 0A 09 09 09 20  d was successfully opened. 
0001BB80  20 20 20 20 20 20 20 49  66 20 46 41 4C 53 45 2C  20 63 68 65 63 6B 20 55  6C 74 72 61 45 72 72 6F         If FALSE, check UltraErro
0001BBA0  72 53 74 72 20 66 6F 72  20 74 68 65 20 72 65 61  73 6F 6E 2E 0D 0A 0D 0A  53 65 65 20 61 6C 73 6F  rStr for the reason.See also
0001BBC0  3A 09 55 6C 74 72 61 43  6C 6F 73 65 2C 20 55 6C  74 72 61 50 72 6F 62 65  0D 0A 0D 0A 0D 0A 0C 55  :UltraClose, UltraProbeU
0001BBE0  6C 74 72 61 50 65 65 6B  44 61 74 61 0D 0A 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ltraPeekData__________________
0001BC00  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  0A 0D 0A 50 75 72 70 6F  73 65 3A 09 54 6F 20 65  _______________Purpose:To e
0001BC20  78 61 6D 69 6E 65 20 61  6E 79 20 44 52 41 4D 20  6C 6F 63 61 74 69 6F 6E  20 6F 6E 20 74 68 65 20  xamine any DRAM location on the 
0001BC40  55 6C 74 72 61 53 6F 75  6E 64 2E 0D 0A 0D 0A 43  3A 09 09 09 75 6E 73 69  67 6E 65 64 20 63 68 61  UltraSound.C:unsigned cha
0001BC60  72 20 55 6C 74 72 61 50  65 65 6B 44 61 74 61 28  62 61 73 65 70 6F 72 74  2C 6C 6F 63 61 74 69 6F  r UltraPeekData(baseport,locatio
0001BC80  6E 29 3B 0D 0A 09 09 09  75 6E 73 69 67 6E 65 64  20 69 6E 74 20 62 61 73  65 70 6F 72 74 3B 0D 0A  n);unsigned int baseport;
0001BCA0  09 09 09 75 6E 73 69 67  6E 65 64 20 6C 6F 6E 67  20 6C 6F 63 61 74 69 6F  6E 3B 0D 0A 0D 0A 50 41  unsigned long location;PA
0001BCC0  53 43 41 4C 3A 09 46 55  4E 43 54 49 4F 4E 20 55  6C 74 72 61 50 65 65 6B  44 61 74 61 28 50 50 6F  SCAL:FUNCTION UltraPeekData(PPo
0001BCE0  72 74 20 20 20 3A 20 49  4E 54 45 47 45 52 3B 0D  0A 09 09 09 20 20 20 20  20 20 20 20 20 20 20 20  rt   : INTEGER;            
0001BD00  20 20 20 20 20 20 20 20  20 20 20 41 64 64 72 65  73 73 20 3A 20 4C 4F 4E  47 49 4E 54 29 20 3A 20             Address : LONGINT) : 
0001BD20  42 59 54 45 3B 0D 0A 0D  0A 52 65 6D 61 72 6B 73  3A 09 54 68 69 73 20 72  6F 75 74 69 6E 65 20 69  BYTE;Remarks:This routine i
0001BD40  73 20 75 73 65 64 20 74  6F 20 61 6C 6C 6F 77 20  61 6E 20 61 70 70 6C 69  63 61 74 69 6F 6E 20 74  s used to allow an application t
0001BD60  6F 20 6C 6F 6F 6B 20 61  74 20 61 6E 79 20 6C 6F  63 61 74 69 6F 6E 20 69  6E 20 55 6C 74 72 61 53  o look at any location in UltraS
0001BD80  6F 75 6E 64 27 73 20 44  52 41 4D 2E 20 20 54 68  69 73 20 63 61 6E 20 62  65 20 68 61 6E 64 79 20  ound's DRAM.  This can be handy 
0001BDA0  66 6F 72 20 6F 62 74 61  69 6E 69 6E 67 20 56 55  20 69 6E 66 6F 72 6D 61  74 69 6F 6E 20 6F 72 20  for obtaining VU information or 
0001BDC0  61 6E 79 20 6F 74 68 65  72 20 74 69 6D 65 20 69  74 20 69 73 20 6E 69 63  65 20 74 6F 20 6B 6E 6F  any other time it is nice to kno
0001BDE0  77 20 77 68 61 74 20 69  73 20 69 6E 20 44 52 41  4D 2E 20 20 42 65 20 61  77 61 72 65 20 74 68 61  w what is in DRAM.  Be aware tha
0001BE00  74 20 69 66 20 74 68 65  20 64 61 74 61 20 69 73  20 70 6C 61 79 61 62 6C  65 20 69 74 20 77 69 6C  t if the data is playable it wil
0001BE20  6C 20 62 65 20 69 6E 20  74 77 6F 73 20 63 6F 6D  70 6C 69 6D 65 6E 74 20  66 6F 72 6D 2E 20 20 49  l be in twos compliment form.  I
0001BE40  66 20 74 68 65 20 64 61  74 61 20 74 68 61 74 20  79 6F 75 20 77 61 6E 74  20 69 73 20 31 36 20 62  f the data that you want is 16 b
0001BE60  69 74 20 64 61 74 61 2C  20 79 6F 75 20 77 69 6C  6C 20 6E 65 65 64 20 74  6F 20 70 65 65 6B 20 62  it data, you will need to peek b
0001BE80  6F 74 68 20 6C 6F 63 61  74 69 6F 6E 73 20 61 6E  64 20 64 6F 20 61 6E 79  20 61 70 70 72 6F 70 72  oth locations and do any appropr
0001BEA0  69 61 74 65 20 63 6F 6E  76 65 72 73 69 6F 6E 73  2E 20 20 54 68 65 20 64  61 74 61 20 77 69 6C 6C  iate conversions.  The data will
0001BEC0  20 62 65 20 69 6E 20 6C  6F 77 2F 68 69 67 68 20  66 6F 72 6D 61 74 2E 20  20 54 68 61 74 20 6D 65   be in low/high format.  That me
0001BEE0  61 6E 73 20 74 68 61 74  20 74 68 65 20 6C 6F 77  20 62 79 74 65 20 6F 66  20 74 68 65 20 64 61 74  ans that the low byte of the dat
0001BF00  61 20 77 69 6C 6C 20 62  65 20 69 6E 20 74 68 65  20 65 76 65 6E 20 62 79  74 65 20 61 6E 64 20 74  a will be in the even byte and t
0001BF20  68 65 20 68 69 67 68 20  62 79 74 65 20 77 69 6C  6C 20 62 65 20 69 6E 20  74 68 65 20 6F 64 64 20  he high byte will be in the odd 
0001BF40  62 79 74 65 2E 0D 0A 0D  0A 52 65 74 75 72 6E 73  3A 09 44 61 74 61 20 62  79 74 65 20 61 74 20 6C  byte.Returns:Data byte at l
0001BF60  6F 63 61 74 69 6F 6E 20  73 70 65 63 69 66 69 65  64 2E 0D 0A 0D 0A 53 65  65 20 61 6C 73 6F 3A 09  ocation specified.See also:
0001BF80  55 6C 74 72 61 50 6F 6B  65 44 61 74 61 2C 20 55  6C 74 72 61 55 70 6C 6F  61 64 0D 0A 0D 0A 0D 0A  UltraPokeData, UltraUpload
0001BFA0  0D 0A 55 6C 74 72 61 50  69 6E 67 0D 0A 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraPing___________________
0001BFC0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 0D 0A  0D 0A 50 75 72 70 6F 73  65 3A 09 54 6F 20 71 75  ______________Purpose:To qu
0001BFE0  69 63 6B 6C 79 20 63 68  65 63 6B 20 74 6F 20 73  65 65 20 69 66 20 61 6E  20 55 6C 74 72 61 53 6F  ickly check to see if an UltraSo
0001C000  75 6E 64 20 69 73 20 70  72 65 73 65 6E 74 20 61  74 20 61 20 73 70 65 63  69 66 69 65 64 20 70 6F  und is present at a specified po
0001C020  72 74 2E 0D 0A 0D 0A 43  3A 09 09 09 69 6E 74 20  55 6C 74 72 61 50 69 6E  67 28 62 61 73 65 70 6F  rt.C:int UltraPing(basepo
0001C040  72 74 29 3B 0D 0A 09 09  09 69 6E 74 20 62 61 73  65 70 6F 72 74 3B 0D 0A  0D 0A 50 41 53 43 41 4C  rt);int baseport;PASCAL
0001C060  3A 09 46 55 4E 43 54 49  4F 4E 20 55 6C 74 72 61  50 69 6E 67 28 50 50 6F  72 74 20 3A 20 57 4F 52  :FUNCTION UltraPing(PPort : WOR
0001C080  44 29 20 3A 20 42 4F 4F  4C 45 41 4E 3B 0D 0A 0D  0A 52 65 6D 61 72 6B 73  3A 09 54 68 69 73 20 72  D) : BOOLEAN;Remarks:This r
0001C0A0  6F 75 74 69 6E 65 20 77  69 6C 6C 20 64 65 74 65  72 6D 69 6E 65 20 69 66  20 61 6E 20 55 6C 74 72  outine will determine if an Ultr
0001C0C0  61 53 6F 75 6E 64 20 69  73 20 70 72 65 73 65 6E  74 20 62 79 20 61 74 74  65 6D 70 74 69 6E 67 20  aSound is present by attempting 
0001C0E0  74 6F 20 72 65 61 64 20  61 6E 64 20 77 72 69 74  65 20 74 6F 20 69 74 73  20 44 52 41 4D 2E 20 20  to read and write to its DRAM.  
0001C100  54 68 69 73 20 72 6F 75  74 69 6E 65 20 61 73 73  75 6D 65 73 20 74 68 61  74 20 61 74 20 6C 65 61  This routine assumes that at lea
0001C120  73 74 20 61 20 73 69 6D  70 6C 65 20 72 65 73 65  74 20 68 61 73 20 62 65  65 6E 20 64 6F 6E 65 20  st a simple reset has been done 
0001C140  73 69 6E 63 65 20 70 6F  77 65 72 2D 75 70 20 73  6F 20 74 68 61 74 20 74  68 65 20 62 6F 61 72 64  since power-up so that the board
0001C160  20 69 73 20 6E 6F 20 6C  6F 6E 67 65 72 20 69 6E  20 61 20 72 65 73 65 74  20 73 74 61 74 65 2E 20   is no longer in a reset state. 
0001C180  20 49 66 20 69 74 20 69  73 20 6F 6E 20 61 20 72  65 73 65 74 20 73 74 61  74 65 2C 20 74 68 69 73   If it is on a reset state, this
0001C1A0  20 72 6F 75 74 69 6E 65  20 77 69 6C 6C 20 41 4C  57 41 59 53 20 66 61 69  6C 2E 20 20 55 6C 74 72   routine will ALWAYS fail.  Ultr
0001C1C0  61 50 72 6F 62 65 20 70  75 6C 6C 73 20 61 20 71  75 69 63 6B 20 72 65 73  65 74 20 61 6E 64 20 74  aProbe pulls a quick reset and t
0001C1E0  68 65 6E 20 63 61 6C 6C  73 20 55 6C 74 72 61 50  69 6E 67 2E 0D 0A 0D 0A  52 65 74 75 72 6E 73 3A  hen calls UltraPing.Returns:
0001C200  09 43 3A 20 20 20 20 20  20 55 4C 54 52 41 5F 4F  4B 20 69 66 20 6E 6F 20  70 72 6F 62 6C 65 6D 2E  C:      ULTRA_OK if no problem.
0001C220  0D 0A 09 09 09 20 20 20  20 20 20 20 20 4E 4F 5F  55 4C 54 52 41 20 69 66  20 6E 6F 20 62 6F 61 72          NO_ULTRA if no boar
0001C240  64 20 69 73 20 66 6F 75  6E 64 20 61 74 20 73 70  65 63 69 66 69 65 64 20  49 2F 4F 20 70 6F 72 74  d is found at specified I/O port
0001C260  2E 0D 0A 0D 0A 09 09 09  50 41 53 43 41 4C 3A 20  54 52 55 45 20 69 66 20  74 68 65 20 63 61 72 64  .PASCAL: TRUE if the card
0001C280  20 77 61 73 20 66 6F 75  6E 64 2E 20 20 20 46 41  4C 53 45 20 6F 74 68 65  72 77 69 73 65 2E 0D 0A   was found.   FALSE otherwise.
0001C2A0  09 09 09 20 20 20 20 20  20 20 20 49 66 20 75 6E  73 75 63 63 65 73 73 66  75 6C 2C 20 63 68 65 63          If unsuccessful, chec
0001C2C0  6B 20 55 6C 74 72 61 45  72 72 6F 72 53 74 72 20  66 6F 72 20 74 68 65 20  72 65 61 73 6F 6E 2E 0D  k UltraErrorStr for the reason.
0001C2E0  0A 0D 0A 53 65 65 20 61  6C 73 6F 3A 09 55 6C 74  72 61 50 72 6F 62 65 0D  0A 0C 55 6C 74 72 61 50  See also:UltraProbeUltraP
0001C300  6F 6B 65 44 61 74 61 0D  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  okeData_______________________
0001C320  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  6F 20 70 6F 6B 65 20 61  __________Purpose:To poke a
0001C340  20 62 79 74 65 20 69 6E  74 6F 20 74 68 65 20 55  6C 74 72 61 53 6F 75 6E  64 27 73 20 44 52 41 4D   byte into the UltraSound's DRAM
0001C360  2E 0D 0A 0D 0A 43 3A 09  09 09 76 6F 69 64 20 55  6C 74 72 61 50 6F 6B 65  44 61 74 61 28 62 61 73  .C:void UltraPokeData(bas
0001C380  65 70 6F 72 74 2C 6C 6F  63 61 74 69 6F 6E 2C 64  61 74 61 29 3B 0D 0A 09  09 09 75 6E 73 69 67 6E  eport,location,data);unsign
0001C3A0  65 64 20 69 6E 74 20 62  61 73 65 70 6F 72 74 3B  0D 0A 09 09 09 75 6E 73  69 67 6E 65 64 20 6C 6F  ed int baseport;unsigned lo
0001C3C0  6E 67 20 6C 6F 63 61 74  69 6F 6E 3B 0D 0A 09 09  09 75 6E 73 69 67 6E 65  64 20 63 68 61 72 20 64  ng location;unsigned char d
0001C3E0  61 74 61 3B 0D 0A 0D 0A  50 41 53 43 41 4C 3A 09  50 52 4F 43 45 44 55 52  45 20 55 6C 74 72 61 50  ata;PASCAL:PROCEDURE UltraP
0001C400  6F 6B 65 44 61 74 61 28  50 50 6F 72 74 20 20 20  3A 20 49 4E 54 45 47 45  52 3B 0D 0A 09 09 09 20  okeData(PPort   : INTEGER; 
0001C420  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 41  64 64 72 65 73 73 20 3A                         Address :
0001C440  20 4C 4F 4E 47 49 4E 54  3B 0D 0A 09 09 09 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20   LONGINT;                  
0001C460  20 20 20 20 20 20 44 61  74 61 20 20 20 20 3A 20  42 59 54 45 29 3B 0D 0A  0D 0A 52 65 6D 61 72 6B        Data    : BYTE);Remark
0001C480  73 3A 09 50 6F 6B 65 20  61 6E 20 38 20 62 69 74  20 76 61 6C 75 65 20 64  69 72 65 63 74 6C 79 20  s:Poke an 8 bit value directly 
0001C4A0  69 6E 74 6F 20 55 6C 74  72 61 53 6F 75 6E 64 20  44 52 41 4D 2E 20 20 54  68 69 73 20 63 61 6E 20  into UltraSound DRAM.  This can 
0001C4C0  62 65 20 75 73 65 66 75  6C 20 74 6F 20 73 65 74  20 74 68 65 20 76 61 6C  75 65 20 6F 66 20 74 68  be useful to set the value of th
0001C4E0  65 20 6C 6F 63 61 74 69  6F 6E 20 74 68 61 74 20  61 20 76 6F 69 63 65 20  69 73 20 70 6F 69 6E 74  e location that a voice is point
0001C500  69 6E 67 20 74 6F 2E 20  20 49 74 20 69 73 20 6F  66 74 65 6E 20 64 65 73  69 72 61 62 6C 65 20 74  ing to.  It is often desirable t
0001C520  6F 20 70 6F 69 6E 74 20  61 20 76 6F 69 63 65 20  74 6F 20 61 20 6B 6E 6F  77 6E 20 76 61 6C 75 65  o point a voice to a known value
0001C540  20 73 69 6E 63 65 20 69  74 73 20 6F 75 74 70 75  74 20 69 73 20 41 4C 57  41 59 53 20 73 75 6D 6D   since its output is ALWAYS summ
0001C560  65 64 20 69 6E 20 74 6F  20 74 68 65 20 6F 75 74  70 75 74 20 65 76 65 6E  20 69 66 20 74 68 65 20  ed in to the output even if the 
0001C580  76 6F 69 63 65 20 69 73  20 6E 6F 74 20 72 75 6E  6E 69 6E 67 2E 20 20 42  65 20 61 77 61 72 65 20  voice is not running.  Be aware 
0001C5A0  74 68 61 74 20 74 68 65  72 65 20 69 73 20 6E 6F  20 61 75 74 6F 6D 61 74  69 63 20 63 6F 6E 76 65  that there is no automatic conve
0001C5C0  72 73 69 6F 6E 20 6F 66  20 64 61 74 61 20 70 6F  6B 65 64 20 69 6E 74 6F  20 44 52 41 4D 2E 20 20  rsion of data poked into DRAM.  
0001C5E0  53 69 6E 63 65 20 74 68  65 20 55 6C 74 72 61 53  6F 75 6E 64 20 63 61 6E  20 6F 6E 6C 79 20 70 6C  Since the UltraSound can only pl
0001C600  61 79 20 74 77 6F 73 20  63 6F 6D 70 6C 69 6D 65  6E 74 20 64 61 74 61 2C  20 6D 61 6B 65 20 73 75  ay twos compliment data, make su
0001C620  72 65 20 74 68 61 74 20  74 68 65 20 64 61 74 61  20 79 6F 75 20 61 72 65  20 70 6F 6B 69 6E 67 20  re that the data you are poking 
0001C640  69 73 20 69 6E 20 74 68  61 74 20 66 6F 72 6D 61  74 2E 20 20 41 6C 73 6F  20 62 65 20 63 61 72 65  is in that format.  Also be care
0001C660  66 75 6C 20 77 69 74 68  20 31 36 20 62 69 74 20  64 61 74 61 2E 0D 0A 0D  0A 53 65 65 20 61 6C 73  ful with 16 bit data.See als
0001C680  6F 3A 09 55 6C 74 72 61  50 65 65 6B 44 61 74 61  2C 20 55 6C 74 72 61 44  6F 77 6E 6C 6F 61 64 0D  o:UltraPeekData, UltraDownload
0001C6A0  0A 0D 0A 0D 0A 0C 55 6C  74 72 61 50 72 69 6D 65  52 65 63 6F 72 64 0D 0A  5F 5F 5F 5F 5F 5F 5F 5F  UltraPrimeRecord________
0001C6C0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 0D 0A 0D 0A 50 75 72  _________________________Pur
0001C6E0  70 6F 73 65 3A 09 54 6F  20 70 72 69 6D 65 20 74  68 65 20 72 65 63 6F 72  64 20 44 4D 41 20 63 68  pose:To prime the record DMA ch
0001C700  61 6E 6E 65 6C 20 66 6F  72 20 75 73 65 2E 0D 0A  0D 0A 43 3A 09 09 09 69  6E 74 20 55 6C 74 72 61  annel for use.C:int Ultra
0001C720  50 72 69 6D 65 52 65 63  6F 72 64 28 70 63 5F 70  74 72 2C 73 69 7A 65 2C  72 65 70 65 61 74 29 3B  PrimeRecord(pc_ptr,size,repeat);
0001C740  0D 0A 09 09 09 76 6F 69  64 20 66 61 72 20 2A 70  63 5F 70 74 72 3B 0D 0A  09 09 09 75 6E 73 69 67  void far *pc_ptr;unsig
0001C760  6E 65 64 20 69 6E 74 20  73 69 7A 65 3B 0D 0A 09  09 09 69 6E 74 20 72 65  70 65 61 74 3B 0D 0A 0D  ned int size;int repeat;
0001C780  0A 50 41 53 43 41 4C 3A  09 46 55 4E 43 54 49 4F  4E 20 55 6C 74 72 61 50  72 69 6D 65 52 65 63 6F  PASCAL:FUNCTION UltraPrimeReco
0001C7A0  72 64 28 50 43 5F 50 74  72 20 20 3A 20 50 4F 49  4E 54 45 52 3B 0D 0A 09  09 09 20 20 20 20 20 20  rd(PC_Ptr  : POINTER;      
0001C7C0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 53 69 7A 65  20 20 20 20 3A 20 57 4F                      Size    : WO
0001C7E0  52 44 3B 0D 0A 09 09 09  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  RD;                        
0001C800  20 20 52 52 65 70 65 61  74 20 3A 20 42 4F 4F 4C  45 41 4E 29 20 3A 20 42  4F 4F 4C 45 41 4E 3B 0D    RRepeat : BOOLEAN) : BOOLEAN;
0001C820  0A 0D 0A 52 65 6D 61 72  6B 73 3A 09 54 68 69 73  20 72 6F 75 74 69 6E 65  20 77 69 6C 6C 20 73 65  Remarks:This routine will se
0001C840  74 75 70 20 74 68 65 20  44 4D 41 20 63 68 61 6E  6E 65 6C 20 74 6F 20 64  6F 20 61 20 72 65 63 6F  tup the DMA channel to do a reco
0001C860  72 64 2C 20 62 75 74 20  64 6F 65 73 20 6E 6F 74  20 73 74 61 72 74 20 69  74 2E 20 20 54 68 69 73  rd, but does not start it.  This
0001C880  20 63 61 6E 20 62 65 20  75 73 65 64 20 74 6F 20  68 65 6C 70 20 73 79 6E  63 68 72 6F 6E 69 7A 65   can be used to help synchronize
0001C8A0  20 65 76 65 6E 74 73 2E  20 20 50 72 6F 67 72 61  6D 6D 69 6E 67 20 74 68  65 20 44 4D 41 20 63 68   events.  Programming the DMA ch
0001C8C0  61 6E 6E 65 6C 20 63 61  6E 20 74 61 6B 65 20 65  6E 6F 75 67 68 20 74 69  6D 65 20 73 6F 20 74 68  annel can take enough time so th
0001C8E0  61 74 20 61 20 66 65 77  20 73 61 6D 70 6C 65 73  20 6D 61 79 20 62 65 20  6C 6F 73 74 2E 20 20 28  at a few samples may be lost.  (
0001C900  44 65 70 65 6E 64 69 6E  67 20 6F 6E 20 73 61 6D  70 6C 65 20 72 61 74 65  29 2E 20 20 54 68 69 73  Depending on sample rate).  This
0001C920  20 72 6F 75 74 69 6E 65  20 77 69 6C 6C 20 68 65  6C 70 20 61 6C 6C 65 76  69 61 74 65 20 74 68 69   routine will help alleviate thi
0001C940  73 20 70 72 6F 62 6C 65  6D 20 62 79 20 64 6F 69  6E 67 20 74 68 65 20 70  72 6F 67 72 61 6D 6D 69  s problem by doing the programmi
0001C960  6E 67 20 61 68 65 61 64  20 6F 66 20 74 69 6D 65  2E 0D 0A 0D 0A 52 65 74  75 72 6E 73 3A 09 43 3A  ng ahead of time.Returns:C:
0001C980  20 20 20 20 20 20 55 4C  54 52 41 5F 4F 4B 20 69  66 20 6E 6F 20 70 72 6F  62 6C 65 6D 2E 0D 0A 09        ULTRA_OK if no problem.
0001C9A0  09 09 20 20 20 20 20 20  20 20 44 4D 41 5F 42 55  53 59 20 69 66 20 44 4D  41 20 43 68 61 6E 6E 65          DMA_BUSY if DMA Channe
0001C9C0  6C 20 69 73 20 62 75 73  79 2E 0D 0A 0D 0A 09 09  09 50 41 53 43 41 4C 3A  20 54 52 55 45 20 69 66  l is busy.PASCAL: TRUE if
0001C9E0  20 73 65 74 75 70 20 77  61 73 20 73 75 63 63 65  73 73 66 75 6C 2E 20 20  20 46 41 4C 53 45 20 6F   setup was successful.   FALSE o
0001CA00  74 68 65 72 77 69 73 65  2E 0D 0A 09 09 09 20 20  20 20 20 20 20 20 49 66  20 75 6E 73 75 63 63 65  therwise.        If unsucce
0001CA20  73 73 66 75 6C 2C 20 63  68 65 63 6B 20 55 6C 74  72 61 45 72 72 6F 72 53  74 72 20 66 6F 72 20 74  ssful, check UltraErrorStr for t
0001CA40  68 65 20 72 65 61 73 6F  6E 2E 0D 0A 0D 0A 53 65  65 20 61 6C 73 6F 3A 09  55 6C 74 72 61 47 6F 52  he reason.See also:UltraGoR
0001CA60  65 63 6F 72 64 0D 0A 0D  0A 0D 0A 0C 55 6C 74 72  61 50 72 69 6D 65 56 6F  69 63 65 0D 0A 5F 5F 5F  ecordUltraPrimeVoice___
0001CA80  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 0D 0A  ______________________________
0001CAA0  0D 0A 50 75 72 70 6F 73  65 3A 09 54 6F 20 70 72  69 6D 65 20 61 20 76 6F  69 63 65 20 77 69 74 68  Purpose:To prime a voice with
0001CAC0  20 76 61 6C 75 65 73 20  62 75 74 20 4E 4F 54 20  73 74 61 72 74 20 69 74  2E 0D 0A 0D 0A 43 3A 09   values but NOT start it.C:
0001CAE0  09 09 75 6E 73 69 67 6E  65 64 20 63 68 61 72 20  55 6C 74 72 61 50 72 69  6D 65 56 6F 69 63 65 28  unsigned char UltraPrimeVoice(
0001CB00  76 6F 69 63 65 2C 62 65  67 69 6E 2C 73 74 61 72  74 2C 65 6E 64 2C 6D 6F  64 65 29 3B 0D 0A 09 09  voice,begin,start,end,mode);
0001CB20  09 69 6E 74 20 76 6F 69  63 65 3B 09 0D 0A 09 09  09 75 6E 73 69 67 6E 65  64 20 6C 6F 6E 67 20 62  int voice;unsigned long b
0001CB40  65 67 69 6E 3B 0D 0A 09  09 09 75 6E 73 69 67 6E  65 64 20 6C 6F 6E 67 20  73 74 61 72 74 3B 0D 0A  egin;unsigned long start;
0001CB60  09 09 09 75 6E 73 69 67  6E 65 64 20 6C 6F 6E 67  20 65 6E 64 3B 20 20 0D  0A 09 09 09 75 6E 73 69  unsigned long end;  unsi
0001CB80  67 6E 65 64 20 63 68 61  72 20 6D 6F 64 65 3B 20  0D 0A 0D 0A 50 41 53 43  41 4C 3A 09 46 55 4E 43  gned char mode; PASCAL:FUNC
0001CBA0  54 49 4F 4E 20 55 6C 74  72 61 50 72 69 6D 65 56  6F 69 63 65 28 56 6F 69  63 65 20 20 20 20 3A 20  TION UltraPrimeVoice(Voice    : 
0001CBC0  49 4E 54 45 47 45 52 3B  0D 0A 09 09 09 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  INTEGER;                   
0001CBE0  20 20 20 20 20 20 56 42  65 67 69 6E 20 20 20 3A  20 4C 4F 4E 47 49 4E 54  3B 0D 0A 09 09 09 20 20        VBegin   : LONGINT;  
0001CC00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 56  53 74 61 72 74 20 20 20                         VStart   
0001CC20  3A 20 4C 4F 4E 47 49 4E  54 3B 0D 0A 09 09 09 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  : LONGINT;                 
0001CC40  20 20 20 20 20 20 20 20  56 45 6E 64 20 20 20 20  20 3A 20 4C 4F 4E 47 49  4E 54 3B 0D 0A 09 09 09          VEnd     : LONGINT;
0001CC60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 56 4D 6F 64 65 20 20                           VMode  
0001CC80  20 20 3A 20 42 59 54 45  29 20 3A 20 42 59 54 45  3B 0D 0A 0D 0A 52 65 6D  61 72 6B 73 3A 09 54 68    : BYTE) : BYTE;Remarks:Th
0001CCA0  69 73 20 72 6F 75 74 69  6E 65 20 69 73 20 75 73  65 64 20 74 6F 20 64 6F  20 61 6C 6C 20 74 68 65  is routine is used to do all the
0001CCC0  20 73 65 74 75 70 20 6E  65 63 65 73 73 61 72 79  20 74 6F 20 73 74 61 72  74 20 61 20 76 6F 69 63   setup necessary to start a voic
0001CCE0  65 20 62 75 74 20 64 6F  65 73 20 4E 4F 54 20 73  74 61 72 74 20 69 74 20  75 70 2E 20 20 54 68 69  e but does NOT start it up.  Thi
0001CD00  73 20 63 61 6E 20 62 65  20 75 73 65 66 75 6C 20  69 66 20 79 6F 75 20 77  61 6E 74 20 74 6F 20 73  s can be useful if you want to s
0001CD20  74 61 72 74 20 6D 6F 72  65 20 74 68 61 6E 20 31  20 76 6F 69 63 65 20 61  74 20 74 68 65 20 73 61  tart more than 1 voice at the sa
0001CD40  6D 65 20 74 69 6D 65 2E  20 20 55 73 65 20 55 6C  74 72 61 50 72 69 6D 65  56 6F 69 63 65 20 74 6F  me time.  Use UltraPrimeVoice to
0001CD60  20 64 6F 20 61 6C 6C 20  74 68 65 20 6E 65 63 65  73 73 61 72 79 20 73 65  74 75 70 20 61 6E 64 20   do all the necessary setup and 
0001CD80  74 68 65 6E 20 75 73 65  20 55 6C 74 72 61 47 6F  56 6F 69 63 65 20 74 6F  20 73 74 61 72 74 20 74  then use UltraGoVoice to start t
0001CDA0  68 65 20 76 6F 69 63 65  73 2E 20 20 55 6C 74 72  61 53 74 61 72 74 56 6F  69 63 65 20 63 61 6C 6C  he voices.  UltraStartVoice call
0001CDC0  73 20 55 6C 74 72 61 50  72 69 6D 65 56 6F 69 63  65 20 61 6E 64 20 74 68  65 6E 20 69 6D 6D 65 64  s UltraPrimeVoice and then immed
0001CDE0  69 61 74 65 6C 79 20 55  6C 74 72 61 47 6F 56 6F  69 63 65 2E 0D 0A 0D 0A  52 65 74 75 72 6E 73 3A  iately UltraGoVoice.Returns:
0001CE00  09 41 6E 20 75 70 64 61  74 65 64 20 6D 6F 64 65  20 76 61 6C 75 65 2E 20  20 54 68 65 20 6D 6F 64  An updated mode value.  The mod
0001CE20  65 20 6D 61 79 20 62 65  20 6D 6F 64 69 66 69 65  64 20 6F 6E 20 74 68 65  20 62 61 73 69 73 20 6F  e may be modified on the basis o
0001CE40  66 20 74 68 65 20 6C 6F  63 61 74 69 6F 6E 20 70  61 72 61 6D 65 74 65 72  73 2E 20 20 54 68 69 73  f the location parameters.  This
0001CE60  20 61 6C 74 65 72 65 64  20 76 61 6C 75 65 20 73  68 6F 75 6C 64 20 62 65  20 74 68 65 20 6F 6E 65   altered value should be the one
0001CE80  20 70 61 73 73 65 64 20  74 6F 20 55 6C 74 72 61  47 6F 56 6F 69 63 65 2E  0D 0A 0D 0A 53 65 65 20   passed to UltraGoVoice.See 
0001CEA0  61 6C 73 6F 3A 09 55 6C  74 72 61 53 74 61 72 74  56 6F 69 63 65 2C 20 55  6C 74 72 61 47 6F 56 6F  also:UltraStartVoice, UltraGoVo
0001CEC0  69 63 65 0D 0A 0D 0A 0D  0A 0C 55 6C 74 72 61 50  72 6F 62 65 0D 0A 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  iceUltraProbe__________
0001CEE0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  0A 0D 0A 50 75 72 70 6F  _______________________Purpo
0001CF00  73 65 3A 09 54 6F 20 70  72 6F 62 65 20 66 6F 72  20 74 68 65 20 65 78 69  73 74 65 6E 63 65 20 6F  se:To probe for the existence o
0001CF20  66 20 61 6E 20 55 6C 74  72 61 53 6F 75 6E 64 20  61 74 20 61 20 73 70 65  63 69 66 69 65 64 20 70  f an UltraSound at a specified p
0001CF40  6F 72 74 2E 0D 0A 0D 0A  43 3A 09 09 09 69 6E 74  20 55 6C 74 72 61 50 72  6F 62 65 28 62 61 73 65  ort.C:int UltraProbe(base
0001CF60  5F 70 6F 72 74 29 3B 0D  0A 09 09 09 75 6E 73 69  67 6E 65 64 20 69 6E 74  20 62 61 73 65 5F 70 6F  _port);unsigned int base_po
0001CF80  72 74 3B 0D 0A 0D 0A 50  41 53 43 41 4C 3A 09 46  55 4E 43 54 49 4F 4E 20  55 6C 74 72 61 50 72 6F  rt;PASCAL:FUNCTION UltraPro
0001CFA0  62 65 28 50 50 6F 72 74  20 3A 20 57 4F 52 44 29  20 3A 20 42 4F 4F 4C 45  41 4E 3B 0D 0A 0D 0A 52  be(PPort : WORD) : BOOLEAN;R
0001CFC0  65 6D 61 72 6B 73 3A 09  54 68 69 73 20 72 6F 75  74 69 6E 65 20 70 72 6F  62 65 73 20 66 6F 72 20  emarks:This routine probes for 
0001CFE0  74 68 65 20 65 78 69 73  74 65 6E 63 65 20 6F 66  20 61 6E 20 55 6C 74 72  61 53 6F 75 6E 64 20 63  the existence of an UltraSound c
0001D000  61 72 64 20 61 74 20 74  68 65 20 73 70 65 63 69  66 69 65 64 20 62 61 73  65 20 70 6F 72 74 2E 20  ard at the specified base port. 
0001D020  20 41 6E 20 61 70 70 6C  69 63 61 74 69 6F 6E 20  63 6F 75 6C 64 20 63 61  6C 6C 20 74 68 69 73 20   An application could call this 
0001D040  62 65 66 6F 72 65 20 63  61 6C 6C 69 6E 67 20 55  6C 74 72 61 4F 70 65 6E  20 74 6F 20 73 65 65 20  before calling UltraOpen to see 
0001D060  69 66 20 61 20 63 61 72  64 20 69 73 20 70 72 65  73 65 6E 74 2E 20 20 55  6C 74 72 61 4F 70 65 6E  if a card is present.  UltraOpen
0001D080  20 63 61 6C 6C 73 20 74  68 69 73 20 72 6F 75 74  69 6E 65 20 61 6C 73 6F  2E 20 20 54 68 65 20 64   calls this routine also.  The d
0001D0A0  69 66 66 65 72 65 6E 63  65 20 62 65 74 77 65 65  6E 20 55 6C 74 72 61 50  72 6F 62 65 20 61 6E 64  ifference between UltraProbe and
0001D0C0  20 55 6C 74 72 61 50 69  6E 67 20 69 73 20 74 68  61 74 20 55 6C 74 72 61  50 72 6F 62 65 20 77 69   UltraPing is that UltraProbe wi
0001D0E0  6C 6C 20 70 75 6C 6C 20  61 20 72 65 73 65 74 20  74 6F 20 6D 61 6B 65 20  73 75 72 65 20 74 68 65  ll pull a reset to make sure the
0001D100  20 62 6F 61 72 64 20 69  73 20 72 75 6E 6E 69 6E  67 2E 20 20 55 6C 74 72  61 50 69 6E 67 20 61 73   board is running.  UltraPing as
0001D120  73 75 6D 65 73 20 74 68  69 73 20 68 61 73 20 61  6C 72 65 61 64 79 20 62  65 65 6E 20 64 6F 6E 65  sumes this has already been done
0001D140  2E 0D 0A 0D 0A 52 65 74  75 72 6E 73 3A 09 43 3A  20 20 20 20 20 20 55 4C  54 52 41 5F 4F 4B 20 69  .Returns:C:      ULTRA_OK i
0001D160  66 20 6E 6F 20 70 72 6F  62 6C 65 6D 2E 0D 0A 09  09 09 20 20 20 20 20 20  20 20 4E 4F 5F 55 4C 54  f no problem.        NO_ULT
0001D180  52 41 20 69 66 20 6E 6F  20 63 61 72 64 20 77 61  73 20 66 6F 75 6E 64 20  61 74 20 74 68 65 20 70  RA if no card was found at the p
0001D1A0  6F 72 74 20 73 70 65 63  69 66 69 65 64 2E 0D 0A  0D 0A 09 09 09 50 41 53  43 41 4C 3A 20 54 52 55  ort specified.PASCAL: TRU
0001D1C0  45 20 69 66 20 74 68 65  20 63 61 72 64 20 69 73  20 66 6F 75 6E 64 2E 20  20 20 46 41 4C 53 45 20  E if the card is found.   FALSE 
0001D1E0  6F 74 68 65 72 77 69 73  65 2E 0D 0A 09 09 09 20  20 20 20 20 20 20 20 49  66 20 75 6E 73 75 63 63  otherwise.        If unsucc
0001D200  65 73 73 66 75 6C 2C 20  63 68 65 63 6B 20 55 6C  74 72 61 45 72 72 6F 72  53 74 72 20 66 6F 72 20  essful, check UltraErrorStr for 
0001D220  74 68 65 20 72 65 61 73  6F 6E 2E 0D 0A 0D 0A 53  65 65 20 61 6C 73 6F 3A  09 55 6C 74 72 61 4F 70  the reason.See also:UltraOp
0001D240  65 6E 2C 20 55 6C 74 72  61 50 69 6E 67 0D 0A 0D  0A 0D 0A 0C 55 6C 74 72  61 52 61 6D 70 56 6F 6C  en, UltraPingUltraRampVol
0001D260  75 6D 65 0D 0A 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ume___________________________
0001D280  5F 5F 5F 5F 5F 5F 0D 0A  0D 0A 50 75 72 70 6F 73  65 3A 09 54 6F 20 72 61  6D 70 20 61 20 76 6F 69  ______Purpose:To ramp a voi
0001D2A0  63 65 27 73 20 76 6F 6C  75 6D 65 20 75 70 20 6F  72 20 64 6F 77 6E 2E 0D  0A 0D 0A 43 3A 09 09 09  ce's volume up or down.C:
0001D2C0  76 6F 69 64 20 55 6C 74  72 61 52 61 6D 70 56 6F  6C 75 6D 65 28 76 6F 69  63 65 2C 73 74 61 72 74  void UltraRampVolume(voice,start
0001D2E0  2C 65 6E 64 2C 72 61 74  65 2C 6D 6F 64 65 29 3B  0D 0A 09 09 09 69 6E 74  20 76 6F 69 63 65 3B 0D  ,end,rate,mode);int voice;
0001D300  0A 09 09 09 75 6E 73 69  67 6E 65 64 20 69 6E 74  20 73 74 61 72 74 3B 0D  0A 09 09 09 75 6E 73 69  unsigned int start;unsi
0001D320  67 6E 65 64 20 69 6E 74  20 65 6E 64 3B 20 20 0D  0A 09 09 09 75 6E 73 69  67 6E 65 64 20 63 68 61  gned int end;  unsigned cha
0001D340  72 20 72 61 74 65 3B 0D  0A 09 09 09 75 6E 73 69  67 6E 65 64 20 63 68 61  72 20 6D 6F 64 65 3B 0D  r rate;unsigned char mode;
0001D360  0A 0D 0A 50 41 53 43 41  4C 3A 09 50 52 4F 43 45  44 55 52 45 20 55 6C 74  72 61 52 61 6D 70 56 6F  PASCAL:PROCEDURE UltraRampVo
0001D380  6C 75 6D 65 28 56 6F 69  63 65 20 20 3A 20 49 4E  54 45 47 45 52 3B 0D 0A  09 09 09 20 20 20 20 20  lume(Voice  : INTEGER;     
0001D3A0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 53 74 61  72 74 56 20 3A 20 57 4F                       StartV : WO
0001D3C0  52 44 3B 0D 0A 09 09 09  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  RD;                        
0001D3E0  20 20 45 6E 64 56 20 20  20 3A 20 57 4F 52 44 3B  0D 0A 09 09 09 20 20 20  20 20 20 20 20 20 20 20    EndV   : WORD;           
0001D400  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 56  52 61 74 65 20 20 3A 20  42 59 54 45 3B 0D 0A 09                 VRate  : BYTE;
0001D420  09 09 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 56 4D 6F 64                            VMod
0001D440  65 20 20 3A 20 42 59 54  45 29 3B 0D 0A 0D 0A 52  65 6D 61 72 6B 73 3A 09  53 74 61 72 74 20 61 20  e  : BYTE);Remarks:Start a 
0001D460  76 6F 6C 75 6D 65 20 72  61 6D 70 20 66 72 6F 6D  20 61 20 73 74 61 72 74  69 6E 67 20 76 6F 6C 75  volume ramp from a starting volu
0001D480  6D 65 20 74 6F 20 74 68  65 20 65 6E 64 69 6E 67  20 76 6F 6C 75 6D 65 2E  20 20 54 68 65 20 72 61  me to the ending volume.  The ra
0001D4A0  74 65 20 61 74 20 77 68  69 63 68 20 74 68 65 20  72 61 6D 70 20 6F 63 63  75 72 73 20 63 61 6E 20  te at which the ramp occurs can 
0001D4C0  62 65 20 63 61 6C 63 75  6C 61 74 65 64 20 75 73  69 6E 67 20 55 6C 74 72  61 43 61 6C 63 52 61 74  be calculated using UltraCalcRat
0001D4E0  65 2E 20 20 54 68 65 20  6D 6F 64 65 20 64 65 74  65 72 6D 69 6E 65 73 20  74 68 65 20 6C 6F 6F 70  e.  The mode determines the loop
0001D500  69 6E 67 20 61 6E 64 20  69 6E 74 65 72 72 75 70  74 69 6E 67 20 63 68 61  72 61 63 74 65 72 69 73  ing and interrupting characteris
0001D520  74 69 63 73 20 6F 66 20  74 68 65 20 72 61 6D 70  2E 20 20 49 66 20 79 6F  75 20 63 68 6F 6F 73 65  tics of the ramp.  If you choose
0001D540  20 74 6F 20 68 61 76 65  20 69 74 20 69 6E 74 65  72 72 75 70 74 20 61 74  20 74 68 65 20 65 6E 64   to have it interrupt at the end
0001D560  20 6F 66 20 74 68 65 20  72 61 6D 70 2C 20 79 6F  75 20 73 68 6F 75 6C 64  20 73 65 74 20 75 70 20   of the ramp, you should set up 
0001D580  61 6E 20 72 6F 75 74 69  6E 65 20 74 6F 20 63 61  6C 6C 20 66 6F 72 20 61  20 76 6F 6C 75 6D 65 20  an routine to call for a volume 
0001D5A0  69 6E 74 65 72 72 75 70  74 2E 20 20 54 68 69 73  20 69 73 20 64 6F 6E 65  20 77 69 74 68 20 74 68  interrupt.  This is done with th
0001D5C0  65 20 72 6F 75 74 69 6E  65 20 55 6C 74 72 61 56  6F 6C 75 6D 65 48 61 6E  64 6C 65 72 2E 20 20 54  e routine UltraVolumeHandler.  T
0001D5E0  68 65 20 76 6F 6C 75 6D  65 20 6D 6F 64 65 20 62  69 74 73 20 61 72 65 20  64 65 66 69 6E 65 64 20  he volume mode bits are defined 
0001D600  69 6E 20 41 70 70 65 6E  64 69 78 20 42 2E 0D 0A  0D 0A 53 65 65 20 61 6C  73 6F 3A 09 55 6C 74 72  in Appendix B.See also:Ultr
0001D620  61 43 61 6C 63 52 61 74  65 2C 20 55 6C 74 72 61  56 6F 6C 75 6D 65 48 61  6E 64 6C 65 72 0D 0A 0D  aCalcRate, UltraVolumeHandler
0001D640  0A 0D 0A 0D 0A 55 6C 74  72 61 52 65 61 64 52 65  63 6F 72 64 50 6F 73 69  74 69 6F 6E 0D 0A 5F 5F  UltraReadRecordPosition__
0001D660  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  _______________________________
0001D680  0A 0D 0A 50 75 72 70 6F  73 65 3A 09 54 6F 20 72  65 74 75 72 6E 20 74 68  65 20 23 20 6F 66 20 62  Purpose:To return the # of b
0001D6A0  79 74 65 73 20 72 65 63  6F 72 64 65 64 20 73 6F  20 66 61 72 20 69 6E 20  61 20 72 65 63 6F 72 64  ytes recorded so far in a record
0001D6C0  2E 0D 0A 0D 0A 43 3A 09  09 09 75 6E 73 69 67 6E  65 64 20 69 6E 74 20 55  6C 74 72 61 52 65 61 64  .C:unsigned int UltraRead
0001D6E0  52 65 63 6F 72 64 50 6F  73 69 74 69 6F 6E 28 76  6F 69 64 29 3B 0D 0A 0D  0A 50 41 53 43 41 4C 3A  RecordPosition(void);PASCAL:
0001D700  09 46 55 4E 43 54 49 4F  4E 20 55 6C 74 72 61 52  65 61 64 52 65 63 6F 72  64 50 6F 73 69 74 69 6F  FUNCTION UltraReadRecordPositio
0001D720  6E 20 3A 20 57 4F 52 44  3B 0D 0A 0D 0A 52 65 6D  61 72 6B 73 3A 09 54 68  69 73 20 72 6F 75 74 69  n : WORD;Remarks:This routi
0001D740  6E 65 20 63 61 6E 20 62  65 20 75 73 65 64 20 74  6F 20 6D 6F 6E 69 74 6F  72 20 74 68 65 20 61 6D  ne can be used to monitor the am
0001D760  6F 75 6E 74 20 64 61 74  61 20 72 65 63 6F 72 64  65 64 2E 0D 0A 0D 0A 52  65 74 75 72 6E 73 3A 09  ount data recorded.Returns:
0001D780  4E 75 6D 62 65 72 20 6F  66 20 42 59 54 45 53 20  72 65 63 6F 72 64 65 64  20 73 6F 20 66 61 72 2E  Number of BYTES recorded so far.
0001D7A0  0D 0A 0D 0A 53 65 65 20  61 6C 73 6F 3A 09 55 6C  74 72 61 52 65 63 6F 72  64 44 61 74 61 0D 0A 0D  See also:UltraRecordData
0001D7C0  0A 0D 0A 0C 55 6C 74 72  61 52 65 61 64 56 6F 69  63 65 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraReadVoice____________
0001D7E0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  _____________________Purpose
0001D800  3A 09 54 6F 20 72 65 61  64 20 61 20 76 6F 69 63  65 27 73 20 63 75 72 72  65 6E 74 20 6C 6F 63 61  :To read a voice's current loca
0001D820  74 69 6F 6E 2E 0D 0A 0D  0A 43 3A 09 09 09 75 6E  73 69 67 6E 65 64 20 6C  6F 6E 67 20 55 6C 74 72  tion.C:unsigned long Ultr
0001D840  61 52 65 61 64 56 6F 69  63 65 28 76 6F 69 63 65  29 3B 0D 0A 09 09 09 69  6E 74 20 76 6F 69 63 65  aReadVoice(voice);int voice
0001D860  3B 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 46 55 4E  43 54 49 4F 4E 20 55 6C  74 72 61 52 65 61 64 56  ;PASCAL:FUNCTION UltraReadV
0001D880  6F 69 63 65 28 56 6F 69  63 65 20 3A 20 49 4E 54  45 47 45 52 29 20 3A 20  4C 4F 4E 47 49 4E 54 3B  oice(Voice : INTEGER) : LONGINT;
0001D8A0  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 54 68 69  73 20 72 6F 75 74 69 6E  65 20 63 61 6E 20 62 65  Remarks:This routine can be
0001D8C0  20 75 73 65 64 20 74 6F  20 6D 6F 6E 69 74 6F 72  20 61 20 76 6F 69 63 65  27 73 20 70 72 6F 67 72   used to monitor a voice's progr
0001D8E0  65 73 73 2E 0D 0A 0D 0A  52 65 74 75 72 6E 73 3A  09 54 68 65 20 76 6F 69  63 65 27 73 20 63 75 72  ess.Returns:The voice's cur
0001D900  72 65 6E 74 20 70 6F 73  69 74 69 6F 6E 20 69 6E  20 44 52 41 4D 2E 0D 0A  0D 0A 53 65 65 20 61 6C  rent position in DRAM.See al
0001D920  73 6F 3A 09 55 6C 74 72  61 53 65 74 56 6F 69 63  65 0D 0A 0D 0A 0D 0A 0D  0A 55 6C 74 72 61 52 65  so:UltraSetVoiceUltraRe
0001D940  61 64 56 6F 6C 75 6D 65  0D 0A 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  adVolume______________________
0001D960  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 0D 0A 0D 0A 50  75 72 70 6F 73 65 3A 09  54 6F 20 72 65 61 64 20  ___________Purpose:To read 
0001D980  61 20 76 6F 69 63 65 27  73 20 63 75 72 72 65 6E  74 20 76 6F 6C 75 6D 65  2E 0D 0A 0D 0A 43 3A 09  a voice's current volume.C:
0001D9A0  09 09 75 6E 73 69 67 6E  65 64 20 69 6E 74 20 55  6C 74 72 61 52 65 61 64  56 6F 6C 75 6D 65 28 76  unsigned int UltraReadVolume(v
0001D9C0  6F 69 63 65 29 3B 0D 0A  09 09 09 69 6E 74 20 76  6F 69 63 65 3B 0D 0A 0D  0A 50 41 53 43 41 4C 3A  oice);int voice;PASCAL:
0001D9E0  09 46 55 4E 43 54 49 4F  4E 20 55 6C 74 72 61 52  65 61 64 56 6F 6C 75 6D  65 28 56 6F 69 63 65 20  FUNCTION UltraReadVolume(Voice 
0001DA00  3A 20 49 4E 54 45 47 45  52 29 20 3A 20 57 4F 52  44 3B 0D 0A 0D 0A 52 65  6D 61 72 6B 73 3A 09 54  : INTEGER) : WORD;Remarks:T
0001DA20  68 69 73 20 72 6F 75 74  69 6E 65 20 72 65 74 75  72 6E 73 20 74 68 65 20  63 75 72 72 65 6E 74 20  his routine returns the current 
0001DA40  76 6F 6C 75 6D 65 20 6F  66 20 61 20 76 6F 69 63  65 2E 20 20 54 68 69 73  20 63 61 6E 20 62 65 20  volume of a voice.  This can be 
0001DA60  75 73 65 66 75 6C 20 77  68 65 6E 20 75 73 65 64  20 69 6E 20 63 6F 6E 6A  75 6E 63 74 69 6F 6E 20  useful when used in conjunction 
0001DA80  77 69 74 68 20 76 6F 6C  75 6D 65 20 72 61 6D 70  73 2E 20 20 54 68 65 20  76 61 6C 75 65 20 72 65  with volume ramps.  The value re
0001DAA0  74 75 72 6E 65 64 20 69  73 20 6C 6F 67 61 72 69  74 68 6D 69 63 2C 20 6E  6F 74 20 6C 69 6E 65 61  turned is logarithmic, not linea
0001DAC0  72 2E 20 20 50 41 53 43  41 4C 20 75 73 65 72 73  20 63 61 6E 20 75 73 65  20 55 6C 74 72 61 52 65  r.  PASCAL users can use UltraRe
0001DAE0  61 64 4C 69 6E 65 61 72  56 6F 6C 75 6D 65 2E 0D  0A 0D 0A 52 65 74 75 72  6E 73 3A 09 30 2D 34 30  adLinearVolume.Returns:0-40
0001DB00  39 35 20 76 61 6C 75 65  2C 20 74 68 65 20 63 75  72 72 65 6E 74 20 6C 6F  67 61 72 69 74 68 6D 69  95 value, the current logarithmi
0001DB20  63 20 76 6F 6C 75 6D 65  2E 0D 0A 0D 0A 53 65 65  20 61 6C 73 6F 3A 09 55  6C 74 72 61 53 65 74 56  c volume.See also:UltraSetV
0001DB40  6F 6C 75 6D 65 2C 20 55  6C 74 72 61 52 61 6D 70  56 6F 6C 75 6D 65 0D 0A  0D 0A 0D 0A 0C 55 6C 74  olume, UltraRampVolumeUlt
0001DB60  72 61 52 65 63 6F 72 64  44 61 74 61 0D 0A 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  raRecordData__________________
0001DB80  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  0A 0D 0A 50 75 72 70 6F  73 65 3A 09 54 6F 20 72  _______________Purpose:To r
0001DBA0  65 63 6F 72 64 20 73 6F  6D 65 20 64 61 74 61 20  77 69 74 68 20 74 68 65  20 55 6C 74 72 61 53 6F  ecord some data with the UltraSo
0001DBC0  75 6E 64 20 66 72 6F 6D  20 74 68 65 20 61 63 74  69 76 65 20 27 49 6E 27  20 70 6F 72 74 73 2E 0D  und from the active 'In' ports.
0001DBE0  0A 0D 0A 43 3A 09 09 09  69 6E 74 20 55 6C 74 72  61 52 65 63 6F 72 64 44  61 74 61 28 70 63 5F 70  C:int UltraRecordData(pc_p
0001DC00  74 72 2C 63 6F 6E 74 72  6F 6C 2C 73 69 7A 65 2C  77 61 69 74 2C 72 65 70  65 61 74 29 3B 0D 0A 09  tr,control,size,wait,repeat);
0001DC20  09 09 76 6F 69 64 20 66  61 72 20 2A 70 63 5F 70  74 72 3B 0D 0A 09 09 09  75 6E 73 69 67 6E 65 64  void far *pc_ptr;unsigned
0001DC40  20 63 68 61 72 20 63 6F  6E 74 72 6F 6C 3B 0D 0A  09 09 09 75 6E 73 69 67  6E 65 64 20 69 6E 74 20   char control;unsigned int 
0001DC60  73 69 7A 65 3B 0D 0A 09  09 09 69 6E 74 20 77 61  69 74 3B 0D 0A 09 09 09  69 6E 74 20 72 65 70 65  size;int wait;int repe
0001DC80  61 74 3B 0D 0A 0D 0A 50  41 53 43 41 4C 3A 09 46  55 4E 43 54 49 4F 4E 20  55 6C 74 72 61 52 65 63  at;PASCAL:FUNCTION UltraRec
0001DCA0  6F 72 64 44 61 74 61 28  50 43 5F 50 74 72 20 20  3A 20 50 4F 49 4E 54 45  52 3B 0D 0A 09 09 09 20  ordData(PC_Ptr  : POINTER; 
0001DCC0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  43 6F 6E 74 72 6F 6C 20                          Control 
0001DCE0  3A 20 42 59 54 45 3B 0D  0A 09 09 09 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  : BYTE;                    
0001DD00  20 20 20 20 20 53 69 7A  65 20 20 20 20 3A 20 57  4F 52 44 3B 0D 0A 09 09  09 20 20 20 20 20 20 20       Size    : WORD;       
0001DD20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 57 61 69 74 20 20  20 20 3A 20 42 4F 4F 4C                    Wait    : BOOL
0001DD40  45 41 4E 3B 0D 0A 09 09  09 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  EAN;                       
0001DD60  20 20 52 52 65 70 65 61  74 20 3A 20 42 4F 4F 4C  45 41 4E 29 20 3A 20 42  4F 4F 4C 45 41 4E 3B 0D    RRepeat : BOOLEAN) : BOOLEAN;
0001DD80  0A 0D 0A 52 65 6D 61 72  6B 73 3A 09 54 68 69 73  20 72 6F 75 74 69 6E 65  20 77 69 6C 6C 20 72 65  Remarks:This routine will re
0001DDA0  63 6F 72 64 20 61 20 62  75 66 66 65 72 20 6F 66  20 64 61 74 61 20 66 72  6F 6D 20 55 6C 74 72 61  cord a buffer of data from Ultra
0001DDC0  53 6F 75 6E 64 2E 20 20  49 74 20 63 61 6E 20 62  65 20 69 6E 20 65 69 74  68 65 72 20 38 2D 62 69  Sound.  It can be in either 8-bi
0001DDE0  74 20 6D 6F 6E 6F 20 6F  72 20 73 74 65 72 65 6F  2E 20 20 49 6E 20 73 74  65 72 65 6F 2C 20 74 68  t mono or stereo.  In stereo, th
0001DE00  65 72 65 20 61 72 65 20  74 77 6F 20 62 79 74 65  73 20 61 6E 64 20 74 68  65 20 6C 65 66 74 20 62  ere are two bytes and the left b
0001DE20  79 74 65 20 69 73 20 66  69 72 73 74 2E 20 20 49  66 20 6D 6F 6E 6F 20 69  73 20 62 65 69 6E 67 20  yte is first.  If mono is being 
0001DE40  75 73 65 64 2C 20 74 68  65 20 6C 65 66 74 20 63  68 61 6E 6E 65 6C 20 69  73 20 74 68 65 20 6F 6E  used, the left channel is the on
0001DE60  65 20 74 68 61 74 20 69  73 20 73 61 6D 70 6C 65  64 2E 20 20 53 65 65 20  41 70 70 65 6E 64 69 78  e that is sampled.  See Appendix
0001DE80  20 45 20 66 6F 72 20 74  68 65 20 61 20 64 65 73  63 72 69 70 74 69 6F 6E  20 6F 66 20 74 68 65 20   E for the a description of the 
0001DEA0  72 65 63 6F 72 64 69 6E  67 20 63 6F 6E 74 72 6F  6C 20 62 69 74 73 2E 20  20 49 66 20 27 77 61 69  recording control bits.  If 'wai
0001DEC0  74 27 20 69 73 20 73 65  74 20 74 6F 20 61 20 6E  6F 6E 2D 7A 65 72 6F 20  76 61 6C 75 65 2C 20 74  t' is set to a non-zero value, t
0001DEE0  68 65 6E 20 74 68 69 73  20 72 6F 75 74 69 6E 65  20 77 69 6C 6C 20 6E 6F  74 20 72 65 74 75 72 6E  hen this routine will not return
0001DF00  20 75 6E 74 69 6C 20 74  68 65 20 62 75 66 66 65  72 20 68 61 73 20 62 65  65 6E 20 66 69 6C 6C 65   until the buffer has been fille
0001DF20  64 2E 20 20 49 66 20 27  72 65 70 65 61 74 27 20  69 73 20 54 52 55 45 2C  20 74 68 65 6E 20 74 68  d.  If 'repeat' is TRUE, then th
0001DF40  65 20 44 4D 41 20 63 68  61 6E 6E 65 6C 20 77 69  6C 6C 20 62 65 20 73 65  74 20 75 70 20 69 6E 20  e DMA channel will be set up in 
0001DF60  61 75 74 6F 2D 69 6E 69  74 20 6D 6F 64 65 20 73  6F 20 74 68 61 74 20 74  68 65 20 72 65 63 6F 72  auto-init mode so that the recor
0001DF80  64 69 6E 67 20 69 73 20  64 6F 6E 65 20 69 6E 64  65 66 69 6E 69 74 65 6C  79 2E 20 20 49 66 20 74  ding is done indefinitely.  If t
0001DFA0  68 69 73 20 69 73 20 64  6F 6E 65 2C 20 74 68 65  6E 20 74 68 65 20 62 75  66 66 65 72 20 4D 55 53  his is done, then the buffer MUS
0001DFC0  54 20 72 65 73 69 64 65  20 63 6F 6D 70 6C 65 74  65 6C 79 20 69 6E 20 31  20 36 34 4B 20 70 61 67  T reside completely in 1 64K pag
0001DFE0  65 20 6F 66 20 50 43 20  52 41 4D 2E 20 20 41 6C  73 6F 2C 20 69 74 20 69  73 20 70 72 6F 62 61 62  e of PC RAM.  Also, it is probab
0001E000  6C 79 20 6E 65 63 65 73  73 61 72 79 20 74 68 61  74 20 79 6F 75 72 20 61  70 70 6C 69 63 61 74 69  ly necessary that your applicati
0001E020  6F 6E 20 68 6F 6F 6B 73  20 74 6F 20 74 68 65 20  72 65 63 6F 72 64 20 68  61 6E 64 6C 65 72 20 73  on hooks to the record handler s
0001E040  6F 20 74 68 61 74 20 74  68 65 20 63 6F 6E 74 72  6F 6C 20 72 65 67 69 73  74 65 72 20 6F 6E 20 74  o that the control register on t
0001E060  68 65 20 55 6C 74 72 61  53 6F 75 6E 64 20 63 61  6E 20 62 65 20 68 69 74  20 74 6F 20 72 65 73 74  he UltraSound can be hit to rest
0001E080  61 72 74 20 74 68 65 20  72 65 63 6F 72 64 69 6E  67 20 70 72 6F 63 65 73  73 20 28 55 6C 74 72 61  art the recording process (Ultra
0001E0A0  47 6F 52 65 63 6F 72 64  29 2E 20 20 54 68 69 73  20 77 69 6C 6C 20 62 65  20 76 65 72 79 20 71 75  GoRecord).  This will be very qu
0001E0C0  69 63 6B 20 73 69 6E 63  65 20 74 68 65 20 50 43  20 44 4D 41 20 63 6F 6E  74 72 6F 6C 6C 65 72 20  ick since the PC DMA controller 
0001E0E0  77 69 6C 6C 20 6E 6F 74  20 62 65 20 72 65 2D 70  72 6F 67 72 61 6D 6D 65  64 2E 0D 0A 0D 0A 52 65  will not be re-programmed.Re
0001E100  74 75 72 6E 73 3A 09 43  3A 20 20 20 20 20 20 55  4C 54 52 41 5F 4F 4B 20  69 66 20 6E 6F 20 70 72  turns:C:      ULTRA_OK if no pr
0001E120  6F 62 6C 65 6D 2E 0D 0A  09 09 09 20 20 20 20 20  20 20 20 44 4D 41 5F 42  55 53 59 20 69 66 20 73  oblem.        DMA_BUSY if s
0001E140  61 6D 70 6C 69 6E 67 20  44 4D 41 20 43 68 61 6E  6E 65 6C 20 69 73 20 62  75 73 79 2E 0D 0A 09 09  ampling DMA Channel is busy.
0001E160  09 20 20 20 20 20 20 20  20 42 41 44 5F 44 4D 41  5F 41 44 44 52 20 69 66  20 61 75 74 6F 69 6E 69          BAD_DMA_ADDR if autoini
0001E180  74 20 62 75 66 66 65 72  20 63 72 6F 73 73 65 73  20 36 34 6B 20 70 61 67  65 2E 0D 0A 0D 0A 09 09  t buffer crosses 64k page.
0001E1A0  09 50 41 53 43 41 4C 3A  20 54 52 55 45 20 69 66  20 73 75 63 63 65 73 73  66 75 6C 2E 20 20 20 46  PASCAL: TRUE if successful.   F
0001E1C0  41 4C 53 45 20 6F 74 68  65 72 77 69 73 65 2E 0D  0A 09 09 09 20 20 20 20  20 20 20 20 49 66 20 75  ALSE otherwise.        If u
0001E1E0  6E 73 75 63 63 65 73 73  66 75 6C 2C 20 63 68 65  63 6B 20 55 6C 74 72 61  45 72 72 6F 72 53 74 72  nsuccessful, check UltraErrorStr
0001E200  20 66 6F 72 20 74 68 65  20 72 65 61 73 6F 6E 2E  0D 0A 0D 0A 53 65 65 20  61 6C 73 6F 3A 09 55 6C   for the reason.See also:Ul
0001E220  74 72 61 57 61 69 74 52  65 63 6F 72 64 44 4D 41  2C 20 55 6C 74 72 61 53  65 74 52 65 63 6F 72 64  traWaitRecordDMA, UltraSetRecord
0001E240  46 72 65 71 75 65 6E 63  79 0D 0A 09 09 09 55 6C  74 72 61 47 6F 52 65 63  6F 72 64 0D 0A 0D 0A 0C  FrequencyUltraGoRecord
0001E260  55 6C 74 72 61 52 65 63  6F 72 64 44 4D 41 42 75  73 79 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraRecordDMABusy____________
0001E280  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  _____________________Purpose
0001E2A0  3A 09 54 6F 20 73 65 65  20 69 66 20 74 68 65 20  72 65 63 6F 72 64 20 44  4D 41 20 63 68 61 6E 6E  :To see if the record DMA chann
0001E2C0  65 6C 20 69 73 20 62 75  73 79 2E 0D 0A 0D 0A 43  3A 09 09 09 69 6E 74 20  55 6C 74 72 61 52 65 63  el is busy.C:int UltraRec
0001E2E0  6F 72 64 44 4D 41 42 75  73 79 28 76 6F 69 64 29  3B 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 46 55 4E  ordDMABusy(void);PASCAL:FUN
0001E300  43 54 49 4F 4E 20 55 6C  74 72 61 52 65 63 6F 72  64 44 4D 41 42 75 73 79  20 3A 20 42 4F 4F 4C 45  CTION UltraRecordDMABusy : BOOLE
0001E320  41 4E 3B 0D 0A 0D 0A 52  65 6D 61 72 6B 73 3A 09  54 68 69 73 20 72 6F 75  74 69 6E 65 20 63 68 65  AN;Remarks:This routine che
0001E340  63 6B 73 20 74 6F 20 73  65 65 20 69 66 20 74 68  65 20 72 65 63 6F 72 64  20 44 4D 41 20 63 68 61  cks to see if the record DMA cha
0001E360  6E 6E 65 6C 20 69 73 20  62 75 73 79 2E 20 20 49  74 20 6D 69 67 68 74 20  62 65 20 62 75 73 79 20  nnel is busy.  It might be busy 
0001E380  64 6F 69 6E 67 20 61 20  72 65 63 6F 72 64 20 28  6F 72 20 70 6C 61 79 62  61 63 6B 20 69 66 20 74  doing a record (or playback if t
0001E3A0  68 65 20 72 65 63 6F 72  64 20 26 20 70 6C 61 79  62 61 63 6B 20 63 68 61  6E 6E 65 6C 73 20 61 72  he record & playback channels ar
0001E3C0  65 20 74 68 65 20 73 61  6D 65 29 2E 0D 0A 0D 0A  52 65 74 75 72 6E 73 3A  09 43 3A 20 20 20 20 20  e the same).Returns:C:     
0001E3E0  20 30 20 3D 20 43 68 61  6E 6E 65 6C 20 6E 6F 74  20 42 75 73 79 0D 0A 09  09 09 20 20 20 20 20 20   0 = Channel not Busy      
0001E400  20 20 32 20 3D 20 43 68  61 6E 6E 65 6C 20 42 75  73 79 0D 0A 0D 0A 09 09  09 50 41 53 43 41 4C 3A    2 = Channel BusyPASCAL:
0001E420  20 54 52 55 45 20 69 66  20 74 68 65 20 63 68 61  6E 6E 65 6C 20 69 73 20  6E 6F 74 20 61 76 61 69   TRUE if the channel is not avai
0001E440  6C 61 62 6C 65 2E 20 46  41 4C 53 45 20 69 66 20  69 74 20 69 73 2E 0D 0A  0D 0A 53 65 65 20 61 6C  lable. FALSE if it is.See al
0001E460  73 6F 3A 09 55 6C 74 72  61 52 65 63 6F 72 64 44  61 74 61 0D 0A 0D 0A 0D  0A 0D 0A 55 6C 74 72 61  so:UltraRecordDataUltra
0001E480  52 65 73 65 74 0D 0A 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  Reset_________________________
0001E4A0  5F 5F 5F 5F 5F 5F 5F 5F  0D 0A 0D 0A 50 75 72 70  6F 73 65 3A 09 54 6F 20  72 65 73 65 74 20 74 68  ________Purpose:To reset th
0001E4C0  65 20 55 6C 74 72 61 53  6F 75 6E 64 2E 0D 0A 0D  0A 43 3A 09 09 09 69 6E  74 20 55 6C 74 72 61 52  e UltraSound.C:int UltraR
0001E4E0  65 73 65 74 28 76 6F 69  63 65 73 29 3B 0D 0A 09  09 09 69 6E 74 20 76 6F  69 63 65 73 3B 0D 0A 0D  eset(voices);int voices;
0001E500  0A 50 41 53 43 41 4C 3A  09 46 55 4E 43 54 49 4F  4E 20 55 6C 74 72 61 52  65 73 65 74 28 56 6F 69  PASCAL:FUNCTION UltraReset(Voi
0001E520  63 65 73 20 3A 20 49 4E  54 45 47 45 52 29 20 3A  20 42 4F 4F 4C 45 41 4E  3B 0D 0A 0D 0A 52 65 6D  ces : INTEGER) : BOOLEAN;Rem
0001E540  61 72 6B 73 3A 09 54 68  69 73 20 72 6F 75 74 69  6E 65 20 69 73 20 63 61  6C 6C 65 64 20 62 79 20  arks:This routine is called by 
0001E560  55 6C 74 72 61 4F 70 65  6E 20 74 6F 20 6D 61 6B  65 20 73 75 72 65 20 74  68 65 20 63 61 72 64 20  UltraOpen to make sure the card 
0001E580  69 73 20 69 6E 20 61 20  6B 6E 6F 77 6E 20 73 74  61 74 65 2E 20 20 55 6C  74 72 61 43 6C 6F 73 65  is in a known state.  UltraClose
0001E5A0  20 61 6C 73 6F 20 63 61  6C 6C 73 20 74 68 69 73  20 72 6F 75 74 69 6E 65  2E 0D 0A 0D 0A 52 65 74   also calls this routine.Ret
0001E5C0  75 72 6E 73 3A 09 43 3A  20 20 20 20 20 20 55 4C  54 52 41 5F 4F 4B 20 69  66 20 6E 6F 20 70 72 6F  urns:C:      ULTRA_OK if no pro
0001E5E0  62 6C 65 6D 2E 0D 0A 09  09 09 20 20 20 20 20 20  20 20 42 41 44 5F 4E 55  4D 5F 4F 46 5F 56 4F 49  blem.        BAD_NUM_OF_VOI
0001E600  43 45 53 20 69 66 20 23  20 6F 66 20 76 6F 69 63  65 73 20 6E 6F 74 20 69  6E 20 72 61 6E 67 65 2E  CES if # of voices not in range.
0001E620  0D 0A 0D 0A 09 09 09 50  41 53 43 41 4C 3A 20 54  52 55 45 20 69 66 20 63  61 72 64 20 69 73 20 73  PASCAL: TRUE if card is s
0001E640  75 63 63 65 73 73 66 75  6C 6C 79 20 72 65 73 65  74 2E 0D 0A 09 09 09 20  20 20 20 20 20 20 20 49  uccessfully reset.        I
0001E660  66 20 46 41 4C 53 45 2C  20 63 68 65 63 6B 20 55  6C 74 72 61 45 72 72 6F  72 53 74 72 20 66 6F 72  f FALSE, check UltraErrorStr for
0001E680  20 74 68 65 20 72 65 61  73 6F 6E 2E 0D 0A 0D 0A  53 65 65 20 61 6C 73 6F  3A 09 55 6C 74 72 61 4F   the reason.See also:UltraO
0001E6A0  70 65 6E 2C 20 55 6C 74  72 61 43 6C 6F 73 65 0D  0A 0D 0A 0D 0A 0C 55 6C  74 72 61 53 65 74 42 61  pen, UltraCloseUltraSetBa
0001E6C0  6C 61 6E 63 65 0D 0A 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  lance_________________________
0001E6E0  5F 5F 5F 5F 5F 5F 5F 5F  0D 0A 0D 0A 50 75 72 70  6F 73 65 3A 09 54 6F 20  73 65 74 20 61 20 76 6F  ________Purpose:To set a vo
0001E700  69 63 65 27 73 20 70 61  6E 20 70 6F 73 69 74 69  6F 6E 2E 0D 0A 0D 0A 43  3A 09 09 09 76 6F 69 64  ice's pan position.C:void
0001E720  20 55 6C 74 72 61 53 65  74 42 61 6C 61 6E 63 65  28 76 6F 69 63 65 2C 64  61 74 61 29 3B 0D 0A 09   UltraSetBalance(voice,data);
0001E740  09 09 69 6E 74 20 76 6F  69 63 65 3B 0D 0A 09 09  09 69 6E 74 20 64 61 74  61 3B 0D 0A 0D 0A 50 41  int voice;int data;PA
0001E760  53 43 41 4C 3A 09 50 52  4F 43 45 44 55 52 45 20  55 6C 74 72 61 53 65 74  42 61 6C 61 6E 63 65 28  SCAL:PROCEDURE UltraSetBalance(
0001E780  56 6F 69 63 65 20 3A 20  49 4E 54 45 47 45 52 3B  0D 0A 09 09 09 20 20 20  20 20 20 20 20 20 20 20  Voice : INTEGER;           
0001E7A0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 44  61 74 61 20 20 3A 20 42  59 54 45 29 3B 0D 0A 0D                 Data  : BYTE);
0001E7C0  0A 52 65 6D 61 72 6B 73  3A 09 54 68 69 73 20 72  6F 75 74 69 6E 65 20 73  65 74 73 20 74 68 65 20  Remarks:This routine sets the 
0001E7E0  76 6F 69 63 65 27 73 20  70 6F 73 69 74 69 6F 6E  20 62 65 74 77 65 65 6E  20 72 69 67 68 74 20 61  voice's position between right a
0001E800  6E 64 20 6C 65 66 74 20  73 70 65 61 6B 65 72 73  2E 20 20 41 20 30 20 77  69 6C 6C 20 70 6C 61 63  nd left speakers.  A 0 will plac
0001E820  65 20 74 68 65 20 61 75  64 69 6F 20 61 6C 6C 20  74 68 65 20 77 61 79 20  74 6F 20 74 68 65 20 6C  e the audio all the way to the l
0001E840  65 66 74 20 77 68 65 72  65 61 73 20 61 20 31 35  20 77 69 6C 6C 20 70 75  74 20 74 68 65 20 73 6F  eft whereas a 15 will put the so
0001E860  75 6E 64 20 61 6C 6C 20  74 68 65 20 77 61 79 20  74 6F 20 74 68 65 20 72  69 67 68 74 2E 20 20 56  und all the way to the right.  V
0001E880  61 6C 75 65 73 20 74 68  61 74 20 61 72 65 20 6F  75 74 20 6F 66 20 72 61  6E 67 65 20 77 69 6C 6C  alues that are out of range will
0001E8A0  20 6D 6F 76 65 20 74 68  65 20 62 61 6C 61 6E 63  65 20 74 6F 20 74 68 65  20 6E 65 61 72 65 73 74   move the balance to the nearest
0001E8C0  20 65 78 74 72 65 6D 65  2E 0D 0A 0D 0A 0D 0A 0D  0A 55 6C 74 72 61 53 65  74 46 72 65 71 75 65 6E   extreme.UltraSetFrequen
0001E8E0  63 79 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  cy____________________________
0001E900  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 73 65 74  20 61 20 76 6F 69 63 65  _____Purpose:To set a voice
0001E920  27 73 20 70 6C 61 79 62  61 63 6B 20 66 72 65 71  75 65 6E 63 79 2E 0D 0A  0D 0A 43 3A 09 09 09 76  's playback frequency.C:v
0001E940  6F 69 64 20 55 6C 74 72  61 53 65 74 46 72 65 71  75 65 6E 63 79 28 76 6F  69 63 65 2C 73 70 65 65  oid UltraSetFrequency(voice,spee
0001E960  64 5F 68 7A 29 3B 0D 0A  09 09 09 69 6E 74 20 76  6F 69 63 65 3B 0D 0A 09  09 09 75 6E 73 69 67 6E  d_hz);int voice;unsign
0001E980  65 64 20 6C 6F 6E 67 20  73 70 65 65 64 5F 68 7A  3B 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 50 52 4F  ed long speed_hz;PASCAL:PRO
0001E9A0  43 45 44 55 52 45 20 55  6C 74 72 61 53 65 74 46  72 65 71 75 65 6E 63 79  28 56 6F 69 63 65 20 20  CEDURE UltraSetFrequency(Voice  
0001E9C0  20 20 20 3A 20 49 4E 54  45 47 45 52 3B 0D 0A 09  09 09 20 20 20 20 20 20  20 20 20 20 20 20 20 20     : INTEGER;              
0001E9E0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 53 70  65 65 64 5F 4B 68 7A 20  3A 20 4C 4F 4E 47 49 4E                Speed_Khz : LONGIN
0001EA00  54 29 3B 0D 0A 0D 0A 52  65 6D 61 72 6B 73 3A 09  54 68 69 73 20 72 6F 75  74 69 6E 65 20 73 65 74  T);Remarks:This routine set
0001EA20  73 20 74 68 65 20 76 6F  69 63 65 27 73 20 70 6C  61 79 62 61 63 6B 20 72  61 74 65 20 74 6F 20 74  s the voice's playback rate to t
0001EA40  68 65 20 73 70 65 63 69  66 69 65 64 20 61 62 73  6F 6C 75 74 65 20 66 72  65 71 75 65 6E 63 79 2E  he specified absolute frequency.
0001EA60  20 20 54 68 65 20 6E 75  6D 62 65 72 20 6F 66 20  61 63 74 69 76 65 20 76  6F 69 63 65 73 20 69 73    The number of active voices is
0001EA80  20 74 61 6B 65 6E 20 69  6E 74 6F 20 61 63 63 6F  75 6E 74 20 77 68 65 6E  20 6D 61 6B 69 6E 67 20   taken into account when making 
0001EAA0  74 68 65 20 61 70 70 72  6F 70 72 69 61 74 65 20  63 61 6C 63 75 6C 61 74  69 6F 6E 73 2E 0D 0A 0D  the appropriate calculations.
0001EAC0  0A 0D 0A 0D 0A 55 6C 74  72 61 53 65 74 4C 6F 6F  70 4D 6F 64 65 0D 0A 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraSetLoopMode_________
0001EAE0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  0D 0A 0D 0A 50 75 72 70  ________________________Purp
0001EB00  6F 73 65 3A 09 54 6F 20  73 65 74 20 61 20 76 6F  69 63 65 27 73 20 6C 6F  6F 70 20 6D 6F 64 65 2E  ose:To set a voice's loop mode.
0001EB20  0D 0A 0D 0A 43 3A 09 09  09 76 6F 69 64 20 55 6C  74 72 61 53 65 74 4C 6F  6F 70 4D 6F 64 65 28 76  C:void UltraSetLoopMode(v
0001EB40  6F 69 63 65 2C 6D 6F 64  65 29 3B 0D 0A 09 09 09  69 6E 74 20 76 6F 69 63  65 3B 0D 0A 09 09 09 75  oice,mode);int voice;u
0001EB60  6E 73 69 67 6E 65 64 20  63 68 61 72 20 6D 6F 64  65 3B 0D 0A 0D 0A 50 41  53 43 41 4C 3A 09 50 52  nsigned char mode;PASCAL:PR
0001EB80  4F 43 45 44 55 52 45 20  55 6C 74 72 61 53 65 74  4C 6F 6F 70 4D 6F 64 65  28 56 6F 69 63 65 20 3A  OCEDURE UltraSetLoopMode(Voice :
0001EBA0  20 49 4E 54 45 47 45 52  3B 0D 0A 09 09 09 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20   INTEGER;                  
0001EBC0  20 20 20 20 20 20 20 20  20 56 4D 6F 64 65 20 3A  20 42 59 54 45 29 3B 0D  0A 0D 0A 52 65 6D 61 72           VMode : BYTE);Remar
0001EBE0  6B 73 3A 09 54 68 69 73  20 72 6F 75 74 69 6E 65  20 77 69 6C 6C 20 73 65  74 20 74 68 69 73 20 76  ks:This routine will set this v
0001EC00  6F 69 63 65 27 73 20 6C  6F 6F 70 69 6E 67 20 6D  6F 64 65 20 74 6F 20 74  68 65 20 73 70 65 63 69  oice's looping mode to the speci
0001EC20  66 69 65 64 20 6D 6F 64  65 2E 20 20 53 65 65 20  41 70 70 65 6E 64 69 78  20 43 20 66 6F 72 20 74  fied mode.  See Appendix C for t
0001EC40  68 65 20 64 65 66 69 6E  69 74 69 6F 6E 20 6F 66  20 74 68 65 73 65 20 62  69 74 73 2E 0D 0A 0C 55  he definition of these bits.U
0001EC60  6C 74 72 61 53 65 74 52  65 63 6F 72 64 46 72 65  71 75 65 6E 63 79 0D 0A  5F 5F 5F 5F 5F 5F 5F 5F  ltraSetRecordFrequency________
0001EC80  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 0D 0A 0D 0A 50 75 72  _________________________Pur
0001ECA0  70 6F 73 65 3A 09 54 6F  20 73 65 74 20 74 68 65  20 72 65 63 6F 72 64 69  6E 67 20 72 61 74 65 2E  pose:To set the recording rate.
0001ECC0  0D 0A 0D 0A 43 3A 09 09  09 76 6F 69 64 20 55 6C  74 72 61 53 65 74 52 65  63 6F 72 64 46 72 65 71  C:void UltraSetRecordFreq
0001ECE0  75 65 6E 63 79 28 72 61  74 65 29 3B 0D 0A 09 09  09 75 6E 73 69 67 6E 65  64 20 6C 6F 6E 67 20 72  uency(rate);unsigned long r
0001ED00  61 74 65 3B 20 20 0D 0A  0D 0A 50 41 53 43 41 4C  3A 09 50 52 4F 43 45 44  55 52 45 20 55 6C 74 72  ate;  PASCAL:PROCEDURE Ultr
0001ED20  61 53 65 74 52 65 63 6F  72 64 46 72 65 71 75 65  6E 63 79 28 52 61 74 65  20 3A 20 4C 4F 4E 47 49  aSetRecordFrequency(Rate : LONGI
0001ED40  4E 54 29 3B 0D 0A 0D 0A  52 65 6D 61 72 6B 73 3A  09 54 68 69 73 20 72 6F  75 74 69 6E 65 20 73 65  NT);Remarks:This routine se
0001ED60  74 73 20 74 68 65 20 72  65 63 6F 72 64 20 72 61  74 65 20 74 6F 20 74 68  65 20 73 70 65 63 69 66  ts the record rate to the specif
0001ED80  69 65 64 20 66 72 65 71  75 65 6E 63 79 2E 20 20  53 69 6E 63 65 20 74 68  65 20 55 6C 74 72 61 53  ied frequency.  Since the UltraS
0001EDA0  6F 75 6E 64 20 75 73 65  73 20 74 68 65 20 50 43  20 44 4D 41 20 63 68 61  6E 6E 65 6C 20 74 6F 20  ound uses the PC DMA channel to 
0001EDC0  64 6F 20 74 68 65 20 73  61 6D 70 6C 69 6E 67 20  64 69 72 65 63 74 6C 79  20 69 6E 74 6F 20 50 43  do the sampling directly into PC
0001EDE0  20 52 41 4D 2C 20 6E 6F  20 76 6F 69 63 65 20 73  70 65 63 69 66 69 63 61  74 69 6F 6E 20 69 73 20   RAM, no voice specification is 
0001EE00  6E 65 63 65 73 73 61 72  79 2E 0D 0A 0D 0A 0D 0A  0D 0A 55 6C 74 72 61 53  65 74 56 6F 69 63 65 0D  necessary.UltraSetVoice
0001EE20  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  _______________________________
0001EE40  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  6F 20 73 65 74 20 61 20  76 6F 69 63 65 20 74 6F  __Purpose:To set a voice to
0001EE60  20 61 6E 20 61 62 73 6F  6C 75 74 65 20 70 6F 73  69 74 69 6F 6E 20 69 6E  20 44 52 41 4D 2E 0D 0A   an absolute position in DRAM.
0001EE80  0D 0A 43 3A 09 09 09 76  6F 69 64 20 55 6C 74 72  61 53 65 74 56 6F 69 63  65 28 76 6F 69 63 65 2C  C:void UltraSetVoice(voice,
0001EEA0  6C 6F 63 61 74 69 6F 6E  29 3B 0D 0A 09 09 09 69  6E 74 20 76 6F 69 63 65  3B 0D 0A 09 09 09 75 6E  location);int voice;un
0001EEC0  73 69 67 6E 65 64 20 6C  6F 6E 67 20 6C 6F 63 61  74 69 6F 6E 3B 0D 0A 0D  0A 50 41 53 43 41 4C 3A  signed long location;PASCAL:
0001EEE0  09 50 52 4F 43 45 44 55  52 45 20 55 6C 74 72 61  53 65 74 56 6F 69 63 65  28 56 6F 69 63 65 20 20  PROCEDURE UltraSetVoice(Voice  
0001EF00  20 20 3A 20 49 4E 54 45  47 45 52 3B 0D 0A 09 09  09 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20    : INTEGER;               
0001EF20  20 20 20 20 20 20 20 20  20 4C 6F 63 61 74 69 6F  6E 20 3A 20 4C 4F 4E 47  49 4E 54 29 3B 0D 0A 0D           Location : LONGINT);
0001EF40  0A 52 65 6D 61 72 6B 73  3A 09 54 68 69 73 20 72  6F 75 74 69 6E 65 20 73  65 74 73 20 61 20 76 6F  Remarks:This routine sets a vo
0001EF60  69 63 65 27 73 20 63 75  72 72 65 6E 74 20 70 6F  73 69 74 69 6F 6E 20 74  6F 20 61 6E 20 61 62 73  ice's current position to an abs
0001EF80  6F 6C 75 74 65 20 6C 6F  63 61 74 69 6F 6E 2E 20  20 54 68 69 73 20 63 61  6E 20 62 65 20 75 73 65  olute location.  This can be use
0001EFA0  66 75 6C 20 74 6F 20 73  65 74 20 61 20 76 6F 69  63 65 20 74 6F 20 61 20  6C 6F 63 61 74 69 6F 6E  ful to set a voice to a location
0001EFC0  20 77 69 74 68 20 61 20  6B 6E 6F 77 6E 20 76 61  6C 75 65 20 73 69 6E 63  65 20 61 6C 6C 20 76 6F   with a known value since all vo
0001EFE0  69 63 65 73 27 20 63 75  72 72 65 6E 74 20 6C 6F  63 61 74 69 6F 6E 73 20  61 72 65 20 73 75 6D 6D  ices' current locations are summ
0001F000  65 64 20 69 6E 20 74 6F  20 74 68 65 20 6F 75 74  70 75 74 20 65 76 65 6E  20 69 66 20 74 68 65 20  ed in to the output even if the 
0001F020  76 6F 69 63 65 20 69 73  20 6E 6F 74 20 72 75 6E  6E 69 6E 67 2E 20 20 27  50 6F 70 73 27 20 69 6E  voice is not running.  'Pops' in
0001F040  20 74 68 65 20 61 75 64  69 6F 20 6D 61 79 20 72  65 73 75 6C 74 20 69 66  20 61 20 76 6F 69 63 65   the audio may result if a voice
0001F060  20 69 73 20 73 65 74 20  74 6F 20 61 20 6C 6F 63  61 74 69 6F 6E 20 74 68  61 74 20 63 6F 6E 74 61   is set to a location that conta
0001F080  69 6E 73 20 61 20 73 69  67 6E 69 66 69 63 61 6E  74 20 76 61 6C 75 65 2E  0D 0A 0D 0A 0D 0A 55 6C  ins a significant value.Ul
0001F0A0  74 72 61 53 65 74 56 6F  69 63 65 45 6E 64 0D 0A  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  traSetVoiceEnd________________
0001F0C0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 0D 0A 0D 0A 50 75 72  70 6F 73 65 3A 09 54 6F  _________________Purpose:To
0001F0E0  20 73 65 74 20 61 20 76  6F 69 63 65 27 73 20 65  6E 64 20 70 6F 73 69 74  69 6F 6E 2E 0D 0A 0D 0A   set a voice's end position.
0001F100  43 3A 09 09 09 76 6F 69  64 20 55 6C 74 72 61 53  65 74 56 6F 69 63 65 45  6E 64 28 76 6F 69 63 65  C:void UltraSetVoiceEnd(voice
0001F120  2C 65 6E 64 29 3B 0D 0A  09 09 09 69 6E 74 20 76  6F 69 63 65 3B 0D 0A 09  09 09 75 6E 73 69 67 6E  ,end);int voice;unsign
0001F140  65 64 20 6C 6F 6E 67 20  65 6E 64 3B 0D 0A 0D 0A  50 41 53 43 41 4C 3A 09  50 52 4F 43 45 44 55 52  ed long end;PASCAL:PROCEDUR
0001F160  45 20 55 6C 74 72 61 53  65 74 56 6F 69 63 65 45  6E 64 28 56 6F 69 63 65  20 20 20 20 3A 20 49 4E  E UltraSetVoiceEnd(Voice    : IN
0001F180  54 45 47 45 52 3B 0D 0A  09 09 09 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  TEGER;                     
0001F1A0  20 20 20 20 20 20 56 45  6E 64 20 20 20 20 20 3A  20 4C 4F 4E 47 49 4E 54  29 3B 0D 0A 0D 0A 52 65        VEnd     : LONGINT);Re
0001F1C0  6D 61 72 6B 73 3A 09 54  68 69 73 20 72 6F 75 74  69 6E 65 20 73 65 74 73  20 61 20 6E 65 77 20 65  marks:This routine sets a new e
0001F1E0  6E 64 70 6F 69 6E 74 20  66 6F 72 20 74 68 65 20  73 70 65 63 69 66 69 65  64 20 76 6F 69 63 65 2E  ndpoint for the specified voice.
0001F200  20 20 55 73 65 64 20 69  6E 20 63 6F 6E 6A 75 6E  63 74 69 6F 6E 20 77 69  74 68 20 55 6C 74 72 61    Used in conjunction with Ultra
0001F220  53 65 74 4C 6F 6F 70 4D  6F 64 65 20 74 6F 20 74  75 72 6E 20 6C 6F 6F 70  69 6E 67 20 6F 66 66 2C  SetLoopMode to turn looping off,
0001F240  20 61 20 73 61 6D 70 6C  65 64 20 64 65 63 61 79  20 63 61 6E 20 62 65 20  69 6D 70 6C 65 6D 65 6E   a sampled decay can be implemen
0001F260  74 65 64 2E 0D 0A 0D 0A  53 65 65 20 61 6C 73 6F  3A 09 55 6C 74 72 61 53  65 74 4C 6F 6F 70 4D 6F  ted.See also:UltraSetLoopMo
0001F280  64 65 0D 0A 0C 55 6C 74  72 61 53 65 74 56 6F 6C  75 6D 65 0D 0A 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  deUltraSetVolume___________
0001F2A0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 0D 0A  0D 0A 50 75 72 70 6F 73  ______________________Purpos
0001F2C0  65 3A 09 54 6F 20 73 65  74 20 61 20 76 6F 69 63  65 27 73 20 63 75 72 72  65 6E 74 20 6C 6F 67 61  e:To set a voice's current loga
0001F2E0  72 69 74 68 6D 69 63 20  76 6F 6C 75 6D 65 2E 0D  0A 0D 0A 43 3A 09 09 09  76 6F 69 64 20 55 6C 74  rithmic volume.C:void Ult
0001F300  72 61 53 65 74 56 6F 6C  75 6D 65 28 76 6F 69 63  65 2C 76 6F 6C 75 6D 65  29 3B 0D 0A 09 09 09 69  raSetVolume(voice,volume);i
0001F320  6E 74 20 76 6F 69 63 65  3B 0D 0A 09 09 09 75 6E  73 69 67 6E 65 64 20 69  6E 74 20 76 6F 6C 75 6D  nt voice;unsigned int volum
0001F340  65 3B 20 20 20 0D 0A 0D  0A 50 41 53 43 41 4C 3A  09 50 52 4F 43 45 44 55  52 45 20 55 6C 74 72 61  e;   PASCAL:PROCEDURE Ultra
0001F360  53 65 74 56 6F 6C 75 6D  65 28 56 6F 69 63 65 20  20 3A 20 49 4E 54 45 47  45 52 3B 0D 0A 09 09 09  SetVolume(Voice  : INTEGER;
0001F380  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 56 6F 6C 75 6D 65 20                           Volume 
0001F3A0  3A 20 57 4F 52 44 29 3B  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 54 68 69  73 20 72 6F 75 74 69 6E  : WORD);Remarks:This routin
0001F3C0  65 20 73 65 74 73 20 74  68 65 20 76 6F 6C 75 6D  65 20 6F 66 20 74 68 65  20 76 6F 69 63 65 20 74  e sets the volume of the voice t
0001F3E0  6F 20 61 20 73 70 65 63  69 66 69 63 20 6C 6F 67  61 72 69 74 68 6D 69 63  20 76 61 6C 75 65 2E 20  o a specific logarithmic value. 
0001F400  20 54 68 65 20 72 61 6E  67 65 20 69 73 20 66 72  6F 6D 20 30 20 74 6F 20  34 30 39 35 2E 20 20 55   The range is from 0 to 4095.  U
0001F420  73 65 20 55 6C 74 72 61  53 65 74 4C 69 6E 65 61  72 56 6F 6C 75 6D 65 20  74 6F 20 64 6F 20 6C 69  se UltraSetLinearVolume to do li
0001F440  6E 65 61 72 20 76 6F 6C  75 6D 65 73 2E 0D 0A 0D  0A 53 65 65 20 61 6C 73  6F 3A 09 55 6C 74 72 61  near volumes.See also:Ultra
0001F460  53 65 74 4C 69 6E 65 61  72 56 6F 6C 75 6D 65 0D  0A 0D 0A 0D 0A 0D 0A 55  6C 74 72 61 53 69 7A 65  SetLinearVolumeUltraSize
0001F480  44 52 41 4D 0D 0A 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  DRAM__________________________
0001F4A0  5F 5F 5F 5F 5F 5F 5F 0D  0A 0D 0A 50 75 72 70 6F  73 65 3A 09 54 6F 20 46  69 6E 64 20 74 68 65 20  _______Purpose:To Find the 
0001F4C0  61 6D 6F 75 6E 74 20 6F  66 20 44 52 41 4D 20 61  76 61 69 6C 61 62 6C 65  20 6F 6E 20 74 68 65 20  amount of DRAM available on the 
0001F4E0  55 6C 74 72 61 53 6F 75  6E 64 2E 0D 0A 0D 0A 43  3A 09 09 09 69 6E 74 20  55 6C 74 72 61 53 69 7A  UltraSound.C:int UltraSiz
0001F500  65 44 72 61 6D 28 76 6F  69 64 29 3B 0D 0A 0D 0A  50 41 53 43 41 4C 3A 09  46 55 4E 43 54 49 4F 4E  eDram(void);PASCAL:FUNCTION
0001F520  20 55 6C 74 72 61 53 69  7A 65 44 52 41 4D 20 3A  20 49 4E 54 45 47 45 52  3B 0D 0A 09 09 09 4E 6F   UltraSizeDRAM : INTEGER;No
0001F540  74 65 3A 20 20 54 68 69  73 20 72 6F 75 74 69 6E  65 20 77 69 6C 6C 20 61  6C 77 61 79 73 20 72 65  te:  This routine will always re
0001F560  74 75 72 6E 20 74 68 65  20 73 61 6D 65 20 76 61  6C 75 65 2C 20 77 68 69  63 68 20 69 73 20 74 68  turn the same value, which is th
0001F580  65 20 61 6D 6F 75 6E 74  20 6F 66 20 44 52 41 4D  20 74 68 61 74 20 68 61  73 20 62 65 65 6E 20 69  e amount of DRAM that has been i
0001F5A0  6E 73 74 61 6C 6C 65 64  20 6F 6E 20 74 68 65 20  63 61 72 64 2E 20 20 55  73 65 20 55 6C 74 72 61  nstalled on the card.  Use Ultra
0001F5C0  4D 65 6D 41 76 61 69 6C  20 74 6F 20 73 65 65 20  68 6F 77 20 6D 75 63 68  20 44 52 41 4D 20 69 73  MemAvail to see how much DRAM is
0001F5E0  20 73 74 69 6C 6C 20 66  72 65 65 2E 0D 0A 0D 0A  52 65 6D 61 72 6B 73 3A  09 46 6F 72 20 43 20 75   still free.Remarks:For C u
0001F600  73 65 72 73 2C 20 74 68  69 73 20 72 6F 75 74 69  6E 65 20 63 6F 75 6C 64  20 62 65 20 75 73 65 64  sers, this routine could be used
0001F620  20 62 79 20 61 6E 20 61  70 70 6C 69 63 61 74 69  6F 6E 20 74 6F 20 64 65  74 65 72 6D 69 6E 65 20   by an application to determine 
0001F640  68 6F 77 20 6D 75 63 68  20 69 74 20 63 61 6E 20  6C 6F 61 64 20 69 6E 74  6F 20 74 68 65 20 55 6C  how much it can load into the Ul
0001F660  74 72 61 53 6F 75 6E 64  2E 20 20 55 6C 74 72 61  4D 65 6D 49 6E 69 74 20  63 61 6C 6C 73 20 74 68  traSound.  UltraMemInit calls th
0001F680  69 73 20 74 6F 20 64 65  74 65 72 6D 69 6E 65 20  68 6F 77 20 6D 75 63 68  20 63 61 6E 20 62 65 20  is to determine how much can be 
0001F6A0  75 73 65 64 20 66 6F 72  20 69 74 73 20 6D 65 6D  6F 72 79 20 70 6F 6F 6C  2E 0D 0A 0D 0A 52 65 74  used for its memory pool.Ret
0001F6C0  75 72 6E 73 3A 09 23 20  6F 66 20 6B 69 6C 6F 62  79 74 65 73 20 66 6F 75  6E 64 20 6F 6E 20 74 68  urns:# of kilobytes found on th
0001F6E0  65 20 55 6C 74 72 61 53  6F 75 6E 64 2E 0D 0A 0D  0A 53 65 65 20 61 6C 73  6F 3A 09 55 6C 74 72 61  e UltraSound.See also:Ultra
0001F700  4D 65 6D 49 6E 69 74 0D  0A 0D 0A 0D 0A 0C 55 6C  74 72 61 53 74 61 72 74  54 69 6D 65 72 0D 0A 5F  MemInitUltraStartTimer_
0001F720  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ________________________________
0001F740  0D 0A 0D 0A 50 75 72 70  6F 73 65 3A 09 54 6F 20  73 65 74 20 75 70 20 61  6E 64 20 73 74 61 72 74  Purpose:To set up and start
0001F760  20 65 69 74 68 65 72 20  54 69 6D 65 72 20 31 20  6F 72 20 54 69 6D 65 72  20 32 2E 0D 0A 0D 0A 43   either Timer 1 or Timer 2.C
0001F780  3A 09 09 09 76 6F 69 64  20 55 6C 74 72 61 53 74  61 72 74 54 69 6D 65 72  28 74 69 6D 65 72 2C 64  :void UltraStartTimer(timer,d
0001F7A0  75 72 61 74 69 6F 6E 29  3B 0D 0A 09 09 09 69 6E  74 20 74 69 6D 65 72 3B  0D 0A 09 09 09 75 6E 73  uration);int timer;uns
0001F7C0  69 67 6E 65 64 20 63 68  61 72 20 64 75 72 61 74  69 6F 6E 3B 0D 0A 0D 0A  50 41 53 43 41 4C 3A 09  igned char duration;PASCAL:
0001F7E0  50 52 4F 43 45 44 55 52  45 20 55 6C 74 72 61 53  74 61 72 74 54 69 6D 65  72 28 54 69 6D 65 72 20  PROCEDURE UltraStartTimer(Timer 
0001F800  20 20 20 3A 20 49 4E 54  45 47 45 52 3B 0D 0A 09  09 09 20 20 20 20 20 20  20 20 20 20 20 20 20 20     : INTEGER;              
0001F820  20 20 20 20 20 20 20 20  20 20 20 20 44 75 72 61  74 69 6F 6E 20 3A 20 42  59 54 45 29 3B 0D 0A 0D              Duration : BYTE);
0001F840  0A 52 65 6D 61 72 6B 73  3A 09 54 68 69 73 20 72  6F 75 74 69 6E 65 20 63  61 6E 20 62 65 20 75 73  Remarks:This routine can be us
0001F860  65 64 20 74 6F 20 73 74  61 72 74 20 75 70 20 6F  6E 65 20 6F 66 20 74 77  6F 20 61 76 61 69 6C 61  ed to start up one of two availa
0001F880  62 6C 65 20 68 61 72 64  77 61 72 65 20 74 69 6D  65 72 73 2E 20 20 54 69  6D 65 72 20 23 31 20 69  ble hardware timers.  Timer #1 i
0001F8A0  73 20 61 6E 20 38 30 20  6D 69 63 72 6F 73 65 63  6F 6E 64 20 28 2E 30 30  30 30 38 73 29 20 74 69  s an 80 microsecond (.00008s) ti
0001F8C0  6D 65 72 2E 20 20 54 69  6D 65 72 20 23 32 20 69  73 20 61 20 33 32 30 20  6D 69 63 72 6F 73 65 63  mer.  Timer #2 is a 320 microsec
0001F8E0  6F 6E 64 20 28 2E 30 30  30 33 32 73 29 20 74 69  6D 65 72 2E 20 20 57 68  65 6E 20 73 74 61 72 74  ond (.00032s) timer.  When start
0001F900  69 6E 67 20 65 69 74 68  65 72 20 74 69 6D 65 72  2C 20 79 6F 75 20 73 75  70 70 6C 79 20 74 68 65  ing either timer, you supply the
0001F920  20 23 20 6F 66 20 63 6F  75 6E 74 73 20 62 65 66  6F 72 65 20 74 68 65 20  74 69 6D 65 72 20 27 74   # of counts before the timer 't
0001F940  69 63 6B 73 27 2E 20 20  57 68 65 6E 20 74 68 65  20 74 69 6D 65 72 20 27  74 69 63 6B 73 27 2C 20  icks'.  When the timer 'ticks', 
0001F960  69 74 20 41 4C 57 41 59  53 20 63 61 6C 6C 73 20  74 68 65 20 63 61 6C 6C  62 61 63 6B 20 72 6F 75  it ALWAYS calls the callback rou
0001F980  74 69 6E 65 20 64 65 66  69 6E 65 64 20 66 6F 72  20 69 74 2E 20 20 49 66  20 79 6F 75 20 64 6F 6E  tine defined for it.  If you don
0001F9A0  27 74 20 73 75 70 70 6C  79 20 6F 6E 65 2C 20 61  20 64 65 66 61 75 6C 74  20 69 73 20 75 73 65 64  't supply one, a default is used
0001F9C0  2E 20 20 0D 0A 09 09 09  54 68 65 73 65 20 74 69  6D 65 72 73 20 63 61 6E  20 62 65 20 75 73 65 64  .  These timers can be used
0001F9E0  20 74 6F 20 74 72 69 67  67 65 72 20 76 61 72 69  6F 75 73 20 72 65 61 6C  20 74 69 6D 65 20 65 76   to trigger various real time ev
0001FA00  65 6E 74 73 2E 20 20 54  68 65 79 20 61 72 65 20  75 73 65 64 20 65 78 74  65 6E 73 69 76 65 6C 79  ents.  They are used extensively
0001FA20  20 69 6E 20 6D 75 73 69  63 20 63 6F 6D 70 6F 73  74 69 74 69 6F 6E 20 70  72 6F 67 72 61 6D 73 2E   in music compostition programs.
0001FA40  20 20 50 6C 65 61 73 65  20 72 65 6D 65 6D 62 65  72 20 74 68 61 74 20 74  68 65 20 63 61 6C 6C 62    Please remember that the callb
0001FA60  61 63 6B 20 72 6F 75 74  69 6E 65 20 69 73 20 63  61 6C 6C 65 64 20 64 69  72 65 63 74 6C 79 20 66  ack routine is called directly f
0001FA80  72 6F 6D 20 74 68 65 20  69 6E 74 65 72 72 75 70  74 20 68 61 6E 64 6C 65  72 2C 20 73 6F 20 79 6F  rom the interrupt handler, so yo
0001FAA0  75 20 6D 75 73 74 20 62  65 20 63 61 72 65 66 75  6C 20 77 68 61 74 20 79  6F 75 20 64 6F 20 69 6E  u must be careful what you do in
0001FAC0  20 74 68 65 20 63 61 6C  6C 62 61 63 6B 20 72 6F  75 74 69 6E 65 2E 20 20  0D 0A 09 09 09 4E 6F 74   the callback routine.  Not
0001FAE0  65 20 74 68 61 74 20 74  68 65 20 73 70 65 63 69  66 69 65 64 20 74 69 6D  65 72 20 69 73 20 61 75  e that the specified timer is au
0001FB00  74 6F 6D 61 74 69 63 61  6C 6C 79 20 72 65 73 74  61 72 74 65 64 20 61 66  74 65 72 20 69 74 20 74  tomatically restarted after it t
0001FB20  69 63 6B 73 2E 20 20 59  6F 75 72 20 61 70 70 6C  69 63 61 74 69 6F 6E 20  6D 75 73 74 20 65 78 70  icks.  Your application must exp
0001FB40  6C 69 63 69 74 6C 79 20  63 61 6C 6C 20 55 6C 74  72 61 53 74 6F 70 54 69  6D 65 72 20 74 6F 20 73  licitly call UltraStopTimer to s
0001FB60  68 75 74 20 69 74 20 6F  66 66 2E 0D 0A 0D 0A 53  65 65 20 61 6C 73 6F 3A  09 55 6C 74 72 61 53 74  hut it off.See also:UltraSt
0001FB80  6F 70 54 69 6D 65 72 2C  20 55 6C 74 72 61 54 69  6D 65 72 53 74 6F 70 70  65 64 0D 0A 09 09 09 55  opTimer, UltraTimerStoppedU
0001FBA0  6C 74 72 61 54 69 6D 65  72 31 48 61 6E 64 6C 65  72 2C 20 55 6C 74 72 61  54 69 6D 65 72 32 48 61  ltraTimer1Handler, UltraTimer2Ha
0001FBC0  6E 64 6C 65 72 2E 0D 0A  0D 0A 45 78 61 6D 70 6C  65 3A 09 47 69 76 69 6E  67 20 54 69 6D 65 72 20  ndler.Example:Giving Timer 
0001FBE0  31 20 61 20 64 75 72 61  74 69 6F 6E 20 6F 66 20  31 30 20 63 6F 75 6E 74  73 20 77 6F 75 6C 64 20  1 a duration of 10 counts would 
0001FC00  6D 61 6B 65 20 74 68 65  20 74 69 6D 65 72 20 74  69 63 6B 20 65 76 65 72  79 20 38 30 30 20 6D 69  make the timer tick every 800 mi
0001FC20  63 72 6F 73 65 63 6F 6E  64 73 20 28 2E 30 30 30  38 73 29 2E 20 20 54 68  69 73 20 77 6F 75 6C 64  croseconds (.0008s).  This would
0001FC40  20 6D 65 61 6E 20 79 6F  75 72 20 63 61 6C 6C 62  61 63 6B 20 72 6F 75 74  69 6E 65 20 69 73 20 63   mean your callback routine is c
0001FC60  61 6C 6C 65 64 20 31 32  35 30 20 74 69 6D 65 73  20 61 20 73 65 63 6F 6E  64 2E 0D 0A 0D 0A 0D 0A  alled 1250 times a second.
0001FC80  0C 55 6C 74 72 61 53 74  61 72 74 56 6F 69 63 65  0D 0A 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraStartVoice______________
0001FCA0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 0D 0A 0D 0A 50  75 72 70 6F 73 65 3A 09  ___________________Purpose:
0001FCC0  54 6F 20 73 65 74 20 75  70 20 61 6E 64 20 73 74  61 72 74 20 61 20 76 6F  69 63 65 20 70 6C 61 79  To set up and start a voice play
0001FCE0  69 6E 67 2E 0D 0A 0D 0A  43 3A 09 09 09 76 6F 69  64 20 55 6C 74 72 61 53  74 61 72 74 56 6F 69 63  ing.C:void UltraStartVoic
0001FD00  65 28 76 6F 69 63 65 2C  62 65 67 69 6E 2C 73 74  61 72 74 2C 65 6E 64 2C  6D 6F 64 65 29 3B 0D 0A  e(voice,begin,start,end,mode);
0001FD20  09 09 09 69 6E 74 20 76  6F 69 63 65 3B 0D 0A 09  09 09 75 6E 73 69 67 6E  65 64 20 6C 6F 6E 67 20  int voice;unsigned long 
0001FD40  62 65 67 69 6E 3B 0D 0A  09 09 09 75 6E 73 69 67  6E 65 64 20 6C 6F 6E 67  20 73 74 61 72 74 3B 0D  begin;unsigned long start;
0001FD60  0A 09 09 09 75 6E 73 69  67 6E 65 64 20 6C 6F 6E  67 20 65 6E 64 3B 20 20  0D 0A 09 09 09 75 6E 73  unsigned long end;  uns
0001FD80  69 67 6E 65 64 20 63 68  61 72 20 6D 6F 64 65 3B  20 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 50 52 4F  igned char mode; PASCAL:PRO
0001FDA0  43 45 44 55 52 45 20 55  6C 74 72 61 53 74 61 72  74 56 6F 69 63 65 28 56  6F 69 63 65 20 20 3A 20  CEDURE UltraStartVoice(Voice  : 
0001FDC0  49 4E 54 45 47 45 52 3B  0D 0A 09 09 09 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  INTEGER;                   
0001FDE0  20 20 20 20 20 20 20 56  42 65 67 69 6E 20 3A 20  4C 4F 4E 47 49 4E 54 3B  0D 0A 09 09 09 20 20 20         VBegin : LONGINT;   
0001FE00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 56  53 74 61 72 74 20 3A 20                         VStart : 
0001FE20  4C 4F 4E 47 49 4E 54 3B  0D 0A 09 09 09 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  LONGINT;                   
0001FE40  20 20 20 20 20 20 20 56  45 6E 64 20 20 20 3A 20  4C 4F 4E 47 49 4E 54 3B  0D 0A 09 09 09 20 20 20         VEnd   : LONGINT;   
0001FE60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 56  4D 6F 64 65 20 20 3A 20                         VMode  : 
0001FE80  42 59 54 45 29 3B 0D 0A  0D 0A 52 65 6D 61 72 6B  73 3A 09 54 68 69 73 20  72 6F 75 74 69 6E 65 20  BYTE);Remarks:This routine 
0001FEA0  77 69 6C 6C 20 73 65 74  20 75 70 20 61 6E 64 20  73 74 61 72 74 20 75 70  20 61 20 76 6F 69 63 65  will set up and start up a voice
0001FEC0  2E 20 20 54 68 65 20 76  6F 69 63 65 20 77 69 6C  6C 20 62 65 67 69 6E 20  70 6C 61 79 62 61 63 6B  .  The voice will begin playback
0001FEE0  20 61 74 20 74 68 65 20  27 62 65 67 69 6E 27 20  61 6E 64 20 63 6F 6E 74  69 6E 75 65 20 74 6F 20   at the 'begin' and continue to 
0001FF00  27 65 6E 64 27 2E 20 20  49 66 20 6C 6F 6F 70 69  6E 67 20 69 73 20 65 6E  61 62 6C 65 64 20 66 6F  'end'.  If looping is enabled fo
0001FF20  72 20 74 68 69 73 20 76  6F 69 63 65 2C 20 74 68  65 6E 20 69 74 20 77 69  6C 6C 20 74 68 65 6E 20  r this voice, then it will then 
0001FF40  6A 75 6D 70 20 74 6F 20  27 73 74 61 72 74 27 20  61 6E 64 20 74 68 65 6E  20 63 6F 6E 74 69 6E 75  jump to 'start' and then continu
0001FF60  65 20 74 6F 20 27 65 6E  64 27 2E 20 20 54 68 65  20 6D 65 74 68 6F 64 20  6F 66 20 6C 6F 6F 70 69  e to 'end'.  The method of loopi
0001FF80  6E 67 20 69 73 20 64 65  74 65 72 6D 69 6E 65 64  20 62 79 20 27 6D 6F 64  65 27 2E 20 20 53 65 65  ng is determined by 'mode'.  See
0001FFA0  20 41 70 70 65 6E 64 69  78 20 43 20 66 6F 72 20  74 68 65 20 64 65 66 69  6E 69 74 69 6F 6E 20 6F   Appendix C for the definition o
0001FFC0  66 20 74 68 65 73 65 20  62 69 74 73 2E 0D 0A 0D  0A 53 65 65 20 61 6C 73  6F 3A 09 55 6C 74 72 61  f these bits.See also:Ultra
0001FFE0  53 65 74 56 6F 69 63 65  45 6E 64 2C 20 55 6C 74  72 61 53 65 74 4C 6F 6F  70 4D 6F 64 65 0D 0A 0D  SetVoiceEnd, UltraSetLoopMode
00020000  0A 0D 0A 0D 0A 55 6C 74  72 61 53 74 6F 70 54 69  6D 65 72 0D 0A 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraStopTimer___________
00020020  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 0D 0A  0D 0A 50 75 72 70 6F 73  ______________________Purpos
00020040  65 3A 09 54 6F 20 73 74  6F 70 20 61 20 74 69 6D  65 72 20 77 68 69 63 68  20 68 61 73 20 62 65 65  e:To stop a timer which has bee
00020060  6E 20 70 72 65 76 69 6F  75 73 6C 79 20 61 63 74  69 76 61 74 65 64 2E 0D  0A 0D 0A 43 3A 09 09 09  n previously activated.C:
00020080  76 6F 69 64 20 55 6C 74  72 61 53 74 6F 70 54 69  6D 65 72 28 74 69 6D 65  72 29 3B 0D 0A 09 09 09  void UltraStopTimer(timer);
000200A0  69 6E 74 20 74 69 6D 65  72 3B 0D 0A 0D 0A 50 41  53 43 41 4C 3A 09 50 52  4F 43 45 44 55 52 45 20  int timer;PASCAL:PROCEDURE 
000200C0  55 6C 74 72 61 53 74 6F  70 54 69 6D 65 72 28 54  69 6D 65 72 20 3A 20 49  4E 54 45 47 45 52 29 3B  UltraStopTimer(Timer : INTEGER);
000200E0  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 49 66 20  79 6F 75 20 68 61 76 65  20 73 74 61 72 74 65 64  Remarks:If you have started
00020100  20 61 20 74 69 6D 65 72  20 77 69 74 68 20 55 6C  74 72 61 53 74 61 72 74  54 69 6D 65 72 2C 20 79   a timer with UltraStartTimer, y
00020120  6F 75 20 77 69 6C 6C 20  70 72 6F 62 61 62 6C 79  20 77 61 6E 74 20 74 6F  20 73 68 75 74 20 69 74  ou will probably want to shut it
00020140  20 6F 66 66 20 62 65 66  6F 72 65 20 73 68 75 74  74 69 6E 67 20 64 6F 77  6E 20 79 6F 75 72 20 61   off before shutting down your a
00020160  70 70 6C 69 63 61 74 69  6F 6E 2E 20 20 49 66 20  79 6F 75 20 66 6F 72 67  65 74 2C 20 55 6C 74 72  pplication.  If you forget, Ultr
00020180  61 43 6C 6F 73 65 20 61  75 74 6F 6D 61 74 69 63  61 6C 6C 79 20 73 68 75  74 73 20 69 74 20 64 6F  aClose automatically shuts it do
000201A0  77 6E 2E 0D 0A 0D 0A 53  65 65 20 61 6C 73 6F 3A  09 55 6C 74 72 61 53 74  61 72 74 54 69 6D 65 72  wn.See also:UltraStartTimer
000201C0  0D 0A 0D 0A 0C 55 6C 74  72 61 53 74 6F 70 56 6F  69 63 65 0D 0A 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraStopVoice___________
000201E0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 0D 0A  0D 0A 50 75 72 70 6F 73  ______________________Purpos
00020200  65 3A 09 54 6F 20 73 74  6F 70 20 61 20 76 6F 69  63 65 20 77 68 69 63 68  20 69 73 20 70 6C 61 79  e:To stop a voice which is play
00020220  69 6E 67 2E 0D 0A 0D 0A  43 3A 09 09 09 76 6F 69  64 20 55 6C 74 72 61 53  74 6F 70 56 6F 69 63 65  ing.C:void UltraStopVoice
00020240  28 76 6F 69 63 65 29 3B  0D 0A 09 09 09 69 6E 74  20 76 6F 69 63 65 3B 0D  0A 0D 0A 50 41 53 43 41  (voice);int voice;PASCA
00020260  4C 3A 09 50 52 4F 43 45  44 55 52 45 20 55 6C 74  72 61 53 74 6F 70 56 6F  69 63 65 28 56 6F 69 63  L:PROCEDURE UltraStopVoice(Voic
00020280  65 20 3A 20 49 4E 54 45  47 45 52 29 3B 0D 0A 0D  0A 52 65 6D 61 72 6B 73  3A 09 54 68 69 73 20 72  e : INTEGER);Remarks:This r
000202A0  6F 75 74 69 6E 65 20 77  69 6C 6C 20 73 74 6F 70  20 61 20 76 6F 69 63 65  20 77 68 69 63 68 20 69  outine will stop a voice which i
000202C0  73 20 70 6C 61 79 69 6E  67 20 61 74 20 69 74 27  73 20 63 75 72 72 65 6E  74 20 70 6F 73 69 74 69  s playing at it's current positi
000202E0  6F 6E 2E 20 20 44 6F 6E  27 74 20 66 6F 72 67 65  74 20 74 68 61 74 20 69  66 20 61 20 76 6F 69 63  on.  Don't forget that if a voic
00020300  65 20 69 73 20 6C 65 66  74 20 61 74 20 61 6E 20  75 6E 6B 6E 6F 77 6E 20  70 6F 73 69 74 69 6F 6E  e is left at an unknown position
00020320  2C 20 74 68 65 20 64 61  74 61 20 74 68 61 74 20  69 73 20 61 74 20 74 68  61 74 20 70 6F 73 69 74  , the data that is at that posit
00020340  69 6F 6E 20 77 69 6C 6C  20 73 74 69 6C 6C 20 62  65 20 73 75 6D 6D 65 64  20 69 6E 74 6F 20 74 68  ion will still be summed into th
00020360  65 20 66 69 6E 61 6C 20  6F 75 74 70 75 74 2E 0D  0A 0D 0A 53 65 65 20 61  6C 73 6F 3A 09 55 6C 74  e final output.See also:Ult
00020380  72 61 53 74 61 72 74 56  6F 69 63 65 2C 20 55 6C  74 72 61 53 65 74 56 6F  69 63 65 45 6E 64 0D 0A  raStartVoice, UltraSetVoiceEnd
000203A0  0D 0A 0D 0A 0D 0A 55 6C  74 72 61 53 74 6F 70 56  6F 6C 75 6D 65 0D 0A 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraStopVolume_________
000203C0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  0D 0A 0D 0A 50 75 72 70  ________________________Purp
000203E0  6F 73 65 3A 09 54 6F 20  73 74 6F 70 20 61 20 63  75 72 72 65 6E 74 6C 79  20 61 63 74 69 76 65 20  ose:To stop a currently active 
00020400  76 6F 6C 75 6D 65 20 72  61 6D 70 2E 0D 0A 0D 0A  43 3A 09 09 09 76 6F 69  64 20 55 6C 74 72 61 53  volume ramp.C:void UltraS
00020420  74 6F 70 56 6F 6C 75 6D  65 28 76 6F 69 63 65 29  3B 0D 0A 09 09 09 69 6E  74 20 76 6F 69 63 65 3B  topVolume(voice);int voice;
00020440  0D 0A 0D 0A 50 41 53 43  41 4C 3A 09 50 52 4F 43  45 44 55 52 45 20 55 6C  74 72 61 53 74 6F 70 56  PASCAL:PROCEDURE UltraStopV
00020460  6F 6C 75 6D 65 28 56 6F  69 63 65 20 3A 20 49 4E  54 45 47 45 52 29 3B 0D  0A 0D 0A 52 65 6D 61 72  olume(Voice : INTEGER);Remar
00020480  6B 73 3A 09 59 6F 75 20  63 61 6E 20 75 73 65 20  74 68 69 73 20 72 6F 75  74 69 6E 65 20 69 66 20  ks:You can use this routine if 
000204A0  79 6F 75 20 77 69 73 68  20 74 6F 20 73 74 6F 70  20 61 6E 20 76 6F 6C 75  6D 65 20 72 61 6D 70 20  you wish to stop an volume ramp 
000204C0  61 66 74 65 72 20 61 20  73 70 65 63 69 66 69 65  64 20 70 65 72 69 6F 64  20 6F 66 20 74 69 6D 65  after a specified period of time
000204E0  2C 20 6F 72 20 79 6F 75  20 77 69 73 68 20 74 6F  20 6D 61 6B 65 20 73 75  72 65 20 74 68 61 74 20  , or you wish to make sure that 
00020500  61 20 76 6F 6C 75 6D 65  20 72 61 6D 70 20 68 61  73 20 73 74 6F 70 70 65  64 2E 0D 0A 0D 0A 53 65  a volume ramp has stopped.Se
00020520  65 20 61 6C 73 6F 3A 09  55 6C 74 72 61 52 61 6D  70 56 6F 6C 75 6D 65 2C  20 55 6C 74 72 61 52 61  e also:UltraRampVolume, UltraRa
00020540  6D 70 4C 69 6E 65 61 72  56 6F 6C 75 6D 65 0D 0A  0D 0A 0D 0A 0D 0A 55 6C  74 72 61 54 69 6D 65 72  mpLinearVolumeUltraTimer
00020560  53 74 6F 70 70 65 64 0D  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  Stopped_______________________
00020580  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  6F 20 63 68 65 63 6B 20  __________Purpose:To check 
000205A0  74 6F 20 73 65 65 20 69  66 20 61 20 74 69 6D 65  72 20 69 73 20 72 75 6E  6E 69 6E 67 2E 0D 0A 0D  to see if a timer is running.
000205C0  0A 43 3A 09 09 09 69 6E  74 20 55 6C 74 72 61 54  69 6D 65 72 53 74 6F 70  70 65 64 28 74 69 6D 65  C:int UltraTimerStopped(time
000205E0  72 29 3B 0D 0A 09 09 09  69 6E 74 20 74 69 6D 65  72 3B 0D 0A 0D 0A 50 41  53 43 41 4C 3A 09 46 55  r);int timer;PASCAL:FU
00020600  4E 43 54 49 4F 4E 20 55  6C 74 72 61 54 69 6D 65  72 53 74 6F 70 70 65 64  28 54 69 6D 65 72 20 3A  NCTION UltraTimerStopped(Timer :
00020620  20 49 4E 54 45 47 45 52  29 20 3A 20 42 4F 4F 4C  45 41 4E 3B 0D 0A 0D 0A  52 65 6D 61 72 6B 73 3A   INTEGER) : BOOLEAN;Remarks:
00020640  09 54 68 69 73 20 72 6F  75 74 69 6E 65 20 63 61  6E 20 62 65 20 75 73 65  64 20 74 6F 20 73 65 65  This routine can be used to see
00020660  20 69 66 20 61 20 74 69  6D 65 72 20 69 73 20 63  75 72 72 65 6E 74 6C 79  20 62 65 69 6E 67 20 75   if a timer is currently being u
00020680  73 65 64 2E 0D 0A 0D 0A  52 65 74 75 72 6E 73 3A  09 46 41 4C 53 45 20 69  66 20 73 74 69 6C 6C 20  sed.Returns:FALSE if still 
000206A0  72 75 6E 6E 69 6E 67 2C  20 54 52 55 45 20 69 66  20 73 74 6F 70 70 65 64  2E 0D 0A 0D 0A 53 65 65  running, TRUE if stopped.See
000206C0  20 61 6C 73 6F 3A 09 55  6C 74 72 61 53 74 61 72  74 54 69 6D 65 72 2C 20  55 6C 74 72 61 53 74 6F   also:UltraStartTimer, UltraSto
000206E0  70 54 69 6D 65 72 0D 0A  0C 55 6C 74 72 61 54 72  69 6D 4A 6F 79 73 74 69  63 6B 0D 0A 5F 5F 5F 5F  pTimerUltraTrimJoystick____
00020700  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  _____________________________
00020720  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 73 65 74  20 74 68 65 20 74 72 69  6D 20 76 6F 6C 74 61 67  Purpose:To set the trim voltag
00020740  65 20 6F 6E 20 74 68 65  20 6A 6F 79 73 74 69 63  6B 20 70 6F 72 74 2E 0D  0A 0D 0A 43 3A 09 09 09  e on the joystick port.C:
00020760  76 6F 69 64 20 55 6C 74  72 61 54 72 69 6D 4A 6F  79 73 74 69 63 6B 28 76  61 6C 75 65 29 3B 0D 0A  void UltraTrimJoystick(value);
00020780  09 09 09 75 6E 73 69 67  6E 65 64 20 63 68 61 72  20 76 61 6C 75 65 3B 0D  0A 0D 0A 50 41 53 43 41  unsigned char value;PASCA
000207A0  4C 3A 09 50 52 4F 43 45  44 55 52 45 20 55 6C 74  72 61 54 72 69 6D 4A 6F  79 73 74 69 63 6B 28 4A  L:PROCEDURE UltraTrimJoystick(J
000207C0  6F 79 56 61 6C 20 3A 20  42 59 54 45 29 3B 0D 0A  0D 0A 52 65 6D 61 72 6B  73 3A 09 54 68 69 73 20  oyVal : BYTE);Remarks:This 
000207E0  72 6F 75 74 69 6E 65 20  69 73 20 75 73 65 64 20  74 6F 20 73 65 74 20 74  68 65 20 73 70 65 65 64  routine is used to set the speed
00020800  20 63 6F 6D 70 65 6E 73  61 74 69 6F 6E 20 76 61  6C 75 65 20 6F 6E 20 74  68 65 20 6A 6F 79 73 74   compensation value on the joyst
00020820  69 63 6B 20 70 6F 72 74  20 6F 6E 20 74 68 65 20  55 6C 74 72 61 53 6F 75  6E 64 2E 20 20 54 68 65  ick port on the UltraSound.  The
00020840  20 66 61 73 74 65 72 20  74 68 65 20 63 6F 6D 70  75 74 65 72 2C 20 74 68  65 20 73 6D 61 6C 6C 65   faster the computer, the smalle
00020860  72 20 74 68 69 73 20 76  61 6C 75 65 20 73 68 6F  75 6C 64 20 62 65 2E 20  20 54 68 69 73 20 61 6C  r this value should be.  This al
00020880  6C 6F 77 73 20 61 6C 6C  20 73 6F 66 74 77 61 72  65 20 74 68 61 74 20 72  65 61 64 73 20 74 68 65  lows all software that reads the
000208A0  20 6A 6F 79 73 74 69 63  6B 20 74 6F 20 72 65 74  75 72 6E 20 63 6F 6E 73  69 73 74 65 6E 74 20 6A   joystick to return consistent j
000208C0  6F 79 73 74 69 63 6B 20  70 6F 73 69 74 69 6F 6E  73 20 72 65 67 61 72 64  6C 65 73 73 20 6F 66 20  oystick positions regardless of 
000208E0  74 68 65 20 73 70 65 65  64 20 6F 66 20 74 68 65  20 6D 61 63 68 69 6E 65  2E 20 20 54 68 69 73 20  the speed of the machine.  This 
00020900  69 73 20 6E 6F 72 6D 61  6C 6C 79 20 6E 6F 74 20  6E 65 65 64 65 64 20 61  6E 64 20 70 72 6F 62 61  is normally not needed and proba
00020920  62 6C 79 20 73 68 6F 75  6C 64 20 6E 65 76 65 72  20 62 65 20 75 73 65 64  20 69 6E 20 79 6F 75 72  bly should never be used in your
00020940  20 61 70 70 6C 69 63 61  74 69 6F 6E 2E 20 20 54  68 65 20 75 74 69 6C 69  74 79 20 55 4C 54 52 41   application.  The utility ULTRA
00020960  4A 4F 59 2E 45 58 45 20  77 68 69 63 68 20 69 73  20 69 6E 63 6C 75 64 65  64 20 77 69 74 68 20 61  JOY.EXE which is included with a
00020980  6C 6C 20 55 6C 74 72 61  53 6F 75 6E 64 20 73 74  6F 63 6B 20 73 6F 66 74  77 61 72 65 20 69 73 20  ll UltraSound stock software is 
000209A0  75 73 65 64 20 74 6F 20  73 65 74 20 74 68 69 73  20 76 61 6C 75 65 2E 0D  0A 0D 0A 0D 0A 55 6C 74  used to set this value.Ult
000209C0  72 61 55 70 6C 6F 61 64  0D 0A 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  raUpload______________________
000209E0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 0D 0A 0D 0A 50  75 72 70 6F 73 65 3A 09  54 6F 20 74 72 61 6E 73  ___________Purpose:To trans
00020A00  66 65 72 20 74 68 65 20  63 6F 6E 74 65 6E 74 73  20 6F 66 20 61 20 62 6C  6F 63 6B 20 6F 66 20 44  fer the contents of a block of D
00020A20  52 41 4D 20 74 6F 20 50  43 20 52 41 4D 2E 0D 0A  0D 0A 43 3A 09 09 09 69  6E 74 20 55 6C 74 72 61  RAM to PC RAM.C:int Ultra
00020A40  55 70 6C 6F 61 64 28 64  61 74 61 70 74 72 2C 63  6F 6E 74 72 6F 6C 2C 64  72 61 6D 5F 6C 6F 63 2C  Upload(dataptr,control,dram_loc,
00020A60  6C 65 6E 2C 77 61 69 74  29 3B 0D 0A 09 09 09 76  6F 69 64 20 2A 64 61 74  61 70 74 72 3B 09 0D 0A  len,wait);void *dataptr;
00020A80  09 09 09 75 6E 73 69 67  6E 65 64 20 63 68 61 72  20 63 6F 6E 74 72 6F 6C  3B 0D 0A 09 09 09 75 6E  unsigned char control;un
00020AA0  73 69 67 6E 65 64 20 6C  6F 6E 67 20 64 72 61 6D  5F 6C 6F 63 3B 0D 0A 09  09 09 75 6E 73 69 67 6E  signed long dram_loc;unsign
00020AC0  65 64 20 69 6E 74 20 6C  65 6E 3B 09 0D 0A 09 09  09 69 6E 74 20 77 61 69  74 3B 09 09 0D 0A 0D 0A  ed int len;int wait;
00020AE0  50 41 53 43 41 4C 3A 09  46 55 4E 43 54 49 4F 4E  20 55 6C 74 72 61 55 70  6C 6F 61 64 28 44 61 74  PASCAL:FUNCTION UltraUpload(Dat
00020B00  61 50 74 72 20 20 3A 20  50 4F 49 4E 54 45 52 3B  0D 0A 09 09 09 20 20 20  20 20 20 20 20 20 20 20  aPtr  : POINTER;           
00020B20  20 20 20 20 20 20 20 20  20 20 43 6F 6E 74 72 6F  6C 20 20 3A 20 42 59 54  45 3B 0D 0A 09 09 09 20            Control  : BYTE; 
00020B40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 44 52 41 4D  5F 4C 6F 63 20 3A 20 4C                      DRAM_Loc : L
00020B60  4F 4E 47 49 4E 54 3B 0D  0A 09 09 09 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  ONGINT;                    
00020B80  20 4C 65 6E 20 20 20 20  20 20 3A 20 57 4F 52 44  3B 0D 0A 09 09 09 20 20  20 20 20 20 20 20 20 20   Len      : WORD;          
00020BA0  20 20 20 20 20 20 20 20  20 20 20 57 61 69 74 20  20 20 20 20 3A 20 42 4F  4F 4C 45 41 4E 29 20 3A             Wait     : BOOLEAN) :
00020BC0  20 42 4F 4F 4C 45 41 4E  3B 0D 0A 0D 0A 52 65 6D  61 72 6B 73 3A 09 54 68  69 73 20 72 6F 75 74 69   BOOLEAN;Remarks:This routi
00020BE0  6E 65 20 77 69 6C 6C 20  72 65 74 72 69 65 76 65  20 61 20 63 68 75 6E 6B  20 6F 66 20 64 61 74 61  ne will retrieve a chunk of data
00020C00  20 66 72 6F 6D 20 74 68  65 20 55 6C 74 72 61 53  6F 75 6E 64 27 73 20 44  52 41 4D 2E 20 20 49 74   from the UltraSound's DRAM.  It
00020C20  20 77 69 6C 6C 20 74 72  61 6E 73 66 65 72 20 27  6C 65 6E 27 20 23 20 6F  66 20 62 79 74 65 73 20   will transfer 'len' # of bytes 
00020C40  74 6F 20 44 61 74 61 50  74 72 20 28 69 6E 20 50  43 29 20 66 72 6F 6D 20  44 52 41 4D 5F 6C 6F 63  to DataPtr (in PC) from DRAM_loc
00020C60  20 28 69 6E 20 55 6C 74  72 61 53 6F 75 6E 64 29  2E 20 20 49 66 20 27 57  61 69 74 27 20 69 73 20   (in UltraSound).  If 'Wait' is 
00020C80  54 52 55 45 2C 20 74 68  65 6E 20 69 74 20 77 69  6C 6C 20 77 61 69 74 20  75 6E 74 69 6C 20 74 68  TRUE, then it will wait until th
00020CA0  65 20 74 72 61 6E 73 66  65 72 20 69 73 20 63 6F  6D 70 6C 65 74 65 2E 20  20 49 66 20 27 57 61 69  e transfer is complete.  If 'Wai
00020CC0  74 27 20 69 73 20 46 41  4C 53 45 2C 20 69 74 20  77 69 6C 6C 20 72 65 74  75 72 6E 20 61 73 20 73  t' is FALSE, it will return as s
00020CE0  6F 6F 6E 20 61 73 20 74  72 61 6E 73 66 65 72 20  69 73 20 73 74 61 72 74  65 64 2E 20 20 53 65 65  oon as transfer is started.  See
00020D00  20 41 70 70 65 6E 64 69  78 20 44 20 66 6F 72 20  61 20 64 65 66 69 6E 69  74 69 6F 6E 20 6F 66 20   Appendix D for a definition of 
00020D20  74 68 65 20 63 6F 6E 74  72 6F 6C 20 62 69 74 73  2E 20 20 54 68 65 79 20  73 70 65 63 69 66 79 20  the control bits.  They specify 
00020D40  74 68 65 20 74 79 70 65  20 6F 66 20 64 61 74 61  20 62 65 69 6E 67 20 72  65 74 72 69 65 76 65 64  the type of data being retrieved
00020D60  2E 0D 0A 0D 0A 52 65 74  75 72 6E 73 3A 09 43 3A  20 20 20 20 20 20 55 4C  54 52 41 5F 4F 4B 20 69  .Returns:C:      ULTRA_OK i
00020D80  66 20 6E 6F 20 70 72 6F  62 6C 65 6D 2E 0D 0A 09  09 09 20 20 20 20 20 20  20 20 44 4D 41 5F 42 55  f no problem.        DMA_BU
00020DA0  53 59 20 69 66 20 44 4D  41 20 43 68 61 6E 6E 65  6C 20 69 73 20 62 75 73  79 2E 0D 0A 0D 0A 09 09  SY if DMA Channel is busy.
00020DC0  09 50 41 53 43 41 4C 3A  20 54 52 55 45 20 69 66  20 74 72 61 6E 73 66 65  72 20 77 61 73 20 73 75  PASCAL: TRUE if transfer was su
00020DE0  63 63 65 73 73 66 75 6C  2E 20 20 20 46 41 4C 53  45 20 6F 74 68 65 72 77  69 73 65 2E 0D 0A 09 09  ccessful.   FALSE otherwise.
00020E00  09 20 20 20 20 20 20 20  20 49 66 20 75 6E 73 75  63 63 65 73 73 66 75 6C  2C 20 63 68 65 63 6B 20          If unsuccessful, check 
00020E20  55 6C 74 72 61 45 72 72  6F 72 53 74 72 20 66 6F  72 20 74 68 65 20 72 65  61 73 6F 6E 2E 0D 0A 0D  UltraErrorStr for the reason.
00020E40  0A 53 65 65 20 61 6C 73  6F 3A 09 55 6C 74 72 61  44 6F 77 6E 6C 6F 61 64  2C 20 55 6C 74 72 61 44  See also:UltraDownload, UltraD
00020E60  52 41 4D 44 4D 41 57 61  69 74 0D 0A 0C 55 6C 74  72 61 56 65 63 74 6F 72  56 6F 6C 75 6D 65 20 0D  RAMDMAWaitUltraVectorVolume 
00020E80  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  _______________________________
00020EA0  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  6F 20 72 61 6D 70 20 61  20 76 6F 6C 75 6D 65 20  __Purpose:To ramp a volume 
00020EC0  66 72 6F 6D 20 69 74 27  73 20 63 75 72 72 65 6E  74 20 70 6F 73 69 74 69  6F 6E 20 74 6F 20 61 20  from it's current position to a 
00020EE0  6E 65 77 20 76 61 6C 75  65 2E 0D 0A 0D 0A 43 3A  09 09 09 76 6F 69 64 20  55 6C 74 72 61 56 65 63  new value.C:void UltraVec
00020F00  74 6F 72 56 6F 6C 75 6D  65 28 76 6F 69 63 65 2C  65 6E 64 5F 69 64 78 2C  72 61 74 65 2C 6D 6F 64  torVolume(voice,end_idx,rate,mod
00020F20  65 29 3B 0D 0A 09 09 09  69 6E 74 20 76 6F 69 63  65 3B 0D 0A 09 09 09 75  6E 73 69 67 6E 65 64 20  e);int voice;unsigned 
00020F40  69 6E 74 20 65 6E 64 3B  0D 0A 09 09 09 75 6E 73  69 67 6E 65 64 20 63 68  61 72 20 72 61 74 65 3B  int end;unsigned char rate;
00020F60  0D 0A 09 09 09 75 6E 73  69 67 6E 65 64 20 63 68  61 72 20 6D 6F 64 65 3B  0D 0A 0D 0A 50 41 53 43  unsigned char mode;PASC
00020F80  41 4C 3A 09 50 52 4F 43  45 44 55 52 45 20 55 6C  74 72 61 56 65 63 74 6F  72 56 6F 6C 75 6D 65 28  AL:PROCEDURE UltraVectorVolume(
00020FA0  56 6F 69 63 65 20 3A 20  49 4E 54 45 47 45 52 3B  0D 0A 09 09 09 20 20 20  20 20 20 20 20 20 20 20  Voice : INTEGER;           
00020FC0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 56 45 6E 64 20 20 3A  20 57 4F 52 44 3B 0D 0A                   VEnd  : WORD;
00020FE0  09 09 09 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 56                              V
00021000  52 61 74 65 20 3A 20 42  59 54 45 3B 0D 0A 09 09  09 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  Rate : BYTE;               
00021020  20 20 20 20 20 20 20 20  20 20 20 20 20 56 4D 6F  64 65 20 3A 20 42 59 54  45 29 3B 0D 0A 0D 0A 52               VMode : BYTE);R
00021040  65 6D 61 72 6B 73 3A 09  54 68 69 73 20 72 6F 75  74 69 6E 65 20 63 61 6E  20 62 65 20 75 73 65 64  emarks:This routine can be used
00021060  20 74 6F 20 72 61 6D 70  20 66 72 6F 6D 20 61 6E  20 75 6E 6B 6E 6F 77 6E  20 76 6F 6C 75 6D 65 20   to ramp from an unknown volume 
00021080  76 61 6C 75 65 20 74 6F  20 61 20 6E 65 77 20 76  61 6C 75 65 2E 20 20 49  74 20 69 73 20 75 73 65  value to a new value.  It is use
000210A0  66 75 6C 20 69 66 20 79  6F 75 20 61 72 65 20 64  6F 69 6E 67 20 76 6F 6C  75 6D 65 20 65 6E 76 65  ful if you are doing volume enve
000210C0  6C 6F 70 65 73 20 61 6E  64 20 6E 65 65 64 20 74  6F 20 72 65 73 74 61 72  74 20 74 68 65 20 61 74  lopes and need to restart the at
000210E0  74 61 63 6B 2F 64 65 63  61 79 20 73 65 71 75 65  6E 63 65 20 61 74 20 61  6E 79 20 74 69 6D 65 2E  tack/decay sequence at any time.
00021100  0D 0A 0D 0A 53 65 65 20  61 6C 73 6F 3A 09 55 6C  74 72 61 52 61 6D 70 56  6F 6C 75 6D 65 2C 20 55  See also:UltraRampVolume, U
00021120  6C 74 72 61 53 74 6F 70  56 6F 6C 75 6D 65 0D 0A  0D 0A 0D 0A 0D 0A 55 6C  74 72 61 56 65 72 73 69  ltraStopVolumeUltraVersi
00021140  6F 6E 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  on____________________________
00021160  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 72 65 74  75 72 6E 20 74 68 65 20  _____Purpose:To return the 
00021180  76 65 72 73 69 6F 6E 20  6F 66 20 74 68 65 20 53  44 4B 20 63 6F 64 65 20  62 65 69 6E 67 20 75 73  version of the SDK code being us
000211A0  65 64 2E 0D 0A 0D 0A 43  3A 09 09 09 76 6F 69 64  20 55 6C 74 72 61 56 65  72 73 69 6F 6E 28 6D 61  ed.C:void UltraVersion(ma
000211C0  6A 6F 72 2C 6D 69 6E 6F  72 29 3B 0D 0A 09 09 09  69 6E 74 20 2A 6D 61 6A  6F 72 3B 0D 0A 09 09 09  jor,minor);int *major;
000211E0  69 6E 74 20 2A 6D 69 6E  6F 72 3B 0D 0A 0D 0A 50  41 53 43 41 4C 3A 09 50  52 4F 43 45 44 55 52 45  int *minor;PASCAL:PROCEDURE
00021200  20 55 6C 74 72 61 56 65  72 73 69 6F 6E 28 56 41  52 20 4D 61 6A 6F 72 20  3A 20 42 59 54 45 3B 0D   UltraVersion(VAR Major : BYTE;
00021220  0A 09 09 09 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 56 41 52 20 4D                         VAR M
00021240  69 6E 6F 72 20 3A 20 42  59 54 45 29 3B 0D 0A 0D  0A 52 65 6D 61 72 6B 73  3A 09 54 68 69 73 20 72  inor : BYTE);Remarks:This r
00021260  6F 75 74 69 6E 65 20 63  61 6E 20 62 65 20 75 73  65 66 75 6C 20 74 6F 20  74 72 61 63 6B 20 74 68  outine can be useful to track th
00021280  65 20 76 65 72 73 69 6F  6E 20 6F 66 20 74 68 65  20 53 44 4B 20 74 68 61  74 20 77 61 73 20 75 73  e version of the SDK that was us
000212A0  65 64 20 69 6E 20 63 6F  6D 70 69 6C 69 6E 67 20  79 6F 75 72 20 73 6F 75  72 63 65 20 63 6F 64 65  ed in compiling your source code
000212C0  2E 0D 0A 0D 0A 52 65 74  75 72 6E 73 3A 09 4D 61  6A 6F 72 20 28 31 20 64  69 67 69 74 29 20 61 6E  .Returns:Major (1 digit) an
000212E0  64 20 6D 69 6E 6F 72 20  28 32 20 64 69 67 69 74  73 29 20 76 65 72 73 69  6F 6E 20 6F 66 20 74 68  d minor (2 digits) version of th
00021300  65 20 75 6E 69 74 2E 0D  0A 0D 0A 53 65 65 20 61  6C 73 6F 3A 09 55 6C 74  72 61 56 65 72 73 69 6F  e unit.See also:UltraVersio
00021320  6E 53 74 72 0D 0A 0D 0A  0D 0A 0C 55 6C 74 72 61  56 65 72 73 69 6F 6E 53  74 72 0D 0A 5F 5F 5F 5F  nStrUltraVersionStr____
00021340  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  _____________________________
00021360  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 72 65 74  75 72 6E 20 74 68 65 20  76 65 72 73 69 6F 6E 20  Purpose:To return the version 
00021380  6F 66 20 74 68 65 20 53  44 4B 20 63 6F 64 65 20  62 65 69 6E 67 20 75 73  65 64 20 69 6E 20 61 20  of the SDK code being used in a 
000213A0  73 74 72 69 6E 67 2E 0D  0A 0D 0A 43 3A 09 09 09  54 68 69 73 20 66 75 6E  63 74 69 6F 6E 20 69 73  string.C:This function is
000213C0  20 6E 6F 74 20 61 76 61  69 6C 61 62 6C 65 2E 0D  0A 0D 0A 50 41 53 43 41  4C 3A 09 46 55 4E 43 54   not available.PASCAL:FUNCT
000213E0  49 4F 4E 20 55 6C 74 72  61 56 65 72 73 69 6F 6E  53 74 72 20 3A 20 53 74  72 69 6E 67 3B 0D 0A 0D  ION UltraVersionStr : String;
00021400  0A 52 65 6D 61 72 6B 73  3A 09 54 68 69 73 20 72  6F 75 74 69 6E 65 20 63  61 6E 20 62 65 20 75 73  Remarks:This routine can be us
00021420  65 66 75 6C 20 74 6F 20  74 72 61 63 6B 20 74 68  65 20 76 65 72 73 69 6F  6E 20 6F 66 20 74 68 65  eful to track the version of the
00021440  20 53 44 4B 20 74 68 61  74 20 77 61 73 20 75 73  65 64 20 69 6E 20 63 6F  6D 70 69 6C 69 6E 67 20   SDK that was used in compiling 
00021460  79 6F 75 72 20 73 6F 75  72 63 65 20 63 6F 64 65  2E 0D 0A 0D 0A 52 65 74  75 72 6E 73 3A 09 4D 61  your source code.Returns:Ma
00021480  6A 6F 72 20 61 6E 64 20  6D 69 6E 6F 72 20 76 65  72 73 69 6F 6E 20 6F 66  20 74 68 65 20 75 6E 69  jor and minor version of the uni
000214A0  74 2C 20 69 6E 20 73 74  72 69 6E 67 20 66 6F 72  6D 61 74 2E 0D 0A 0D 0A  53 65 65 20 61 6C 73 6F  t, in string format.See also
000214C0  3A 09 55 6C 74 72 61 56  65 72 73 69 6F 6E 0D 0A  0D 0A 0D 0A 0D 0A 55 6C  74 72 61 56 6F 69 63 65  :UltraVersionUltraVoice
000214E0  53 74 6F 70 70 65 64 0D  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  Stopped_______________________
00021500  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  6F 20 72 65 74 75 72 6E  __________Purpose:To return
00021520  20 77 68 65 74 68 65 72  20 61 20 76 6F 69 63 65  20 69 73 20 70 6C 61 79  69 6E 67 2E 0D 0A 0D 0A   whether a voice is playing.
00021540  43 3A 09 09 09 69 6E 74  20 55 6C 74 72 61 56 6F  69 63 65 53 74 6F 70 70  65 64 28 76 6F 69 63 65  C:int UltraVoiceStopped(voice
00021560  29 3B 0D 0A 09 09 09 69  6E 74 20 76 6F 69 63 65  3B 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 46 55 4E  );int voice;PASCAL:FUN
00021580  43 54 49 4F 4E 20 55 6C  74 72 61 56 6F 69 63 65  53 74 6F 70 70 65 64 28  56 6F 69 63 65 20 3A 20  CTION UltraVoiceStopped(Voice : 
000215A0  49 4E 54 45 47 45 52 29  20 3A 20 42 4F 4F 4C 45  41 4E 3B 0D 0A 0D 0A 52  65 6D 61 72 6B 73 3A 09  INTEGER) : BOOLEAN;Remarks:
000215C0  54 68 69 73 20 72 6F 75  74 69 6E 65 20 63 61 6E  20 62 65 20 75 73 65 64  20 74 6F 20 73 65 65 20  This routine can be used to see 
000215E0  69 66 20 61 20 73 61 6D  70 6C 65 20 68 61 73 20  66 69 6E 69 73 68 65 64  20 70 6C 61 79 69 6E 67  if a sample has finished playing
00021600  20 2E 0D 0A 0D 0A 52 65  74 75 72 6E 73 3A 09 54  52 55 45 20 69 66 20 74  68 65 20 76 6F 69 63 65   .Returns:TRUE if the voice
00021620  20 69 73 20 73 74 6F 70  70 65 64 2C 20 46 41 4C  53 45 20 6F 74 68 65 72  77 69 73 65 2E 0D 0A 0D   is stopped, FALSE otherwise.
00021640  0A 0D 0A 0D 0A 55 6C 74  72 61 56 6F 6C 75 6D 65  53 74 6F 70 70 65 64 0D  0A 5F 5F 5F 5F 5F 5F 5F  UltraVolumeStopped_______
00021660  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 0D 0A 0D 0A 50 75  __________________________Pu
00021680  72 70 6F 73 65 3A 09 54  6F 20 64 65 74 65 72 6D  69 6E 65 20 69 66 20 61  20 76 6F 6C 75 6D 65 20  rpose:To determine if a volume 
000216A0  72 61 6D 70 20 69 73 20  72 75 6E 6E 69 6E 67 20  66 6F 72 20 61 20 70 61  72 74 69 63 75 6C 61 72  ramp is running for a particular
000216C0  20 76 6F 69 63 65 2E 0D  0A 0D 0A 43 3A 09 09 09  69 6E 74 20 55 6C 74 72  61 56 6F 6C 75 6D 65 53   voice.C:int UltraVolumeS
000216E0  74 6F 70 70 65 64 28 76  6F 69 63 65 29 3B 0D 0A  09 09 09 69 6E 74 20 76  6F 69 63 65 3B 0D 0A 0D  topped(voice);int voice;
00021700  0A 50 41 53 43 41 4C 3A  09 46 55 4E 43 54 49 4F  4E 20 55 6C 74 72 61 56  6F 6C 75 6D 65 53 74 6F  PASCAL:FUNCTION UltraVolumeSto
00021720  70 70 65 64 28 56 6F 69  63 65 20 3A 20 49 4E 54  45 47 45 52 29 20 3A 20  42 4F 4F 4C 45 41 4E 3B  pped(Voice : INTEGER) : BOOLEAN;
00021740  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 54 68 69  73 20 72 6F 75 74 69 6E  65 20 69 73 20 75 73 65  Remarks:This routine is use
00021760  64 20 74 6F 20 64 65 74  65 72 6D 69 6E 65 20 74  68 65 20 63 75 72 72 65  6E 74 20 73 74 61 74 65  d to determine the current state
00021780  20 6F 66 20 74 68 65 20  76 6F 6C 75 6D 65 20 6F  66 20 74 68 65 20 76 6F  69 63 65 2E 20 20 49 74   of the volume of the voice.  It
000217A0  20 63 61 6E 20 62 65 20  75 73 65 64 20 74 6F 20  73 65 65 20 69 66 20 61  20 76 6F 6C 75 6D 65 20   can be used to see if a volume 
000217C0  72 61 6D 70 20 69 73 20  73 74 69 6C 6C 20 72 75  6E 6E 69 6E 67 2E 0D 0A  0D 0A 52 65 74 75 72 6E  ramp is still running.Return
000217E0  73 3A 09 54 52 55 45 20  69 66 20 6E 6F 20 76 6F  6C 75 6D 65 20 72 61 6D  70 20 69 73 20 72 75 6E  s:TRUE if no volume ramp is run
00021800  6E 69 6E 67 2C 20 46 41  4C 53 45 20 6F 74 68 65  72 77 69 73 65 2E 0D 0A  0D 0A 53 65 65 20 61 6C  ning, FALSE otherwise.See al
00021820  73 6F 3A 09 55 6C 74 72  61 52 61 6D 70 56 6F 6C  75 6D 65 2C 20 55 6C 74  72 61 52 61 6D 70 4C 69  so:UltraRampVolume, UltraRampLi
00021840  6E 65 61 72 56 6F 6C 75  6D 65 0D 0A 0C 55 6C 74  72 61 57 61 69 74 44 52  41 4D 44 4D 41 0D 0A 5F  nearVolumeUltraWaitDRAMDMA_
00021860  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ________________________________
00021880  0D 0A 0D 0A 50 75 72 70  6F 73 65 3A 09 54 6F 20  77 61 69 74 20 66 6F 72  20 61 20 44 52 41 4D 20  Purpose:To wait for a DRAM 
000218A0  44 4D 41 20 74 72 61 6E  73 66 65 72 20 74 6F 20  63 6F 6D 70 6C 65 74 65  2E 0D 0A 0D 0A 43 3A 09  DMA transfer to complete.C:
000218C0  09 09 76 6F 69 64 20 55  6C 74 72 61 57 61 69 74  44 72 61 6D 44 4D 41 28  76 6F 69 64 29 3B 0D 0A  void UltraWaitDramDMA(void);
000218E0  0D 0A 50 41 53 43 41 4C  3A 09 50 52 4F 43 45 44  55 52 45 20 55 6C 74 72  61 57 61 69 74 44 52 41  PASCAL:PROCEDURE UltraWaitDRA
00021900  4D 44 4D 41 3B 0D 0A 0D  0A 52 65 6D 61 72 6B 73  3A 09 49 66 20 61 20 44  4D 41 20 74 72 61 6E 73  MDMA;Remarks:If a DMA trans
00021920  66 65 72 20 74 6F 2F 66  72 6F 6D 20 44 52 41 4D  20 69 73 20 73 74 61 72  74 65 64 20 62 75 74 20  fer to/from DRAM is started but 
00021940  74 6F 6C 64 20 6E 6F 74  20 74 6F 20 77 61 69 74  20 66 6F 72 20 69 74 20  74 6F 20 63 6F 6D 70 6C  told not to wait for it to compl
00021960  65 74 65 2C 20 74 68 69  73 20 72 6F 75 74 69 6E  65 20 63 61 6E 20 62 65  20 75 73 65 64 20 74 6F  ete, this routine can be used to
00021980  20 77 61 69 74 20 75 6E  74 69 6C 20 69 74 20 68  61 73 20 63 6F 6D 70 6C  65 74 65 64 2E 0D 0A 0D   wait until it has completed.
000219A0  0A 53 65 65 20 61 6C 73  6F 3A 09 55 6C 74 72 61  44 6F 77 6E 6C 6F 61 64  2C 20 55 6C 74 72 61 55  See also:UltraDownload, UltraU
000219C0  70 6C 6F 61 64 0D 0A 0D  0A 0D 0A 0D 0A 55 6C 74  72 61 57 61 69 74 52 65  63 6F 72 64 44 4D 41 0D  ploadUltraWaitRecordDMA
000219E0  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  _______________________________
00021A00  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  6F 20 77 61 69 74 20 66  6F 72 20 61 20 72 65 63  __Purpose:To wait for a rec
00021A20  6F 72 64 69 6E 67 20 44  4D 41 20 74 72 61 6E 73  66 65 72 20 74 6F 20 63  6F 6D 70 6C 65 74 65 2E  ording DMA transfer to complete.
00021A40  0D 0A 0D 0A 43 3A 09 09  09 76 6F 69 64 20 55 6C  74 72 61 57 61 69 74 52  65 63 6F 72 64 44 4D 41  C:void UltraWaitRecordDMA
00021A60  28 76 6F 69 64 29 3B 0D  0A 0D 0A 50 41 53 43 41  4C 3A 09 50 52 4F 43 45  44 55 52 45 20 55 6C 74  (void);PASCAL:PROCEDURE Ult
00021A80  72 61 57 61 69 74 52 65  63 6F 72 64 44 4D 41 3B  0D 0A 0D 0A 52 65 6D 61  72 6B 73 3A 09 54 68 69  raWaitRecordDMA;Remarks:Thi
00021AA0  73 20 63 61 6E 20 62 65  20 75 73 65 64 20 74 6F  20 6C 65 74 20 61 6E 20  61 70 70 6C 69 63 61 74  s can be used to let an applicat
00021AC0  69 6F 6E 20 77 61 69 74  20 75 6E 74 69 6C 20 61  20 63 6F 6D 70 6C 65 74  65 20 73 61 6D 70 6C 65  ion wait until a complete sample
00021AE0  20 69 73 20 66 69 6E 69  73 68 65 64 20 62 65 69  6E 67 20 61 63 71 75 69  72 65 64 2E 0D 0A 0D 0A   is finished being acquired.
00021B00  53 65 65 20 61 6C 73 6F  3A 09 55 6C 74 72 61 52  65 63 6F 72 64 44 61 74  61 0D 0A 0D 0A 0D 0A 0C  See also:UltraRecordData
00021B20  55 6C 74 72 61 41 6C 6C  6F 63 56 6F 69 63 65 0D  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraAllocVoice_______________
00021B40  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  __________________Purpose:T
00021B60  6F 20 61 6C 6C 6F 63 61  74 65 20 61 20 6E 65 77  20 76 6F 69 63 65 20 6E  6F 74 20 63 75 72 72 65  o allocate a new voice not curre
00021B80  6E 74 6C 79 20 62 65 69  6E 67 20 75 73 65 64 2E  0D 0A 0D 0A 43 3A 09 09  09 69 6E 74 20 55 6C 74  ntly being used.C:int Ult
00021BA0  72 61 41 6C 6C 6F 63 56  6F 69 63 65 28 76 6F 69  63 65 5F 6E 75 6D 2C 6E  65 77 5F 6E 75 6D 29 3B  raAllocVoice(voice_num,new_num);
00021BC0  0D 0A 09 09 09 69 6E 74  20 76 6F 69 63 65 5F 6E  75 6D 3B 0D 0A 09 09 09  69 6E 74 20 2A 6E 65 77  int voice_num;int *new
00021BE0  5F 6E 75 6D 3B 0D 0A 0D  0A 50 41 53 43 41 4C 3A  09 46 55 4E 43 54 49 4F  4E 20 55 6C 74 72 61 41  _num;PASCAL:FUNCTION UltraA
00021C00  6C 6C 6F 63 56 6F 69 63  65 28 56 41 52 20 56 6F  69 63 65 5F 4E 75 6D 20  3A 20 49 4E 54 45 47 45  llocVoice(VAR Voice_Num : INTEGE
00021C20  52 29 20 3A 20 42 4F 4F  4C 45 41 4E 3B 0D 0A 0D  0A 52 65 6D 61 72 6B 73  3A 09 54 68 69 73 20 72  R) : BOOLEAN;Remarks:This r
00021C40  6F 75 74 69 6E 65 20 77  69 6C 6C 20 72 65 74 75  72 6E 20 61 20 76 6F 69  63 65 20 66 6F 72 20 79  outine will return a voice for y
00021C60  6F 75 72 20 61 70 70 6C  69 63 61 74 69 6F 6E 20  74 6F 20 75 73 65 2E 20  49 66 20 79 6F 75 20 73  our application to use. If you s
00021C80  75 70 70 6C 79 20 61 20  76 6F 69 63 65 20 6E 75  6D 62 65 72 2C 20 69 74  20 77 69 6C 6C 20 61 74  upply a voice number, it will at
00021CA0  74 65 6D 70 74 20 74 6F  20 61 6C 6C 6F 63 61 74  65 20 74 68 61 74 20 70  61 72 74 69 63 75 6C 61  tempt to allocate that particula
00021CC0  72 20 76 6F 69 63 65 2E  20 49 66 20 79 6F 75 20  70 61 73 73 20 61 20 2D  31 20 66 6F 72 20 74 68  r voice. If you pass a -1 for th
00021CE0  65 20 76 6F 69 63 65 20  6E 75 6D 62 65 72 2C 20  69 74 20 77 69 6C 6C 20  72 65 74 75 72 6E 20 74  e voice number, it will return t
00021D00  68 65 20 6E 65 78 74 20  66 72 65 65 20 76 6F 69  63 65 2E 20 54 68 69 73  20 72 6F 75 74 69 6E 65  he next free voice. This routine
00021D20  20 77 69 6C 6C 20 6F 6E  6C 79 20 61 6C 6C 6F 63  61 74 65 20 76 6F 69 63  65 73 20 75 70 20 74 6F   will only allocate voices up to
00021D40  20 74 68 65 20 23 20 6F  66 20 61 63 74 69 76 65  20 76 6F 69 63 65 73 20  73 70 65 63 69 66 69 65   the # of active voices specifie
00021D60  64 20 69 6E 20 74 68 65  20 55 6C 74 72 61 4F 70  65 6E 20 66 75 6E 63 74  69 6F 6E 2E 20 0D 0A 0D  d in the UltraOpen function. 
00021D80  0A 52 65 74 75 72 6E 73  3A 09 43 3A 20 55 4C 54  52 41 5F 4F 4B 20 20 20  20 20 20 20 20 20 20 20  Returns:C: ULTRA_OK           
00021DA0  20 20 47 6F 74 20 61 20  76 6F 69 63 65 20 6F 6B  0D 0A 09 09 09 20 20 20  56 4F 49 43 45 5F 4E 4F    Got a voice ok   VOICE_NO
00021DC0  54 5F 46 52 45 45 20 20  20 20 20 20 20 43 61 6E  27 74 20 67 65 74 20 74  68 65 20 76 6F 69 63 65  T_FREE       Can't get the voice
00021DE0  20 6F 72 20 6E 6F 6E 65  20 6C 65 66 74 2E 0D 0A  09 09 09 20 20 20 56 4F  49 43 45 5F 4F 55 54 5F   or none left.   VOICE_OUT_
00021E00  4F 46 5F 52 41 4E 47 45  20 20 20 53 70 65 63 69  66 69 65 64 20 76 6F 69  63 65 20 6F 75 74 20 6F  OF_RANGE   Specified voice out o
00021E20  66 20 72 61 6E 67 65 2E  0D 0A 0D 0A 09 09 09 50  41 53 43 41 4C 3A 20 54  52 55 45 20 69 66 20 74  f range.PASCAL: TRUE if t
00021E40  68 65 72 65 20 77 61 73  20 6E 6F 20 70 72 6F 62  6C 65 6D 20 61 6C 6C 6F  63 61 74 69 6E 67 20 74  here was no problem allocating t
00021E60  68 65 20 76 6F 69 63 65  2E 0D 0A 09 09 09 20 20  20 20 20 20 20 20 49 66  20 46 41 4C 53 45 2C 20  he voice.        If FALSE, 
00021E80  63 68 65 63 6B 20 55 6C  74 72 61 45 72 72 6F 72  53 74 72 20 66 6F 72 20  74 68 65 20 72 65 61 73  check UltraErrorStr for the reas
00021EA0  6F 6E 2E 0D 0A 0D 0A 53  65 65 20 61 6C 73 6F 3A  09 55 6C 74 72 61 43 6C  65 61 72 56 6F 69 63 65  on.See also:UltraClearVoice
00021EC0  73 2C 20 55 6C 74 72 61  46 72 65 65 56 6F 69 63  65 73 0D 0A 0D 0A 0D 0A  0D 0A 55 6C 74 72 61 43  s, UltraFreeVoicesUltraC
00021EE0  6C 65 61 72 56 6F 69 63  65 73 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  learVoices____________________
00021F00  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 72 65 73  _____________Purpose:To res
00021F20  65 74 20 61 6C 6C 20 76  6F 69 63 65 73 20 74 6F  20 61 6E 20 75 6E 2D 61  6C 6C 6F 63 61 74 65 64  et all voices to an un-allocated
00021F40  20 73 74 61 74 65 2E 0D  0A 0D 0A 43 3A 09 09 09  76 6F 69 64 20 55 6C 74  72 61 43 6C 65 61 72 56   state.C:void UltraClearV
00021F60  6F 69 63 65 73 28 76 6F  69 64 29 3B 0D 0A 0D 0A  50 41 53 43 41 4C 3A 09  50 52 4F 43 45 44 55 52  oices(void);PASCAL:PROCEDUR
00021F80  45 20 55 6C 74 72 61 43  6C 65 61 72 56 6F 69 63  65 73 3B 0D 0A 0D 0A 52  65 6D 61 72 6B 73 3A 09  E UltraClearVoices;Remarks:
00021FA0  54 68 69 73 20 72 6F 75  74 69 6E 65 20 77 69 6C  6C 20 64 65 61 6C 6C 6F  63 61 74 65 20 61 6C 6C  This routine will deallocate all
00021FC0  20 70 72 65 76 69 6F 75  73 6C 79 20 61 6C 6C 6F  63 61 74 65 64 20 76 6F  69 63 65 73 2E 20 49 74   previously allocated voices. It
00021FE0  20 77 6F 75 6C 64 20 62  65 20 61 64 76 69 73 61  62 6C 65 20 74 6F 20 63  61 6C 6C 20 74 68 69 73   would be advisable to call this
00022000  20 62 65 66 6F 72 65 20  75 73 69 6E 67 20 65 69  74 68 65 72 20 55 6C 74  72 61 41 6C 6C 6F 63 56   before using either UltraAllocV
00022020  6F 69 63 65 20 6F 72 20  55 6C 74 72 61 46 72 65  65 56 6F 69 63 65 2E 0D  0A 0D 0A 53 65 65 20 61  oice or UltraFreeVoice.See a
00022040  6C 73 6F 3A 09 55 6C 74  72 61 41 6C 6C 6F 63 56  6F 69 63 65 2C 20 55 6C  74 72 61 46 72 65 65 56  lso:UltraAllocVoice, UltraFreeV
00022060  6F 69 63 65 2E 0D 0A 0D  0A 0D 0A 0C 55 6C 74 72  61 46 72 65 65 56 6F 69  63 65 0D 0A 5F 5F 5F 5F  oice.UltraFreeVoice____
00022080  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  _____________________________
000220A0  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 66 72 65  65 20 75 70 20 61 6E 20  61 6C 6C 6F 63 61 74 65  Purpose:To free up an allocate
000220C0  64 20 76 6F 69 63 65 2E  0D 0A 0D 0A 43 3A 09 09  09 76 6F 69 64 20 55 6C  74 72 61 46 72 65 65 56  d voice.C:void UltraFreeV
000220E0  6F 69 63 65 28 76 6F 69  63 65 5F 6E 75 6D 29 3B  0D 0A 09 09 09 69 6E 74  20 76 6F 69 63 65 5F 6E  oice(voice_num);int voice_n
00022100  75 6D 3B 0D 0A 0D 0A 50  41 53 43 41 4C 3A 09 50  52 4F 43 45 44 55 52 45  20 55 6C 74 72 61 46 72  um;PASCAL:PROCEDURE UltraFr
00022120  65 65 56 6F 69 63 65 28  56 6F 69 63 65 5F 4E 75  6D 20 3A 20 49 4E 54 45  47 45 52 29 3B 0D 0A 0D  eeVoice(Voice_Num : INTEGER);
00022140  0A 52 65 6D 61 72 6B 73  3A 09 54 68 69 73 20 72  6F 75 74 69 6E 65 20 77  69 6C 6C 20 66 72 65 65  Remarks:This routine will free
00022160  20 75 70 20 61 20 70 72  65 76 69 6F 75 73 6C 79  20 61 6C 6C 6F 63 61 74  65 64 20 76 6F 69 63 65   up a previously allocated voice
00022180  2E 20 54 68 69 73 20 73  68 6F 75 6C 64 20 62 65  20 75 73 65 64 20 77 68  65 6E 20 79 6F 75 72 20  . This should be used when your 
000221A0  61 70 70 6C 69 63 61 74  69 6F 6E 20 6E 6F 20 6C  6F 6E 67 65 72 20 6E 65  65 64 73 20 74 68 65 20  application no longer needs the 
000221C0  76 6F 69 63 65 20 73 6F  20 69 74 20 63 61 6E 20  62 65 20 72 65 2D 61 6C  6C 6F 63 61 74 65 64 20  voice so it can be re-allocated 
000221E0  61 74 20 61 6E 6F 74 68  65 72 20 74 69 6D 65 2E  0D 0A 0D 0A 53 65 65 20  61 6C 73 6F 3A 09 55 6C  at another time.See also:Ul
00022200  74 72 61 43 6C 65 61 72  56 6F 69 63 65 73 2C 20  55 6C 74 72 61 41 6C 6C  6F 63 56 6F 69 63 65 2E  traClearVoices, UltraAllocVoice.
00022220  0D 0A 0D 0A 0D 0A 0D 0A  55 6C 74 72 61 56 6F 69  63 65 4F 66 66 0D 0A 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraVoiceOff_________
00022240  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  0D 0A 0D 0A 50 75 72 70  ________________________Purp
00022260  6F 73 65 3A 09 54 6F 20  61 6C 6C 6F 77 20 66 6C  65 78 69 62 69 6C 69 74  79 20 69 6E 20 73 74 6F  ose:To allow flexibility in sto
00022280  70 70 69 6E 67 20 61 20  76 6F 69 63 65 2E 0D 0A  0D 0A 43 3A 09 09 09 76  6F 69 64 20 55 6C 74 72  pping a voice.C:void Ultr
000222A0  61 56 6F 69 63 65 4F 66  66 28 76 6F 69 63 65 2C  65 6E 64 29 3B 0D 0A 09  09 09 69 6E 74 20 76 6F  aVoiceOff(voice,end);int vo
000222C0  69 63 65 3B 0D 0A 09 09  09 69 6E 74 20 65 6E 64  3B 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 50 52 4F  ice;int end;PASCAL:PRO
000222E0  43 45 44 55 52 45 20 55  6C 74 72 61 56 6F 69 63  65 4F 66 66 28 56 6F 69  63 65 20 3A 20 49 4E 54  CEDURE UltraVoiceOff(Voice : INT
00022300  45 47 45 52 3B 0D 0A 09  09 09 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  EGER;                      
00022320  20 20 56 45 6E 64 20 20  3A 20 42 4F 4F 4C 45 41  4E 29 3B 0D 0A 0D 0A 52  65 6D 61 72 6B 73 3A 09    VEnd  : BOOLEAN);Remarks:
00022340  54 68 69 73 20 72 6F 75  74 69 6E 65 20 77 69 6C  6C 20 65 69 74 68 65 72  20 73 74 6F 70 20 61 20  This routine will either stop a 
00022360  76 6F 69 63 65 20 69 6D  6D 65 64 69 61 74 65 6C  79 20 6F 72 20 6C 65 74  20 69 74 20 66 69 6E 69  voice immediately or let it fini
00022380  73 68 20 69 74 73 20 63  75 72 72 65 6E 74 20 6C  6F 6F 70 2E 20 20 49 66  20 27 56 45 6E 64 27 20  sh its current loop.  If 'VEnd' 
000223A0  69 73 20 46 41 4C 53 45  20 74 68 65 6E 20 69 74  20 77 69 6C 6C 20 73 74  6F 70 20 61 62 72 75 70  is FALSE then it will stop abrup
000223C0  74 6C 79 2C 20 6F 74 68  65 72 77 69 73 65 20 69  74 20 77 69 6C 6C 20 66  69 6E 69 73 68 20 74 68  tly, otherwise it will finish th
000223E0  65 20 63 75 72 72 65 6E  74 20 6C 6F 6F 70 2E 20  20 55 6C 74 72 61 52 65  61 64 56 6F 69 63 65 20  e current loop.  UltraReadVoice 
00022400  63 6F 75 6C 64 20 62 65  20 63 61 6C 6C 65 64 20  61 66 74 65 72 77 61 72  64 73 20 69 66 20 79 6F  could be called afterwards if yo
00022420  75 20 6E 65 65 64 20 74  6F 20 6B 6E 6F 77 20 77  68 65 72 65 20 74 68 65  20 6C 6F 6F 70 20 66 69  u need to know where the loop fi
00022440  6E 69 73 68 65 64 2E 20  20 0D 0A 09 09 09 49 66  20 75 73 65 64 20 77 69  74 68 20 55 6C 74 72 61  nished.  If used with Ultra
00022460  53 65 74 56 6F 69 63 65  45 6E 64 2C 20 79 6F 75  20 63 6F 75 6C 64 20 69  6D 70 6C 65 6D 65 6E 74  SetVoiceEnd, you could implement
00022480  20 61 20 73 61 6D 70 6C  65 64 20 64 65 63 61 79  20 6F 6E 20 74 68 65 20  65 6E 64 20 6F 66 20 79   a sampled decay on the end of y
000224A0  6F 75 72 20 73 61 6D 70  6C 65 2E 20 20 54 68 69  73 20 77 6F 75 6C 64 20  6F 63 63 75 72 20 69 66  our sample.  This would occur if
000224C0  20 79 6F 75 72 20 6C 6F  6F 70 20 70 6F 69 6E 74  20 77 61 73 20 6E 6F 74  20 61 74 20 74 68 65 20   your loop point was not at the 
000224E0  65 6E 64 20 6F 66 20 79  6F 75 72 20 64 61 74 61  2C 20 61 6E 64 20 79 6F  75 20 63 68 61 6E 67 65  end of your data, and you change
00022500  64 20 74 68 65 20 65 6E  64 20 70 6F 69 6E 74 20  74 6F 20 74 68 65 20 72  65 61 6C 20 65 6E 64 20  d the end point to the real end 
00022520  70 6F 69 6E 74 20 6F 66  20 79 6F 75 72 20 64 61  74 61 20 61 6E 64 20 74  68 65 6E 20 63 61 6C 6C  point of your data and then call
00022540  65 64 20 74 68 69 73 20  72 6F 75 74 69 6E 65 20  77 69 74 68 20 56 45 6E  64 20 73 65 74 20 74 6F  ed this routine with VEnd set to
00022560  20 54 52 55 45 2E 0D 0A  0D 0A 53 65 65 20 61 6C  73 6F 3A 09 55 6C 74 72  61 52 65 61 64 56 6F 69   TRUE.See also:UltraReadVoi
00022580  63 65 2C 20 55 6C 74 72  61 53 65 74 56 6F 69 63  65 45 6E 64 0D 0A 0D 0A  0D 0A 0C 55 6C 74 72 61  ce, UltraSetVoiceEndUltra
000225A0  56 6F 69 63 65 4F 6E 0D  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  VoiceOn_______________________
000225C0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  6F 20 74 75 72 6E 20 61  __________Purpose:To turn a
000225E0  20 76 6F 69 63 65 20 6F  6E 20 61 74 20 61 20 67  69 76 65 6E 20 66 72 65  71 75 65 6E 63 79 2E 0D   voice on at a given frequency.
00022600  0A 0D 0A 43 3A 09 09 09  76 6F 69 64 20 55 6C 74  72 61 56 6F 69 63 65 4F  6E 28 76 6F 69 63 65 2C  C:void UltraVoiceOn(voice,
00022620  62 65 67 69 6E 2C 73 5F  6C 6F 6F 70 2C 65 5F 6C  6F 6F 70 2C 63 6F 6E 74  72 6F 6C 2C 66 72 65 71  begin,s_loop,e_loop,control,freq
00022640  29 3B 0D 0A 09 09 09 69  6E 74 20 76 6F 69 63 65  3B 0D 0A 09 09 09 75 6E  73 69 67 6E 65 64 20 6C  );int voice;unsigned l
00022660  6F 6E 67 20 62 65 67 69  6E 3B 0D 0A 09 09 09 75  6E 73 69 67 6E 65 64 20  6C 6F 6E 67 20 73 5F 6C  ong begin;unsigned long s_l
00022680  6F 6F 70 3B 0D 0A 09 09  09 75 6E 73 69 67 6E 65  64 20 6C 6F 6E 67 20 65  5F 6C 6F 6F 70 3B 0D 0A  oop;unsigned long e_loop;
000226A0  09 09 09 75 6E 73 69 67  6E 65 64 20 63 68 61 72  20 63 6F 6E 74 72 6F 6C  3B 0D 0A 09 09 09 75 6E  unsigned char control;un
000226C0  73 69 67 6E 65 64 20 6C  6F 6E 67 20 66 72 65 71  3B 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 50 52 4F  signed long freq;PASCAL:PRO
000226E0  43 45 44 55 52 45 20 55  6C 74 72 61 56 6F 69 63  65 4F 6E 28 56 6F 69 63  65 20 20 20 20 20 20 3A  CEDURE UltraVoiceOn(Voice      :
00022700  20 49 4E 54 45 47 45 52  3B 0D 0A 09 09 09 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20   INTEGER;                  
00022720  20 20 20 20 20 56 42 65  67 69 6E 20 20 20 20 20  3A 20 4C 4F 4E 47 49 4E  54 3B 0D 0A 09 09 09 20       VBegin     : LONGINT; 
00022740  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 53 74  61 72 74 5F 4C 6F 6F 70                        Start_Loop
00022760  20 3A 20 4C 4F 4E 47 49  4E 54 3B 0D 0A 09 09 09  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20   : LONGINT;                
00022780  20 20 20 20 20 20 20 45  6E 64 5F 4C 6F 6F 70 20  20 20 3A 20 4C 4F 4E 47  49 4E 54 3B 0D 0A 09 09         End_Loop   : LONGINT;
000227A0  09 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  43 6F 6E 74 72 6F 6C 20                         Control 
000227C0  20 20 20 3A 20 42 59 54  45 3B 0D 0A 09 09 09 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20     : BYTE;                 
000227E0  20 20 20 20 20 20 46 72  65 71 20 20 20 20 20 20  20 3A 20 4C 4F 4E 47 49  4E 54 29 3B 0D 0A 0D 0A        Freq       : LONGINT);
00022800  52 65 6D 61 72 6B 73 3A  09 54 68 69 73 20 72 6F  75 74 69 6E 65 20 6A 75  73 74 20 73 65 74 73 20  Remarks:This routine just sets 
00022820  74 68 65 20 66 72 65 71  75 65 6E 63 79 20 77 69  74 68 20 55 6C 74 72 61  53 65 74 46 72 65 71 75  the frequency with UltraSetFrequ
00022840  65 6E 63 79 20 61 6E 64  20 74 68 65 6E 20 63 61  6C 6C 73 20 55 6C 74 72  61 53 74 61 72 74 56 6F  ency and then calls UltraStartVo
00022860  69 63 65 2E 0D 0A 0D 0A  53 65 65 20 61 6C 73 6F  3A 09 55 6C 74 72 61 53  65 74 46 72 65 71 75 65  ice.See also:UltraSetFreque
00022880  6E 63 79 2C 20 55 6C 74  72 61 53 74 61 72 74 56  6F 69 63 65 0D 0A 0D 0A  0D 0A 0D 0A 55 6C 74 72  ncy, UltraStartVoiceUltr
000228A0  61 53 65 74 4C 69 6E 65  61 72 56 6F 6C 75 6D 65  0D 0A 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  aSetLinearVolume______________
000228C0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 0D 0A 0D 0A 50  75 72 70 6F 73 65 3A 09  ___________________Purpose:
000228E0  54 6F 20 73 65 74 20 61  20 76 6F 69 63 65 27 73  20 76 6F 6C 75 6D 65 20  74 6F 20 61 20 6C 69 6E  To set a voice's volume to a lin
00022900  65 61 72 69 7A 65 64 20  76 61 6C 75 65 2E 0D 0A  0D 0A 43 3A 09 09 09 76  6F 69 64 20 55 6C 74 72  earized value.C:void Ultr
00022920  61 53 65 74 4C 69 6E 65  61 72 56 6F 6C 75 6D 65  28 76 6F 69 63 65 2C 69  6E 64 65 78 29 3B 0D 0A  aSetLinearVolume(voice,index);
00022940  09 09 09 69 6E 74 20 76  6F 69 63 65 3B 0D 0A 09  09 09 69 6E 74 20 69 6E  64 65 78 3B 0D 0A 0D 0A  int voice;int index;
00022960  50 41 53 43 41 4C 3A 09  50 52 4F 43 45 44 55 52  45 20 55 6C 74 72 61 53  65 74 4C 69 6E 65 61 72  PASCAL:PROCEDURE UltraSetLinear
00022980  56 6F 6C 75 6D 65 28 56  6F 69 63 65 20 3A 20 49  4E 54 45 47 45 52 3B 0D  0A 09 09 09 20 20 20 20  Volume(Voice : INTEGER;    
000229A0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 49 6E 64 65 78                             Index
000229C0  20 3A 20 49 4E 54 45 47  45 52 29 3B 0D 0A 0D 0A  52 65 6D 61 72 6B 73 3A  09 54 68 69 73 20 72 6F   : INTEGER);Remarks:This ro
000229E0  75 74 69 6E 65 20 69 6E  64 65 78 65 73 20 69 6E  74 6F 20 61 20 74 61 62  6C 65 20 74 6F 20 74 72  utine indexes into a table to tr
00022A00  61 6E 73 6C 61 74 65 20  61 20 6C 69 6E 65 61 72  20 76 6F 6C 75 6D 65 20  28 30 2D 35 31 31 29 20  anslate a linear volume (0-511) 
00022A20  74 6F 20 61 20 6C 6F 67  61 72 69 74 68 6D 69 63  20 6F 6E 65 20 28 30 2D  34 30 39 35 29 2C 20 61  to a logarithmic one (0-4095), a
00022A40  6E 64 20 74 68 65 6E 20  63 61 6C 6C 73 20 55 6C  74 72 61 53 65 74 56 6F  6C 75 6D 65 2E 0D 0A 0D  nd then calls UltraSetVolume.
00022A60  0A 53 65 65 20 61 6C 73  6F 3A 09 55 6C 74 72 61  53 65 74 56 6F 6C 75 6D  65 0D 0A 0D 0A 0D 0A 0C  See also:UltraSetVolume
00022A80  55 6C 74 72 61 52 65 61  64 4C 69 6E 65 61 72 56  6F 6C 75 6D 65 0D 0A 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraReadLinearVolume_________
00022AA0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  0D 0A 0D 0A 50 75 72 70  ________________________Purp
00022AC0  6F 73 65 3A 09 54 6F 20  72 65 61 64 20 61 20 76  6F 69 63 65 27 73 20 76  6F 6C 75 6D 65 20 61 73  ose:To read a voice's volume as
00022AE0  20 61 20 6C 69 6E 65 61  72 20 76 61 6C 75 65 2E  0D 0A 0D 0A 43 3A 09 09  09 54 68 69 73 20 66 75   a linear value.C:This fu
00022B00  6E 63 74 69 6F 6E 20 69  73 20 6E 6F 74 20 61 76  61 69 6C 61 62 6C 65 2E  0D 0A 0D 0A 50 41 53 43  nction is not available.PASC
00022B20  41 4C 3A 09 46 55 4E 43  54 49 4F 4E 20 55 6C 74  72 61 52 65 61 64 4C 69  6E 65 61 72 56 6F 6C 75  AL:FUNCTION UltraReadLinearVolu
00022B40  6D 65 28 56 6F 69 63 65  20 3A 20 49 4E 54 45 47  45 52 29 20 3A 20 49 4E  54 45 47 45 52 3B 0D 0A  me(Voice : INTEGER) : INTEGER;
00022B60  0D 0A 52 65 6D 61 72 6B  73 3A 09 54 68 69 73 20  72 6F 75 74 69 6E 65 20  69 6E 64 65 78 65 73 20  Remarks:This routine indexes 
00022B80  69 6E 74 6F 20 61 20 74  61 62 6C 65 20 74 6F 20  74 72 61 6E 73 6C 61 74  65 20 61 20 30 2D 34 30  into a table to translate a 0-40
00022BA0  39 35 20 6C 6F 67 61 72  69 74 68 6D 69 63 20 76  6F 6C 75 6D 65 20 74 6F  20 61 20 30 2D 35 31 31  95 logarithmic volume to a 0-511
00022BC0  20 6C 69 6E 65 61 72 20  76 6F 6C 75 6D 65 2E 0D  0A 0D 0A 52 65 74 75 72  6E 73 3A 09 4C 69 6E 65   linear volume.Returns:Line
00022BE0  61 72 20 56 6F 6C 75 6D  65 20 56 61 6C 75 65 20  28 30 2D 35 31 31 29 2E  0D 0A 0D 0A 53 65 65 20  ar Volume Value (0-511).See 
00022C00  61 6C 73 6F 3A 09 55 6C  74 72 61 53 65 74 56 6F  6C 75 6D 65 2C 20 55 6C  74 72 61 53 65 74 4C 69  also:UltraSetVolume, UltraSetLi
00022C20  6E 65 61 72 56 6F 6C 75  6D 65 0D 0A 0D 0A 0D 0A  0D 0A 55 6C 74 72 61 52  61 6D 70 4C 69 6E 65 61  nearVolumeUltraRampLinea
00022C40  72 56 6F 6C 75 6D 65 0D  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  rVolume_______________________
00022C60  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  6F 20 72 61 6D 70 20 61  __________Purpose:To ramp a
00022C80  20 76 6F 69 63 65 27 73  20 76 6F 6C 75 6D 65 20  62 65 74 77 65 65 6E 20  6C 69 6E 65 61 72 20 76   voice's volume between linear v
00022CA0  6F 6C 75 6D 65 20 76 61  6C 75 65 73 2E 0D 0A 0D  0A 43 3A 09 09 09 76 6F  69 64 20 55 6C 74 72 61  olume values.C:void Ultra
00022CC0  52 61 6D 70 4C 69 6E 65  61 72 56 6F 6C 75 6D 65  28 76 6F 69 63 65 2C 73  74 61 72 74 2C 65 6E 64  RampLinearVolume(voice,start,end
00022CE0  2C 6D 73 65 63 73 2C 6D  6F 64 65 29 3B 0D 0A 09  09 09 69 6E 74 20 76 6F  69 63 65 3B 0D 0A 09 09  ,msecs,mode);int voice;
00022D00  09 75 6E 73 69 67 6E 65  64 20 69 6E 74 20 73 74  61 72 74 3B 0D 0A 09 09  09 75 6E 73 69 67 6E 65  unsigned int start;unsigne
00022D20  64 20 69 6E 74 20 65 6E  64 3B 20 20 0D 0A 09 09  09 75 6E 73 69 67 6E 65  64 20 6C 6F 6E 67 20 6D  d int end;  unsigned long m
00022D40  73 65 63 73 3B 0D 0A 09  09 09 75 6E 73 69 67 6E  65 64 20 63 68 61 72 20  6D 6F 64 65 3B 0D 0A 0D  secs;unsigned char mode;
00022D60  0A 50 41 53 43 41 4C 3A  09 50 52 4F 43 45 44 55  52 45 20 55 6C 74 72 61  52 61 6D 70 4C 69 6E 65  PASCAL:PROCEDURE UltraRampLine
00022D80  61 72 56 6F 6C 75 6D 65  28 56 6F 69 63 65 20 20  20 20 20 3A 20 49 4E 54  45 47 45 52 3B 0D 0A 09  arVolume(Voice     : INTEGER;
00022DA0  09 09 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20                                
00022DC0  20 20 53 74 61 72 74 5F  49 64 78 20 3A 20 57 4F  52 44 3B 0D 0A 09 09 09  20 20 20 20 20 20 20 20    Start_Idx : WORD;        
00022DE0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  45 6E 64 5F 49 64 78 20                          End_Idx 
00022E00  20 20 3A 20 57 4F 52 44  3B 0D 0A 09 09 09 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20    : WORD;                  
00022E20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 4D 73  65 63 73 20 20 20 20 20  3A 20 4C 4F 4E 47 49 4E                Msecs     : LONGIN
00022E40  54 3B 0D 0A 09 09 09 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  T;                         
00022E60  20 20 20 20 20 20 20 56  4D 6F 64 65 20 20 20 20  20 3A 20 42 59 54 45 29  3B 0D 0A 0D 0A 52 65 6D         VMode     : BYTE);Rem
00022E80  61 72 6B 73 3A 09 54 68  69 73 20 72 6F 75 74 69  6E 65 20 69 73 20 75 73  65 64 20 74 6F 20 72 61  arks:This routine is used to ra
00022EA0  6D 70 20 62 65 74 77 65  65 6E 20 6C 69 6E 65 61  72 20 76 6F 6C 75 6D 65  20 73 65 74 74 69 6E 67  mp between linear volume setting
00022EC0  73 2E 20 20 49 74 20 75  73 65 73 20 74 68 65 20  73 61 6D 65 20 6D 65 74  68 6F 64 20 61 73 20 55  s.  It uses the same method as U
00022EE0  6C 74 72 61 53 65 74 4C  69 6E 65 61 72 56 6F 6C  75 6D 65 20 74 6F 20 64  65 74 65 72 6D 69 6E 65  ltraSetLinearVolume to determine
00022F00  20 74 68 65 20 61 63 74  75 61 6C 20 76 6F 6C 75  6D 65 20 73 65 74 74 69  6E 67 73 20 74 6F 20 75   the actual volume settings to u
00022F20  73 65 2C 20 61 6E 64 20  74 68 65 6E 20 63 61 6C  6C 73 20 55 6C 74 72 61  52 61 6D 70 56 6F 6C 75  se, and then calls UltraRampVolu
00022F40  6D 65 2E 0D 0A 0D 0A 53  65 65 20 61 6C 73 6F 3A  09 55 6C 74 72 61 52 61  6D 70 56 6F 6C 75 6D 65  me.See also:UltraRampVolume
00022F60  2C 20 55 6C 74 72 61 53  65 74 4C 69 6E 65 61 72  56 6F 6C 75 6D 65 0D 0A  0D 0A 0D 0A 0C 55 6C 74  , UltraSetLinearVolumeUlt
00022F80  72 61 56 65 63 74 6F 72  4C 69 6E 65 61 72 56 6F  6C 75 6D 65 0D 0A 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  raVectorLinearVolume__________
00022FA0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  0A 0D 0A 50 75 72 70 6F  _______________________Purpo
00022FC0  73 65 3A 09 54 6F 20 72  61 6D 70 20 61 20 6C 69  6E 65 61 72 20 76 6F 6C  75 6D 65 20 66 72 6F 6D  se:To ramp a linear volume from
00022FE0  20 69 74 27 73 20 63 75  72 72 65 6E 74 20 70 6F  73 69 74 69 6F 6E 20 74  6F 20 61 20 6B 6E 6F 77   it's current position to a know
00023000  6E 20 65 6E 64 20 70 6F  69 6E 74 2E 0D 0A 0D 0A  43 3A 09 09 09 76 6F 69  64 20 55 6C 74 72 61 56  n end point.C:void UltraV
00023020  65 63 74 6F 72 4C 69 6E  65 61 72 56 6F 6C 75 6D  65 28 76 6F 69 63 65 2C  65 6E 64 2C 72 61 74 65  ectorLinearVolume(voice,end,rate
00023040  2C 6D 6F 64 65 29 0D 0A  09 09 09 69 6E 74 20 76  6F 69 63 65 3B 0D 0A 09  09 09 75 6E 73 69 67 6E  ,mode)int voice;unsign
00023060  65 64 20 69 6E 74 20 65  6E 64 3B 0D 0A 09 09 09  75 6E 73 69 67 6E 65 64  20 63 68 61 72 20 72 61  ed int end;unsigned char ra
00023080  74 65 3B 0D 0A 09 09 09  75 6E 73 69 67 6E 65 64  20 63 68 61 72 20 6D 6F  64 65 3B 0D 0A 0D 0A 50  te;unsigned char mode;P
000230A0  41 53 43 41 4C 3A 09 50  52 4F 43 45 44 55 52 45  20 55 6C 74 72 61 56 65  63 74 6F 72 4C 69 6E 65  ASCAL:PROCEDURE UltraVectorLine
000230C0  61 72 56 6F 6C 75 6D 65  28 56 6F 69 63 65 20 20  20 3A 20 49 4E 54 45 47  45 52 3B 0D 0A 09 09 09  arVolume(Voice   : INTEGER;
000230E0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20                                  
00023100  20 20 45 6E 64 5F 49 64  78 20 3A 20 57 4F 52 44  3B 0D 0A 09 09 09 20 20  20 20 20 20 20 20 20 20    End_Idx : WORD;          
00023120  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  56 52 61 74 65 20 20 20                          VRate   
00023140  3A 20 42 59 54 45 3B 0D  0A 09 09 09 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  : BYTE;                    
00023160  20 20 20 20 20 20 20 20  20 20 20 20 20 20 56 4D  6F 64 65 20 20 20 3A 20  42 59 54 45 29 3B 0D 0A                VMode   : BYTE);
00023180  0D 0A 52 65 6D 61 72 6B  73 3A 09 54 68 69 73 20  72 6F 75 74 69 6E 65 20  63 61 6E 20 62 65 20 75  Remarks:This routine can be u
000231A0  73 65 64 20 74 6F 20 72  61 6D 70 20 66 72 6F 6D  20 61 6E 20 75 6E 6B 6E  6F 77 6E 20 76 6F 6C 75  sed to ramp from an unknown volu
000231C0  6D 65 20 74 6F 20 61 20  6E 65 77 20 6C 69 6E 65  61 72 20 76 6F 6C 75 6D  65 2E 20 20 49 74 20 69  me to a new linear volume.  It i
000231E0  73 20 75 73 65 66 75 6C  20 69 66 20 79 6F 75 20  61 72 65 20 64 6F 69 6E  67 20 76 6F 6C 75 6D 65  s useful if you are doing volume
00023200  20 65 6E 76 65 6C 6F 70  65 73 20 61 6E 64 20 6E  65 65 64 20 74 6F 20 72  65 73 74 61 72 74 20 74   envelopes and need to restart t
00023220  68 65 20 61 74 74 61 63  6B 2F 64 65 63 61 79 20  73 65 71 75 65 6E 63 65  20 61 74 20 61 6E 79 20  he attack/decay sequence at any 
00023240  74 69 6D 65 2E 20 20 49  74 20 63 61 6E 20 61 6C  73 6F 20 70 72 6F 64 75  63 65 20 61 20 73 6D 6F  time.  It can also produce a smo
00023260  6F 74 68 65 72 20 72 61  6D 70 20 66 72 6F 6D 20  6F 6E 65 20 76 6F 6C 75  6D 65 20 74 6F 20 61 6E  other ramp from one volume to an
00023280  6F 74 68 65 72 2C 20 73  69 6E 63 65 20 61 72 62  69 74 72 61 72 69 6C 79  20 73 65 74 74 69 6E 67  other, since arbitrarily setting
000232A0  20 61 20 76 6F 6C 75 6D  65 20 74 68 61 74 20 69  73 20 66 61 72 20 61 77  61 79 20 66 72 6F 6D 20   a volume that is far away from 
000232C0  74 68 65 20 63 75 72 72  65 6E 74 20 76 6F 6C 75  6D 65 20 63 61 6E 20 63  61 75 73 65 20 27 70 6F  the current volume can cause 'po
000232E0  70 73 27 2E 0D 0A 0D 0A  53 65 65 20 61 6C 73 6F  3A 09 55 6C 74 72 61 53  65 74 4C 69 6E 65 61 72  ps'.See also:UltraSetLinear
00023300  56 6F 6C 75 6D 65 2C 20  55 6C 74 72 61 52 65 61  64 4C 69 6E 65 61 72 56  6F 6C 75 6D 65 0D 0A 0D  Volume, UltraReadLinearVolume
00023320  0A 0D 0A 0C 43 68 61 70  74 65 72 20 35 20 2D 20  46 6F 63 61 6C 20 50 6F  69 6E 74 20 33 44 20 53  Chapter 5 - Focal Point 3D S
00023340  6F 75 6E 64 0D 0A 0D 0A  35 2E 30 20 49 6E 74 72  6F 64 75 63 74 69 6F 6E  0D 0A 0D 0A 54 68 72 65  ound5.0 IntroductionThre
00023360  65 20 64 69 6D 65 6E 73  69 6F 6E 61 6C 20 61 75  64 69 6F 20 6F 6E 20 74  68 65 20 55 6C 74 72 61  e dimensional audio on the Ultra
00023380  53 6F 75 6E 64 20 69 73  20 61 63 68 69 65 76 65  64 20 62 79 20 61 20 74  65 63 68 6E 69 71 75 65  Sound is achieved by a technique
000233A0  20 63 61 6C 6C 65 64 20  62 69 6E 61 75 72 61 6C  20 72 65 70 72 65 73 65  6E 74 61 74 69 6F 6E 2E   called binaural representation.
000233C0  20 20 42 61 73 69 63 61  6C 6C 79 2C 20 74 68 69  73 20 6D 65 61 6E 73 20  74 68 61 74 20 61 20 6D    Basically, this means that a m
000233E0  6F 6E 6F 20 73 6F 75 6E  64 20 69 73 20 27 73 68  61 70 65 64 27 20 69 6E  20 73 75 63 68 20 61 20  ono sound is 'shaped' in such a 
00023400  77 61 79 20 74 68 61 74  20 77 68 65 6E 20 69 74  20 69 73 20 70 72 65 73  65 6E 74 65 64 20 74 6F  way that when it is presented to
00023420  20 74 68 65 20 72 69 67  68 74 20 61 6E 64 20 6C  65 66 74 20 65 61 72 73  20 70 72 6F 70 65 72 6C   the right and left ears properl
00023440  79 2C 20 74 68 65 20 73  6F 75 6E 64 20 73 65 65  6D 73 20 74 6F 20 63 6F  6D 65 20 66 72 6F 6D 20  y, the sound seems to come from 
00023460  74 68 65 20 70 72 6F 70  65 72 20 70 6C 61 63 65  20 69 6E 20 73 70 61 63  65 2E 20 20 54 68 69 73  the proper place in space.  This
00023480  20 74 65 63 68 6E 69 71  75 65 20 69 73 20 61 6C  73 6F 20 63 61 6C 6C 65  64 20 63 6F 6E 76 6F 6C   technique is also called convol
000234A0  75 74 69 6F 6E 2E 20 20  54 68 69 73 20 69 73 20  64 6F 6E 65 20 74 68 72  75 20 61 6C 67 6F 72 69  ution.  This is done thru algori
000234C0  74 68 6D 73 20 64 65 76  65 6C 6F 70 65 64 20 62  79 20 46 6F 63 61 6C 20  50 6F 69 6E 74 28 74 6D  thms developed by Focal Point(tm
000234E0  29 20 33 44 20 41 75 64  69 6F 2E 20 20 46 6F 63  61 6C 20 50 6F 69 6E 74  20 68 61 73 20 70 72 6F  ) 3D Audio.  Focal Point has pro
00023500  76 69 64 65 64 20 61 20  75 74 69 6C 69 74 79 20  28 63 61 6C 6C 65 64 20  46 50 33 44 2E 45 58 45  vided a utility (called FP3D.EXE
00023520  29 20 74 6F 20 63 6F 6E  76 65 72 74 20 61 20 6D  6F 6E 6F 20 73 6F 75 6E  64 20 66 69 6C 65 20 74  ) to convert a mono sound file t
00023540  6F 20 61 20 33 44 20 66  69 6C 65 20 63 61 70 61  62 6C 65 20 6F 66 20 62  65 69 6E 67 20 70 6C 61  o a 3D file capable of being pla
00023560  79 65 64 20 6F 6E 20 61  6E 20 55 6C 74 72 61 53  6F 75 6E 64 2E 20 20 54  68 65 20 62 61 73 69 63  yed on an UltraSound.  The basic
00023580  20 63 6F 6E 63 65 70 74  20 69 73 20 74 68 61 74  20 74 68 65 20 6D 6F 6E  6F 20 73 6F 75 6E 64 20   concept is that the mono sound 
000235A0  69 73 20 70 72 6F 63 65  73 73 65 64 20 69 6E 20  73 75 63 68 20 61 20 77  61 79 20 74 68 61 74 20  is processed in such a way that 
000235C0  74 68 65 20 66 69 6C 65  20 74 68 61 74 20 69 73  20 6F 75 74 70 75 74 20  63 6F 6E 74 61 69 6E 73  the file that is output contains
000235E0  20 75 70 20 74 6F 20 36  20 74 72 61 63 6B 73 20  6F 66 20 73 6F 75 6E 64  2E 20 20 57 68 65 6E 20   up to 6 tracks of sound.  When 
00023600  74 68 65 20 73 6F 75 6E  64 20 69 73 20 70 6C 61  79 65 64 20 62 61 63 6B  2C 20 74 68 65 20 76 6F  the sound is played back, the vo
00023620  6C 75 6D 65 73 20 61 6E  64 20 62 61 6C 61 6E 63  65 73 20 61 72 65 20 61  64 6A 75 73 74 65 64 20  lumes and balances are adjusted 
00023640  74 6F 20 6D 61 6B 65 20  74 68 65 20 73 6F 75 6E  64 20 61 70 70 65 61 72  20 74 6F 20 6F 72 69 67  to make the sound appear to orig
00023660  69 6E 61 74 65 20 66 72  6F 6D 20 61 6E 79 77 68  65 72 65 20 69 6E 20 74  68 65 20 33 44 20 73 70  inate from anywhere in the 3D sp
00023680  61 63 65 2E 20 20 49 74  20 69 73 20 70 6F 73 73  69 62 6C 65 20 74 6F 20  63 72 65 61 74 65 20 66  ace.  It is possible to create f
000236A0  69 6C 65 73 20 74 68 61  74 20 6F 6E 6C 79 20 68  61 76 65 20 34 20 74 72  61 63 6B 73 20 61 6E 64  iles that only have 4 tracks and
000236C0  20 63 61 6E 20 74 68 65  72 65 66 6F 72 65 20 6F  6E 6C 79 20 62 65 20 70  6F 73 69 74 69 6F 6E 65   can therefore only be positione
000236E0  64 20 69 6E 20 32 20 64  69 6D 65 6E 73 69 6F 6E  73 2E 20 20 54 68 69 73  20 6D 61 79 20 62 65 20  d in 2 dimensions.  This may be 
00023700  61 64 65 71 75 61 74 65  20 66 6F 72 20 6D 61 6E  79 20 61 70 70 6C 69 63  61 74 69 6F 6E 73 20 61  adequate for many applications a
00023720  6E 64 20 69 74 20 77 69  6C 6C 20 6D 61 6B 65 20  74 68 65 20 72 65 73 75  6C 74 61 6E 74 20 66 69  nd it will make the resultant fi
00023740  6C 65 20 73 6D 61 6C 6C  65 72 2E 0D 0A 0D 0A 54  68 65 72 65 20 61 72 65  20 32 20 74 79 70 65 73  le smaller.There are 2 types
00023760  20 6F 66 20 33 44 20 73  6F 75 6E 64 20 74 68 61  74 20 61 6E 20 61 70 70  6C 69 63 61 74 69 6F 6E   of 3D sound that an application
00023780  20 6D 69 67 68 74 20 77  61 6E 74 20 74 6F 20 75  73 65 2E 20 20 54 68 65  20 66 69 72 73 74 20 69   might want to use.  The first i
000237A0  73 20 61 20 73 6F 75 6E  64 20 65 66 66 65 63 74  2E 20 20 54 68 69 73 20  69 73 20 61 20 73 6F 75  s a sound effect.  This is a sou
000237C0  6E 64 20 74 68 61 74 20  63 61 6E 20 62 65 20 63  6F 6D 70 6C 65 74 65 6C  79 20 6C 6F 61 64 65 64  nd that can be completely loaded
000237E0  20 69 6E 74 6F 20 44 52  41 4D 20 61 6E 64 20 70  6C 61 79 65 64 20 61 6E  64 20 70 6F 73 69 74 69   into DRAM and played and positi
00023800  6F 6E 65 64 20 61 74 20  61 6E 79 20 74 69 6D 65  2E 20 20 49 74 20 69 73  20 75 73 65 64 20 66 6F  oned at any time.  It is used fo
00023820  72 20 74 68 69 6E 67 73  20 6C 69 6B 65 20 67 75  6E 73 68 6F 74 73 2C 20  63 61 72 73 20 65 74 63  r things like gunshots, cars etc
00023840  2E 20 20 54 68 65 73 65  20 63 61 6E 20 62 65 20  6C 6F 6F 70 65 64 20 6F  72 20 6E 6F 6E 2D 6C 6F  .  These can be looped or non-lo
00023860  6F 70 65 64 2E 20 20 54  68 65 20 6F 74 68 65 72  20 74 79 70 65 20 6F 66  20 73 6F 75 6E 64 20 69  oped.  The other type of sound i
00023880  73 20 61 20 73 6F 75 6E  64 20 74 72 61 63 6B 2E  20 20 54 68 69 73 20 69  73 20 66 6F 72 20 61 20  s a sound track.  This is for a 
000238A0  76 65 72 79 20 6C 6F 6E  67 20 73 6F 75 6E 64 20  74 68 61 74 20 63 61 6E  6E 6F 74 20 62 65 20 6C  very long sound that cannot be l
000238C0  6F 61 64 65 64 20 69 6E  20 44 52 41 4D 20 61 6C  6C 20 61 74 20 6F 6E 63  65 2E 20 20 54 68 65 20  oaded in DRAM all at once.  The 
000238E0  69 6D 70 6C 65 6D 65 6E  74 61 74 69 6F 6E 20 6F  66 20 65 61 63 68 20 6F  66 20 74 68 65 73 65 20  implementation of each of these 
00023900  6D 65 74 68 6F 64 73 20  69 73 20 76 65 72 79 20  64 69 66 66 65 72 65 6E  74 2E 20 20 41 20 73 6F  methods is very different.  A so
00023920  75 6E 64 20 65 66 66 65  63 74 20 69 73 20 69 6D  70 6C 65 6D 65 6E 74 65  64 20 75 73 69 6E 67 20  und effect is implemented using 
00023940  61 20 62 6C 6F 63 6B 65  64 20 64 61 74 61 20 66  6F 72 6D 61 74 2E 20 20  54 68 69 73 20 6D 65 61  a blocked data format.  This mea
00023960  6E 73 20 74 68 61 74 20  65 61 63 68 20 74 72 61  63 6B 27 73 20 64 61 74  61 20 69 73 20 69 6E 20  ns that each track's data is in 
00023980  61 20 62 6C 6F 63 6B 20  6F 66 20 69 74 73 20 6F  77 6E 2E 20 20 41 20 73  6F 75 6E 64 20 74 72 61  a block of its own.  A sound tra
000239A0  63 6B 20 75 73 65 73 20  69 6E 74 65 72 6C 65 61  76 65 64 20 64 61 74 61  2E 20 20 54 68 69 73 20  ck uses interleaved data.  This 
000239C0  6D 65 61 6E 73 20 74 68  61 74 20 61 6C 6C 20 74  68 65 20 74 72 61 63 6B  27 73 20 64 61 74 61 20  means that all the track's data 
000239E0  69 73 20 69 6E 74 65 72  6C 65 61 76 65 64 20 74  6F 67 65 74 68 65 72 2E  20 20 46 6F 72 20 65 78  is interleaved together.  For ex
00023A00  61 6D 70 6C 65 2C 20 61  20 62 6C 6F 63 6B 65 64  20 66 69 6C 65 20 77 6F  75 6C 64 20 6C 6F 6F 6B  ample, a blocked file would look
00023A20  20 6C 69 6B 65 20 74 68  69 73 3A 0D 0A 0D 0A 48  45 41 44 45 52 20 46 46  46 46 46 52 52 52 52 52   like this:HEADER FFFFFRRRRR
00023A40  42 42 42 42 42 4C 4C 4C  4C 4C 55 55 55 55 55 44  44 44 44 44 2E 2E 2E 2E  0D 0A 0D 0A 77 68 65 72  BBBBBLLLLLUUUUUDDDDD....wher
00023A60  65 61 73 20 61 6E 20 69  6E 74 65 72 6C 65 61 76  65 64 20 66 69 6C 65 20  77 6F 75 6C 64 20 6C 6F  eas an interleaved file would lo
00023A80  6F 6B 20 6C 69 6B 65 20  74 68 69 73 3A 0D 0A 0D  0A 48 45 41 44 45 52 20  46 52 42 4C 55 44 46 52  ok like this:HEADER FRBLUDFR
00023AA0  42 4C 55 44 46 52 42 4C  55 44 46 52 42 4C 55 44  46 52 42 4C 55 44 2E 2E  2E 0D 0A 0D 0A 77 68 65  BLUDFRBLUDFRBLUDFRBLUD...whe
00023AC0  72 65 0D 0A 0D 0A 46 20  3D 20 46 72 6F 6E 74 20  54 72 61 63 6B 20 20 20  20 20 4C 20 3D 20 4C 65  reF = Front Track     L = Le
00023AE0  66 74 20 54 72 61 63 6B  0D 0A 52 20 3D 20 52 69  67 68 74 20 54 72 61 63  6B 20 20 20 55 20 3D 20  ft TrackR = Right Track   U = 
00023B00  55 70 20 54 72 61 63 6B  0D 0A 42 20 3D 20 42 65  68 69 6E 64 20 54 72 61  63 6B 20 20 20 44 20 3D  Up TrackB = Behind Track   D =
00023B20  20 44 6F 77 6E 20 54 72  61 63 6B 0D 0A 0D 0A 42  6F 74 68 20 6F 66 20 74  68 65 73 65 20 6D 65 74   Down TrackBoth of these met
00023B40  68 6F 64 73 20 68 61 76  65 20 74 68 65 69 72 20  69 6E 64 69 76 69 64 75  61 6C 20 61 64 76 61 6E  hods have their individual advan
00023B60  74 61 67 65 73 20 61 6E  64 20 64 69 73 61 64 76  61 6E 74 61 67 65 73 2E  20 20 46 69 72 73 74 2C  tages and disadvantages.  First,
00023B80  20 74 68 65 20 69 6E 74  65 72 6C 65 61 76 65 64  20 6D 65 74 68 6F 64 20  6D 61 6B 65 73 20 69 74   the interleaved method makes it
00023BA0  20 76 65 72 79 20 65 61  73 79 20 74 6F 20 72 65  61 64 20 69 6E 20 74 68  65 20 64 61 74 61 20 69   very easy to read in the data i
00023BC0  6E 20 61 20 63 6F 6E 74  69 6E 75 6F 75 73 20 73  74 72 65 61 6D 20 73 69  6E 63 65 20 69 74 20 77  n a continuous stream since it w
00023BE0  69 6C 6C 20 6C 6F 6F 6B  20 74 68 65 20 73 61 6D  65 20 61 6C 6C 20 74 68  65 20 77 61 79 20 74 68  ill look the same all the way th
00023C00  72 6F 75 67 68 20 74 68  65 20 66 69 6C 65 2E 20  20 49 74 20 69 73 20 61  6C 73 6F 20 66 61 73 74  rough the file.  It is also fast
00023C20  65 72 20 74 6F 20 72 65  61 64 20 36 30 4B 20 6F  66 20 64 61 74 61 20 6F  6E 63 65 20 72 61 74 68  er to read 60K of data once rath
00023C40  65 72 20 74 68 61 6E 20  36 20 31 30 4B 20 72 65  61 64 73 2E 20 20 54 68  69 73 20 6D 61 6B 65 73  er than 6 10K reads.  This makes
00023C60  20 69 74 20 76 65 72 79  20 75 73 65 66 75 6C 20  66 6F 72 20 61 20 73 6F  75 6E 64 20 74 72 61 63   it very useful for a sound trac
00023C80  6B 2E 20 20 48 6F 77 65  76 65 72 2C 20 6F 6E 65  20 64 72 61 77 62 61 63  6B 20 69 73 20 74 68 61  k.  However, one drawback is tha
00023CA0  74 20 69 74 20 68 61 73  20 61 20 76 65 72 79 20  6C 69 6D 69 74 65 64 20  6E 75 6D 62 65 72 20 6F  t it has a very limited number o
00023CC0  66 20 66 72 65 71 75 65  6E 63 69 65 73 20 74 68  61 74 20 69 74 20 77 69  6C 6C 20 72 75 6E 20 61  f frequencies that it will run a
00023CE0  74 2E 20 20 54 68 65 20  72 65 61 73 6F 6E 20 66  6F 72 20 74 68 69 73 20  69 73 20 72 61 74 68 65  t.  The reason for this is rathe
00023D00  72 20 64 69 66 66 69 63  75 6C 74 20 74 6F 20 65  78 70 6C 61 69 6E 2C 20  62 75 74 20 69 74 20 70  r difficult to explain, but it p
00023D20  65 72 74 61 69 6E 73 20  74 6F 20 67 65 74 74 69  6E 67 20 74 68 65 20 55  6C 74 72 61 53 6F 75 6E  ertains to getting the UltraSoun
00023D40  64 27 73 20 76 6F 69 63  65 73 20 74 6F 20 70 6C  61 79 20 65 76 65 72 79  20 34 74 68 20 28 6F 72  d's voices to play every 4th (or
00023D60  20 35 74 68 2C 20 65 74  63 29 20 73 61 6D 70 6C  65 2E 20 20 54 68 65 20  55 6C 74 72 61 53 6F 75   5th, etc) sample.  The UltraSou
00023D80  6E 64 20 6E 6F 72 6D 61  6C 6C 79 20 77 6F 75 6C  64 20 69 6E 74 65 72 70  6F 6C 61 74 65 20 62 65  nd normally would interpolate be
00023DA0  74 77 65 65 6E 20 64 61  74 61 20 70 6F 69 6E 74  73 20 62 75 74 20 69 74  20 63 61 6E 27 74 20 64  tween data points but it can't d
00023DC0  6F 20 74 68 61 74 20 68  65 72 65 20 62 65 63 61  75 73 65 20 74 68 65 20  61 64 6A 61 63 65 6E 74  o that here because the adjacent
00023DE0  20 64 61 74 61 20 70 6F  69 6E 74 73 20 61 72 65  20 6E 6F 74 20 69 6E 20  74 68 65 20 73 61 6D 65   data points are not in the same
00023E00  20 74 72 61 63 6B 2E 20  20 0D 0A 0D 0A 49 66 20  79 6F 75 20 77 61 6E 74  20 74 6F 20 72 75 6E 20   track.  If you want to run 
00023E20  61 74 20 32 32 30 35 30  20 48 7A 2C 20 74 68 65  6E 20 79 6F 75 20 6E 65  65 64 20 74 6F 20 68 61  at 22050 Hz, then you need to ha
00023E40  76 65 20 6F 6E 6C 79 20  32 38 20 61 63 74 69 76  65 20 76 6F 69 63 65 73  20 74 6F 20 61 63 63 6F  ve only 28 active voices to acco
00023E60  6D 70 6C 69 73 68 20 74  68 69 73 2E 20 20 49 66  20 79 6F 75 20 77 61 6E  74 20 74 6F 20 70 6C 61  mplish this.  If you want to pla
00023E80  79 20 61 20 74 72 61 63  6B 20 61 74 20 34 34 31  30 30 20 48 7A 2C 20 79  6F 75 20 6D 75 73 74 20  y a track at 44100 Hz, you must 
00023EA0  68 61 76 65 20 6F 6E 6C  79 20 31 34 20 61 63 74  69 76 65 20 76 6F 69 63  65 73 2E 20 20 42 6C 6F  have only 14 active voices.  Blo
00023EC0  63 6B 65 64 20 64 61 74  61 20 64 6F 65 73 6E 27  74 20 68 61 76 65 20 74  68 69 73 20 70 72 6F 62  cked data doesn't have this prob
00023EE0  6C 65 6D 2E 20 20 53 69  6E 63 65 20 74 68 65 20  64 61 74 61 20 69 73 20  4E 4F 54 20 69 6E 74 65  lem.  Since the data is NOT inte
00023F00  72 6C 65 61 76 65 64 2C  20 62 75 74 20 69 6E 20  61 20 62 6C 6F 63 6B 20  6F 66 20 63 6F 6E 74 69  rleaved, but in a block of conti
00023F20  67 75 6F 75 73 20 44 52  41 4D 2C 20 69 74 73 20  66 72 65 71 75 65 6E 63  79 20 63 61 6E 20 62 65  guous DRAM, its frequency can be
00023F40  20 61 64 6A 75 73 74 65  64 20 74 6F 20 61 6E 79  20 76 61 6C 75 65 2E 20  20 54 68 69 73 20 69 73   adjusted to any value.  This is
00023F60  20 75 73 75 61 6C 6C 79  20 76 65 72 79 20 75 73  65 66 75 6C 20 66 6F 72  20 73 6F 75 6E 64 20 65   usually very useful for sound e
00023F80  66 66 65 63 74 73 20 28  72 65 76 27 69 6E 67 20  65 6E 67 69 6E 65 73 20  65 74 63 29 2E 20 20 41  ffects (rev'ing engines etc).  A
00023FA0  6C 73 6F 2C 20 73 69 6E  63 65 20 74 68 65 20 64  61 74 61 20 69 73 20 62  6C 6F 63 6B 65 64 2C 20  lso, since the data is blocked, 
00023FC0  65 61 63 68 20 74 72 61  63 6B 27 73 20 64 61 74  61 20 63 61 6E 20 62 65  20 61 6C 6C 6F 63 61 74  each track's data can be allocat
00023FE0  65 64 20 73 65 70 61 72  61 74 65 6C 79 20 61 6E  64 20 63 61 6E 20 74 68  65 72 65 66 6F 72 65 20  ed separately and can therefore 
00024000  62 65 20 75 70 20 74 6F  20 32 35 36 4B 2E 20 20  41 6E 20 69 6E 74 65 72  6C 65 61 76 65 64 20 66  be up to 256K.  An interleaved f
00024020  69 6C 65 20 6D 75 73 74  20 66 69 74 20 69 6E 74  6F 20 31 20 32 35 36 4B  20 62 61 6E 6B 20 73 69  ile must fit into 1 256K bank si
00024040  6E 63 65 20 77 65 20 63  61 6E 6E 6F 74 20 70 6C  61 79 20 31 36 62 69 74  20 64 61 74 61 20 61 63  nce we cannot play 16bit data ac
00024060  72 6F 73 73 20 61 20 32  35 36 4B 20 62 61 6E 6B  2E 20 20 53 65 65 20 74  68 65 20 74 77 6F 20 65  ross a 256K bank.  See the two e
00024080  78 61 6D 70 6C 65 20 33  44 20 70 72 6F 67 72 61  6D 73 20 70 72 6F 76 69  64 65 64 20 28 50 4C 41  xample 3D programs provided (PLA
000240A0  59 33 44 20 61 6E 64 20  50 4C 41 59 33 44 49 29  20 66 6F 72 20 69 64 65  61 73 20 6F 6E 20 68 6F  Y3D and PLAY3DI) for ideas on ho
000240C0  77 20 74 6F 20 69 6D 70  6C 65 6D 65 6E 74 20 33  44 20 73 6F 75 6E 64 20  69 6E 74 6F 20 79 6F 75  w to implement 3D sound into you
000240E0  20 61 70 70 6C 69 63 61  74 69 6F 6E 73 2E 0D 0A  0D 0A 0D 0A 35 2E 31 20  20 43 72 65 61 74 69 6E   applications.5.1  Creatin
00024100  67 20 33 44 20 66 69 6C  65 0D 0A 0D 0A 50 6C 65  61 73 65 20 72 65 61 64  20 74 68 65 20 72 65 61  g 3D filePlease read the rea
00024120  64 6D 65 2E 33 44 20 66  69 6C 65 20 66 6F 72 20  69 6E 66 6F 72 6D 61 74  69 6F 6E 20 6F 6E 20 63  dme.3D file for information on c
00024140  72 65 61 74 69 6E 67 20  61 20 33 44 20 66 69 6C  65 2E 0D 0A 0D 0A 0D 0A  35 2E 32 20 20 33 44 20  reating a 3D file.5.2  3D 
00024160  53 6F 75 6E 64 20 52 6F  75 74 69 6E 65 73 0D 0A  0D 0A 55 6C 74 72 61 41  62 73 50 6F 73 69 74 69  Sound RoutinesUltraAbsPositi
00024180  6F 6E 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  on____________________________
000241A0  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 70 6C 61  63 65 20 61 20 73 6F 75  _____Purpose:To place a sou
000241C0  6E 64 20 75 73 69 6E 67  20 69 6E 74 65 67 65 72  20 43 61 72 74 65 73 69  61 6E 20 63 6F 6F 72 64  nd using integer Cartesian coord
000241E0  69 6E 61 74 65 73 2E 0D  0A 0D 0A 43 3A 20 20 20  20 20 09 76 6F 69 64 20  55 6C 74 72 61 41 62 73  inates.C:     void UltraAbs
00024200  50 6F 73 69 74 69 6F 6E  33 44 28 73 6F 75 6E 64  2C 78 70 6F 73 2C 79 70  6F 73 2C 7A 70 6F 73 29  Position3D(sound,xpos,ypos,zpos)
00024220  3B 0D 0A 09 09 09 53 4F  55 4E 44 5F 33 44 20 2A  73 6F 75 6E 64 3B 20 0D  0A 09 09 09 69 6E 74 20  ;SOUND_3D *sound; int 
00024240  78 70 6F 73 3B 20 0D 0A  09 09 09 69 6E 74 20 79  70 6F 73 3B 20 0D 0A 09  09 09 69 6E 74 20 7A 70  xpos; int ypos; int zp
00024260  6F 73 3B 20 0D 0A 0D 0A  50 41 53 43 41 4C 3A 09  50 52 4F 43 45 44 55 52  45 20 55 6C 74 72 61 41  os; PASCAL:PROCEDURE UltraA
00024280  62 73 50 6F 73 69 74 69  6F 6E 33 44 28 56 41 52  20 53 6F 75 6E 64 20 3A  20 53 4F 55 4E 44 5F 33  bsPosition3D(VAR Sound : SOUND_3
000242A0  44 3B 0D 0A 09 09 09 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  D;                         
000242C0  20 20 20 20 20 20 20 20  58 50 6F 73 20 20 3A 20  49 4E 54 45 47 45 52 3B  0D 0A 09 09 09 20 20 20          XPos  : INTEGER;   
000242E0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 59 50                                YP
00024300  6F 73 20 20 3A 20 49 4E  54 45 47 45 52 3B 0D 0A  09 09 09 20 20 20 20 20  20 20 20 20 20 20 20 20  os  : INTEGER;             
00024320  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 5A 50 6F 73  20 20 3A 20 49 4E 54 45                      ZPos  : INTE
00024340  47 45 52 29 3B 0D 0A 0D  0A 52 65 6D 61 72 6B 73  3A 09 54 68 69 73 20 72  6F 75 74 69 6E 65 20 77  GER);Remarks:This routine w
00024360  69 6C 6C 20 70 6F 73 69  74 69 6F 6E 20 61 20 73  6F 75 6E 64 20 75 73 69  6E 67 20 73 74 61 6E 64  ill position a sound using stand
00024380  61 72 64 20 63 61 72 74  65 73 69 61 6E 20 63 6F  6F 72 64 69 6E 61 74 65  73 2E 20 54 68 65 20 58  ard cartesian coordinates. The X
000243A0  20 70 6F 73 69 74 69 6F  6E 20 72 61 6E 67 65 20  69 73 20 66 72 6F 6D 20  2D 35 31 31 20 28 6C 65   position range is from -511 (le
000243C0  66 74 29 20 74 6F 20 2B  35 31 31 20 28 72 69 67  68 74 29 2E 20 54 68 65  20 59 20 70 6F 73 69 74  ft) to +511 (right). The Y posit
000243E0  69 6F 6E 20 69 73 20 66  72 6F 6D 20 2D 35 31 31  20 28 62 65 6C 6F 77 29  20 74 6F 20 2B 35 31 31  ion is from -511 (below) to +511
00024400  20 28 61 62 6F 76 65 29  2E 20 54 68 65 20 5A 20  70 6F 73 69 74 69 6F 6E  20 69 73 20 66 72 6F 6D   (above). The Z position is from
00024420  20 2D 35 31 31 20 28 62  65 68 69 6E 64 29 20 74  6F 20 2B 35 31 31 20 28  61 68 65 61 64 29 2E 20   -511 (behind) to +511 (ahead). 
00024440  54 68 65 20 58 20 61 6E  64 20 5A 20 70 6F 73 69  74 69 6F 6E 73 20 64 65  74 65 72 6D 69 6E 65 20  The X and Z positions determine 
00024460  74 68 65 20 61 7A 69 6D  75 74 68 20 70 6F 73 69  74 69 6F 6E 20 61 6E 64  20 59 20 64 65 74 65 72  the azimuth position and Y deter
00024480  6D 69 6E 65 73 20 74 68  65 20 65 6C 65 76 61 74  69 6F 6E 2E 20 54 68 65  20 64 69 73 74 61 6E 63  mines the elevation. The distanc
000244A0  65 20 61 77 61 79 20 66  72 6F 6D 20 74 68 65 20  6C 69 73 74 65 6E 65 72  20 69 73 20 64 65 74 65  e away from the listener is dete
000244C0  72 6D 69 6E 65 64 20 75  73 69 6E 67 20 74 72 69  67 6F 6E 6F 6D 65 74 72  79 2E 20 4F 6E 63 65 20  rmined using trigonometry. Once 
000244E0  74 68 65 73 65 20 61 72  65 20 64 65 74 65 72 6D  69 6E 65 64 2C 20 55 6C  74 72 61 41 6E 67 50 6F  these are determined, UltraAngPo
00024500  73 69 74 69 6F 6E 33 44  20 69 73 20 63 61 6C 6C  65 64 2E 20 0D 0A 0D 0A  09 09 09 49 66 20 74 68  sition3D is called. If th
00024520  65 20 64 69 73 74 61 6E  63 65 20 69 73 20 63 61  6C 63 75 6C 61 74 65 64  20 74 6F 20 62 65 20 67  e distance is calculated to be g
00024540  72 65 61 74 65 72 20 74  68 61 6E 20 35 31 31 2C  20 69 74 20 69 73 20 63  6C 69 70 70 65 64 20 74  reater than 511, it is clipped t
00024560  6F 20 35 31 31 2E 20 41  6C 73 6F 2C 20 69 66 20  74 68 65 20 64 69 73 74  61 6E 63 65 20 69 73 20  o 511. Also, if the distance is 
00024580  63 61 6C 63 75 6C 61 74  65 64 20 74 6F 20 62 65  20 30 2C 20 6E 6F 20 70  6F 73 69 74 69 6F 6E 69  calculated to be 0, no positioni
000245A0  6E 67 20 69 73 20 64 6F  6E 65 20 73 69 6E 63 65  20 74 68 65 20 6F 72 69  67 69 6E 20 69 73 20 75  ng is done since the origin is u
000245C0  6E 64 65 66 69 6E 65 64  2E 20 28 69 2E 65 2E 20  41 20 73 6F 75 6E 64 20  63 61 6E 6E 6F 74 20 62  ndefined. (i.e. A sound cannot b
000245E0  65 20 67 65 6E 65 72 61  74 65 64 20 49 4E 53 49  44 45 20 79 6F 75 72 20  68 65 61 64 20 28 6F 72  e generated INSIDE your head (or
00024600  69 67 69 6E 29 29 2E 0D  0A 0D 0A 09 09 09 43 20  75 73 65 72 73 20 73 68  6F 75 6C 64 20 62 65 20  igin)).C users should be 
00024620  63 61 72 65 66 75 6C 20  77 68 65 6E 20 75 73 69  6E 67 20 74 68 69 73 20  72 6F 75 74 69 6E 65 2C  careful when using this routine,
00024640  20 73 69 6E 63 65 20 74  68 65 20 74 72 69 67 20  66 75 6E 63 74 69 6F 6E  73 20 77 69 6C 6C 20 62   since the trig functions will b
00024660  65 20 6E 65 65 64 65 64  20 66 72 6F 6D 20 74 68  65 20 43 20 6C 69 62 72  61 72 69 65 73 2E 20 0D  e needed from the C libraries. 
00024680  0A 0D 0A 53 65 65 20 61  6C 73 6F 3A 09 55 6C 74  72 61 41 6E 67 50 6F 73  69 74 69 6F 6E 33 44 0D  See also:UltraAngPosition3D
000246A0  0A 0C 55 6C 74 72 61 41  6E 67 50 6F 73 69 74 69  6F 6E 33 44 0D 0A 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraAngPosition3D__________
000246C0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  0A 0D 0A 50 75 72 70 6F  _______________________Purpo
000246E0  73 65 3A 09 54 6F 20 70  6F 73 69 74 69 6F 6E 20  61 20 73 6F 75 6E 64 20  75 73 69 6E 67 20 69 6E  se:To position a sound using in
00024700  74 65 67 65 72 20 70 6F  6C 61 72 20 63 6F 6F 72  64 69 6E 61 74 65 73 2E  0D 0A 0D 0A 43 3A 20 20  teger polar coordinates.C:  
00024720  20 20 20 09 76 6F 69 64  20 55 6C 74 72 61 41 6E  67 50 6F 73 69 74 69 6F  6E 33 44 28 73 6F 75 6E     void UltraAngPosition3D(soun
00024740  64 2C 61 7A 69 6D 75 74  68 2C 65 6C 65 76 61 74  69 6F 6E 2C 76 6F 6C 75  6D 65 29 3B 0D 0A 09 09  d,azimuth,elevation,volume);
00024760  09 53 4F 55 4E 44 5F 33  44 20 2A 73 6F 75 6E 64  3B 0D 0A 09 09 09 69 6E  74 20 61 7A 69 6D 75 74  SOUND_3D *sound;int azimut
00024780  68 3B 20 0D 0A 09 09 09  69 6E 74 20 65 6C 65 76  61 74 69 6F 6E 3B 20 0D  0A 09 09 09 69 6E 74 20  h; int elevation; int 
000247A0  76 6F 6C 75 6D 65 3B 20  0D 0A 0D 0A 50 41 53 43  41 4C 3A 09 50 52 4F 43  45 44 55 52 45 20 55 6C  volume; PASCAL:PROCEDURE Ul
000247C0  74 72 61 41 6E 67 50 6F  73 69 74 69 6F 6E 33 44  28 56 41 52 20 53 6F 75  6E 64 20 20 20 20 20 3A  traAngPosition3D(VAR Sound     :
000247E0  20 53 4F 55 4E 44 5F 33  44 3B 0D 0A 09 09 09 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20   SOUND_3D;                 
00024800  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  41 5A 49 4D 75 74 68 20  20 20 3A 20 49 4E 54 45                  AZIMuth   : INTE
00024820  47 45 52 3B 0D 0A 09 09  09 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  GER;                       
00024840  20 20 20 20 20 20 20 20  20 20 45 6C 65 76 61 74  69 6F 6E 20 3A 20 49 4E  54 45 47 45 52 3B 0D 0A            Elevation : INTEGER;
00024860  09 09 09 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20                               
00024880  20 20 20 20 56 6F 6C 5F  44 69 73 74 20 20 3A 20  49 4E 54 45 47 45 52 29  3B 0D 0A 0D 0A 52 65 6D      Vol_Dist  : INTEGER);Rem
000248A0  61 72 6B 73 3A 09 54 68  69 73 20 72 6F 75 74 69  6E 65 20 77 69 6C 6C 20  70 6F 73 69 74 69 6F 6E  arks:This routine will position
000248C0  20 61 20 33 44 20 73 6F  75 6E 64 20 75 73 69 6E  67 20 70 6F 6C 61 72 20  63 6F 6F 72 64 69 6E 61   a 3D sound using polar coordina
000248E0  74 65 73 2E 20 54 68 65  20 61 7A 69 6D 75 74 68  20 61 6E 64 20 65 6C 65  76 61 74 69 6F 6E 20 61  tes. The azimuth and elevation a
00024900  72 65 20 73 70 65 63 69  66 69 65 64 20 69 6E 20  64 65 67 72 65 65 73 2E  20 41 7A 69 6D 75 74 68  re specified in degrees. Azimuth
00024920  20 69 73 20 74 68 65 20  61 6E 67 6C 65 20 69 6E  20 74 68 65 20 68 6F 72  69 7A 6F 6E 74 61 6C 20   is the angle in the horizontal 
00024940  70 6C 61 6E 65 2E 20 53  74 72 61 69 67 68 74 20  61 68 65 61 64 20 69 73  20 30 20 64 65 67 72 65  plane. Straight ahead is 0 degre
00024960  65 73 2C 20 39 30 20 64  65 67 72 65 65 73 20 69  73 20 74 6F 20 74 68 65  20 72 69 67 68 74 2C 20  es, 90 degrees is to the right, 
00024980  2D 39 30 20 64 65 67 72  65 65 73 20 69 73 20 74  6F 20 74 68 65 20 6C 65  66 74 20 61 6E 64 20 31  -90 degrees is to the left and 1
000249A0  38 30 20 28 6F 72 20 2D  31 38 30 29 20 69 73 20  64 69 72 65 63 74 6C 79  20 62 65 68 69 6E 64 20  80 (or -180) is directly behind 
000249C0  79 6F 75 2E 20 49 66 20  61 6E 20 61 6E 67 6C 65  20 6C 61 72 67 65 72 20  74 68 61 6E 20 31 38 30  you. If an angle larger than 180
000249E0  20 6F 72 20 73 6D 61 6C  6C 65 72 20 74 68 61 74  20 2D 31 38 30 20 69 73  20 73 70 65 63 69 66 69   or smaller that -180 is specifi
00024A00  65 64 2C 20 69 74 20 69  73 20 63 6F 6E 76 65 72  74 65 64 20 74 6F 20 69  74 73 20 2D 31 38 30 20  ed, it is converted to its -180 
00024A20  74 6F 20 31 38 30 20 65  71 75 69 76 61 6C 65 6E  74 2E 20 46 6F 72 20 65  78 61 6D 70 6C 65 2C 20  to 180 equivalent. For example, 
00024A40  32 37 30 20 64 65 67 72  65 65 73 20 69 73 20 65  71 75 69 76 61 6C 65 6E  74 20 74 6F 20 2D 39 30  270 degrees is equivalent to -90
00024A60  20 64 65 67 72 65 65 73  2E 20 45 6C 65 76 61 74  69 6F 6E 20 69 73 20 74  68 65 20 61 6E 67 6C 65   degrees. Elevation is the angle
00024A80  20 6F 66 20 65 6C 65 76  61 74 69 6F 6E 20 61 62  6F 76 65 20 6F 72 20 62  65 6C 6F 77 20 74 68 65   of elevation above or below the
00024AA0  20 68 6F 72 69 7A 6F 6E  74 61 6C 20 70 6C 61 6E  65 2E 20 30 20 64 65 67  72 65 65 73 20 69 73 20   horizontal plane. 0 degrees is 
00024AC0  6E 6F 20 65 6C 65 76 61  74 69 6F 6E 2C 20 39 30  20 64 65 67 72 65 65 73  20 69 73 20 73 74 72 61  no elevation, 90 degrees is stra
00024AE0  69 67 68 74 20 75 70 2C  20 61 6E 64 20 2D 39 30  20 69 73 20 73 74 72 61  69 67 68 74 20 64 6F 77  ight up, and -90 is straight dow
00024B00  6E 2E 20 41 6E 79 20 61  6E 67 6C 65 20 6C 61 72  67 65 72 20 74 68 61 6E  20 39 30 20 6F 72 20 73  n. Any angle larger than 90 or s
00024B20  6D 61 6C 6C 65 72 20 74  68 61 74 20 2D 39 30 20  69 73 20 69 67 6E 6F 72  65 64 2E 0D 0A 0D 0A 09  maller that -90 is ignored.
00024B40  09 09 49 66 20 6D 6F 72  65 20 70 72 65 63 69 73  69 6F 6E 20 69 73 20 6E  65 65 64 65 64 2C 20 75  If more precision is needed, u
00024B60  73 65 20 55 6C 74 72 61  41 6E 67 46 6C 74 50 6F  73 69 74 69 6F 6E 33 44  20 73 6F 20 74 68 61 74  se UltraAngFltPosition3D so that
00024B80  20 66 6C 6F 61 74 69 6E  67 20 70 6F 69 6E 74 20  61 72 69 74 68 6D 65 74  69 63 20 69 73 20 75 73   floating point arithmetic is us
00024BA0  65 64 2E 20 20 53 69 6E  63 65 20 74 68 61 74 20  72 6F 75 74 69 6E 65 20  75 73 65 73 20 66 6C 6F  ed.  Since that routine uses flo
00024BC0  61 74 69 6E 67 20 70 6F  69 6E 74 20 66 75 6E 63  74 69 6F 6E 73 20 28 73  6C 6F 77 29 2C 20 79 6F  ating point functions (slow), yo
00024BE0  75 72 20 61 70 70 6C 69  63 61 74 69 6F 6E 20 6D  61 79 20 6E 6F 74 20 77  61 6E 74 20 74 6F 20 75  ur application may not want to u
00024C00  73 65 20 69 74 2E 0D 0A  0D 0A 53 65 65 20 61 6C  73 6F 3A 09 55 6C 74 72  61 41 62 73 50 6F 73 69  se it.See also:UltraAbsPosi
00024C20  74 69 6F 6E 33 44 0D 0A  0D 0A 0C 55 6C 74 72 61  41 6E 67 46 6C 74 50 6F  73 69 74 69 6F 6E 33 44  tion3DUltraAngFltPosition3D
00024C40  0D 0A 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ______________________________
00024C60  5F 5F 5F 0D 0A 0D 0A 50  75 72 70 6F 73 65 3A 09  54 6F 20 70 6F 73 69 74  69 6F 6E 20 61 20 73 6F  ___Purpose:To position a so
00024C80  75 6E 64 20 75 73 69 6E  67 20 66 6C 6F 61 74 69  6E 67 20 70 6F 69 6E 74  20 70 6F 6C 61 72 20 63  und using floating point polar c
00024CA0  6F 6F 72 64 69 6E 61 74  65 73 2E 0D 0A 0D 0A 43  3A 20 20 20 20 20 09 76  6F 69 64 20 55 6C 74 72  oordinates.C:     void Ultr
00024CC0  61 41 6E 67 46 6C 74 50  6F 73 69 74 69 6F 6E 33  44 28 73 6F 75 6E 64 2C  61 7A 69 6D 75 74 68 2C  aAngFltPosition3D(sound,azimuth,
00024CE0  65 6C 65 76 61 74 69 6F  6E 2C 76 6F 6C 75 6D 65  29 3B 0D 0A 09 09 09 53  4F 55 4E 44 5F 33 44 20  elevation,volume);SOUND_3D 
00024D00  2A 73 6F 75 6E 64 3B 0D  0A 09 09 09 64 6F 75 62  6C 65 20 61 7A 69 6D 75  74 68 3B 0D 0A 09 09 09  *sound;double azimuth;
00024D20  64 6F 75 62 6C 65 20 65  6C 65 76 61 74 69 6F 6E  3B 0D 0A 09 09 09 69 6E  74 20 76 6F 6C 75 6D 65  double elevation;int volume
00024D40  3B 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 50 52 4F  43 45 44 55 52 45 20 55  6C 74 72 61 41 6E 67 46  ;PASCAL:PROCEDURE UltraAngF
00024D60  6C 74 50 6F 73 69 74 69  6F 6E 33 44 28 56 41 52  20 53 6F 75 6E 64 20 20  20 20 20 3A 20 53 4F 55  ltPosition3D(VAR Sound     : SOU
00024D80  4E 44 5F 33 44 3B 0D 0A  09 09 09 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  ND_3D;                     
00024DA0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 41  5A 49 4D 75 74 68 20 20  20 3A 20 44 4F 55 42 4C                 AZIMuth   : DOUBL
00024DC0  45 3B 0D 0A 09 09 09 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  E;                         
00024DE0  20 20 20 20 20 20 20 20  20 20 20 45 6C 65 76 61  74 69 6F 6E 20 3A 20 44  4F 55 42 4C 45 3B 0D 0A             Elevation : DOUBLE;
00024E00  09 09 09 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20                               
00024E20  20 20 20 20 20 20 20 56  6F 6C 5F 44 69 73 74 20  20 3A 20 49 4E 54 45 47  45 52 29 3B 0D 0A 0D 0A         Vol_Dist  : INTEGER);
00024E40  52 65 6D 61 72 6B 73 3A  09 54 68 69 73 20 72 6F  75 74 69 6E 65 20 77 69  6C 6C 20 70 6F 73 69 74  Remarks:This routine will posit
00024E60  69 6F 6E 20 61 20 33 44  20 73 6F 75 6E 64 20 75  73 69 6E 67 20 70 6F 6C  61 72 20 63 6F 6F 72 64  ion a 3D sound using polar coord
00024E80  69 6E 61 74 65 73 2E 20  54 68 65 20 61 7A 69 6D  75 74 68 20 61 6E 64 20  65 6C 65 76 61 74 69 6F  inates. The azimuth and elevatio
00024EA0  6E 20 61 72 65 20 73 70  65 63 69 66 69 65 64 20  61 73 20 20 66 6C 6F 61  74 69 6E 67 20 70 6F 69  n are specified as  floating poi
00024EC0  6E 74 20 6E 75 6D 62 65  72 73 20 69 6E 20 64 65  67 72 65 65 73 2E 20 46  6F 72 20 65 78 61 6D 70  nt numbers in degrees. For examp
00024EE0  6C 65 2C 20 34 35 20 61  6E 64 20 6F 6E 65 20 68  61 6C 66 20 64 65 67 72  65 65 73 20 77 6F 75 6C  le, 45 and one half degrees woul
00024F00  64 20 62 65 20 73 70 65  63 69 66 69 65 64 20 61  73 20 34 35 2E 35 2E 20  41 7A 69 6D 75 74 68 20  d be specified as 45.5. Azimuth 
00024F20  69 73 20 74 68 65 20 61  6E 67 6C 65 20 69 6E 20  74 68 65 20 68 6F 72 69  7A 6F 6E 74 61 6C 20 70  is the angle in the horizontal p
00024F40  6C 61 6E 65 2E 20 53 74  72 61 69 67 68 74 20 61  68 65 61 64 20 69 73 20  30 20 64 65 67 72 65 65  lane. Straight ahead is 0 degree
00024F60  73 2C 20 39 30 20 64 65  67 72 65 65 73 20 69 73  20 74 6F 20 74 68 65 20  72 69 67 68 74 2C 20 2D  s, 90 degrees is to the right, -
00024F80  39 30 20 64 65 67 72 65  65 73 20 69 73 20 74 6F  20 74 68 65 20 6C 65 66  74 20 61 6E 64 20 31 38  90 degrees is to the left and 18
00024FA0  30 20 28 6F 72 20 2D 31  38 30 29 20 69 73 20 64  69 72 65 63 74 6C 79 20  62 65 68 69 6E 64 20 79  0 (or -180) is directly behind y
00024FC0  6F 75 2E 20 49 66 20 61  6E 20 61 6E 67 6C 65 20  6C 61 72 67 65 72 20 74  68 61 6E 20 31 38 30 20  ou. If an angle larger than 180 
00024FE0  6F 72 20 73 6D 61 6C 6C  65 72 20 74 68 61 74 20  2D 31 38 30 20 69 73 20  73 70 65 63 69 66 69 65  or smaller that -180 is specifie
00025000  64 2C 20 69 74 20 69 73  20 63 6F 6E 76 65 72 74  65 64 20 74 6F 20 69 74  73 20 2D 31 38 30 20 74  d, it is converted to its -180 t
00025020  6F 20 31 38 30 20 65 71  75 69 76 61 6C 65 6E 74  2E 20 46 6F 72 20 65 78  61 6D 70 6C 65 2C 20 32  o 180 equivalent. For example, 2
00025040  37 30 20 64 65 67 72 65  65 73 20 69 73 20 65 71  75 69 76 61 6C 65 6E 74  20 74 6F 20 2D 39 30 20  70 degrees is equivalent to -90 
00025060  64 65 67 72 65 65 73 2E  20 45 6C 65 76 61 74 69  6F 6E 20 69 73 20 74 68  65 20 61 6E 67 6C 65 20  degrees. Elevation is the angle 
00025080  61 62 6F 76 65 20 6F 72  20 62 65 6C 6F 77 20 74  68 65 20 68 6F 72 69 7A  6F 6E 74 61 6C 20 70 6C  above or below the horizontal pl
000250A0  61 6E 65 2E 20 30 20 64  65 67 72 65 65 73 20 69  73 20 6E 6F 20 65 6C 65  76 61 74 69 6F 6E 2C 20  ane. 0 degrees is no elevation, 
000250C0  39 30 20 64 65 67 72 65  65 73 20 69 73 20 73 74  72 61 69 67 68 74 20 75  70 2C 20 61 6E 64 20 2D  90 degrees is straight up, and -
000250E0  39 30 20 69 73 20 73 74  72 61 69 67 68 74 20 64  6F 77 6E 2E 20 41 6E 79  20 61 6E 67 6C 65 20 6C  90 is straight down. Any angle l
00025100  61 72 67 65 72 20 74 68  61 6E 20 39 30 20 6F 72  20 73 6D 61 6C 6C 65 72  20 74 68 61 74 20 2D 39  arger than 90 or smaller that -9
00025120  30 20 69 73 20 69 67 6E  6F 72 65 64 2E 0D 0A 0D  0A 09 09 09 49 66 20 79  6F 75 72 20 61 70 70 6C  0 is ignored.If your appl
00025140  69 63 61 74 69 6F 6E 20  64 6F 65 73 20 6E 6F 74  20 6E 65 65 64 20 74 6F  20 75 73 65 20 74 68 65  ication does not need to use the
00025160  20 66 6C 6F 61 74 69 6E  67 20 70 6F 69 6E 74 20  72 6F 75 74 69 6E 65 2C  20 69 74 20 69 73 20 61   floating point routine, it is a
00025180  64 76 69 73 61 62 6C 65  20 74 6F 20 75 73 65 20  55 6C 74 72 61 41 6E 67  50 6F 73 69 74 69 6F 6E  dvisable to use UltraAngPosition
000251A0  20 62 65 63 61 75 73 65  20 69 74 20 61 76 6F 69  64 73 20 75 73 69 6E 67  20 73 6F 6D 65 20 66 6C   because it avoids using some fl
000251C0  6F 61 74 69 6E 67 2D 70  6F 69 6E 74 20 66 75 6E  63 74 69 6F 6E 73 20 28  77 68 69 63 68 20 61 72  oating-point functions (which ar
000251E0  65 20 73 6C 6F 77 29 2E  0D 0A 0D 0A 0D 0A 0D 0A  55 6C 74 72 61 43 6C 6F  73 65 44 75 70 33 44 0D  e slow).UltraCloseDup3D
00025200  0A 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  _______________________________
00025220  5F 5F 0D 0A 0D 0A 50 75  72 70 6F 73 65 3A 09 54  6F 20 63 6C 6F 73 65 20  61 20 64 75 70 6C 69 63  __Purpose:To close a duplic
00025240  61 74 65 64 20 33 44 20  73 6F 75 6E 64 20 65 66  66 65 63 74 2E 0D 0A 0D  0A 43 3A 20 20 20 20 20  ated 3D sound effect.C:     
00025260  09 76 6F 69 64 20 55 6C  74 72 61 43 6C 6F 73 65  44 75 70 33 44 28 73 6F  75 6E 64 29 3B 0D 0A 09  void UltraCloseDup3D(sound);
00025280  09 09 53 4F 55 4E 44 5F  33 44 20 2A 73 6F 75 6E  64 3B 0D 0A 0D 0A 50 41  53 43 41 4C 3A 09 50 52  SOUND_3D *sound;PASCAL:PR
000252A0  4F 43 45 44 55 52 45 20  55 6C 74 72 61 43 6C 6F  73 65 44 75 70 33 44 28  56 41 52 20 53 6F 75 6E  OCEDURE UltraCloseDup3D(VAR Soun
000252C0  64 20 3A 20 53 4F 55 4E  44 5F 33 44 29 3B 0D 0A  0D 0A 52 65 6D 61 72 6B  73 3A 09 54 68 69 73 20  d : SOUND_3D);Remarks:This 
000252E0  72 6F 75 74 69 6E 65 20  6D 75 73 74 20 62 65 20  75 73 65 64 20 74 6F 20  66 72 65 65 20 75 70 20  routine must be used to free up 
00025300  74 68 65 20 72 65 73 6F  75 72 63 65 73 20 61 73  73 6F 63 69 61 74 65 64  20 77 69 74 68 20 61 20  the resources associated with a 
00025320  64 75 70 6C 69 63 61 74  65 64 20 33 44 20 65 66  66 65 63 74 2E 20 54 68  69 73 20 72 6F 75 74 69  duplicated 3D effect. This routi
00025340  6E 65 20 77 69 6C 6C 20  6F 6E 6C 79 20 72 65 6C  65 61 73 65 20 74 68 65  20 76 6F 69 63 65 73 20  ne will only release the voices 
00025360  75 73 65 64 20 62 79 20  74 68 65 20 64 75 70 6C  69 63 61 74 65 64 20 65  66 66 65 63 74 2C 20 6E  used by the duplicated effect, n
00025380  6F 74 20 74 68 65 20 44  52 41 4D 20 61 6C 6C 6F  63 61 74 65 64 20 62 79  20 74 68 65 20 6F 72 69  ot the DRAM allocated by the ori
000253A0  67 69 6E 61 6C 20 65 66  66 65 63 74 2E 20 54 68  65 20 6F 72 69 67 69 6E  61 6C 20 65 66 66 65 63  ginal effect. The original effec
000253C0  74 20 73 68 6F 75 6C 64  20 62 65 20 63 6C 6F 73  65 64 20 77 69 74 68 20  55 6C 74 72 61 55 6E 4C  t should be closed with UltraUnL
000253E0  6F 61 64 33 44 45 66 66  65 63 74 2E 0D 0A 0D 0A  53 65 65 20 61 6C 73 6F  3A 09 55 6C 74 72 61 44  oad3DEffect.See also:UltraD
00025400  75 70 33 44 2C 20 55 6C  74 72 61 55 6E 4C 6F 61  64 33 44 45 66 66 65 63  74 2E 0D 0A 0C 55 6C 74  up3D, UltraUnLoad3DEffect.Ult
00025420  72 44 75 70 33 44 0D 0A  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  rDup3D________________________
00025440  5F 5F 5F 5F 5F 5F 5F 5F  5F 0D 0A 0D 0A 50 75 72  70 6F 73 65 3A 09 54 6F  20 63 6F 70 79 20 61 20  _________Purpose:To copy a 
00025460  33 44 20 73 6F 75 6E 64  20 65 66 66 65 63 74 2E  0D 0A 0D 0A 43 3A 20 20  20 20 20 09 69 6E 74 20  3D sound effect.C:     int 
00025480  55 6C 74 72 61 44 75 70  33 44 28 6F 6C 64 2C 6E  65 77 29 3B 0D 0A 09 09  09 53 4F 55 4E 44 5F 33  UltraDup3D(old,new);SOUND_3
000254A0  44 20 2A 6F 6C 64 3B 0D  0A 09 09 09 53 4F 55 4E  44 5F 33 44 20 2A 6E 65  77 3B 0D 0A 0D 0A 50 41  D *old;SOUND_3D *new;PA
000254C0  53 43 41 4C 3A 09 46 55  4E 43 54 49 4F 4E 20 20  55 6C 74 72 61 44 75 70  33 44 28 56 41 52 20 43  SCAL:FUNCTION  UltraDup3D(VAR C
000254E0  75 72 72 65 6E 74 20 3A  20 53 4F 55 4E 44 5F 33  44 3B 0D 0A 09 09 09 20  20 20 20 20 20 20 20 20  urrent : SOUND_3D;         
00025500  20 20 20 20 20 20 20 20  20 20 20 20 56 41 52 20  53 6F 75 6E 64 20 20 20  3A 20 53 4F 55 4E 44 5F              VAR Sound   : SOUND_
00025520  33 44 29 20 3A 20 42 4F  4F 4C 45 41 4E 3B 0D 0A  0D 0A 52 65 6D 61 72 6B  73 3A 09 54 68 69 73 20  3D) : BOOLEAN;Remarks:This 
00025540  72 6F 75 74 69 6E 65 20  69 73 20 76 65 72 79 20  75 73 65 66 75 6C 20 69  66 20 79 6F 75 20 77 61  routine is very useful if you wa
00025560  6E 74 20 74 6F 20 75 73  65 20 74 68 65 20 73 61  6D 65 20 73 6F 75 6E 64  20 65 66 66 65 63 74 20  nt to use the same sound effect 
00025580  69 6E 20 6D 75 6C 74 69  70 6C 65 20 70 6C 61 63  65 73 20 61 74 20 6F 6E  63 65 2E 20 54 68 69 73  in multiple places at once. This
000255A0  20 61 6C 6C 6F 77 73 20  79 6F 75 20 74 6F 20 75  73 65 20 74 68 65 20 73  61 6D 65 20 44 52 41 4D   allows you to use the same DRAM
000255C0  20 64 61 74 61 20 61 6E  64 20 6A 75 73 74 20 61  6C 6C 6F 63 61 74 65 20  73 6F 6D 65 20 6D 6F 72   data and just allocate some mor
000255E0  65 20 76 6F 69 63 65 73  20 74 6F 20 6D 6F 76 65  20 74 68 65 20 73 6F 75  6E 64 2E 20 54 68 69 73  e voices to move the sound. This
00025600  20 68 65 6C 70 73 20 74  6F 20 73 61 76 65 20 44  52 41 4D 20 73 70 61 63  65 2E 20 4D 61 6B 65 20   helps to save DRAM space. Make 
00025620  73 75 72 65 20 74 68 61  74 20 79 6F 75 20 75 73  65 20 55 6C 74 72 61 43  6C 6F 73 65 44 75 70 33  sure that you use UltraCloseDup3
00025640  44 20 74 6F 20 66 72 65  65 20 74 68 65 20 76 6F  69 63 65 73 2C 20 4E 4F  54 20 55 6C 74 72 61 55  D to free the voices, NOT UltraU
00025660  6E 4C 6F 61 64 33 44 45  66 66 65 63 74 2E 20 55  6C 74 72 61 55 6E 4C 6F  61 64 33 44 45 66 66 65  nLoad3DEffect. UltraUnLoad3DEffe
00025680  63 74 20 77 69 6C 6C 20  72 65 6C 65 61 73 65 20  61 6C 6C 20 74 68 65 20  44 52 41 4D 20 66 6F 72  ct will release all the DRAM for
000256A0  20 74 68 65 20 73 6F 75  6E 64 2E 20 54 68 69 73  20 6E 65 77 20 65 66 66  65 63 74 20 63 61 6E 20   the sound. This new effect can 
000256C0  62 65 20 70 61 73 73 65  64 20 74 6F 20 61 6E 79  20 6F 74 68 65 72 20 72  6F 75 74 69 6E 65 73 20  be passed to any other routines 
000256E0  74 68 65 20 73 61 6D 65  20 77 61 79 20 74 68 65  20 6F 72 69 67 69 6E 61  6C 20 65 66 66 65 63 74  the same way the original effect
00025700  20 69 73 2E 0D 0A 0D 0A  52 65 74 75 72 6E 73 3A  09 43 3A 20 20 55 4C 54  52 41 5F 4F 4B 20 20 20   is.Returns:C:  ULTRA_OK   
00025720  20 20 20 20 20 4E 6F 20  45 72 72 6F 72 0D 0A 09  09 09 20 20 20 20 4E 4F  5F 46 52 45 45 5F 56 4F       No Error    NO_FREE_VO
00025740  49 43 45 53 20 20 4E 6F  74 20 65 6E 6F 75 67 68  20 76 6F 69 63 65 73 20  74 6F 20 6D 61 6B 65 20  ICES  Not enough voices to make 
00025760  6E 65 77 20 68 61 6E 64  6C 65 0D 0A 0D 0A 09 09  09 50 41 53 43 41 4C 3A  20 54 52 55 45 20 69 66  new handlePASCAL: TRUE if
00025780  20 64 75 70 6C 69 63 61  74 69 6F 6E 20 73 75 63  63 65 73 73 66 75 6C 2E  0D 0A 09 09 09 20 20 20   duplication successful.   
000257A0  20 20 20 20 20 49 66 20  46 41 4C 53 45 2C 20 63  68 65 63 6B 20 55 6C 74  72 61 45 72 72 6F 72 53       If FALSE, check UltraErrorS
000257C0  74 72 20 66 6F 72 20 74  68 65 20 72 65 61 73 6F  6E 2E 0D 0A 0D 0A 53 65  65 20 61 6C 73 6F 3A 09  tr for the reason.See also:
000257E0  55 6C 74 72 61 43 6C 6F  73 65 44 75 70 33 44 0D  0A 0D 0A 0C 55 6C 74 72  61 4C 6F 61 64 33 44 45  UltraCloseDup3DUltraLoad3DE
00025800  66 66 65 63 74 0D 0A 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ffect_________________________
00025820  5F 5F 5F 5F 5F 5F 5F 5F  0D 0A 0D 0A 50 75 72 70  6F 73 65 3A 09 54 6F 20  6C 6F 61 64 20 61 20 33  ________Purpose:To load a 3
00025840  44 20 65 66 66 65 63 74  20 66 72 6F 6D 20 74 68  65 20 64 69 73 6B 20 69  6E 74 6F 20 44 52 41 4D  D effect from the disk into DRAM
00025860  2E 0D 0A 0D 0A 43 3A 20  20 20 20 20 09 69 6E 74  20 55 6C 74 72 61 4C 6F  61 64 33 44 45 66 66 65  .C:     int UltraLoad3DEffe
00025880  63 74 28 73 6F 75 6E 64  2C 66 69 6C 65 6E 61 6D  65 2C 70 63 5F 62 75 66  66 65 72 2C 73 69 7A 65  ct(sound,filename,pc_buffer,size
000258A0  29 3B 0D 0A 09 09 09 53  4F 55 4E 44 5F 33 44 20  2A 73 6F 75 6E 64 3B 0D  0A 09 09 09 63 68 61 72  );SOUND_3D *sound;char
000258C0  20 2A 66 69 6C 65 6E 61  6D 65 3B 0D 0A 09 09 09  76 6F 69 64 20 66 61 72  20 2A 70 63 5F 62 75 66   *filename;void far *pc_buf
000258E0  66 65 72 3B 0D 0A 09 09  09 75 6E 73 69 67 6E 65  64 20 69 6E 74 20 73 69  7A 65 3B 0D 0A 0D 0A 50  fer;unsigned int size;P
00025900  41 53 43 41 4C 3A 09 46  55 4E 43 54 49 4F 4E 20  20 55 6C 74 72 61 4C 6F  61 64 33 44 45 66 66 65  ASCAL:FUNCTION  UltraLoad3DEffe
00025920  63 74 28 56 41 52 20 53  6F 75 6E 64 20 20 20 20  20 3A 20 53 4F 55 4E 44  5F 33 44 3B 0D 0A 09 09  ct(VAR Sound     : SOUND_3D;
00025940  09 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 56 41 52                              VAR
00025960  20 46 69 6C 65 4E 61 6D  65 20 20 3A 20 53 54 52  49 4E 47 3B 0D 0A 09 09  09 20 20 20 20 20 20 20   FileName  : STRING;       
00025980  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 50 43 5F 42 75 66 66                           PC_Buff
000259A0  65 72 20 3A 20 50 4F 49  4E 54 45 52 3B 0D 0A 09  09 09 20 20 20 20 20 20  20 20 20 20 20 20 20 20  er : POINTER;              
000259C0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 53 69 7A 65 20 20  20 20 20 20 3A 20 57 4F                    Size      : WO
000259E0  52 44 29 20 3A 20 42 4F  4F 4C 45 41 4E 3B 0D 0A  0D 0A 52 65 6D 61 72 6B  73 3A 09 54 68 69 73 20  RD) : BOOLEAN;Remarks:This 
00025A00  72 6F 75 74 69 6E 65 20  69 73 20 75 73 65 64 20  74 6F 20 6C 6F 61 64 20  61 20 33 44 20 73 6F 75  routine is used to load a 3D sou
00025A20  6E 64 20 69 6E 74 6F 20  74 68 65 20 44 52 41 4D  20 6F 6E 20 74 68 65 20  55 6C 74 72 61 53 6F 75  nd into the DRAM on the UltraSou
00025A40  6E 64 2E 20 49 74 20 77  69 6C 6C 20 61 6C 6C 6F  63 61 74 65 20 61 6C 6C  20 6E 65 63 65 73 73 61  nd. It will allocate all necessa
00025A60  72 79 20 72 65 73 6F 75  72 63 65 73 20 73 6F 20  74 68 61 74 20 55 6C 74  72 61 53 74 61 72 74 33  ry resources so that UltraStart3
00025A80  44 20 63 61 6E 20 62 65  20 63 61 6C 6C 65 64 20  6C 61 74 65 72 2E 20 41  73 20 6D 61 6E 79 20 62  D can be called later. As many b
00025AA0  75 66 66 65 72 73 20 6F  66 20 44 52 41 4D 20 61  73 20 6E 65 65 64 65 64  20 77 69 6C 6C 20 62 65  uffers of DRAM as needed will be
00025AC0  20 61 6C 6C 6F 63 61 74  65 64 20 61 6C 6F 6E 67  20 77 69 74 68 20 74 68  65 20 70 72 6F 70 65 72   allocated along with the proper
00025AE0  20 6E 75 6D 62 65 72 20  6F 66 20 76 6F 69 63 65  73 2E 20 54 68 65 73 65  20 72 65 73 6F 75 72 63   number of voices. These resourc
00025B00  65 73 20 77 69 6C 6C 20  62 65 20 66 72 65 65 64  20 75 70 20 77 68 65 6E  20 79 6F 75 20 63 61 6C  es will be freed up when you cal
00025B20  6C 20 55 6C 74 72 61 55  6E 4C 6F 61 64 33 44 45  66 66 65 63 74 2E 20 54  68 65 20 66 69 6C 65 20  l UltraUnLoad3DEffect. The file 
00025B40  73 70 65 63 69 66 69 65  64 20 4D 55 53 54 20 62  65 20 61 20 70 72 6F 70  65 72 6C 79 20 66 6F 72  specified MUST be a properly for
00025B60  6D 61 74 74 65 64 20 6F  72 20 74 68 65 20 72 6F  75 74 69 6E 65 20 77 69  6C 6C 20 66 61 69 6C 2E  matted or the routine will fail.
00025B80  20 54 68 69 73 20 6D 65  61 6E 73 20 74 68 61 74  20 69 74 20 6D 75 73 74  20 68 61 76 65 20 74 68   This means that it must have th
00025BA0  65 20 70 72 6F 70 65 72  20 68 65 61 64 65 72 20  61 6E 64 20 33 44 20 64  61 74 61 20 69 6E 20 69  e proper header and 3D data in i
00025BC0  74 2E 20 54 68 65 20 27  70 63 5F 62 75 66 66 65  72 27 20 69 73 20 61 20  62 75 66 66 65 72 20 73  t. The 'pc_buffer' is a buffer s
00025BE0  75 70 70 6C 69 65 64 20  62 79 20 79 6F 75 72 20  61 70 70 6C 69 63 61 74  69 6F 6E 20 66 6F 72 20  upplied by your application for 
00025C00  74 68 69 73 20 72 6F 75  74 69 6E 65 27 73 20 75  73 65 20 74 6F 20 64 6F  77 6E 6C 6F 61 64 20 64  this routine's use to download d
00025C20  61 74 61 20 69 6E 74 6F  20 74 68 65 20 55 6C 74  72 61 53 6F 75 6E 64 2E  20 54 68 65 20 27 73 69  ata into the UltraSound. The 'si
00025C40  7A 65 27 20 70 61 72 61  6D 65 74 65 72 20 69 73  20 74 68 65 20 73 69 7A  65 20 6F 66 20 74 68 65  ze' parameter is the size of the
00025C60  20 27 70 63 5F 62 75 66  66 65 72 27 2E 20 54 68  65 20 6C 61 72 67 65 72  20 74 68 69 73 20 62 75   'pc_buffer'. The larger this bu
00025C80  66 66 65 72 20 69 73 2C  20 74 68 65 20 66 61 73  74 65 72 20 69 74 20 77  69 6C 6C 20 64 6F 77 6E  ffer is, the faster it will down
00025CA0  6C 6F 61 64 2E 0D 0A 0D  0A 52 65 74 75 72 6E 73  3A 09 43 3A 20 55 4C 54  52 41 5F 4F 4B 20 20 20  load.Returns:C: ULTRA_OK   
00025CC0  20 20 20 20 20 20 4E 6F  20 65 72 72 6F 72 0D 0A  09 09 09 20 20 20 4E 4F  5F 33 44 5F 46 49 4C 45        No error   NO_3D_FILE
00025CE0  20 20 20 20 20 20 20 33  44 20 66 69 6C 65 20 6E  6F 74 20 66 6F 75 6E 64  0D 0A 09 09 09 20 20 20         3D file not found   
00025D00  42 41 44 5F 33 44 5F 48  44 52 20 20 20 20 20 20  20 33 44 20 68 65 61 64  65 72 20 69 73 20 62 61  BAD_3D_HDR       3D header is ba
00025D20  64 0D 0A 09 09 09 20 20  20 4E 4F 5F 33 44 5F 48  44 52 20 20 20 20 20 20  20 20 46 69 6C 65 20 64  d   NO_3D_HDR        File d
00025D40  6F 65 73 6E 27 74 20 68  61 76 65 20 61 20 76 61  6C 69 64 20 68 65 61 64  65 72 0D 0A 09 09 09 20  oesn't have a valid header 
00025D60  20 20 4E 4F 54 5F 42 4C  4F 43 4B 5F 44 41 54 41  20 20 20 46 69 6C 65 20  69 73 20 6E 6F 74 20 69    NOT_BLOCK_DATA   File is not i
00025D80  6E 20 62 6C 6F 63 6B 65  64 20 66 6F 72 6D 61 74  0D 0A 09 09 09 20 20 20  4E 4F 5F 46 52 45 45 5F  n blocked format   NO_FREE_
00025DA0  56 4F 49 43 45 53 20 20  20 4E 6F 74 20 65 6E 6F  75 67 68 20 66 72 65 65  20 76 6F 69 63 65 73 0D  VOICES   Not enough free voices
00025DC0  0A 09 09 09 20 20 20 42  41 44 5F 46 49 4C 45 5F  44 41 54 41 20 20 20 20  4E 6F 74 20 65 6E 6F 75     BAD_FILE_DATA    Not enou
00025DE0  67 68 20 64 61 74 61 20  6F 72 20 62 61 64 20 66  69 6C 65 0D 0A 09 09 09  20 20 20 43 4F 52 52 55  gh data or bad file   CORRU
00025E00  50 54 5F 4D 45 4D 20 20  20 20 20 20 4D 65 6D 6F  72 79 20 73 74 72 75 63  74 73 20 68 61 76 65 20  PT_MEM      Memory structs have 
00025E20  62 65 65 6E 20 63 6F 72  72 75 70 74 65 64 0D 0A  09 09 09 20 20 20 44 4D  41 5F 42 55 53 59 20 20  been corrupted   DMA_BUSY  
00025E40  20 20 20 20 20 20 20 44  4D 41 20 63 68 61 6E 6E  65 6C 20 62 75 73 79 0D  0A 0D 0A 09 09 09 50 41         DMA channel busyPA
00025E60  53 43 41 4C 3A 20 54 52  55 45 20 69 66 20 74 68  65 20 66 69 6C 65 20 63  6F 75 6C 64 20 62 65 20  SCAL: TRUE if the file could be 
00025E80  6C 6F 61 64 65 64 2E 0D  0A 09 09 09 20 20 20 20  20 20 20 20 49 66 20 46  41 4C 53 45 20 63 68 65  loaded.        If FALSE che
00025EA0  63 6B 20 55 6C 74 72 61  45 72 72 6F 72 53 74 72  20 66 6F 72 20 74 68 65  20 72 65 61 73 6F 6E 2E  ck UltraErrorStr for the reason.
00025EC0  0D 0A 0D 0A 53 65 65 20  61 6C 73 6F 3A 09 55 6C  74 72 61 4D 65 6D 41 6C  6C 6F 63 2C 20 55 6C 74  See also:UltraMemAlloc, Ult
00025EE0  72 61 56 6F 69 63 65 41  6C 6C 6F 63 2C 20 55 6C  74 72 61 44 6F 77 6E 6C  6F 61 64 0D 0A 0D 0A 0C  raVoiceAlloc, UltraDownload
00025F00  55 6C 74 72 61 53 65 74  46 72 65 71 33 44 0D 0A  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  UltraSetFreq3D________________
00025F20  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 0D 0A 0D 0A 50 75 72  70 6F 73 65 3A 09 54 6F  _________________Purpose:To
00025F40  20 73 65 74 20 74 68 65  20 66 72 65 71 75 65 6E  63 79 20 6F 66 20 61 20  33 44 20 73 6F 75 6E 64   set the frequency of a 3D sound
00025F60  20 65 66 66 65 63 74 2E  0D 0A 0D 0A 43 3A 20 20  20 20 20 09 76 6F 69 64  20 55 6C 74 72 61 53 65   effect.C:     void UltraSe
00025F80  74 46 72 65 71 33 44 28  73 6F 75 6E 64 2C 66 72  65 71 75 65 6E 63 79 29  3B 0D 0A 09 09 09 53 4F  tFreq3D(sound,frequency);SO
00025FA0  55 4E 44 5F 33 44 20 2A  73 6F 75 6E 64 3B 0D 0A  09 09 09 75 6E 73 69 67  6E 65 64 20 6C 6F 6E 67  UND_3D *sound;unsigned long
00025FC0  20 66 72 65 71 75 65 6E  63 79 3B 0D 0A 0D 0A 50  41 53 43 41 4C 3A 09 46  55 4E 43 54 49 4F 4E 20   frequency;PASCAL:FUNCTION 
00025FE0  20 55 6C 74 72 61 53 65  74 46 72 65 71 33 44 28  56 41 52 20 53 6F 75 6E  64 20 20 20 20 20 3A 20   UltraSetFreq3D(VAR Sound     : 
00026000  53 4F 55 4E 44 5F 33 44  3B 0D 0A 09 09 09 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  SOUND_3D;                  
00026020  20 20 20 20 20 20 20 20  20 20 20 46 72 65 71 75  65 6E 63 79 20 3A 20 4C  4F 4E 47 49 4E 54 29 20             Frequency : LONGINT) 
00026040  3A 20 42 4F 4F 4C 45 41  4E 3B 0D 0A 0D 0A 52 65  6D 61 72 6B 73 3A 09 54  68 69 73 20 72 6F 75 74  : BOOLEAN;Remarks:This rout
00026060  69 6E 65 20 77 69 6C 6C  20 61 6C 6C 6F 77 20 79  6F 75 20 74 6F 20 61 6C  74 65 72 20 74 68 65 20  ine will allow you to alter the 
00026080  66 72 65 71 75 65 6E 63  79 20 74 68 61 74 20 74  68 65 20 33 44 20 73 6F  75 6E 64 20 69 73 20 75  frequency that the 3D sound is u
000260A0  73 69 6E 67 2E 20 54 68  69 73 20 61 6C 6C 6F 77  73 20 79 6F 75 20 74 6F  20 64 6F 20 70 69 74 63  sing. This allows you to do pitc
000260C0  68 20 73 68 69 66 74 69  6E 67 20 74 6F 20 67 65  74 20 61 20 64 6F 70 70  6C 65 72 20 73 68 69 66  h shifting to get a doppler shif
000260E0  74 20 74 79 70 65 20 65  66 66 65 63 74 2E 20 54  68 69 73 20 72 6F 75 74  69 6E 65 20 63 61 6E 20  t type effect. This routine can 
00026100  6F 6E 6C 79 20 62 65 20  64 6F 6E 65 20 6F 6E 20  62 6C 6F 63 6B 65 64 20  64 61 74 61 2E 0D 0A 0D  only be done on blocked data.
00026120  0A 52 65 74 75 72 6E 73  3A 09 43 3A 20 55 4C 54  52 41 5F 4F 4B 20 20 20  20 20 20 20 20 20 20 4E  Returns:C: ULTRA_OK          N
00026140  6F 20 70 72 6F 62 6C 65  6D 0D 0A 09 09 09 20 20  20 4E 4F 54 5F 42 4C 4F  43 4B 45 44 5F 44 41 54  o problem   NOT_BLOCKED_DAT
00026160  41 20 20 43 61 6E 27 74  20 63 68 61 6E 67 65 20  66 72 65 71 20 6F 66 20  69 6E 74 65 72 6C 65 61  A  Can't change freq of interlea
00026180  76 65 64 20 64 61 74 61  0D 0A 0D 0A 09 09 09 50  41 53 43 41 4C 3A 20 54  52 55 45 20 69 66 20 74  ved dataPASCAL: TRUE if t
000261A0  68 65 20 66 72 65 71 75  65 6E 63 79 20 77 61 73  20 63 68 61 6E 67 65 64  20 6F 6B 2E 0D 0A 09 09  he frequency was changed ok.
000261C0  09 20 20 20 20 20 20 20  20 49 66 20 46 41 4C 53  45 2C 20 63 68 65 63 6B  20 55 6C 74 72 61 45 72          If FALSE, check UltraEr
000261E0  72 6F 72 53 74 72 20 66  6F 72 20 74 68 65 20 72  65 61 73 6F 6E 2E 0D 0A  0D 0A 0D 0A 0D 0A 55 6C  rorStr for the reason.Ul
00026200  74 72 61 52 65 6C 65 61  73 65 33 44 49 6E 74 65  72 6C 65 61 76 65 0D 0A  5F 5F 5F 5F 5F 5F 5F 5F  traRelease3DInterleave________
00026220  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 0D 0A 0D 0A 50 75 72  _________________________Pur
00026240  70 6F 73 65 3A 09 54 6F  20 72 65 6C 65 61 73 65  20 33 44 20 72 65 73 6F  75 72 63 65 73 20 66 6F  pose:To release 3D resources fo
00026260  72 20 61 6E 20 69 6E 74  65 72 6C 65 61 76 65 64  20 65 66 66 65 63 74 2E  0D 0A 0D 0A 43 3A 20 20  r an interleaved effect.C:  
00026280  20 20 20 09 76 6F 69 64  20 55 6C 74 72 61 52 65  6C 65 61 73 65 33 44 49  6E 74 65 72 6C 65 61 76     void UltraRelease3DInterleav
000262A0  65 28 73 6F 75 6E 64 29  0D 0A 09 09 09 53 4F 55  4E 44 5F 33 44 20 2A 73  6F 75 6E 64 3B 0D 0A 0D  e(sound)SOUND_3D *sound;
000262C0  0A 50 41 53 43 41 4C 3A  09 50 52 4F 43 45 44 55  52 45 20 55 6C 74 72 61  52 65 6C 65 61 73 65 33  PASCAL:PROCEDURE UltraRelease3
000262E0  44 49 6E 74 65 72 6C 65  61 76 65 28 56 41 52 20  53 6F 75 6E 64 20 3A 20  53 4F 55 4E 44 5F 33 44  DInterleave(VAR Sound : SOUND_3D
00026300  29 3B 0D 0A 0D 0A 52 65  6D 61 72 6B 73 3A 09 54  68 69 73 20 72 6F 75 74  69 6E 65 73 20 77 69 6C  );Remarks:This routines wil
00026320  6C 20 72 65 6C 65 61 73  65 20 74 68 65 20 44 52  41 4D 20 61 6E 64 20 76  6F 69 63 65 73 20 61 6C  l release the DRAM and voices al
00026340  6C 6F 63 61 74 65 64 20  66 6F 72 20 61 6E 20 69  6E 74 65 72 6C 65 61 76  65 64 20 73 6F 75 6E 64  located for an interleaved sound
00026360  20 74 72 61 63 6B 2E 0D  0A 0D 0A 53 65 65 20 61  6C 73 6F 3A 09 55 6C 74  72 61 53 65 74 75 70 33   track.See also:UltraSetup3
00026380  44 49 6E 74 65 72 6C 65  61 76 65 0D 0A 0D 0A 0C  55 6C 74 72 61 53 65 74  75 70 33 44 49 6E 74 65  DInterleaveUltraSetup3DInte
000263A0  72 6C 65 61 76 65 0D 0A  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  rleave________________________
000263C0  5F 5F 5F 5F 5F 5F 5F 5F  5F 0D 0A 0D 0A 50 75 72  70 6F 73 65 3A 09 54 6F  20 73 65 74 20 75 70 20  _________Purpose:To set up 
000263E0  66 6F 72 20 61 6E 20 69  6E 74 65 72 6C 65 61 76  65 64 20 33 44 20 73 6F  75 6E 64 20 65 66 66 65  for an interleaved 3D sound effe
00026400  63 74 2E 0D 0A 0D 0A 43  3A 20 20 20 20 20 09 69  6E 74 20 55 6C 74 72 61  53 65 74 75 70 33 44 49  ct.C:     int UltraSetup3DI
00026420  6E 74 65 72 6C 65 61 76  65 28 73 6F 75 6E 64 2C  66 69 6C 65 6E 61 6D 65  2C 73 69 7A 65 29 3B 0D  nterleave(sound,filename,size);
00026440  0A 09 09 09 53 4F 55 4E  44 5F 33 44 20 2A 73 6F  75 6E 64 3B 0D 0A 09 09  09 63 68 61 72 20 2A 66  SOUND_3D *sound;char *f
00026460  69 6C 65 6E 61 6D 65 3B  0D 0A 09 09 09 75 6E 73  69 67 6E 65 64 20 6C 6F  6E 67 20 73 69 7A 65 3B  ilename;unsigned long size;
00026480  0D 0A 0D 0A 50 41 53 43  41 4C 3A 09 46 55 4E 43  54 49 4F 4E 20 55 6C 74  72 61 53 65 74 75 70 33  PASCAL:FUNCTION UltraSetup3
000264A0  44 49 6E 74 65 72 6C 65  61 76 65 28 56 41 52 20  53 6F 75 6E 64 20 20 20  20 3A 20 53 4F 55 4E 44  DInterleave(VAR Sound    : SOUND
000264C0  5F 33 44 3B 0D 0A 09 09  09 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  _3D;                       
000264E0  20 20 20 20 20 20 20 20  20 56 41 52 20 46 69 6C  65 4E 61 6D 65 20 3A 20  53 54 52 49 4E 47 3B 0D           VAR FileName : STRING;
00026500  0A 09 09 09 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20                              
00026520  20 20 20 20 53 69 7A 65  20 3A 20 4C 4F 4E 47 49  4E 54 29 20 3A 20 42 4F  4F 4C 45 41 4E 3B 0D 0A      Size : LONGINT) : BOOLEAN;
00026540  0D 0A 52 65 6D 61 72 6B  73 3A 09 54 68 69 73 20  72 6F 75 74 69 6E 65 20  77 69 6C 6C 20 61 6C 6C  Remarks:This routine will all
00026560  6F 63 61 74 65 20 74 68  65 20 76 6F 69 63 65 73  20 61 6E 64 20 6D 65 6D  6F 72 79 20 6E 65 63 65  ocate the voices and memory nece
00026580  73 73 61 72 79 20 74 6F  20 70 6C 61 79 20 62 61  63 6B 20 61 6E 20 69 6E  74 65 72 6C 65 61 76 65  ssary to play back an interleave
000265A0  64 20 33 44 20 73 6F 75  6E 64 2E 20 49 74 20 77  69 6C 6C 20 4E 4F 54 20  6C 6F 61 64 20 61 6E 79  d 3D sound. It will NOT load any
000265C0  20 6F 66 20 74 68 65 20  66 69 6C 65 20 64 61 74  61 20 69 6E 74 6F 20 44  52 41 4D 2E 20 59 6F 75   of the file data into DRAM. You
000265E0  72 20 61 70 70 6C 69 63  61 74 69 6F 6E 20 69 73  20 72 65 73 70 6F 6E 73  69 62 6C 65 20 66 6F 72  r application is responsible for
00026600  20 74 68 61 74 2E 20 49  74 20 77 69 6C 6C 20 6F  70 65 6E 20 74 68 65 20  66 69 6C 65 2C 20 72 65   that. It will open the file, re
00026620  61 64 20 74 68 65 20 68  65 61 64 65 72 2C 20 61  6C 6C 6F 63 61 74 65 20  74 68 65 20 61 70 70 72  ad the header, allocate the appr
00026640  6F 70 72 69 61 74 65 20  72 65 73 6F 75 72 63 65  73 2C 20 61 6E 64 20 73  65 74 20 75 70 20 74 68  opriate resources, and set up th
00026660  65 20 62 65 67 69 6E 2C  20 73 74 61 72 74 20 61  6E 64 20 65 6E 64 20 6C  6F 6F 70 20 70 6F 69 6E  e begin, start and end loop poin
00026680  74 73 20 66 6F 72 20 65  61 63 68 20 76 6F 69 63  65 2E 20 53 69 6E 63 65  20 74 68 65 20 73 6F 75  ts for each voice. Since the sou
000266A0  6E 64 20 69 73 20 20 69  6E 74 65 72 6C 65 61 76  65 64 2C 20 74 68 65 20  6C 6F 6F 70 20 70 6F 69  nd is  interleaved, the loop poi
000266C0  6E 74 73 20 61 72 65 20  73 74 61 67 67 61 72 65  64 20 61 70 70 72 6F 70  72 69 61 74 65 6C 79 2E  nts are staggared appropriately.
000266E0  0D 0A 0D 0A 52 65 74 75  72 6E 73 3A 09 43 3A 20  55 4C 54 52 41 5F 4F 4B  20 20 20 20 20 20 20 20  Returns:C: ULTRA_OK        
00026700  20 20 20 20 20 4E 6F 20  65 72 72 6F 72 0D 0A 09  09 09 20 20 20 4E 4F 5F  33 44 5F 46 49 4C 45 20       No error   NO_3D_FILE 
00026720  20 20 20 20 20 20 20 20  20 20 33 44 20 66 69 6C  65 20 6E 6F 74 20 66 6F  75 6E 64 0D 0A 09 09 09            3D file not found
00026740  20 20 20 42 41 44 5F 33  44 5F 48 44 52 20 20 20  20 20 20 20 20 20 20 20  33 44 20 68 65 61 64 65     BAD_3D_HDR           3D heade
00026760  72 20 69 73 20 62 61 64  0D 0A 09 09 09 20 20 20  4E 4F 5F 33 44 5F 48 44  52 20 20 20 20 20 20 20  r is bad   NO_3D_HDR       
00026780  20 20 20 20 20 46 69 6C  65 20 64 6F 65 73 6E 27  74 20 68 61 76 65 20 61  20 76 61 6C 69 64 20 68       File doesn't have a valid h
000267A0  65 61 64 65 72 0D 0A 09  09 09 20 20 20 4E 4F 54  5F 49 4E 54 45 52 4C 45  41 56 45 44 5F 44 41 54  eader   NOT_INTERLEAVED_DAT
000267C0  41 20 46 69 6C 65 20 69  6E 20 62 6C 6F 63 6B 65  64 20 66 6F 72 6D 61 74  0D 0A 09 09 09 20 20 20  A File in blocked format   
000267E0  4E 4F 5F 46 52 45 45 5F  56 4F 49 43 45 53 20 20  20 20 20 20 20 4E 6F 74  20 65 6E 6F 75 67 68 20  NO_FREE_VOICES       Not enough 
00026800  66 72 65 65 20 76 6F 69  63 65 73 0D 0A 09 09 09  20 20 20 42 41 44 5F 46  49 4C 45 5F 44 41 54 41  free voices   BAD_FILE_DATA
00026820  20 20 20 20 20 20 20 20  4E 6F 74 20 65 6E 6F 75  67 68 20 64 61 74 61 20  6F 72 20 62 61 64 20 66          Not enough data or bad f
00026840  69 6C 65 0D 0A 09 09 09  20 20 20 43 4F 52 52 55  50 54 5F 4D 45 4D 20 20  20 20 20 20 20 20 20 20  ile   CORRUPT_MEM          
00026860  4D 65 6D 6F 72 79 20 73  74 72 75 63 74 73 20 68  61 76 65 20 62 65 65 6E  20 63 6F 72 72 75 70 74  Memory structs have been corrupt
00026880  65 64 0D 0A 0D 0A 09 09  09 50 41 53 43 41 4C 3A  20 54 52 55 45 20 69 66  20 74 68 65 20 66 69 6C  edPASCAL: TRUE if the fil
000268A0  65 20 63 6F 75 6C 64 20  62 65 20 72 65 61 64 20  73 75 63 63 65 73 73 66  75 6C 6C 79 2E 0D 0A 09  e could be read successfully.
000268C0  09 09 20 20 20 20 20 20  20 20 49 66 20 46 41 4C  53 45 2C 20 63 68 65 63  6B 20 55 6C 74 72 61 45          If FALSE, check UltraE
000268E0  72 72 6F 72 53 74 72 20  66 6F 72 20 74 68 65 20  72 65 61 73 6F 6E 2E 0D  0A 0D 0A 53 65 65 20 61  rrorStr for the reason.See a
00026900  6C 73 6F 3A 09 55 6C 74  72 61 4C 6F 61 64 33 44  45 66 66 65 63 74 0D 0A  0D 0A 0D 0A 0D 0A 55 6C  lso:UltraLoad3DEffectUl
00026920  74 72 61 53 74 61 72 74  33 44 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  traStart3D____________________
00026940  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 73 74 61  _____________Purpose:To sta
00026960  72 74 20 61 20 33 44 20  73 6F 75 6E 64 20 77 68  69 63 68 20 68 61 73 20  62 65 65 6E 20 6C 6F 61  rt a 3D sound which has been loa
00026980  64 65 64 2E 0D 0A 0D 0A  43 3A 20 20 20 20 20 09  76 6F 69 64 20 55 6C 74  72 61 53 74 61 72 74 33  ded.C:     void UltraStart3
000269A0  44 28 73 6F 75 6E 64 29  3B 0D 0A 09 09 09 53 4F  55 4E 44 5F 33 44 20 2A  73 6F 75 6E 64 3B 0D 0A  D(sound);SOUND_3D *sound;
000269C0  0D 0A 50 41 53 43 41 4C  3A 09 50 52 4F 43 45 44  55 52 45 20 55 6C 74 72  61 53 74 61 72 74 33 44  PASCAL:PROCEDURE UltraStart3D
000269E0  28 56 41 52 20 53 6F 75  6E 64 20 3A 20 53 4F 55  4E 44 5F 33 44 29 3B 0D  0A 0D 0A 52 65 6D 61 72  (VAR Sound : SOUND_3D);Remar
00026A00  6B 73 3A 09 54 68 69 73  20 72 6F 75 74 69 6E 65  20 77 69 6C 6C 20 73 74  61 72 74 20 61 20 33 44  ks:This routine will start a 3D
00026A20  20 73 6F 75 6E 64 2E 20  49 66 20 79 6F 75 20 77  61 6E 74 20 69 74 20 74  6F 20 62 65 67 69 6E 20   sound. If you want it to begin 
00026A40  61 74 20 61 20 73 70 65  63 69 66 69 63 20 70 6F  69 6E 74 20 69 6E 20 73  70 61 63 65 2C 20 62 65  at a specific point in space, be
00026A60  20 73 75 72 65 20 74 68  61 74 20 79 6F 75 20 70  6F 73 69 74 69 6F 6E 20  69 74 20 66 69 72 73 74   sure that you position it first
00026A80  2E 20 49 74 20 69 73 20  6E 6F 74 20 6E 65 63 65  73 73 61 72 79 20 74 6F  20 73 74 6F 70 20 74 68  . It is not necessary to stop th
00026AA0  65 20 73 6F 75 6E 64 20  62 65 66 6F 72 65 20 73  74 61 72 74 69 6E 67 20  69 74 20 61 67 61 69 6E  e sound before starting it again
00026AC0  2E 0D 0A 0D 0A 53 65 65  20 61 6C 73 6F 3A 09 55  6C 74 72 61 53 74 61 72  74 33 44 0D 0A 0C 55 6C  .See also:UltraStart3DUl
00026AE0  74 72 61 53 74 6F 70 33  44 0D 0A 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  traStop3D_____________________
00026B00  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 0D 0A 0D 0A  50 75 72 70 6F 73 65 3A  09 54 6F 20 73 74 6F 70  ____________Purpose:To stop
00026B20  20 61 20 33 44 20 73 6F  75 6E 64 20 77 68 69 63  68 20 69 73 20 70 6C 61  79 69 6E 67 2E 0D 0A 0D   a 3D sound which is playing.
00026B40  0A 43 3A 20 20 20 20 20  09 76 6F 69 64 20 55 6C  74 72 61 53 74 6F 70 33  44 28 73 6F 75 6E 64 2C  C:     void UltraStop3D(sound,
00026B60  61 62 72 75 70 74 6C 79  29 3B 0D 0A 09 09 09 53  4F 55 4E 44 5F 33 44 20  2A 73 6F 75 6E 64 3B 0D  abruptly);SOUND_3D *sound;
00026B80  0A 09 09 09 69 6E 74 20  61 62 72 75 70 74 6C 79  3B 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 50 52 4F  int abruptly;PASCAL:PRO
00026BA0  43 45 44 55 52 45 20 55  6C 74 72 61 53 74 6F 70  33 44 28 56 41 52 20 53  6F 75 6E 64 20 20 20 20  CEDURE UltraStop3D(VAR Sound    
00026BC0  3A 20 53 4F 55 4E 44 5F  33 44 3B 0D 0A 09 09 09  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  : SOUND_3D;                
00026BE0  20 20 20 20 20 20 20 20  20 20 41 62 72 75 70 74  6C 79 20 3A 20 42 4F 4F  4C 45 41 4E 29 3B 0D 0A            Abruptly : BOOLEAN);
00026C00  0D 0A 52 65 6D 61 72 6B  73 3A 09 54 68 69 73 20  72 6F 75 74 69 6E 65 20  77 69 6C 6C 20 73 74 6F  Remarks:This routine will sto
00026C20  70 20 61 20 33 44 20 73  6F 75 6E 64 2E 20 54 68  65 72 65 20 61 72 65 20  74 77 6F 20 77 61 79 73  p a 3D sound. There are two ways
00026C40  20 74 6F 20 73 74 6F 70  20 61 20 73 6F 75 6E 64  3A 20 69 66 20 74 68 65  20 27 61 62 72 75 70 74   to stop a sound: if the 'abrupt
00026C60  6C 79 27 20 66 6C 61 67  20 69 73 20 54 52 55 45  2C 20 74 68 65 6E 20 74  68 65 20 73 6F 75 6E 64  ly' flag is TRUE, then the sound
00026C80  20 77 69 6C 6C 20 73 68  75 74 20 6F 66 66 20 69  6D 6D 65 64 69 61 74 65  6C 79 3B 20 69 66 20 69   will shut off immediately; if i
00026CA0  74 20 69 73 20 46 41 4C  53 45 2C 20 74 68 65 6E  20 74 68 65 20 73 6F 75  6E 64 20 77 69 6C 6C 20  t is FALSE, then the sound will 
00026CC0  62 65 20 72 61 6D 70 65  64 20 64 6F 77 6E 20 76  65 72 79 20 71 75 69 63  6B 6C 79 2E 20 54 68 65  be ramped down very quickly. The
00026CE0  20 73 65 63 6F 6E 64 20  6D 65 74 68 6F 64 20 77  69 6C 6C 20 67 69 76 65  20 61 20 73 6D 6F 6F 74   second method will give a smoot
00026D00  68 65 72 20 74 72 61 6E  73 69 74 69 6F 6E 2E 0D  0A 0D 0A 0D 0A 0D 0A 55  6C 74 72 61 55 6E 4C 6F  her transition.UltraUnLo
00026D20  61 64 33 44 45 66 66 65  63 74 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ad3DEffect____________________
00026D40  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  0A 50 75 72 70 6F 73 65  3A 09 54 6F 20 66 72 65  _____________Purpose:To fre
00026D60  65 20 72 65 73 6F 75 72  63 65 73 20 75 73 65 64  20 62 79 20 61 20 33 44  20 65 66 66 65 63 74 2E  e resources used by a 3D effect.
00026D80  0D 0A 0D 0A 43 3A 20 20  20 20 20 09 76 6F 69 64  20 55 6C 74 72 61 55 6E  4C 6F 61 64 33 44 45 66  C:     void UltraUnLoad3DEf
00026DA0  66 65 63 74 28 73 6F 75  6E 64 29 3B 0D 0A 09 09  09 53 4F 55 4E 44 5F 33  44 20 2A 73 6F 75 6E 64  fect(sound);SOUND_3D *sound
00026DC0  3B 0D 0A 0D 0A 50 41 53  43 41 4C 3A 09 50 52 4F  43 45 44 55 52 45 20 55  6C 74 72 61 55 6E 4C 6F  ;PASCAL:PROCEDURE UltraUnLo
00026DE0  61 64 33 44 45 66 66 65  63 74 28 56 41 52 20 53  6F 75 6E 64 20 3A 20 53  4F 55 4E 44 5F 33 44 29  ad3DEffect(VAR Sound : SOUND_3D)
00026E00  3B 0D 0A 0D 0A 52 65 6D  61 72 6B 73 3A 09 54 68  69 73 20 72 6F 75 74 69  6E 65 20 69 73 20 75 73  ;Remarks:This routine is us
00026E20  65 64 20 74 6F 20 66 72  65 65 20 75 70 20 61 6C  6C 20 74 68 65 20 72 65  73 6F 75 72 63 65 73 20  ed to free up all the resources 
00026E40  28 76 6F 69 63 65 73 20  26 20 44 52 41 4D 29 20  74 68 61 74 20 61 20 33  44 20 20 73 6F 75 6E 64  (voices & DRAM) that a 3D  sound
00026E60  20 20 75 73 65 73 2E 20  20 53 69 6E 63 65 20 61  20 33 44 20 73 6F 75 6E  64 20 63 61 6E 20 75 73    uses.  Since a 3D sound can us
00026E80  65 20 61 20 6C 6F 74 20  6F 66 20 20 74 68 65 20  20 76 6F 69 63 65 73 20  20 26 20 44 52 41 4D 2C  e a lot of  the  voices  & DRAM,
00026EA0  20 79 6F 75 20 73 68 6F  75 6C 64 20 66 72 65 65  20 75 70 20 74 68 65 20  20 72 65 73 6F 75 72 63   you should free up the  resourc
00026EC0  65 73 20 20 77 68 65 6E  65 76 65 72 20 79 6F 75  20 63 61 6E 2E 0D 0A 0D  0A 53 65 65 20 61 6C 73  es  whenever you can.See als
00026EE0  6F 3A 09 55 6C 74 72 61  4C 6F 61 64 33 44 45 66  66 65 63 74 0D 0A 0D 0A  0D 0A 0C 41 70 70 65 6E  o:UltraLoad3DEffectAppen
00026F00  64 69 78 20 41 20 2D 20  45 72 72 6F 72 20 43 6F  64 65 73 0D 0A 0D 0A 3D  3D 3D 3D 3D 3D 0D 0A 20  dix A - Error Codes====== 
00026F20  20 43 3A 20 20 0D 0A 3D  3D 3D 3D 3D 3D 0D 0A 0D  0A 4D 61 69 6E 20 72 6F  75 74 69 6E 65 73 3A 20   C:  ======Main routines: 
00026F40  28 74 68 65 73 65 20 61  72 65 20 64 65 66 69 6E  65 64 20 69 6E 20 55 4C  54 52 41 45 52 52 2E 48  (these are defined in ULTRAERR.H
00026F60  29 0D 0A 0D 0A 20 20 55  4C 54 52 41 5F 4F 4B 20  20 20 20 20 20 20 20 20  20 20 31 20 20 20 4E 6F  )  ULTRA_OK           1   No
00026F80  20 65 72 72 6F 72 0D 0A  20 20 42 41 44 5F 4E 55  4D 5F 4F 46 5F 56 4F 49  43 45 53 20 20 32 20 20   error  BAD_NUM_OF_VOICES  2  
00026FA0  20 6D 75 73 74 20 62 65  20 31 34 2D 33 32 0D 0A  20 20 4E 4F 5F 4D 45 4D  4F 52 59 20 20 20 20 20   must be 14-32  NO_MEMORY     
00026FC0  20 20 20 20 20 33 20 20  20 4E 6F 74 20 65 6E 6F  75 67 68 20 66 72 65 65  20 44 52 41 4D 20 6C 65       3   Not enough free DRAM le
00026FE0  66 74 0D 0A 20 20 43 4F  52 52 55 50 54 5F 4D 45  4D 20 20 20 20 20 20 20  20 34 20 20 20 6D 65 6D  ft  CORRUPT_MEM        4   mem
00027000  6F 72 79 20 73 74 72 75  63 74 75 72 65 73 20 61  72 65 20 63 6F 72 72 75  70 74 0D 0A 20 20 4E 4F  ory structures are corrupt  NO
00027020  5F 55 4C 54 52 41 20 20  20 20 20 20 20 20 20 20  20 35 20 20 20 43 61 6E  27 74 20 66 69 6E 64 20  _ULTRA           5   Can't find 
00027040  61 6E 20 55 6C 74 72 61  53 6F 75 6E 64 0D 0A 20  20 44 4D 41 5F 42 55 53  59 20 20 20 20 20 20 20  an UltraSound  DMA_BUSY       
00027060  20 20 20 20 36 20 20 20  54 68 69 73 20 44 4D 41  20 63 68 61 6E 6E 65 6C  20 69 73 20 73 74 69 6C      6   This DMA channel is stil
00027080  6C 20 62 75 73 79 0D 0A  20 20 42 41 44 5F 44 4D  41 5F 41 44 44 52 20 20  20 20 20 20 20 37 20 20  l busy  BAD_DMA_ADDR       7  
000270A0  20 61 75 74 6F 20 69 6E  69 74 20 61 63 72 6F 73  73 20 70 61 67 65 20 62  6F 75 6E 64 61 72 69 65   auto init across page boundarie
000270C0  73 0D 0A 20 20 56 4F 49  43 45 5F 4F 55 54 5F 4F  46 5F 52 41 4E 47 45 20  38 20 20 20 61 6C 6C 6F  s  VOICE_OUT_OF_RANGE 8   allo
000270E0  63 61 74 65 20 61 20 76  6F 69 63 65 20 70 61 73  74 20 23 20 61 63 74 69  76 65 0D 0A 20 20 56 4F  cate a voice past # active  VO
00027100  49 43 45 5F 4E 4F 54 5F  46 52 45 45 20 20 20 20  20 39 20 20 20 76 6F 69  63 65 20 68 61 73 20 61  ICE_NOT_FREE     9   voice has a
00027120  6C 72 65 61 64 79 20 62  65 65 6E 20 61 6C 6C 6F  63 61 74 65 64 0D 0A 20  20 4E 4F 5F 46 52 45 45  lready been allocated  NO_FREE
00027140  5F 56 4F 49 43 45 53 20  20 20 20 20 31 30 20 20  20 6E 6F 74 20 61 6E 79  20 76 6F 69 63 65 73 20  _VOICES     10   not any voices 
00027160  66 72 65 65 0D 0A 0D 0A  33 44 20 66 75 6E 63 74  69 6F 6E 73 3A 20 28 74  68 65 73 65 20 61 72 65  free3D functions: (these are
00027180  20 64 65 66 69 6E 65 64  20 69 6E 20 54 48 52 45  45 44 2E 48 29 0D 0A 0D  0A 20 20 4E 4F 5F 33 44   defined in THREED.H)  NO_3D
000271A0  5F 46 49 4C 45 09 09 09  31 30 31 20 20 20 43 61  6E 27 74 20 6F 70 65 6E  20 66 69 6C 65 0D 0A 20  _FILE101   Can't open file 
000271C0  20 42 41 44 5F 33 44 5F  48 44 52 09 09 09 31 30  32 20 20 20 48 65 61 64  65 72 20 66 6F 72 20 66   BAD_3D_HDR102   Header for f
000271E0  69 6C 65 20 69 73 20 63  6F 72 72 75 70 74 2F 6E  6F 6E 2D 65 78 69 73 74  65 6E 74 0D 0A 20 20 4E  ile is corrupt/non-existent  N
00027200  4F 5F 44 52 41 4D 5F 33  44 09 09 09 31 30 33 20  20 20 4E 6F 74 20 65 6E  6F 75 67 68 20 72 6F 6F  O_DRAM_3D103   Not enough roo
00027220  6D 20 66 6F 72 20 74 68  69 73 20 73 6F 75 6E 64  0D 0A 20 20 4E 4F 5F 33  44 5F 48 44 52 09 09 09  m for this sound  NO_3D_HDR
00027240  31 30 34 20 20 20 4E 6F  20 68 65 61 64 65 72 20  6F 6E 20 74 68 69 73 20  66 69 6C 65 0D 0A 20 20  104   No header on this file  
00027260  4E 4F 54 5F 42 4C 4F 43  4B 5F 44 41 54 41 09 09  31 30 35 20 20 20 64 61  74 61 20 6E 6F 74 20 69  NOT_BLOCK_DATA105   data not i
00027280  6E 20 62 6C 6F 63 6B 20  66 6F 72 6D 61 74 0D 0A  20 20 42 41 44 5F 46 49  4C 45 5F 44 41 54 41 09  n block format  BAD_FILE_DATA
000272A0  09 31 30 36 20 20 20 6E  6F 74 20 65 6E 6F 75 67  68 20 64 61 74 61 20 61  73 20 68 65 61 64 65 72  106   not enough data as header
000272C0  20 73 61 79 73 0D 0A 20  20 4E 4F 54 5F 49 4E 54  45 52 4C 45 41 56 45 44  5F 44 41 54 41 09 31 30   says  NOT_INTERLEAVED_DATA10
000272E0  37 09 64 61 74 61 20 6E  6F 74 20 69 6E 20 69 6E  74 65 72 6C 65 61 76 65  64 20 66 6F 72 6D 61 74  7data not in interleaved format
00027300  0D 0A 20 20 42 41 44 5F  33 44 5F 46 52 45 51 09  09 09 31 30 38 09 69 6E  76 61 6C 69 64 20 66 72    BAD_3D_FREQ108invalid fr
00027320  65 71 2E 20 66 6F 72 20  69 6E 74 65 72 6C 65 61  76 65 64 20 33 44 20 64  61 74 61 0D 0A 0D 0A 0D  eq. for interleaved 3D data
00027340  0A 0D 0A 3D 3D 3D 3D 3D  3D 3D 3D 3D 0D 0A 20 50  41 53 43 41 4C 3A 0D 0A  3D 3D 3D 3D 3D 3D 3D 3D  ========= PASCAL:========
00027360  3D 0D 0A 0D 0A 50 6C 65  61 73 65 20 73 65 65 20  74 68 65 20 64 69 73 63  75 73 73 69 6F 6E 20 6F  =Please see the discussion o
00027380  66 20 74 68 65 20 50 41  53 43 41 4C 20 65 72 72  6F 72 20 68 61 6E 64 6C  69 6E 67 20 74 65 63 68  f the PASCAL error handling tech
000273A0  6E 69 71 75 65 73 20 61  74 20 74 68 65 20 65 6E  64 20 6F 66 20 73 65 63  74 69 6F 6E 20 31 2E 38  niques at the end of section 1.8
000273C0  2E 31 2E 0D 0A 0D 0A 0D  0A 0C 41 70 70 65 6E 64  69 78 20 42 20 2D 20 56  6F 6C 75 6D 65 20 43 6F  .1.Appendix B - Volume Co
000273E0  6E 74 72 6F 6C 0D 0A 0D  0A 48 65 72 65 20 61 72  65 20 74 68 65 20 76 6F  6C 75 6D 65 20 72 61 6D  ntrolHere are the volume ram
00027400  70 20 63 6F 6E 74 72 6F  6C 20 62 69 74 20 64 65  66 69 6E 69 74 69 6F 6E  73 3A 0D 0A 0D 0A 20 20  p control bit definitions:  
00027420  20 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D   ===============================
00027440  3D 3D 0D 0A 20 20 20 7C  20 37 20 7C 20 36 20 7C  20 35 20 7C 20 34 20 7C  20 33 20 7C 20 32 20 7C  ==   | 7 | 6 | 5 | 4 | 3 | 2 |
00027460  20 31 20 7C 20 30 20 7C  0D 0A 20 20 20 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D   1 | 0 |   ===================
00027480  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 0D 0A  20 20 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  ==============     |   |   |  
000274A0  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 0D 0A 20 20 20 20  20 7C 20 20 20 7C 20 20   |   |   |   |   |     |   |  
000274C0  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 2B 2D 2D  2D 2D 20 52 65 73 65 72   |   |   |   |   |   +---- Reser
000274E0  76 65 64 0D 0A 20 20 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  ved     |   |   |   |   |   | 
00027500  20 20 2B 2D 2D 2D 2D 2D  2D 2D 2D 20 52 65 73 65  72 76 65 64 0D 0A 20 20  20 20 20 7C 20 20 20 7C    +-------- Reserved     |   |
00027520  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 2B  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 20 52 65 73     |   |   |   +------------ Res
00027540  65 72 76 65 64 0D 0A 20  20 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 2B 2D 2D 2D  erved     |   |   |   |   +---
00027560  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 20 6C 6F  6F 70 20 65 6E 61 62 6C  65 20 28 30 3D 6E 6F 20  ------------- loop enable (0=no 
00027580  6C 6F 6F 70 2C 20 31 3D  6C 6F 6F 70 29 0D 0A 20  20 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  loop, 1=loop)     |   |   |   
000275A0  2B 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 20 62 69  2D 64 69 72 65 63 74 69  +-------------------- bi-directi
000275C0  6F 6E 2E 20 6C 6F 6F 70  20 28 31 3D 65 6E 61 62  6C 65 29 0D 0A 20 20 20  20 20 7C 20 20 20 7C 20  on. loop (1=enable)     |   | 
000275E0  20 20 2B 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 45 6E 61 62    +------------------------ Enab
00027600  6C 65 20 76 6F 6C 75 6D  65 20 72 61 6D 70 20 49  52 51 0D 0A 20 20 20 20  20 7C 20 20 20 2B 2D 2D  le volume ramp IRQ     |   +--
00027620  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 20 52 65 73 65 72  -------------------------- Reser
00027640  76 65 64 0D 0A 20 20 20  20 20 2B 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  ved     +---------------------
00027660  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 52 65 73 65  72 76 65 64 0D 0A 0D 0A  54 68 65 20 62 69 74 73  ----------- ReservedThe bits
00027680  20 74 68 61 74 20 73 68  6F 75 6C 64 20 62 65 20  73 65 74 20 62 79 20 74  68 65 20 61 70 70 6C 69   that should be set by the appli
000276A0  63 61 74 69 6F 6E 20 74  6F 20 67 65 74 20 61 20  70 61 72 74 69 63 75 6C  61 72 20 74 79 70 65 20  cation to get a particular type 
000276C0  6F 66 20 76 6F 6C 75 6D  65 20 72 61 6D 70 2E 20  54 68 65 20 63 6F 6D 70  6C 65 74 65 64 20 76 61  of volume ramp. The completed va
000276E0  6C 75 65 20 73 68 6F 75  6C 64 20 62 65 20 73 75  70 70 6C 69 65 64 20 74  6F 20 55 6C 74 72 61 52  lue should be supplied to UltraR
00027700  61 6D 70 56 6F 6C 75 6D  65 20 61 6E 64 20 55 6C  74 72 61 52 61 6D 70 4C  69 6E 65 61 72 56 6F 6C  ampVolume and UltraRampLinearVol
00027720  75 6D 65 2E 20 49 66 20  76 6F 6C 75 6D 65 20 69  6E 74 65 72 72 75 70 74  73 20 61 72 65 20 65 6E  ume. If volume interrupts are en
00027740  61 62 6C 65 64 2C 20 6D  61 6B 65 20 73 75 72 65  20 74 68 61 74 20 79 6F  75 20 68 61 76 65 20 73  abled, make sure that you have s
00027760  65 74 20 75 70 20 61 20  76 6F 6C 75 6D 65 20 69  6E 74 65 72 72 75 70 74  20 68 61 6E 64 6C 65 72  et up a volume interrupt handler
00027780  20 28 73 65 65 20 55 6C  74 72 61 56 6F 6C 75 6D  65 48 61 6E 64 6C 65 72  29 2E 20 54 68 69 73 20   (see UltraVolumeHandler). This 
000277A0  63 61 6E 20 62 65 20 75  73 65 64 20 74 6F 20 63  72 65 61 74 65 20 79 6F  75 72 20 6F 77 6E 20 6D  can be used to create your own m
000277C0  75 6C 74 69 2D 70 6F 69  6E 74 20 76 6F 6C 75 6D  65 20 65 6E 76 65 6C 6F  70 65 73 2E 0D 0A 0D 0A  ulti-point volume envelopes.
000277E0  42 69 2D 64 69 72 65 63  74 69 6F 6E 61 6C 20 6C  6F 6F 70 69 6E 67 20 63  61 6E 20 62 65 20 75 73  Bi-directional looping can be us
00027800  65 64 20 74 6F 20 63 72  65 61 74 65 20 61 20 74  72 65 6D 65 6C 6F 20 65  66 66 65 63 74 2E 0D 0A  ed to create a tremelo effect.
00027820  0D 0A 0D 0A 0C 41 70 70  65 6E 64 69 78 20 43 20  2D 20 56 6F 69 63 65 20  43 6F 6E 74 72 6F 6C 0D  Appendix C - Voice Control
00027840  0A 0D 0A 48 65 72 65 20  61 72 65 20 74 68 65 20  76 6F 69 63 65 20 63 6F  6E 74 72 6F 6C 20 62 69  Here are the voice control bi
00027860  74 20 64 65 66 69 6E 69  74 69 6F 6E 73 3A 0D 0A  0D 0A 20 20 20 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  t definitions:   ===========
00027880  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 0D 0A  20 20 20 7C 20 37 20 7C  ======================   | 7 |
000278A0  20 36 20 7C 20 35 20 7C  20 34 20 7C 20 33 20 7C  20 32 20 7C 20 31 20 7C  20 30 20 7C 0D 0A 20 20   6 | 5 | 4 | 3 | 2 | 1 | 0 |  
000278C0  20 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D   ===============================
000278E0  3D 3D 0D 0A 20 20 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  ==     |   |   |   |   |   |  
00027900  20 7C 20 20 20 7C 0D 0A  20 20 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20   |   |     |   |   |   |   |  
00027920  20 7C 20 20 20 7C 20 20  20 2B 2D 2D 2D 2D 20 52  6F 6C 6C 6F 76 65 72 20  77 68 65 6E 20 68 69 74   |   |   +---- Rollover when hit
00027940  20 65 6E 64 69 6E 67 20  61 64 64 72 0D 0A 20 20  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C   ending addr     |   |   |   |
00027960  20 20 20 7C 20 20 20 7C  20 20 20 2B 2D 2D 2D 2D  2D 2D 2D 2D 20 52 65 73  65 72 76 65 64 0D 0A 20     |   |   +-------- Reserved 
00027980  20 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 7C 20 20 20  2B 2D 2D 2D 2D 2D 2D 2D      |   |   |   |   |   +-------
000279A0  2D 2D 2D 2D 2D 20 64 61  74 61 20 74 79 70 65 20  28 30 3D 38 20 62 69 74  20 31 3D 31 36 20 62 69  ----- data type (0=8 bit 1=16 bi
000279C0  74 29 0D 0A 20 20 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 2B 2D 2D 2D 2D 2D 2D  t)     |   |   |   |   +------
000279E0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 20 6C 6F 6F 70 20  65 6E 61 62 6C 65 20 28  30 3D 6E 6F 20 6C 6F 6F  ---------- loop enable (0=no loo
00027A00  70 2C 20 31 3D 6C 6F 6F  70 29 0D 0A 20 20 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 2B 2D 2D  p, 1=loop)     |   |   |   +--
00027A20  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 20 62 69 2D 64 69  72 65 63 74 69 6F 6E 2E  ------------------ bi-direction.
00027A40  20 6C 6F 6F 70 20 28 31  3D 65 6E 61 62 6C 65 29  0D 0A 20 20 20 20 20 7C  20 20 20 7C 20 20 20 2B   loop (1=enable)     |   |   +
00027A60  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  20 45 6E 61 62 6C 65 20  ------------------------ Enable 
00027A80  77 61 76 65 74 61 62 6C  65 20 49 52 51 0D 0A 20  20 20 20 20 7C 20 20 20  2B 2D 2D 2D 2D 2D 2D 2D  wavetable IRQ     |   +-------
00027AA0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 20 44 69  72 65 63 74 69 6F 6E 20  --------------------- Direction 
00027AC0  28 30 3D 69 6E 63 2C 20  31 3D 64 65 63 29 0D 0A  20 20 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  (0=inc, 1=dec)     +----------
00027AE0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 20 52  65 73 65 72 76 65 64 0D  ---------------------- Reserved
00027B00  0A 0D 0A 54 68 65 20 55  6C 74 72 61 53 6F 75 6E  64 20 69 73 20 63 61 70  61 62 6C 65 20 6F 66 20  The UltraSound is capable of 
00027B20  70 6C 61 79 69 6E 67 20  62 61 63 6B 20 38 20 6F  72 20 31 36 20 62 69 74  20 64 61 74 61 2E 20 28  playing back 8 or 16 bit data. (
00027B40  49 74 20 63 61 6E 20 6F  6E 6C 79 20 72 65 63 6F  72 64 20 38 20 62 69 74  29 2E 20 53 74 65 72 65  It can only record 8 bit). Stere
00027B60  6F 20 69 73 20 68 61 6E  64 6C 65 64 20 62 79 20  75 73 69 6E 67 20 32 20  76 6F 69 63 65 73 2E 20  o is handled by using 2 voices. 
00027B80  49 74 20 63 61 6E 20 6C  6F 6F 70 20 6F 6E 20 74  68 65 20 64 61 74 61 20  69 6E 20 65 69 74 68 65  It can loop on the data in eithe
00027BA0  72 20 61 20 75 6E 69 2D  64 69 72 65 63 74 69 6F  6E 61 6C 20 6F 72 20 62  69 2D 64 69 72 65 63 74  r a uni-directional or bi-direct
00027BC0  69 6F 6E 61 6C 20 6D 6F  64 65 2E 20 49 66 20 79  6F 75 20 68 61 76 65 20  61 73 6B 65 64 20 74 68  ional mode. If you have asked th
00027BE0  61 74 20 61 20 70 61 72  74 69 63 75 6C 61 72 20  76 6F 69 63 65 20 67 65  6E 65 72 61 74 65 20 61  at a particular voice generate a
00027C00  20 77 61 76 65 74 61 62  6C 65 20 69 6E 74 65 72  72 75 70 74 20 77 68 65  6E 20 69 74 20 68 69 74   wavetable interrupt when it hit
00027C20  73 20 74 68 65 20 65 6E  64 20 6F 66 20 74 68 65  20 64 61 74 61 20 28 6F  72 20 6C 6F 6F 70 20 70  s the end of the data (or loop p
00027C40  6F 69 6E 74 2C 20 69 66  20 6C 6F 6F 70 69 6E 67  20 69 73 20 73 70 65 63  69 66 69 65 64 29 2C 20  oint, if looping is specified), 
00027C60  62 65 20 73 75 72 65 20  79 6F 75 20 68 61 76 65  20 73 70 65 63 69 66 69  65 64 20 61 20 77 61 76  be sure you have specified a wav
00027C80  65 74 61 62 6C 65 20 69  6E 74 65 72 72 75 70 74  20 68 61 6E 64 65 72 20  28 55 6C 74 72 61 57 61  etable interrupt hander (UltraWa
00027CA0  76 65 48 61 6E 64 65 72  29 2E 20 54 68 65 20 6D  6F 64 65 20 62 69 74 73  20 77 6F 75 6C 64 20 62  veHander). The mode bits would b
00027CC0  65 20 63 6F 6E 73 74 72  75 63 74 65 64 20 61 6E  64 20 70 61 73 73 65 64  20 74 6F 20 55 6C 74 72  e constructed and passed to Ultr
00027CE0  61 53 74 61 72 74 56 6F  69 63 65 20 61 6E 64 20  55 6C 74 72 61 53 65 74  4C 6F 6F 70 4D 6F 64 65  aStartVoice and UltraSetLoopMode
00027D00  2E 20 54 68 65 20 72 6F  6C 6C 6F 76 65 72 20 62  69 74 20 69 73 20 75 73  65 64 20 74 6F 20 74 65  . The rollover bit is used to te
00027D20  6C 6C 20 74 68 65 20 73  6F 66 74 77 61 72 65 20  74 6F 20 70 72 6F 67 72  61 6D 20 74 68 65 20 68  ll the software to program the h
00027D40  61 72 64 77 61 72 65 3A  20 67 65 6E 65 72 61 74  65 20 61 6E 20 69 6E 74  65 72 72 75 70 74 20 77  ardware: generate an interrupt w
00027D60  68 65 6E 20 74 68 65 20  76 6F 69 63 65 20 68 69  74 73 20 74 68 65 20 65  6E 64 20 61 64 64 72 65  hen the voice hits the end addre
00027D80  73 73 2C 20 62 75 74 20  64 6F 6E 27 74 20 73 74  6F 70 20 70 6C 61 79 69  6E 67 20 74 68 65 20 76  ss, but don't stop playing the v
00027DA0  6F 69 63 65 20 28 6F 72  20 6C 6F 6F 70 20 69 66  20 6C 6F 6F 70 69 6E 67  20 69 73 20 65 6E 61 62  oice (or loop if looping is enab
00027DC0  6C 65 64 29 2E 20 54 68  69 73 20 61 6C 6C 6F 77  73 20 61 20 76 6F 69 63  65 20 74 6F 20 63 6F 6E  led). This allows a voice to con
00027DE0  74 69 6E 75 65 20 74 6F  20 70 6C 61 79 20 62 75  74 20 67 69 76 65 73 20  74 68 65 20 73 6F 66 74  tinue to play but gives the soft
00027E00  77 61 72 65 20 61 20 27  6D 61 72 6B 65 72 20 70  6F 69 6E 74 27 20 69 6E  20 74 68 65 20 70 6C 61  ware a 'marker point' in the pla
00027E20  79 62 61 63 6B 2E 20 54  68 69 73 20 63 61 6E 20  62 65 20 76 65 72 79 20  70 6F 77 65 72 66 75 6C  yback. This can be very powerful
00027E40  6C 20 74 6F 20 61 6C 6C  6F 77 20 61 20 73 65 61  6D 6C 65 73 73 20 70 6C  61 79 62 61 63 6B 2E 20  l to allow a seamless playback. 
00027E60  54 68 65 20 68 61 72 64  77 61 72 65 20 62 69 74  20 66 6F 72 20 74 75 72  6E 69 6E 67 20 72 6F 6C  The hardware bit for turning rol
00027E80  6C 6F 76 65 72 20 6F 6E  20 69 73 20 61 63 75 74  61 6C 6C 79 20 69 6E 20  74 68 65 20 76 6F 69 63  lover on is acutally in the voic
00027EA0  65 27 73 20 76 6F 6C 75  6D 65 20 63 6F 6E 74 72  6F 6C 20 72 65 67 69 73  74 65 72 20 28 74 68 65  e's volume control register (the
00027EC0  72 65 20 77 65 72 65 20  6E 6F 20 73 70 61 72 65  20 62 69 74 73 20 69 6E  20 74 68 65 20 76 6F 69  re were no spare bits in the voi
00027EE0  63 65 20 63 6F 6E 74 72  6F 6C 20 72 65 67 69 73  74 65 72 29 2E 20 4F 6E  65 20 6F 66 20 74 68 65  ce control register). One of the
00027F00  20 62 69 74 73 20 69 73  20 73 68 61 72 65 64 20  74 6F 20 74 65 6C 6C 20  74 68 65 20 74 6F 6F 6C   bits is shared to tell the tool
00027F20  6B 69 74 20 73 6F 66 74  77 61 72 65 20 74 6F 20  65 6E 61 62 6C 65 20 74  68 65 20 72 6F 6C 6C 6F  kit software to enable the rollo
00027F40  76 65 72 20 69 6E 20 74  68 65 20 76 6F 6C 75 6D  65 20 63 6F 6E 74 72 6F  6C 20 72 65 67 69 73 74  ver in the volume control regist
00027F60  65 72 2E 0D 0A 0D 0A 0C  41 70 70 65 6E 64 69 78  20 44 20 2D 20 44 4D 41  20 43 6F 6E 74 72 6F 6C  er.Appendix D - DMA Control
00027F80  0D 0A 0D 0A 48 65 72 65  20 61 72 65 20 74 68 65  20 64 6D 61 20 74 6F 2F  66 72 6F 6D 20 44 52 41  Here are the dma to/from DRA
00027FA0  4D 20 63 6F 6E 74 72 6F  6C 20 62 69 74 20 64 65  66 69 6E 69 74 69 6F 6E  73 3A 0D 0A 0D 0A 20 20  M control bit definitions:  
00027FC0  20 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D   ===============================
00027FE0  3D 3D 0D 0A 20 20 20 7C  20 37 20 7C 20 36 20 7C  20 35 20 7C 20 34 20 7C  20 33 20 7C 20 32 20 7C  ==   | 7 | 6 | 5 | 4 | 3 | 2 |
00028000  20 31 20 7C 20 30 20 7C  0D 0A 20 20 20 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D   1 | 0 |   ===================
00028020  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 0D 0A  20 20 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  ==============     |   |   |  
00028040  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 0D 0A 20 20 20 20  20 7C 20 20 20 7C 20 20   |   |   |   |   |     |   |  
00028060  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 2B 2D 2D  2D 2D 20 52 65 73 65 72   |   |   |   |   |   +---- Reser
00028080  76 65 64 0D 0A 20 20 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  ved     |   |   |   |   |   | 
000280A0  20 20 2B 2D 2D 2D 2D 2D  2D 2D 2D 20 30 3D 77 72  69 74 65 2C 31 3D 52 65  61 64 0D 0A 20 20 20 20    +-------- 0=write,1=Read    
000280C0  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 7C 20 20  20 7C 20 20 20 2B 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D   |   |   |   |   |   +----------
000280E0  2D 2D 20 52 65 73 65 72  76 65 64 0D 0A 20 20 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  -- Reserved     |   |   |   | 
00028100  20 20 2B 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 52 65 73 65  72 76 65 64 0D 0A 20 20    +---------------- Reserved  
00028120  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 2B  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D     |   |   |   +----------------
00028140  2D 2D 2D 2D 20 52 65 73  65 72 76 65 64 0D 0A 20  20 20 20 20 7C 20 20 20  7C 20 20 20 2B 2D 2D 2D  ---- Reserved     |   |   +---
00028160  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 20 52 65  73 65 72 76 65 64 0D 0A  --------------------- Reserved
00028180  20 20 20 20 20 7C 20 20  20 2B 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D       |   +----------------------
000281A0  2D 2D 2D 2D 2D 2D 20 44  61 74 61 20 73 69 7A 65  20 28 30 3D 38 20 62 69  74 2C 20 31 3D 31 36 20  ------ Data size (0=8 bit, 1=16 
000281C0  62 69 74 29 0D 0A 20 20  20 20 20 2B 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  bit)     +--------------------
000281E0  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 20 28 31 3D  63 6F 6E 76 65 72 74 20  74 6F 20 32 27 73 20 63  ------------ (1=convert to 2's c
00028200  6F 6D 70 2E 29 0D 0A 0D  0A 4E 6F 74 65 3A 09 54  68 65 20 55 6C 74 72 61  53 6F 75 6E 64 20 44 52  omp.)Note:The UltraSound DR
00028220  41 4D 20 6C 6F 63 61 74  69 6F 6E 20 4D 55 53 54  20 62 65 20 6F 6E 20 61  20 33 32 20 62 79 74 65  AM location MUST be on a 32 byte
00028240  20 62 6F 75 6E 64 61 72  79 2E 20 55 6C 74 72 61  4D 65 6D 41 6C 6C 6F 63  20 65 6E 66 6F 72 63 65   boundary. UltraMemAlloc enforce
00028260  73 20 74 68 69 73 20 73  74 69 70 75 6C 61 74 69  6F 6E 2E 0D 0A 0D 0A 59  6F 75 20 64 65 66 69 6E  s this stipulation.You defin
00028280  65 20 74 68 65 20 62 79  74 65 20 74 6F 20 62 65  20 70 61 73 73 65 64 20  74 6F 20 55 6C 74 72 61  e the byte to be passed to Ultra
000282A0  55 70 6C 6F 61 64 20 61  6E 64 20 55 6C 74 72 61  44 6F 77 6E 6C 6F 61 64  20 75 73 69 6E 67 20 74  Upload and UltraDownload using t
000282C0  68 65 73 65 20 62 69 74  73 2E 20 54 6F 20 44 4D  41 20 74 68 65 20 64 61  74 61 20 6F 75 74 20 6F  hese bits. To DMA the data out o
000282E0  66 20 44 52 41 4D 2C 20  75 73 65 20 55 6C 74 72  61 55 70 6C 6F 61 64 2E  20 20 54 6F 20 73 65 6E  f DRAM, use UltraUpload.  To sen
00028300  64 20 64 61 74 61 20 74  6F 20 74 68 65 20 44 52  41 4D 2C 20 75 73 65 20  55 6C 74 72 61 44 6F 77  d data to the DRAM, use UltraDow
00028320  6E 6C 6F 61 64 2E 20 42  65 20 73 75 72 65 20 74  6F 20 73 70 65 63 69 66  79 20 74 68 65 20 73 61  nload. Be sure to specify the sa
00028340  6D 70 6C 65 20 73 69 7A  65 20 61 6E 64 20 77 68  65 74 68 65 72 20 6F 72  20 6E 6F 74 20 74 68 65  mple size and whether or not the
00028360  20 64 61 74 61 20 69 73  20 69 6E 20 74 77 6F 27  73 20 63 6F 6D 70 6C 69  6D 65 6E 74 20 66 6F 72   data is in two's compliment for
00028380  6D 2E 20 54 68 65 20 55  6C 74 72 61 53 6F 75 6E  64 20 63 61 6E 20 6F 6E  6C 79 20 70 6C 61 79 20  m. The UltraSound can only play 
000283A0  64 61 74 61 20 62 61 63  6B 20 74 68 61 74 20 69  73 20 69 6E 20 74 77 6F  27 73 20 63 6F 6D 70 6C  data back that is in two's compl
000283C0  69 6D 65 6E 74 20 66 6F  72 6D 2E 20 49 66 20 79  6F 75 72 20 73 61 6D 70  6C 65 20 69 73 20 69 6E  iment form. If your sample is in
000283E0  20 6F 6E 65 27 73 20 63  6F 6D 70 6C 69 6D 65 6E  74 20 66 6F 72 6D 2C 20  74 75 72 6E 20 6F 6E 20   one's compliment form, turn on 
00028400  62 69 74 20 37 20 77 68  65 6E 20 73 70 65 63 69  66 79 69 6E 67 20 74 68  65 20 6D 6F 64 65 20 77  bit 7 when specifying the mode w
00028420  68 65 6E 20 79 6F 75 20  63 61 6C 6C 20 55 6C 74  72 61 44 6F 77 6E 6C 6F  61 64 20 2D 20 74 68 65  hen you call UltraDownload - the
00028440  20 64 61 74 61 20 77 69  6C 6C 20 62 65 20 74 72  61 6E 73 6C 61 74 65 64  20 74 6F 20 74 77 6F 27   data will be translated to two'
00028460  73 20 63 6F 6D 70 6C 69  6D 65 6E 74 20 61 73 20  69 74 20 69 73 20 62 65  69 6E 67 20 44 4D 41 27  s compliment as it is being DMA'
00028480  65 64 2E 0D 0A 0D 0A 4E  6F 74 65 3A 09 49 66 20  79 6F 75 20 61 72 65 20  70 6F 6B 69 6E 67 20 64  ed.Note:If you are poking d
000284A0  61 74 61 20 69 6E 74 6F  20 44 52 41 4D 2C 20 79  6F 75 20 4D 55 53 54 20  70 75 74 20 74 68 65 20  ata into DRAM, you MUST put the 
000284C0  64 61 74 61 20 69 6E 20  74 77 6F 73 20 63 6F 6D  70 6C 69 6D 65 6E 74 20  79 6F 75 72 73 65 6C 66  data in twos compliment yourself
000284E0  2E 20 54 68 69 73 20 69  73 20 61 63 63 6F 6D 70  6C 69 73 68 65 64 20 62  79 20 65 78 63 6C 75 73  . This is accomplished by exclus
00028500  69 76 65 20 6F 72 2D 69  6E 67 20 74 68 65 20 68  69 67 68 20 62 69 74 20  77 69 74 68 20 61 20 31  ive or-ing the high bit with a 1
00028520  2E 0D 0A 0D 0A 0C 41 70  70 65 6E 64 69 78 20 45  20 2D 20 52 65 63 6F 72  64 69 6E 67 20 43 6F 6E  .Appendix E - Recording Con
00028540  74 72 6F 6C 0D 0A 0D 0A  48 65 72 65 20 61 72 65  20 74 68 65 20 72 65 63  6F 72 64 69 6E 67 20 63  trolHere are the recording c
00028560  6F 6E 74 72 6F 6C 20 62  69 74 20 64 65 66 69 6E  69 74 69 6F 6E 73 3A 0D  0A 0D 0A 20 20 20 3D 3D  ontrol bit definitions:   ==
00028580  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 0D  ===============================
000285A0  0A 20 20 20 7C 20 37 20  7C 20 36 20 7C 20 35 20  7C 20 34 20 7C 20 33 20  7C 20 32 20 7C 20 31 20     | 7 | 6 | 5 | 4 | 3 | 2 | 1 
000285C0  7C 20 30 20 7C 0D 0A 20  20 20 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 3D 3D 3D 3D 3D  | 0 |   ======================
000285E0  3D 3D 3D 3D 3D 3D 3D 3D  3D 3D 3D 0D 0A 20 20 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  ===========     |   |   |   | 
00028600  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 0D  0A 20 20 20 20 20 7C 20  20 20 7C 20 20 20 7C 20    |   |   |   |     |   |   | 
00028620  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 2B 2D 2D 2D 2D 20  52 65 73 65 72 76 65 64    |   |   |   |   +---- Reserved
00028640  0D 0A 20 20 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 7C  20 20 20 7C 20 20 20 2B       |   |   |   |   |   |   +
00028660  2D 2D 2D 2D 2D 2D 2D 2D  20 6D 6F 64 65 20 28 30  3D 6D 6F 6E 6F 2C 31 3D  73 74 65 72 65 6F 29 0D  -------- mode (0=mono,1=stereo)
00028680  0A 20 20 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 7C 20 20 20 7C 20  20 20 2B 2D 2D 2D 2D 2D       |   |   |   |   |   +-----
000286A0  2D 2D 2D 2D 2D 2D 2D 20  52 65 73 65 72 76 65 64  0D 0A 20 20 20 20 20 7C  20 20 20 7C 20 20 20 7C  ------- Reserved     |   |   |
000286C0  20 20 20 7C 20 20 20 2B  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  20 52 65 73 65 72 76 65     |   +---------------- Reserve
000286E0  64 0D 0A 20 20 20 20 20  7C 20 20 20 7C 20 20 20  7C 20 20 20 2B 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  d     |   |   |   +-----------
00028700  2D 2D 2D 2D 2D 2D 2D 2D  2D 20 52 65 73 65 72 76  65 64 0D 0A 20 20 20 20  20 7C 20 20 20 7C 20 20  --------- Reserved     |   |  
00028720  20 2B 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 20 52 65 73 65 72   +------------------------ Reser
00028740  76 65 64 0D 0A 20 20 20  20 20 7C 20 20 20 2B 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  ved     |   +-----------------
00028760  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 20 52 65 73 65  72 76 65 64 0D 0A 20 20  20 20 20 2B 2D 2D 2D 2D  ----------- Reserved     +----
00028780  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 20 28 31 3D  ---------------------------- (1=
000287A0  43 6F 6E 76 65 72 74 20  74 6F 20 32 27 73 20 63  6F 6D 70 2E 29 0D 0A 0D  0A 0C 41 70 70 65 6E 64  Convert to 2's comp.)Append
000287C0  69 78 20 46 20 2D 20 50  61 74 63 68 20 46 69 6C  65 73 0D 0A 0D 0A 54 68  69 73 20 61 70 70 65 6E  ix F - Patch FilesThis appen
000287E0  64 69 78 20 63 6F 6E 74  61 69 6E 73 20 69 6E 66  6F 72 6D 61 74 69 6F 6E  20 61 62 6F 75 74 20 74  dix contains information about t
00028800  68 65 20 74 68 65 20 70  61 74 63 68 20 66 69 6C  65 20 66 6F 72 6D 61 74  2E 20 20 49 74 20 61 73  he the patch file format.  It as
00028820  73 75 6D 65 73 20 74 68  65 20 72 65 61 64 65 72  20 69 73 20 66 61 6D 69  6C 69 61 72 20 77 69 74  sumes the reader is familiar wit
00028840  68 20 77 61 76 65 20 74  61 62 6C 65 20 73 79 6E  74 68 65 73 69 73 2C 20  6D 75 73 69 63 2C 20 73  h wave table synthesis, music, s
00028860  6F 75 6E 64 2C 0D 0A 61  6E 64 20 74 68 65 20 47  46 31 20 41 53 49 43 20  63 68 69 70 20 74 68 61  ound,and the GF1 ASIC chip tha
00028880  74 20 69 73 20 74 68 65  20 68 65 61 72 74 20 6F  66 20 74 68 65 20 55 6C  74 72 61 53 6F 75 6E 64  t is the heart of the UltraSound
000288A0  20 61 75 64 69 6F 20 63  61 72 64 2E 0D 0A 0D 0A  54 68 65 20 55 6C 74 72  61 53 6F 75 6E 64 20 70   audio card.The UltraSound p
000288C0  61 74 63 68 20 66 69 6C  65 20 69 73 20 61 20 63  6F 6C 6C 65 63 74 69 6F  6E 20 6F 66 20 64 61 74  atch file is a collection of dat
000288E0  61 20 73 74 72 75 63 74  75 72 65 73 20 61 6E 64  20 73 6F 75 6E 64 20 64  61 74 61 20 69 6E 20 74  a structures and sound data in t
00028900  68 65 20 66 6F 6C 6C 6F  77 69 6E 67 20 66 6F 72  6D 61 74 3A 0D 0A 0D 0A  20 20 20 20 70 61 74 63  he following format:    patc
00028920  68 20 68 65 61 64 65 72  20 28 23 20 69 6E 73 74  72 75 6D 65 6E 74 73 29  0D 0A 20 20 20 20 20 20  h header (# instruments)      
00028940  20 20 69 6E 73 74 72 75  6D 65 6E 74 20 68 65 61  64 65 72 20 31 20 28 23  6C 61 79 65 72 73 29 0D    instrument header 1 (#layers)
00028960  0A 20 20 20 20 20 20 20  20 20 20 20 20 6C 61 79  65 72 20 31 20 68 65 61  64 65 72 20 28 23 20 77              layer 1 header (# w
00028980  61 76 65 73 29 0D 0A 09  20 20 20 20 20 20 20 20  77 61 76 65 20 31 20 68  65 61 64 65 72 0D 0A 09  aves)        wave 1 header
000289A0  20 20 20 20 20 20 20 20  77 61 76 65 20 31 20 64  61 74 61 0D 0A 20 20 20  20 20 20 20 20 20 20 20          wave 1 data           
000289C0  20 20 20 20 20 77 61 76  65 20 32 20 68 65 61 64  65 72 0D 0A 20 20 20 20  20 20 20 20 20 20 20 20       wave 2 header            
000289E0  20 20 20 20 77 61 76 65  20 32 20 64 61 74 61 0D  0A 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20      wave 2 data               
00028A00  20 2E 2E 2E 0D 0A 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 77 61  76 65 20 6E 20 68 65 61   ...                wave n hea
00028A20  64 65 72 0D 0A 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 77 61 76  65 20 6E 20 64 61 74 61  der                wave n data
00028A40  0D 0A 20 20 20 20 20 20  20 20 20 20 20 20 6C 61  79 65 72 20 32 20 68 65  61 64 65 72 20 28 23 20              layer 2 header (# 
00028A60  77 61 76 65 73 29 0D 0A  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  77 61 76 65 20 31 20 68  waves)                wave 1 h
00028A80  65 61 64 65 72 0D 0A 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 77  61 76 65 20 31 20 64 61  eader                wave 1 da
00028AA0  74 61 0D 0A 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 77 61 76 65  20 32 20 68 65 61 64 65  ta                wave 2 heade
00028AC0  72 0D 0A 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 77 61 76 65 20  32 20 64 61 74 61 0D 0A  r                wave 2 data
00028AE0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  2E 2E 2E 0D 0A 20 20 20  20 20 20 20 20 20 20 20                  ...           
00028B00  20 20 20 20 20 77 61 76  65 20 6E 20 68 65 61 64  65 72 0D 0A 20 20 20 20  20 20 20 20 20 20 20 20       wave n header            
00028B20  20 20 20 20 77 61 76 65  20 6E 20 64 61 74 61 0D  0A 20 20 20 20 20 20 20  20 69 6E 73 74 72 75 6D      wave n data        instrum
00028B40  65 6E 74 20 68 65 61 64  65 72 20 32 20 28 23 6C  61 79 65 72 73 29 0D 0A  20 20 20 20 65 74 63 2E  ent header 2 (#layers)    etc.
00028B60  0D 0A 0D 0A 41 6C 6C 20  6F 66 20 74 68 65 20 41  64 76 61 6E 63 65 64 20  47 72 61 76 69 73 20 55  All of the Advanced Gravis U
00028B80  6C 74 72 61 53 6F 75 6E  64 20 70 61 74 63 68 65  73 20 63 6F 6E 74 61 69  6E 20 6F 6E 65 20 69 6E  ltraSound patches contain one in
00028BA0  73 74 72 75 6D 65 6E 74  20 61 74 20 74 68 65 20  63 75 72 72 65 6E 74 20  74 69 6D 65 2E 20 20 45  strument at the current time.  E
00028BC0  78 63 65 70 74 20 66 6F  72 20 74 68 65 20 6D 61  69 6E 20 70 61 74 63 68  20 68 65 61 64 65 72 2C  xcept for the main patch header,
00028BE0  20 65 61 63 68 20 6F 66  20 74 68 65 20 68 65 61  64 65 72 73 20 68 61 73  20 61 20 73 69 7A 65 20   each of the headers has a size 
00028C00  66 69 65 6C 64 20 77 68  69 63 68 20 63 61 6E 20  62 65 20 75 73 65 64 20  74 6F 20 73 65 65 6B 20  field which can be used to seek 
00028C20  70 61 73 74 20 75 6E 77  61 6E 74 65 64 20 64 61  74 61 2E 20 20 46 6F 72  20 65 78 61 6D 70 6C 65  past unwanted data.  For example
00028C40  2C 20 69 66 20 61 20 70  61 74 63 68 20 68 61 73  20 74 77 6F 20 69 6E 73  74 72 75 6D 65 6E 74 73  , if a patch has two instruments
00028C60  20 61 6E 64 20 79 6F 75  20 77 61 6E 74 20 74 6F  20 73 6B 69 70 20 74 68  65 20 66 69 72 73 74 20   and you want to skip the first 
00028C80  69 6E 73 74 72 75 6D 65  6E 74 2C 20 79 6F 75 20  77 6F 75 6C 64 20 72 65  61 64 20 74 68 65 20 66  instrument, you would read the f
00028CA0  69 72 73 74 20 69 6E 73  74 72 75 6D 65 6E 74 20  68 65 61 64 65 72 2C 20  61 6E 64 20 74 68 65 6E  irst instrument header, and then
00028CC0  20 73 6B 69 70 20 49 4E  53 54 52 55 4D 45 4E 54  5F 53 49 5A 45 20 62 79  74 65 73 2E 20 20 57 68   skip INSTRUMENT_SIZE bytes.  Wh
00028CE0  61 74 20 66 6F 6C 6C 6F  77 73 20 69 73 20 74 68  65 20 70 61 74 63 68 20  68 65 61 64 65 72 20 64  at follows is the patch header d
00028D00  65 66 69 6E 69 74 69 6F  6E 73 20 67 69 76 65 6E  20 69 6E 20 43 20 61 6E  64 20 50 61 73 63 61 6C  efinitions given in C and Pascal
00028D20  2E 20 20 41 66 74 65 72  20 74 68 65 20 64 65 66  69 6E 69 74 69 6F 6E 73  2C 20 61 20 66 69 65 6C  .  After the definitions, a fiel
00028D40  64 2D 62 79 2D 66 69 65  6C 64 20 62 72 65 61 6B  64 6F 77 6E 20 6F 66 20  74 68 65 20 68 65 61 64  d-by-field breakdown of the head
00028D60  65 72 73 20 69 73 20 67  69 76 65 6E 2E 0D 0A 0D  0A 3D 3D 3D 3D 3D 3D 0D  0A 20 20 43 3A 0D 0A 3D  ers is given.======  C:=
00028D80  3D 3D 3D 3D 3D 0D 0A 0D  0A 23 64 65 66 69 6E 65  20 45 4E 56 45 4C 4F 50  45 53 20 20 20 09 09 09  =====#define ENVELOPES   
00028DA0  09 36 0D 0A 23 64 65 66  69 6E 65 20 48 45 41 44  45 52 5F 53 49 5A 45 20  20 20 09 09 09 09 31 32  6#define HEADER_SIZE   12
00028DC0  0D 0A 23 64 65 66 69 6E  65 20 49 44 5F 53 49 5A  45 20 20 20 20 20 20 20  09 09 09 09 31 30 0D 0A  #define ID_SIZE       10
00028DE0  23 64 65 66 69 6E 65 20  44 45 53 43 5F 53 49 5A  45 20 20 20 20 20 09 09  09 09 36 30 0D 0A 23 64  #define DESC_SIZE     60#d
00028E00  65 66 69 6E 65 20 52 45  53 45 52 56 45 44 5F 53  49 5A 45 20 20 20 09 09  09 09 34 30 0D 0A 23 64  efine RESERVED_SIZE   40#d
00028E20  65 66 69 6E 65 20 50 41  54 43 48 5F 48 45 41 44  45 52 5F 52 45 53 45 52  56 45 44 5F 53 49 5A 45  efine PATCH_HEADER_RESERVED_SIZE
00028E40  20 09 33 36 0D 0A 23 64  65 66 69 6E 65 20 4C 41  59 45 52 5F 52 45 53 45  52 56 45 44 5F 53 49 5A   36#define LAYER_RESERVED_SIZ
00028E60  45 20 20 20 09 09 34 30  0D 0A 23 64 65 66 69 6E  65 20 50 41 54 43 48 5F  44 41 54 41 5F 52 45 53  E   40#define PATCH_DATA_RES
00028E80  45 52 56 45 44 5F 53 49  5A 45 20 20 20 09 33 36  0D 0A 23 64 65 66 69 6E  65 20 47 46 31 5F 48 45  ERVED_SIZE   36#define GF1_HE
00028EA0  41 44 45 52 5F 54 45 58  54 20 20 20 09 09 09 22  47 46 31 50 41 54 43 48  31 31 30 22 0D 0A 23 64  ADER_TEXT   "GF1PATCH110"#d
00028EC0  65 66 69 6E 65 20 4D 41  58 5F 4C 41 59 45 52 53  09 09 20 20 20 09 09 09  34 0D 0A 23 64 65 66 69  efine MAX_LAYERS   4#defi
00028EE0  6E 65 20 49 4E 53 54 5F  4E 41 4D 45 5F 53 49 5A  45 09 09 20 20 20 09 09  31 36 0D 0A 0C 74 79 70  ne INST_NAME_SIZE   16typ
00028F00  65 64 65 66 20 73 74 72  75 63 74 0D 0A 7B 0D 0A  20 20 20 63 68 61 72 20  20 20 20 20 20 09 09 68  edef struct{   char      h
00028F20  65 61 64 65 72 5B 20 48  45 41 44 45 52 5F 53 49  5A 45 20 5D 3B 0D 0A 20  20 20 63 68 61 72 20 20  eader[ HEADER_SIZE ];   char  
00028F40  20 20 20 20 09 09 67 72  61 76 69 73 5F 69 64 5B  20 49 44 5F 53 49 5A 45  20 5D 3B 20 20 20 2F 2A      gravis_id[ ID_SIZE ];   /*
00028F60  20 49 64 20 3D 20 22 49  44 23 30 30 30 30 30 32  22 20 2A 2F 0D 0A 20 20  20 63 68 61 72 20 20 20   Id = "ID#000002" */   char   
00028F80  20 20 20 09 09 64 65 73  63 72 69 70 74 69 6F 6E  5B 20 44 45 53 43 5F 53  49 5A 45 20 5D 3B 0D 0A     description[ DESC_SIZE ];
00028FA0  20 20 20 75 6E 73 69 67  6E 65 64 20 63 68 61 72  09 69 6E 73 74 72 75 6D  65 6E 74 73 3B 0D 0A 20     unsigned charinstruments; 
00028FC0  20 20 63 68 61 72 20 20  20 20 20 20 09 09 76 6F  69 63 65 73 3B 0D 0A 20  20 20 63 68 61 72 20 20    char      voices;   char  
00028FE0  20 20 20 20 09 09 63 68  61 6E 6E 65 6C 73 3B 0D  0A 20 20 20 75 6E 73 69  67 6E 65 64 20 69 6E 74      channels;   unsigned int
00029000  09 77 61 76 65 5F 66 6F  72 6D 73 3B 0D 0A 20 20  20 75 6E 73 69 67 6E 65  64 20 69 6E 74 09 6D 61  wave_forms;   unsigned intma
00029020  73 74 65 72 5F 76 6F 6C  75 6D 65 3B 0D 0A 20 20  20 75 6E 73 69 67 6E 65  64 20 6C 6F 6E 67 09 64  ster_volume;   unsigned longd
00029040  61 74 61 5F 73 69 7A 65  3B 0D 0A 20 20 20 63 68  61 72 09 09 09 72 65 73  65 72 76 65 64 5B 20 50  ata_size;   charreserved[ P
00029060  41 54 43 48 5F 48 45 41  44 45 52 5F 52 45 53 45  52 56 45 44 5F 53 49 5A  45 20 5D 3B 0D 0A 7D 20  ATCH_HEADER_RESERVED_SIZE ];} 
00029080  50 41 54 43 48 48 45 41  44 45 52 3B 0D 0A 0D 0A  74 79 70 65 64 65 66 20  73 74 72 75 63 74 0D 0A  PATCHHEADER;typedef struct
000290A0  7B 0D 0A 20 20 20 75 6E  73 69 67 6E 65 64 20 69  6E 74 09 69 6E 73 74 72  75 6D 65 6E 74 3B 0D 0A  {   unsigned intinstrument;
000290C0  20 20 20 63 68 61 72 09  09 09 69 6E 73 74 72 75  6D 65 6E 74 5F 6E 61 6D  65 5B 20 31 36 20 5D 3B     charinstrument_name[ 16 ];
000290E0  0D 0A 20 20 20 6C 6F 6E  67 09 09 09 69 6E 73 74  72 75 6D 65 6E 74 5F 73  69 7A 65 3B 0D 0A 20 20     longinstrument_size;  
00029100  20 63 68 61 72 09 09 09  6C 61 79 65 72 73 3B 0D  0A 20 20 20 63 68 61 72  09 09 09 72 65 73 65 72   charlayers;   charreser
00029120  76 65 64 5B 20 52 45 53  45 52 56 45 44 5F 53 49  5A 45 20 5D 3B 0D 0A 7D  20 49 4E 53 54 52 55 4D  ved[ RESERVED_SIZE ];} INSTRUM
00029140  45 4E 54 44 41 54 41 3B  0D 0A 0D 0A 74 79 70 65  64 65 66 20 73 74 72 75  63 74 0D 0A 7B 0D 0A 20  ENTDATA;typedef struct{ 
00029160  20 20 63 68 61 72 09 09  09 6C 61 79 65 72 5F 64  75 70 6C 69 63 61 74 65  3B 0D 0A 20 20 20 63 68    charlayer_duplicate;   ch
00029180  61 72 09 09 09 6C 61 79  65 72 3B 0D 0A 20 20 20  6C 6F 6E 67 09 09 09 6C  61 79 65 72 5F 73 69 7A  arlayer;   longlayer_siz
000291A0  65 3B 0D 0A 20 20 20 63  68 61 72 09 09 09 73 61  6D 70 6C 65 73 3B 0D 0A  20 20 20 63 68 61 72 09  e;   charsamples;   char
000291C0  09 09 72 65 73 65 72 76  65 64 5B 20 4C 41 59 45  52 5F 52 45 53 45 52 56  45 44 5F 53 49 5A 45 20  reserved[ LAYER_RESERVED_SIZE 
000291E0  5D 3B 0D 0A 7D 20 4C 41  59 45 52 44 41 54 41 3B  0D 0A 0D 0A 0D 0A 0D 0A  2E 2E 2E 20 63 6F 6E 74  ];} LAYERDATA;... cont
00029200  69 6E 75 65 64 20 6F 6E  20 74 68 65 20 6E 65 78  74 20 70 61 67 65 20 2E  2E 2E 0D 0A 0D 0A 0D 0A  inued on the next page ...
00029220  0C 74 79 70 65 64 65 66  20 73 74 72 75 63 74 0D  0A 7B 0D 0A 20 20 20 63  68 61 72 09 09 09 77 61  typedef struct{   charwa
00029240  76 65 5F 6E 61 6D 65 5B  37 5D 3B 0D 0A 0D 0A 20  20 20 75 6E 73 69 67 6E  65 64 20 63 68 61 72 09  ve_name[7];   unsigned char
00029260  66 72 61 63 74 69 6F 6E  73 3B 0D 0A 20 20 20 6C  6F 6E 67 09 09 09 77 61  76 65 5F 73 69 7A 65 3B  fractions;   longwave_size;
00029280  0D 0A 20 20 20 6C 6F 6E  67 09 09 09 73 74 61 72  74 5F 6C 6F 6F 70 3B 0D  0A 20 20 20 6C 6F 6E 67     longstart_loop;   long
000292A0  09 09 09 65 6E 64 5F 6C  6F 6F 70 3B 0D 0A 0D 0A  20 20 20 75 6E 73 69 67  6E 65 64 20 69 6E 74 09  end_loop;   unsigned int
000292C0  73 61 6D 70 6C 65 5F 72  61 74 65 3B 0D 0A 20 20  20 6C 6F 6E 67 09 09 09  6C 6F 77 5F 66 72 65 71  sample_rate;   longlow_freq
000292E0  75 65 6E 63 79 3B 0D 0A  20 20 20 6C 6F 6E 67 09  09 09 68 69 67 68 5F 66  72 65 71 75 65 6E 63 79  uency;   longhigh_frequency
00029300  3B 0D 0A 20 20 20 6C 6F  6E 67 09 09 09 72 6F 6F  74 5F 66 72 65 71 75 65  6E 63 79 3B 0D 0A 20 20  ;   longroot_frequency;  
00029320  20 69 6E 74 20 09 09 09  74 75 6E 65 3B 0D 0A 0D  0A 20 20 20 75 6E 73 69  67 6E 65 64 20 63 68 61   int tune;   unsigned cha
00029340  72 09 62 61 6C 61 6E 63  65 3B 0D 0A 0D 0A 20 20  20 75 6E 73 69 67 6E 65  64 20 63 68 61 72 09 65  rbalance;   unsigned chare
00029360  6E 76 65 6C 6F 70 65 5F  72 61 74 65 5B 20 45 4E  56 45 4C 4F 50 45 53 20  5D 3B 0D 0A 20 20 20 75  nvelope_rate[ ENVELOPES ];   u
00029380  6E 73 69 67 6E 65 64 20  63 68 61 72 09 65 6E 76  65 6C 6F 70 65 5F 6F 66  66 73 65 74 5B 20 45 4E  nsigned charenvelope_offset[ EN
000293A0  56 45 4C 4F 50 45 53 20  5D 3B 0D 0A 0D 0A 20 20  20 75 6E 73 69 67 6E 65  64 20 63 68 61 72 09 74  VELOPES ];   unsigned chart
000293C0  72 65 6D 6F 6C 6F 5F 73  77 65 65 70 3B 0D 0A 20  20 20 75 6E 73 69 67 6E  65 64 20 63 68 61 72 09  remolo_sweep;   unsigned char
000293E0  74 72 65 6D 6F 6C 6F 5F  72 61 74 65 3B 0D 0A 20  20 20 75 6E 73 69 67 6E  65 64 20 63 68 61 72 09  tremolo_rate;   unsigned char
00029400  74 72 65 6D 6F 6C 6F 5F  64 65 70 74 68 3B 0D 0A  0D 0A 20 20 20 75 6E 73  69 67 6E 65 64 20 63 68  tremolo_depth;   unsigned ch
00029420  61 72 09 76 69 62 72 61  74 6F 5F 73 77 65 65 70  3B 0D 0A 20 20 20 75 6E  73 69 67 6E 65 64 20 63  arvibrato_sweep;   unsigned c
00029440  68 61 72 09 76 69 62 72  61 74 6F 5F 72 61 74 65  3B 0D 0A 20 20 20 75 6E  73 69 67 6E 65 64 20 63  harvibrato_rate;   unsigned c
00029460  68 61 72 09 76 69 62 72  61 74 6F 5F 64 65 70 74  68 3B 0D 0A 0D 0A 20 20  20 2F 2A 20 62 69 74 20  harvibrato_depth;   /* bit 
00029480  30 20 3D 20 38 20 6F 72  20 31 36 20 62 69 74 20  77 61 76 65 20 64 61 74  61 2E 20 2A 2F 0D 0A 20  0 = 8 or 16 bit wave data. */ 
000294A0  20 20 2F 2A 20 62 69 74  20 31 20 3D 20 53 69 67  6E 65 64 20 2D 20 55 6E  73 69 67 6E 65 64 20 64    /* bit 1 = Signed - Unsigned d
000294C0  61 74 61 2E 20 2A 2F 0D  0A 20 20 20 2F 2A 20 62  69 74 20 32 20 3D 20 6C  6F 6F 70 69 6E 67 20 65  ata. */   /* bit 2 = looping e
000294E0  6E 61 62 6C 65 64 2D 31  2E 20 2A 2F 0D 0A 20 20  20 2F 2A 20 62 69 74 20  33 20 3D 20 53 65 74 20  nabled-1. */   /* bit 3 = Set 
00029500  69 73 20 62 69 64 69 72  65 63 74 69 6F 6E 61 6C  20 6C 6F 6F 70 69 6E 67  2E 20 2A 2F 0D 0A 20 20  is bidirectional looping. */  
00029520  20 2F 2A 20 62 69 74 20  34 20 3D 20 53 65 74 20  69 73 20 6C 6F 6F 70 69  6E 67 20 62 61 63 6B 77   /* bit 4 = Set is looping backw
00029540  61 72 64 2E 20 2A 2F 0D  0A 20 20 20 2F 2A 20 62  69 74 20 35 20 3D 20 54  75 72 6E 20 73 75 73 74  ard. */   /* bit 5 = Turn sust
00029560  61 69 6E 69 6E 67 20 6F  6E 2E 20 28 45 6E 76 2E  20 70 74 73 2E 20 33 29  2A 2F 0D 0A 20 20 20 2F  aining on. (Env. pts. 3)*/   /
00029580  2A 20 62 69 74 20 36 20  3D 20 45 6E 61 62 6C 65  20 65 6E 76 65 6C 6F 70  65 73 20 2D 20 31 20 2A  * bit 6 = Enable envelopes - 1 *
000295A0  2F 0D 0A 20 20 20 63 68  61 72 09 09 09 6D 6F 64  65 73 3B 0D 0A 0D 0A 20  20 20 69 6E 74 09 09 09  /   charmodes;   int
000295C0  73 63 61 6C 65 5F 66 72  65 71 75 65 6E 63 79 3B  0D 0A 20 20 20 75 6E 73  69 67 6E 65 64 20 69 6E  scale_frequency;   unsigned in
000295E0  74 09 73 63 61 6C 65 5F  66 61 63 74 6F 72 3B 20  20 20 20 2F 2A 20 66 72  6F 6D 20 30 20 74 6F 20  tscale_factor;    /* from 0 to 
00029600  32 30 34 38 20 6F 72 20  30 20 74 6F 20 32 20 2A  2F 0D 0A 0D 0A 20 20 20  63 68 61 72 09 09 09 72  2048 or 0 to 2 */   charr
00029620  65 73 65 72 76 65 64 5B  20 50 41 54 43 48 5F 44  41 54 41 5F 52 45 53 45  52 56 45 44 5F 53 49 5A  eserved[ PATCH_DATA_RESERVED_SIZ
00029640  45 20 5D 3B 0D 0A 7D 20  50 41 54 43 48 44 41 54  41 3B 0D 0A 0D 0A 0D 0A  0D 0A 2E 2E 2E 65 6E 64  E ];} PATCHDATA;...end
00029660  20 6F 66 20 74 68 65 20  43 20 73 65 63 74 69 6F  6E 2E 20 20 50 6C 65 61  73 65 20 73 65 65 20 74   of the C section.  Please see t
00029680  68 65 20 6E 65 78 74 20  70 61 67 65 20 66 6F 72  20 74 68 65 20 50 41 53  43 41 4C 20 73 65 63 74  he next page for the PASCAL sect
000296A0  69 6F 6E 2E 2E 2E 0D 0A  0D 0A 0C 3D 3D 3D 3D 3D  3D 3D 3D 3D 0D 0A 20 50  41 53 43 41 4C 3A 0D 0A  ion...========= PASCAL:
000296C0  3D 3D 3D 3D 3D 3D 3D 3D  3D 0D 0A 0D 0A 43 4F 4E  53 54 0D 0A 20 20 45 4E  56 45 4C 4F 50 45 53 20  =========CONST  ENVELOPES 
000296E0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 3D 20 36 3B 0D 0A 20  20 48 45 41 44 45 52 5F                   = 6;  HEADER_
00029700  53 49 5A 45 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 3D 20 31 32  3B 0D 0A 20 20 49 44 5F  SIZE                = 12;  ID_
00029720  53 49 5A 45 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  3D 20 31 30 3B 0D 0A 20  SIZE                    = 10; 
00029740  20 44 45 53 43 5F 53 49  5A 45 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 3D 20 36 30   DESC_SIZE                  = 60
00029760  3B 0D 0A 20 20 52 45 53  45 52 56 45 44 5F 53 49  5A 45 20 20 20 20 20 20  20 20 20 20 20 20 20 20  ;  RESERVED_SIZE              
00029780  3D 20 34 30 3B 0D 0A 20  20 50 41 54 43 48 5F 48  45 41 44 45 52 5F 52 45  53 45 52 56 45 44 5F 53  = 40;  PATCH_HEADER_RESERVED_S
000297A0  49 5A 45 20 3D 20 33 36  3B 0D 0A 20 20 4C 41 59  45 52 5F 52 45 53 45 52  56 45 44 5F 53 49 5A 45  IZE = 36;  LAYER_RESERVED_SIZE
000297C0  20 20 20 20 20 20 20 20  3D 20 34 30 3B 0D 0A 20  20 50 41 54 43 48 5F 44  41 54 41 5F 52 45 53 45          = 40;  PATCH_DATA_RESE
000297E0  52 56 45 44 5F 53 49 5A  45 20 20 20 3D 20 33 36  3B 0D 0A 20 20 47 46 31  5F 48 45 41 44 45 52 5F  RVED_SIZE   = 36;  GF1_HEADER_
00029800  54 45 58 54 20 20 20 20  20 20 20 20 20 20 20 20  3A 20 41 52 52 41 59 5B  31 2E 2E 31 32 5D 20 4F  TEXT            : ARRAY[1..12] O
00029820  46 20 43 48 41 52 20 3D  20 27 47 46 31 50 41 54  43 48 31 31 30 27 3B 0D  0A 0D 0A 54 59 50 45 0D  F CHAR = 'GF1PATCH110';TYPE
00029840  0A 20 20 50 41 54 43 48  48 45 41 44 45 52 20 3D  20 52 45 43 4F 52 44 0D  0A 20 20 20 20 48 65 61    PATCHHEADER = RECORD    Hea
00029860  64 65 72 20 20 20 20 20  20 20 20 3A 20 41 52 52  41 59 5B 31 2E 2E 48 45  41 44 45 52 5F 53 49 5A  der        : ARRAY[1..HEADER_SIZ
00029880  45 5D 20 4F 46 20 43 48  41 52 3B 0D 0A 20 20 20  20 47 72 61 76 69 73 5F  49 44 20 20 20 20 20 3A  E] OF CHAR;    Gravis_ID     :
000298A0  20 41 52 52 41 59 5B 31  2E 2E 49 44 5F 53 49 5A  45 5D 20 4F 46 20 43 48  41 52 3B 20 20 7B 20 49   ARRAY[1..ID_SIZE] OF CHAR;  { I
000298C0  64 20 3D 20 27 49 44 23  30 30 30 30 30 32 27 20  7D 0D 0A 20 20 20 20 44  65 73 63 72 69 70 74 69  d = 'ID#000002' }    Descripti
000298E0  6F 6E 20 20 20 3A 20 41  52 52 41 59 5B 31 2E 2E  44 45 53 43 5F 53 49 5A  45 5D 20 4F 46 20 43 48  on   : ARRAY[1..DESC_SIZE] OF CH
00029900  41 52 3B 0D 0A 20 20 20  20 49 6E 73 74 72 75 6D  65 6E 74 73 20 20 20 3A  20 53 48 4F 52 54 49 4E  AR;    Instruments   : SHORTIN
00029920  54 3B 0D 0A 20 20 20 20  56 6F 69 63 65 73 20 20  20 20 20 20 20 20 3A 20  53 48 4F 52 54 49 4E 54  T;    Voices        : SHORTINT
00029940  3B 0D 0A 20 20 20 20 43  68 61 6E 6E 65 6C 73 20  20 20 20 20 20 3A 20 53  48 4F 52 54 49 4E 54 3B  ;    Channels      : SHORTINT;
00029960  0D 0A 20 20 20 20 57 61  76 65 5F 46 6F 72 6D 73  20 20 20 20 3A 20 57 4F  52 44 3B 0D 0A 20 20 20      Wave_Forms    : WORD;   
00029980  20 4D 61 73 74 65 72 5F  56 6F 6C 75 6D 65 20 3A  20 57 4F 52 44 3B 0D 0A  20 20 20 20 44 61 74 61   Master_Volume : WORD;    Data
000299A0  5F 53 69 7A 65 20 20 20  20 20 3A 20 4C 4F 4E 47  49 4E 54 3B 0D 0A 20 20  20 20 52 65 73 65 72 76  _Size     : LONGINT;    Reserv
000299C0  65 64 20 20 20 20 20 20  3A 20 41 52 52 41 59 5B  31 2E 2E 50 41 54 43 48  5F 48 45 41 44 45 52 5F  ed      : ARRAY[1..PATCH_HEADER_
000299E0  52 45 53 45 52 56 45 44  5F 53 49 5A 45 5D 20 4F  46 20 42 59 54 45 3B 0D  0A 20 20 20 45 4E 44 3B  RESERVED_SIZE] OF BYTE;   END;
00029A00  0D 0A 0D 0A 20 20 49 4E  53 54 52 55 4D 45 4E 54  44 41 54 41 20 3D 20 52  45 43 4F 52 44 0D 0A 20    INSTRUMENTDATA = RECORD 
00029A20  20 20 20 49 6E 73 74 72  75 6D 65 6E 74 20 20 20  20 20 20 3A 20 57 4F 52  44 3B 0D 0A 20 20 20 20     Instrument      : WORD;    
00029A40  49 6E 73 74 72 75 6D 65  6E 74 5F 4E 61 6D 65 20  3A 20 41 52 52 41 59 5B  31 2E 2E 31 36 5D 20 4F  Instrument_Name : ARRAY[1..16] O
00029A60  46 20 43 48 41 52 3B 0D  0A 20 20 20 20 49 6E 73  74 72 75 6D 65 6E 74 5F  53 69 7A 65 20 3A 20 4C  F CHAR;    Instrument_Size : L
00029A80  4F 4E 47 49 4E 54 3B 0D  0A 20 20 20 20 4C 61 79  65 72 73 20 20 20 20 20  20 20 20 20 20 3A 20 53  ONGINT;    Layers          : S
00029AA0  48 4F 52 54 49 4E 54 3B  0D 0A 20 20 20 20 52 65  73 65 72 76 65 64 20 20  20 20 20 20 20 20 3A 20  HORTINT;    Reserved        : 
00029AC0  41 52 52 41 59 5B 31 2E  2E 52 45 53 45 52 56 45  44 5F 53 49 5A 45 5D 20  4F 46 20 42 59 54 45 3B  ARRAY[1..RESERVED_SIZE] OF BYTE;
00029AE0  0D 0A 20 20 20 45 4E 44  3B 0D 0A 0D 0A 20 20 4C  41 59 45 52 44 41 54 41  20 3D 20 52 45 43 4F 52     END;  LAYERDATA = RECOR
00029B00  44 0D 0A 20 20 20 20 4C  61 79 65 72 5F 44 75 70  6C 69 63 61 74 65 20 3A  20 53 48 4F 52 54 49 4E  D    Layer_Duplicate : SHORTIN
00029B20  54 3B 0D 0A 20 20 20 20  4C 61 79 65 72 20 20 20  20 20 20 20 20 20 20 20  3A 20 53 48 4F 52 54 49  T;    Layer           : SHORTI
00029B40  4E 54 3B 0D 0A 20 20 20  20 4C 61 79 65 72 5F 53  69 7A 65 20 20 20 20 20  20 3A 20 4C 4F 4E 47 49  NT;    Layer_Size      : LONGI
00029B60  4E 54 3B 0D 0A 20 20 20  20 53 61 6D 70 6C 65 73  20 20 20 20 20 20 20 20  20 3A 20 53 48 4F 52 54  NT;    Samples         : SHORT
00029B80  49 4E 54 3B 0D 0A 20 20  20 20 52 65 73 65 72 76  65 64 20 20 20 20 20 20  20 20 3A 20 41 52 52 41  INT;    Reserved        : ARRA
00029BA0  59 5B 31 2E 2E 52 45 53  45 52 56 45 44 5F 53 49  5A 45 5D 20 4F 46 20 42  59 54 45 3B 0D 0A 20 20  Y[1..RESERVED_SIZE] OF BYTE;  
00029BC0  20 45 4E 44 3B 0D 0A 0D  0A 0D 0A 2E 2E 2E 63 6F  6E 74 69 6E 75 65 64 20  6F 6E 20 74 68 65 20 6E   END;...continued on the n
00029BE0  65 78 74 20 70 61 67 65  2E 2E 2E 0D 0A 0D 0A 0C  20 20 50 41 54 43 48 44  41 54 41 20 3D 20 52 45  ext page...  PATCHDATA = RE
00029C00  43 4F 52 44 0D 0A 20 20  20 20 57 61 76 65 5F 4E  61 6D 65 20 20 20 20 20  20 20 3A 20 41 52 52 41  CORD    Wave_Name       : ARRA
00029C20  59 5B 31 2E 2E 37 5D 20  4F 46 20 43 48 41 52 3B  0D 0A 20 20 20 20 46 72  61 63 74 69 6F 6E 73 20  Y[1..7] OF CHAR;    Fractions 
00029C40  20 20 20 20 20 20 3A 20  42 59 54 45 3B 0D 0A 20  20 20 20 57 61 76 65 5F  53 69 7A 65 20 20 20 20        : BYTE;    Wave_Size    
00029C60  20 20 20 3A 20 4C 4F 4E  47 49 4E 54 3B 0D 0A 20  20 20 20 53 74 61 72 74  5F 4C 6F 6F 70 20 20 20     : LONGINT;    Start_Loop   
00029C80  20 20 20 3A 20 4C 4F 4E  47 49 4E 54 3B 0D 0A 20  20 20 20 45 6E 64 5F 4C  6F 6F 70 20 20 20 20 20     : LONGINT;    End_Loop     
00029CA0  20 20 20 3A 20 4C 4F 4E  47 49 4E 54 3B 0D 0A 20  20 20 20 53 61 6D 70 6C  65 5F 52 61 74 65 20 20     : LONGINT;    Sample_Rate  
00029CC0  20 20 20 3A 20 57 4F 52  44 3B 0D 0A 20 20 20 20  4C 6F 77 5F 46 72 65 71  75 65 6E 63 79 20 20 20     : WORD;    Low_Frequency   
00029CE0  3A 20 4C 4F 4E 47 49 4E  54 3B 0D 0A 20 20 20 20  48 69 67 68 5F 46 72 65  71 75 65 6E 63 79 20 20  : LONGINT;    High_Frequency  
00029D00  3A 20 4C 4F 4E 47 49 4E  54 3B 0D 0A 20 20 20 20  52 6F 6F 74 5F 46 72 65  71 75 65 6E 63 79 20 20  : LONGINT;    Root_Frequency  
00029D20  3A 20 4C 4F 4E 47 49 4E  54 3B 0D 0A 20 20 20 20  54 75 6E 65 20 20 20 20  20 20 20 20 20 20 20 20  : LONGINT;    Tune            
00029D40  3A 20 49 4E 54 45 47 45  52 3B 0D 0A 20 20 20 20  42 61 6C 61 6E 63 65 20  20 20 20 20 20 20 20 20  : INTEGER;    Balance         
00029D60  3A 20 42 59 54 45 3B 0D  0A 20 20 20 20 45 6E 76  65 6C 6F 70 65 5F 52 61  74 65 20 20 20 3A 20 41  : BYTE;    Envelope_Rate   : A
00029D80  52 52 41 59 5B 31 2E 2E  45 4E 56 45 4C 4F 50 45  53 5D 20 4F 46 20 42 59  54 45 3B 0D 0A 20 20 20  RRAY[1..ENVELOPES] OF BYTE;   
00029DA0  20 45 6E 76 65 6C 6F 70  65 5F 4F 66 66 73 65 74  20 3A 20 41 52 52 41 59  5B 31 2E 2E 45 4E 56 45   Envelope_Offset : ARRAY[1..ENVE
00029DC0  4C 4F 50 45 53 5D 20 4F  46 20 42 59 54 45 3B 0D  0A 20 20 20 20 54 72 65  6D 6F 6C 6F 5F 53 77 65  LOPES] OF BYTE;    Tremolo_Swe
00029DE0  65 70 20 20 20 3A 20 42  59 54 45 3B 0D 0A 20 20  20 20 54 72 65 6D 6F 6C  6F 5F 52 61 74 65 20 20  ep   : BYTE;    Tremolo_Rate  
00029E00  20 20 3A 20 42 59 54 45  3B 0D 0A 20 20 20 20 54  72 65 6D 6F 6C 6F 5F 44  65 70 74 68 20 20 20 3A    : BYTE;    Tremolo_Depth   :
00029E20  20 42 59 54 45 3B 0D 0A  20 20 20 20 56 69 62 72  61 74 6F 5F 53 77 65 65  70 20 20 20 3A 20 42 59   BYTE;    Vibrato_Sweep   : BY
00029E40  54 45 3B 0D 0A 20 20 20  20 56 69 62 72 61 74 6F  5F 52 61 74 65 20 20 20  20 3A 20 42 59 54 45 3B  TE;    Vibrato_Rate    : BYTE;
00029E60  0D 0A 20 20 20 20 56 69  62 72 61 74 6F 5F 44 65  70 74 68 20 20 20 3A 20  42 59 54 45 3B 0D 0A 0D      Vibrato_Depth   : BYTE;
00029E80  0A 20 20 20 20 7B 20 62  69 74 20 30 20 3D 20 38  20 6F 72 20 31 36 20 62  69 74 20 77 61 76 65 20      { bit 0 = 8 or 16 bit wave 
00029EA0  64 61 74 61 2E 20 20 20  20 20 20 20 20 20 20 20  20 7D 0D 0A 20 20 20 20  7B 20 62 69 74 20 31 20  data.            }    { bit 1 
00029EC0  3D 20 53 69 67 6E 65 64  20 2D 20 55 6E 73 69 67  6E 65 64 20 64 61 74 61  2E 20 20 20 20 20 20 20  = Signed - Unsigned data.       
00029EE0  20 20 20 20 7D 0D 0A 20  20 20 20 7B 20 62 69 74  20 32 20 3D 20 6C 6F 6F  70 69 6E 67 20 65 6E 61      }    { bit 2 = looping ena
00029F00  62 6C 65 64 2D 31 2E 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 7D  0D 0A 20 20 20 20 7B 20  bled-1.                }    { 
00029F20  62 69 74 20 33 20 3D 20  53 65 74 20 69 73 20 62  69 64 69 72 65 63 74 69  6F 6E 61 6C 20 6C 6F 6F  bit 3 = Set is bidirectional loo
00029F40  70 69 6E 67 2E 20 20 20  20 20 7D 0D 0A 20 20 20  20 7B 20 62 69 74 20 34  20 3D 20 53 65 74 20 69  ping.     }    { bit 4 = Set i
00029F60  73 20 6C 6F 6F 70 69 6E  67 20 62 61 63 6B 77 61  72 64 2E 20 20 20 20 20  20 20 20 20 20 7D 0D 0A  s looping backward.          }
00029F80  20 20 20 20 7B 20 62 69  74 20 35 20 3D 20 54 75  72 6E 20 73 75 73 74 61  69 6E 69 6E 67 20 6F 6E      { bit 5 = Turn sustaining on
00029FA0  2E 20 28 45 6E 76 2E 20  70 74 73 2E 20 33 29 20  7D 0D 0A 20 20 20 20 7B  20 62 69 74 20 36 20 3D  . (Env. pts. 3) }    { bit 6 =
00029FC0  20 45 6E 61 62 6C 65 20  65 6E 76 65 6C 6F 70 65  73 20 2D 20 31 20 20 20  20 20 20 20 20 20 20 20   Enable envelopes - 1           
00029FE0  20 20 20 7D 0D 0A 20 20  20 20 4D 6F 64 65 73 20  20 20 20 20 20 20 20 20  20 20 3A 20 53 48 4F 52     }    Modes           : SHOR
0002A000  54 49 4E 54 3B 0D 0A 0D  0A 20 20 20 20 53 63 61  6C 65 5F 46 72 65 71 75  65 6E 63 79 20 3A 20 49  TINT;    Scale_Frequency : I
0002A020  4E 54 45 47 45 52 3B 0D  0A 20 20 20 20 53 63 61  6C 65 5F 46 61 63 74 6F  72 20 20 20 20 3A 20 57  NTEGER;    Scale_Factor    : W
0002A040  4F 52 44 3B 20 7B 20 46  72 6F 6D 20 30 20 74 6F  20 32 30 34 38 20 6F 72  20 30 20 74 6F 20 32 20  ORD; { From 0 to 2048 or 0 to 2 
0002A060  7D 0D 0A 20 20 20 20 52  65 73 65 72 76 65 64 20  20 20 20 20 20 20 20 3A  20 41 52 52 41 59 5B 31  }    Reserved        : ARRAY[1
0002A080  2E 2E 50 41 54 43 48 5F  44 41 54 41 5F 52 45 53  45 52 56 45 44 5F 53 49  5A 45 5D 20 4F 46 20 42  ..PATCH_DATA_RESERVED_SIZE] OF B
0002A0A0  59 54 45 3B 0D 0A 20 20  20 45 4E 44 3B 0D 0A 0D  0A 0D 0A 46 69 6C 65 20  48 65 61 64 65 72 0D 0A  YTE;   END;File Header
0002A0C0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ________________________________
0002A0E0  5F 0D 0A 0D 0A 27 48 65  61 64 65 72 27 0D 0A 09  54 68 65 20 68 65 61 64  65 72 20 66 69 65 6C 64  _'Header'The header field
0002A100  20 73 68 6F 75 6C 64 20  63 6F 6E 74 61 69 6E 20  74 68 65 20 74 65 78 74  20 22 47 46 31 50 41 54   should contain the text "GF1PAT
0002A120  43 48 31 31 30 2E 22 20  20 54 68 65 20 66 69 72  73 74 20 38 20 62 79 74  65 73 20 77 69 6C 6C 20  CH110."  The first 8 bytes will 
0002A140  61 6C 77 61 79 73 20 62  65 20 47 46 31 50 41 54  43 48 2E 20 20 54 68 65  20 6E 65 78 74 20 74 68  always be GF1PATCH.  The next th
0002A160  72 65 65 20 62 79 74 65  73 20 61 72 65 20 74 68  65 20 76 65 72 73 69 6F  6E 20 6E 75 6D 62 65 72  ree bytes are the version number
0002A180  20 6F 66 20 74 68 65 20  70 61 74 63 68 20 66 6F  72 6D 61 74 2E 20 20 41  73 20 66 69 65 6C 64 73   of the patch format.  As fields
0002A1A0  20 61 72 65 20 61 64 64  65 64 20 74 6F 20 74 68  65 20 70 61 74 63 68 2C  20 74 68 65 20 6E 75 6D   are added to the patch, the num
0002A1C0  62 65 72 20 77 69 6C 6C  20 62 65 20 69 6E 63 72  65 6D 65 6E 74 65 64 2E  20 20 41 6C 6C 20 6F 66  ber will be incremented.  All of
0002A1E0  20 74 68 65 20 55 6C 74  72 61 53 6F 75 6E 64 20  70 61 74 63 68 65 73 20  61 72 65 20 63 75 72 72   the UltraSound patches are curr
0002A200  65 6E 74 6C 79 20 61 74  20 76 65 72 73 69 6F 6E  20 31 31 30 2E 20 20 54  68 65 20 6F 6C 64 65 72  ently at version 110.  The older
0002A220  20 31 30 30 20 70 61 74  63 68 65 73 20 61 72 65  20 6F 62 73 6F 6C 65 74  65 20 61 6E 64 20 73 68   100 patches are obsolete and sh
0002A240  6F 75 6C 64 20 6E 6F 20  6C 6F 6E 67 65 72 20 62  65 20 69 6E 20 75 73 65  2E 0D 0A 0D 0A 27 44 65  ould no longer be in use.'De
0002A260  73 63 72 69 70 74 69 6F  6E 27 0D 0A 09 54 68 69  73 20 64 65 73 63 72 69  70 74 69 6F 6E 20 66 69  scription'This description fi
0002A280  65 6C 64 20 69 73 20 75  73 75 61 6C 6C 79 20 66  6F 72 20 63 6F 70 79 72  69 67 68 74 20 69 6E 66  eld is usually for copyright inf
0002A2A0  6F 72 6D 61 74 69 6F 6E  2E 0D 0A 0D 0A 27 49 6E  73 74 72 75 6D 65 6E 74  73 27 0D 0A 09 54 68 65  ormation.'Instruments'The
0002A2C0  20 6E 75 6D 62 65 72 20  6F 66 20 69 6E 73 74 72  75 6D 65 6E 74 73 20 69  6E 20 74 68 65 20 70 61   number of instruments in the pa
0002A2E0  74 63 68 2E 20 20 41 6C  6C 20 6F 66 20 74 68 65  20 67 72 61 76 69 73 20  70 61 74 63 68 65 73 20  tch.  All of the gravis patches 
0002A300  63 6F 6E 74 61 69 6E 20  6F 6E 6C 79 20 6F 6E 65  20 69 6E 73 74 72 75 6D  65 6E 74 2E 0D 0A 0C 27  contain only one instrument.'
0002A320  56 6F 69 63 65 73 27 0D  0A 09 54 68 65 20 47 46  31 20 73 79 6E 74 68 20  63 61 6E 20 75 70 64 61  Voices'The GF1 synth can upda
0002A340  74 65 20 31 34 20 76 6F  69 63 65 73 20 61 74 20  34 34 2E 31 4B 68 7A 2E  20 20 41 73 20 74 68 65  te 14 voices at 44.1Khz.  As the
0002A360  20 6E 75 6D 62 65 72 20  6F 66 20 76 6F 69 63 65  73 20 69 6E 63 72 65 61  73 65 73 2C 20 74 68 65   number of voices increases, the
0002A380  20 61 63 74 75 61 6C 20  6F 75 74 70 75 74 20 72  61 74 65 20 6F 66 20 65  61 63 68 20 76 6F 69 63   actual output rate of each voic
0002A3A0  65 20 64 72 6F 70 73 2E  20 54 68 69 73 20 66 69  65 6C 64 20 73 68 6F 75  6C 64 20 63 6F 6E 74 61  e drops. This field should conta
0002A3C0  69 6E 20 74 68 65 20 6E  75 6D 62 65 72 20 6F 66  20 76 6F 69 63 65 73 20  74 68 61 74 20 77 65 72  in the number of voices that wer
0002A3E0  65 20 75 73 65 64 20 77  68 65 6E 20 63 72 65 61  74 69 6E 67 20 74 68 65  20 70 61 74 63 68 2E 20  e used when creating the patch. 
0002A400  54 68 69 73 20 66 69 65  6C 64 20 63 6F 75 6C 64  20 62 65 20 75 73 65 64  20 62 79 20 61 20 4D 49  This field could be used by a MI
0002A420  44 49 20 65 6E 67 69 6E  65 20 74 6F 20 74 72 79  20 61 6E 64 20 6D 61 6B  65 20 74 68 65 20 70 61  DI engine to try and make the pa
0002A440  74 63 68 20 73 6F 75 6E  64 20 74 68 65 20 73 61  6D 65 20 72 65 67 61 72  64 6C 65 73 73 20 6F 66  tch sound the same regardless of
0002A460  20 74 68 65 20 6E 75 6D  62 65 72 20 6F 66 20 61  63 74 69 76 65 20 76 6F  69 63 65 73 2E 20 20 43   the number of active voices.  C
0002A480  75 72 72 65 6E 74 6C 79  20 74 68 69 73 20 66 65  61 74 75 72 65 20 69 73  20 6E 6F 74 20 69 6D 70  urrently this feature is not imp
0002A4A0  6C 65 6D 65 6E 74 65 64  20 69 6E 20 74 68 65 20  67 72 61 76 69 73 20 4D  49 44 49 20 65 6E 67 69  lemented in the gravis MIDI engi
0002A4C0  6E 65 2E 0D 0A 0D 0A 27  43 68 61 6E 6E 65 6C 73  27 0D 0A 09 54 68 69 73  20 66 69 65 6C 64 20 69  ne.'Channels'This field i
0002A4E0  73 20 75 6E 75 73 65 64  2E 20 20 4F 6E 6C 79 20  6D 6F 6E 6F 20 64 61 74  61 20 63 61 6E 20 62 65  s unused.  Only mono data can be
0002A500  20 70 6C 61 79 65 64 20  6F 75 74 20 61 20 76 6F  69 63 65 20 77 69 74 68  20 74 68 65 20 47 46 31   played out a voice with the GF1
0002A520  2E 0D 0A 0D 0A 27 57 61  76 65 5F 46 6F 72 6D 73  27 0D 0A 09 54 68 65 20  74 6F 74 61 6C 20 6E 75  .'Wave_Forms'The total nu
0002A540  6D 62 65 72 20 6F 66 20  77 61 76 65 66 6F 72 6D  73 20 69 6E 20 74 68 65  20 70 61 74 63 68 2E 20  mber of waveforms in the patch. 
0002A560  20 54 68 69 73 20 66 69  65 6C 64 20 69 73 20 75  73 65 64 20 62 79 20 70  72 6F 67 72 61 6D 73 20   This field is used by programs 
0002A580  77 68 69 63 68 20 6E 65  65 64 20 74 6F 20 70 72  65 61 6C 6C 6F 63 61 74  65 20 73 70 61 63 65 20  which need to preallocate space 
0002A5A0  66 6F 72 20 77 61 76 65  20 66 6F 72 6D 20 68 65  61 64 65 72 73 20 62 65  66 6F 72 65 20 74 68 65  for wave form headers before the
0002A5C0  20 70 61 74 63 68 20 69  73 20 6C 6F 61 64 65 64  2E 0D 0A 0D 0A 27 4D 61  73 74 65 72 5F 56 6F 6C   patch is loaded.'Master_Vol
0002A5E0  75 6D 65 27 0D 0A 09 54  68 69 73 20 66 69 65 6C  64 20 69 73 20 63 75 72  72 65 6E 74 6C 79 20 75  ume'This field is currently u
0002A600  6E 75 73 65 64 2E 0D 0A  0D 0A 27 44 61 74 61 5F  53 69 7A 65 27 0D 0A 09  54 68 65 20 73 69 7A 65  nused.'Data_Size'The size
0002A620  20 6F 66 20 74 68 65 20  70 61 74 63 68 20 64 61  74 61 20 61 66 74 65 72  20 69 74 20 69 73 20 6C   of the patch data after it is l
0002A640  6F 61 64 65 64 20 69 6E  74 6F 20 47 46 31 20 64  72 61 6D 2E 20 20 54 68  69 73 20 6E 75 6D 62 65  oaded into GF1 dram.  This numbe
0002A660  72 20 69 6E 63 6C 75 64  65 73 20 74 68 65 20 73  70 61 63 65 20 6E 65 65  64 65 64 20 74 6F 20 61  r includes the space needed to a
0002A680  6C 69 67 6E 20 65 61 63  68 20 6F 66 20 74 68 65  20 77 61 76 65 66 6F 72  6D 73 20 6F 6E 20 33 32  lign each of the waveforms on 32
0002A6A0  20 62 79 74 65 20 62 6F  75 6E 64 61 72 69 65 73  2E 20 20 49 66 20 79 6F  75 20 70 61 74 63 68 20   byte boundaries.  If you patch 
0002A6C0  6C 6F 61 64 65 72 20 6D  61 69 6E 74 61 69 6E 73  20 6C 69 6E 6B 65 64 20  6C 69 73 74 20 6F 66 20  loader maintains linked list of 
0002A6E0  77 61 76 65 66 6F 72 6D  73 20 69 6E 20 64 72 61  6D 2C 20 61 6E 64 20 79  6F 75 20 6E 65 65 64 20  waveforms in dram, and you need 
0002A700  74 6F 20 75 73 65 20 61  6E 20 65 78 74 72 61 20  33 32 20 62 79 74 65 73  20 70 65 72 20 77 61 76  to use an extra 32 bytes per wav
0002A720  65 66 6F 72 6D 2C 20 74  68 65 6E 20 79 6F 75 20  63 61 6E 20 75 73 65 20  74 68 65 20 77 61 76 65  eform, then you can use the wave
0002A740  5F 66 6F 72 6D 73 20 66  69 65 6C 64 20 74 6F 20  66 69 67 75 72 65 20 6F  75 74 20 68 6F 77 20 6D  _forms field to figure out how m
0002A760  75 63 68 20 6D 65 6D 6F  72 79 20 79 6F 75 20 77  69 6C 6C 20 6E 65 65 64  20 74 6F 20 6C 6F 61 64  uch memory you will need to load
0002A780  20 74 68 65 20 70 61 74  63 68 2E 20 20 69 2E 65  2E 20 20 64 61 74 61 5F  73 69 7A 65 20 2B 20 28   the patch.  i.e.  data_size + (
0002A7A0  33 32 20 2A 20 77 61 76  65 5F 66 6F 72 6D 73 29  2E 0D 0A 0D 0A 0D 0A 0D  0A 49 6E 73 74 72 75 6D  32 * wave_forms).Instrum
0002A7C0  65 6E 74 20 48 65 61 64  65 72 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ent Header____________________
0002A7E0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  0A 27 49 6E 73 74 72 75  6D 65 6E 74 27 0D 0A 09  _____________'Instrument'
0002A800  54 68 69 73 20 66 69 65  6C 64 20 69 73 20 63 75  72 72 65 6E 74 6C 79 20  75 6E 75 73 65 64 2E 0D  This field is currently unused.
0002A820  0A 0D 0A 27 49 6E 73 74  72 75 6D 65 6E 74 5F 4E  61 6D 65 27 0D 0A 09 54  68 69 73 20 66 69 65 6C  'Instrument_Name'This fiel
0002A840  64 20 69 73 20 63 75 72  72 65 6E 74 6C 79 20 75  6E 75 73 65 64 2E 0D 0A  0D 0A 27 49 6E 73 74 72  d is currently unused.'Instr
0002A860  75 6D 65 6E 74 5F 53 69  7A 65 27 0D 0A 09 54 68  65 20 73 69 7A 65 20 6F  66 20 74 68 65 20 69 6E  ument_Size'The size of the in
0002A880  73 74 72 75 6D 65 6E 74  2E 20 20 54 68 65 20 6E  75 6D 62 65 72 20 6F 66  20 62 79 74 65 73 20 74  strument.  The number of bytes t
0002A8A0  6F 20 73 6B 69 70 20 69  6E 20 6F 72 64 65 72 20  74 6F 20 72 65 61 64 20  74 68 65 20 6E 65 78 74  o skip in order to read the next
0002A8C0  20 69 6E 73 74 72 75 6D  65 6E 74 20 68 65 61 64  65 72 2E 0D 0A 0D 0A 27  4C 61 79 65 72 73 27 0D   instrument header.'Layers'
0002A8E0  0A 09 54 68 65 20 6E 75  6D 62 65 72 20 6F 66 20  6C 61 79 65 72 73 20 69  6E 20 74 68 69 73 20 69  The number of layers in this i
0002A900  6E 73 74 72 75 6D 65 6E  74 2E 20 20 4D 75 6C 74  69 70 6C 65 20 6C 61 79  65 72 73 20 61 72 65 20  nstrument.  Multiple layers are 
0002A920  75 73 75 61 6C 6C 79 20  75 73 65 64 20 69 6E 20  70 61 74 63 68 65 73 20  77 68 65 72 65 20 6D 6F  usually used in patches where mo
0002A940  72 65 20 74 68 61 6E 20  6F 6E 65 20 73 6F 75 6E  64 20 69 73 20 72 65 71  75 69 72 65 64 20 77 69  re than one sound is required wi
0002A960  74 68 20 61 20 73 69 6E  67 6C 65 20 4D 49 44 49  20 65 76 65 6E 74 20 28  6E 6F 74 65 20 6F 6E 29  th a single MIDI event (note on)
0002A980  2E 20 20 46 6F 72 20 65  78 61 6D 70 6C 65 2C 20  61 20 70 69 61 6E 6F 20  77 6F 75 6C 64 20 63 6F  .  For example, a piano would co
0002A9A0  75 6C 64 20 68 61 76 65  20 74 77 6F 20 6C 61 79  65 72 73 2E 20 54 68 65  20 66 69 72 73 74 20 77  uld have two layers. The first w
0002A9C0  6F 75 6C 64 20 62 65 20  74 68 65 20 61 63 74 75  61 6C 20 74 6F 6E 65 20  66 72 6F 6D 20 74 68 65  ould be the actual tone from the
0002A9E0  20 68 61 6D 6D 65 72 20  68 69 74 74 69 6E 67 20  74 68 65 20 73 74 72 69  6E 67 73 2C 20 61 6E 64   hammer hitting the strings, and
0002AA00  20 74 68 65 20 73 65 63  6F 6E 64 20 77 6F 75 6C  64 20 62 65 20 74 68 65  20 28 74 68 75 6E 6B 29   the second would be the (thunk)
0002AA20  20 6F 66 20 74 68 65 20  6B 65 79 20 62 65 69 6E  67 20 73 74 72 75 63 6B  20 61 6E 64 20 61 6C 6C   of the key being struck and all
0002AA40  20 6F 66 20 74 68 65 20  6D 65 63 68 61 6E 69 73  6D 73 20 6D 6F 76 69 6E  67 20 69 6E 73 69 64 65   of the mechanisms moving inside
0002AA60  20 74 68 65 20 70 69 61  6E 6F 2E 20 20 54 68 65  20 6D 65 63 68 61 6E 69  73 6D 73 20 77 6F 75 6C   the piano.  The mechanisms woul
0002AA80  64 20 70 72 6F 62 61 62  6C 79 20 62 65 20 66 72  65 71 75 65 6E 63 79 20  69 6E 64 65 70 65 6E 64  d probably be frequency independ
0002AAA0  61 6E 74 2C 20 61 6E 64  20 61 6C 73 6F 20 69 6E  64 65 70 65 6E 64 61 6E  74 20 6F 66 20 74 68 65  ant, and also independant of the
0002AAC0  20 6C 65 6E 67 74 68 20  6F 66 20 74 68 65 20 74  6F 6E 65 2E 0D 0A 0C 4C  61 79 65 72 20 48 65 61   length of the tone.Layer Hea
0002AAE0  64 65 72 0D 0A 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  der__________________________
0002AB00  0A 0D 0A 27 4C 61 79 65  72 5F 44 75 70 6C 69 63  61 74 65 27 0D 0A 09 43  75 72 72 65 6E 74 6C 79  'Layer_Duplicate'Currently
0002AB20  20 75 6E 75 73 65 64 2E  20 20 49 66 20 74 68 65  20 6C 61 79 65 72 20 64  75 70 6C 69 63 61 74 65   unused.  If the layer duplicate
0002AB40  20 20 69 73 20 6E 6F 6E  7A 65 72 6F 2C 20 74 68  65 6E 20 74 68 69 73 20  6C 61 79 65 72 20 73 68    is nonzero, then this layer sh
0002AB60  6F 75 6C 64 20 75 73 65  20 74 68 65 20 64 61 74  61 20 66 72 6F 6D 20 74  68 65 20 70 72 65 76 69  ould use the data from the previ
0002AB80  6F 75 73 20 6C 61 79 65  72 2E 20 4F 6E 6C 79 20  74 68 65 20 68 65 61 64  65 72 73 20 77 69 6C 6C  ous layer. Only the headers will
0002ABA0  20 66 6F 6C 6C 6F 77 2E  0D 0A 0D 0A 27 4C 61 79  65 72 27 0D 0A 09 54 68  65 20 63 75 72 72 65 6E   follow.'Layer'The curren
0002ABC0  74 20 6C 61 79 65 72 20  6E 75 6D 62 65 72 20 66  6F 72 20 74 68 69 73 20  69 6E 73 74 72 75 6D 65  t layer number for this instrume
0002ABE0  6E 74 0D 0A 0D 0A 27 4C  61 79 65 72 5F 53 69 7A  65 27 0D 0A 09 54 68 65  20 73 69 7A 65 20 6F 66  nt'Layer_Size'The size of
0002AC00  20 74 68 69 73 20 6C 61  79 65 72 2E 20 20 43 61  6E 20 62 65 20 75 73 65  64 20 74 6F 20 73 65 65   this layer.  Can be used to see
0002AC20  6B 20 70 61 73 74 20 74  68 69 73 20 6C 61 79 65  72 20 69 6E 20 74 68 65  20 66 69 6C 65 2E 0D 0A  k past this layer in the file.
0002AC40  0D 0A 27 53 61 6D 70 6C  65 73 27 0D 0A 09 54 68  65 20 6E 75 6D 62 65 72  20 6F 66 20 77 61 76 65  'Samples'The number of wave
0002AC60  66 6F 72 6D 73 20 69 6E  20 74 68 69 73 20 6C 61  79 65 72 2E 20 20 54 68  69 73 20 66 69 65 6C 64  forms in this layer.  This field
0002AC80  20 69 73 20 69 67 6E 6F  72 65 64 20 69 66 20 6C  61 79 65 72 5F 64 75 70  6C 69 63 61 74 65 20 69   is ignored if layer_duplicate i
0002ACA0  73 20 74 72 75 65 2E 0D  0A 0D 0A 0D 0A 0D 0A 57  61 76 65 20 48 65 61 64  65 72 0D 0A 5F 5F 5F 5F  s true.Wave Header____
0002ACC0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 0D 0A 0D  _____________________________
0002ACE0  0A 27 57 61 76 65 5F 4E  61 6D 65 27 0D 0A 09 54  68 69 73 20 66 69 65 6C  64 20 69 73 20 63 75 72  'Wave_Name'This field is cur
0002AD00  72 65 6E 74 6C 79 20 75  6E 75 73 65 64 0D 0A 0D  0A 27 46 72 61 63 74 69  6F 6E 73 27 0D 0A 09 54  rently unused'Fractions'T
0002AD20  68 65 20 73 74 61 72 74  5F 6C 6F 6F 70 20 61 6E  64 20 65 6E 64 5F 6C 6F  6F 70 20 61 72 65 20 74  he start_loop and end_loop are t
0002AD40  68 65 20 69 6E 74 65 67  65 72 20 70 6F 72 74 69  6F 6E 73 20 6F 66 20 74  68 65 20 77 61 76 65 74  he integer portions of the wavet
0002AD60  61 62 6C 65 20 61 64 64  72 65 73 73 2E 20 20 54  68 65 20 47 46 31 20 63  61 6E 20 69 6E 74 65 72  able address.  The GF1 can inter
0002AD80  70 6F 6C 61 74 65 20 62  65 74 77 65 65 6E 20 73  61 6D 70 6C 65 20 70 6F  69 6E 74 73 20 61 6E 64  polate between sample points and
0002ADA0  20 74 68 65 72 65 66 6F  72 65 20 6D 65 6F 72 65  20 72 65 73 6F 6C 75 74  69 6F 6E 20 74 68 61 6E   therefore meore resolution than
0002ADC0  20 6A 75 73 74 20 74 68  65 20 69 6E 74 65 67 65  72 20 61 64 64 72 65 73  73 20 69 73 20 6E 65 65   just the integer address is nee
0002ADE0  64 65 64 2E 20 20 54 68  65 20 6D 6F 73 74 20 73  69 67 6E 69 66 69 63 61  6E 74 20 66 6F 75 72 20  ded.  The most significant four 
0002AE00  62 69 74 73 20 61 72 65  20 74 68 65 20 66 72 61  63 74 69 6F 6E 61 6C 20  61 64 64 72 65 73 73 20  bits are the fractional address 
0002AE20  66 6F 72 20 74 68 65 20  73 74 61 72 74 5F 6C 6F  6F 70 2C 20 61 6E 64 20  74 68 65 20 6C 65 61 73  for the start_loop, and the leas
0002AE40  74 20 73 69 67 6E 69 66  69 63 61 6E 74 20 66 6F  75 72 20 62 69 74 73 20  61 72 65 20 74 68 65 20  t significant four bits are the 
0002AE60  66 72 61 63 74 69 6F 6E  61 6C 20 61 64 64 72 65  73 73 20 66 6F 72 20 74  68 65 20 65 6E 64 5F 6C  fractional address for the end_l
0002AE80  6F 6F 70 2E 0D 0A 0D 0A  27 57 61 76 65 5F 53 69  7A 65 27 0D 0A 09 54 68  65 20 6E 75 6D 62 65 72  oop.'Wave_Size'The number
0002AEA0  20 6F 66 20 62 79 74 65  73 20 6F 66 20 77 61 76  65 20 74 61 62 6C 65 20  64 61 74 61 20 74 68 61   of bytes of wave table data tha
0002AEC0  74 20 66 6F 6C 6C 6F 77  73 20 2D 2D 20 6E 6F 74  20 23 20 6F 66 20 73 61  6D 70 6C 65 73 2E 0D 0A  t follows -- not # of samples.
0002AEE0  0D 0A 27 53 74 61 72 74  5F 4C 6F 6F 70 27 0D 0A  09 54 68 65 20 69 6E 74  65 67 65 72 20 70 6F 72  'Start_Loop'The integer por
0002AF00  74 69 6F 6E 20 6F 66 20  74 68 65 20 73 74 61 72  74 69 6E 67 20 6C 6F 6F  70 20 61 64 64 72 65 73  tion of the starting loop addres
0002AF20  73 20 72 65 6C 61 74 69  76 65 20 74 6F 20 74 68  65 20 62 65 67 69 6E 6E  69 6E 67 20 6F 66 20 74  s relative to the beginning of t
0002AF40  68 65 20 77 61 76 65 2E  20 20 54 68 69 73 20 61  64 64 72 65 73 73 20 69  73 20 74 68 65 20 72 65  he wave.  This address is the re
0002AF60  6C 61 74 69 76 65 20 6E  75 6D 62 65 72 20 6F 66  20 62 79 74 65 73 2C 20  61 6E 64 20 6E 6F 74 20  lative number of bytes, and not 
0002AF80  74 68 65 20 6E 75 6D 62  65 72 20 6F 66 20 73 61  6D 70 6C 65 73 2E 0D 0A  0D 0A 27 45 6E 64 5F 4C  the number of samples.'End_L
0002AFA0  6F 6F 70 27 0D 0A 09 54  68 65 20 69 6E 74 65 67  65 72 20 70 6F 72 74 69  6F 6E 20 6F 66 20 74 68  oop'The integer portion of th
0002AFC0  65 20 65 6E 64 69 6E 67  20 6C 6F 6F 70 20 61 64  64 72 65 73 73 20 72 65  6C 61 74 69 76 65 20 74  e ending loop address relative t
0002AFE0  6F 20 74 68 65 20 62 65  67 69 6E 6E 69 6E 67 20  6F 66 20 74 68 65 20 77  61 76 65 2E 20 20 54 68  o the beginning of the wave.  Th
0002B000  69 73 20 61 64 64 72 65  73 73 20 69 73 20 74 68  65 20 72 65 6C 61 74 69  76 65 20 6E 75 6D 62 65  is address is the relative numbe
0002B020  72 20 6F 66 20 62 79 74  65 73 2C 20 61 6E 64 20  6E 6F 74 20 74 68 65 20  6E 75 6D 62 65 72 20 6F  r of bytes, and not the number o
0002B040  66 20 73 61 6D 70 6C 65  73 2E 0D 0A 0D 0A 27 53  61 6D 70 6C 65 5F 52 61  74 65 27 0D 0A 09 54 68  f samples.'Sample_Rate'Th
0002B060  69 73 20 69 73 20 74 68  65 20 73 61 6D 70 6C 65  20 72 61 74 65 20 6F 66  20 74 68 65 20 72 65 63  is is the sample rate of the rec
0002B080  6F 72 64 65 64 20 64 61  74 61 2E 20 20 54 68 69  73 20 6E 75 6D 62 65 72  20 69 73 20 6E 6F 74 20  orded data.  This number is not 
0002B0A0  72 65 6C 61 74 65 64 20  74 6F 20 74 68 65 20 61  63 74 75 61 6C 20 70 69  74 63 68 20 6F 66 20 74  related to the actual pitch of t
0002B0C0  68 65 20 72 65 63 6F 72  64 65 64 20 74 6F 6E 65  2E 0D 0A 0C 27 4C 6F 77  5F 46 72 65 71 75 65 6E  he recorded tone.'Low_Frequen
0002B0E0  63 79 27 0D 0A 09 45 61  63 68 20 77 61 76 65 20  63 6F 76 65 72 73 20 61  20 73 70 65 63 69 66 69  cy'Each wave covers a specifi
0002B100  63 20 66 72 65 71 75 65  6E 63 79 20 72 61 6E 67  65 2E 20 20 54 68 69 73  20 69 73 20 74 68 65 20  c frequency range.  This is the 
0002B120  6C 6F 77 65 73 74 20 66  72 65 71 75 65 6E 63 79  20 74 68 61 74 20 74 68  69 73 20 77 61 76 65 20  lowest frequency that this wave 
0002B140  63 61 6E 20 62 65 20 75  73 65 64 20 74 6F 20 70  6C 61 79 2E 20 20 54 68  69 73 20 66 69 65 6C 64  can be used to play.  This field
0002B160  20 69 73 20 73 63 61 6C  65 64 20 62 65 20 31 30  30 30 20 66 6F 72 20 61  63 63 75 72 61 63 79 2E   is scaled be 1000 for accuracy.
0002B180  0D 0A 0D 0A 27 48 69 67  68 5F 46 72 65 71 75 65  6E 63 79 27 0D 0A 09 45  61 63 68 20 77 61 76 65  'High_Frequency'Each wave
0002B1A0  20 63 6F 76 65 72 73 20  61 20 73 70 65 63 69 66  69 63 20 66 72 65 71 75  65 6E 63 79 20 72 61 6E   covers a specific frequency ran
0002B1C0  67 65 2E 20 20 54 68 69  73 20 69 73 20 74 68 65  20 68 69 67 68 65 73 74  20 66 72 65 71 75 65 6E  ge.  This is the highest frequen
0002B1E0  63 79 20 74 68 61 74 20  74 68 69 73 20 77 61 76  65 20 63 61 6E 20 62 65  20 75 73 65 64 20 74 6F  cy that this wave can be used to
0002B200  20 70 6C 61 79 2E 20 20  54 68 69 73 20 66 69 65  6C 64 20 69 73 20 73 63  61 6C 65 64 20 62 79 20   play.  This field is scaled by 
0002B220  31 30 30 30 20 66 6F 72  20 61 63 63 75 72 61 63  79 2E 20 20 49 66 20 74  68 65 72 65 20 69 73 20  1000 for accuracy.  If there is 
0002B240  61 6E 6F 74 68 65 72 20  77 61 76 65 20 61 64 6A  61 63 65 6E 74 20 74 6F  20 74 68 69 73 20 6F 6E  another wave adjacent to this on
0002B260  65 20 61 6E 64 20 69 74  73 20 72 61 6E 67 65 20  6F 76 65 72 6C 61 70 73  20 74 68 69 73 20 72 61  e and its range overlaps this ra
0002B280  6E 67 65 2C 20 74 68 65  6E 20 74 68 65 20 6E 65  78 74 20 77 61 76 65 66  6F 72 6D 20 77 69 6C 6C  nge, then the next waveform will
0002B2A0  20 61 6C 77 61 79 73 20  62 65 20 63 68 6F 73 65  6E 2E 0D 0A 0D 0A 27 52  6F 6F 74 5F 46 72 65 71   always be chosen.'Root_Freq
0002B2C0  75 65 6E 63 79 27 0D 0A  09 49 66 20 74 68 69 73  20 77 61 76 65 20 69 73  20 70 6C 61 79 65 64 20  uency'If this wave is played 
0002B2E0  62 61 63 6B 20 61 74 20  74 68 65 20 6F 72 69 67  69 6E 61 6C 20 73 61 6D  70 6C 65 5F 72 61 74 65  back at the original sample_rate
0002B300  2C 20 74 68 65 6E 20 74  68 69 73 20 6E 75 6D 62  65 72 20 73 68 6F 75 6C  64 20 62 65 20 74 68 65  , then this number should be the
0002B320  20 70 69 74 63 68 20 6F  66 20 74 68 65 20 6F 72  69 67 69 6E 61 6C 20 74  6F 6E 65 2E 20 20 54 68   pitch of the original tone.  Th
0002B340  69 73 20 66 69 65 6C 64  20 69 73 20 6D 6F 64 69  66 69 65 64 20 74 6F 20  74 75 6E 65 20 74 68 65  is field is modified to tune the
0002B360  20 77 61 76 65 20 74 6F  20 61 20 70 61 72 74 69  63 75 6C 61 72 20 70 69  74 63 68 2E 20 20 54 68   wave to a particular pitch.  Th
0002B380  69 73 20 66 69 65 6C 64  20 69 73 20 73 63 61 6C  65 64 20 62 79 20 31 30  30 30 20 66 6F 72 20 61  is field is scaled by 1000 for a
0002B3A0  63 63 75 72 61 63 79 2E  0D 0A 0D 0A 27 54 75 6E  65 27 0D 0A 09 54 68 69  73 20 66 69 65 6C 64 20  ccuracy.'Tune'This field 
0002B3C0  69 73 20 75 6E 75 73 65  64 2E 20 20 54 75 6E 69  6E 67 20 69 73 20 61 63  63 6F 6D 70 6C 69 73 68  is unused.  Tuning is accomplish
0002B3E0  65 64 20 62 79 20 6D 6F  64 69 66 79 69 6E 67 20  74 68 65 20 72 6F 6F 74  20 66 72 65 71 75 65 6E  ed by modifying the root frequen
0002B400  63 79 2E 0D 0A 0D 0A 27  42 61 6C 61 6E 63 65 27  0D 0A 09 30 20 69 73 20  31 30 30 25 20 74 6F 20  cy.'Balance'0 is 100% to 
0002B420  74 68 65 20 72 69 67 68  74 2C 20 61 6E 64 20 31  35 20 69 73 20 31 30 30  25 20 74 6F 20 74 68 65  the right, and 15 is 100% to the
0002B440  20 6C 65 66 74 2E 20 20  41 73 20 74 68 65 20 62  61 6C 61 6E 63 65 20 69  73 20 73 68 69 66 74 65   left.  As the balance is shifte
0002B460  64 20 66 72 6F 6D 20 6C  65 66 74 20 74 6F 20 72  69 67 68 74 2C 20 74 68  65 20 74 6F 74 61 6C 20  d from left to right, the total 
0002B480  6F 75 74 70 75 74 20 70  6F 77 65 72 20 6F 66 20  62 6F 74 68 20 63 68 61  6E 6E 65 6C 73 20 69 73  output power of both channels is
0002B4A0  20 63 6F 6E 73 74 61 6E  74 2E 0D 0A 0D 0A 27 45  6E 76 65 6C 6F 70 65 5F  52 61 74 65 27 0D 0A 09   constant.'Envelope_Rate'
0002B4C0  41 6E 20 61 72 72 61 79  20 6F 66 20 36 20 72 61  74 65 73 20 74 6F 20 69  6D 70 6C 65 6D 65 6E 74  An array of 6 rates to implement
0002B4E0  20 61 20 36 2D 70 6F 69  6E 74 20 65 6E 76 65 6C  6F 70 65 2E 20 54 68 65  20 66 69 72 73 74 20 74   a 6-point envelope. The first t
0002B500  68 72 65 65 20 72 61 74  65 73 20 63 61 6E 20 62  65 20 75 73 65 64 20 66  6F 72 20 61 74 74 61 63  hree rates can be used for attac
0002B520  6B 20 61 6E 64 20 64 65  63 61 79 2E 20 20 49 66  20 74 68 65 20 73 75 73  74 61 69 6E 20 66 6C 61  k and decay.  If the sustain fla
0002B540  67 20 69 73 20 73 65 74  2C 20 74 68 61 6E 20 74  68 65 20 74 68 69 72 64  20 65 6E 76 65 6C 6F 70  g is set, than the third envelop
0002B560  65 20 70 6F 69 6E 74 20  77 69 6C 6C 20 62 65 20  74 68 65 20 73 75 73 74  61 69 6E 20 70 6F 69 6E  e point will be the sustain poin
0002B580  74 2E 20 54 68 65 20 6C  61 73 74 20 74 68 72 65  65 20 65 6E 76 65 6C 6F  70 65 20 70 6F 69 6E 74  t. The last three envelope point
0002B5A0  73 20 61 72 65 20 66 6F  72 20 74 68 65 20 72 65  6C 65 61 73 65 2C 20 61  6E 64 20 61 6E 20 6F 70  s are for the release, and an op
0002B5C0  74 69 6F 6E 61 6C 20 22  65 63 68 6F 22 20 65 66  66 65 63 74 2E 20 20 49  66 20 74 68 65 20 6C 61  tional "echo" effect.  If the la
0002B5E0  73 74 20 65 6E 76 65 6C  6F 70 65 20 70 6F 69 6E  74 20 69 73 20 6C 65 66  74 20 61 74 20 61 6E 20  st envelope point is left at an 
0002B600  61 75 64 69 62 6C 65 20  6C 65 76 65 6C 2C 20 74  68 65 6E 20 61 20 73 61  6D 70 6C 65 64 20 72 65  audible level, then a sampled re
0002B620  6C 65 61 73 65 20 63 61  6E 20 68 65 61 72 64 20  61 66 74 65 72 20 74 68  65 20 6C 61 73 74 20 65  lease can heard after the last e
0002B640  6E 76 65 6C 6F 70 65 20  70 6F 69 6E 74 2E 20 54  68 65 20 72 61 74 65 20  76 61 6C 75 65 73 20 61  nvelope point. The rate values a
0002B660  72 65 20 73 65 6E 74 20  64 69 72 65 63 74 6C 79  20 74 6F 20 74 68 65 20  47 46 31 20 68 61 72 64  re sent directly to the GF1 hard
0002B680  77 61 72 65 2C 20 61 6E  64 20 61 72 65 20 64 65  73 63 72 69 62 65 64 20  69 6E 20 74 68 65 20 76  ware, and are described in the v
0002B6A0  6F 6C 75 6D 65 20 72 61  6D 70 69 6E 67 20 73 65  63 74 69 6F 6E 2E 0D 0A  0D 0A 27 45 6E 76 65 6C  olume ramping section.'Envel
0002B6C0  6F 70 65 5F 4F 66 66 73  65 74 27 0D 0A 09 41 6E  20 61 72 72 61 79 20 6F  66 20 36 20 6F 66 66 73  ope_Offset'An array of 6 offs
0002B6E0  65 74 73 20 74 6F 20 69  6D 70 6C 65 6D 65 6E 74  20 61 20 36 2D 70 6F 69  6E 74 20 65 6E 76 65 6C  ets to implement a 6-point envel
0002B700  6F 70 65 2E 20 54 68 65  20 66 69 72 73 74 20 74  68 72 65 65 20 6F 66 66  73 65 74 73 20 63 61 6E  ope. The first three offsets can
0002B720  20 62 65 20 75 73 65 64  20 66 6F 72 20 61 74 74  61 63 6B 20 61 6E 64 20  64 65 63 61 79 2E 20 20   be used for attack and decay.  
0002B740  49 66 20 74 68 65 20 73  75 73 74 61 69 6E 20 66  6C 61 67 20 69 73 20 73  65 74 2C 20 74 68 61 6E  If the sustain flag is set, than
0002B760  20 74 68 65 20 74 68 69  72 64 20 65 6E 76 65 6C  6F 70 65 20 70 6F 69 6E  74 20 77 69 6C 6C 20 62   the third envelope point will b
0002B780  65 20 74 68 65 20 73 75  73 74 61 69 6E 20 70 6F  69 6E 74 2E 20 20 54 68  65 20 6C 61 73 74 20 74  e the sustain point.  The last t
0002B7A0  68 72 65 65 20 65 6E 76  65 6C 6F 70 65 20 70 6F  69 6E 74 73 20 61 72 65  20 66 6F 72 20 74 68 65  hree envelope points are for the
0002B7C0  20 72 65 6C 65 61 73 65  2C 20 61 6E 64 20 61 6E  20 6F 70 74 69 6F 6E 61  6C 20 22 65 63 68 6F 22   release, and an optional "echo"
0002B7E0  20 65 66 66 65 63 74 2E  20 20 49 66 20 74 68 65  20 6C 61 73 74 20 65 6E  76 65 6C 6F 70 65 20 70   effect.  If the last envelope p
0002B800  6F 69 6E 74 20 69 73 20  6C 65 66 74 20 61 74 20  61 6E 20 61 75 64 69 62  6C 65 20 6C 65 76 65 6C  oint is left at an audible level
0002B820  2C 20 74 68 65 6E 20 61  20 73 61 6D 70 6C 65 64  20 72 65 6C 65 61 73 65  20 63 61 6E 20 68 65 61  , then a sampled release can hea
0002B840  72 64 20 61 66 74 65 72  20 74 68 65 20 6C 61 73  74 20 65 6E 76 65 6C 6F  70 65 20 70 6F 69 6E 74  rd after the last envelope point
0002B860  2E 20 20 54 68 65 20 6F  66 66 73 65 74 20 76 61  6C 75 65 73 20 61 72 65  20 73 65 6E 74 20 64 69  .  The offset values are sent di
0002B880  72 65 63 74 6C 79 20 74  6F 20 74 68 65 20 47 46  31 20 68 61 72 64 77 61  72 65 2C 20 61 6E 64 20  rectly to the GF1 hardware, and 
0002B8A0  61 72 65 20 64 65 73 63  72 69 62 65 64 20 69 6E  20 74 68 65 20 76 6F 6C  75 6D 65 20 72 61 6D 70  are described in the volume ramp
0002B8C0  69 6E 67 20 73 65 63 74  69 6F 6E 2E 0D 0A 0D 0A  27 54 72 65 6D 6F 6C 6F  5F 53 77 65 65 70 27 0D  ing section.'Tremolo_Sweep'
0002B8E0  0A 09 4E 6F 74 20 69 6D  70 6C 65 6D 65 6E 74 65  64 2E 20 20 54 72 65 6D  6F 6C 6F 20 73 74 61 72  Not implemented.  Tremolo star
0002B900  74 73 20 61 75 74 6F 6D  61 74 69 63 61 6C 6C 79  20 77 68 65 6E 20 74 68  65 20 6E 6F 74 65 20 73  ts automatically when the note s
0002B920  75 73 74 61 69 6E 73 2E  20 54 68 69 73 20 77 69  6C 6C 20 62 65 20 63 68  61 6E 67 65 64 20 69 6E  ustains. This will be changed in
0002B940  20 66 75 74 75 72 65 20  73 6F 66 74 77 61 72 65  20 74 6F 20 67 72 61 64  75 61 6C 6C 79 20 73 77   future software to gradually sw
0002B960  65 65 70 20 69 6E 20 74  68 65 20 74 72 65 6D 6F  6C 6F 20 64 65 70 74 68  20 66 72 6F 6D 20 30 20  eep in the tremolo depth from 0 
0002B980  61 74 20 74 68 65 20 72  61 74 65 20 6F 66 20 74  72 65 6D 6F 6C 6F 5F 73  77 65 65 70 20 2F 20 34  at the rate of tremolo_sweep / 4
0002B9A0  35 20 73 65 63 6F 6E 64  73 2E 0D 0A 0C 27 54 72  65 6D 6F 6C 6F 5F 52 61  74 65 27 0D 0A 09 54 68  5 seconds.'Tremolo_Rate'Th
0002B9C0  65 20 72 61 74 65 20 6F  66 20 61 6D 70 6C 69 74  75 64 65 20 6D 6F 64 75  6C 61 74 69 6F 6E 2E 20  e rate of amplitude modulation. 
0002B9E0  20 30 20 69 73 20 30 2E  30 35 20 48 7A 2C 20 61  6E 64 20 32 35 35 20 69  73 20 36 20 48 7A 2E 20   0 is 0.05 Hz, and 255 is 6 Hz. 
0002BA00  20 41 20 63 6F 6D 70 6C  65 74 65 20 74 61 62 6C  65 20 69 73 20 6C 69 73  74 65 64 20 62 65 6C 6F   A complete table is listed belo
0002BA20  77 2E 0D 0A 0D 0A 27 54  72 65 6D 6F 6C 6F 5F 44  65 70 74 68 27 0D 0A 09  30 20 6D 65 61 6E 73 20  w.'Tremolo_Depth'0 means 
0002BA40  74 75 72 6E 20 74 72 65  6D 6F 6C 6F 20 6F 66 66  2E 20 20 32 35 35 20 70  72 6F 76 69 64 65 73 20  turn tremolo off.  255 provides 
0002BA60  61 20 31 36 20 64 42 20  6D 6F 64 75 6C 61 74 69  6F 6E 2E 20 20 41 20 63  6F 6D 70 6C 65 74 65 20  a 16 dB modulation.  A complete 
0002BA80  74 61 62 6C 65 20 69 73  20 6C 69 73 74 65 64 20  62 65 6C 6F 77 2E 0D 0A  0D 0A 27 56 69 62 72 61  table is listed below.'Vibra
0002BAA0  74 6F 5F 53 77 65 65 70  27 0D 0A 09 47 72 61 64  75 61 6C 6C 79 20 73 77  65 65 70 20 69 6E 20 74  to_Sweep'Gradually sweep in t
0002BAC0  68 65 20 76 69 62 72 61  74 6F 20 64 65 70 74 68  20 66 72 6F 6D 20 30 20  61 74 20 74 68 65 20 72  he vibrato depth from 0 at the r
0002BAE0  61 74 65 20 6F 66 20 76  69 62 72 61 74 6F 5F 73  77 65 65 70 20 2F 20 34  35 20 73 65 63 6F 6E 64  ate of vibrato_sweep / 45 second
0002BB00  73 2E 0D 0A 0D 0A 27 56  69 62 72 61 74 6F 5F 52  61 74 65 27 0D 0A 09 54  68 65 20 72 61 74 65 20  s.'Vibrato_Rate'The rate 
0002BB20  6F 66 20 66 72 65 71 75  65 6E 63 79 20 6D 6F 64  75 6C 61 74 69 6F 6E 2E  20 20 30 20 69 73 20 30  of frequency modulation.  0 is 0
0002BB40  2E 30 35 20 48 7A 2C 20  61 6E 64 20 32 35 35 20  69 73 20 36 20 48 7A 2E  0D 0A 0D 0A 27 56 69 62  .05 Hz, and 255 is 6 Hz.'Vib
0002BB60  72 61 74 6F 5F 44 65 70  74 68 27 0D 0A 09 30 20  6D 65 61 6E 73 20 74 75  72 6E 20 76 69 62 72 61  rato_Depth'0 means turn vibra
0002BB80  74 6F 20 6F 66 66 2E 20  20 32 35 35 20 69 73 20  61 20 6F 6E 65 20 6F 63  74 61 76 65 20 6D 6F 64  to off.  255 is a one octave mod
0002BBA0  75 6C 61 74 69 6F 6E 2E  0D 0A 0D 0A 27 4D 6F 64  65 73 27 0D 0A 09 41 20  73 65 74 20 6F 66 20 62  ulation.'Modes'A set of b
0002BBC0  69 74 20 66 69 65 6C 64  73 20 64 65 73 63 72 69  62 69 6E 67 20 6D 6F 64  65 73 20 61 6E 64 20 64  it fields describing modes and d
0002BBE0  61 74 61 20 74 79 70 65  3A 0D 0A 42 49 54 20 30  2D 09 31 36 20 62 69 74  20 64 61 74 61 0D 0A 42  ata type:BIT 0-16 bit dataB
0002BC00  49 54 20 31 2D 09 75 6E  73 69 67 6E 65 64 20 64  61 74 61 0D 0A 42 49 54  20 32 2D 09 6C 6F 6F 70  IT 1-unsigned dataBIT 2-loop
0002BC20  69 6E 67 20 65 6E 61 62  6C 65 64 0D 0A 42 49 54  20 33 2D 09 62 69 64 69  72 65 63 74 69 6F 6E 61  ing enabledBIT 3-bidirectiona
0002BC40  6C 20 6C 6F 6F 70 0D 0A  42 49 54 20 34 2D 09 70  6C 61 79 20 70 61 74 63  68 20 62 61 63 6B 77 61  l loopBIT 4-play patch backwa
0002BC60  72 64 73 2E 20 20 73 74  61 72 74 20 61 74 20 65  6E 64 20 61 64 64 72 65  73 73 2C 20 6C 6F 6F 70  rds.  start at end address, loop
0002BC80  20 62 61 63 6B 77 61 72  64 73 2C 20 61 6E 64 20  74 68 65 6E 20 65 6E 64  20 61 74 20 62 65 67 69   backwards, and then end at begi
0002BCA0  6E 6E 69 6E 67 20 61 64  64 72 65 73 73 2E 0D 0A  42 49 54 20 35 2D 09 73  75 73 74 61 69 6E 20 2D  nning address.BIT 5-sustain -
0002BCC0  20 65 6E 76 65 6C 6F 70  69 6E 67 20 73 74 6F 70  73 20 61 74 20 74 68 69  72 64 20 65 6E 76 65 6C   enveloping stops at third envel
0002BCE0  6F 70 65 20 70 6F 69 6E  74 2E 20 20 61 20 6E 6F  74 65 20 6F 66 66 20 77  69 6C 6C 20 63 6F 6E 74  ope point.  a note off will cont
0002BD00  69 6E 75 65 20 65 6E 76  65 6C 6F 70 69 6E 67 2E  0D 0A 42 49 54 20 36 2D  09 63 75 72 72 65 6E 74  inue enveloping.BIT 6-current
0002BD20  6C 79 20 6D 65 61 6E 73  20 65 6E 76 65 6C 6F 70  69 6E 67 20 65 6E 61 62  6C 65 64 2E 20 20 41 6C  ly means enveloping enabled.  Al
0002BD40  6C 20 67 72 61 76 69 73  20 70 61 74 63 68 65 73  20 68 61 76 65 20 74 68  69 73 20 62 69 74 20 73  l gravis patches have this bit s
0002BD60  65 74 2E 20 20 54 68 69  73 20 66 69 65 6C 64 20  77 69 6C 6C 20 62 65 20  6D 6F 64 69 66 69 65 64  et.  This field will be modified
0002BD80  20 69 6E 20 74 68 65 20  6E 65 61 72 20 66 75 74  75 72 65 20 74 6F 20 69  6D 70 6C 65 6D 65 6E 74   in the near future to implement
0002BDA0  20 61 20 73 61 6D 70 6C  65 64 20 72 65 6C 65 61  73 65 20 61 74 20 6E 6F  74 65 20 6F 66 66 20 69   a sampled release at note off i
0002BDC0  6E 73 74 65 61 64 20 6F  66 20 61 74 20 74 68 65  20 6C 61 73 74 20 65 6E  76 65 6C 6F 70 65 20 70  nstead of at the last envelope p
0002BDE0  6F 69 6E 74 2E 20 20 49  66 20 74 68 69 73 20 62  69 74 20 69 73 20 6F 6E  2C 20 74 68 65 20 73 61  oint.  If this bit is on, the sa
0002BE00  6D 70 6C 65 20 72 65 6C  65 61 73 65 20 6F 63 63  75 72 73 20 61 66 74 65  72 20 74 68 65 20 6C 61  mple release occurs after the la
0002BE20  73 74 20 65 6E 76 65 6C  6F 70 65 20 70 6F 69 6E  74 2E 20 20 49 66 20 74  68 69 73 20 62 69 74 20  st envelope point.  If this bit 
0002BE40  69 73 20 6F 66 66 2C 20  74 68 65 20 73 61 6D 70  6C 65 64 20 72 65 6C 65  61 73 65 20 6F 63 63 75  is off, the sampled release occu
0002BE60  72 73 20 61 74 20 74 68  65 20 6E 6F 74 65 20 6F  66 66 2E 0D 0A 42 49 54  20 37 2D 09 66 61 73 74  rs at the note off.BIT 7-fast
0002BE80  20 72 65 6C 65 61 73 65  2E 20 20 54 68 65 20 6C  61 73 74 20 74 68 72 65  65 20 65 6E 76 65 6C 6F   release.  The last three envelo
0002BEA0  70 65 20 70 6F 69 6E 74  73 20 61 72 65 20 69 67  6E 6F 72 65 64 2E 0D 0A  0D 0A 27 53 63 61 6C 65  pe points are ignored.'Scale
0002BEC0  5F 46 72 65 71 75 65 6E  63 79 27 0D 0A 09 4B 65  79 62 6F 61 72 64 20 66  72 65 71 75 65 6E 63 79  _Frequency'Keyboard frequency
0002BEE0  20 73 63 61 6C 69 6E 67  2E 20 20 4E 6F 72 6D 61  6C 6C 79 2C 20 4D 49 44  49 20 6E 6F 74 65 20 36   scaling.  Normally, MIDI note 6
0002BF00  34 20 70 6C 61 79 73 20  61 20 6D 69 64 64 6C 65  20 43 2E 20 20 41 20 36  35 20 70 6C 61 79 73 20  4 plays a middle C.  A 65 plays 
0002BF20  61 20 43 23 2E 20 20 66  72 65 71 75 65 6E 63 79  20 73 63 61 6C 69 6E 67  20 63 68 61 6E 67 65 73  a C#.  frequency scaling changes
0002BF40  20 74 68 65 20 64 69 73  74 61 6E 63 65 20 69 6E  20 70 69 74 63 68 20 6F  66 20 65 61 63 68 20 4D   the distance in pitch of each M
0002BF60  49 44 49 20 6E 6F 74 65  2E 20 20 20 54 68 65 20  73 63 61 6C 65 5F 66 72  65 71 75 65 6E 63 79 20  IDI note.   The scale_frequency 
0002BF80  69 73 20 74 68 65 20 4D  49 44 49 20 6E 6F 74 65  20 6E 75 6D 62 65 72 20  77 68 69 63 68 20 69 73  is the MIDI note number which is
0002BFA0  20 74 68 65 20 70 69 76  6F 74 20 70 6F 69 6E 74  20 66 6F 72 20 73 63 61  6C 69 6E 67 2E 20 20 49   the pivot point for scaling.  I
0002BFC0  66 20 73 63 61 6C 65 5F  66 72 65 71 75 65 6E 63  79 20 69 73 20 36 34 2C  20 74 68 65 6E 20 4D 49  f scale_frequency is 64, then MI
0002BFE0  44 49 20 6E 6F 74 65 20  36 34 20 77 69 6C 6C 20  73 6F 75 6E 64 20 6C 69  6B 65 20 61 20 43 34 20  DI note 64 will sound like a C4 
0002C000  72 65 67 61 72 64 6C 65  73 73 20 6F 66 20 73 63  61 6C 65 20 66 61 63 74  6F 72 2E 0D 0A 0D 0A 27  regardless of scale factor.'
0002C020  53 63 61 6C 65 5F 46 61  63 74 6F 72 27 0D 0A 09  31 30 32 34 20 6D 65 61  6E 73 20 6E 6F 72 6D 61  Scale_Factor'1024 means norma
0002C040  6C 20 73 63 61 6C 69 6E  67 2E 20 45 61 63 68 20  4D 49 44 49 20 6E 6F 74  65 20 69 73 20 6F 6E 65  l scaling. Each MIDI note is one
0002C060  20 73 65 6D 69 74 6F 6E  65 20 61 77 61 79 20 66  72 6F 6D 20 69 74 73 20  6E 65 69 67 68 62 6F 72   semitone away from its neighbor
0002C080  2E 20 20 35 31 32 20 77  6F 75 6C 64 20 62 65 20  31 2F 32 20 73 65 6D 69  74 6F 6E 65 20 61 70 61  .  512 would be 1/2 semitone apa
0002C0A0  72 74 2E 20 20 32 30 34  38 20 69 73 20 74 77 6F  20 73 65 6D 69 74 6F 6E  65 73 20 61 70 61 72 74  rt.  2048 is two semitones apart
0002C0C0  2E 0D 0A 0D 0A 0C 41 70  70 65 6E 64 69 78 20 47  20 2D 20 33 44 20 46 69  6C 65 20 48 65 61 64 65  .Appendix G - 3D File Heade
0002C0E0  72 0D 0A 0D 0A 48 65 72  65 20 69 73 20 61 20 64  65 66 69 6E 69 74 69 6F  6E 20 66 6F 72 20 74 68  rHere is a definition for th
0002C100  65 20 64 61 74 61 20 66  6F 75 6E 64 20 69 6E 20  46 6F 63 61 6C 2D 50 6F  69 6E 74 20 33 44 20 66  e data found in Focal-Point 3D f
0002C120  69 6C 65 73 2E 20 41 6C  6C 20 2E 46 33 44 20 66  69 6C 65 73 20 77 69 6C  6C 20 68 61 76 65 20 74  iles. All .F3D files will have t
0002C140  68 69 73 20 66 6F 72 6D  61 74 2E 20 20 42 6F 74  68 20 43 20 61 6E 64 20  50 41 53 43 41 4C 20 76  his format.  Both C and PASCAL v
0002C160  65 72 73 69 6F 6E 73 20  6F 66 20 74 68 65 20 64  65 66 69 6E 69 74 69 6F  6E 20 61 72 65 20 6C 69  ersions of the definition are li
0002C180  73 74 65 64 20 62 65 6C  6F 77 2E 0D 0A 0D 0A 3D  3D 3D 3D 3D 3D 0D 0A 20  20 43 3A 0D 0A 3D 3D 3D  sted below.======  C:===
0002C1A0  3D 3D 3D 0D 0A 0D 0A 2F  2A 20 42 69 74 20 64 65  66 69 6E 69 74 69 6F 6E  73 20 66 6F 72 20 74 72  ===/* Bit definitions for tr
0002C1C0  61 63 6B 73 20 74 68 61  74 20 61 72 65 20 69 6E  20 61 20 33 44 20 66 69  6C 65 20 2E 2E 2E 20 2A  acks that are in a 3D file ... *
0002C1E0  2F 0D 0A 23 64 65 66 69  6E 65 20 46 52 4F 4E 54  5F 54 52 41 43 4B 20 20  20 20 20 20 30 78 30 31  /#define FRONT_TRACK      0x01
0002C200  0D 0A 23 64 65 66 69 6E  65 20 52 49 47 48 54 5F  54 52 41 43 4B 20 20 20  20 20 20 30 78 30 32 0D  #define RIGHT_TRACK      0x02
0002C220  0A 23 64 65 66 69 6E 65  20 52 45 41 52 5F 54 52  41 43 4B 20 20 20 20 20  20 20 30 78 30 34 0D 0A  #define REAR_TRACK       0x04
0002C240  23 64 65 66 69 6E 65 20  4C 45 46 54 5F 54 52 41  43 4B 20 20 20 20 20 20  20 30 78 30 38 0D 0A 23  #define LEFT_TRACK       0x08#
0002C260  64 65 66 69 6E 65 20 41  42 4F 56 45 5F 54 52 41  43 4B 20 20 20 20 20 20  30 78 31 30 0D 0A 23 64  define ABOVE_TRACK      0x10#d
0002C280  65 66 69 6E 65 20 42 45  4C 4F 57 5F 54 52 41 43  4B 20 20 20 20 20 20 30  78 32 30 0D 0A 0D 0A 23  efine BELOW_TRACK      0x20#
0002C2A0  64 65 66 69 6E 65 20 46  42 4C 4F 43 4B 5F 33 44  20 20 20 20 20 20 20 20  30 78 30 31 20 20 20 20  define FBLOCK_3D        0x01    
0002C2C0  2F 2A 20 46 69 6C 65 20  64 61 74 61 20 69 73 20  62 6C 6F 63 6B 65 64 20  2A 2F 0D 0A 23 64 65 66  /* File data is blocked */#def
0002C2E0  69 6E 65 20 46 31 36 42  49 54 5F 33 44 20 20 20  20 20 20 20 20 30 78 30  32 20 20 20 20 2F 2A 20  ine F16BIT_3D        0x02    /* 
0002C300  31 36 20 62 69 74 20 64  61 74 61 20 2A 2F 0D 0A  23 64 65 66 69 6E 65 20  46 54 57 4F 53 5F 43 4D  16 bit data */#define FTWOS_CM
0002C320  50 5F 33 44 20 20 20 20  20 30 78 30 34 20 20 20  20 2F 2A 20 73 6F 75 6E  64 20 69 73 20 69 6E 20  P_3D     0x04    /* sound is in 
0002C340  74 77 6F 73 20 63 6F 6D  70 6C 65 6D 65 6E 74 20  66 6F 72 6D 20 2A 2F 0D  0A 23 64 65 66 69 6E 65  twos complement form */#define
0002C360  20 46 4C 4F 4F 50 45 44  5F 33 44 20 20 20 20 20  20 20 30 78 30 38 20 20  20 20 2F 2A 20 73 6F 75   FLOOPED_3D       0x08    /* sou
0002C380  6E 64 20 69 73 20 6C 6F  6F 70 65 64 20 2C 20 6E  6F 74 20 6F 6E 65 20 73  68 6F 74 2A 2F 0D 0A 23  nd is looped , not one shot*/#
0002C3A0  64 65 66 69 6E 65 20 46  42 49 5F 4C 4F 4F 50 5F  33 44 20 20 20 20 20 20  30 78 31 30 20 20 20 20  define FBI_LOOP_3D      0x10    
0002C3C0  2F 2A 20 73 6F 75 6E 64  20 69 73 20 62 69 2D 64  69 72 65 63 74 69 6F 6E  61 6C 20 2A 2F 0D 0A 23  /* sound is bi-directional */#
0002C3E0  64 65 66 69 6E 65 20 46  33 44 5F 54 59 50 45 20  20 20 20 20 20 20 20 20  30 78 36 30 20 20 20 20  define F3D_TYPE         0x60    
0002C400  2F 2A 20 54 79 70 65 20  6F 66 20 33 44 20 73 6F  75 6E 64 20 2A 2F 0D 0A  0D 0A 2F 2A 20 74 79 70  /* Type of 3D sound *//* typ
0002C420  65 73 20 28 46 33 44 5F  54 59 50 45 29 20 6F 66  20 33 44 20 73 6F 75 6E  64 20 28 6F 6E 6C 79 20  es (F3D_TYPE) of 3D sound (only 
0002C440  62 69 6E 61 75 72 61 6C  20 63 75 72 72 65 6E 74  6C 79 20 73 75 70 70 6F  72 74 65 64 29 20 2A 2F  binaural currently supported) */
0002C460  0D 0A 23 64 65 66 69 6E  65 20 46 5F 42 49 4E 41  55 52 41 4C 20 20 20 20  20 20 20 30 78 32 30 20  #define F_BINAURAL       0x20 
0002C480  20 20 20 2F 2A 20 42 69  6E 61 75 72 61 6C 20 72  65 70 72 65 73 65 6E 74  61 74 69 6F 6E 20 2A 2F     /* Binaural representation */
0002C4A0  0D 0A 23 64 65 66 69 6E  65 20 46 5F 53 55 52 52  4F 55 4E 44 20 20 20 20  20 20 20 30 78 34 30 20  #define F_SURROUND       0x40 
0002C4C0  20 20 20 2F 2A 20 53 75  72 72 6F 75 6E 64 20 73  6F 75 6E 64 20 28 3F 3F  3F 29 20 2A 2F 0D 0A 23     /* Surround sound (???) */#
0002C4E0  64 65 66 69 6E 65 20 46  5F 51 53 4F 55 4E 44 20  20 20 20 20 20 20 20 20  30 78 36 30 20 20 20 20  define F_QSOUND         0x60    
0002C500  2F 2A 20 51 20 73 6F 75  6E 64 20 28 3F 3F 3F 29  20 2A 2F 0D 0A 0D 0A 2F  2A 20 74 68 65 20 66 6F  /* Q sound (???) *//* the fo
0002C520  6C 6C 6F 77 69 6E 67 20  73 74 72 75 63 74 75 72  65 20 69 73 20 65 78 61  63 74 6C 79 20 32 35 36  llowing structure is exactly 256
0002C540  20 62 79 74 65 73 20 6C  6F 6E 67 20 2E 2E 2E 20  2A 2F 0D 0A 74 79 70 65  64 65 66 20 73 74 72 75   bytes long ... */typedef stru
0002C560  63 74 20 7B 0D 0A 20 20  20 63 68 61 72 20 69 64  5B 31 30 5D 3B 20 20 20  20 20 20 20 20 20 20 20  ct {   char id[10];           
0002C580  20 20 20 20 20 2F 2A 20  33 44 20 46 49 4C 45 20  74 61 67 20 2A 2F 0D 0A  20 20 20 69 6E 74 20 6D       /* 3D FILE tag */   int m
0002C5A0  61 6A 6F 72 3B 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 2F  2A 20 6D 61 6A 6F 72 20  ajor;                  /* major 
0002C5C0  76 65 72 73 69 6F 6E 20  23 20 2A 2F 0D 0A 20 20  20 69 6E 74 20 6D 69 6E  6F 72 3B 20 20 20 20 20  version # */   int minor;     
0002C5E0  20 20 20 20 20 20 20 20  20 20 20 20 20 2F 2A 20  6D 69 6E 6F 72 20 76 65  72 73 69 6F 6E 20 23 20               /* minor version # 
0002C600  2A 2F 0D 0A 20 20 20 63  68 61 72 20 64 65 73 63  72 69 70 74 69 6F 6E 5B  38 30 5D 3B 0D 0A 20 20  */   char description[80];  
0002C620  20 75 6E 73 69 67 6E 65  64 20 69 6E 74 20 74 79  70 65 3B 20 20 20 20 20  20 20 20 20 20 2F 2A 20   unsigned int type;          /* 
0002C640  53 65 65 20 61 62 6F 76  65 20 2E 2E 2E 2E 20 2A  2F 0D 0A 20 20 20 69 6E  74 20 74 72 61 63 6B 73  See above .... */   int tracks
0002C660  3B 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 2F 2A 20 74 72 61  63 6B 73 20 69 6E 63 6C  ;                 /* tracks incl
0002C680  75 64 65 64 20 69 6E 20  74 68 69 73 20 66 69 6C  65 20 2E 2E 2E 20 2A 2F  0D 0A 20 20 20 69 6E 74  uded in this file ... */   int
0002C6A0  20 72 65 73 65 72 76 65  31 5B 32 34 5D 3B 20 20  20 20 20 20 20 20 20 20  20 2F 2A 20 66 6F 72 20   reserve1[24];           /* for 
0002C6C0  65 78 70 61 6E 73 69 6F  6E 20 2A 2F 0D 0A 20 20  20 69 6E 74 20 6D 61 78  76 6F 6C 3B 20 20 20 20  expansion */   int maxvol;    
0002C6E0  20 20 20 20 20 20 20 20  20 20 20 20 20 2F 2A 20  76 6F 6C 75 6D 65 20 63  61 6E 20 72 61 6E 67 65               /* volume can range
0002C700  20 66 72 6F 6D 20 30 20  74 6F 20 6D 61 78 76 6F  6C 20 2A 2F 0D 0A 20 20  20 69 6E 74 20 72 65 73   from 0 to maxvol */   int res
0002C720  65 72 76 65 32 5B 31 30  5D 3B 20 20 20 20 20 20  20 20 20 20 20 2F 2A 20  66 6F 72 20 65 78 70 61  erve2[10];           /* for expa
0002C740  6E 73 69 6F 6E 20 2A 2F  0D 0A 20 20 20 75 6E 73  69 67 6E 65 64 20 6C 6F  6E 67 20 62 6C 6F 63 6B  nsion */   unsigned long block
0002C760  73 69 7A 65 3B 20 20 20  20 2F 2A 20 23 20 6F 66  20 62 79 74 65 73 20 69  6E 20 62 6C 6F 63 6B 20  size;    /* # of bytes in block 
0002C780  64 61 74 61 20 2A 2F 0D  0A 20 20 20 75 6E 73 69  67 6E 65 64 20 6C 6F 6E  67 20 6C 6F 6F 70 5F 6F  data */   unsigned long loop_o
0002C7A0  66 66 73 65 74 3B 20 20  2F 2A 20 62 79 74 65 20  6F 66 66 73 65 74 20 74  6F 20 77 68 65 72 65 20  ffset;  /* byte offset to where 
0002C7C0  6C 6F 6F 70 20 62 65 67  69 6E 73 20 2A 2F 0D 0A  20 20 20 75 6E 73 69 67  6E 65 64 20 6C 6F 6E 67  loop begins */   unsigned long
0002C7E0  20 72 65 73 65 72 76 65  33 5B 39 5D 3B 20 20 2F  2A 20 66 6F 72 20 65 78  70 61 6E 73 69 6F 6E 20   reserve3[9];  /* for expansion 
0002C800  2A 2F 0D 0A 20 20 20 75  6E 73 69 67 6E 65 64 20  6C 6F 6E 67 20 66 72 65  71 75 65 6E 63 79 3B 20  */   unsigned long frequency; 
0002C820  20 20 20 2F 2A 20 69 6E  69 74 69 61 6C 20 70 6C  61 79 62 61 63 6B 20 66  72 65 71 75 65 6E 63 79     /* initial playback frequency
0002C840  20 2A 2F 0D 0A 20 20 20  75 6E 73 69 67 6E 65 64  20 6C 6F 6E 67 20 72 65  73 65 72 76 65 34 5B 31   */   unsigned long reserve4[1
0002C860  30 5D 3B 20 2F 2A 20 66  6F 72 20 65 78 70 61 6E  73 69 6F 6E 20 2A 2F 0D  0A 7D 20 46 49 4C 45 48  0]; /* for expansion */} FILEH
0002C880  44 52 5F 33 44 3B 0D 0A  0D 0A 0D 0A 2E 2E 2E 65  6E 64 20 6F 66 20 74 68  65 20 43 20 73 65 63 74  DR_3D;...end of the C sect
0002C8A0  69 6F 6E 2E 20 20 50 6C  65 61 73 65 20 73 65 65  20 74 68 65 20 6E 65 78  74 20 70 61 67 65 20 66  ion.  Please see the next page f
0002C8C0  6F 72 20 74 68 65 20 50  41 53 43 41 4C 20 73 65  63 74 69 6F 6E 2E 2E 2E  0D 0A 0C 3D 3D 3D 3D 3D  or the PASCAL section...=====
0002C8E0  3D 3D 3D 0D 0A 20 50 41  53 43 41 4C 0D 0A 3D 3D  3D 3D 3D 3D 3D 3D 0D 0A  0D 0A 43 4F 4E 53 54 0D  === PASCAL========CONST
0002C900  0A 20 20 7B 20 42 69 74  20 64 65 66 69 6E 69 74  69 6F 6E 73 20 46 4F 52  20 74 72 61 63 6B 73 20    { Bit definitions FOR tracks 
0002C920  74 68 61 74 20 61 72 65  20 69 6E 20 61 20 33 44  20 46 49 4C 45 20 2E 2E  2E 20 7D 0D 0A 20 20 46  that are in a 3D FILE ... }  F
0002C940  52 4F 4E 54 5F 54 52 41  43 4B 20 20 3D 20 24 30  31 3B 0D 0A 20 20 52 49  47 48 54 5F 54 52 41 43  RONT_TRACK  = $01;  RIGHT_TRAC
0002C960  4B 20 20 3D 20 24 30 32  3B 0D 0A 20 20 52 45 41  52 5F 54 52 41 43 4B 20  20 20 3D 20 24 30 34 3B  K  = $02;  REAR_TRACK   = $04;
0002C980  0D 0A 20 20 4C 45 46 54  5F 54 52 41 43 4B 20 20  20 3D 20 24 30 38 3B 0D  0A 20 20 41 42 4F 56 45    LEFT_TRACK   = $08;  ABOVE
0002C9A0  5F 54 52 41 43 4B 20 20  3D 20 24 31 30 3B 0D 0A  20 20 42 45 4C 4F 57 5F  54 52 41 43 4B 20 20 3D  _TRACK  = $10;  BELOW_TRACK  =
0002C9C0  20 24 32 30 3B 0D 0A 0D  0A 20 20 46 42 4C 4F 43  4B 5F 33 44 20 20 20 20  3D 20 24 30 31 3B 20 7B   $20;  FBLOCK_3D    = $01; {
0002C9E0  20 46 49 4C 45 20 64 61  74 61 20 69 73 20 62 6C  6F 63 6B 65 64 2C 20 4E  4F 54 20 69 6E 74 65 72   FILE data is blocked, NOT inter
0002CA00  6C 65 61 76 65 64 20 7D  0D 0A 20 20 46 31 36 42  49 54 5F 33 44 20 20 20  20 3D 20 24 30 32 3B 20  leaved }  F16BIT_3D    = $02; 
0002CA20  7B 20 31 36 20 62 69 74  20 64 61 74 61 20 7D 0D  0A 20 20 46 54 57 4F 53  5F 43 4D 50 5F 33 44 20  { 16 bit data }  FTWOS_CMP_3D 
0002CA40  3D 20 24 30 34 3B 20 7B  20 73 6F 75 6E 64 20 69  73 20 69 6E 20 74 77 6F  73 20 63 6F 6D 70 6C 65  = $04; { sound is in twos comple
0002CA60  6D 65 6E 74 20 66 6F 72  6D 20 7D 0D 0A 20 20 46  4C 4F 4F 50 45 44 5F 33  44 20 20 20 3D 20 24 30  ment form }  FLOOPED_3D   = $0
0002CA80  38 3B 20 7B 20 73 6F 75  6E 64 20 69 73 20 6C 6F  6F 70 65 64 20 2C 20 4E  4F 54 20 6F 6E 65 20 73  8; { sound is looped , NOT one s
0002CAA0  68 6F 74 20 7D 0D 0A 20  20 46 42 49 5F 4C 4F 4F  50 5F 33 44 20 20 3D 20  24 31 30 3B 20 7B 20 73  hot }  FBI_LOOP_3D  = $10; { s
0002CAC0  6F 75 6E 64 20 69 73 20  62 69 2D 64 69 72 65 63  74 69 6F 6E 61 6C 20 7D  0D 0A 20 20 46 33 44 5F  ound is bi-directional }  F3D_
0002CAE0  54 59 50 45 20 20 20 20  20 3D 20 24 36 30 3B 20  7B 20 54 59 50 45 20 4F  46 20 33 44 20 73 6F 75  TYPE     = $60; { TYPE OF 3D sou
0002CB00  6E 64 20 7D 0D 0A 0D 0A  20 20 7B 20 74 79 70 65  73 20 28 46 33 44 5F 54  59 50 45 29 20 4F 46 20  nd }  { types (F3D_TYPE) OF 
0002CB20  33 44 20 73 6F 75 6E 64  20 28 6F 6E 6C 79 20 62  69 6E 61 75 72 61 6C 20  63 75 72 72 65 6E 74 6C  3D sound (only binaural currentl
0002CB40  79 20 73 75 70 70 6F 72  74 65 64 29 20 7D 0D 0A  20 20 46 5F 42 49 4E 41  55 52 41 4C 20 20 20 3D  y supported) }  F_BINAURAL   =
0002CB60  20 24 32 30 3B 20 7B 20  42 69 6E 61 75 72 61 6C  20 72 65 70 72 65 73 65  6E 74 61 74 69 6F 6E 20   $20; { Binaural representation 
0002CB80  7D 0D 0A 20 20 46 5F 53  55 52 52 4F 55 4E 44 20  20 20 3D 20 24 34 30 3B  20 7B 20 53 75 72 72 6F  }  F_SURROUND   = $40; { Surro
0002CBA0  75 6E 64 20 73 6F 75 6E  64 20 28 3F 3F 3F 29 20  7D 0D 0A 20 20 46 5F 51  53 4F 55 4E 44 20 20 20  und sound (???) }  F_QSOUND   
0002CBC0  20 20 3D 20 24 36 30 3B  20 7B 20 51 20 73 6F 75  6E 64 20 28 3F 3F 3F 29  20 7D 0D 0A 0D 0A 54 59    = $60; { Q sound (???) }TY
0002CBE0  50 45 0D 0A 20 20 46 49  4C 45 48 44 52 5F 33 44  20 3D 20 52 45 43 4F 52  44 0D 0A 20 20 20 20 49  PE  FILEHDR_3D = RECORD    I
0002CC00  44 20 20 20 20 20 20 20  20 20 20 3A 20 41 52 52  41 59 5B 30 2E 2E 39 5D  20 4F 46 20 43 48 41 52  D          : ARRAY[0..9] OF CHAR
0002CC20  3B 20 20 20 20 20 7B 20  33 44 20 46 49 4C 45 20  74 61 67 20 7D 0D 0A 20  20 20 20 4D 61 6A 6F 72  ;     { 3D FILE tag }    Major
0002CC40  20 20 20 20 20 20 20 3A  20 49 4E 54 45 47 45 52  3B 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20         : INTEGER;               
0002CC60  20 20 7B 20 4D 61 6A 6F  72 20 76 65 72 73 69 6F  6E 20 23 20 7D 0D 0A 20  20 20 20 4D 69 6E 6F 72    { Major version # }    Minor
0002CC80  20 20 20 20 20 20 20 3A  20 49 4E 54 45 47 45 52  3B 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20         : INTEGER;               
0002CCA0  20 20 7B 20 4D 69 6E 6F  72 20 76 65 72 73 69 6F  6E 20 23 20 7D 0D 0A 20  20 20 20 44 65 73 63 72    { Minor version # }    Descr
0002CCC0  69 70 74 69 6F 6E 20 3A  20 41 52 52 41 59 5B 30  2E 2E 37 39 5D 20 4F 46  20 43 48 41 52 3B 0D 0A  iption : ARRAY[0..79] OF CHAR;
0002CCE0  20 20 20 20 53 54 79 70  65 20 20 20 20 20 20 20  3A 20 57 4F 52 44 3B 20  20 20 20 20 20 20 20 20      SType       : WORD;         
0002CD00  20 20 20 20 20 20 20 20  20 20 20 7B 20 53 65 65  20 61 62 6F 76 65 20 7D  0D 0A 20 20 20 20 54 72             { See above }    Tr
0002CD20  61 63 6B 73 20 20 20 20  20 20 3A 20 49 4E 54 45  47 45 52 3B 20 20 20 20  20 20 20 20 20 20 20 20  acks      : INTEGER;            
0002CD40  20 20 20 20 20 7B 20 54  72 61 63 6B 73 20 69 6E  63 6C 75 64 65 64 20 7D  0D 0A 20 20 20 20 52 65       { Tracks included }    Re
0002CD60  73 65 72 76 65 31 20 20  20 20 3A 20 41 52 52 41  59 5B 30 2E 2E 32 33 5D  20 4F 46 20 49 4E 54 45  serve1    : ARRAY[0..23] OF INTE
0002CD80  47 45 52 3B 20 7B 20 66  6F 72 20 65 78 70 61 6E  73 69 6F 6E 20 7D 0D 0A  20 20 20 20 4D 61 78 56  GER; { for expansion }    MaxV
0002CDA0  6F 6C 20 20 20 20 20 20  3A 20 49 4E 54 45 47 45  52 3B 20 20 20 20 20 20  20 20 20 20 20 20 20 20  ol      : INTEGER;              
0002CDC0  20 20 20 7B 20 76 6F 6C  75 6D 65 20 72 61 6E 67  65 20 30 2D 6D 61 78 76  6F 6C 20 7D 0D 0A 20 20     { volume range 0-maxvol }  
0002CDE0  20 20 52 65 73 65 72 76  65 32 20 20 20 20 3A 20  41 52 52 41 59 5B 30 2E  2E 39 5D 20 4F 46 20 49    Reserve2    : ARRAY[0..9] OF I
0002CE00  4E 54 45 47 45 52 3B 20  20 7B 20 66 6F 72 20 65  78 70 61 6E 73 69 6F 6E  20 7D 0D 0A 20 20 20 20  NTEGER;  { for expansion }    
0002CE20  42 6C 6F 63 6B 53 69 7A  65 20 20 20 3A 20 4C 4F  4E 47 49 4E 54 3B 20 20  20 20 20 20 20 20 20 20  BlockSize   : LONGINT;          
0002CE40  20 20 20 20 20 20 20 7B  20 23 20 6F 66 20 62 79  74 65 73 20 69 6E 20 62  6C 6F 63 6B 20 64 61 74         { # of bytes in block dat
0002CE60  61 20 7D 0D 0A 20 20 20  20 4C 6F 6F 70 5F 4F 66  66 73 65 74 20 3A 20 4C  4F 4E 47 49 4E 54 3B 20  a }    Loop_Offset : LONGINT; 
0002CE80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  7B 20 62 79 74 65 20 6F  66 66 73 65 74 20 6F 66                  { byte offset of
0002CEA0  20 6C 6F 6F 70 20 62 65  67 69 6E 7D 0D 0A 20 20  20 20 52 65 73 65 72 76  65 33 20 20 20 20 3A 20   loop begin}    Reserve3    : 
0002CEC0  41 52 52 41 59 5B 30 2E  2E 38 5D 20 4F 46 20 4C  4F 4E 47 49 4E 54 3B 20  20 7B 20 66 6F 72 20 65  ARRAY[0..8] OF LONGINT;  { for e
0002CEE0  78 70 61 6E 73 69 6F 6E  20 7D 0D 0A 20 20 20 20  46 72 65 71 75 65 6E 63  79 20 20 20 3A 20 4C 4F  xpansion }    Frequency   : LO
0002CF00  4E 47 49 4E 54 3B 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 7B  20 70 6C 61 79 62 61 63  NGINT;                 { playbac
0002CF20  6B 20 66 72 65 71 75 65  6E 63 79 20 7D 0D 0A 20  20 20 20 52 65 73 65 72  76 65 34 20 20 20 20 3A  k frequency }    Reserve4    :
0002CF40  20 41 52 52 41 59 5B 30  2E 2E 39 5D 20 4F 46 20  4C 4F 4E 47 49 4E 54 3B  20 20 7B 20 66 6F 72 20   ARRAY[0..9] OF LONGINT;  { for 
0002CF60  65 78 70 61 6E 73 69 6F  6E 20 7D 0D 0A 20 20 20  45 4E 44 3B 0D 0A 20 20  7B 20 74 68 65 20 66 69  expansion }   END;  { the fi
0002CF80  6C 65 20 68 65 61 64 65  72 20 69 73 20 65 78 61  63 74 6C 79 20 32 35 36  20 62 79 74 65 73 20 6C  le header is exactly 256 bytes l
0002CFA0  6F 6E 67 20 7D 0D 0A 0D  0A 0D 0A 55 6C 74 72 61  73 6F 75 6E 64 20 53 6F  66 74 77 61 72 65 20 44  ong }Ultrasound Software D
0002CFC0  65 76 65 6C 6F 70 6D 65  6E 74 20 4B 69 74 20 28  53 44 4B 29 09 56 65 72  73 69 6F 6E 20 32 2E 31  evelopment Kit (SDK)Version 2.1
0002CFE0  30 0D 0A 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  0_____________________________
0002D000  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ________________________________
0002D020  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 0D 0A  0D 0A 0D 0A 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  __________________________
0002D040  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ________________________________
0002D060  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 0D  _______________________________
0002D080  0A 09 09 13 50 41 47 45  14 31 31 30 15 0D 0A 0D  0A 0D 0A 0D 0A 13 88 03  00 7D 01 80 0A 8D 00 00  PAGE110§ê.}Çì..
0002D0A0  8E A0 05 73 08 00 74 08  00 0D 0A 44 3B 0D 0A 0D  0A 0D 0A 46 69 6C 65 20  48 65 61 64 65 72 0D 0A  Äás.t.D;File Header
0002D0C0  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  5F 5F 5F 5F 5F 5F 5F 5F  ________________________________
0002D0E0  5F 0D 0A 0D 0A 27 48 65  61 64 65 72 27 0D 0A 09  54 68 65 20 68 65 61 64  65 72 20 66 69 65 6C 64  _'Header'The header field
0002D100  20 73 68 6F 75 6C 64 20  63 6F 6E 74 61 69 6E 20  74 68 65 20 74 65 78 74  20 22 47 46 31 50 41 54   should contain the text "GF1PAT
0002D120  43 48 31 31 30 2E 22 20  20 54 68 65 20 66 69 72  73 74 20 38 20 62 79 74  65 73 20 77 69 6C 6C 20  CH110."  The first 8 bytes will 
0002D140  61 6C 77 61 79 73 20 62  65 20 47 46 31 50 41 54  43 48 2E 20 20 54 68 65  20 6E 65 78 74 20 74 68  always be GF1PATCH.  The next th
0002D160  72 65 65 20 62 79 74 65  73 20 61 72 65 20 74 68  65 20 76 65 72 73 69 6F  6E 20 6E 75 6D 62 65 72  ree bytes are the version number
0002D180  20 6F 66 20 74 68 65 20  70 61 74 63 68 20 66 6F  72 6D 61 74 2E 20 20 41  73 20 66 69 65 6C 64 73   of the patch format.  As fields
0002D1A0  20 61 72 65 20 61 64 64  65 64 20 74 6F 20 74 68  65 20 70 61 74 63 68 2C  20 74 68 65 20 6E 75 6D   are added to the patch, the num
0002D1C0  62 65 72 20 77 69 6C 6C  20 62 65 20 69 6E 63 72  65 6D 65 6E 74 65 64 2E  20 20 41 6C 6C 20 6F 66  ber will be incremented.  All of
0002D1E0  20 74 68 65 20 55 6C 74  72 61 53 6F 75 6E 64 20  70 61 74 63 68 65 73 20  61 72 65 20 63 75 72 72   the UltraSound patches are curr
0002D200  80 01 00 00 0B 6A 00 00  DD 6B 00 00 E4 76 00 00  92 77 00 00 59 78 00 00  C7 79 00 00 1B 7E 00 00  Ç..j..k..Σv..Æw..Yx..y..~..
0002D220  F0 81 00 00 30 85 00 00  76 89 00 00 09 95 00 00  A2 98 00 00 FD 9A 00 00  AA 9B 00 00 6C 9D 00 00  ü..0à..vë..ò..óÿ..²Ü..¬¢..l¥..
0002D240  19 9E 00 00 95 56 01 00  1F 33 02 00 70 41 02 00  F6 6E 02 00 09 82 02 00  75 82 02 00 87 84 02 00  ..òV.3.pA.÷n.é.ué.çä.
0002D260  23 85 02 00 B3 A0 02 00  C5 C0 02 00 AB CF 02 00  32 D0 02 00 34 D0 02 00  83 D0 02 00 84 D0 02 00  #à.á..½.2.4.â.ä.
0002D280  88 D0 02 00 89 D0 02 00  8C D0 02 00 8D D0 02 00  8F D0 02 00 93 D0 02 00  95 D0 02 00 A9 D0 02 00  ê.ë.î.ì.Å.ô.ò..
0002D2A0  AB D0 02 00 FC 00 FC 00  FC 00 FC 00 FC 00 FC 00  FC 00 FC 00 FC 00 FC 00  FC 00 FC 00 FC 00 FC FC  ½..............
0002D2C0  00 FC F9 FC F9 FC F9 FC  00 FC F1 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ..±.....................
0002D2E0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
0002D300  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
0002D320  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
0002D340  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
0002D360  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
0002D380  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
0002D3A0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
0002D3C0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
0002D3E0  00 00 0E 00 02 00 00 00  00 14 00 00 00 00 00 00  04 00 05 00 02 02 00 04  05 00 00 02 00 04 00 28  ....................(
0002D400  80 01 00 00 A1 01 00 00  A3 01 00 00 B5 01 00 00  B7 01 00 00 34 03 00 00  36 03 00 00 88 04 00 00  Ç..í..ú......4..6..ê..
0002D420  8A 04 00 00 12 05 00 00  14 05 00 00 D0 07 00 00  D2 07 00 00 D4 07 00 00  D6 07 00 00 F6 07 00 00  è..............÷..
0002D440  F8 07 00 00 20 08 00 00  55 08 00 00 71 08 00 00  A1 08 00 00 CC 08 00 00  FC 08 00 00 38 09 00 00  °.. ..U..q..í......8..
0002D460  6C 09 00 00 C5 09 00 00  EF 09 00 00 16 0A 00 00  5A 0A 00 00 94 0A 00 00  CD 0A 00 00 E2 0A 00 00  l........Z..ö....Γ..
0002D480  FF 0A 00 00 4A 0B 00 00  4C 0B 00 00 78 0B 00 00  7A 0B 00 00 6B 0D 00 00  6D 0D 00 00 A8 0D 00 00   ..J..L..x..z..k..m..¿..
0002D4A0  AA 0D 00 00 65 0E 00 00  E9 0E 00 00 82 0F 00 00  FB 0F 00 00 5D 10 00 00  FE 10 00 00 B8 11 00 00  ¬..e..Θ..é....]......
0002D4C0  99 12 00 00 9B 12 00 00  9D 12 00 00 9F 12 00 00  C9 12 00 00 CB 12 00 00  63 15 00 00 65 15 00 00  Ö..¢..¥..ƒ......c§..e§..
0002D4E0  FA F5 EF EF E9 EF E3 EF  DD EF D7 EF EF EF EF EF  CE CE CE CE CE CE CE CE  C5 CE CE CE CE CE CE CE  ·Θπ
0002D500  CE EF BF EF B9 EF EF B0  A7 9E A7 9E 9E A7 A7 95  EF EF EF EF EF D7 EF 00  00 00 00 00 00 00 00 00  ººººò.........
0002D520  00 00 00 00 00 00 00 00  00 00 08 00 00 04 30 2A  F0 00 05 03 11 1C 02 13  E4 FD 00 00 08 00 00 02  ............0*.Σ²....
0002D540  30 2A F0 00 05 03 11 1C  02 13 E4 FD 00 00 08 00  00 03 30 2A F0 00 05 03  11 1C 02 13 E4 FD 00 00  0*.Σ²....0*.Σ²..
0002D560  08 00 00 01 30 2A F0 00  05 03 11 68 01 13 98 FE  00 00 05 00 00 07 30 2A  F0 00 05 03 00 00 05 00  ..0*.hÿ....0*....
0002D580  00 00 00 00 00 00 05 03  00 00 08 00 00 02 30 2A  F0 00 05 03 11 1C 01 13  E4 FE 00 00 08 00 00 01  ..........0*.Σ....
0002D5A0  30 2A F0 00 05 03 11 1C  01 13 E4 FE 00 00 05 00  00 0A 30 2A F0 00 05 03  00 00 05 00 00 02 30 2A  0*.Σ....0*.....0*
0002D5C0  F0 00 05 03 00 00 05 00  00 05 30 2A F0 00 05 03  00 00 05 00 00 06 30 2A  F0 00 05 03 00 00 05 00  .....0*.....0*....
0002D5E0  00 01 30 2A F0 00 05 03  00 00 04 00 00 01 30 2A  F0 00 00 00 05 00 00 01  30 2A F0 00 05 01 00 37  .0*.....0*.....0*..7
0002D600  65 15 00 00 AE 15 00 00  B0 15 00 00 62 16 00 00  64 16 00 00 9D 16 00 00  9F 16 00 00 85 17 00 00  e§..«§..§..b..d..¥..ƒ..à..
0002D620  87 17 00 00 8A 1A 00 00  8C 1A 00 00 BF 1A 00 00  C1 1A 00 00 E0 1A 00 00  F3 1A 00 00 06 1B 00 00  ç..è..î......α......
0002D640  19 1B 00 00 2C 1B 00 00  3F 1B 00 00 52 1B 00 00  65 1B 00 00 78 1B 00 00  8B 1B 00 00 9E 1B 00 00  ..,..?..R..e..x..ï....
0002D660  B1 1B 00 00 C4 1B 00 00  D7 1B 00 00 EA 1B 00 00  FD 1B 00 00 10 1C 00 00  23 1C 00 00 36 1C 00 00  ......Ω..²....#..6..
0002D680  49 1C 00 00 4B 1C 00 00  EC 1C 00 00 EE 1C 00 00  0F 1D 00 00 2D 1D 00 00  6A 1D 00 00 6C 1D 00 00  I..K....ε....-..j..l..
0002D6A0  A7 1D 00 00 A9 1D 00 00  E9 1E 00 00 EB 1E 00 00  EF 1E 00 00 33 1F 00 00  45 1F 00 00 47 1F 00 00  º....Θ..δ....3..E..G..
0002D6C0  50 1F 00 00 91 1F 00 00  A5 1F 00 00 A7 1F 00 00  37 20 00 00 39 20 00 00  65 25 00 00 67 25 00 00  P..æ..Ñ..º..7 ..9 ..e%..g%..
0002D6E0  31 26 00 00 33 26 00 00  D5 27 00 00 D7 27 00 00  ED 27 00 00 EF 27 00 00  7A 2B 00 00 7C 2B 00 00  1&..3&..'..'..φ'..'..z+..|+..
0002D700  A7 2B 00 00 A9 2B 00 00  BA 2B 00 00 C8 2B 00 00  D5 2B 00 00 F4 F4 E8 F4  F4 E2 DC E2 D6 E2 E2 E2  º+..+..+..+..+..ΦΓΓΓΓΓ
0002D720  D0 D0 D0 D0 D0 D0 D0 D0  D0 D0 D0 D0 D0 D0 D0 D0  D0 D0 D0 D0 E2 CA E2 D0  D0 C4 E2 D0 E2 BE E2 E2  ΓΓΓΓΓΓ
0002D740  E2 E2 E2 E2 E2 E2 E2 CA  E2 B8 E2 CA E2 B2 E2 C4  E2 AC E2 E2 E2 D0 D0 D0  05 00 00 0D 30 2A F0 00  ΓΓΓΓΓΓΓΓΓΓΓΓ¼ΓΓΓ..0*.
0002D760  05 03 00 00 05 00 00 06  30 2A F0 00 05 03 00 00  05 00 00 12 30 2A F0 00  05 03 00 00 05 00 00 05  ....0*.....0*.....
0002D780  30 2A F0 00 05 03 00 00  05 00 00 00 00 00 00 00  05 03 00 00 05 00 00 03  30 2A F0 00 05 03 00 00  0*..............0*...
0002D7A0  05 00 00 01 30 2A F0 00  05 01 00 00 05 00 00 0B  30 2A F0 00 05 03 00 00  05 00 00 04 30 2A F0 00  ..0*.....0*.....0*.
0002D7C0  05 03 00 00 05 00 00 01  30 2A F0 00 05 03 00 00  0B 00 00 03 30 2A F0 00  05 03 11 1C 01 13 E4 FE  ....0*.....0*.Σ
0002D7E0  0F 05 00 01 00 00 00 00  0B 00 00 01 30 2A F0 00  05 03 11 1C 01 13 E4 FE  0F 05 00 01 00 00 00 44  .......0*.Σ....D
0002D800  D5 2B 00 00 E2 2B 00 00  EE 2B 00 00 F0 2B 00 00  AF 2C 00 00 B1 2C 00 00  B3 2C 00 00 B5 2C 00 00  +..Γ+..ε+..+..»,..,..,..,..
0002D820  CD 2C 00 00 CF 2C 00 00  53 2F 00 00 55 2F 00 00  96 30 00 00 98 30 00 00  9A 30 00 00 BD 30 00 00  ,..,..S/..U/..û0..ÿ0..Ü0..0..
0002D840  BF 30 00 00 D2 30 00 00  D4 30 00 00 92 31 00 00  94 31 00 00 D4 31 00 00  10 32 00 00 4F 32 00 00  0..0..0..Æ1..ö1..1..2..O2..
0002D860  8C 32 00 00 8E 32 00 00  A0 32 00 00 DD 32 00 00  1A 33 00 00 57 33 00 00  94 33 00 00 AB 33 00 00  î2..Ä2..á2..2..3..W3..ö3..½3..
0002D880  E8 33 00 00 25 34 00 00  27 34 00 00 3A 34 00 00  77 34 00 00 B4 34 00 00  F1 34 00 00 2E 35 00 00  Φ3..%4..'4..:4..w4..4..±4...5..
0002D8A0  6B 35 00 00 A8 35 00 00  E5 35 00 00 22 36 00 00  65 36 00 00 A8 36 00 00  B6 36 00 00 F3 36 00 00  k5..¿5..σ5.."6..e6..¿6..6..6..
0002D8C0  30 37 00 00 4A 37 00 00  87 37 00 00 A1 37 00 00  E9 37 00 00 31 38 00 00  33 38 00 00 3B 3A 00 00  07..J7..ç7..í7..Θ7..18..38..;:..
0002D8E0  3D 3A 00 00 5C 3A 00 00  5E 3A 00 00 CB 3A 00 00  CD 3A 00 00 F1 3A 00 00  15 3B 00 00 39 3B 00 00  =:..\:..^:..:..:..±:..§;..9;..
0002D900  5B 3B 00 00 9D 3B 00 00  C7 3B 00 00 F6 3B 00 00  25 3C 00 00 54 3C 00 00  8F 3C 00 00 B9 3C 00 00  [;..¥;..;..÷;..%<..T<..Å<..<..
0002D920  F7 3C 00 00 F9 3C 00 00  9B 3D 00 00 9D 3D 00 00  9F 3D 00 00 A1 3D 00 00  BE 3D 00 00 FA FA F4 EE  <..<..¢=..¥=..ƒ=..í=..=..··ε
0002D940  F4 F4 F4 F4 F4 E8 F4 E2  F4 F4 DC D7 F4 F4 EE F4  F4 F4 F4 F4 F4 F4 F4 F4  F4 F4 F4 F4 F4 F4 F4 F4  ΦΓε
0002D960  F4 F4 F4 F4 F4 F4 F4 F4  F4 F4 F4 F4 F4 F4 F4 F4  F4 F4 D1 F4 CB F4 C5 F4  F4 F4 F4 F4 F4 F4 F4 F4  
0002D980  F4 F4 F4 F4 F4 EE F4 F4  F4 F4 05 00 00 02 30 2A  F0 00 05 03 00 00 05 00  00 00 00 00 00 00 05 03  ε..0*..........
0002D9A0  00 00 05 00 00 08 30 2A  F0 00 05 03 00 00 04 00  00 01 30 2A F0 00 00 00  05 00 00 00 00 00 00 00  ....0*.....0*..........
0002D9C0  05 01 00 00 05 00 00 05  30 2A F0 00 05 03 00 00  05 00 00 09 30 2A F0 00  05 03 00 00 05 00 00 03  ....0*.....0*.....
0002D9E0  30 2A F0 00 05 03 00 00  05 00 00 01 30 2A F0 00  05 03 00 00 05 00 00 01  30 2A F0 00 05 01 00 4E  0*.....0*.....0*..N
0002DA00  BE 3D 00 00 C0 3D 00 00  2C 3E 00 00 2E 3E 00 00  52 3E 00 00 76 3E 00 00  9A 3E 00 00 BC 3E 00 00  =..=..,>...>..R>..v>..Ü>..>..
0002DA20  F4 3E 00 00 2E 3F 00 00  5D 3F 00 00 8C 3F 00 00  C0 3F 00 00 F4 3F 00 00  23 40 00 00 5B 40 00 00  >...?..]?..î?..?..?..#@..[@..
0002DA40  5D 40 00 00 9D 40 00 00  9F 40 00 00 A1 40 00 00  A3 40 00 00 BE 40 00 00  C0 40 00 00 08 41 00 00  ]@..¥@..ƒ@..í@..ú@..@..@..A..
0002DA60  0A 41 00 00 0C 41 00 00  27 41 00 00 29 41 00 00  27 43 00 00 29 43 00 00  2B 43 00 00 2D 43 00 00  A..A..'A..)A..'C..)C..+C..-C..
0002DA80  49 43 00 00 62 43 00 00  64 43 00 00 A2 43 00 00  A4 43 00 00 D4 43 00 00  D6 43 00 00 0B 44 00 00  IC..bC..dC..óC..ñC..C..C..D..
0002DAA0  41 44 00 00 7C 44 00 00  B8 44 00 00 EA 44 00 00  1C 45 00 00 4E 45 00 00  85 45 00 00 BA 45 00 00  AD..|D..D..ΩD..E..NE..àE..E..
0002DAC0  F0 45 00 00 1A 46 00 00  1C 46 00 00 1E 46 00 00  4A 46 00 00 4C 46 00 00  70 46 00 00 94 46 00 00  E..F..F..F..JF..LF..pF..öF..
0002DAE0  B8 46 00 00 DA 46 00 00  12 47 00 00 4F 47 00 00  87 47 00 00 AF 47 00 00  E8 47 00 00 1D 48 00 00  F..F..G..OG..çG..»G..ΦG..H..
0002DB00  57 48 00 00 9C 48 00 00  DA 48 00 00 DC 48 00 00  A5 49 00 00 09 4A 00 00  40 4A 00 00 66 4A 00 00  WH..£H..H..H..ÑI..J..@J..fJ..
0002DB20  96 4A 00 00 D7 4A 00 00  EC 4A 00 00 01 4B 00 00  16 4B 00 00 2B 4B 00 00  58 4B 00 00 88 4B 00 00  ûJ..J..J..K..K..+K..XK..êK..
0002DB40  AB 4B 00 00 CF 4B 00 00  FA F4 FA FA FA FA FA FA  FA FA FA FA FA FA FA FA  FA FA FA FA FA FA FA FA  ½K..K..·······················
0002DB60  FA EE FA E8 FA FA FA FA  FA FA FA FA FA FA FA FA  FA FA FA FA FA FA FA FA  FA FA FA EE FA FA FA FA  ·ε·Φ·······················ε····
0002DB80  FA FA FA FA FA FA FA FA  FA FA FA DF D6 CD CD CD  CD CD CD CD CD CD CD CD  CD 00 08 00 00 01 30 2A  ···········...0*
0002DBA0  F0 00 05 03 11 8A 05 13  76 FA 00 00 08 00 00 02  30 2A F0 00 05 03 11 8A  05 13 76 FA 00 00 08 00  .èv·....0*.èv·...
0002DBC0  00 04 30 2A F0 00 05 03  11 8A 05 13 76 FA 00 00  05 00 00 07 30 2A F0 00  05 03 00 00 05 00 00 00  .0*.èv·....0*......
0002DBE0  00 00 00 00 05 03 00 00  05 00 00 02 30 2A F0 00  05 03 00 00 05 00 00 01  30 2A F0 00 05 03 00 51  ........0*.....0*..Q
0002DC00  CF 4B 00 00 04 4C 00 00  47 4C 00 00 82 4C 00 00  9B 4C 00 00 9D 4C 00 00  9F 4C 00 00 A1 4C 00 00  K..L..GL..éL..¢L..¥L..ƒL..íL..
0002DC20  C4 4C 00 00 C6 4C 00 00  E9 4C 00 00 EB 4C 00 00  D3 4E 00 00 F7 4E 00 00  F9 4E 00 00 FB 4F 00 00  L..L..ΘL..δL..N..N..N..O..
0002DC40  FD 4F 00 00 FF 4F 00 00  01 50 00 00 20 50 00 00  22 50 00 00 47 50 00 00  6C 50 00 00 91 50 00 00  ²O.. O..P.. P.."P..GP..lP..æP..
0002DC60  B4 50 00 00 EF 50 00 00  2A 51 00 00 64 51 00 00  9E 51 00 00 D9 51 00 00  14 52 00 00 4F 52 00 00  P..P..*Q..dQ..Q..Q..R..OR..
0002DC80  8A 52 00 00 8C 52 00 00  8E 52 00 00 90 52 00 00  BE 52 00 00 C0 52 00 00  A1 53 00 00 A3 53 00 00  èR..îR..ÄR..ÉR..R..R..íS..úS..
0002DCA0  A5 53 00 00 A7 53 00 00  CB 53 00 00 CD 53 00 00  F9 53 00 00 18 54 00 00  1A 54 00 00 1C 54 00 00  ÑS..ºS..S..S..S..T..T..T..
0002DCC0  48 54 00 00 4A 54 00 00  6F 54 00 00 94 54 00 00  B9 54 00 00 DC 54 00 00  12 55 00 00 51 55 00 00  HT..JT..oT..öT..T..T..U..QU..
0002DCE0  93 55 00 00 CE 55 00 00  09 56 00 00 3F 56 00 00  7D 56 00 00 AF 56 00 00  B1 56 00 00 11 57 00 00  ôU..U..V..?V..}V..»V..V..W..
0002DD00  24 57 00 00 32 57 00 00  C8 57 00 00 FB 57 00 00  22 58 00 00 4A 58 00 00  7E 58 00 00 80 58 00 00  $W..2W..W..W.."X..JX..~X..ÇX..
0002DD20  82 58 00 00 84 58 00 00  A7 58 00 00 A9 58 00 00  A7 59 00 00 A9 59 00 00  F7 F7 F7 F7 F1 F1 F1 F1  éX..äX..ºX..X..ºY..Y..±±±±
0002DD40  F1 F1 F1 EB E5 F1 DF F1  F1 F1 F1 F1 F1 F1 F1 F1  F1 F1 F1 F1 F1 F1 F1 F1  F1 F1 F1 F1 F1 DF F1 F1  ±±±δσ±±±±±±±±±±±±±±±±±±±±±±±±±
0002DD60  F1 F1 F1 F1 F1 F1 F1 E5  F1 F1 F1 F1 F1 F1 F1 F1  F1 F1 F1 F1 F1 F1 D6 CD  CD C4 CD CD CD CD F1 F1  ±±±±±±±σ±±±±±±±±±±±±±±±±
0002DD80  F1 F1 F1 DF F1 00 00 00  08 00 00 03 30 2A F0 00  05 03 11 6F 04 13 92 FB  00 00 08 00 00 01 30 2A  ±±±±.....0*.oÆ....0*
0002DDA0  F0 00 05 03 11 6F 04 13  92 FB 00 00 08 00 00 02  30 2A F0 00 05 03 11 6F  04 13 92 FB 00 00 05 00  .oÆ....0*.oÆ...
0002DDC0  00 04 30 2A F0 00 05 03  00 00 05 00 00 00 00 00  00 00 05 03 00 00 05 00  00 07 30 2A F0 00 05 03  .0*..............0*.
0002DDE0  00 00 05 00 00 01 30 2A  F0 00 05 03 00 00 08 00  00 01 30 2A F0 00 05 03  11 8A 05 13 76 FA 00 4D  ....0*.....0*.èv·.M
0002DE00  A9 59 00 00 AB 59 00 00  CC 59 00 00 CE 59 00 00  F2 59 00 00 16 5A 00 00  3A 5A 00 00 5C 5A 00 00  Y..½Y..Y..Y..Y..Z..:Z..\Z..
0002DE20  8F 5A 00 00 C0 5A 00 00  FC 5A 00 00 36 5B 00 00  70 5B 00 00 AA 5B 00 00  E4 5B 00 00 1E 5C 00 00  ÅZ..Z..Z..6[..p[..¬[..Σ[..\..
0002DE40  20 5C 00 00 89 5C 00 00  D0 5C 00 00 40 5D 00 00  42 5D 00 00 98 5D 00 00  9A 5D 00 00 9C 5D 00 00   \..ë\..\..@]..B]..ÿ]..Ü]..£]..
0002DE60  9E 5D 00 00 BF 5D 00 00  C1 5D 00 00 DB 5E 00 00  DD 5E 00 00 06 5F 00 00  31 5F 00 00 60 5F 00 00  ]..]..]..^..^.._..1_..`_..
0002DE80  95 5F 00 00 C9 5F 00 00  F9 5F 00 00 28 60 00 00  56 60 00 00 85 60 00 00  B2 60 00 00 DE 60 00 00  ò_.._.._..(`..V`..à`..`..`..
0002DEA0  12 61 00 00 45 61 00 00  6F 61 00 00 9B 61 00 00  DA 61 00 00 16 62 00 00  18 62 00 00 DF 65 00 00  a..Ea..oa..¢a..a..b..b..e..
0002DEC0  E1 65 00 00 9E 67 00 00  A0 67 00 00 A2 67 00 00  A4 67 00 00 CE 67 00 00  D0 67 00 00 F4 67 00 00  ße..g..ág..óg..ñg..g..g..g..
0002DEE0  18 68 00 00 3C 68 00 00  5E 68 00 00 92 68 00 00  C3 68 00 00 F5 68 00 00  27 69 00 00 68 69 00 00  h..<h..^h..Æh..h..h..'i..hi..
0002DF00  9D 69 00 00 D9 69 00 00  0B 6A 00 00 0D 6A 00 00  85 6A 00 00 BC 6A 00 00  EA 6A 00 00 2B 6B 00 00  ¥i..i..j..j..àj..j..Ωj..+k..
0002DF20  57 6B 00 00 DD 6B 00 00  FA F4 FA FA FA FA FA FA  FA FA FA FA FA FA FA FA  EB E2 EB FA DC FA FA FA  Wk..k..···············δΓδ····
0002DF40  FA FA D6 FA FA FA FA FA  FA FA FA FA FA FA FA FA  FA FA FA FA FA FA D0 FA  CA FA FA FA FA FA FA FA  ·····························
0002DF60  FA FA FA FA FA FA FA FA  FA FA C2 BA C2 C2 C2 C2  BA 00 00 00 07 04 00 02  30 2A F0 00 11 8A 05 13  ··········....0*.è
0002DF80  77 FA 00 00 07 04 00 01  30 2A F0 00 11 8A 05 13  77 FA 00 00 05 00 00 06  30 2A F0 00 05 03 00 00  w·...0*.èw·....0*...
0002DFA0  05 00 00 0E 30 2A F0 00  05 03 00 00 05 00 00 04  30 2A F0 00 05 03 00 00  05 00 00 02 30 2A F0 00  ..0*.....0*.....0*.
0002DFC0  05 03 00 00 08 00 00 01  30 2A F0 00 05 03 11 6F  04 13 91 FB 00 00 08 00  00 02 30 2A F0 00 05 03  ....0*.oæ....0*.
0002DFE0  11 6F 04 13 91 FB 00 00  05 00 00 00 00 00 00 00  05 03 00 00 05 00 00 01  30 2A F0 00 05 03 00 49  oæ.............0*..I
0002E000  DD 6B 00 00 92 6C 00 00  72 6D 00 00 74 6D 00 00  A3 6D 00 00 A5 6D 00 00  C4 6D 00 00 E6 6D 00 00  k..Æl..rm..tm..úm..Ñm..m..µm..
0002E020  FF 6D 00 00 01 6E 00 00  08 70 00 00 0A 70 00 00  0C 70 00 00 0E 70 00 00  38 70 00 00 3A 70 00 00   m..n..p..p..p..p..8p..:p..
0002E040  A5 70 00 00 BF 70 00 00  C1 70 00 00 C3 70 00 00  C5 70 00 00 EE 70 00 00  F0 70 00 00 59 71 00 00  Ñp..p..p..p..p..εp..p..Yq..
0002E060  94 71 00 00 AC 71 00 00  AE 71 00 00 B0 71 00 00  B2 71 00 00 D6 71 00 00  D8 71 00 00 41 72 00 00  öq..¼q..«q..q..q..q..q..Ar..
0002E080  5B 72 00 00 5D 72 00 00  5F 72 00 00 61 72 00 00  84 72 00 00 86 72 00 00  ED 72 00 00 26 73 00 00  [r..]r.._r..ar..är..år..φr..&s..
0002E0A0  3E 73 00 00 40 73 00 00  65 73 00 00 67 73 00 00  17 74 00 00 55 74 00 00  57 74 00 00 A1 74 00 00  >s..@s..es..gs..t..Ut..Wt..ít..
0002E0C0  A3 74 00 00 A5 74 00 00  A7 74 00 00 CC 74 00 00  CE 74 00 00 E1 74 00 00  F4 74 00 00 F6 74 00 00  út..Ñt..ºt..t..t..ßt..t..÷t..
0002E0E0  9D 75 00 00 9F 75 00 00  E9 75 00 00 EB 75 00 00  ED 75 00 00 EF 75 00 00  12 76 00 00 14 76 00 00  ¥u..ƒu..Θu..δu..φu..u..v..v..
0002E100  27 76 00 00 3A 76 00 00  3C 76 00 00 E2 76 00 00  E4 76 00 00 F4 E8 DF D9  D3 D3 D3 D3 D3 CD D3 D3  'v..:v..<v..Γv..Σv..Φ
0002E120  D3 D3 D3 C8 BF D3 D3 D3  D3 D3 C8 BA BA D3 D3 D3  D3 D3 C8 BA D3 D3 D3 D3  D3 C8 BA BA D3 D9 D3 B5  
0002E140  BA D3 D3 D3 D3 D3 D3 D3  BA BA D3 AF D3 D3 D3 D3  D3 D3 D3 BA BA D3 AF D3  00 00 00 00 00 00 05 00  »».......
0002E160  00 03 30 2A F0 00 05 03  00 00 04 06 00 03 30 2A  F0 00 00 00 04 06 00 01  30 2A F0 00 00 00 08 00  .0*....0*....0*....
0002E180  00 01 30 2A F0 00 05 03  11 A5 06 13 5B F9 00 00  04 06 00 02 30 2A F0 00  00 00 05 00 00 07 30 2A  .0*.Ñ[...0*.....0*
0002E1A0  F0 00 05 03 00 00 05 00  00 01 30 2A F0 00 05 03  00 00 05 00 00 00 00 00  00 00 05 03 00 00 08 00  .....0*.............
0002E1C0  00 01 30 2A F0 00 05 03  11 18 06 13 E8 F9 00 00  0B 00 00 04 30 2A F0 00  05 03 11 8A 05 13 77 FA  .0*.Φ....0*.èw·
0002E1E0  0F 05 00 01 1C 01 00 00  0B 00 00 03 30 2A F0 00  05 03 11 8A 05 13 77 FA  0F 05 00 01 1C 01 00 44  .....0*.èw·..D
0002E200  E4 76 00 00 92 77 00 00  94 77 00 00 DE 77 00 00  E0 77 00 00 E2 77 00 00  06 78 00 00 08 78 00 00  Σv..Æw..öw..w..αw..Γw..x..x..
0002E220  1F 78 00 00 36 78 00 00  57 78 00 00 59 78 00 00  F9 78 00 00 FB 78 00 00  52 79 00 00 54 79 00 00  x..6x..Wx..Yx..x..x..Ry..Ty..
0002E240  C7 79 00 00 C9 79 00 00  13 7A 00 00 15 7A 00 00  17 7A 00 00 19 7A 00 00  43 7A 00 00 45 7A 00 00  y..y..z..§z..z..z..Cz..Ez..
0002E260  65 7A 00 00 9D 7A 00 00  9F 7A 00 00 A1 7A 00 00  A3 7A 00 00 CC 7A 00 00  CE 7A 00 00 04 7B 00 00  ez..¥z..ƒz..íz..úz..z..z..{..
0002E280  29 7B 00 00 2B 7B 00 00  2D 7B 00 00 2F 7B 00 00  50 7B 00 00 52 7B 00 00  70 7B 00 00 A5 7B 00 00  ){..+{..-{../{..P{..R{..p{..Ñ{..
0002E2A0  A7 7B 00 00 A9 7B 00 00  DB 7B 00 00 DD 7B 00 00  01 7C 00 00 25 7C 00 00  49 7C 00 00 6B 7C 00 00  º{..{..{..{..|..%|..I|..k|..
0002E2C0  9E 7C 00 00 CE 7C 00 00  07 7D 00 00 39 7D 00 00  7A 7D 00 00 B7 7D 00 00  E7 7D 00 00 19 7E 00 00  |..|..}..9}..z}..}..τ}..~..
0002E2E0  1B 7E 00 00 3F 7E 00 00  60 7E 00 00 98 80 00 00  DB 80 00 00 5D 81 00 00  90 81 00 00 C6 81 00 00  ~..?~..`~..ÿÇ..Ç..]ü..Éü..ü..
0002E300  F0 81 00 00 F2 81 00 00  3C 82 00 00 3E 82 00 00  40 82 00 00 42 82 00 00  64 82 00 00 66 82 00 00  ü..ü..<é..>é..@é..Bé..dé..fé..
0002E320  83 82 00 00 A8 82 00 00  AA 82 00 00 F3 82 00 00  F5 82 00 00 F7 82 00 00  20 83 00 00 FA F4 F4 F4  âé..¿é..¬é..é..é..é.. â..·
0002E340  F4 EE F4 E9 E9 E9 F4 FA  E3 DD E3 DD F4 F4 F4 F4  F4 F4 F4 E9 E9 F4 F4 F4  F4 F4 E9 E9 F4 F4 F4 F4  εΘΘΘ·ππΘΘΘΘ
0002E360  F4 E9 E9 F4 F4 EE F4 F4  F4 F4 F4 F4 F4 F4 F4 F4  F4 F4 F4 F4 D5 D5 CD D5  C5 D5 D5 D5 F4 F4 F4 F4  ΘΘε
0002E380  F4 F4 F4 E9 E9 F4 F4 F4  F4 EE 07 04 00 02 30 2A  F0 00 11 8A 05 13 76 FA  00 00 07 04 00 09 30 2A  ΘΘε.0*.èv·...0*
0002E3A0  F0 00 11 8A 05 13 76 FA  00 00 07 04 00 01 30 2A  F0 00 11 8A 05 13 76 FA  00 00 05 03 00 02 30 2A  .èv·...0*.èv·...0*
0002E3C0  F0 00 05 03 00 00 05 03  00 01 30 2A F0 00 05 03  00 00 04 06 00 01 30 2A  F0 00 00 00 05 00 00 00  ....0*....0*......
0002E3E0  00 00 00 00 05 03 00 00  05 00 00 01 30 2A F0 00  05 03 00 00 05 03 00 03  30 2A F0 00 05 03 00 4E  ........0*....0*..N
0002E400  20 83 00 00 22 83 00 00  46 83 00 00 6A 83 00 00  8E 83 00 00 B0 83 00 00  D7 83 00 00 FF 83 00 00   â.."â..Fâ..jâ..Äâ..â..â.. â..
0002E420  3D 84 00 00 65 84 00 00  8C 84 00 00 B4 84 00 00  F2 84 00 00 2E 85 00 00  30 85 00 00 5F 85 00 00  =ä..eä..îä..ä..ä...à..0à.._à..
0002E440  72 85 00 00 97 85 00 00  BA 85 00 00 BC 85 00 00  AE 86 00 00 B0 86 00 00  EB 87 00 00 ED 87 00 00  rà..ùà..à..à..«å..å..δç..φç..
0002E460  74 89 00 00 76 89 00 00  78 89 00 00 7A 89 00 00  96 89 00 00 98 89 00 00  84 8A 00 00 86 8A 00 00  të..vë..xë..zë..ûë..ÿë..äè..åè..
0002E480  88 8A 00 00 8A 8A 00 00  A7 8A 00 00 A9 8A 00 00  34 8B 00 00 4C 8B 00 00  4E 8B 00 00 82 8B 00 00  êè..èè..ºè..è..4ï..Lï..Nï..éï..
0002E4A0  84 8B 00 00 A8 8B 00 00  CC 8B 00 00 F0 8B 00 00  12 8C 00 00 4A 8C 00 00  81 8C 00 00 B3 8C 00 00  äï..¿ï..ï..ï..î..Jî..üî..î..
0002E4C0  E5 8C 00 00 1F 8D 00 00  5F 8D 00 00 A1 8D 00 00  E3 8D 00 00 E5 8D 00 00  E7 8D 00 00 E9 8D 00 00  σî..ì.._ì..íì..πì..σì..τì..Θì..
0002E4E0  0D 8E 00 00 0F 8E 00 00  DF 8E 00 00 E1 8E 00 00  E3 8E 00 00 E5 8E 00 00  06 8F 00 00 08 8F 00 00  Ä..Ä..Ä..ßÄ..πÄ..σÄ..Å..Å..
0002E500  2C 8F 00 00 50 8F 00 00  74 8F 00 00 96 8F 00 00  CA 8F 00 00 FE 8F 00 00  38 90 00 00 72 90 00 00  ,Å..PÅ..tÅ..ûÅ..Å..Å..8É..rÉ..
0002E520  AC 90 00 00 DF 90 00 00  12 91 00 00 48 91 00 00  4A 91 00 00 66 91 00 00  82 91 00 00 9D 91 00 00  ¼É..É..æ..Hæ..Jæ..fæ..éæ..¥æ..
0002E540  B8 91 00 00 FA FA FA FA  FA FA FA FA FA FA FA FA  FA FA F4 F4 F4 F4 F4 EE  F4 E8 F4 E2 F4 FA FA FA  æ..··············εΦΓ···
0002E560  FA DC FA FA FA FA FA D6  D0 FA FA FA FA FA FA FA  FA FA FA FA FA FA FA FA  FA FA FA FA FA CA FA FA  ····························
0002E580  FA FA FA FA FA FA FA FA  FA FA FA FA FA FA FA FA  FA FA FA FA 05 00 00 03  30 2A F0 00 05 03 00 00  ····················..0*...
0002E5A0  05 00 00 00 00 00 00 00  05 03 00 00 05 00 00 02  30 2A F0 00 05 03 00 00  05 00 00 04 30 2A F0 00  ...........0*.....0*.
0002E5C0  05 03 00 00 05 03 00 06  30 2A F0 00 05 03 00 00  05 03 00 05 30 2A F0 00  05 03 00 00 05 03 00 04  ...0*....0*....
0002E5E0  30 2A F0 00 05 03 00 00  05 03 00 01 30 2A F0 00  05 03 00 00 05 00 00 01  30 2A F0 00 05 03 00 50  0*....0*.....0*..P
0002E600  B8 91 00 00 D2 91 00 00  D4 91 00 00 D6 91 00 00  EC 91 00 00 EE 91 00 00  7E 92 00 00 A1 92 00 00  æ..æ..æ..æ..æ..εæ..~Æ..íÆ..
0002E620  A3 92 00 00 C7 92 00 00  EB 92 00 00 0F 93 00 00  31 93 00 00 68 93 00 00  A0 93 00 00 D6 93 00 00  úÆ..Æ..δÆ..ô..1ô..hô..áô..ô..
0002E640  0B 94 00 00 4E 94 00 00  94 94 00 00 CD 94 00 00  07 95 00 00 09 95 00 00  2F 95 00 00 56 95 00 00  ö..Nö..öö..ö..ò..ò../ò..Vò..
0002E660  77 95 00 00 54 96 00 00  91 96 00 00 F9 96 00 00  A2 98 00 00 A4 98 00 00  A6 98 00 00 A8 98 00 00  wò..Tû..æû..û..óÿ..ñÿ..ªÿ..¿ÿ..
0002E680  CA 98 00 00 CC 98 00 00  08 99 00 00 1F 99 00 00  21 99 00 00 4D 99 00 00  66 99 00 00 77 99 00 00  ÿ..ÿ..Ö..Ö..!Ö..MÖ..fÖ..wÖ..
0002E6A0  88 99 00 00 99 99 00 00  AA 99 00 00 BC 99 00 00  CE 99 00 00 E0 99 00 00  E2 99 00 00 10 9A 00 00  êÖ..ÖÖ..¬Ö..Ö..Ö..αÖ..ΓÖ..Ü..
0002E6C0  29 9A 00 00 3A 9A 00 00  4B 9A 00 00 5C 9A 00 00  6D 9A 00 00 7F 9A 00 00  91 9A 00 00 A3 9A 00 00  )Ü..:Ü..KÜ..\Ü..mÜ..Ü..æÜ..úÜ..
0002E6E0  A5 9A 00 00 DC 9A 00 00  FB 9A 00 00 FD 9A 00 00  AA 9B 00 00 AC 9B 00 00  AE 9B 00 00 EA 9B 00 00  ÑÜ..Ü..Ü..²Ü..¬¢..¼¢..«¢..Ω¢..
0002E700  01 9C 00 00 03 9C 00 00  28 9C 00 00 3A 9C 00 00  4A 9C 00 00 5A 9C 00 00  6A 9C 00 00 7A 9C 00 00  £..£..(£..:£..J£..Z£..j£..z£..
0002E720  8A 9C 00 00 8C 9C 00 00  B1 9C 00 00 C3 9C 00 00  D3 9C 00 00 E3 9C 00 00  F3 9C 00 00 03 9D 00 00  è£..î£..£..£..£..π£..£..¥..
0002E740  13 9D 00 00 15 9D 00 00  48 9D 00 00 6A 9D 00 00  6C 9D 00 00 FA FA FA FA  FA F4 EE FA FA FA FA FA  ¥..§¥..H¥..j¥..l¥..·····ε·····
0002E760  FA FA FA FA FA FA FA FA  FA E9 E9 E9 E4 E9 DF DA  FA FA FA FA FA FA FA FA  FA FA FA FA FA FA FA FA  ·········ΘΘΘΣΘ················
0002E780  FA FA EE FA FA FA FA FA  FA FA FA FA FA FA FA D4  FA FA FA FA FA FA FA FA  FA FA FA FA FA FA FA FA  ··ε····························
0002E7A0  FA FA FA FA FA FA FA FA  05 03 00 03 30 2A F0 00  05 03 00 00 04 04 00 07  30 2A F0 00 00 00 04 04  ········.0*....0*...
0002E7C0  00 02 30 2A F0 00 00 00  04 04 00 04 30 2A F0 00  00 00 04 04 00 01 30 2A  F0 00 00 00 05 00 00 00  .0*....0*....0*......
0002E7E0  00 00 00 00 05 03 00 00  05 00 00 02 30 2A F0 00  05 03 00 00 05 00 00 01  30 2A F0 00 05 03 00 54  ........0*.....0*..T
0002E800  6C 9D 00 00 19 9E 00 00  1B 9E 00 00 EE 9E 00 00  F0 9E 00 00 04 A0 00 00  22 A0 00 00 24 A0 00 00  l¥......ε....á.."á..$á..
0002E820  B9 A0 00 00 BB A0 00 00  4E A1 00 00 50 A1 00 00  60 A1 00 00 62 A1 00 00  7E A1 00 00 97 A1 00 00  á..á..Ní..Pí..`í..bí..~í..ùí..
0002E840  C0 A1 00 00 D7 A1 00 00  D9 A1 00 00 DB A1 00 00  FB A1 00 00 FD A1 00 00  21 A2 00 00 45 A2 00 00  í..í..í..í..í..²í..!ó..Eó..
0002E860  69 A2 00 00 8B A2 00 00  CA A2 00 00 0F A3 00 00  53 A3 00 00 95 A3 00 00  E6 A3 00 00 39 A4 00 00  ió..ïó..ó..ú..Sú..òú..µú..9ñ..
0002E880  80 A4 00 00 BA A4 00 00  BC A4 00 00 BE A4 00 00  C0 A4 00 00 E1 A4 00 00  E3 A4 00 00 BD A6 00 00  Çñ..ñ..ñ..ñ..ñ..ßñ..πñ..ª..
0002E8A0  BF A6 00 00 4D A7 00 00  4F A7 00 00 87 A7 00 00  89 A7 00 00 C5 A7 00 00  C7 A7 00 00 02 A8 00 00  ª..Mº..Oº..çº..ëº..º..º..¿..
0002E8C0  04 A8 00 00 3F A8 00 00  41 A8 00 00 7C A8 00 00  7E A8 00 00 F0 AA 00 00  F2 AA 00 00 17 AB 00 00  ¿..?¿..A¿..|¿..~¿..¬..¬..½..
0002E8E0  55 AB 00 00 73 AB 00 00  92 AB 00 00 B2 AB 00 00  B4 AB 00 00 BE AC 00 00  C0 AC 00 00 EC AC 00 00  U½..s½..ƽ..½..½..¼..¼..¼..
0002E900  18 AD 00 00 43 AD 00 00  6E AD 00 00 99 AD 00 00  C5 AD 00 00 F0 AD 00 00  1C AE 00 00 48 AE 00 00  ¡..C¡..n¡..Ö¡..¡..¡..«..H«..
0002E920  74 AE 00 00 76 AE 00 00  1D AF 00 00 1F AF 00 00  42 B0 00 00 44 B0 00 00  FA F4 EE F4 E8 E2 F4 EE  t«..v«..»..»..B..D..·εΦΓε
0002E940  F4 DC F4 F4 F4 F4 F4 F4  F4 F4 F4 F4 F4 F4 F4 F4  F4 F4 F4 F4 F4 F4 F4 F4  F4 F4 F4 F4 F4 F4 D6 F4  
0002E960  DC F4 F4 F4 F4 F4 F4 F4  F4 F4 F4 F4 D0 F4 F4 F4  F4 F4 F4 F4 E8 F4 CA CA  CA CA CA CA CA CA CA CA  Φ
0002E980  F4 EE F4 E8 F4 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 05 00 00 01  30 2A F0 00 05 01 00 00  εΦ.................0*...
0002E9A0  05 00 00 09 30 2A F0 00  05 03 00 00 05 00 00 07  30 2A F0 00 05 03 00 00  05 00 00 02 30 2A F0 00  ..0*.....0*.....0*.
0002E9C0  05 03 00 00 05 00 00 00  00 00 00 00 05 03 00 00  05 00 00 04 30 2A F0 00  05 03 00 00 05 00 00 03  .............0*.....
0002E9E0  30 2A F0 00 05 03 00 00  05 00 00 01 30 2A F0 00  05 03 00 00 05 03 00 03  30 2A F0 00 05 03 00 4D  0*.....0*....0*..M
0002EA00  44 B0 00 00 6D B0 00 00  6F B0 00 00 82 B0 00 00  84 B0 00 00 91 B2 00 00  93 B2 00 00 95 B2 00 00  D..m..o..é..ä..æ..ô..ò..
0002EA20  97 B2 00 00 A2 B2 00 00  A4 B2 00 00 88 B3 00 00  8A B3 00 00 4E B4 00 00  50 B4 00 00 6C B6 00 00  ù..ó..ñ..ê..è..N..P..l..
0002EA40  6E B6 00 00 D8 B8 00 00  DA B8 00 00 10 BB 00 00  12 BB 00 00 C4 BB 00 00  C6 BB 00 00 9C BC 00 00  n..............£..
0002EA60  9E BC 00 00 AB BD 00 00  AD BD 00 00 B1 BE 00 00  B3 BE 00 00 B5 BE 00 00  B7 BE 00 00 D9 BE 00 00  ..½..¡............
0002EA80  DB BE 00 00 A2 BF 00 00  A4 BF 00 00 F5 C0 00 00  F7 C0 00 00 E4 C2 00 00  E6 C2 00 00 E8 C2 00 00  ..ó..ñ......Σ..µ..Φ..
0002EAA0  FE C2 00 00 00 C3 00 00  AE C5 00 00 B0 C5 00 00  9C C7 00 00 9E C7 00 00  C4 C9 00 00 C6 C9 00 00  .....«....£........
0002EAC0  B7 CB 00 00 B9 CB 00 00  6C CD 00 00 6E CD 00 00  70 CD 00 00 72 CD 00 00  89 CD 00 00 8B CD 00 00  ....l..n..p..r..ë..ï..
0002EAE0  88 CE 00 00 8A CE 00 00  4E D1 00 00 50 D1 00 00  56 D3 00 00 58 D3 00 00  CE D4 00 00 D0 D4 00 00  ê..è..N..P..V..X......
0002EB00  D2 D4 00 00 D4 D4 00 00  E6 D4 00 00 E8 D4 00 00  9F D6 00 00 A1 D6 00 00  16 D8 00 00 18 D8 00 00  ....µ..Φ..ƒ..í......
0002EB20  B1 D9 00 00 B3 D9 00 00  FA F4 F4 F4 EE F4 F4 F4  F4 F4 E8 F4 E8 F4 EE F4  E2 F4 EE F4 E8 F4 E8 F4  ....·εΦΦεΓεΦΦ
0002EB40  DC F4 DC F4 F4 F4 F4 F4  E8 F4 D6 F4 D0 F4 F4 F4  F4 CA F4 D0 F4 EE F4 D0  F4 C4 F4 F4 F4 F4 F4 DC  Φε
0002EB60  F4 CA F4 BE F4 D6 F4 F4  F4 F4 F4 C4 F4 D6 F4 C4  F4 00 00 00 00 00 00 00  00 00 00 00 05 00 00 00  ..............
0002EB80  00 00 00 00 05 03 00 00  05 00 00 06 30 2A F0 00  05 03 00 00 05 00 00 0A  30 2A F0 00 05 03 00 00  ........0*.....0*...
0002EBA0  05 00 00 07 30 2A F0 00  05 03 00 00 05 00 00 05  30 2A F0 00 05 03 00 00  05 00 00 04 30 2A F0 00  ..0*.....0*.....0*.
0002EBC0  05 03 00 00 05 00 00 09  30 2A F0 00 05 03 00 00  05 00 00 03 30 2A F0 00  05 03 00 00 05 00 00 08  ....0*.....0*.....
0002EBE0  30 2A F0 00 05 03 00 00  05 00 00 01 30 2A F0 00  05 03 00 00 05 00 00 00  00 00 00 00 05 01 00 49  0*.....0*...........I
0002EC00  B3 D9 00 00 C5 D9 00 00  D7 D9 00 00 FA D9 00 00  1D DA 00 00 48 DA 00 00  73 DA 00 00 75 DA 00 00  ......·....H..s..u..
0002EC20  88 DA 00 00 9B DA 00 00  C3 DA 00 00 EB DA 00 00  19 DB 00 00 4D DB 00 00  4F DB 00 00 03 DD 00 00  ê..¢....δ....M..O....
0002EC40  05 DD 00 00 D9 DD 00 00  DB DD 00 00 DD DD 00 00  EA DD 00 00 EC DD 00 00  FE DE 00 00 00 DF 00 00  ........Ω.........
0002EC60  B1 E0 00 00 B3 E0 00 00  26 E2 00 00 28 E2 00 00  2A E2 00 00 2C E2 00 00  3F E2 00 00 41 E2 00 00  α..α..&Γ..(Γ..*Γ..,Γ..?Γ..AΓ..
0002EC80  4C E3 00 00 4E E3 00 00  B8 E4 00 00 BA E4 00 00  FA E5 00 00 19 E6 00 00  1B E6 00 00 1F E7 00 00  Lπ..Nπ..Σ..Σ..·σ..µ..µ..τ..
0002ECA0  21 E7 00 00 43 EA 00 00  45 EA 00 00 53 EA 00 00  1E EB 00 00 20 EB 00 00  38 EB 00 00 FD EC 00 00  !τ..CΩ..EΩ..SΩ..δ.. δ..8δ..²..
0002ECC0  FF EC 00 00 23 ED 00 00  FC ED 00 00 FE ED 00 00  1B EE 00 00 EE EF 00 00  F0 EF 00 00 0E F0 00 00   ..#φ..φ..φ..ε..ε......
0002ECE0  3B F1 00 00 5E F1 00 00  60 F1 00 00 36 F3 00 00  38 F3 00 00 6A F3 00 00  FA FA FA FA FA FA FA FA  ;±..^±..`±..6..8..j..········
0002ED00  FA FA FA FA FA F4 EE F4  E8 F4 F4 F4 F4 E2 F4 EE  F4 DC F4 F4 F4 F4 F4 E2  F4 DC F4 DC D6 F4 E2 F4  ·····εΦΓεΓΓ
0002ED20  D0 F4 C7 BE C7 C7 B5 C7  C7 BE C7 C7 B5 C7 C7 AC  A7 A2 9C F4 FA 00 00 00  05 00 00 07 30 2A F0 00  ¼ºó£·.....0*.
0002ED40  05 03 00 00 04 00 00 01  30 2A F0 00 00 00 04 00  00 00 00 00 00 00 00 00  08 00 00 05 30 2A F0 00  ....0*..............0*.
0002ED60  05 03 11 1C 01 13 E4 FE  00 00 08 00 00 07 30 2A  F0 00 05 03 11 1C 01 13  E4 FE 00 00 08 00 00 03  Σ....0*.Σ....
0002ED80  30 2A F0 00 05 03 11 1C  01 13 E4 FE 00 00 08 00  00 01 30 2A F0 00 05 03  11 1C 01 13 E4 FE 00 00  0*.Σ....0*.Σ..
0002EDA0  05 00 00 0B 30 2A F0 00  05 03 00 00 05 00 00 00  00 00 00 00 05 03 00 00  05 00 00 05 30 2A F0 00  ..0*..............0*.
0002EDC0  05 03 00 00 05 00 00 04  30 2A F0 00 05 03 00 00  05 00 00 03 30 2A F0 00  05 03 00 00 05 00 00 06  ....0*.....0*.....
0002EDE0  30 2A F0 00 05 03 00 00  05 00 00 01 30 2A F0 00  05 03 00 00 05 00 00 01  30 2A F0 00 05 01 00 3D  0*.....0*.....0*..=
0002EE00  6A F3 00 00 9E F3 00 00  D0 F3 00 00 02 F4 00 00  13 F4 00 00 15 F4 00 00  4C F5 00 00 4E F5 00 00  j..........§..L..N..
0002EE20  3E F6 00 00 40 F6 00 00  FC F6 00 00 FE F6 00 00  00 F7 00 00 02 F7 00 00  19 F7 00 00 1B F7 00 00  >÷..@÷..÷..÷...........
0002EE40  85 FA 00 00 87 FA 00 00  AF FA 00 00 B1 FA 00 00  E1 FA 00 00 09 FB 00 00  7D FB 00 00 DB FB 00 00  à·..ç·..»·..·..ß·....}....
0002EE60  93 FC 00 00 10 FD 00 00  41 FD 00 00 B0 FD 00 00  31 FE 00 00 5F FE 00 00  61 FE 00 00 63 FF 00 00  ô..²..A²..²..1.._..a..c ..
0002EE80  65 FF 00 00 67 FF 00 00  69 FF 00 00 7F FF 00 00  81 FF 00 00 00 01 01 00  02 01 01 00 14 01 01 00  e ..g ..i .. ..ü ......
0002EEA0  26 01 01 00 28 01 01 00  5F 02 01 00 61 02 01 00  98 02 01 00 CE 02 01 00  06 03 01 00 34 03 01 00  &.(._.a.ÿ...4.
0002EEC0  7F 03 01 00 9F 03 01 00  E3 03 01 00 0C 04 01 00  36 04 01 00 79 04 01 00  FE 04 01 00 9F 05 01 00  .ƒ.π..6.y..ƒ.
0002EEE0  A8 07 01 00 F6 07 01 00  34 09 01 00 55 09 01 00  57 09 01 00 FA FA FA FA  F4 EE F4 E8 F4 E2 F4 F4  ¿.÷.4.U.W.····εΦΓ
0002EF00  F4 F4 F4 DC F4 F4 F4 D3  D3 CA CA C1 CA D3 CA CA  D3 F4 B8 F4 F4 F4 F4 F4  B2 F4 F4 F4 F4 EE F4 D3  ε
0002EF20  D3 D3 D3 D3 D3 D3 D3 D3  D3 CA C1 A9 CA A0 D3 F4  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  á................
0002EF40  08 00 00 05 30 2A F0 00  05 03 11 D0 02 13 30 FD  00 00 08 00 00 08 30 2A  F0 00 05 03 11 D0 02 13  ..0*.0²....0*.
0002EF60  30 FD 00 00 05 00 00 06  30 2A F0 00 05 03 00 00  08 00 00 04 30 2A F0 00  05 03 11 53 03 13 AD FC  0²....0*.....0*.S¡
0002EF80  00 00 08 00 00 03 30 2A  F0 00 05 03 11 D0 02 13  30 FD 00 00 08 00 00 02  30 2A F0 00 05 03 11 D0  ....0*.0²....0*.
0002EFA0  02 13 30 FD 00 00 08 00  00 01 30 2A F0 00 05 03  11 D0 02 13 30 FD 00 00  05 00 00 0C 30 2A F0 00  0²....0*.0²....0*.
0002EFC0  05 03 00 00 05 00 00 03  30 2A F0 00 05 03 00 00  05 00 00 04 30 2A F0 00  05 03 00 00 05 00 00 05  ....0*.....0*.....
0002EFE0  30 2A F0 00 05 03 00 00  05 00 00 01 30 2A F0 00  05 03 00 00 05 00 00 01  30 2A F0 00 05 01 00 3C  0*.....0*.....0*..<
0002F000  57 09 01 00 B0 09 01 00  B2 09 01 00 E0 09 01 00  E2 09 01 00 07 0A 01 00  DF 0A 01 00 BB 0B 01 00  W...α.Γ....
0002F020  BD 0B 01 00 1B 0C 01 00  1D 0C 01 00 C7 0D 01 00  C9 0D 01 00 CB 0D 01 00  DD 0D 01 00 EF 0D 01 00  ........
0002F040  F1 0D 01 00 E2 0F 01 00  E4 0F 01 00 04 11 01 00  06 11 01 00 61 11 01 00  63 11 01 00 BD 11 01 00  ±.Γ.Σ...a.c..
0002F060  BF 11 01 00 9D 12 01 00  9F 12 01 00 F8 13 01 00  FA 13 01 00 47 15 01 00  49 15 01 00 41 16 01 00  .¥.ƒ.°.·.G§.I§.A.
0002F080  44 16 01 00 46 16 01 00  63 16 01 00 65 16 01 00  14 19 01 00 16 19 01 00  46 19 01 00 76 19 01 00  D.F.c.e...F.v.
0002F0A0  A6 19 01 00 A8 19 01 00  D8 19 01 00 08 1A 01 00  38 1A 01 00 69 1A 01 00  99 1A 01 00 C9 1A 01 00  ª.¿...8.i.Ö..
0002F0C0  CB 1A 01 00 FB 1A 01 00  2B 1B 01 00 5B 1B 01 00  5D 1B 01 00 8F 1B 01 00  C1 1B 01 00 F3 1B 01 00  ..+.[.].Å...
0002F0E0  F5 1B 01 00 27 1C 01 00  59 1C 01 00 8B 1C 01 00  8D 1C 01 00 BF 1C 01 00  FA F4 F4 F4 EB E2 E2 F4  .'.Y.ï.ì..·δΓΓ
0002F100  FA F4 DC F4 F4 F4 F4 F4  D6 F4 D0 F4 C7 BE C7 F4  B8 F4 B2 F4 B2 F4 AC F4  F4 F4 F4 A6 A1 A1 A1 A1  ·¼ªíííí
0002F120  A1 A1 A1 A1 9C A1 A1 A1  A1 A1 A1 A1 A1 A1 A1 A1  A1 A1 A1 A1 A1 00 00 00  04 00 00 00 00 00 00 00  íííí£íííííííííííííííí..........
0002F140  00 00 04 00 00 01 30 2A  F0 00 00 00 05 00 00 0A  30 2A F0 00 05 03 00 00  05 00 00 04 30 2A F0 00  ....0*.....0*.....0*.
0002F160  05 03 00 00 05 00 00 05  30 2A F0 00 05 03 00 00  05 00 00 03 30 2A F0 00  05 03 00 00 08 00 00 01  ....0*.....0*.....
0002F180  30 2A F0 00 05 03 11 8A  05 13 76 FA 00 00 08 00  00 02 30 2A F0 00 05 03  11 8A 05 13 76 FA 00 00  0*.èv·....0*.èv·..
0002F1A0  05 00 00 00 00 00 00 00  05 03 00 00 05 00 00 07  30 2A F0 00 05 03 00 00  05 00 00 06 30 2A F0 00  ...........0*.....0*.
0002F1C0  05 03 00 00 08 00 00 03  30 2A F0 00 05 03 11 37  02 13 C9 FD 00 00 08 00  00 01 30 2A F0 00 05 03  ....0*.7²....0*.
0002F1E0  11 37 02 13 C9 FD 00 00  05 00 00 01 30 2A F0 00  05 03 00 00 05 00 00 02  30 2A F0 00 05 03 00 3D  7²....0*.....0*..=
0002F200  BF 1C 01 00 F1 1C 01 00  23 1D 01 00 25 1D 01 00  57 1D 01 00 89 1D 01 00  BB 1D 01 00 BD 1D 01 00  .±.#.%.W.ë...
0002F220  EC 1D 01 00 1B 1E 01 00  4A 1E 01 00 4C 1E 01 00  86 1E 01 00 C0 1E 01 00  FA 1E 01 00 FC 1E 01 00  ..J.L.å..·..
0002F240  D2 1F 01 00 D4 1F 01 00  D6 1F 01 00 D8 1F 01 00  FA 1F 01 00 FC 1F 01 00  86 21 01 00 88 21 01 00  ....·..å!.ê!.
0002F260  79 22 01 00 A0 23 01 00  A2 23 01 00 17 24 01 00  19 24 01 00 42 24 01 00  73 24 01 00 B0 24 01 00  y".á#.ó#.$.$.B$.s$.$.
0002F280  B2 24 01 00 BA 25 01 00  BC 25 01 00 D1 26 01 00  D3 26 01 00 7C 28 01 00  7E 28 01 00 B2 29 01 00  $.%.%.&.&.|(.~(.).
0002F2A0  B4 29 01 00 54 2A 01 00  56 2A 01 00 58 2A 01 00  5A 2A 01 00 84 2A 01 00  86 2A 01 00 54 2B 01 00  ).T*.V*.X*.Z*.ä*.å*.T+.
0002F2C0  56 2B 01 00 6C 2B 01 00  82 2B 01 00 98 2B 01 00  92 2C 01 00 94 2C 01 00  B6 2C 01 00 D8 2C 01 00  V+.l+.é+.ÿ+.Æ,.ö,.,.,.
0002F2E0  FA 2C 01 00 FC 2C 01 00  0C 2E 01 00 0E 2E 01 00  2E 2E 01 00 4E 2E 01 00  6E 2E 01 00 8E 2E 01 00  ·,.,........N..n..Ä..
0002F300  90 2E 01 00 FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB F5 FB FB EF EF  EF E9 EF E3 DD EF D7 EF  É..Θπ
0002F320  EF EF EF EF E3 EF E3 EF  E9 EF D1 EF F5 EF EF EF  EF C6 BB C6 C6 C6 C6 B0  C6 C6 C6 C6 C6 A5 C6 C6  ππΘÑ
0002F340  C6 C6 C6 C6 00 00 00 00  00 00 0A 00 00 04 30 2A  F0 00 05 03 0F 08 00 02  37 02 E1 03 00 00 00 00  ........0*..7ß....
0002F360  0A 00 00 00 00 00 00 00  05 03 0F 08 00 02 37 02  E1 03 00 00 00 00 0A 00  00 03 30 2A F0 00 05 03  ........7ß......0*.
0002F380  0F 08 00 02 37 02 E1 03  00 00 00 00 0A 00 00 01  30 2A F0 00 05 03 0F 08  00 02 37 02 E1 03 00 00  .7ß......0*..7ß..
0002F3A0  00 00 05 00 00 05 30 2A  F0 00 05 03 00 00 05 00  00 02 30 2A F0 00 05 03  00 00 05 00 00 00 00 00  ....0*.....0*........
0002F3C0  00 00 05 03 00 00 05 00  00 04 30 2A F0 00 05 03  00 00 05 00 00 06 30 2A  F0 00 05 03 00 00 05 00  ......0*.....0*....
0002F3E0  00 01 30 2A F0 00 05 03  00 00 05 00 00 03 30 2A  F0 00 05 03 00 00 04 00  00 01 30 2A F0 00 00 40  .0*.....0*.....0*..@
0002F400  90 2E 01 00 23 30 01 00  25 30 01 00 3C 30 01 00  54 30 01 00 56 30 01 00  19 31 01 00 1B 31 01 00  É..#0.%0.<0.T0.V0.1.1.
0002F420  37 31 01 00 42 32 01 00  44 32 01 00 60 32 01 00  79 34 01 00 C1 34 01 00  C3 34 01 00 DD 34 01 00  71.B2.D2.`2.y4.4.4.4.
0002F440  AF 35 01 00 B1 35 01 00  CB 35 01 00 54 36 01 00  56 36 01 00 6F 36 01 00  32 37 01 00 34 37 01 00  »5.5.5.T6.V6.o6.27.47.
0002F460  36 37 01 00 38 37 01 00  49 37 01 00 4B 37 01 00  AA 37 01 00 AC 37 01 00  B9 37 01 00 79 3A 01 00  67.87.I7.K7.¬7.¼7.7.y:.
0002F480  7B 3A 01 00 85 3A 01 00  9D 3B 01 00 9F 3B 01 00  AC 3B 01 00 D4 3C 01 00  D6 3C 01 00 D8 3C 01 00  {:.à:.¥;.ƒ;.¼;.<.<.<.
0002F4A0  F8 3C 01 00 FA 3C 01 00  0F 3E 01 00 11 3E 01 00  17 3F 01 00 19 3F 01 00  4B 3F 01 00 94 3F 01 00  °<.·<.>.>.?.?.K?.ö?.
0002F4C0  C6 3F 01 00 C8 3F 01 00  9D 40 01 00 9F 40 01 00  D1 40 01 00 0A 41 01 00  3C 41 01 00 75 41 01 00  ?.?.¥@.ƒ@.@.A.<A.uA.
0002F4E0  A7 41 01 00 F5 EA EA EA  EA DF EA EA D4 EA EA C9  BE EA EA DF EA EA B3 EA  EA DF AD AD AD AD AD A7  ºA.ΩΩΩΩΩΩΩΩΩΩΩΩΩΩ¡¡¡¡¡º
0002F500  AD AD A1 AD AD 9B AD AD  9B AD AD 95 AD 9B AD 9B  AD AD AD AD AD 8F AD AD  AD AD AD AD 00 00 05 00  ¡¡í¡¡¢¡¡¢¡¡ò¡¢¡¢¡¡¡¡¡Å¡¡¡¡¡¡...
0002F520  00 03 30 2A F0 00 05 03  00 00 05 00 00 00 00 00  00 00 05 03 00 00 05 00  00 04 30 2A F0 00 05 03  .0*..............0*.
0002F540  00 00 05 00 00 0A 30 2A  F0 00 05 03 00 00 05 00  00 02 30 2A F0 00 05 03  00 00 05 00 00 01 30 2A  ....0*.....0*.....0*
0002F560  F0 00 05 03 00 00 0A 00  00 02 30 2A F0 00 05 03  0F 08 00 02 37 02 E1 03  00 00 00 00 0A 00 00 00  .....0*..7ß.......
0002F580  00 00 00 00 05 03 0F 08  00 02 37 02 E1 03 00 00  00 00 0A 00 00 08 30 2A  F0 00 05 03 0F 08 00 02  .....7ß......0*..
0002F5A0  37 02 E1 03 00 00 00 00  0A 00 00 04 30 2A F0 00  05 03 0F 08 00 02 37 02  E1 03 00 00 00 00 0A 00  7ß......0*..7ß.....
0002F5C0  00 03 30 2A F0 00 05 03  0F 08 00 02 37 02 E1 03  00 00 00 00 0A 00 00 01  30 2A F0 00 05 03 0F 08  .0*..7ß......0*.
0002F5E0  00 02 37 02 E1 03 00 00  00 00 0A 00 00 06 30 2A  F0 00 05 03 0F 08 00 02  37 02 E1 03 00 00 00 38  .7ß......0*..7ß...8
0002F600  A7 41 01 00 A9 41 01 00  36 43 01 00 38 43 01 00  17 44 01 00 19 44 01 00  4D 44 01 00 88 44 01 00  ºA.A.6C.8C.D.D.MD.êD.
0002F620  BC 44 01 00 F7 44 01 00  2B 45 01 00 2D 45 01 00  C8 47 01 00 CA 47 01 00  EF 48 01 00 F1 48 01 00  D.D.+E.-E.G.G.H.±H.
0002F640  25 49 01 00 60 49 01 00  94 49 01 00 CF 49 01 00  03 4A 01 00 05 4A 01 00  DD 4A 01 00 DF 4A 01 00  %I.`I.öI.I.J.J.J.J.
0002F660  13 4B 01 00 4E 4B 01 00  82 4B 01 00 BD 4B 01 00  F1 4B 01 00 F3 4B 01 00  A6 4C 01 00 A8 4C 01 00  K.NK.éK.K.±K.K.ªL.¿L.
0002F680  DC 4C 01 00 17 4D 01 00  4B 4D 01 00 86 4D 01 00  BA 4D 01 00 BC 4D 01 00  EC 4E 01 00 EE 4E 01 00  L.M.KM.åM.M.M.N.εN.
0002F6A0  F0 4E 01 00 F2 4E 01 00  0B 4F 01 00 0D 4F 01 00  10 50 01 00 12 50 01 00  50 51 01 00 60 53 01 00  N.N.O.O.P.P.PQ.`S.
0002F6C0  62 53 01 00 64 53 01 00  66 53 01 00 7E 53 01 00  80 53 01 00 AD 53 01 00  AF 53 01 00 C6 53 01 00  bS.dS.fS.~S.ÇS.¡S.»S.S.
0002F6E0  D7 53 01 00 F2 53 01 00  15 54 01 00 29 54 01 00  2B 54 01 00 6B 54 01 00  7B 54 01 00 7D 54 01 00  S.S.§T.)T.+T.kT.{T.}T.
0002F700  44 55 01 00 46 55 01 00  AB 55 01 00 AD 55 01 00  AF 55 01 00 CD 55 01 00  CF 55 01 00 91 56 01 00  DU.FU.½U.¡U.»U.U.U.æV.
0002F720  93 56 01 00 95 56 01 00  FA F4 FA EE FA FA FA FA  FA FA FA E8 FA E2 FA FA  FA FA FA FA FA EE FA FA  ôV.òV.··ε·······Φ·Γ·······ε··
0002F740  FA FA FA FA FA EE FA FA  FA FA FA FA FA DC FA FA  FA FA FA E2 FA DC D6 FA  FA FA FA FA D0 D0 D0 D0  ·····ε············Γ······
0002F760  D0 D0 D0 D0 D0 D0 FA CA  FA C4 FA D0 BE FA EE FA  FA 00 00 00 00 00 00 00  00 00 00 00 05 00 00 00  ····ε··..............
0002F780  00 00 00 00 05 01 00 00  05 00 00 02 30 2A F0 00  05 01 00 00 05 00 00 03  30 2A F0 00 05 01 00 00  ........0*.....0*...
0002F7A0  05 00 00 01 30 2A F0 00  05 01 00 00 05 00 00 00  00 00 00 00 05 03 00 00  05 00 00 05 30 2A F0 00  ..0*..............0*.
0002F7C0  05 03 00 00 05 00 00 04  30 2A F0 00 05 03 00 00  05 00 00 0A 30 2A F0 00  05 03 00 00 05 00 00 03  ....0*.....0*.....
0002F7E0  30 2A F0 00 05 03 00 00  05 00 00 06 30 2A F0 00  05 03 00 00 05 00 00 01  30 2A F0 00 05 03 00 49  0*.....0*.....0*..I
0002F800  95 56 01 00 A4 56 01 00  C7 56 01 00 C9 56 01 00  FC 56 01 00 FE 56 01 00  35 57 01 00 4D 57 01 00  òV.ñV.V.V.V.V.5W.MW.
0002F820  63 57 01 00 7F 57 01 00  81 57 01 00 B2 57 01 00  DE 57 01 00 15 58 01 00  17 58 01 00 56 59 01 00  cW.W.üW.W.W.§X.X.VY.
0002F840  58 59 01 00 AB 59 01 00  AD 59 01 00 DF 59 01 00  E1 59 01 00 E3 59 01 00  E5 59 01 00 F1 59 01 00  XY.½Y.¡Y.Y.ßY.πY.σY.±Y.
0002F860  14 5A 01 00 16 5A 01 00  42 5A 01 00 44 5A 01 00  60 5A 01 00 62 5A 01 00  8A 5A 01 00 8C 5A 01 00  Z.Z.BZ.DZ.`Z.bZ.èZ.îZ.
0002F880  7A 5B 01 00 7C 5B 01 00  B5 5B 01 00 B7 5B 01 00  D8 5B 01 00 DA 5B 01 00  EA 5B 01 00 0D 5C 01 00  z[.|[.[.[.[.[.Ω[.\.
0002F8A0  0F 5C 01 00 48 5C 01 00  4A 5C 01 00 86 5C 01 00  99 5C 01 00 B4 5C 01 00  D0 5C 01 00 E6 5C 01 00  \.H\.J\.å\.Ö\.\.\.µ\.
0002F8C0  F4 5C 01 00 F6 5C 01 00  2A 5D 01 00 56 5D 01 00  85 5D 01 00 B1 5D 01 00  EB 5D 01 00 ED 5D 01 00  \.÷\.*].V].à].].δ].φ].
0002F8E0  E0 60 01 00 E2 60 01 00  0C 61 01 00 39 61 01 00  3B 61 01 00 7B 61 01 00  BC 61 01 00 BE 61 01 00  α`.Γ`.a.9a.;a.{a.a.a.
0002F900  E7 61 01 00 E9 61 01 00  EB 61 01 00 FE 61 01 00  21 62 01 00 23 62 01 00  55 62 01 00 57 62 01 00  τa.Θa.δa.a.!b.#b.Ub.Wb.
0002F920  79 62 01 00 7B 62 01 00  A9 62 01 00 AB 62 01 00  67 63 01 00 69 63 01 00  AC 63 01 00 AE 63 01 00  yb.{b.b.½b.gc.ic.¼c.«c.
0002F940  E6 63 01 00 E8 63 01 00  EA 63 01 00 EC 63 01 00  FB 63 01 00 1E 64 01 00  20 64 01 00 48 64 01 00  µc.Φc.Ωc.c.c.d. d.Hd.
0002F960  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB F6 FB  F1 FB FB FB FB FB FB FB  FB FB FB FB FB FB FB EC  ÷±
0002F980  FB FB FB FB FB E7 FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB E2  FB FB FB FB FB FB FB FB  τΓ
0002F9A0  FB FB E7 FB FB FB FB FB  FB FB FB DD FB FB FB FB  FB FB FB FB FB FB FB 00  00 00 04 05 00 03 30 2A  τ....0*
0002F9C0  F0 00 00 00 04 05 00 0D  30 2A F0 00 00 00 04 05  00 00 00 00 00 00 00 00  04 05 00 04 30 2A F0 00  ....0*............0*.
0002F9E0  00 00 04 05 00 02 30 2A  F0 00 00 00 04 05 00 05  30 2A F0 00 00 00 04 05  00 01 30 2A F0 00 00 57  ...0*....0*....0*..W
0002FA00  48 64 01 00 4A 64 01 00  6C 64 01 00 87 64 01 00  89 64 01 00 C4 64 01 00  C6 64 01 00 81 65 01 00  Hd.Jd.ld.çd.ëd.d.d.üe.
0002FA20  83 65 01 00 AA 65 01 00  D6 65 01 00 D8 65 01 00  11 66 01 00 4E 66 01 00  50 66 01 00 91 66 01 00  âe.¬e.e.e.f.Nf.Pf.æf.
0002FA40  93 66 01 00 95 66 01 00  A4 66 01 00 C7 66 01 00  C9 66 01 00 02 67 01 00  04 67 01 00 29 67 01 00  ôf.òf.ñf.f.f.g.g.)g.
0002FA60  38 67 01 00 50 67 01 00  52 67 01 00 83 67 01 00  AD 67 01 00 AF 67 01 00  A6 68 01 00 A8 68 01 00  8g.Pg.Rg.âg.¡g.»g.ªh.¿h.
0002FA80  D4 68 01 00 D6 68 01 00  D8 68 01 00 DA 68 01 00  EE 68 01 00 11 69 01 00  13 69 01 00 3A 69 01 00  h.h.h.h.εh.i.i.:i.
0002FAA0  3C 69 01 00 61 69 01 00  63 69 01 00 8A 69 01 00  8C 69 01 00 46 6A 01 00  48 6A 01 00 75 6A 01 00  <i.ai.ci.èi.îi.Fj.Hj.uj.
0002FAC0  77 6A 01 00 79 6A 01 00  7B 6A 01 00 8E 6A 01 00  B1 6A 01 00 B3 6A 01 00  DA 6A 01 00 DC 6A 01 00  wj.yj.{j.Äj.j.j.j.j.
0002FAE0  00 6B 01 00 02 6B 01 00  28 6B 01 00 2A 6B 01 00  EA 6B 01 00 EC 6B 01 00  17 6C 01 00 2C 6C 01 00  .k.k.(k.*k.Ωk.k.l.,l.
0002FB00  4F 6C 01 00 51 6C 01 00  87 6C 01 00 89 6C 01 00  AE 6C 01 00 B0 6C 01 00  D7 6C 01 00 D9 6C 01 00  Ol.Ql.çl.ël.«l.l.l.l.
0002FB20  E9 6D 01 00 EB 6D 01 00  18 6E 01 00 1A 6E 01 00  1C 6E 01 00 1E 6E 01 00  31 6E 01 00 54 6E 01 00  Θm.δm.n.n.n.n.1n.Tn.
0002FB40  56 6E 01 00 7C 6E 01 00  7E 6E 01 00 A2 6E 01 00  A4 6E 01 00 CA 6E 01 00  CC 6E 01 00 99 6F 01 00  Vn.|n.~n.ón.ñn.n.n.Öo.
0002FB60  9B 6F 01 00 C9 6F 01 00  CB 6F 01 00 CD 6F 01 00  FB FB FB FB FB FB F6 FB  FB FB FB FB FB FB FB FB  ¢o.o.o.o.÷
0002FB80  FB F1 FB FB FB FB FB FB  FB FB FB FB FB EC FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB F6 FB FB FB  ±÷
0002FBA0  FB FB FB FB FB FB FB FB  FB FB FB F6 FB FB F1 FB  FB FB FB FB FB FB FB E7  FB FB FB FB FB FB FB FB  ÷±τ
0002FBC0  FB FB FB FB FB FB EC FB  FB FB FB 00 00 00 04 05  00 05 30 2A F0 00 00 00  04 05 00 04 30 2A F0 00  ....0*....0*.
0002FBE0  00 00 04 05 00 00 00 00  00 00 00 00 04 05 00 03  30 2A F0 00 00 00 04 05  00 01 30 2A F0 00 00 5B  ...........0*....0*..[
0002FC00  CD 6F 01 00 CF 6F 01 00  E1 6F 01 00 04 70 01 00  06 70 01 00 31 70 01 00  33 70 01 00 56 70 01 00  o.o.ßo.p.p.1p.3p.Vp.
0002FC20  58 70 01 00 7D 70 01 00  7F 70 01 00 AC 71 01 00  AE 71 01 00 DA 71 01 00  EE 71 01 00 11 72 01 00  Xp.}p.p.¼q.«q.q.εq.r.
0002FC40  13 72 01 00 43 72 01 00  45 72 01 00 69 72 01 00  6B 72 01 00 91 72 01 00  93 72 01 00 30 73 01 00  r.Cr.Er.ir.kr.ær.ôr.0s.
0002FC60  32 73 01 00 60 73 01 00  62 73 01 00 64 73 01 00  66 73 01 00 76 73 01 00  99 73 01 00 9B 73 01 00  2s.`s.bs.ds.fs.vs.Ös.¢s.
0002FC80  D5 73 01 00 D7 73 01 00  F7 73 01 00 F9 73 01 00  25 74 01 00 27 74 01 00  AC 74 01 00 AE 74 01 00  s.s.s.s.%t.'t.¼t.«t.
0002FCA0  E4 74 01 00 E6 74 01 00  17 75 01 00 19 75 01 00  1B 75 01 00 1D 75 01 00  2D 75 01 00 50 75 01 00  Σt.µt.u.u.u.u.-u.Pu.
0002FCC0  52 75 01 00 88 75 01 00  8A 75 01 00 AA 75 01 00  AC 75 01 00 CE 75 01 00  D0 75 01 00 4B 76 01 00  Ru.êu.èu.¬u.¼u.u.u.Kv.
0002FCE0  4D 76 01 00 83 76 01 00  85 76 01 00 B6 76 01 00  C6 76 01 00 E9 76 01 00  EB 76 01 00 2A 77 01 00  Mv.âv.àv.v.v.Θv.δv.*w.
0002FD00  2C 77 01 00 4B 77 01 00  4D 77 01 00 6E 77 01 00  70 77 01 00 F5 77 01 00  F7 77 01 00 2D 78 01 00  ,w.Kw.Mw.nw.pw.w.w.-x.
0002FD20  2F 78 01 00 5E 78 01 00  60 78 01 00 62 78 01 00  77 78 01 00 9A 78 01 00  9C 78 01 00 DA 78 01 00  /x.^x.`x.bx.wx.Üx.£x.x.
0002FD40  DC 78 01 00 06 79 01 00  18 79 01 00 1A 79 01 00  54 79 01 00 56 79 01 00  39 7A 01 00 3B 7A 01 00  x.y.y.y.Ty.Vy.9z.;z.
0002FD60  87 7A 01 00 89 7A 01 00  FB FB FB FB FB FB FB FB  FB FB F6 FB FB F1 FB FB  FB FB FB FB FB FB EC FB  çz.ëz.÷±
0002FD80  FB FB FB FB FB FB FB FB  FB FB FB FB FB E7 FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB E7 FB  ττ
0002FDA0  FB FB FB F1 FB FB FB FB  FB FB FB FB EC FB FB FB  FB FB FB F1 FB FB FB FB  FB FB FB FB FB E2 FB E7  ±±Γτ
0002FDC0  FB 00 00 00 04 05 00 04  30 2A F0 00 00 00 04 05  00 02 30 2A F0 00 00 00  04 05 00 03 30 2A F0 00  ....0*....0*....0*.
0002FDE0  00 00 04 05 00 00 00 00  00 00 00 00 04 05 00 05  30 2A F0 00 00 00 04 05  00 01 30 2A F0 00 00 59  ...........0*....0*..Y
0002FE00  89 7A 01 00 91 7A 01 00  13 7C 01 00 15 7C 01 00  1D 7C 01 00 32 7C 01 00  34 7C 01 00 4D 7C 01 00  ëz.æz.|.§|.|.2|.4|.M|.
0002FE20  87 7C 01 00 93 7C 01 00  9F 7C 01 00 AA 7C 01 00  AC 7C 01 00 B4 7C 01 00  E2 7C 01 00 FD 7C 01 00  ç|.ô|.ƒ|.¬|.¼|.|.Γ|.²|.
0002FE40  34 7D 01 00 55 7D 01 00  5D 7D 01 00 5F 7D 01 00  02 7E 01 00 04 7E 01 00  06 7E 01 00 1D 7E 01 00  4}.U}.]}._}.~.~.~.~.
0002FE60  40 7E 01 00 42 7E 01 00  7E 7E 01 00 80 7E 01 00  AC 7E 01 00 BE 7E 01 00  C0 7E 01 00 02 7F 01 00  @~.B~.~~.Ç~.¼~.~.~..
0002FE80  04 7F 01 00 28 80 01 00  2A 80 01 00 76 80 01 00  78 80 01 00 80 80 01 00  B2 80 01 00 B4 80 01 00  .(Ç.*Ç.vÇ.xÇ.ÇÇ.Ç.Ç.
0002FEA0  D4 80 01 00 D6 80 01 00  D8 80 01 00 DA 80 01 00  F0 80 01 00 13 81 01 00  15 81 01 00 52 81 01 00  Ç.Ç.Ç.Ç.Ç.ü.§ü.Rü.
0002FEC0  54 81 01 00 80 81 01 00  92 81 01 00 94 81 01 00  D9 81 01 00 DB 81 01 00  3A 83 01 00 3C 83 01 00  Tü.Çü.Æü.öü.ü.ü.:â.<â.
0002FEE0  88 83 01 00 8A 83 01 00  92 83 01 00 C4 83 01 00  C6 83 01 00 E6 83 01 00  E8 83 01 00 FD 83 01 00  êâ.èâ.Æâ.â.â.µâ.Φâ.²â.
0002FF00  20 84 01 00 22 84 01 00  50 84 01 00 52 84 01 00  7C 84 01 00 8E 84 01 00  90 84 01 00 CA 84 01 00   ä."ä.Pä.Rä.|ä.Ää.Éä.ä.
0002FF20  CC 84 01 00 98 85 01 00  9A 85 01 00 E6 85 01 00  E8 85 01 00 F0 85 01 00  22 86 01 00 24 86 01 00  ä.ÿà.Üà.µà.Φà.à."å.$å.
0002FF40  53 86 01 00 55 86 01 00  57 86 01 00 59 86 01 00  6D 86 01 00 90 86 01 00  FB F6 FB FB FB FB FB FB  Så.Uå.Wå.Yå.må.Éå.÷
0002FF60  FB FB FB FB FB FB FB FB  FB FB FB F1 FB FB EC FB  FB FB FB FB FB FB FB FB  E7 FB E2 FB FB FB FB FB  ±τΓ
0002FF80  FB FB FB FB FB FB FB FB  FB FB FB FB FB DD FB E2  FB FB FB FB FB FB EC FB  FB FB FB FB FB FB FB FB  Γ
0002FFA0  D8 FB E2 FB FB FB FB FB  FB FB FB FB FB 00 00 00  04 05 00 04 30 2A F0 00  00 00 04 05 00 06 30 2A  Γ....0*....0*
0002FFC0  F0 00 00 00 04 05 00 02  30 2A F0 00 00 00 04 05  00 05 30 2A F0 00 00 00  04 05 00 00 00 00 00 00  ....0*....0*.........
0002FFE0  00 00 04 05 00 03 30 2A  F0 00 00 00 04 05 00 07  30 2A F0 00 00 00 04 05  00 01 30 2A F0 00 00 55  ...0*....0*....0*..U
00030000  90 86 01 00 92 86 01 00  BF 86 01 00 C1 86 01 00  EB 86 01 00 FD 86 01 00  FF 86 01 00 39 87 01 00  Éå.Æå.å.å.δå.²å. å.9ç.
00030020  3B 87 01 00 07 88 01 00  09 88 01 00 55 88 01 00  57 88 01 00 5F 88 01 00  91 88 01 00 93 88 01 00  ;ç.ê.ê.Uê.Wê._ê.æê.ôê.
00030040  C2 88 01 00 C4 88 01 00  D7 88 01 00 FA 88 01 00  FC 88 01 00 39 89 01 00  3B 89 01 00 63 89 01 00  ê.ê.ê.·ê.ê.9ë.;ë.cë.
00030060  75 89 01 00 77 89 01 00  B4 89 01 00 B6 89 01 00  EA 8A 01 00 F6 8B 01 00  F8 8B 01 00 44 8C 01 00  uë.wë.ë.ë.Ωè.÷ï.°ï.Dî.
00030080  46 8C 01 00 4E 8C 01 00  80 8C 01 00 82 8C 01 00  84 8C 01 00 86 8C 01 00  9A 8C 01 00 BD 8C 01 00  Fî.Nî.Çî.éî.äî.åî.Üî.î.
000300A0  BF 8C 01 00 02 8D 01 00  04 8D 01 00 2E 8D 01 00  40 8D 01 00 42 8D 01 00  81 8D 01 00 83 8D 01 00  î.ì.ì..ì.@ì.Bì.üì.âì.
000300C0  2B 8F 01 00 2D 8F 01 00  79 8F 01 00 7B 8F 01 00  83 8F 01 00 B5 8F 01 00  CA 8F 01 00 ED 8F 01 00  +Å.-Å.yÅ.{Å.âÅ.Å.Å.φÅ.
000300E0  EF 8F 01 00 33 90 01 00  35 90 01 00 64 90 01 00  76 90 01 00 78 90 01 00  B2 90 01 00 B4 90 01 00  Å.3É.5É.dÉ.vÉ.xÉ.É.É.
00030100  18 92 01 00 EF 92 01 00  F1 92 01 00 3D 93 01 00  3F 93 01 00 47 93 01 00  79 93 01 00 7B 93 01 00  Æ.Æ.±Æ.=ô.?ô.Gô.yô.{ô.
00030120  7D 93 01 00 7F 93 01 00  90 93 01 00 B3 93 01 00  B5 93 01 00 F0 93 01 00  F2 93 01 00 1E 94 01 00  }ô.ô.Éô.ô.ô.ô.ô.ö.
00030140  30 94 01 00 32 94 01 00  69 94 01 00 6B 94 01 00  2F 95 01 00 31 95 01 00  FB FB FB FB FB FB FB FB  0ö.2ö.iö.kö./ò.1ò.
00030160  F6 FB F1 FB FB FB FB FB  FB EC FB FB FB FB FB FB  FB FB FB E7 E7 FB F1 FB  FB FB FB FB FB FB FB FB  ÷±ττ±
00030180  FB FB FB FB FB FB FB E2  FB F1 FB FB FB EC FB FB  FB FB FB FB FB FB FB DD  F6 FB F1 FB FB FB FB FB  Γ±÷±
000301A0  FB FB FB FB FB FB FB FB  FB FB FB D8 FB 00 00 00  04 05 00 03 30 2A F0 00  00 00 04 05 00 06 30 2A  ....0*....0*
000301C0  F0 00 00 00 04 05 00 07  30 2A F0 00 00 00 04 05  00 05 30 2A F0 00 00 00  04 05 00 00 00 00 00 00  ....0*....0*.........
000301E0  00 00 04 05 00 02 30 2A  F0 00 00 00 04 05 00 04  30 2A F0 00 00 00 04 05  00 01 30 2A F0 00 00 55  ...0*....0*....0*..U
00030200  31 95 01 00 7D 95 01 00  7F 95 01 00 87 95 01 00  B9 95 01 00 BB 95 01 00  CB 95 01 00 EE 95 01 00  1ò.}ò.ò.çò.ò.ò.ò.εò.
00030220  F0 95 01 00 40 96 01 00  42 96 01 00 6B 96 01 00  6D 96 01 00 98 96 01 00  9A 96 01 00 79 97 01 00  ò.@û.Bû.kû.mû.ÿû.Üû.yù.
00030240  7B 97 01 00 AC 97 01 00  AE 97 01 00 D7 97 01 00  F4 97 01 00 2D 98 01 00  2F 98 01 00 31 98 01 00  {ù.¼ù.«ù.ù.ù.-ÿ./ÿ.1ÿ.
00030260  33 98 01 00 35 98 01 00  44 98 01 00 67 98 01 00  69 98 01 00 B9 98 01 00  BB 98 01 00 E1 98 01 00  3ÿ.5ÿ.Dÿ.gÿ.iÿ.ÿ.ÿ.ßÿ.
00030280  E3 98 01 00 0E 99 01 00  10 99 01 00 42 9A 01 00  44 9A 01 00 75 9A 01 00  77 9A 01 00 A0 9A 01 00  πÿ.Ö.Ö.BÜ.DÜ.uÜ.wÜ.áÜ.
000302A0  BD 9A 01 00 E4 9A 01 00  E6 9A 01 00 E8 9A 01 00  F8 9A 01 00 1B 9B 01 00  1D 9B 01 00 59 9B 01 00  Ü.ΣÜ.µÜ.ΦÜ.°Ü.¢.¢.Y¢.
000302C0  5B 9B 01 00 81 9B 01 00  83 9B 01 00 AE 9B 01 00  B0 9B 01 00 21 9C 01 00  23 9C 01 00 4B 9C 01 00  [¢.ü¢.â¢.«¢.¢.!£.#£.K£.
000302E0  4D 9C 01 00 83 9C 01 00  A0 9C 01 00 C7 9C 01 00  C9 9C 01 00 CB 9C 01 00  CD 9C 01 00 DC 9C 01 00  M£.â£.á£.£.£.£.£.£.
00030300  FF 9C 01 00 01 9D 01 00  3A 9D 01 00 3C 9D 01 00  65 9D 01 00 7D 9D 01 00  9A 9D 01 00 9C 9D 01 00   £.¥.:¥.<¥.e¥.}¥.Ü¥.£¥.
00030320  D4 9D 01 00 12 9E 01 00  14 9E 01 00 1B A0 01 00  1D A0 01 00 47 A0 01 00  88 A0 01 00 8A A0 01 00  ¥...á.á.Gá.êá.èá.
00030340  C6 A0 01 00 00 A1 01 00  02 A1 01 00 2A A1 01 00  47 A1 01 00 80 A1 01 00  8F A1 01 00 B2 A1 01 00  á..í.í.*í.Gí.Çí.Åí.í.
00030360  B4 A1 01 00 FF A1 01 00  FB F6 F6 F6 F6 F1 F6 F6  FB F6 F6 F6 F6 F6 EC F6  F6 F6 F6 F6 F6 F6 F6 F6  í. í.÷÷÷÷±÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷
00030380  F6 F6 F6 F6 FB F6 F6 F6  F6 F6 E7 F6 F6 F6 F6 F6  F6 F6 F6 F1 F6 F6 F6 F6  F6 F6 F6 F6 FB F6 F6 F6  ÷÷÷÷÷÷÷÷÷τ÷÷÷÷÷÷÷÷±÷÷÷÷÷÷÷÷÷÷÷
000303A0  F6 F6 F6 F6 F6 F6 F6 F6  F6 F6 F6 F6 F6 F6 F6 F6  F6 F6 E2 F6 F6 F6 F6 F6  F6 F6 F6 F6 F6 F1 F6 F6  ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷Γ÷÷÷÷÷÷÷÷÷÷±÷÷
000303C0  FB 00 00 00 04 05 00 09  30 2A F0 00 00 00 04 05  00 05 30 2A F0 00 00 00  04 05 00 04 30 2A F0 00  ....0*....0*....0*.
000303E0  00 00 04 05 00 00 00 00  00 00 00 00 04 05 00 01  30 2A F0 00 00 00 04 05  00 02 30 2A F0 00 00 59  ...........0*....0*..Y
00030400  FF A1 01 00 01 A2 01 00  28 A2 01 00 40 A2 01 00  5C A2 01 00 5E A2 01 00  92 A2 01 00 CC A2 01 00   í.ó.(ó.@ó.\ó.^ó.Æó.ó.
00030420  CE A2 01 00 5A A3 01 00  5C A3 01 00 86 A3 01 00  C6 A3 01 00 C8 A3 01 00  03 A4 01 00 3D A4 01 00  ó.Zú.\ú.åú.ú.ú.ñ.=ñ.
00030440  3F A4 01 00 66 A4 01 00  83 A4 01 00 BC A4 01 00  BE A4 01 00 C0 A4 01 00  C2 A4 01 00 D0 A4 01 00  ?ñ.fñ.âñ.ñ.ñ.ñ.ñ.ñ.
00030460  F3 A4 01 00 F5 A4 01 00  3A A5 01 00 3C A5 01 00  64 A5 01 00 66 A5 01 00  D0 A5 01 00 D2 A5 01 00  ñ.ñ.:Ñ.<Ñ.dÑ.fÑ.Ñ.Ñ.
00030480  C7 A6 01 00 C9 A6 01 00  39 A8 01 00 3B A8 01 00  75 A8 01 00 8C A8 01 00  AF A8 01 00 B1 A8 01 00  ª.ª.9¿.;¿.u¿.î¿.»¿.¿.
000304A0  E7 A8 01 00 E9 A8 01 00  10 A9 01 00 12 A9 01 00  3B A9 01 00 3D A9 01 00  E1 A9 01 00 E3 A9 01 00  τ¿.Θ¿...;.=.ß.π.
000304C0  18 AA 01 00 1A AA 01 00  1C AA 01 00 1E AA 01 00  34 AA 01 00 57 AA 01 00  59 AA 01 00 88 AA 01 00  ¬.¬.¬.¬.4¬.W¬.Y¬.ê¬.
000304E0  8A AA 01 00 B1 AA 01 00  B3 AA 01 00 DC AA 01 00  DE AA 01 00 53 AB 01 00  55 AB 01 00 8A AB 01 00  è¬.¬.¬.¬.¬.S½.U½.è½.
00030500  8C AB 01 00 8E AB 01 00  90 AB 01 00 A5 AB 01 00  C8 AB 01 00 CA AB 01 00  05 AC 01 00 07 AC 01 00  î½.Ľ.ɽ.ѽ.½.½.¼.¼.
00030520  2D AC 01 00 2F AC 01 00  57 AC 01 00 59 AC 01 00  00 AD 01 00 02 AD 01 00  38 AD 01 00 3A AD 01 00  -¼./¼.W¼.Y¼..¡.¡.8¡.:¡.
00030540  50 AD 01 00 73 AD 01 00  75 AD 01 00 A8 AD 01 00  AA AD 01 00 D0 AD 01 00  D2 AD 01 00 FA AD 01 00  P¡.s¡.u¡.¿¡.¬¡.¡.¡.·¡.
00030560  FC AD 01 00 FB FB FB FB  FB FB FB FB F6 FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  ¡.÷
00030580  FB F1 FB EC FB E7 FB FB  E2 FB FB FB FB FB FB FB  FB F6 FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  ±τΓ÷
000305A0  F1 FB FB FB FB FB FB FB  FB FB FB FB FB FB FB F6  FB FB FB E2 FB FB FB FB  FB FB FB FB 00 00 00 00  ±÷Γ....
000305C0  00 00 00 00 04 05 00 00  00 00 00 00 00 00 04 05  00 06 30 2A F0 00 00 00  04 05 00 04 30 2A F0 00  .............0*....0*.
000305E0  00 00 04 05 00 02 30 2A  F0 00 00 00 04 05 00 03  30 2A F0 00 00 00 04 05  00 01 30 2A F0 00 00 58  ...0*....0*....0*..X
00030600  FC AD 01 00 FA AF 01 00  FC AF 01 00 32 B0 01 00  34 B0 01 00 36 B0 01 00  38 B0 01 00 47 B0 01 00  ¡.·».».2.4.6.8.G.
00030620  6A B0 01 00 6C B0 01 00  99 B0 01 00 9B B0 01 00  C4 B0 01 00 C6 B0 01 00  EE B0 01 00 F0 B0 01 00  j.l.Ö.¢...ε..
00030640  F0 B1 01 00 F2 B1 01 00  0B B2 01 00 0D B2 01 00  3E B2 01 00 40 B2 01 00  42 B2 01 00 53 B2 01 00  ....>.@.B.S.
00030660  76 B2 01 00 78 B2 01 00  9A B2 01 00 9C B2 01 00  BD B2 01 00 BF B2 01 00  E2 B2 01 00 E4 B2 01 00  v.x.Ü.£...Γ.Σ.
00030680  6C B3 01 00 6E B3 01 00  A2 B3 01 00 A4 B3 01 00  A6 B3 01 00 A8 B3 01 00  B9 B3 01 00 DC B3 01 00  l.n.ó.ñ.ª.¿...
000306A0  DE B3 01 00 06 B4 01 00  08 B4 01 00 33 B4 01 00  35 B4 01 00 5F B4 01 00  61 B4 01 00 0A B5 01 00  ...3.5._.a..
000306C0  0C B5 01 00 3C B5 01 00  3E B5 01 00 66 B5 01 00  68 B5 01 00 6A B5 01 00  6C B5 01 00 6E B5 01 00  .<.>.f.h.j.l.n.
000306E0  7D B5 01 00 A0 B5 01 00  A2 B5 01 00 CE B5 01 00  D0 B5 01 00 F0 B5 01 00  08 B6 01 00 0A B6 01 00  }.á.ó......
00030700  39 B6 01 00 3B B6 01 00  E3 B6 01 00 E5 B6 01 00  05 B7 01 00 11 B7 01 00  34 B7 01 00 36 B7 01 00  9.;.π.σ...4.6.
00030720  7D B7 01 00 7F B7 01 00  A3 B7 01 00 BA B7 01 00  CA B7 01 00 CC B7 01 00  01 B8 01 00 3A B8 01 00  }..ú.....:.
00030740  3C B8 01 00 A5 BA 01 00  A7 BA 01 00 D1 BA 01 00  03 BB 01 00 44 BB 01 00  46 BB 01 00 7C BB 01 00  <.Ñ.º...D.F.|.
00030760  B6 BB 01 00 B8 BB 01 00  FB F6 F6 F6 F6 F6 F6 F6  F6 F6 F6 F6 F6 F6 F6 F1  F6 F6 F6 F6 F6 F6 EC F6  ..÷÷÷÷÷÷÷÷÷÷÷÷÷÷±÷÷÷÷÷÷÷
00030780  F6 F6 F6 F6 F6 F6 F6 E7  F6 F6 F6 F6 F6 F6 F6 F6  F6 F6 F6 F6 F6 F6 E7 F6  F6 F6 F6 F6 F6 F6 F6 F6  ÷÷÷÷÷÷÷τ÷÷÷÷÷÷÷÷÷÷÷÷÷÷τ÷÷÷÷÷÷÷÷÷
000307A0  F6 F6 F6 F6 F6 F6 F6 F6  F6 E7 F6 F6 EC F6 F6 F6  F6 F6 F6 F6 F6 F6 F6 F6  E2 F6 F6 F6 F6 F6 F6 F6  ÷÷÷÷÷÷÷÷÷τ÷÷÷÷÷÷÷÷÷÷÷÷÷Γ÷÷÷÷÷÷÷
000307C0  F6 00 00 00 04 05 00 0A  30 2A F0 00 00 00 04 05  00 03 30 2A F0 00 00 00  04 05 00 00 00 00 00 00  ÷....0*....0*.........
000307E0  00 00 04 05 00 04 30 2A  F0 00 00 00 04 05 00 01  30 2A F0 00 00 00 04 05  00 09 30 2A F0 00 00 59  ...0*....0*....0*..Y
00030800  B8 BB 01 00 DA BB 01 00  DC BB 01 00 DE BB 01 00  EE BB 01 00 11 BC 01 00  13 BC 01 00 4D BC 01 00  ....ε...M.
00030820  4F BC 01 00 85 BC 01 00  A0 BC 01 00 BC BC 01 00  BE BC 01 00 F1 BC 01 00  27 BD 01 00 29 BD 01 00  O.à.á...±.'.).
00030840  47 BF 01 00 49 BF 01 00  74 BF 01 00 76 BF 01 00  9C BF 01 00 9E BF 01 00  A0 BF 01 00 A2 BF 01 00  G.I.t.v.£..á.ó.
00030860  AD BF 01 00 D0 BF 01 00  D2 BF 01 00 25 C0 01 00  27 C0 01 00 46 C0 01 00  58 C0 01 00 5A C0 01 00  ¡...%.'.F.X.Z.
00030880  8F C0 01 00 91 C0 01 00  F6 C1 01 00 F8 C1 01 00  22 C2 01 00 63 C2 01 00  65 C2 01 00 A0 C2 01 00  Å.æ.÷.°.".c.e.á.
000308A0  E1 C2 01 00 E3 C2 01 00  F9 C2 01 00 09 C3 01 00  2C C3 01 00 2E C3 01 00  63 C3 01 00 65 C3 01 00  ß.π...,...c.e.
000308C0  97 C3 01 00 B2 C3 01 00  CE C3 01 00 E6 C3 01 00  E8 C3 01 00 1C C4 01 00  4B C4 01 00 78 C4 01 00  ù...µ.Φ..K.x.
000308E0  7A C4 01 00 77 C6 01 00  79 C6 01 00 A1 C6 01 00  A3 C6 01 00 A5 C6 01 00  B8 C6 01 00 DB C6 01 00  z.w.y.í.ú.Ñ...
00030900  DD C6 01 00 10 C7 01 00  12 C7 01 00 42 C7 01 00  58 C7 01 00 6F C7 01 00  7F C7 01 00 81 C7 01 00  ...B.X.o..ü.
00030920  B7 C7 01 00 E5 C7 01 00  21 C8 01 00 23 C8 01 00  73 C9 01 00 75 C9 01 00  9F C9 01 00 CC C9 01 00  .σ.!.#.s.u.ƒ..
00030940  CE C9 01 00 0B CA 01 00  4C CA 01 00 4E CA 01 00  67 CA 01 00 69 CA 01 00  6B CA 01 00 7D CA 01 00  ..L.N.g.i.k.}.
00030960  A0 CA 01 00 A2 CA 01 00  DB CA 01 00 DD CA 01 00  FB FB FB F6 FB FB FB FB  FB FB FB FB FB FB FB F1  á.ó...÷±
00030980  FB FB FB FB FB FB FB FB  FB FB EC FB FB FB FB FB  FB E7 FB FB FB FB FB FB  FB FB F6 FB FB FB FB FB  τ÷
000309A0  FB FB FB FB FB FB FB FB  F1 FB FB FB FB F6 FB FB  FB FB FB FB FB FB FB FB  FB FB FB E7 FB FB FB FB  ±÷τ
000309C0  FB FB FB FB FB FB F6 FB  FB FB FB 00 00 00 04 05  00 06 30 2A F0 00 00 00  04 05 00 02 30 2A F0 00  ÷....0*....0*.
000309E0  00 00 04 05 00 09 30 2A  F0 00 00 00 04 05 00 00  00 00 00 00 00 00 04 05  00 01 30 2A F0 00 00 5B  ...0*............0*..[
00030A00  DD CA 01 00 1E CB 01 00  2E CB 01 00 47 CB 01 00  60 CB 01 00 79 CB 01 00  92 CB 01 00 94 CB 01 00  ....G.`.y.Æ.ö.
00030A20  CA CB 01 00 FB CB 01 00  2C CC 01 00 5D CC 01 00  93 CC 01 00 95 CC 01 00  F6 CD 01 00 F8 CD 01 00  ..,.].ô.ò.÷.°.
00030A40  9A CE 01 00 9C CE 01 00  C5 CE 01 00 C7 CE 01 00  C9 CE 01 00 D6 CE 01 00  F9 CE 01 00 FB CE 01 00  Ü.£.......
00030A60  46 CF 01 00 48 CF 01 00  69 CF 01 00 85 CF 01 00  87 CF 01 00 BD CF 01 00  BF CF 01 00 43 D1 01 00  F.H.i.à.ç...C.
00030A80  45 D1 01 00 6F D1 01 00  B0 D1 01 00 B2 D1 01 00  EC D1 01 00 2D D2 01 00  2F D2 01 00 4F D2 01 00  E.o....-./.O.
00030AA0  51 D2 01 00 53 D2 01 00  65 D2 01 00 88 D2 01 00  8A D2 01 00 B9 D2 01 00  BB D2 01 00 F2 D2 01 00  Q.S.e.ê.è....
00030AC0  01 D3 01 00 19 D3 01 00  31 D3 01 00 49 D3 01 00  61 D3 01 00 63 D3 01 00  98 D3 01 00 C5 D3 01 00  ..1.I.a.c.ÿ..
00030AE0  F2 D3 01 00 1F D4 01 00  4D D4 01 00 4F D4 01 00  10 D6 01 00 12 D6 01 00  3F D6 01 00 41 D6 01 00  ..M.O...?.A.
00030B00  43 D6 01 00 45 D6 01 00  5E D6 01 00 81 D6 01 00  83 D6 01 00 C3 D6 01 00  C5 D6 01 00 F7 D6 01 00  C.E.^.ü.â....
00030B20  F9 D6 01 00 2B D7 01 00  2D D7 01 00 75 D7 01 00  77 D7 01 00 A2 D7 01 00  A4 D7 01 00 BF D7 01 00  .+.-.u.w.ó.ñ..
00030B40  C1 D7 01 00 C3 D7 01 00  D4 D7 01 00 F7 D7 01 00  F9 D7 01 00 27 D8 01 00  29 D8 01 00 54 D8 01 00  .....'.).T.
00030B60  FB FB FB FB FB FB FB FB  FB FB FB FB FB F6 FB F1  FB FB FB FB EC FB FB E7  FB FB FB FB FB FB E2 FB  ÷±τΓ
00030B80  FB FB FB FB FB FB FB FB  FB EC FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB DD FB FB FB FB  
00030BA0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB EC FB FB FB FB FB 00  00 00 04 05 00 08 30 2A  ....0*
00030BC0  F0 00 00 00 04 05 00 07  30 2A F0 00 00 00 04 05  00 02 30 2A F0 00 00 00  04 05 00 00 00 00 00 00  ....0*....0*.........
00030BE0  00 00 04 05 00 03 30 2A  F0 00 00 00 04 05 00 06  30 2A F0 00 00 00 04 05  00 01 30 2A F0 00 00 57  ...0*....0*....0*..W
00030C00  54 D8 01 00 63 D8 01 00  65 D8 01 00 A2 D8 01 00  A4 D8 01 00 E6 D8 01 00  E8 D8 01 00 18 D9 01 00  T.c.e.ó.ñ.µ.Φ..
00030C20  1A D9 01 00 33 D9 01 00  35 D9 01 00 37 D9 01 00  39 D9 01 00 4A D9 01 00  6D D9 01 00 6F D9 01 00  .3.5.7.9.J.m.o.
00030C40  9B D9 01 00 9D D9 01 00  C8 D9 01 00 D7 D9 01 00  D9 D9 01 00 14 DA 01 00  16 DA 01 00 F1 DA 01 00  ¢.¥......±.
00030C60  F3 DA 01 00 2B DB 01 00  2D DB 01 00 58 DB 01 00  5A DB 01 00 5C DB 01 00  6E DB 01 00 91 DB 01 00  .+.-.X.Z.\.n.æ.
00030C80  93 DB 01 00 E1 DB 01 00  E3 DB 01 00 1F DC 01 00  35 DC 01 00 50 DC 01 00  67 DC 01 00 75 DC 01 00  ô.ß.π..5.P.g.u.
00030CA0  85 DC 01 00 87 DC 01 00  BC DC 01 00 E9 DC 01 00  16 DD 01 00 46 DD 01 00  81 DD 01 00 83 DD 01 00  à.ç..Θ..F.ü.â.
00030CC0  FC E0 01 00 FE E0 01 00  28 E1 01 00 5E E1 01 00  9C E1 01 00 9E E1 01 00  D1 E1 01 00 12 E2 01 00  α.α.(ß.^ß.£ß.ß.ß.Γ.
00030CE0  14 E2 01 00 4B E2 01 00  5D E2 01 00 5F E2 01 00  74 E2 01 00 97 E2 01 00  99 E2 01 00 CD E2 01 00  Γ.KΓ.]Γ._Γ.tΓ.ùΓ.ÖΓ.Γ.
00030D00  CF E2 01 00 F3 E2 01 00  F5 E2 01 00 25 E3 01 00  27 E3 01 00 CE E3 01 00  D0 E3 01 00 F7 E3 01 00  Γ.Γ.Γ.%π.'π.π.π.π.
00030D20  14 E4 01 00 16 E4 01 00  58 E4 01 00 5A E4 01 00  75 E4 01 00 77 E4 01 00  79 E4 01 00 7B E4 01 00  Σ.Σ.XΣ.ZΣ.uΣ.wΣ.yΣ.{Σ.
00030D40  87 E4 01 00 AA E4 01 00  AC E4 01 00 CF E4 01 00  D1 E4 01 00 EF E4 01 00  FF E4 01 00 01 E5 01 00  çΣ.¬Σ.¼Σ.Σ.Σ.Σ. Σ.σ.
00030D60  3B E5 01 00 3D E5 01 00  BB E5 01 00 BD E5 01 00  E7 E5 01 00 FB FB FB FB  FB FB FB FB FB FB FB FB  ;σ.=σ.σ.σ.τσ.
00030D80  FB FB FB FB FB FB FB FB  FB FB F6 FB FB FB FB FB  FB F1 FB FB F1 F1 F1 F1  F1 F1 F1 F1 F1 F1 F1 F1  ÷±±±±±±±±±±±±±
00030DA0  F1 F1 F1 F1 F1 F1 F1 F1  F1 F1 F1 F1 F1 F1 F1 F1  F1 F1 F1 F1 F1 F1 F1 F1  F1 F1 F1 E9 E9 E9 F1 F1  ±±±±±±±±±±±±±±±±±±±±±±±±±±±ΘΘΘ±±
00030DC0  F1 F1 F1 F1 F1 F1 F1 F1  F1 F1 F1 F1 F1 F1 F1 F1  00 00 07 05 00 00 00 00  00 00 0F 05 00 01 7C 29  ±±±±±±±±±±±±±±±±.........|)
00030DE0  00 00 04 05 00 00 00 00  00 00 00 00 04 05 00 04  30 2A F0 00 00 00 04 05  00 01 30 2A F0 00 00 5C  ...........0*....0*..\
00030E00  E7 E5 01 00 22 E6 01 00  24 E6 01 00 54 E6 01 00  8E E6 01 00 90 E6 01 00  B1 E6 01 00 B3 E6 01 00  τσ."µ.$µ.Tµ.ĵ.ɵ.µ.µ.
00030E20  B5 E6 01 00 C7 E6 01 00  EA E6 01 00 EC E6 01 00  15 E7 01 00 17 E7 01 00  3F E7 01 00 4E E7 01 00  µ.µ.Ωµ.µ.§τ.τ.?τ.Nτ.
00030E40  5C E7 01 00 5E E7 01 00  92 E7 01 00 BF E7 01 00  C1 E7 01 00 CB E8 01 00  CD E8 01 00 CF E8 01 00  \τ.^τ.Æτ.τ.τ.Φ.Φ.Φ.
00030E60  D1 E8 01 00 E4 E8 01 00  07 E9 01 00 09 E9 01 00  38 E9 01 00 3A E9 01 00  68 E9 01 00 77 E9 01 00  Φ.ΣΦ.Θ.Θ.8Θ.:Θ.hΘ.wΘ.
00030E80  93 E9 01 00 95 E9 01 00  CF E9 01 00 05 EA 01 00  07 EA 01 00 BF EA 01 00  C1 EA 01 00 C3 EA 01 00  ôΘ.òΘ.Θ.Ω.Ω.Ω.Ω.Ω.
00030EA0  C5 EA 01 00 D7 EA 01 00  FA EA 01 00 FC EA 01 00  22 EB 01 00 24 EB 01 00  4D EB 01 00 5C EB 01 00  Ω.Ω.·Ω.Ω."δ.$δ.Mδ.\δ.
00030EC0  74 EB 01 00 76 EB 01 00  AB EB 01 00 D9 EB 01 00  DB EB 01 00 5E EC 01 00  78 EC 01 00 9B EC 01 00  tδ.vδ.½δ.δ.δ.^.x.¢.
00030EE0  9D EC 01 00 C2 EC 01 00  C4 EC 01 00 EE EC 01 00  08 ED 01 00 0A ED 01 00  46 ED 01 00 48 ED 01 00  ¥...ε.φ.φ.Fφ.Hφ.
00030F00  0C EE 01 00 0E EE 01 00  10 EE 01 00 12 EE 01 00  21 EE 01 00 44 EE 01 00  46 EE 01 00 80 EE 01 00  ε.ε.ε.ε.!ε.Dε.Fε.Çε.
00030F20  82 EE 01 00 AC EE 01 00  BB EE 01 00 D7 EE 01 00  D9 EE 01 00 0E EF 01 00  3F EF 01 00 41 EF 01 00  éε.¼ε.ε.ε.ε..?.A.
00030F40  9A F0 01 00 9C F0 01 00  9E F0 01 00 B0 F0 01 00  D3 F0 01 00 D5 F0 01 00  FE F0 01 00 00 F1 01 00  Ü.£.......±.
00030F60  28 F1 01 00 37 F1 01 00  4E F1 01 00 50 F1 01 00  88 F1 01 00 BC F1 01 00  BE F1 01 00 66 F2 01 00  (±.7±.N±.P±.ê±.±.±.f.
00030F80  68 F2 01 00 84 F2 01 00  95 F2 01 00 B8 F2 01 00  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  h.ä.ò..
00030FA0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
00030FC0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
00030FE0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB 00 00 00 04 05  00 00 00 00 00 00 00 63  ..........c
00031000  B8 F2 01 00 BA F2 01 00  F1 F2 01 00 F3 F2 01 00  1C F3 01 00 2B F3 01 00  47 F3 01 00 49 F3 01 00  ..±...+.G.I.
00031020  7D F3 01 00 AA F3 01 00  AC F3 01 00 4F F4 01 00  51 F4 01 00 71 F4 01 00  73 F4 01 00 75 F4 01 00  }.¬.¼.O.Q.q.s.u.
00031040  77 F4 01 00 86 F4 01 00  A9 F4 01 00 AB F4 01 00  ED F4 01 00 EF F4 01 00  0E F5 01 00 10 F5 01 00  w.å..½.φ....
00031060  3B F5 01 00 EE F5 01 00  F0 F5 01 00 BB F6 01 00  BD F6 01 00 EF F6 01 00  F1 F6 01 00 09 F7 01 00  ;.ε..÷.÷.÷.±÷..
00031080  0B F7 01 00 0D F7 01 00  1F F7 01 00 42 F7 01 00  44 F7 01 00 7D F7 01 00  7F F7 01 00 AB F7 01 00  ...B.D.}..½.
000310A0  BA F7 01 00 D6 F7 01 00  D8 F7 01 00 0F F8 01 00  3F F8 01 00 41 F8 01 00  C5 F9 01 00 DA FA 01 00  ...°.?°.A°..·.
000310C0  6D FB 01 00 6F FB 01 00  9C FB 01 00 C8 FB 01 00  CA FB 01 00 7C FC 01 00  7E FC 01 00 80 FC 01 00  m.o.£...|.~.Ç.
000310E0  92 FC 01 00 B5 FC 01 00  B7 FC 01 00 E6 FC 01 00  E8 FC 01 00 20 FD 01 00  2F FD 01 00 48 FD 01 00  Æ...µ.Φ. ²./².H².
00031100  61 FD 01 00 7A FD 01 00  93 FD 01 00 95 FD 01 00  CA FD 01 00 FA FD 01 00  2A FE 01 00 5A FE 01 00  a².z².ô².ò².².·².*.Z.
00031120  88 FE 01 00 8A FE 01 00  CF FF 01 00 D1 FF 01 00  FF FF 01 00 01 00 02 00  03 00 02 00 05 00 02 00  ê.è. . .  .......
00031140  15 00 02 00 38 00 02 00  3A 00 02 00 79 00 02 00  7B 00 02 00 9D 00 02 00  AC 00 02 00 AE 00 02 00  §..8..:..y..{..¥..¼..«..
00031160  E2 00 02 00 E4 00 02 00  A5 01 02 00 A7 01 02 00  C2 01 02 00 C4 01 02 00  D5 01 02 00 F8 01 02 00  Γ..Σ..Ñ.º....°.
00031180  FA 01 02 00 26 02 02 00  28 02 02 00 4A 02 02 00  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  ·.&.(.J.
000311A0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000311C0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000311E0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB 00 00 00 04 05  00 00 00 00 00 00 00 63  ..........c
00031200  4A 02 02 00 59 02 02 00  5B 02 02 00 8F 02 02 00  91 02 02 00 71 03 02 00  73 03 02 00 A0 03 02 00  J.Y.[.Å.æ.q.s.á.
00031220  A2 03 02 00 A4 03 02 00  A6 03 02 00 B7 03 02 00  DA 03 02 00 DC 03 02 00  0E 04 02 00 10 04 02 00  ó.ñ.ª......
00031240  33 04 02 00 42 04 02 00  44 04 02 00 79 04 02 00  7B 04 02 00 1C 05 02 00  1E 05 02 00 50 05 02 00  3.B.D.y.{...P.
00031260  52 05 02 00 54 05 02 00  56 05 02 00 69 05 02 00  8C 05 02 00 8E 05 02 00  BF 05 02 00 C1 05 02 00  R.T.V.i.î.Ä...
00031280  E5 05 02 00 F4 05 02 00  F6 05 02 00 36 06 02 00  38 06 02 00 86 06 02 00  88 06 02 00 BB 06 02 00  σ..÷.6.8.å.ê..
000312A0  BD 06 02 00 E8 06 02 00  FC 06 02 00 1F 07 02 00  21 07 02 00 59 07 02 00  5B 07 02 00 80 07 02 00  .Φ...!.Y.[.Ç.
000312C0  99 07 02 00 9B 07 02 00  D0 07 02 00 D2 07 02 00  B9 09 02 00 BB 09 02 00  BD 09 02 00 CA 09 02 00  Ö.¢.......
000312E0  ED 09 02 00 EF 09 02 00  30 0A 02 00 32 0A 02 00  6C 0A 02 00 80 0A 02 00  9B 0A 02 00 B7 0A 02 00  φ..0.2.l.Ç.¢..
00031300  CE 0A 02 00 DE 0A 02 00  E0 0A 02 00 12 0B 02 00  3C 0B 02 00 69 0B 02 00  93 0B 02 00 CB 0B 02 00  ..α..<.i.ô..
00031320  CD 0B 02 00 63 0D 02 00  65 0D 02 00 8F 0D 02 00  BC 0D 02 00 BE 0D 02 00  FE 0D 02 00 3F 0E 02 00  .c.e.Å....?.
00031340  41 0E 02 00 6C 0E 02 00  81 0E 02 00 A4 0E 02 00  A6 0E 02 00 EC 0E 02 00  EE 0E 02 00 25 0F 02 00  A.l.ü.ñ.ª..ε.%.
00031360  34 0F 02 00 4A 0F 02 00  62 0F 02 00 7A 0F 02 00  7C 0F 02 00 B2 0F 02 00  E0 0F 02 00 0E 10 02 00  4.J.b.z.|..α..
00031380  3D 10 02 00 3F 10 02 00  02 11 02 00 04 11 02 00  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  =.?...
000313A0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000313C0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000313E0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB 00 00 00 04 05  00 00 00 00 00 00 00 63  ..........c
00031400  04 11 02 00 30 11 02 00  32 11 02 00 34 11 02 00  36 11 02 00 44 11 02 00  67 11 02 00 69 11 02 00  .0.2.4.6.D.g.i.
00031420  A5 11 02 00 A7 11 02 00  CD 11 02 00 DD 11 02 00  ED 11 02 00 EF 11 02 00  21 12 02 00 4F 12 02 00  Ñ.º...φ..!.O.
00031440  51 12 02 00 C3 12 02 00  C5 12 02 00 09 13 02 00  0B 13 02 00 26 13 02 00  28 13 02 00 2A 13 02 00  Q.....&.(.*.
00031460  3C 13 02 00 5F 13 02 00  61 13 02 00 A9 13 02 00  AB 13 02 00 D1 13 02 00  D3 13 02 00 FF 13 02 00  <._.a..½... .
00031480  01 14 02 00 73 14 02 00  75 14 02 00 B6 14 02 00  B8 14 02 00 D0 14 02 00  D2 14 02 00 D4 14 02 00  .s.u......
000314A0  D6 14 02 00 E9 14 02 00  0C 15 02 00 0E 15 02 00  3E 15 02 00 40 15 02 00  64 15 02 00 73 15 02 00  .Θ.§.§.>§.@§.d§.s§.
000314C0  75 15 02 00 B5 15 02 00  B7 15 02 00 04 16 02 00  06 16 02 00 3F 16 02 00  41 16 02 00 43 16 02 00  u§.§.§...?.A.C.
000314E0  45 16 02 00 59 16 02 00  7C 16 02 00 7E 16 02 00  C9 16 02 00 CB 16 02 00  F0 16 02 00 FF 16 02 00  E.Y.|.~.... .
00031500  01 17 02 00 42 17 02 00  44 17 02 00 D8 17 02 00  DA 17 02 00 18 18 02 00  1A 18 02 00 4C 18 02 00  .B.D.....L.
00031520  5F 18 02 00 82 18 02 00  84 18 02 00 BB 18 02 00  BD 18 02 00 E0 18 02 00  E2 18 02 00 07 19 02 00  _.é.ä...α.Γ..
00031540  09 19 02 00 9F 19 02 00  A1 19 02 00 C7 19 02 00  C9 19 02 00 CB 19 02 00  CD 19 02 00 E1 19 02 00  .ƒ.í.....ß.
00031560  04 1A 02 00 06 1A 02 00  42 1A 02 00 44 1A 02 00  69 1A 02 00 6B 1A 02 00  92 1A 02 00 94 1A 02 00  ..B.D.i.k.Æ.ö.
00031580  FE 1A 02 00 00 1B 02 00  1B 1B 02 00 1D 1B 02 00  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  .....
000315A0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000315C0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000315E0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB 00 00 00 04 05  00 00 00 00 00 00 00 63  ..........c
00031600  1D 1B 02 00 1F 1B 02 00  31 1B 02 00 54 1B 02 00  56 1B 02 00 92 1B 02 00  94 1B 02 00 C2 1B 02 00  ..1.T.V.Æ.ö..
00031620  D5 1B 02 00 E7 1B 02 00  E9 1B 02 00 2F 1C 02 00  31 1C 02 00 7F 1D 02 00  81 1D 02 00 B2 1D 02 00  .τ.Θ./.1..ü..
00031640  F0 1D 02 00 2A 1E 02 00  2C 1E 02 00 6B 1E 02 00  A5 1E 02 00 A7 1E 02 00  D4 1E 02 00 D6 1E 02 00  .*.,.k.Ñ.º...
00031660  D8 1E 02 00 DA 1E 02 00  EC 1E 02 00 0F 1F 02 00  11 1F 02 00 49 1F 02 00  4B 1F 02 00 6E 1F 02 00  .....I.K.n.
00031680  70 1F 02 00 95 1F 02 00  97 1F 02 00 39 20 02 00  3B 20 02 00 67 20 02 00  69 20 02 00 6B 20 02 00  p.ò.ù.9 .; .g .i .k .
000316A0  7C 20 02 00 9F 20 02 00  A1 20 02 00 CA 20 02 00  CC 20 02 00 F2 20 02 00  05 21 02 00 07 21 02 00  | .ƒ .í . . . .!.!.
000316C0  3F 21 02 00 41 21 02 00  F2 21 02 00 F4 21 02 00  22 22 02 00 24 22 02 00  26 22 02 00 28 22 02 00  ?!.A!.!.!."".$".&".(".
000316E0  37 22 02 00 5A 22 02 00  5C 22 02 00 90 22 02 00  92 22 02 00 B7 22 02 00  C6 22 02 00 D3 22 02 00  7".Z".\".É".Æ".".".".
00031700  D5 22 02 00 07 23 02 00  35 23 02 00 37 23 02 00  4B 24 02 00 68 25 02 00  6A 25 02 00 96 25 02 00  ".#.5#.7#.K$.h%.j%.û%.
00031720  98 25 02 00 9A 25 02 00  A9 25 02 00 CC 25 02 00  CE 25 02 00 01 26 02 00  03 26 02 00 44 26 02 00  ÿ%.Ü%.%.%.%.&.&.D&.
00031740  53 26 02 00 6C 26 02 00  86 26 02 00 A0 26 02 00  BB 26 02 00 D3 26 02 00  D5 26 02 00 0B 27 02 00  S&.l&.å&.á&.&.&.&.'.
00031760  3C 27 02 00 6D 27 02 00  9E 27 02 00 CC 27 02 00  FE 27 02 00 00 28 02 00  66 28 02 00 68 28 02 00  <'.m'.'.'.'..(.f(.h(.
00031780  96 28 02 00 98 28 02 00  9A 28 02 00 9C 28 02 00  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  û(.ÿ(.Ü(.£(.
000317A0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000317C0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000317E0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB 00 00 00 04 05  00 00 00 00 00 00 00 63  ..........c
00031800  9C 28 02 00 B2 28 02 00  D5 28 02 00 D7 28 02 00  10 29 02 00 12 29 02 00  40 29 02 00 4F 29 02 00  £(.(.(.(.).).@).O).
00031820  5E 29 02 00 60 29 02 00  99 29 02 00 CE 29 02 00  D0 29 02 00 5F 2A 02 00  61 2A 02 00 7B 2A 02 00  ^).`).Ö).).)._*.a*.{*.
00031840  7D 2A 02 00 7F 2A 02 00  97 2A 02 00 BA 2A 02 00  BC 2A 02 00 F2 2A 02 00  F4 2A 02 00 1A 2B 02 00  }*.*.ù*.*.*.*.*.+.
00031860  1C 2B 02 00 60 2B 02 00  62 2B 02 00 D1 2B 02 00  D3 2B 02 00 FA 2B 02 00  FC 2B 02 00 2C 2C 02 00  +.`+.b+.+.+.·+.+.,,.
00031880  2E 2C 02 00 30 2C 02 00  32 2C 02 00 49 2C 02 00  6C 2C 02 00 6E 2C 02 00  AF 2C 02 00 B1 2C 02 00  .,.0,.2,.I,.l,.n,.»,.,.
000318A0  EF 2C 02 00 FE 2C 02 00  16 2D 02 00 2E 2D 02 00  47 2D 02 00 5F 2D 02 00  61 2D 02 00 9F 2D 02 00  ,.,.-..-.G-._-.a-.ƒ-.
000318C0  D5 2D 02 00 0B 2E 02 00  44 2E 02 00 7B 2E 02 00  7D 2E 02 00 45 2F 02 00  47 2F 02 00 78 2F 02 00  -...D..{..}..E/.G/.x/.
000318E0  7A 2F 02 00 7C 2F 02 00  96 2F 02 00 B9 2F 02 00  BB 2F 02 00 0E 30 02 00  10 30 02 00 48 30 02 00  z/.|/.û/././.0.0.H0.
00031900  57 30 02 00 6D 30 02 00  85 30 02 00 9D 30 02 00  9F 30 02 00 DD 30 02 00  13 31 02 00 49 31 02 00  W0.m0.à0.¥0.ƒ0.0.1.I1.
00031920  80 31 02 00 82 31 02 00  E6 32 02 00 E8 32 02 00  1F 33 02 00 21 33 02 00  23 33 02 00 46 33 02 00  Ç1.é1.µ2.Φ2.3.!3.#3.F3.
00031940  48 33 02 00 5A 33 02 00  5C 33 02 00 4D 37 02 00  4F 37 02 00 2D 3A 02 00  2F 3A 02 00 5A 3A 02 00  H3.Z3.\3.M7.O7.-:./:.Z:.
00031960  5C 3A 02 00 8F 3A 02 00  91 3A 02 00 BB 3A 02 00  BD 3A 02 00 C4 3A 02 00  C6 3A 02 00 FB FB FB FB  \:.Å:.æ:.:.:.:.:.
00031980  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000319A0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000319C0  FB FB FB FB FB FB FB FB  F5 F5 EF F5 F5 F5 F5 F5  F5 F5 F5 F5 F5 F5 F5 F5  F5 F5 00 00 00 00 05 00  .....
000319E0  00 00 00 00 00 00 05 01  00 00 05 00 00 00 00 00  00 00 05 03 00 00 04 05  00 00 00 00 00 00 00 5E  ........................^
00031A00  C6 3A 02 00 EA 3A 02 00  0A 3B 02 00 2D 3B 02 00  2F 3B 02 00 0B 3E 02 00  0D 3E 02 00 F0 40 02 00  :.Ω:.;.-;./;.>.>.@.
00031A20  F2 40 02 00 F4 40 02 00  0B 41 02 00 0D 41 02 00  54 41 02 00 56 41 02 00  58 41 02 00 70 41 02 00  @.@.A.A.TA.VA.XA.pA.
00031A40  72 41 02 00 84 41 02 00  A7 41 02 00 A9 41 02 00  E9 41 02 00 EB 41 02 00  23 42 02 00 39 42 02 00  rA.äA.ºA.A.ΘA.δA.#B.9B.
00031A60  48 42 02 00 57 42 02 00  66 42 02 00 68 42 02 00  A4 42 02 00 DA 42 02 00  10 43 02 00 47 43 02 00  HB.WB.fB.hB.ñB.B.C.GC.
00031A80  49 43 02 00 16 45 02 00  18 45 02 00 09 46 02 00  0B 46 02 00 81 46 02 00  83 46 02 00 A1 46 02 00  IC.E.E.F.F.üF.âF.íF.
00031AA0  B6 46 02 00 D9 46 02 00  DB 46 02 00 1A 47 02 00  1C 47 02 00 5E 47 02 00  73 47 02 00 85 47 02 00  F.F.F.G.G.^G.sG.àG.
00031AC0  99 47 02 00 AA 47 02 00  AC 47 02 00 EC 47 02 00  26 48 02 00 60 48 02 00  9B 48 02 00 9D 48 02 00  ÖG.¬G.¼G.G.&H.`H.¢H.¥H.
00031AE0  3D 4B 02 00 3F 4B 02 00  08 4C 02 00 0A 4C 02 00  28 4C 02 00 2A 4C 02 00  42 4C 02 00 65 4C 02 00  =K.?K.L.L.(L.*L.BL.eL.
00031B00  67 4C 02 00 AD 4C 02 00  AF 4C 02 00 F4 4C 02 00  09 4D 02 00 1D 4D 02 00  33 4D 02 00 43 4D 02 00  gL.¡L.»L.L.M.M.3M.CM.
00031B20  45 4D 02 00 88 4D 02 00  C4 4D 02 00 00 4E 02 00  3E 4E 02 00 40 4E 02 00  2F 51 02 00 31 51 02 00  EM.êM.M..N.>N.@N./Q.1Q.
00031B40  EA 51 02 00 EC 51 02 00  EE 51 02 00 F0 51 02 00  01 52 02 00 24 52 02 00  26 52 02 00 57 52 02 00  ΩQ.Q.εQ.Q.R.$R.&R.WR.
00031B60  59 52 02 00 7F 52 02 00  94 52 02 00 96 52 02 00  D0 52 02 00 D2 52 02 00  EE 53 02 00 F0 53 02 00  YR.R.öR.ûR.R.R.εS.S.
00031B80  1C 54 02 00 28 54 02 00  FA FA FA FA FA FA FA FA  FA FA FA FA FA FA FA F5  F5 F5 F5 F5 F5 F5 F5 F5  T.(T.···············
00031BA0  F5 F5 F5 F5 F5 F5 F5 F5  F5 F5 F5 F5 F5 F5 F5 F5  F5 F5 F5 F5 F5 F5 F5 F5  F5 F5 F5 F5 F5 F5 F5 F5  
00031BC0  F5 F5 F5 F5 F5 F5 F5 F5  F5 F5 F5 F5 F5 F5 F5 F5  F5 F5 F5 F5 F5 F5 F5 F5  F5 F5 F5 F5 F5 F5 F5 F5  
00031BE0  F5 F5 F5 F5 F5 F5 F5 F5  F5 00 04 05 00 00 00 00  00 00 00 00 05 00 00 00  00 00 00 00 05 03 00 61  .................a
00031C00  28 54 02 00 4B 54 02 00  4D 54 02 00 72 54 02 00  74 54 02 00 96 54 02 00  A9 54 02 00 BC 54 02 00  (T.KT.MT.rT.tT.ûT.T.T.
00031C20  BE 54 02 00 F4 54 02 00  30 55 02 00 32 55 02 00  06 57 02 00 08 57 02 00  2F 57 02 00 6C 57 02 00  T.T.0U.2U.W.W./W.lW.
00031C40  6E 57 02 00 9A 57 02 00  D4 57 02 00 D6 57 02 00  F1 57 02 00 F3 57 02 00  07 58 02 00 2A 58 02 00  nW.ÜW.W.W.±W.W.X.*X.
00031C60  2C 58 02 00 63 58 02 00  65 58 02 00 A4 58 02 00  B9 58 02 00 CD 58 02 00  E6 58 02 00 FD 58 02 00  ,X.cX.eX.ñX.X.X.µX.²X.
00031C80  FF 58 02 00 3E 59 02 00  76 59 02 00 AF 59 02 00  F0 59 02 00 F2 59 02 00  A7 5C 02 00 A9 5C 02 00   X.>Y.vY.»Y.Y.Y.º\.\.
00031CA0  D0 5C 02 00 FA 5C 02 00  23 5D 02 00 5C 5D 02 00  92 5D 02 00 C1 5D 02 00  F5 5D 02 00 30 5E 02 00  \.·\.#].\].Æ].].].0^.
00031CC0  59 5E 02 00 5B 5E 02 00  89 5E 02 00 C2 5E 02 00  C4 5E 02 00 FD 5E 02 00  FF 5E 02 00 10 5F 02 00  Y^.[^.ë^.^.^.²^. ^._.
00031CE0  33 5F 02 00 35 5F 02 00  6A 5F 02 00 6C 5F 02 00  9B 5F 02 00 B0 5F 02 00  CD 5F 02 00 CF 5F 02 00  3_.5_.j_.l_.¢_._._._.
00031D00  0B 60 02 00 4C 60 02 00  4E 60 02 00 1F 61 02 00  21 61 02 00 4B 61 02 00  8A 61 02 00 8C 61 02 00  `.L`.N`.a.!a.Ka.èa.îa.
00031D20  BE 61 02 00 F8 61 02 00  FA 61 02 00 FC 61 02 00  FE 61 02 00 18 62 02 00  3B 62 02 00 3D 62 02 00  a.°a.·a.a.a.b.;b.=b.
00031D40  7A 62 02 00 7C 62 02 00  AA 62 02 00 BF 62 02 00  C1 62 02 00 04 63 02 00  06 63 02 00 69 63 02 00  zb.|b.¬b.b.b.c.c.ic.
00031D60  6B 63 02 00 8D 63 02 00  8F 63 02 00 A8 63 02 00  CB 63 02 00 CD 63 02 00  05 64 02 00 07 64 02 00  kc.ìc.Åc.¿c.c.c.d.d.
00031D80  41 64 02 00 56 64 02 00  6A 64 02 00 82 64 02 00  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  Ad.Vd.jd.éd.
00031DA0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
00031DC0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
00031DE0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB 00 00 00 04 05  00 00 00 00 00 00 00 63  ..........c
00031E00  82 64 02 00 84 64 02 00  C6 64 02 00 01 65 02 00  40 65 02 00 42 65 02 00  E2 66 02 00 E4 66 02 00  éd.äd.d.e.@e.Be.Γf.Σf.
00031E20  0F 67 02 00 3D 67 02 00  6A 67 02 00 A7 67 02 00  DA 67 02 00 0D 68 02 00  45 68 02 00 84 68 02 00  g.=g.jg.ºg.g.h.Eh.äh.
00031E40  86 68 02 00 BF 68 02 00  F9 68 02 00 FB 68 02 00  18 69 02 00 1A 69 02 00  1C 69 02 00 1E 69 02 00  åh.h.h.h.i.i.i.i.
00031E60  2C 69 02 00 4F 69 02 00  51 69 02 00 86 69 02 00  88 69 02 00 AB 69 02 00  C0 69 02 00 C2 69 02 00  ,i.Oi.Qi.åi.êi.½i.i.i.
00031E80  F9 69 02 00 FB 69 02 00  C3 6A 02 00 C5 6A 02 00  DD 6A 02 00 EB 6A 02 00  0E 6B 02 00 10 6B 02 00  i.i.j.j.j.δj.k.k.
00031EA0  3F 6B 02 00 41 6B 02 00  6C 6B 02 00 81 6B 02 00  93 6B 02 00 95 6B 02 00  CD 6B 02 00 00 6C 02 00  ?k.Ak.lk.ük.ôk.òk.k..l.
00031EC0  02 6C 02 00 11 6D 02 00  13 6D 02 00 15 6D 02 00  17 6D 02 00 2C 6D 02 00  4F 6D 02 00 51 6D 02 00  l.m.m.§m.m.,m.Om.Qm.
00031EE0  82 6D 02 00 84 6D 02 00  AE 6D 02 00 C3 6D 02 00  C5 6D 02 00 03 6E 02 00  05 6E 02 00 D7 6E 02 00  ém.äm.«m.m.m.n.n.n.
00031F00  D9 6E 02 00 F6 6E 02 00  F8 6E 02 00 FA 6E 02 00  15 6F 02 00 17 6F 02 00  1F 6F 02 00 27 6F 02 00  n.÷n.°n.·n.§o.o.o.'o.
00031F20  2F 6F 02 00 31 6F 02 00  63 6F 02 00 65 6F 02 00  88 6F 02 00 B0 6F 02 00  E4 6F 02 00 1C 70 02 00  /o.1o.co.eo.êo.o.Σo.p.
00031F40  4F 70 02 00 88 70 02 00  C3 70 02 00 FC 70 02 00  37 71 02 00 66 71 02 00  68 71 02 00 97 71 02 00  Op.êp.p.p.7q.fq.hq.ùq.
00031F60  99 71 02 00 BF 71 02 00  FD 71 02 00 32 72 02 00  5E 72 02 00 FB FB FB FB  FB FB FB FB FB FB FB FB  Öq.q.²q.2r.^r.
00031F80  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
00031FA0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB F5 F5 EF  EA EA EA EA EA EA EA EA  ΩΩΩΩΩΩΩΩ
00031FC0  EA EA EA EA EA EA EA EA  EA EA EA EA EA EA EA EA  00 00 00 00 04 00 00 00  00 00 00 00 00 00 05 00  ΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩ..............
00031FE0  00 00 00 00 00 00 05 01  00 00 05 00 00 00 00 00  00 00 05 03 00 00 04 05  00 00 00 00 00 00 00 5C  ........................\
00032000  5E 72 02 00 90 72 02 00  C7 72 02 00 02 73 02 00  3D 73 02 00 3F 73 02 00  41 73 02 00 43 73 02 00  ^r.Ér.r.s.=s.?s.As.Cs.
00032020  4E 73 02 00 58 73 02 00  63 73 02 00 65 73 02 00  C5 73 02 00 C7 73 02 00  C9 73 02 00 E7 73 02 00  Ns.Xs.cs.es.s.s.s.τs.
00032040  E9 73 02 00 1C 74 02 00  1E 74 02 00 44 74 02 00  6A 74 02 00 90 74 02 00  B4 74 02 00 E5 74 02 00  Θs.t.t.Dt.jt.Ét.t.σt.
00032060  16 75 02 00 47 75 02 00  8F 75 02 00 D5 75 02 00  14 76 02 00 45 76 02 00  76 76 02 00 78 76 02 00  u.Gu.Åu.u.v.Ev.vv.xv.
00032080  DE 77 02 00 E0 77 02 00  20 78 02 00 22 78 02 00  24 78 02 00 41 78 02 00  43 78 02 00 70 78 02 00  w.αw. x."x.$x.Ax.Cx.px.
000320A0  72 78 02 00 98 78 02 00  BE 78 02 00 E4 78 02 00  08 79 02 00 4E 79 02 00  7F 79 02 00 C4 79 02 00  rx.ÿx.x.Σx.y.Ny.y.y.
000320C0  0C 7A 02 00 52 7A 02 00  8F 7A 02 00 D0 7A 02 00  01 7B 02 00 03 7B 02 00  65 7F 02 00 67 7F 02 00  z.Rz.Åz.z.{.{.e.g.
000320E0  82 7F 02 00 84 7F 02 00  BC 7F 02 00 BE 7F 02 00  E4 7F 02 00 0A 80 02 00  30 80 02 00 54 80 02 00  é.ä...Σ.Ç.0Ç.TÇ.
00032100  85 80 02 00 BC 80 02 00  ED 80 02 00 1E 81 02 00  4F 81 02 00 80 81 02 00  C6 81 02 00 07 82 02 00  àÇ.Ç.φÇ.ü.Oü.Çü.ü.é.
00032120  09 82 02 00 75 82 02 00  77 82 02 00 85 84 02 00  87 84 02 00 23 85 02 00  25 85 02 00 46 85 02 00  é.ué.wé.àä.çä.#à.%à.Fà.
00032140  48 85 02 00 79 85 02 00  7B 85 02 00 A1 85 02 00  C7 85 02 00 ED 85 02 00  11 86 02 00 42 86 02 00  Hà.yà.{à.íà.à.φà.å.Bå.
00032160  81 86 02 00 B2 86 02 00  E3 86 02 00 14 87 02 00  45 87 02 00 FB FB FB FB  FB FB FB FB FB FB FB FB  üå.å.πå.ç.Eç.
00032180  FB FB F5 FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB EF FB FB FB FB  F5 FB FB FB FB FB FB FB  
000321A0  FB FB FB FB FB FB FB FB  FB EF FB F5 FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB E9 EF EF EF  Θ
000321C0  E9 FB F5 FB FB FB FB FB  FB FB FB FB FB FB FB FB  00 00 05 03 00 00 00 00  00 00 05 03 00 00 05 00  Θ...........
000321E0  00 00 00 00 00 00 05 03  00 00 05 00 00 00 00 00  00 00 05 01 00 00 04 00  00 00 00 00 00 00 00 5C  .........................\
00032200  45 87 02 00 76 87 02 00  B7 87 02 00 B9 87 02 00  D4 87 02 00 D6 87 02 00  67 88 02 00 AE 88 02 00  Eç.vç.ç.ç.ç.ç.gê.«ê.
00032220  B0 88 02 00 16 89 02 00  18 89 02 00 3A 89 02 00  61 89 02 00 87 89 02 00  9F 89 02 00 B5 89 02 00  ê.ë.ë.:ë.aë.çë.ƒë.ë.
00032240  D4 89 02 00 F1 89 02 00  06 8A 02 00 25 8A 02 00  42 8A 02 00 68 8A 02 00  87 8A 02 00 A4 8A 02 00  ë.±ë.è.%è.Bè.hè.çè.ñè.
00032260  C3 8A 02 00 E0 8A 02 00  F5 8A 02 00 14 8B 02 00  31 8B 02 00 58 8B 02 00  62 8B 02 00 64 8B 02 00  è.αè.è.ï.1ï.Xï.bï.dï.
00032280  6F 8D 02 00 71 8D 02 00  79 8D 02 00 7F 8D 02 00  87 8D 02 00 89 8D 02 00  A4 8D 02 00 C2 8D 02 00  oì.qì.yì.ì.çì.ëì.ñì.ì.
000322A0  E0 8D 02 00 FE 8D 02 00  1E 8E 02 00 46 8E 02 00  6A 8E 02 00 92 8E 02 00  BE 8E 02 00 DB 8E 02 00  αì.ì.Ä.FÄ.jÄ.ÆÄ.Ä.Ä.
000322C0  FC 8E 02 00 0D 8F 02 00  10 8F 02 00 37 8F 02 00  76 8F 02 00 A0 8F 02 00  BF 8F 02 00 D7 8F 02 00  Ä.Å.Å.7Å.vÅ.áÅ.Å.Å.
000322E0  F1 8F 02 00 0E 90 02 00  2E 90 02 00 4B 90 02 00  7E 90 02 00 8E 90 02 00  90 90 02 00 A0 90 02 00  ±Å.É..É.KÉ.~É.ÄÉ.ÉÉ.áÉ.
00032300  A3 90 02 00 C0 90 02 00  E2 90 02 00 FE 90 02 00  11 91 02 00 37 91 02 00  4A 91 02 00 4C 91 02 00  úÉ.É.ΓÉ.É.æ.7æ.Jæ.Læ.
00032320  5C 91 02 00 5F 91 02 00  7B 91 02 00 8D 91 02 00  A4 91 02 00 B8 91 02 00  E4 91 02 00 F2 91 02 00  \æ._æ.{æ.ìæ.ñæ.æ.Σæ.æ.
00032340  F4 91 02 00 F6 91 02 00  F8 91 02 00 1C 92 02 00  1E 92 02 00 20 92 02 00  31 92 02 00 34 92 02 00  æ.÷æ.°æ.Æ.Æ. Æ.1Æ.4Æ.
00032360  4D 92 02 00 4F 92 02 00  6C 92 02 00 82 92 02 00  99 92 02 00 AE 92 02 00  B0 92 02 00 FB FB FB F5  MÆ.OÆ.lÆ.éÆ.ÖÆ.«Æ.Æ.
00032380  FB EF EF EF EF EF EF EF  EF EF EF EF EF EF EF EF  EF EF EF EF EF EF EF EF  EF EF EF EF EF FB FB FB  
000323A0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000323C0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB 00 00 00 00 05 00  .....
000323E0  00 00 00 00 00 00 05 03  00 00 05 00 00 00 00 00  00 00 05 01 00 00 04 00  00 00 00 00 00 00 00 5E  .........................^
00032400  B0 92 02 00 CE 92 02 00  E8 92 02 00 03 93 02 00  1E 93 02 00 2F 93 02 00  31 93 02 00 4C 93 02 00  Æ.Æ.ΦÆ.ô.ô./ô.1ô.Lô.
00032420  4E 93 02 00 7C 93 02 00  AC 93 02 00 AE 93 02 00  CF 93 02 00 EF 93 02 00  10 94 02 00 12 94 02 00  Nô.|ô.¼ô.«ô.ô.ô.ö.ö.
00032440  33 94 02 00 53 94 02 00  74 94 02 00 76 94 02 00  9F 94 02 00 C9 94 02 00  EE 94 02 00 1E 95 02 00  3ö.Sö.tö.vö.ƒö.ö.εö.ò.
00032460  49 95 02 00 7C 95 02 00  A3 95 02 00 B5 95 02 00  B7 95 02 00 D2 95 02 00  13 96 02 00 15 96 02 00  Iò.|ò.úò.ò.ò.ò.û.§û.
00032480  46 96 02 00 54 96 02 00  56 96 02 00 58 96 02 00  5A 96 02 00 A8 96 02 00  AA 96 02 00 B6 96 02 00  Fû.Tû.Vû.Xû.Zû.¿û.¬û.û.
000324A0  C0 96 02 00 CB 96 02 00  CD 96 02 00 D4 96 02 00  F7 96 02 00 1B 97 02 00  3F 97 02 00 63 97 02 00  û.û.û.û.û.ù.?ù.cù.
000324C0  87 97 02 00 AB 97 02 00  CF 97 02 00 F3 97 02 00  39 98 02 00 3B 98 02 00  41 98 02 00 59 98 02 00  çù.½ù.ù.ù.9ÿ.;ÿ.Aÿ.Yÿ.
000324E0  8D 98 02 00 D3 98 02 00  05 99 02 00 24 99 02 00  43 99 02 00 62 99 02 00  7D 99 02 00 98 99 02 00  ìÿ.ÿ.Ö.$Ö.CÖ.bÖ.}Ö.ÿÖ.
00032500  B6 99 02 00 F9 99 02 00  02 9A 02 00 04 9A 02 00  1F 9A 02 00 3C 9A 02 00  69 9A 02 00 89 9A 02 00  Ö.Ö.Ü.Ü.Ü.<Ü.iÜ.ëÜ.
00032520  AA 9A 02 00 E2 9A 02 00  EB 9A 02 00 ED 9A 02 00  03 9B 02 00 24 9B 02 00  45 9B 02 00 65 9B 02 00  ¬Ü.ΓÜ.δÜ.φÜ.¢.$¢.E¢.e¢.
00032540  86 9B 02 00 BE 9B 02 00  C7 9B 02 00 C9 9B 02 00  CB 9B 02 00 ED 9B 02 00  EF 9B 02 00 06 9C 02 00  å¢.¢.¢.¢.¢.φ¢.¢.£.
00032560  32 9C 02 00 4F 9C 02 00  6F 9C 02 00 8F 9C 02 00  AF 9C 02 00 CC 9C 02 00  EC 9C 02 00 0C 9D 02 00  2£.O£.o£.Å£.»£.£.£.¥.
00032580  2C 9D 02 00 4C 9D 02 00  69 9D 02 00 9D 9D 02 00  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  ,¥.L¥.i¥.¥¥.
000325A0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000325C0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
000325E0  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB 00 00 00 04 00  00 00 00 00 00 00 00 63  ...........c
00032600  9D 9D 02 00 D1 9D 02 00  EE 9D 02 00 0B 9E 02 00  28 9E 02 00 45 9E 02 00  62 9E 02 00 7F 9E 02 00  ¥¥.¥.ε¥..(.E.b..
00032620  81 9E 02 00 B4 9E 02 00  E7 9E 02 00 1A 9F 02 00  4D 9F 02 00 80 9F 02 00  B3 9F 02 00 E6 9F 02 00  ü..τ.ƒ.Mƒ.ǃ.ƒ.µƒ.
00032640  07 A0 02 00 09 A0 02 00  29 A0 02 00 63 A0 02 00  A6 A0 02 00 AF A0 02 00  B1 A0 02 00 B3 A0 02 00  á.á.)á.cá.ªá.»á.á.á.
00032660  C0 A0 02 00 E3 A0 02 00  E5 A0 02 00 EF A0 02 00  5B A2 02 00 5D A2 02 00  6C A2 02 00 AB A2 02 00  á.πá.σá.á.[ó.]ó.ló.½ó.
00032680  AD A2 02 00 BC A2 02 00  1E A3 02 00 29 A3 02 00  C5 A4 02 00 C7 A4 02 00  D3 A4 02 00 23 A5 02 00  ¡ó.ó.ú.)ú.ñ.ñ.ñ.#Ñ.
000326A0  25 A5 02 00 33 A5 02 00  D3 A5 02 00 D5 A5 02 00  E6 A5 02 00 08 A6 02 00  0A A6 02 00 17 A6 02 00  %Ñ.3Ñ.Ñ.Ñ.µÑ.ª.ª.ª.
000326C0  B3 A7 02 00 B5 A7 02 00  B7 A7 02 00 B9 A7 02 00  CC A7 02 00 EF A7 02 00  F1 A7 02 00 FF A7 02 00  º.º.º.º.º.º.±º. º.
000326E0  21 A8 02 00 23 A8 02 00  36 A8 02 00 58 A8 02 00  5A A8 02 00 6D A8 02 00  D5 A8 02 00 D7 A8 02 00  !¿.#¿.6¿.X¿.Z¿.m¿.¿.¿.
00032700  E1 A8 02 00 D6 AA 02 00  E5 AA 02 00 01 AB 02 00  03 AB 02 00 16 AB 02 00  AA AB 02 00 AC AB 02 00  ß¿.¬.σ¬.½.½.½.¬½.¼½.
00032720  B5 AB 02 00 E4 AB 02 00  E6 AB 02 00 F4 AB 02 00  40 AC 02 00 42 AC 02 00  4D AC 02 00 A9 AC 02 00  ½.Σ½.µ½.½.@¼.B¼.M¼.¼.
00032740  AB AC 02 00 AD AC 02 00  AF AC 02 00 BC AC 02 00  DF AC 02 00 E1 AC 02 00  EE AC 02 00 0F AD 02 00  ½¼.¡¼.»¼.¼.¼.ß¼.ε¼.¡.
00032760  11 AD 02 00 1E AD 02 00  86 AE 02 00 FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  ¡.¡.å«.
00032780  FB FB F5 EC E4 EC EC EC  EC EC EC EC EC EC EC EC  EC EC EC EC EC EC EC EC  EC EC EC EC EC EC EC EC  Σ
000327A0  E4 EC EC EC EC EC EC EC  EC EC EC EC EC EC EC EC  EC EC EC EC EC EC EC EC  EC EC EC EC EC EC EC E4  ΣΣ
000327C0  EC EC EC EC EC EC 00 00  07 05 00 00 00 00 00 00  11 D0 02 13 30 FD 00 00  08 00 00 00 00 00 00 00  ........0².........
000327E0  05 03 11 D0 02 13 30 FD  00 00 05 00 00 00 00 00  00 00 05 03 00 00 04 00  00 00 00 00 00 00 00 5A  0²...................Z
00032800  86 AE 02 00 88 AE 02 00  95 AE 02 00 E0 AE 02 00  E2 AE 02 00 F0 AE 02 00  98 AF 02 00 9A AF 02 00  å«.ê«.ò«.α«.Γ«.«.ÿ».Ü».
00032820  A6 AF 02 00 4C B0 02 00  4E B0 02 00 5D B0 02 00  D3 B0 02 00 E5 B0 02 00  82 B1 02 00 84 B1 02 00  ª».L.N.]..σ.é.ä.
00032840  96 B1 02 00 B4 B2 02 00  B6 B2 02 00 C8 B2 02 00  AA B3 02 00 AC B3 02 00  B4 B3 02 00 05 B4 02 00  û....¬.¼...
00032860  07 B4 02 00 12 B4 02 00  AC B4 02 00 AE B4 02 00  BF B4 02 00 B8 B6 02 00  BA B6 02 00 CD B6 02 00  ..¼.«.....
00032880  CE B8 02 00 D0 B8 02 00  E1 B8 02 00 AC B9 02 00  BD B9 02 00 24 BA 02 00  26 BA 02 00 37 BA 02 00  ..ß.¼..$.&.7.
000328A0  98 BA 02 00 9A BA 02 00  AB BA 02 00 04 BB 02 00  06 BB 02 00 16 BB 02 00  5A BB 02 00 5C BB 02 00  ÿ.Ü.½....Z.\.
000328C0  6D BB 02 00 AA BB 02 00  AC BB 02 00 B5 BB 02 00  EB BB 02 00 FF BB 02 00  15 BC 02 00 2D BC 02 00  m.¬.¼..δ. .§.-.
000328E0  48 BC 02 00 B0 BC 02 00  12 BD 02 00 75 BE 02 00  B8 BE 02 00 BA BE 02 00  CD BE 02 00 1D C0 02 00  H...u.....
00032900  1F C0 02 00 2F C0 02 00  C3 C0 02 00 C5 C0 02 00  E3 C0 02 00 E5 C0 02 00  8D C1 02 00 8F C1 02 00  ./...π.σ.ì.Å.
00032920  97 C1 02 00 9D C1 02 00  A5 C1 02 00 A7 C1 02 00  E3 C1 02 00 02 C2 02 00  21 C2 02 00 40 C2 02 00  ù.¥.Ñ.º.π..!.@.
00032940  5F C2 02 00 7E C2 02 00  9D C2 02 00 9F C2 02 00  DC C2 02 00 10 C3 02 00  59 C3 02 00 9F C3 02 00  _.~.¥.ƒ...Y.ƒ.
00032960  F7 F7 F7 F7 F7 F7 F7 F7  F7 F7 F7 F7 F7 F7 F7 F7  F7 F7 F7 F7 F7 F7 F7 F7  F7 F7 F7 F7 F7 F7 F7 F7  
00032980  F7 F7 F7 F7 F7 F7 F7 F7  F7 F7 F7 F7 F7 F7 F7 F7  F7 F7 F7 F7 EE EE EE EE  EE EE EE EE F7 F7 F7 F7  εεεεεεεε
000329A0  F7 F7 E8 E2 DD DD DD DD  DD DD DD DD DD DD DD DD  DD DD DD DD DD DD DD 00  00 00 04 00 00 00 00 00  ΦΓ........
000329C0  00 00 00 00 05 00 00 00  00 00 00 00 05 01 00 00  05 00 00 00 00 00 00 00  05 03 00 00 08 00 00 00  .........................
000329E0  00 00 00 00 05 03 11 08  07 13 C8 FB 00 00 08 00  00 00 00 00 00 00 05 03  11 D0 02 13 30 FD 00 57  .............0².W
00032A00  9F C3 02 00 DF C3 02 00  18 C4 02 00 1A C4 02 00  62 C4 02 00 A2 C4 02 00  DF C4 02 00 15 C5 02 00  ƒ....b.ó..§.
00032A20  17 C5 02 00 54 C5 02 00  66 C5 02 00 98 C5 02 00  CE C5 02 00 04 C6 02 00  1E C6 02 00 53 C6 02 00  .T.f.ÿ....S.
00032A40  9A C6 02 00 CE C6 02 00  16 C7 02 00 4A C7 02 00  89 C7 02 00 D0 C7 02 00  04 C8 02 00 45 C8 02 00  Ü...J.ë...E.
00032A60  79 C8 02 00 88 C8 02 00  8A C8 02 00 8C C8 02 00  DA C8 02 00 E5 C8 02 00  EE C8 02 00 F8 C8 02 00  y.ê.è.î..σ.ε.°.
00032A80  FA C8 02 00 01 C9 02 00  3D C9 02 00 54 C9 02 00  6B C9 02 00 82 C9 02 00  99 C9 02 00 B0 C9 02 00  ·..=.T.k.é.Ö..
00032AA0  C7 C9 02 00 C9 C9 02 00  0A CA 02 00 31 CA 02 00  6D CA 02 00 A7 CA 02 00  DA CA 02 00 06 CB 02 00  ...1.m.º...
00032AC0  08 CB 02 00 50 CB 02 00  83 CB 02 00 B3 CB 02 00  DC CB 02 00 DE CB 02 00  E4 CB 02 00 FB CB 02 00  .P.â....Σ..
00032AE0  37 CC 02 00 77 CC 02 00  B7 CC 02 00 E0 CC 02 00  1A CD 02 00 5A CD 02 00  98 CD 02 00 DE CD 02 00  7.w..α..Z.ÿ..
00032B00  1C CE 02 00 65 CE 02 00  AE CE 02 00 EC CE 02 00  2F CF 02 00 6D CF 02 00  76 CF 02 00 A7 CF 02 00  .e.«../.m.v.º.
00032B20  A9 CF 02 00 AB CF 02 00  E3 CF 02 00 30 D0 02 00  32 D0 02 00 34 D0 02 00  81 D0 02 00 8F D0 02 00  .½.π.0.2.4.ü.Å.
00032B40  91 D0 02 00 93 D0 02 00  95 D0 02 00 AB D0 02 00  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  æ.ô.ò.½.
00032B60  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  
00032B80  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB FB  FB FB FB FB FB FB FB F5  FB EC E7 E7 FB E2 D9 FB  ττΓ
00032BA0  FB FB FB 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 08 F2 00 01 30 2A  F0 00 0F 07 01 C0 21 01  ................0*.!
00032BC0  30 2A 02 00 04 F2 00 01  30 2A F0 00 00 00 04 F3  00 01 30 2A F0 00 00 00  08 F3 00 01 30 2A F0 00  0*..0*....0*....0*.
00032BE0  0F 07 01 C0 21 01 30 2A  02 00 05 00 00 00 00 00  00 00 05 03 00 00 04 00  00 00 00 00 00 00 00 53  !0*..................S
00032C00  0E 00 37 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 07 52 65 6D 61  72 6B 73 FF 07 62 6C 6F  .7................Remarks blo
00032C20  63 6B 65 64 06 62 69 74  74 65 64 04 50 41 52 41  08 62 6C 6F 63 6B 65 64  32 3C 00 FF FF FF FF FF  ckedbittedPARAblocked2<.     
00032C40  FF FF FF FF FF FF FF FF  FF 0E 00 00 40 00 00 00  00 00 00 00 00 00 09 04  05 00 00 02 00 04 FF 05           ..@............ 
00032C60  00 00 02 00 04 05 00 00  02 00 04 05 00 00 02 00  04 03 00 00 02 82 00 FF  FF FF FF FF FF FF FF FF  ...........é.         
00032C80  FF FF FF FF FF 07 00 00  00 00 00 00 00 19 01 00  00 00 00 00 00 05 03 11  46 05 13 BA FA 0F 08 00       .............F·.
00032CA0  02 37 02 E1 03 00 00 FF  0D 03 00 00 00 00 00 00  11 FC 04 13 04 FB 16 04  00 00 00 00 00 00 05 03  7ß.. ............
00032CC0  11 6E 04 13 92 FB 0F 05  00 01 1C 01 00 19 05 00  00 00 00 00 00 05 03 11  4D 06 13 B3 F9 0F 08 00  nÆ........M.
00032CE0  02 37 02 E1 03 00 00 0F  06 00 00 00 00 00 00 05  03 11 A5 06 13 5B F9 15  00 F2 00 F3 00 00 00 F5  7ß........Ñ[§.....
00032D00  00 FF 00 FF 00 FF 00 FF  00 FF 00 FF 00 FF 00 00  00 00 00 FF 00 00 DE 01  00 00 00 03 00 04 00 05  . . . . . . . ..... .......
00032D20  00 06 03 00 00 00 00 15  CF 02 00 13 00 95 D0 02  00 00 00 00 00 CD 09 00  00 30 14 00 00 AE 1B 00  .....§..ò.......0..«.
00032D40  00 58 26 00 00 1B 2F 00  00 BE 38 00 00 8D 3F 00  00 9F 44 00 00 54 4D 00  00 9D 52 00 00 2C 58 00  .X&../..8..ì?..ƒD..TM..¥R..,X.
00032D60  00 77 61 00 00 F5 6B 00  00 C1 71 00 00 63 76 00  00 2A 7A 00 00 78 81 00  00 B5 89 00 00 FF 90 00  .wa..k..q..cv..*z..xü..ë.. É.
00032D80  00 63 98 00 00 85 9E 00  00 BF A6 00 00 C5 AE 00  00 92 B9 00 00 30 C4 00  00 D1 CF 00 00 CF D9 00  .cÿ..à..ª..«..Æ..0.....
00032DA0  00 7B E4 00 00 BC EF 00  00 FD F9 00 00 1F 04 01  00 65 0E 01 00 B9 18 01  00 FA 20 01 00 19 2A 01  .{Σ....²...e..· .*
00032DC0  00 FA 32 01 00 59 3B 01  00 4A 46 01 00 D1 4F 01  00 30 54 01 00 5B 5A 01  00 6C 60 01 00 16 65 01  .·2.Y;.JF.O.0T.[Z.l`.e
00032DE0  00 98 6A 01 00 5B 70 01  00 37 75 01 00 E3 76 01  00 87 7C 01 00 69 82 01  00 45 87 01 00 36 8E 01  .ÿj.[p.7u.πv.ç|.ié.Eç.6Ä
00032E00  00 3C 94 01 00 69 99 01  00 01 A0 01 00 F6 A6 01  00 BB AB 01 00 C3 B0 01  00 86 B5 01 00 5F BA 01  .<ö.iÖ.á.÷ª.½..å._
00032E20  00 7A C1 01 00 26 C5 01  00 EC C8 01 00 4A CD 01  00 D4 D0 01 00 44 D6 01  00 DD D9 01 00 E0 E0 01  .z.&..J..D..αα
00032E40  00 36 E5 01 00 DF EA 01  00 05 F1 01 00 8E F5 01  00 01 FB 01 00 45 00 02  00 69 05 02 00 ED 0C 02  .6σ.Ω.±.Ä..E..i.φ
00032E60  00 AB 11 02 00 CD 16 02  00 A0 19 02 00 EC 1E 02  00 1B 24 02 00 00 29 02  00 FD 2D 02 00 A4 31 02  .½..á..$..).²-.ñ1
00032E80  00 8D 3C 02 00 22 45 02  00 AB 4A 02 00 9D 52 02  00 74 56 02 00 80 5D 02  00 10 62 02 00 5E 69 02  .ì<."E.½J.¥R.tV.Ç].b.^i
00032EA0  00 7B 6D 02 00 4A 72 02  00 A5 76 02 00 E8 7D 02  00 A6 83 02 00 3A 86 02  00 7D 8D 02 00 A1 90 02  .{m.Jr.Ñv.Φ}.ªâ.:å.}ì.íÉ
00032EC0  00 2B 95 02 00 70 9A 02  00 9F A1 02 00 57 A9 02  00 54 AF 02 00 2D B8 02  00 46 BF 02 00 5B C7 02  .+ò.pÜ.ƒí.W.T».-.F.[
00032EE0  00 15 CF 02 00 08 02 FF  FF 00 00 03 00 2B 00 00  02 FF FF 00 00 04 00 22  00 08 02 FF FF 00 00 05  .§.  ...+..  ...".  ..
00032F00  00 3C 00 00 02 FF FF 00  00 06 00 15 00 08 02 FF  FF 00 00 07 00 22 00 00  02 FF FF 00 00 08 00 1E  .<..  ...§.  ..."..  ...
00032F20  00 08 02 FF FF 00 00 09  00 1A 00 00 02 FF FF 00  00 0A 00 2B 00 08 02 FF  FF 00 00 0B 00 23 00 00  .  .....  ...+.  ...#..
00032F40  02 FF FF 00 00 0C 00 2B  00 08 02 FF FF 00 00 0D  00 20 00 00 02 FF FF 00  00 0E 00 E8 02 08 02 FF    ...+.  ... ..  ...Φ 
00032F60  FF 00 00 0F 00 2E 00 00  02 FF FF 00 00 10 00 24  00 08 02 FF FF 00 00 11  00 23 00 00 02 FF FF 00   ......  ...$.  ...#..  .
00032F80  00 12 00 31 00 08 02 FF  FF 00 00 13 00 28 00 00  02 FF FF 00 00 14 00 17  00 08 02 FF FF 00 00 15  ..1.  ...(..  ....  ..§
00032FA0  00 22 00 00 02 FF FF 00  00 16 00 2D 00 08 02 FF  FF 00 00 17 00 1D 00 00  02 FF FF 00 00 18 00 02  ."..  ...-.  .....  ...
00032FC0  00 08 02 FF FF 00 00 19  00 28 00 00 02 FF FF 00  00 1A 00 6F 00 08 02 FF  FF 00 00 1B 00 EC 01 00  .  ...(..  ...o.  ....
00032FE0  02 FF FF 00 00 1C 00 05  02 08 02 FF FF 00 00 1D  00 68 01 00 02 FF FF 00  00 1E 00 1E 00 08 02 FF    ...  ...h.  .... 
00033000  FF 00 00 1F 00 22 00 00  02 FF FF 00 00 20 00 5E  00 08 02 FF FF 00 00 21  00 09 02 00 02 FF FF 00   ..."..  .. .^.  ..!..  .
00033020  00 22 00 1F 01 08 02 FF  FF 00 00 23 00 30 00 00  02 FF FF 00 00 24 00 26  01 08 02 FF FF 00 00 25  .".  ..#.0..  ..$.&  ..%
00033040  00 F9 00 00 02 FF FF 00  00 26 00 47 00 08 02 FF  FF 00 00 27 00 1F 00 00  02 FF FF 00 00 28 00 25  ...  ..&.G.  ..'...  ..(.%
00033060  01 08 02 FF FF 00 00 29  00 0F 02 00 02 FF FF 00  00 2A 00 1D 00 08 02 FF  FF 00 00 2B 00 0F 00 00    ..)..  ..*..  ..+...
00033080  02 FF FF 00 00 2C 00 12  00 08 02 FF FF 00 00 2D  00 0E 00 00 02 FF FF 00  00 2E 00 14 00 08 02 FF    ..,..  ..-...  ..... 
000330A0  FF 00 00 2F 00 13 00 00  02 FF FF 00 00 30 00 0F  00 08 02 FF FF 00 00 31  00 14 00 00 02 FF FF 00   ../...  ..0..  ..1...  .
000330C0  00 32 00 16 00 08 02 FF  FF 00 00 33 00 14 00 00  02 FF FF 00 00 34 00 12  00 08 02 FF FF 00 00 35  .2..  ..3...  ..4..  ..5
000330E0  00 14 00 00 02 FF FF 00  00 36 00 0F 00 08 02 FF  FF 00 00 37 00 0F 00 00  02 FF FF 00 00 38 00 0E  ...  ..6..  ..7...  ..8.
00033100  00 08 02 FF FF 00 00 39  00 16 00 00 02 FF FF 00  00 3A 00 15 00 08 02 FF  FF 00 00 3B 00 10 00 00  .  ..9...  ..:.§.  ..;...
00033120  02 FF FF 00 00 3C 00 0B  00 08 02 FF FF 00 00 3D  00 0F 00 00 02 FF FF 00  00 3E 00 0F 00 08 02 FF    ..<..  ..=...  ..>.. 
00033140  FF 00 00 3F 00 12 00 00  02 FF FF 00 00 40 00 11  00 08 02 FF FF 00 00 41  00 0C 00 00 02 FF FF 00   ..?...  ..@..  ..A...  .
00033160  00 42 00 11 00 08 02 FF  FF 00 00 43 00 10 00 00  02 FF FF 00 00 44 00 11  00 08 02 FF FF 00 00 45  .B..  ..C...  ..D..  ..E
00033180  00 14 00 00 02 FF FF 00  00 46 00 11 00 08 02 FF  FF 00 00 47 00 19 00 00  02 FF FF 00 00 48 00 10  ...  ..F..  ..G...  ..H.
000331A0  00 08 02 FF FF 00 00 49  00 11 00 00 02 FF FF 00  00 4A 00 11 00 08 02 FF  FF 00 00 4B 00 10 00 00  .  ..I...  ..J..  ..K...
000331C0  02 FF FF 00 00 4C 00 13  00 08 02 FF FF 00 00 4D  00 14 00 00 02 FF FF 00  00 4E 00 11 00 08 02 FF    ..L..  ..M...  ..N.. 
000331E0  FF 00 00 4F 00 12 00 00  02 FF FF 00 00 50 00 11  00 0A 02 FF FF 00 00 51  00 10 00 02 02 FF FF 00   ..O...  ..P..  ..Q..  .
00033200  00 52 00 0E 00 0A 02 FF  FF 00 00 53 00 17 00 02  02 FF FF 00 00 54 00 19  00 0A 02 FF FF 00 00 55  .R..  ..S..  ..T..  ..U
00033220  00 22 00 02 02 FF FF 00  00 56 00 E3 02 0A 02 FF  FF 00 00 57 00 14 00 02  02 FF FF 00 00 58 00 17  .".  ..V.π  ..W..  ..X.
00033240  00 0A 02 FF FF 00 00 59  00 0B 00 02 02 FF FF 00  00 5A 00 13 00 0A 02 FF  FF 00 00 5B 00 10 00 02  .  ..Y..  ..Z..  ..[..
00033260  02 FF FF 00 00 5C 00 18  00 0A 02 FF FF 00 00 5D  00 0D 00 02 02 FF FF 00  00 5E 00 1A 00 0A 02 FF    ..\..  ..]..  ..^.. 
00033280  FF 00 00 5F 00 1D 00 02  02 FF FF 00 00 60 00 1C  00 0A 02 FF FF 00 00 61  00 1A 00 02 02 FF FF 00   .._..  ..`..  ..a..  .
000332A0  00 62 00 20 00 0A 02 FF  FF 00 00 63 00 1A 00 02  02 FF FF 00 00 64 00 10  00 0A 02 FF FF 00 00 65  .b. .  ..c..  ..d..  ..e
000332C0  00 10 00 02 02 FF FF 00  00 66 00 0B 00 0A 02 FF  FF 00 00 67 00 16 00 02  02 FF FF 00 00 68 00 0A  ..  ..f..  ..g..  ..h.
000332E0  00 0A 02 FF FF 00 00 69  00 0E 00 02 02 FF FF 00  00 6A 00 11 00 0A 02 FF  FF 00 00 6B 00 10 00 02  .  ..i..  ..j..  ..k..
00033300  02 FF FF 00 00 6C 00 1D  00 0A 02 FF FF 00 00 6D  00 0A 00 02 02 FF FF 00  00 6E 00 00 00 13 DA 01    ..l..  ..m..  ..n...
00033320  00 61 DA 01 00 63 DA 01  00 9F DA 01 00 B5 DA 01  00 D0 DA 01 00 E7 DA 01  00 F5 DA 01 00 05 DB 01  .a.c.ƒ...τ..
00033340  00 07 DB 01 00 3C DB 01  00 69 DB 01 00 96 DB 01  00 C6 DB 01 00 01 DC 01  00 03 DC 01 00 7C DF 01  ..<.i.û....|
00033360  00 7E DF 01 00 A8 DF 01  00 DE DF 01 00 1C E0 01  00 1E E0 01 00 51 E0 01  00 92 E0 01 00 94 E0 01  .~.¿..α.α.Qα.Æα.öα
00033380  00 CB E0 01 00 DD E0 01  00 F4 E0 01 00 17 E1 01  00 19 E1 01 00 4D E1 01  00 4F E1 01 00 73 E1 01  .α.α.α.ß.ß.Mß.Oß.sß
000333A0  00 75 E1 01 00 A5 E1 01  00 A7 E1 01 00 4E E2 01  00 50 E2 01 00 77 E2 01  00 94 E2 01 00 96 E2 01  .uß.Ñß.ºß.NΓ.PΓ.wΓ.öΓ.ûΓ
000333C0  00 D8 E2 01 00 DA E2 01  00 F5 E2 01 00 F7 E2 01  00 F9 E2 01 00 FB E2 01  00 07 E3 01 00 2A E3 01  .Γ.Γ.Γ.Γ.Γ.Γ.π.*π
000333E0  00 2C E3 01 00 4F E3 01  00 51 E3 01 00 6F E3 01  00 7F E3 01 00 81 E3 01  00 BB E3 01 00 BD E3 01  .,π.Oπ.Qπ.oπ.π.üπ.π.π
00033400  00 3B E4 01 00 3D E4 01  00 67 E4 01 00 A2 E4 01  00 A4 E4 01 00 D4 E4 01  00 0E E5 01 00 10 E5 01  .;Σ.=Σ.gΣ.óΣ.ñΣ.Σ.σ.σ
00033420  00 31 E5 01 00 33 E5 01  00 47 E5 01 00 6A E5 01  00 6C E5 01 00 95 E5 01  00 97 E5 01 00 BF E5 01  .1σ.3σ.Gσ.jσ.lσ.òσ.ùσ.σ
00033440  00 CE E5 01 00 DC E5 01  00 DE E5 01 00 12 E6 01  00 3F E6 01 00 41 E6 01  00 4B E7 01 00 4D E7 01  .σ.σ.σ.µ.?µ.Aµ.Kτ.Mτ
00033460  00 4F E7 01 00 51 E7 01  00 64 E7 01 00 87 E7 01  00 89 E7 01 00 B8 E7 01  00 BA E7 01 00 E8 E7 01  .Oτ.Qτ.dτ.çτ.ëτ.τ.τ.Φτ
00033480  00 F7 E7 01 00 13 E8 01  00 15 E8 01 00 4F E8 01  00 85 E8 01 00 87 E8 01  00 3F E9 01 00 41 E9 01  .τ.Φ.§Φ.OΦ.àΦ.çΦ.?Θ.AΘ
000334A0  00 43 E9 01 00 45 E9 01  00 57 E9 01 00 7A E9 01  00 7C E9 01 00 A2 E9 01  00 A4 E9 01 00 CD E9 01  .CΘ.EΘ.WΘ.zΘ.|Θ.óΘ.ñΘ.Θ
000334C0  00 DC E9 01 00 F4 E9 01  00 F6 E9 01 00 2B EA 01  00 59 EA 01 00 5B EA 01  00 F8 EA 01 00 1B EB 01  .Θ.Θ.÷Θ.+Ω.YΩ.[Ω.°Ω.δ
000334E0  00 1D EB 01 00 42 EB 01  00 44 EB 01 00 6E EB 01  00 88 EB 01 00 8A EB 01  00 C6 EB 01 00 C8 EB 01  .δ.Bδ.Dδ.nδ.êδ.èδ.δ.δ
00033500  00 8C EC 01 00 8E EC 01  00 90 EC 01 00 92 EC 01  00 A1 EC 01 00 C4 EC 01  00 C6 EC 01 00 00 ED 01  .î.Ä.É.Æ.í....φ
00033520  00 02 ED 01 00 2C ED 01  00 3B ED 01 00 57 ED 01  00 59 ED 01 00 8E ED 01  00 BF ED 01 00 C1 ED 01  .φ.,φ.;φ.Wφ.Yφ.Äφ.φ.φ
00033540  00 1A EF 01 00 1C EF 01  00 1E EF 01 00 30 EF 01  00 53 EF 01 00 55 EF 01  00 7E EF 01 00 80 EF 01  ....0.S.U.~.Ç
00033560  00 A8 EF 01 00 B7 EF 01  00 CE EF 01 00 D0 EF 01  00 08 F0 01 00 3C F0 01  00 3E F0 01 00 E6 F0 01  .¿.....<.>.µ
00033580  00 E8 F0 01 00 15 F1 01  00 38 F1 01 00 3A F1 01  00 71 F1 01 00 73 F1 01  00 9C F1 01 00 AB F1 01  .Φ.§±.8±.:±.q±.s±.£±.½±
000335A0  00 C7 F1 01 00 C9 F1 01  00 FD F1 01 00 2A F2 01  00 2C F2 01 00 CF F2 01  00 D1 F2 01 00 F1 F2 01  .±.±.²±.*.,...±
000335C0  00 F3 F2 01 00 F5 F2 01  00 F7 F2 01 00 06 F3 01  00 29 F3 01 00 2B F3 01  00 6D F3 01 00 6F F3 01  .....).+.m.o
000335E0  00 8E F3 01 00 90 F3 01  00 BB F3 01 00 6E F4 01  00 70 F4 01 00 3B F5 01  00 3D F5 01 00 6F F5 01  .Ä.É..n.p.;.=.o
00033600  00 71 F5 01 00 89 F5 01  00 8B F5 01 00 9F F5 01  00 C2 F5 01 00 C4 F5 01  00 FD F5 01 00 FF F5 01  .q.ë.ï.ƒ...². 
00033620  00 2B F6 01 00 3A F6 01  00 56 F6 01 00 58 F6 01  00 8F F6 01 00 BF F6 01  00 C1 F6 01 00 45 F8 01  .+÷.:÷.V÷.X÷.Å÷.÷.÷.E°
00033640  00 5A F9 01 00 ED F9 01  00 EF F9 01 00 1C FA 01  00 48 FA 01 00 4A FA 01  00 FC FA 01 00 FE FA 01  .Z.φ..·.H·.J·.·.·
00033660  00 12 FB 01 00 35 FB 01  00 37 FB 01 00 66 FB 01  00 68 FB 01 00 A0 FB 01  00 AF FB 01 00 C8 FB 01  ..5.7.f.h.á.».
00033680  00 E1 FB 01 00 FA FB 01  00 13 FC 01 00 15 FC 01  00 4A FC 01 00 7A FC 01  00 AA FC 01 00 DA FC 01  .ß.·..§.J.z.¬.
000336A0  00 08 FD 01 00 0A FD 01  00 4F FE 01 00 51 FE 01  00 7F FE 01 00 81 FE 01  00 83 FE 01 00 85 FE 01  .².².O.Q..ü.â.à
000336C0  00 95 FE 01 00 B8 FE 01  00 BA FE 01 00 F9 FE 01  00 FB FE 01 00 1D FF 01  00 2C FF 01 00 2E FF 01  .ò..... ., .. 
000336E0  00 62 FF 01 00 64 FF 01  00 25 00 02 00 27 00 02  00 42 00 02 00 55 00 02  00 78 00 02 00 7A 00 02  .b .d .%..'..B..U..x..z.
00033700  00 A6 00 02 00 A8 00 02  00 CA 00 02 00 D9 00 02  00 DB 00 02 00 0F 01 02  00 11 01 02 00 F1 01 02  .ª..¿..........±
00033720  00 F3 01 02 00 20 02 02  00 22 02 02 00 24 02 02  00 26 02 02 00 37 02 02  00 5A 02 02 00 5C 02 02  .. .".$.&.7.Z.\
00033740  00 8E 02 02 00 90 02 02  00 B3 02 02 00 C2 02 02  00 C4 02 02 00 F9 02 02  00 FB 02 02 00 9C 03 02  .Ä.É......£
00033760  00 9E 03 02 00 D0 03 02  00 D2 03 02 00 D4 03 02  00 D6 03 02 00 E9 03 02  00 0C 04 02 00 0E 04 02  ......Θ..
00033780  00 3F 04 02 00 41 04 02  00 65 04 02 00 74 04 02  00 76 04 02 00 B6 04 02  00 B8 04 02 00 06 05 02  .?.A.e.t.v...
000337A0  00 08 05 02 00 3B 05 02  00 3D 05 02 00 7C 05 02  00 9F 05 02 00 A1 05 02  00 D9 05 02 00 DB 05 02  ..;.=.|.ƒ.í..
000337C0  00 00 06 02 00 19 06 02  00 1B 06 02 00 50 06 02  00 52 06 02 00 39 08 02  00 3B 08 02 00 3D 08 02  .....P.R.9.;.=
000337E0  00 4A 08 02 00 6D 08 02  00 6F 08 02 00 B0 08 02  00 B2 08 02 00 EC 08 02  00 00 09 02 00 1B 09 02  .J.m.o......
00033800  00 37 09 02 00 4E 09 02  00 5E 09 02 00 60 09 02  00 92 09 02 00 BC 09 02  00 E9 09 02 00 13 0A 02  .7.N.^.`.Æ..Θ.
00033820  00 4B 0A 02 00 4D 0A 02  00 E3 0B 02 00 E5 0B 02  00 0F 0C 02 00 3C 0C 02  00 3E 0C 02 00 7E 0C 02  .K.M.π.σ..<.>.~
00033840  00 BF 0C 02 00 C1 0C 02  00 01 0D 02 00 24 0D 02  00 26 0D 02 00 6C 0D 02  00 6E 0D 02 00 A5 0D 02  ....$.&.l.n.Ñ
00033860  00 B4 0D 02 00 CA 0D 02  00 E2 0D 02 00 FA 0D 02  00 FC 0D 02 00 32 0E 02  00 60 0E 02 00 8E 0E 02  ...Γ.·..2.`.Ä
00033880  00 BD 0E 02 00 BF 0E 02  00 82 0F 02 00 84 0F 02  00 B0 0F 02 00 B2 0F 02  00 B4 0F 02 00 B6 0F 02  ...é.ä....
000338A0  00 C4 0F 02 00 E7 0F 02  00 E9 0F 02 00 25 10 02  00 27 10 02 00 4D 10 02  00 5D 10 02 00 6D 10 02  ..τ.Θ.%.'.M.].m
000338C0  00 6F 10 02 00 A1 10 02  00 CF 10 02 00 D1 10 02  00 43 11 02 00 45 11 02  00 89 11 02 00 8B 11 02  .o.í...C.E.ë.ï
000338E0  00 A6 11 02 00 A8 11 02  00 BC 11 02 00 DF 11 02  00 E1 11 02 00 29 12 02  00 2B 12 02 00 51 12 02  .ª.¿...ß.).+.Q
00033900  00 53 12 02 00 7F 12 02  00 81 12 02 00 F3 12 02  00 F5 12 02 00 36 13 02  00 38 13 02 00 50 13 02  .S..ü...6.8.P
00033920  00 52 13 02 00 54 13 02  00 56 13 02 00 69 13 02  00 8C 13 02 00 8E 13 02  00 BE 13 02 00 C0 13 02  .R.T.V.i.î.Ä..
00033940  00 E4 13 02 00 F3 13 02  00 F5 13 02 00 35 14 02  00 37 14 02 00 84 14 02  00 86 14 02 00 BF 14 02  .Σ...5.7.ä.å.
00033960  00 C1 14 02 00 C3 14 02  00 C5 14 02 00 D9 14 02  00 FC 14 02 00 FE 14 02  00 49 15 02 00 4B 15 02  .......I§.K§
00033980  00 70 15 02 00 7F 15 02  00 81 15 02 00 C2 15 02  00 C4 15 02 00 58 16 02  00 5A 16 02 00 98 16 02  .p§.§.ü§.§.§.X.Z.ÿ
000339A0  00 9A 16 02 00 DF 16 02  00 02 17 02 00 04 17 02  00 3B 17 02 00 3D 17 02  00 60 17 02 00 62 17 02  .Ü....;.=.`.b
000339C0  00 87 17 02 00 89 17 02  00 1F 18 02 00 21 18 02  00 47 18 02 00 49 18 02  00 4B 18 02 00 4D 18 02  .ç.ë..!.G.I.K.M
000339E0  00 61 18 02 00 84 18 02  00 86 18 02 00 C2 18 02  00 C4 18 02 00 E9 18 02  00 EB 18 02 00 12 19 02  .a.ä.å...Θ.δ.
00033A00  00 14 19 02 00 7E 19 02  00 80 19 02 00 9B 19 02  00 9D 19 02 00 15 CF 02  00 00 02 30 2A F0 00 00  ..~.Ç.¢.¥.§..0*..
00033A20  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033A40  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033A60  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 0F 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033A80  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033AA0  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033AC0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033AE0  01 30 2A F0 00 00 01 30  2A F0 00 00 03 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033B00  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033B20  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033B40  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033B60  2A F0 00 00 01 30 2A F0  00 00 02 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033B80  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033BA0  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033BC0  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033BE0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 05 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033C00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033C20  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033C40  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 03 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033C60  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033C80  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033CA0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 03 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033CC0  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033CE0  2A F0 00 00 01 30 2A F0  00 00 03 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033D00  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033D20  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033D40  2A F0 00 00 01 30 2A F0  00 00 06 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033D60  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033D80  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033DA0  2A F0 00 00 03 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033DC0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033DE0  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  03 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033E00  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033E20  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033E40  01 30 2A F0 00 00 01 30  2A F0 00 00 03 30 2A F0  00 00 01 30 2A F0 00 00  04 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033E60  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033E80  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033EA0  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033EC0  2A F0 00 00 07 30 2A F0  00 00 05 30 2A F0 00 00  03 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033EE0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 03 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033F00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033F20  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033F40  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033F60  01 30 2A F0 00 00 06 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033F80  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00033FA0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00033FC0  01 30 2A F0 00 00 04 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00033FE0  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00034000  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 04 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00034020  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00034040  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00034060  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 03 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00034080  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
000340A0  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
000340C0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 02 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
000340E0  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00034100  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00034120  00 00 01 30 2A F0 00 00  08 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00034140  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00034160  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00034180  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
000341A0  01 30 2A F0 00 00 07 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
000341C0  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
000341E0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00034200  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00034220  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 03 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00034240  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00034260  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00034280  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
000342A0  00 00 02 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
000342C0  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
000342E0  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 02 30 2A F0  *..0*..0*..0*..0*..0*
00034300  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00034320  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00034340  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00034360  00 00 01 30 2A F0 00 00  02 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00034380  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 02 30  0*..0*..0*..0*..0*..0
000343A0  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
000343C0  00 00 01 30 2A F0 00 00  03 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
000343E0  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00034400  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 03 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00034420  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  ..0*..0*..0*..0*..0*..
00034440  01 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  01 30 2A F0 00 00 01 30  0*..0*..0*..0*..0*..0
00034460  2A F0 00 00 01 30 2A F0  00 00 01 30 2A F0 00 00  02 30 2A F0 00 00 01 30  2A F0 00 00 01 30 2A F0  *..0*..0*..0*..0*..0*
00034480  00 00 01 30 2A F0 00 02  01 30 2A F0 00 00 00 00  00 89 00 00 00 E6 00 00  00 EC 00 00 00 80 01 00  ..0*.0*.....ë...µ......Ç.
000344A0  00 AB D0 02 00 69 01 80  01 00 00 65 15 00 00 D5  2B 00 00 BE 3D 00 00 CF  4B 00 00 A9 59 00 00 DD  .½.iÇ..e§..+..=..K..Y..
000344C0  6B 00 00 E4 76 00 00 20  83 00 00 B8 91 00 00 6C  9D 00 00 44 B0 00 00 B3  D9 00 00 6A F3 00 00 57  k..Σv.. â..æ..l¥..D....j..W
000344E0  09 01 00 BF 1C 01 00 90  2E 01 00 A7 41 01 00 95  56 01 00 48 64 01 00 CD  6F 01 00 89 7A 01 00 90  ..É..ºA.òV.Hd.o.ëz.É
00034500  86 01 00 31 95 01 00 FF  A1 01 00 FC AD 01 00 B8  BB 01 00 DD CA 01 00 54  D8 01 00 E7 E5 01 00 B8  å.1ò. í.¡...T.τσ.
00034520  F2 01 00 4A 02 02 00 04  11 02 00 1D 1B 02 00 9C  28 02 00 C6 3A 02 00 28  54 02 00 82 64 02 00 5E  .J...£(.:.(T.éd.^
00034540  72 02 00 45 87 02 00 B0  92 02 00 9D 9D 02 00 86  AE 02 00 9F C3 02 00 AB  D0 02 00 6A 01 6B 01 6C  r.Eç.Æ.¥¥.å«.ƒ.½.jkl
00034560  01 6D 01 6E 01 6F 01 70  01 71 01 72 01 73 01 74  01 75 01 76 01 77 01 78  01 79 01 7A 01 7B 01 7C  mnopqrstuvwxyz{|
00034580  01 7D 01 7E 01 7F 01 80  01 81 01 82 01 83 01 84  01 85 01 86 01 87 01 88  01 89 01 8A 01 8B 01 8C  }~Çüéâäàåçêëèïî
000345A0  01 8D 01 8E 01 8F 01 90  01 91 01 92 01 93 01 94  01 95 01 4D 00 0E 31 00  52 6F 6D 61 6E 20 31 30  ìÄÅÉæÆôöòM.1.Roman 10
000345C0  63 70 69 00 09 10 02 53  79 6D 62 6F 6C 00 08 22  00 41 72 69 61 6C 00 0A  31 00 43 6F 75 72 69 65  cpi.Symbol.".Arial.1.Courie
000345E0  72 00 0E 35 00 43 6F 75  72 69 65 72 20 4E 65 77  00 0E 10 00 6E 65 77 20  63 6F 75 72 69 65 72 00  r.5.Courier New..new courier.
00034600  15 CF 02 00 D8 00 00 00  DD 00 00 00 E1 00 00 00  EC 00 00 00 13 21 14 FF  15 00 03 00 41 43 04 00  §.......ß......! §..AC.
00034620  44 43 06 00 58 43 03 00  03 80 01 00 38 20 01 00  38 20 01 00 08 00 00 80  00 80 38 20 01 00 00 00  DC.XC.Ç.8 .8 ...Ç.Ç8 ...
00034640  00 00 CE 22 01 00 02 40  00 00 00 00 00 29 CE 02  00 2B CE 02 00 11 CF 02  00 13 CF 02 00 15 CF 02  ..".@.....).+...§
00034660  00 00 04 80 01 00 00 00  00 04 04 A9 D0 02 00 00  00 04 04 AB CF 02 00 00  00 00 04 91 D0 02 00 00  ..Ç.......½....æ..
00034680  00 00 04 93 D0 02 00 00  00 22 00 02 00 03 03 88  00 00 00 D0 02 00 00 68  01 00 00 00 00 2C 8B DC  ..ô..."..ê.....h....,ï
000346A0  A5 3B 8B DC A5 00 00 00  00 04 00 05 00 00 00 55  6B 00 00 0B C0 02 00 6C  00 00 00 00 00 DF 00 00  Ñ;ïÑ........Uk...l.......
000346C0  00 21 55 6C 74 72 61 53  6F 75 6E 64 20 53 44 4B  20 32 2E 31 30 20 44 6F  63 75 6D 65 6E 74 61 74  .!UltraSound SDK 2.10 Documentat
000346E0  69 6F 6E 0E 55 6C 74 72  61 53 6F 75 6E 64 20 53  44 4B 10 55 6C 74 72 61  53 6F 75 6E 64 2C 20 44  ionUltraSound SDKUltraSound, D
00034700  6F 63 73 75 57 72 69 74  74 65 6E 20 62 79 20 4D  69 6B 65 20 54 72 61 76  65 72 73 20 61 6E 64 20  ocsuWritten by Mike Travers and 
00034720  4B 75 72 74 20 4B 65 6E  6E 65 74 74 0D 0A 43 6F  70 79 72 69 67 68 74 20  3C 43 3E 20 31 39 39 33  Kurt KennettCopyright <C> 1993
00034740  2C 20 41 64 76 61 6E 63  65 64 20 47 72 61 76 69  73 0D 0A 43 6F 70 79 72  69 67 68 74 20 3C 43 3E  , Advanced GravisCopyright <C>
00034760  20 31 39 39 33 2C 20 49  6E 67 65 6E 75 69 74 79  20 53 6F 66 74 77 61 72  65 0C 4B 75 72 74 20 4B   1993, Ingenuity SoftwareKurt K
00034780  65 6E 6E 65 74 74 0C 4B  75 72 74 20 4B 65 6E 6E  65 74 74 00 00 00 00 00  00 00 00 00              ennettKurt Kennett.........
[ RETURN TO DIRECTORY ]