home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / tutor / l7p080 < prev    next >
Text File  |  1990-07-15  |  4KB  |  97 lines

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║  Lesson 7 Part 080 F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.         ┌──────────────────────────────────────────────────┐
  6.         │ Creating a Music Language with CREATE ... DOES>  │
  7.         └──────────────────────────────────────────────────┘
  8.  
  9. And now the fun begins.  We are going to use CREATE ... DOES> to create
  10. a music language.  but first we need some words that will make some
  11. tones in our computers speaker.  The ones I give will work for a PC and
  12. are quite primitive.
  13.  
  14. \  PC!  ( byte  n   --  )  Output byte to port number n.
  15. \  PC@  ( n   --   byte )  Input  byte from port number n.
  16.  
  17. HEX
  18. :   S.ON  ( --  -- )      \  Turn speaker on.
  19.         61 PC@  3  OR   61 PC! ;
  20.  
  21. :   S.OFF ( --  -- )       \ Turn speaker off.
  22.         61 PC@  FFFC AND  61 PC! ;
  23. DECIMAL
  24.  
  25.  
  26. \ Here is the word to create a tone in you PC's speaker:
  27.  
  28. : TONE  ( freq  -- )       \ Make tone of specified frequency.
  29.     21 MAX                 \ Lowest frequency.
  30.     1.190000  ROT          \ Get divisor for timer.
  31.     MU/MOD                 \ 16bit.rem   32bit.quot
  32.     DROP NIP  [ HEX ]      \ Keep 16-bit quotient only.
  33.     0B6   043 PC!          \ Write to timer mode register.
  34.     100  /MOD SWAP         \ Split into hi and low byte.
  35.     42 PC! 42 PC!          \ Store low and high byte in timer.
  36.       S.ON ;               \ turn speaker on.
  37. DECIMAL
  38.  
  39. The words S.OFF  sound off,  S.ON  sound on  and  TONE are the only
  40. system dependent words in our application.
  41.  
  42. OK,  Here we go.  We create our music language using the three steps
  43. outlined in the previous paragraphs.
  44.  
  45. Step 1.  We extend the FORTH compiler adding musical NOTE defining
  46. capability.  Here is the definition of our new defining word called NOTE
  47. It has a few support words so things can be tuned and adjusted later.
  48.  
  49. \ The music NOTE compiler.
  50.         VARIABLE OCTAVE         \ Octave to play
  51.         VARIABLE BEAT           \ Number of beats for this note
  52.       5 CONSTANT SPEED          \ Alter to change 1/4 note time.
  53.  
  54. : DELAY  ( -- )
  55.          SPEED TENTHS  ;      \ Approx .5 sec delay with SPEED of 5
  56.  
  57. \ Make it easy to change the beat and octave.
  58. : 1/1  4 BEAT   ! ;  : 1/2   2 BEAT   ! ;  : 1/4  1 BEAT   ! ;
  59. : 1ST  1 OCTAVE ! ;  : 2ND   2 OCTAVE ! ;  : 3RD  4 OCTAVE ! ;
  60.  
  61. \ Rest for current number of beats.
  62. : REST ( -- )
  63.        BEAT @ 0 ?DO DELAY LOOP  ;      : R   REST ;
  64.  
  65. \ The note compiler.
  66. : NOTE   CREATE   ,                     \ Compile time like constant.
  67.        DOES>  @  OCTAVE @ *  5 + 10 /   \ Run time, fetch value, compute
  68.                 TONE  REST S.OFF ;      \ frequency and play the note.
  69.  
  70. The part before the word DOES> and after the word NOTE describes how to
  71. make notes.  The part after the word DOES> and before the  ;  tells how
  72. to play a note, or what is to happen when you execute a note type object.
  73.  
  74. \ This is step 2,  we make some notes.
  75. \ Create the notes with the note compiler.
  76. 1308 NOTE C     1386 NOTE C#    1468 NOTE D     1556 NOTE D#
  77. 1648 NOTE E     1746 NOTE F     1850 NOTE F#    1960 NOTE G
  78. 2077 NOTE G#    2200 NOTE A     2331 NOTE A#    2469 NOTE B
  79.  
  80. \ This is step 3,  we use some of the created notes.
  81. \ Test the created notes.
  82. : SCALE  1ST 1/4  C D E F G A B 2ND 1/2 C R
  83.              1/4  C D E F G A B 3RD 1/2 C R ;
  84.  
  85. ╓───────────────╖
  86. ║  Problem 7.5  ║
  87. ╙───────────────╜
  88. Implement the music language above and test its operation with SCALE.
  89. Make sure that your definitions go into the SOUND  VOCABULARY that you
  90. defined earlier.  A detailed explanation of NOTE follows in the next
  91. Part of Lesson 7.
  92.  
  93. ┌───────────────────────────────────┐
  94. │  Please Move to Lesson 7 Part 090 │
  95. └───────────────────────────────────┘
  96.  
  97.