mockingboard

Csa2 FAQs-on-Ground resource file: R027MOCKBD.DOC
The Csa2 (comp.sys.apple2) Usenet newsgroup Apple II FAQs
originate from the Ground Apple II site. Admin: Steve Nelson
ref: ftp://ground.ecn.uiowa.edu/2/apple2/Faqs/

This document was scanned and put through Corel's OCR. The application
had a difficult time distinguishing between "o's" and zeroes and "i's" and ones.
If you encounter any problems please e-mail me at laserdog@bright.net.

Mary Sauer (Laserdog)	June 17, 1999

0-2 ... 0-3

CONTENTS 

PREFACE	0-1					
CONTENTS	0-2	 
SYSTEM REQUIREMENT 	0-4
MOCKINGBOARD DIAGRAM 	0-5
INSTALLATION	0-6 
INTRODUCTION TO THE MANUAL	0-8 
SPEECH	1-1 
   Add Inflection with the Director's Cues	1-2 
   Add Texture to the Voice 	1-5
   Soft to Loud Voice 	1-6
   Low to High Voice	1-6 
   Slow to Fast Voice	1-7 
   Alter the Voice Quality	1-7 
   Pulling it All Together	1-8 
   Save the Words Created	1-8 
   The Rule Table	1-9 
A Word About Phonemes	1-9 
How To Make Changes To the Rule Table	1-10 
Let's Hear It 	1-12
Locate the Source of the Problem	1-13 
How to Read a Rule	1-13 
Create a New Rule	1-17 
Make Corrections	1-19 
Save the Changes	1-20 
Delete a Rule	1-21 
Other Useful Commands	1-22
One Final Instruction	1-23 
SOUND	2-1
   A Few Words About the Sound Utility	2-1
   What You Need to Know About Sound	2-2
   MOCKINGBOARD "Knobs" 	2-3
   Getting Acquainted	2-3 
   Noise Only Sound Effects 	2-7
   Turn On Noise Only	2-8 
   Setting Amplitude 	2-9
   What Makes a Train Sound Not a Gunshot? 	2-9
   How Fast is the Train Going?	2-10
   Change a Train into a Helicopter	2-11 
   Change a Helicopter into a Gunshot	2-11 
   Tone Only Sound Effects 	2-11
   Start Fresh with a Clean Screen	2-13 
   Turn On Tone Only	2-13 
   Set the Amplitude	2-13 
   Create Musical Notes	2-13 
   Play a Note	2-14 
   Play a Chord	2-14 
   Play Two Chords	2-14  
PROGRAMMING	3-1 
   The Sound Chips	3-2 
   How the Sound Parameters are Set on the Chip	3-2 
   Summary of Primary Routines and Table Access Routine	3-5 
   Siren Sound Effect	3-6 
   The Speech Chips	3-12 
   Using Text to Speech and the Rule Table in Your Program	3-15 
APPENDIX A Phoneme Charts	A-1 
APPENDIX B Programmable Sound Generator Registers	A-3 
APPENDIX C Noise and Tone Enable Register	A-4 
APPENDIX D Envelope Shape Register	A-5 
APPENDIX E Equal Tempered Chromatic Scale	A-6 
APPENDIX F Assembly Language Program Listing	A-9 
LIMITED WARRANTY

0-4

SYSTEM REQUIREMENT 
Apple II, II+ or Ile
48K RAM 
1 Disk Drive
Monitor
2 External 8 ohm Speakers 

CAUTION 
The demonstration disk included in the package contains a wide variety of demonstrations and utilities which uses most of the available disk space. Utilities such as the Rule Editor for the text to speech portion and Sound Utility allow you to save additional files. If you plan to use the utilities, please separate the sound and speech portions so that you will have adequate room to expand. The following procedure should be followed. Catalog your disk and note the file name "S/ONLY." Below this file are all the files related to the speech demonstration. Save these files onto a fresh disk with S/ONLY and use the new disk as a work disk. Your HELLO or file name used to init the disk should run the file name S/ONLY. Load SPEECH from the new disk and change line #I 50 to read I 50 END and delete line #75. You may also wish to do the same with the remaining sound portion and save the original disk as back up. MAKE A BACK UP DISK BEFORE USING THE UTILITIES. 

Included on the demonstration disk are two speech related programs to allow you to enter unlimited words and have them spoken back. Also, the Text Reader program will read back any text saved as a text file, not just those created using Text Maker. To use the Text Reader and Maker, please run Text Reader and enter the file name HELP. This file was created using Text Maker and will provide you with the necessary instructions to utilize both programs. 

0-5
 
  MOCKINGBOARD DIAGRAM 

    _______   ________________   ________             _
   |       | |                | |        |   {3} {4} |_ [5]
   |  [1]  | |      [2]       | |   [7]  |    __   __
   |_______| |________________| |________|   |6 | |6 |
                                             |__| |__|
    _______   ________________   ________
   |       | |                | |        |
   |  [1]  | |      [2]       | |   [7]  |
   |_______| |________________| |________|

   |_____________________________________________                  [8]                 ___|
                                                                                             |___________________|

1.	2-Sound Chip
2.	2-6522 Versatile Interface Adapter
3.	Volume Control for Top Row of Sound/Speech Chips
4.	Volume Control for Bottom Row of Sound/Speech Chips
5.	Audio Cable Connector
6.	2-½ watt Audio Amplifier Chip
7.	Speech Chips/Sockets for Speech Chip
8.	Gold Placed Edge Connector

  MOCKINGBOARD CABLE
    __
    __|===================================O- RCA Phono Jack
    __|===================================O- RCA Phono Jack
Female mini-molex                   Shielded audio cables
        plug

0-6

INSTALLATION 
We know lots of companies claim a child can install their products. But, what does one do if no child is available?  Sweet Micro Systems has written these installation instructions for adults. 

SETUP 

1. Turn off your computer and remove its cover. 

2. Discharge any static electricity by touching the metal power supply casing. 

3. Remove MOCKINGBOARD and audio cable from the package. Hold MOCKINGBOARD by its edges. Avoid touching the gold plated edge connector (8). The oil from your hands may contaminate the connector and cause a poor electrical connection. 

4. Extend the audio cable fully. 

5. Connect the female mini-molex plug end of the cable to the audio cable connector (5) located on MOCKINGBOARD. 

6. Insert MOCKINGBOARD into slot 4 of the Apple's peripheral slots located at the rear of the Apple. Gently rock MOCKINGBOARD until it is properly seated. MOCKINGBOARD is not slot dependent. While MOCKINGBOARD can be configured for any slot except Slot 0, the demonstration disk was specifically written for slot 4. 

7. Connect the RCA phono jack-ends of the audio cable to the speakers. MOCKINGBOARD has two ½ watt amplifier chips (6) on board to directly connect it to your speakers. You may use an external amplifier. If you do so, connect the RCA phono jack-end of the cable to the stereo amplifier auxiliary inputs. 

GETTING STARTED 

8.Leave the cover off the computer until you have had a chance to adjust the volume. The volume control knobs (3) and (4) are grey disks located at the top rear of the board. These knobs are thumbwheel devices. No tool is necessary to make adjustments, just your thumb. Simply roll the wheel back and forth to adjust the volume.

0-7
9. Place the demonstration disk in the drive and boot the disk. Select SOUND EFFECTS DEMONSTRATION from the menu. This demonstration is presented in a menu form. You may hear the sound effects in any order and as many times as you wish. The sounds alternate between speakers, that is, the first selection is played on one speaker, the next sound effect is on the other speaker. 

10. Type A for GUNSHOT. Adjust the volume with one of the volume control knobs, (3) or (4). To lower the volume, roll the knob away from you as MOCKINGBOARD sits in the computer, or towards you to raise it. 

Type B for MACHINE GUN. Adjust the volume with the other volume control knob. Lower or raise the volume as described above. 

The BOMB sound effect jumps from one speaker to the other. Some, like CLOCK, play continuously until you select another letter. You may also play two sounds at the same time on separate speakers. A and B will play at the same time, but A and C will not because they use the same speaker. 

11. To return to the Main Menu, press the <ESC> key. 

12. Select A from the Main Menu for speech and select A again for a message from Sweet Micro Systems. If your board has the gift of speech, your message will be audible. 

13. If your MOCKINGBOARD has a speech chip, select Text To Speech to type and have MOCKINGBOARD speak. When MOCKINGBOARD is ready, a question mark will appear at the top of the screen. Type any word or phrase and then press the return key. When MOCKINGBOARD has finished speaking what you have typed, the question mark will reappear. Type some more words or phrases. You may type as many as 239 characters at one time. To return to the Main Menu, type QUIT. 

This demonstration disk contains other examples of MOCKINGBOARD's capabilities. In addition, utilities have been included to allow you to further explore both sound and speech. Have fun. 

In order that you may progress at your own pace, this manual has been separated into sections. The first section is Speech. Here, you will learn to develop different personalities for MOCKINGBOARD using interesting expressions and voices. If you would like to, delve deeper and learn to correct mispronounced words.

0-8
The second section is Sound. learn to develop, modify or completely change sound effects. Take a ping and change it to a plunk or start with an explosion and change it into a train. Learn about how MOCKINGBOARD produces sounds and how to create them from scratch. 
The third section is Programming. Learn how to include sound and speech you created into your own programs. if you don't have a program in mind, you will after you explore the many possibilities for sound and speech enhancements. 

INTRODUCTION TO THE MANUAL 
Think of MOCKINGBOARD as the telephone of a friend you wish to call. In order to call a friend, you need the area code and phone number. During the conversation, information flows back and forth. Communication with MOCKINGBOARD is almost as simple as calling someone on the phone. 
The concept of communicating to MOCKINGBOARD is often over looked. When you ran the demonstration, you made sounds flow from your speakers just by pushing a few keys. Trying to duplicate these sounds in your own programs takes a bit more effort. The programming is simple; the concepts behind it are not. 

Telephones are connected to each other by lines through which our conversations are transmitted. Since we share lines with others, a direct line must be opened specifically for the two phones. This line is opened when you dial a phone number and someone picks up that phone. Communicating to MOCKINGBOARD works the same way.

The circuitry in your Apple allows you to transmit information directly to MOCKINGBOARD, but a direct line must first be opened. The slot number in which MOCKINGBOARD resides can be thought of as an area code, The "phone number" pinpoints a chip on MOCKINGBOARD. 

MOCKINGBOARD has two chips which have their own "phone number" and may be "called" individually. These chips act as a switchboard routing all in-coming and outgoing "calls" to and from the Apple and MOCKINGBOARD's sound and speech chips. 

You are the director/composer of MOCKINGBOARD sounds and speeches. This manual will step you through their creation and give you the necessary background information required along the way. First, we'll create sound/speech using the utilities provided on the demonstration disk. Then, we'll show you how to use the sounds created in a program. 

1-1
SPEECH 
Man's ability to articulate sounds for the purpose of communicating ideas distinguishes him from the rest of the animal kingdom. This ability, which we now take so much for granted, was once thought to have been conferred upon man by the gods themselves. In the Book of Genesis, for example, Adam is given the power of speech by the Lord in order to name the animals, thereby demonstrating his likeness to God. Given such history, it is not surprising that man perceived the power of speech as an integral part of his quest for divinity. 

As man evolved and had more needs and desires to articulate, a complex system of speech organs was developed in order to provide a more varied and sophisticated means of expression. The human voice is now capable of a wide range of sounds from grunts to operatic cadences. It was only natural that, as man's brainchild, the computer became more complex and imitative of human abilities, it would reach a stage of evolution which would require the ability to communicate in a more human fashion. 

MOCKINGBOARD gives your computer the power of speech. Like a human, it will read text aloud pronouncing each word according to a series of rules. These rules are the basis for Sweet Micro Systems' method of converting text into a code MOCKINGBOARD can understand. 
MOCKINGBOARD will allow you to introduce expression into the voice. Expression is important to the intelligibility and the meaning of the words spoken. The Sweet text to speech program automatically sets the speech parameter s for general use and allows you to introduce stress and intonation to text by using special markers. You may change these parameters to create interesting voices. 

There are many exceptions to standard pronunciation rules. Names are especially difficult and are frequently mispronounced. Remember how your teacher stumbled through her class list on the first day of school? How disappointed you must have been if your name was incorrectly announced to the class! 

If MOCKINGBOARD has trouble with your name or names of family members and friends, you can easily correct it and we'll show you how. We know the name, Robert, is mispronounced. We will step through the corrections necessary, and in the process tell you about MOCKINGBOARD's features, capabilities and our method of converting text into speech. 

1-2
A special section explains how to enhance your programs with speech you create using the Rule Editor or using the text to speech program right in a program of your own creation. 

ADD INFLECTION WITH THE DIRECTOR'S CUES 
MOCKINGBOARD is all set to start talking. With a little assistance, MOCKINGBOARD will express itself with the use of inflection or pitch patterns, and show emotion. Limited use of inflection is automatically performed by the program. For example, it recognizes punctuation marks and responds accordingly. You will be able to employ inflection more creativity as you compose your sentences. 

Boot your demonstration disk and select A for speech and then select the Rule Editor from the Speech menu. You will be asked to SELECT CHARACTER TABLE TO EDIT. Type A and the A rule table will appear. Type T for Test Mode at ENTER COMMAND. Now we are ready to proceed. 

The cursor, next to the question mark, is ready for you to type in a word. After you type the word, press the return key. The word will be spoken at an average speed, in an average voice with minimal variation or emotional coloring. These speech characteristics have been preset to normally used values. If you would like MOCKINGBOARD to be more expressive, you may take advantage of its interpretive talents. MOCKINGBOARD's theatrical abilities are not to be underestimated. 

Fine actors, regardless of their talent, require good directors. MOCKINGBOARD may be directed by inserting special markers into the text as it is typed in. These markers will tell MOCKINGBOARD when to show emotion, It already recognizes normal punctuation marks, such as commas, periods and question marks, and will respond with an appropriate pause, or raise or lower its voice. You may also place emphasis on a particular word or syllable, by inserting slash key stress markers (/) as cues to indicate when MOCKINGBOARD should play up a scene. 

From the Test Mode, enter the word, "Hello," at the prompt. Think, like a good director, of the different ways that HELLO can be interpreted. When an actor speaks, he conveys emotion by changing the pitch, volume, and rate at which he speaks. Press return and listen. How could you make this word more expressive? Try typing in the following examples. Each time you wish to clear an entry, type N for new entry. Should you wish MOCKINGBOARD to repeat itself, type R for repeat. The comments to the right explain

1-3
what effect the markers have on the word. (Note: You do not have to type the question mark, it will appear automatically. 
?HELLO 	....would have no variation in stress 
?/HE/LLO 	....would stress HE
?HELL/O/ 	....would stress O
?HELLO? 	....would cause a rise in pitch at the end
?HELLO. 	....would cause a drop in pitch at the end 
Other combinations of punctuation marks and stress marks are also possible. Stress markers generally work in pairs, but you may insert any number of them into a text. The number of stress markers and their position will determine how each word or syllable will be spoken. Be experimental! 
Try typing the following examples, and listen to MOCKINGBOARD perform. 

INFLECTION DIAGRAM 1: DECLARATIVE SENTENCE 

Mary had a /li/ttle lamb. 

4
3                         __
2         ________|   \
1                              \

MOCKINGBOARD has just described Mary's pet. Diagram 1 shows the inflection pattern, or the rate of change of pitch, for a basic declarative sentence, which emphasizes the lamb's size. 

The English language has several levels of pitch. Our text to speech method approximates these levels by using four main pitch levels. These levels are designated by the digits which appear on the left side of the diagram. 

"Mary had a little lamb" is spoken at pitch level two until the first stress marker is encountered. At the first stress marker, the pitch rises from level 2 to level 3. It will remain at level three until another marker is encountered. At the second stress marker, the pitch will glide up or down depending on the final punctuation. A period at the end of a sentence, as in this example, indicates a drop in pitch. If no final punctuation mark exists, then a period is assumed. 

1-4
lf we want MOCKINGBOARD to show more feeling, we must give it additional direction. Try typing, "/Mar/y had a/li/ttle lamb." 

INFLECTION DIAGRAM 2
		
/Mar/y had a /li/ttle lamb.
     __
4   |   |
3       |                 __
2       | ________|   \
1                              \

This diagram shows the change of pitch for a declarative sentence with more than two stress markers. In this example, the pitch starts at level 3 and rises to level 4 upon reaching the first marker. The second marker signals a drop in pitch to level 2. Upon reaching the next pair of markers, the pitch level will again rise and then fall until the period is encountered. 

MOCKINGBOARD's recitation of "Mary had a little lamb" deserves an ovation. The dual stress pattern was interpreted with greater emphasis on the first pair of markers than on the second, Such a stress pattern, in which the initial stress is more emphatic than stresses which follow, is typical of the English language.

Perhaps you would like MOCKINGBOARD to ask some questions about Mary?. Let's change some of the cues and try some interrogatives. Type "Mary had a/li/ttle lamb?" 

INFLECTION DIAGRAM 3: INTERROGATORY STATEMENT 

Mary had a /li/ttle lamb? 
                                    ?
4                                /
3                         ___/
2         ________|   
1                              

If you compare this recitation with INFLECTION DIAGRAM I, you will see that the performance differs only at the end where the different cue has caused a rise in pitch instead of a drop. The difference in pitch may appear to be insignificant, but we must remember that pitch assists us in interpreting a speaker's intent and helps us to recognize when he is stating or questioning. We are now doubting the lamb's small size. 

1-5
The director's cues are actually much more sophisticated than they may appear. The stress markers not only cause MOCKINGBOARD to change its pitch, but also its volume, the number of words spoken per second and finally, the voice itself. When a syllable is stressed, it generally becomes louder, the speech rate slows to make the syllable longer, and the voice quality changes slightly. You can achieve all of these theatrical effects simply by typing in normal punctuation and experimenting with the stress markers. 

ADD TEXTURE TO THE VOICE 
As Director, you have only begun to utilize MOCKINGBOARD's many talents. With your assistance MOCKINGBOARD can change its voice. MOCKINGBOARD's voice is described by four parameters: amplitude, inflection, filter frequency and speech rate. These parameters have been preset to values which will appear in the lower half of the Test Mode screen. 

CURRENT PARAMETERS
11	-AMPLITUDE 		232	-FILTER FREQUENCY
8	-INFLECTION  	            8	-SPEECH RATE 

Should you wish to change any of these parameters, the commands below will allow you to do so. The mark is defined as the control key (or CTRL). 

           COMMAND            RANGE 	                   	               COMMAND 		RANGE
^A  AMPLITUDE 	0-11			^F  FILTER FREQUENCY 	0-253
^I   INFLECTION	0-25			^R  SPEECH RATE		0-13

NOTE: If you typed a word or phrase to be spoken and have not cleared it with an N for new entry, you will not be permitted to make any changes. The CURRENT PARAMETERS display is replaced by an ENTER COMMAND: prompt which will only accept R for repeat, N for new entry or Control-S for save the word. Type N for new entry and you will be returned to an entry mode to make changes. 

1-6
SOFT TO LOUD VOICE, ^A, AMPLITUDE
MOCKINGBOARD can speak in a variety of voices. It can speak in a barely audible whisper, or for stage purposes, in a deep sonorous voice. 
Volume or amplitude, may be adjusted with the ^A command. Type Control-A. The program will respond with a prompt. 

ENTER NEW AMPLITUDE SETTING 

You may enter any setting from 0 to 11. The normal setting is set at 11. Try 4 and press return. The new setting will be reflected in the CURRENT PARAMETERS Table. 

CURRENT PARAMETERS 
4 	-AMPLITUDE 	232 	-FILTER FREQUENCY 
8 	-INFLECTION 	8 	-SPEECH RATE 

Now type in "Hello." If MOCKINGBOARD spoke too softly, type N for new entry, and A for amplitude. This time, try typing in 8, press return, and check for the new value in the CURRENT PARAMETERS Table. Direct MOCKINGBOARD to speak again. When you are satisfied that MOCKINGBOARD is speaking at a proper volume, you may turn your attention elsewhere. 

LOW TO HIGH VOICE, ^I, INFLECTION
Different roles or personalities require different voices. A child speaks in a high pitched voice, an adult male in a low pitch. With your direction, MOCKINGBOARD can utilize its talents and do impersonations. 
Suppose that MOCKINGBOARD was asked to play an evil villain in a theatrical production. Its normal voice won't do at all. In order to change pitch or inflection, type Control-I in the Test Mode. A prompt will appear to assist you. 

ENTER NEW INFLECTION SET NUMBER 
You may enter any value from 0 to 25, When you change the inflection set, you are moving the four main pitch levels up or down on a musical scale. An evil character requires a very low voice, so let's type in 0, and press return. The new value will appear in the CURRENT PARAMETERS Table. Now type "/WEL/COME TO MY DOMAIN," press return, and meet your villain. 

1-7
MOCKINGBOARD's talents are far too great to play only evil character types. Let's create another role. Type N for new entry, I for inflection and set the inflection set to 25. Press return. 
MOCKINGBOARD will now speak like a little child in a very high pitched voice. Type "M/OMM/Y?" and press return. MOCKINGBOARD's versatility will amaze you. 

SLOW TO FAST VOICE, ^R, SPEECH RATE 
Some roles will require that MOCKINGBOARD speak very quickly. The speech rate may be adjusted on a scale from 0 to 13, from excruciatingly slow to incredibly fast. Type Control-R for the prompt: 

ENTER NEW SPEECH RATE: 

Set the speech rate to 1 and press return. Also, type ^I for inflection and change it back to 8. MOCKINGBOARD's new line is, "I am s/o/tired," and it is spoken as though MOCKINGBOARD will be asleep before it reaches the word "tired." (Don't forget to type the stress markers around the O.) On the other hand, type in a speech rate of 11, and press return. Now type "Peter Piper picked a peck of pickled peppers," and press return. MOCKINGBOARD never stutters. 

ALTER THE VOICE QUALITY, ^F, FILTER FREQUENCY 
The last parameter you may adjust is the Filter Frequency or voice quality. One of MOCKINGBOARD's greatest virtues is its ability to change its voice, if you type Control-F in the Test Mode, the prompt will read: 

ENTER NEW FILTER FREQUENCY NUMBER: 

By typing in any number from 0 to 253, and pressing return, you may direct MOCKINGBOARD to speak in a different voice. Type in 242 and press return. Change the speech rate back to 8. Type "TAKE ME TO YOUR LEADER." MOCKINGBOARD could play a creature from outer space. 

Let's try another. Type N and Control-F. Suppose we type 220 and press return. MOCKINGBOARD's voice acquires a previously undiscovered dignity. If MOCKINGBOARD now says, "YOU ARE A/GREAT/ DIRECTOR," we can believe it. 

1-8
PULLING IT ALL TOGETHER 
MOCKINGBOARD's abilities may be further explored by changing more than one parameter at a time. Try changing Filter Frequency and Inflection together. Any combination of the four parameters is possible, so you may create an unlimited number of voices. 
Let's go back to the evil villain and make his voice more convincing. What the voice lacked earlier was the appropriate filter frequency.
Change the inflection to 0 and the filter frequency to 220, giving the speech a lower and deeper voice quality. Also slow the speech rate to 6. Now, type "/WELCOME/ TO MY DOMAIN. HA, HA, HA." 
The child's whimper was high in pitch, but the voice quality was too strained. Change the voice quality to produce a softer, more innocent cry. Type 20 for inflection, 240 for filter frequency and 2 for speech rate. You may also lower the amplitude, if you wish. Type "/MOMMY? /I/ LOVE YOU." 

SAVE THE WORDS CREATED, ^S, SAVE
As you develop words or phrases using the above methods, you may wish to save them. While the words and speech parameters are still on the screen, type CONTROL-S for save. DO NOT TYPE N FOR NEW ENTRY BEFORE YOU TYPE CONTROL-S. This will erase your words. Remember that after you enter a word, the only acceptable commands are N for new entry, R for repeat and S for save. When you type S you will be asked to enter a filename. 

ENTER FILENANE: 

You may enter any filename up to eight characters in length beginning with a letter A-Z. The following message will appear while the new file is written to your disk. 

PLEASE WAIT – SAVING COMPOSITE FILE 

The words you save may be used for current or future programs you may wish to enhance with speech. Please refer to the section on programming information for samples and an explanation of how you incorporate speech into your work. 

We have only whetted your appetite. With all the features presented in the previous pages, you may create whatever creature or character your imagination dictates. MOCKINGBOARD's talents are constrained only by your imagination. 

1-9
THE RULE TABLE 
Sweet Micro Systems' method of converting text to speech is rule based. Words are broken into sound patterns, which are represented by rules. MOCKINGBOARD matches these rules to characters in words or phrases. When a match is made, MOCKINGBOARD speaks. 

The quality of rules developed in each character table will determine the accuracy of the resulting speech. Our language presents a formidable challenge in developing a comprehensive rule table. The Sweet table should be considered a base rule table, which may be personalized to suit your particular application. Sweet Micro Systems has made an effort to free you from a predetermined vocabulary and pronunciation, by including a utility called the Rule Editor. The Rule Editor will allow you to alter the Sweet table. New rules may be added, existing rules may be edited or redefined, and nonessential rules may be deleted from the tables. Personalize the Sweet table and let MOCKINGBOARD tell you what you want to hear. 

A WORD ABOUT PHONEMES 
MOCKINGBOARD produces speech using a building block method of combining basic sound units called phonemes. In order to teach MOCKINGBOARD to speak intelligibly, we must train our ears to hear individual phonemes in our own speech. MOCKINGBOARD can produce 64 speech sounds in all, more than enough to reproduce any speech you care to hear. 

Phonemes may be divided into two distinct categories, consonants and vowels. A list of MOCKINGBOARD's phonemes, codes, and a key to their pronunciation are provided in Appendix A, pages A- 1 and A-2. The chart is divided into two tables, one for vowels and the other for consonants. The phonemes are listed in the first column of each table. Each phoneme has four possible codes, which allow the user to select different durations for each sound. By referring to the examples and experimenting with phoneme length, anyone can produce highly intelligible speech. 

Depending on where you live, your pronunciation of certain words may vary from MOCKINGBOARD's pronunciation. You will find that some words pronounced by MOCKINGBOARD will conflict with what you would normally expect to hear. Don't hesitate to change the pronunciation of any word you wish. MOCKINGBOARD has a great capacity to learn. 

1-10
Boot the demo disk and select  A for speech and then select Text to Speech, Type your name following the question mark and press return. How did MOCKINGBOARD do? If MOCKINGBOARD pronounced your name correctly great! If not, let's correct the rule table so MOCKINGBOARD will always get it right. 

Type QUIT to exit the Text to Speech mode and select the Rule Editor. The Rule Table has been designed to generate correct pronunciation for a majority of words. It operates using a text to speech method which allows the computer to analyze text, much in the way a person talks. Should the computer not be informed about a particular rule for pronunciation it will, like a human, make mistakes. Errors will occur because our alphabet is not an accurate representation of our phonemic system. There is not a one-to-one relationship between an alphabet letter and a particular phoneme. If you think back to your grade school days, you will remember the difficulties first graders have with the rules for silent e, the e which is not pronounced but signals a change in the preceding vowel. 

HOW TO MAKE CHANGES TO THE RULE TABLE
^Z, SELECT
When the Rule Editor is ready, you will see the following prompt at the top of the screen. 

SELECT CHARACTER TABLE TO EDIT 

The Rule Table consists of all alphabet letters, all digits and their upper case symbols, and all punctuation marks. In order to demonstrate how to correct the Rule Table, we have selected the name, "Robert," which we know is mispronounced. Type R for the R character table, The R table will appear on the screen. It should look like Figure 1–1.

The first two lines tell you where you are in the rule table and the present status. The number of rules (B), address (C), and bytes (D) will constantly change as you edit the table. 

Ten rules will appear on the screen at a time. If the character table contains more than ten rules, press the space bar to advance to the next ten. When you reach the end of the table, press the space bar to return to the first ten rules. 

1-11

[A]	RULE TABLE – R 		      NUMBER OF RULES - 16 	[B] 
[C]	ADDRESS – 34494			LENGTH - 160 BYTES 	[D] 
1.	!(R)! =OESC
2.	!(READY)! = I D4A4A2501
3.	!(READ) = ID414125 
[E] 	4.   !(REC)+ = ID0130 
5	!(REC) = ID0A29
6	!(RE)^ # = ID01
7	(RE)D = ID0A
8	(RHY)TH = 1D07
9	(RH) = ID
10	(RINE)! = I D0138 
[F] 	ENTER COMMAND: 

	Figure 1-1 Screen Display of a Character Rule Table

KEY TO THE RULE TABLE 
[A] Indicates which character table you are viewing.
[B] Indicates the total number of rules contained in this table
[C] Indicates the starting address in memory where this table can be found
[D] Indicates the total length (in bytes) of this table
[E] The first ten rules
[F] Type one of the editor commands in Table 1-1

KEY		FUNCTION			KEY		FUNCTION 

^Z		Select new character table	  U		Update Main Rule Table
  E		Edit an entry			^S		Save Rule Table to disk
  I		Insert a new rule		^L		Load Rule Table
  D		Delete an entry		^P		Print Character Table
  T		Test mode			^Q		Quit or exit program
						^X		Help menu	

SPACE     Advance to next page of current Character Table 

		Table 1-1 List of Rule Editor Commands 

1-12
LET'S HEAR IT 
The Rule Editor has a test mode which allows you to evaluate MOCKINGBOARD's pronunciation.of a word or phrase. You will be able to access this mode from any character table, and once in this mode, you may type any word or phrase. 

T, TEST MODE 
Type T for the Test Node and a screen similar to that of Figure I -2 will appear. The Test Node will allow you to enter 239 characters or about six and a half lines of characters at the question mark prompt. A beep will tell you that you have reached the limit. Type the letter U until you hear a beep. Press return and listen to the results. The sequence of two digit numbers at the lower half of the screen are the phoneme codes selected from the rule table by the text to speech conversion program. When you typed the return, the U's were converted to code using the rule(s) matching this character string. 

TEXT TO SPEECH TEST MODE
? 
		
CURRENT PARAMETERS 
11	-AMPLITUDE 	      	232	-FILTER FREQUENCY 
8	-INFLECTION	 	8	-SPEECH RATE 
	
		Figure 1-2 Test Mode Screen Display

KEY		 FUNCTION			KEY		FUNCTION 

R		Speak again 	 	            ^A		Set amplitude
N		New entry 			^L		Set inflection
^S		Save word or phrase	            ^F		Set Alter frequency
^Z		Return to Editor		^R		Set speech rate level
						^X		Help menu

SPACE 	Advance to next phoneme page 

		Table 1-2 Test Mode List of Commands 

1-13
LOCATE THE SOURCE OF THE PROBLEM 
Type N, to clear the input area for a new entry. Type Robert next to the question mark prompt and press return. It sounds close, but not quite right. The sequence of two digit number s at the bottom half of the screen represents the phoneme codes selected for Robert. If you compare each of these phoneme codes with those of the Phoneme List in Appendix A, page A-1 and 2, you will find that this name is pronounced as /ROWBFRT/ and not as /RAHBERT/, which is correct. 

	ID	11 	A3 	64	SC	68	C0
 / 	R	O	W	B	ER	T 	PAUSE	/ 

In order to change the /OW/ sound to an /AH/ sound we must first determine which rule caused the error. Let us return to the rule table. Type N to clear for a new entry. Type Control-Z to return to the table from which you entered the Test Mode. Rather than go directly to the O rule table, we must first search the R rule table. The rules in the R table always define how the letter R will be pronounced, but the next character(s) in sequence may also be included in the R rule. It is possible that a rule which exists for (RO) caused the error. 

HOW TO READ A RULE 
Each rule in the table consists of three main parts, the rule definition on the left, the equals sign, and the phoneme codes on the right. The first rule of the R table states that R [1], which is preceded and also followed by a nonalphabetic character [2], is to be pronounced [3] as the composite sound of /AH-ER/, which is equal to the code OE5C [4], 

       [1]
        |
|     !(R)!=OESC
      |  / | \
      [2] [3] [4]

[I] Parentheses serve as boundary markers. They act to identify the particular character or characters which are to be matched. In this rule, only R will be pronounced. 

[2] The exclamation points indicate a nonalphabetic character which can be a space, punctuation mark, digit, or any other symbol except those which have been reserved as classification symbols (See Table 1-3). 

1-14
[3] The equal sign acts to assign the phoneme code to the contents of the parentheses.

[4] If all the conditions on the left are met, then a match is achieved and the contents of the parentheses will be pronounced as indicated by the phoneme code(s) to the right. The codes are set aside in a buffer (a temporary memory location) until the entire word or phrase has been converted.

Other symbols used in rules are given in Table 1-3a. The symbols help to generalize rules to encompass as many words with the same pronunciation pattern as possible. For example, a rule states that the letter A, preceded by any single consonant ( ^) and followed by the letter T, is to be pronounced as a short A. This r ule may match the word BAT, CAT, FAT, HAT, NAT, PAT, RAT, SAT, etc. It will also match BATTLE, CATTLE, RATTLE, BATCH, CATCH, HATCH and so forth. This single rule will insure that the letter A, in all these words and many more like them, will be pronounced correctly.

How does the program know that B, C, F, etc. are consonants? The program is told. Each letter in the alphabet is classified as shown in Table 1-3b. When Robert was typed, the program converted it to these symbols and set it aside for reference. 

	Symbols for VOWELS 		              Symbols for CONSONANTS 
#	one or more vowels 			^	one consonant 
+	vowels E I Y				.	consonants BDGJLNNRVWZ 
						:	zero or more consonants 

            Symbol for CHARACTER 			Symbol for ALL OTHERS
	use the character			?	nonalphabetic

		Table 1-3a Classification Symbols used in rule 

A   B   C   D   E   F   G   H   I   J   K   L   M
#     .    ^    .    +   ^     .    ^   +   .   ^     .     .

N   O   P   Q   R   S   T   U   V   W   X   Y   Z
      #    ^    ^    .    ^   ^    #     .     .    ^    +    .

		Table 1-3b Classification Symbols: used in conversion

1-15
Rule number I does not apply to Robert, because the O in Robert fails to match the exclamation point on the right of R. 

   /   ROBERT  /
      |  |  |
      ! R ! 

If we had typed in "R" alone, a match would have been achieved. The text to speech program automatically inserts a space on either side of a word or phrase to be converted, to mark where it begins and ends. Therefore, the exclamation point on the left matches the space which precedes the name, Robert. A match is not achieved on the right, because the letter O is a vowel, not a nonalphabetic character. 

Compare the name, Robert, to the remaining rules in the R table. Each letter could be represented by its own character or a general symbol defining a vowel or a consonant. The letters in the name, Robert, may be represented by these symbols: 

R	O	B	E	R	T 
.	#	.	+	.	^ 
^		^	#	^	 

Upon examination, we will see that a match will not occur until the last rule: (R) = I D. 

The last rule states that R in any environment, excluding the rules preceding it, will be pronounced as the R in the word, "rat." Rule number 16 only defines the pronunciation for the letter R, and not the sound of the letter O. Therefore, we must look to the next letter in sequence, the letter O, to locate the source of the mispronunciation.

1-16
We now proceed to the O table, type Control-Z to select a new character table and then O. If you page through the O table looking for a match, you should find a page of rules similar to Figure 1-3. 

RULE TABLE – O			NUMBER OF RULES - 88
ADDRESS – 34420			LENGTH - 849 BYTES

61 (O)^AGE=0E
62 (O)^A = 1163
63 (O)^E = 11A3
64 (O)^I# = 1163
65 (O)^ICE = 51A3 
66 (O)^L# = 11
67 (O)^U = 11 
68 (O)^U = l 1
69 (O)^Y = 1 l
70 (OUGHT) = 1028 

ENTER COMMAND :
				Figure 1-3  The O Rule Table 

A quick glance over the table indicates that all of these rules, with the exception of number 70, define a sequence of letters in which O must be followed by one consonant. To the left of O no symbol or character exists. This means that the rule is not affected by what precedes O and this position is left unconstrained. 

So far any rule from 6 I to 69 could match Robert. Since it does not matter what precedes O and it is the only character within parentheses, we check for a consonant to the right and find B. To the right of B is the vowel E. Search the rules, starting with 61, for "E, ^+ or ^#. Rules 61 and 62 can be eliminated since A follows . Rule 63 matches the E. Since the rule boundary ends here, a match is made. 

   /   ROBERT  /
           |  |  |
          O^E 

This rule states that whenever an O is followed by any single consonant and the letter E, the O will be spoken as the O in "boat." If we try to change this particular rule so that Robert is pronounced correctly, we will find that this change affects other words, such as ROBE, ROPE, VOTE, and HOTEL. In order to avoid the possibility of such a side effect, let us create a rule just for Robert, since it appears to be an exception to this rule. 

1-17
CREATE A NEW RULE 
In order to create a rule we first have to decide where to place it. the placement of a rule is very important, not only within a character table, but also among the rule tables. Always place your rule in the table represented by the first character to be pronounced (within the parentheses). Since the purpose of creating the rule is to insure that the name Robert will be pronounced correctly, we will enclose all the letters within the parentheses. This rule will be placed in the R Table.

 I, INSERT
Type Control-Z ( ^Z) to select a new character table. Type R and the R rule table will appear on the screen. 

First, we must determine where this new rule should be inserted. The program will search through the tables sequentially in its conversion process, so it is important that all exceptions be listed before the general case. Otherwise, the search may end prematurely with a rule for a more general case. We could not, for example, place Robert at the end of the table after 

(R) = ID. 

If we tried to do so, our search would end with the above rule. This is a default rule which will match any word with an R since it does not specify what is to the left or right of R,  the program would proceed to the next character search without ever reaching our Robert rule. 

In the event that you are working with a table of many exceptions, it is wise to alphabetize the exceptions without violating the exception to general case order. In this manner it is easier to locate and examine a particular rule. 

Since only the name Robert will match the rule we wish to create, it may be placed anywhere as long as it is before the last rule. For this example, let's place it in alphabetical order. Search through the table and find: 

14 (RI)V = ID07
15 TH(ROUGH) = ID16 

The Robert rule could be placed between these two rules. (Note: this is an example. These rules may not appear in this manner or consecutively.) Now

1-18
that we know where we would like to place the rule, let's write it. Type I for Insert. You will be prompted with the instruction. 

ENTER RULE TO INSERT AT PROMPT BELOW 

Type the first part of the rule as it appears below next to the > prompt. DO NOT PRESS RETURN! If you did press return, just press return again to display the Enter Command prompt, and begin once more by typing I for Insert. 

	>!(ROBERT)! 

If while entering the rule, you make a typographical error, you may back space using the left arrow key and correct the error. However, if you type past the equal sign, you will not be permitted to back past it. If this happens, press the return. Press it again in response to the next prompt in order to cancel your entry. No rule will be inserted until you type in the location to insert. Now type the equal sign, DO NOT PRESS RETURN! 

The exclamation points in this rule represent spaces. In this way we may exclude the possibility of altering the pronunciation of the same sequence of letters which may happen to be contained in a larger word. If, for example, we write a rule for the name, ROB, and leave both sides of the word unspecified, it would affect the pronunciation of words such as stROBe. To avoid this, we may define a space to the left and right !(ROB)!, so that only these three letters would match this rule. Even ROBert would not match, since there are more letters to the right. 

Refer to the phoneme list on page A-1 and A-2 and look for the phoneme code for an /AH/ sound to pronounce Robert correctly. A portion of that table has been reproduced below. Sometimes there may be more than one possibility. The list of phonemes contains two /AH/ sounds, specified by the phoneme codes beginning with OE and OF. 

			PHONEME LIST (PORTION) 
PHONEME				CODE				EXAMPLES 
				1	 2	 3	 4 
AE				0C	4C	8C	CC		dad	
AE1				0D	4D	8D	CD		laugh
AH				0E	4E	8E	CE		top, about
AH1				0F	4F	8F	CF		father
AW				l 0	50	90	D0		saw, caught

1-19
Notice, that for each sound in the phoneme list, there are four possible phoneme codes. As the value is changed from that of column 1 to columns 2, 3, or 4, the duration of the sound is shortened by approximately twenty-five percent, You may select the length which sounds best to you. If you wish to lengthen a sound, place two phoneme codes for the same sound together. 

Try the /AH1/ sound from the first column. Type the codes as indicated below, replacing only 11 and A3 with 0F for the 0 sound. The rule to be inserted should appear as follows: 

	>!(ROBERT)! = ID0F645C68C0 

All phoneme codes are comprised of two digits. Leading zeros are necessary. Should you make an error, you will be allowed to back space over the phoneme code. The back space works a little differently with phoneme codes. A single back space will move back and erase two digits rather than just one. This will prevent you from entering odd numbers of phoneme code digits. Please note that you will only be permitted numbers and the letters A-F on the right side of the equal sign. Now press return, if you have not already done so. 

The program will ask you where you would like to insert the rule: 

ENTER BEFORE RULE NUMBER: 

Insert the Robert rule before rule 15, TH(ROUGH) = ID16. This new rule will now be part of the table. The Editor will return to the first page of the table after inserting the rule. Press the space bar and find the new rule 15. 

MAKE CORRECTIONS 
Now, let's hear it. Type T for the Test Mode. Type Robert after the question mark prompt and press return. How does it sound? It sounds much better, but let's try the other /AH/ sound, OE. Type N for New Entry and ^Z to return to the R table. 

E, EDIT
To make changes to a rule, type E for edit. You will be prompted with the following: 

ENTER NUMBER OF RULE TO EDIT: 

Type in the number of the rule, 15. Press return, The Robert rule will now appear at the bottom of the screen above a prompt, so that you may refer 

1-20
to it during the edit. The entire rule MUST be reentered, not just the corrections. Partially typed rules will replace the original rule, in the manner typed. The rule number is not necessary. As was the case for the Insert command, any typographical errors must be corrected before the equal sign is typed. You will not be permitted to back space beyond the equal sign. If you type the equal sign, complete the rule, press return and type E to begin again. The rule should be completed so that you will not have to reconstruct the entire rule from your memory. 

Typographical errors on the right hand side of the equal sign may also be corrected using the back space. Remember that in order to preserve the two digit code for a phoneme, a single back space will move back two digits, not one, and that you will only be allowed to type number s and the letters A-F. Retype the rule with 0E, in place of 0F. 

	= !(ROBERT)! = ID0E645C68C0 

Press return and the edited rule will replace the old one. The display will show the first ten rules. Press the space bar and make sure the rule was edited properly, Test it once more. It should sound better and more intelligible. Once you are satisfied that this new rule functions correctly, type U to Update the table.

SAVE THE CHANGES
U, UPDATE

When you select a character table, this one table is copied into a "buffer" area. A buffer area is like a temporary work space or scratch pad. You may make additions, deletions and changes to the rules while they are in this area. Once you are satisfied that the character table is correct, the Update command replaces the old table with the new table. Eventually, all the character tables will be saved permanently to disk. 

The buffer area can only hold one character table at a time. if you select another character table, the current table in the buffer will be written over by the new table. Any changes made will be lost unless an update was performed. Therefore, if you would like to see another character table, and you are not sure if you updated the current table, type U to update. No harm will be done if you did update earlier or made no changes. 

1-21
S, SAVE
Once your work is updated, type Control-S to save the new table on your disk. The following prompt will appear at the bottom of the screen: 

ENTER FILE NAME: 

You have an option to save the corrections in the rule table you are currently working with or save them under another name and create a new rule table. If you would like to create a new table, enter any file name up to eight characters in length, beginning with a letter from A-Z and press return. If you want to save the corrections in the current rule table, type Control-N. No file name is necessary. The standard rule table, provided on the demonstration disk, is called MKB:RULE. After entering the name or N, the Rule Editor will respond with:
 
PLEASE WAIT – SAVING RULE TABLE FILES 

DELETE A RULE 
If you find that you have no use for a Robert rule, you may delete it. Any rule in any table may be deleted with the exception of the last rule. Each table must have at least one rule. 
D, DELETE
Assuming that you are still in the R table, type D for Delete at the ENTER COMMAND prompt. The program will respond with: 
ENTER NUMBER OF RULE TO DELETE: 
Type 15 and press return. The screen will display the following prompt along with the rule you selected. The rule will appear near the bottom of the screen. 

CONTINUE WITH DELETION? (Y/N) 

Every attempt has been made to avoid mishaps, so you must confirm your intentions. if you respond Y, the deletion will proceed and all the rules following this rule will move up one position. The display will revert back to rules 1-10. Scroll through with the space bar to make sure the correct rule was deleted. Also check the last rule number to confirm the new rule count at the top of the screen display. 
If you do not want to delete this rule, respond N, and the ENTER COMMAND prompt will reappear. 

1-22
OTHER USEFUL COMNANDS 

L, LOAD 
After you become more familiar with the Rule Editor, you may discover more interesting applications for the text to speech capabilities. For example, you may be interested in foreign languages and might like MOCKINGBOARD to speak, maybe German? Or perhaps, you are writing a program which could use some speech. The standard rule table may be too bulky to be used with your program. The solution is to create a new rule table for your application. You don't have to give this one up to get another. The demonstration disk contains a semi-blank rule table called MKB:EMPT. It contains the required one rule in each character table. If you do not wish to start from scratch, you may use the standard rule table (NKB:RULE), edit it and save it under another file name. This is done with the S, Save command. 

You may select a new rule table from any rule table. When you select the Rule Editor from the main menu, the standard rule table (MKB:RULE) will automatically be loaded. Select any character table and type Control-L (^L) at the ENTER COMMAND prompt. 

ENTER TABLE NAME 

Type the name of the rule table you wish to access. When a rule table is saved, three files are saved, the table itself, the total length of the table, and an index used to locate the character tables within the rule table. When a rule table is saved, .TABLE, .LENGTH, and .INDEX are appended to the file name automatically. The load command will automatically load the appropriate files, including the suffix. Therefore, when you load a table, you need only type its name.

PLEASE WAIT – LOADING RULE TABLE FILES 

This prompt will appear, then the screen will clear and the initial select prompt will appear. You are all set to begin working with your new table. 

SELECT CHARACTER TABLE TO EDIT 

1-22
P, PRINT
The Rule Editor provides a simple to use print command to print out the individual character rule tables. 
Turn on your printer and type Control P. The following message will appear at the same time your printer begins to print. 

PLEASE WAIT – PRINTING CHARACTER TABLE 

The print out will look similar to the screen display, except that all the rules will be printed out in succession. When it is completed, the ENTER COMMAND prompt will reappear. 
X, HELP
Control-X (^X) will display all the commands for the Rule Editor. It will also display the commands for the Test Mode when you are in that mode. 
Q, QUIT
When you are finished with the Rule Editor and wish to exit the program, type Z to select a new character rule table and type Control-Q (^Q). 

ONE FINAL INSTRUCTION 
It is important to note that your idea of the correct pronunciation may not be that of your neighbors. Some will prefer to say tomahto, others tomato. The Rule Editor allows you to change rules to suit your listening pleasure. It's yours! Go ahead and make MOCKINGBOARD say your own name. 

2-1
SOUND 

The MOCKINGBOARD sound system generates a remarkable array of sound effects and music. It is a natural addition to any program because it introduces real-life action and excitement to silent images and text. It fills time or sets moods with background music, and captivates the youngest of users with familiar and recognizable sounds. 

In a very short time, MOCKINGBOARD will be making interesting sound effects under your control. As a method of introducing each of the sound controls used to generate effects, we will create two different types of sound effects using the SOUND UTILITY program included on the demonstration disk. This step by step explanation will be followed by examples showing how to incorporate sound effects into BASIC programs. The programs are well documented with comments called REM (remark) statements to help you understand the purpose of each line, Just type in the code as written. 

A FEW WORDS ABOUT THE SOUND UTILITY 
The Sound Utility program, provided on the demonstration disk, will allow you to create sound effects without programming. In fact, all the sound effects on the demonstration disk were first developed with the utility, then saved and incorporated into the programs later. 

Please boot the demonstration disk and select Sound Utility. The monitor or TV screen will look similar to Figure 2-1. SPEAKER: 1, at the top left hand corner, refers to the speaker which is the source of the sound. Below this line are the parameters which generate the sound. 

At the bottom of the screen is a menu of commands. The cursor can be moved to different parameters using the arrow keys and/or Control-J for down and Control-K for up. Additional information about this utility will be presented as needed. 

2-2
SPEAKER: 1
REGISTER			MAX				    CHANNEL
NAME			VAL		ALL		A	B	C
			 
TONE PER FINE		255		0		0	0	0  
ONE PER COARSE		15		0		0	0	0
NOISE PERIOD		31		0
ENABLE			63		0
AMPLITUDE			16		0		0	0	0
(FIX = 0- 15/VAR = 16)
ENVL PER FINE		255		0
ENVL PER COARSE	255		0
ENVL SHAPE		15		0
 
P = PLAY	B = SIMULTANEOUS	L = LOAD	X= CLEAR
R=RESET 	C=SPEAKER 		S =SAVE	Z=END 

		Figure 2-1 Sound Utility Screen Display 

WHAT YOU NEED TO KNOW ABOUT SOUND 
Sound is a common phenomenon which we hear and feel every day, yet most of us have not given it much thought. What distinguishes one sound from another? How can a sound be duplicated? With MOCKINGBOARD, differentiating sounds is a natural process of developing them. Some sounds evolve into familiar, common sounds. Others become beautiful, exotic or mysterious. This process of developing MOCKINGBOARD sounds is comparable to adjusting your television set to get a clear picture. But instead of turning control knobs, you type in control adjustments to tune your sound. 

2-3
MOCKINGBOARD "KNOBS" 

Sound Quality 	On/Off Switch            Volume	Pattern	 
Tone Period		Enable			Amplitude	Envelope Period	
Noise Period 							Envelope Shape

TONE PERIOD/NOISE PERIOD: Sound quality may be pure tone sounds, like musical notes, or noise, like rushing air. The Tone Period adjustment ranges from high to low pitch. The Noise Period adjustment also ranges from high to low, but not in terms of pitch. A high Noise Period sounds like the hissing of steam, while the low period sounds like the roar of rockets. 

ENABLE: Turns on or off the tone or noise generating capability. This is important, because MOCKINGBOARD is capable of producing up to six different sounds. 

AMPLITUDE: Controls the amplification or volume of the sound. There are two amplitude modes, fixed and variable. Fixed level amplitude provides 16 different levels of constant volume. Variable level amplitude passes the amplitude control to Envelope Period and Envelope Shape which generate amplitude patterns. 

ENVELOPE PERIOD/ENVELOPE SHAPE: Most sounds have a recognizable pattern which repeats, The pattern you hear is the change in volume. A sound may become loud, holds its level and then fade or soften. Envelope Period adjusts the length of one pattern by expanding or contracting it. With Envelope Shape you may select from 8 different shapes or patterns. 

GETTING ACQUAINTED 
The Sound Utility program is capable of loading and saving sounds you develop. The sounds found on the demonstration disk were created using this program. To get acquainted with both the Sound Utility and the sound parameters, let's load a few existing sounds and play them. Each sound effect may be identified as either a pure tone, pure noise or a combination of the two. 

2-4
Type L for load. The following will appear in the area just above the commands: 

ENTER SOUND NAME OR <C>ATALOG = >

Let's listen to a pure tone sound, Type PING. The parameters for this sound effect are loaded into their respective fields or locations on the screen for evaluation and modification, The screen appears as follows:

SPEAKER: 1							 
REGISTER				MAX				    CHANNEL		
NAME				VAL		ALL		A	B	C 
TONE PER FINE			255		0		20	0	0
TONE PER COARSE		15		0		0	0	0
NOISE PERIOD			31		0
ENABLE				63		62
AMPLITUDE		            	16		0		16	0	0
(FIX = 0-15/VAR = 16)
ENVL PER FINE			255		0
ENVL PER COARSE		255		4
ENVL SHAPE			15		0

Type P for Play and listen to the sound. As its name suggests, it is a "ping" sound. This one, quick, pure tone sound may be adjusted for a longer duration. Move the cursor down to ENVL PER COARSE, using the down arrow key or Control-J and type 8. Type P for play and listen to the change. Try a few more changes to this value, type 20, type 2, etc. Notice that the larger the value typed, the more drawn out the ping is. Conversely, if a smaller number is entered, the ping becomes a plunk; not only is it shorter in duration, but one might suspect that it is a different sound altogether. The difference between the sounds is relatively minor. It is characterized by a change in the rate of decay or gradual decrease in volume. The difference between the decays of ping and plunk is similar to the difference between rolling a ball down an incline and pushing the ball off the back, which is a cliff-like drop. The ball rolling down the incline takes longer to reach the ground than the ball dropping off the back. 

2-5
Let's find out what fixed level amplitude sounds like. Change the ENVL PER value back to 4 before proceeding. Move the cursor up to AMPLITUDE. Using the right arrow key, move it to column A and type 10. Play the sound. Type R to stop the sound or type 0 to turn off the volume. This time the sound was piercing. The pitch was high and irritating. Move the cursor to Tone Period Fine tune to lower this pitch. Move the cursor to the A column and type 244. This value is a C note in the fourth octave (middle C). A chart of TONE PER values for each note is provided in Appendix E, page A-6. 
Our ping sound can also be altered by changing the amplitude pattern or the ENVL SHAPE. We have already adjusted the length of a decaying sound, but a sound which decays is only one of 8 possible patterns from which you may choose. The diagram below illustrates the different patterns we may select. Try each one to establish a relationship, in your mind, between the sound pattern and its picture. 

VALUE				
(DEC)	GRAPHIC REPRESENTATION

8	\|\|\|\|\|\|\|\|\|\|\|\|\|\|\

9	\____________

10	\/\/\/\/\/\/\/\/\/\/\/\/\/\
             ___________
11       \|

12	/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|
             ____________
13	/

14	/\/\/\/\/\/\/\/\/\/\/\/\/\

15	/|____________

Let's load a noise sound and play with it. Type L for Load, and type EXPLOSION. Type P to play. The ping sound is gone. We now hear a powerful blast. What parameters are required to make an explosion? 

Move the cursor down to ENVL SHAPE. Notice the ENVL SHAPE is set to 0. Do not take 0 to mean that this parameter has been shut off! There is a sound pattern associated with a value of zero. This pattern is not included in the diagram above because it is the same pattern as for a value of 9. 
Change ENVL SHAPE to 14, and listen to your new sound. You are hearing the ocean, and all we had to do was change one parameter! 

2-6
Move the cursor up to ENVL PER COARSE and type 10. Type P to play and listen to the difference. The ocean roar changed to a swish. Continue to reduce the value until you reach 1. This is a train sound. By changing only two parameters, we have created a wide range of special effects: explosions, ocean roars, swishes and trains. 

Finally, let's listen to a sound which has both tone and noise. Type L for load and type ENGINE. The screen will display: 

SPEAKER 1 
REGISTER			MAX				   CHANNEL
NAME			VAL		ALL		A	B	C
TONE PER FINE		255		0		0	0	0
TONE PER COARSE	15		0		5	5	5
NOISE PERIOD		31		10
ENABLE			63		0
AMPLITUDE			16		0		10	10	10
(FIX=0-15/VAR=16)
ENVL PER FINE		255		0
ENVL PER COARSE	255		0
ENVL SHAPE		15		0

Type P to play the engine sound. Tones are set at a coarse tune of 5 and noise is set at 10. The fixed amplitude is set to a moderate level of 10. 
MOCKINGBOARD is capable of generating six different sounds at once. The three channels on each chip permit various combinations of tone and noise to be generated separately. The ENABLE parameter will allow you to designate whether a tone, noise, or a mixture of both is to be produced through each channel. A chart in Appendix C, page A-4 contains values for the different possible combinations of sound. You may also find the proper ENABLE value in the Sound Utility by typing Control-E. Enable is currently set at 0, let's find out what a zero setting means. Type Control-E, type 0 and type a return. A prompt will appear on the screen 

ENTER 40 TO 63 OR 'S' TO SCROLL = > 

The chart just above this prompt tells you that all three channels are open for both tone and noise. If you type 63, all the channels are turned off. No

2-7
sound will be generated. Press the ESCape key and the cursor will return to where you typed Control-E. Type 63 and P for play. MOCKINGBOARD is silent. 

To hear just the tone component of the engine, type 56 for ENABLE. Verify that this umber is for tone only in all three channels. Type Control-E again and enter 56. Press ESCape to return to ENABLE. Type P to play and listen to the result. The sound is a low pitched buzz. 

Now type 7 for ENABLE and press P to play noise only in all three channels. MOCKINGBOARD is producing a sound like television static. MOCKINGBOARD will allow you to mix these sounds just like an audio engineer. You make make either tone or noise dominant by restricting the other to one channel only. for example, type 28 for ENABLE. The tone sound is now generated in channels A and B, while noise is restricted to channel C. Experiment with other possible combinations, and listen to the difference. 

Further discussion and detail is given in the next two sections on developing noise only sound effects and tone only sound effects (musical notes). 

NOISE ONLY SOUND EFFECTS 
You will have an opportunity to hear the difference between tone and noise, and the effects that can be created with them. We will begin with a noise effect – the sound of a train. 

Using the Sound Utility, move the cursor to NOISE PERIOD. The Noise Period value ranges from 0 to 31 . The value represents the amount of noise compressed within a period of time. The larger the value, the less noise compressed. The smaller the value, the more noise compressed. The result is similar to the sound of steam escaping from a kettle. The steam makes a high frequency hissing sound because the steam is trapped and is being compressed. If the lid is opened, the hiss immediately becomes lower in frequency because the steam is not being compressed. 

The sound of a train is a soothing sound which is neither a high nor low frequency sound. Let's try a middle value. Type 16 next to NOISE PERIOD. 

2-8
TURN ON NOISE ONLY 
Sounds produced by MOCKINGBOARD are routed through a passage, called a channel, to the speaker. Each sound chip on MOCKINGBOARD has three such channels for generating three seperate sounds. MOCKINGROARD orchestrates the three sounds and sends them out to a speaker. Since MOCKINGBOARD has two sound chips, it is capable of producing six different sounds, simultaneously, through two speakers. 
Each channel may produce tone only, noise only or both. A single value entered for ENABLE will set each of the channels according to its representation. A chart in Appendix C, page A-4, provides the values associated with all the possible combinations for three channels. We will work with three of the six channels to generate a train sound and designate each for noise only. 

The Sound Utility also provides this information if you request it. Move the cursor to ENABLE. Type control-E and the following will appear in the open box area near the bottom of the screen: 

ENABLE	                   NOISE		   	       TONE	
VALUE 		C	B	A		C	B	A
ENTER #0 TO 63 OR 'S' TO SCROLL = > 

Type S and the following will appear: 

ENABLE		       NOISE			       TONE
VALUE 		C	B	A		C	B	A
0			ON	ON	ON		ON	ON	ON
PRESS SPACE TO CONT/ESC TO RETURN 

Press the space bar once and the A channel for TONE will change to OFF. Continue to press the space bar until all TONE channels are turned OFF and all NOISE channels are ON The corresponding ENABLE VALUE is 7. Type ESC and the cursor will return to ENABLE at the top half of the screen or to where you typed Control-E. Now type 7.

2-9
SETTING AMPLITUDE 
Move the cursor to AMPLITUDE. In order to hear the train sound, volume (or loudness) must be added. Amplitude levels can be set by either of two methods, a fixed level amplitude and variable level amplitude. With fixed level amplitude, a specific level of volume is selected and held constant until it is shut off or changed. This is similar to the volume control on a television set. You can adjust the volume to a comfortable listening level and then listen to that level for the rest of the evening. If you wish to change it, you must get up to adjust it. The fixed level is selected by setting AMPLITUDE to a level within a range of 0 to 15. 

Variable level amplitude is more dynamic. That is, the loudness is not constant and may be altered at any time. Natural sounds are dynamic; each has recognizable characteristics. A bird's chirp cannot be mistaken for a dog's bark nor the patter of rain on a window. The chug of a train is also distinguishable from the whirl of the helicopter or the blast of a gunshot. It is a steady sound but not constant. 

The train sound is characterized by a variable amplitude. The variable level is selected by setting AMPLITUDE to 16. Type 16 in the ALL column and all three channels will be set to 16. When the cursor is moved away from AMPLITUDE the value in the ALL column will revert to zero. 

WHAT MAKES A TRAIN SOUND NOT A GUNSHOT? 
Change in amplitude distinguishes one sound from another. Amplitude may vary in any of three ways or modes, It can get louder (attack), it can hold at a particular level of loudness (sustain) and it can get softer (decay), Attack, sustain and decay are terms used to describe the amount of energy a sound gains or loses. For example, if you blow up a balloon and release it, the sound is very loud just as it is released. Almost immediately it begins to fade as the air escapes. 

The amplitude pattern of the train sound (chug, chug) evenly increases and then decreases in volume; there is the same amount of attack as there is decay. If we were to draw a picture of this amplitude pattern, it would look like a zigzag. In contrast, a gun shot sound does not repeat itself. It is one quick blast. It starts out very loud, and then fades (decays). Conveniently, we do not have to create these patterns from scratch. MOCKINGBOARD can generate several common amplitude patterns. 

These patterns, called Envelope Shapes or ENVL SHAPE, range from 0 to 15, but the actual number of different patterns is 8. These eight different 

2-10
patterns are illustrated in Table 2-1 and also in Appendix D on page A-5. Shapes 0-7 generate only one cycle of any sound. Although they are usable, they may be uninteresting. Concentrate on shapes 8-15. 

VALUE				
(DEC)	GRAPHIC REPRESENTATION

8	\|\|\|\|\|\|\|\|\|\|\|\|\|\|\

9	\____________

10	\/\/\/\/\/\/\/\/\/\/\/\/\/\
             ___________
11       \|

12	/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|
             ____________
13	/

14	/\/\/\/\/\/\/\/\/\/\/\/\/\

15	/|____________

	Table 2-1 Envelope Shape Patterns 

Shape 14 describes the zigzag patter n of a train sound; it starts soft, gets loud, then soft and continues until it is changed or shut off. Set ENVL SHAPE to 14. 

HOW FAST IS THE TRAIN GOING? 
The envelope establishes the basic amplitude pattern of a sound, but it is the duration of one cycle of the pattern which generates the effects. A train may be speeding along or slowing down. If the zigzag pattern of the train is compressed it will simulate a speeding train. A very loose zigzag will create the impression of a train moving slowly. The duration of a cycle is called an Envelope Period. Move the cursor to ENVL PER COARSE. ENVL PER COARSE stands for Envelope Period Coarse Tune. The envelope period range is from 0 to 65,535; this is broken down into fine tune (0-255) and coarse tune (0-255). Fine and coarse tuning may be thought of in terms of minutes and seconds. It takes 60 seconds to equal one minute. Similarly, a value of 256 for fine tune equals one unit of coarse tune. The coarse tune will determine general duration of one cycle of a particular envelope and the fine tune will define the exact duration. 

2-11
The envelope period of a speeding train is short, so set the ENVL PER COARSE to 1. Let's listen to it. Type P for play. Stop it by typing R for reset. Now, type P again, but this time do not type R. Experiment by typing in different values for ENVL PER COARSE and ENVL PER FINE to change the train's speed. Type P each time you wish to hear the result. 

CHANGE A TRAIN INTO A HELICOPTER 
Move the cursor to ENVL SHAPE and change the pattern to I 2. TYPE P to play. Listen, it sounds like a helicopter. A helicopter sound does not have a zigzag amplitude pattern. As the blade of the helicopter whips around, the sound builds from soft to loud and quickly drops back to soft. This sound pattern is an example of attack, there is no decay; the pattern resembles the outline of a sawtooth. If you wish to slow the helicopter down, increase the ENVL PER COARSE 

CHANGE A HELICOPTER INTO A GUNSHOT 
Type 0 for ENVL SHAPE and move the cursor to ENVL PER COARSE. Type P. It sounds like something dropped. Type 10 and type P. It sounds like a gunshot. A gunshot is a single burst of sound which does not repeat. It does not appear to use the ENVL SHAPE, only the ENVL PER COARSE. But in fact, the envelope shape, when set to 0, is an example of a decaying sound; it starts loud and fades in one cycle. Shape pattern 0 is a duplicate of shape 9. The ENVL SHAPE and ENVL PER COARSE and FINE are turned off only by a fixed AMPLITUDE setting of 0 to I 5. Try it. 
Most of the sounds heard on this disk can be loaded using the Sound Utility. Type L for load and type the name of the sound or C for catalog to see the list. Each sound parameter will be displayed and can be changed. If you develop a sound you would like to save, type S for save and type a descriptive name. Do not use the same name used to load the sound, save it under another name. If you save it under the same name, you will lose the original sound and replace it with your new sound. 

TONE ONLY SOUND EFFECTS 
MOCKINGBOARD has a six channel sound capability and wide frequency range. Its full eight octave range makes it an ideal instrument for music com- position. Two three note chords can be played at the same time, allowing you to compose songs with full accompaniment. 

2-12
Our train sound was made up of noise only. It was generated by setting the Noise Period to some value from 0 to 31. In contrast, musical notes consist of pure tone sounds. They are generated by setting the Tone Period. The Tone Period value ranges from 0 to 255 for fine tune and from 0 to 15 for coarse tune. 

Tone Period values represent the amount of compression or expansion of pure tone sound within a period of time. The smaller the Tone Period value the more compressed the sound; and therefore, the higher the pitch. Conversely, if the value is larger, the tone sound is expanded and the pitch is lower. 

Fine and coarse tune are MOCKINGBOARD's tuning pegs. It is important to be able to obtain the frequency or the particular note desired, because sour notes are easily identified. In order to adjust the pitch on your MOCKINGBOARD, use the coarse tune to get the general frequency range and the fine tune to get the desired pitch. The relationship behind the fine and coarse tune is like the example given for Envelope Period. Coarse tune represents minutes of accuracy, fine tune allows us to deter mine the seconds. A fine tune of 256 is equal to 1 coarse tune. 

A chart of the TONE PER values for each note is provided in Appendix E on page A-6. The fourth octave of this chart has been reproduced in Table 2-2 so you can easily select a few notes to play. Let's begin with the C-note. The decimal equivalent is 244. 

								TONE PERIOD
					NOTE		                  (DEC)
NOTE		       OCTV 	            FREQ		       CRSE 		FINE
C 			4 		261.624		0		244 
C# 			4 		277.184 		0		230
D			4 		293.664		0		217 
D#			4 		311.128		0		205 
E			4 		329.624		0		193 
F			4		349.232		0		183 
F#			4		369.992		0		172 
G			4		391.992		0		163 
G#			4		415.304		0		153 
A			4		440.000		0		145 
A#			4		466.160		0		137 
B			4		493.880		0		129 

	Table 2-2 Equal Tempered Chromatic Scale: Fourth Octave 

2-13
START FRESH WITH A CLEAN SCREEN 
The screen is still set for a noise sound and must be cleared before we begin making tone sounds. Type X for clear and respond Y, for yes, to the prompt appearing in the box at the lower half of the screen. All the values previously set have been returned to zero. Move the cursor up to TONE PER FINE by typing Control-K (or the up arrow key). Move the cursor over to the right once to channel A, by typing the right arrow key. Type 244. 

TURN ON TONE ONLY 
Move the cursor to ENABLE and type Control-E. The box in the lower half of the screen will prompt you to enter either a number or S for scroll. Type S to scroll and press the space bar until only channel A for tone is ON; all other channels should be OFF. The Enable value is 62. Type ESC and the cursor will return to ENABLE. Type 62 to enable channel A for tone only. 

SET THE AMPLITUDE 
AMPLITUDE or volume of a sound may be set in two ways. The first way is to generate a fixed level amplitude, which produces a sound with a constant volume. The sound will remain at the same level until it is changed or shut off by an R for reset (stop). Fixed level settings range from 0 for no volume to 15 for maximum volume. 

Move the cursor to AMPLITUDE and press the right arrow key to move the cursor to channel A. Set the AMPLITUDE to fixed mode by typing 15. Type P to play and listen. Type R for reset to stop the sound. The sound is a tone or a musical note but the constant flow of the sound is annoying. Let's try to set the AMPLITUDE in another fashion. 

CREATE MUSICAL NOTES 
Variable level amplitude is controlled by a preset pattern of loud and soft levels. Variable level is selected by setting AMPLITUDE to I 6. Under variable level amplitude, control is passed to the envelope shape and period controls. The changes in amplitude which distinguish one sound from another are called the envelope. This amplitude pattern describes the shape of the envelope (ENVL SHAPE). Appendix D on page A-5 shows the 8 different patter ns available on MOCKINGBOARD.

2-14
The duration or envelope period (ENVL PER) of each pattern may also be controlled to create different effects. For example, a zigzag pattern, one which evenly glides up to loud and glides down to soft, may be compressed tightly so that the result is a tense and pulsating sound. The same zigzag pattern may be expanded. The sound is now calm and rolling. 

PLAY A NOTE 
You may make the sound stop automatically, by setting AMPLITUDE to variable level and the ENVL SHAPE to a one cycle pattern. The pattern should start loud and glide down (decay) until no sound can be heard (pattern 0 or 9). The rate at which the note decays may be determined by the ENVL PER value. This capacity to control a note's rate of decay allows you to define the note as whole, half, quarter, eighth, etc. 

Set AMPLITUDE for channel A to variable by typing 16. The ENVL SHAPE should be set to a decay pattern since musical notes naturally decay after an initial burst. A strike of a piano key or a pluck of a guitar string starts loud and fades as the vibration subsides. You may leave ENVL SHAPE at 0; patterns 9 and 0 have the same decay pattern. Move the cursor to ENVL PER COARSE and set the period to 20. This period value will play the musical note just long enough to a low it to decay rather than end abruptly. Type P for play. 

PLAY A CHORD 
Now that we have learned to produce a note with proper decay, a chord can be built using the other two channels. Move the cursor back up to TONE PER FINE and over to the right to channel B. Type 193 for an E-note. Move the cursor to channel C and type 163 for a G-note. Move the cursor down to ENABLE and set it to 56, which enables all three channels for tone only. Move the cursor down to AMPLITUDE in the ALL column and type 16 for variable level. This will set the amplitude of all three channels to 16. Type P for play. 

PLAY TWO CHORDS 
The Sound Utility also allows you to play six notes simultaneously by setting three notes on one screen and three on a second screen. The three notes you have just played appear on the first screen. Type C and a new screen will appear. Note that the parameters are cleared to zeros. Type C again to return to the first screen. The three notes are still there. 

2-15
The screens are oriented to the speakers through which the sounds are played. The chord just played was created for SPEAKER: 1. This designation appears in the upper left hand corner. Type C and note that SPEAKER: 2, in the upper right hand corner, replaced SPEAKER: 1
The next three notes are also C, E, and G notes but on a lower octave. These note values include coarse tune values. Type the values as shown. 

				MAX				   CHANNEL 
				VAL		ALL		A	B	C
TONE PER FINE		255		0		209	7	140
TONE PER COARSE	15		0		3	3	2
NOISE PERIOD		31		0		
ENABLE			63		56
AMPLITUDE	            	16		0      		16	16	16
(FIX = 0-15/VAR = 16)
ENVL PER FINE		255		0
ENVL PER COARSE	255		20
ENVL SHAPE		15		0 

Type P for play and listen to the deeper sound of this chord. Now, type B for both speakers and listen to six notes simultaneously. Note that both speaker designations appear at the top of the screen. If the sounds were continuous, R for reset would stop them. Since the notes decay automatically, a reset is not necessary. 

3-1
PROGRAMMING 
Whether you compose music, dialogue or design special effects, your masterpieces are unfinished until they are arranged in a production. What could be more original than to enhance one of your own programs with sounds of your own creation?

The Introduction to this manual compared MOCKINGBOARD to the telephone of a friend you wish to call. MOCKINGBDARD may be reached with the appropriate "area code" and "phone number." The "area code" locates MOCKINGBOARD in one of the input/output slots in the back of the Apple. This means that MOCKINGBOARD may be placed in any slot, except 0. The Apple II Reference Manual states that this slot is reserved for RAM, ROM or interface expansion. 

The sound chip and speech chip do not speak the same language. Therefore, instructions to any chip must go through a translator. This translator is called the 6522 Versatile Interface Adapter or just 6522. There are only four instructions for the sound chips and one for the speech chips which must be translated. 

THE SOUND CHIPS 
The Sound Utility program demonstrated all the parameters needed to produce a sound. There are 16 in all: six Tone Period (Fine and Coarse), one Noise Period, one Enable, three Amplitude, two Envelope Period (Fine and Coarse), one Envelope Shape and two unused. When all 16 parameter values are received by the sound chip via the 6522, sound is generated. 

With the Sound Utility, the cursor is positioned over one of the 14 parameters and a value is typed. For Example, if we wish to set the Tone Period (Fine Tune) for channel A to 145, the cursor is moved to the first row, column A, and 145 is typed in. A similar location called a register address, is also designated on the sound chip for this parameter. Each parameter has its own register address numbered 0 to 15. Table 3-1 shows each parameter and its associated register address. A chart of all registers and their descriptions is provided in Appendix B, page A-3. 

3-2
REGISTER
ADDRESS							SOUND PARAMETERS
0			Tone Period Fine Tune			for channel A
1			Tone Period Coarse Tune			for channel A
2			Tone Period Fine Tune			for channel B
3			Tone Period Coarse Tune			for channel B
4			Tone Period Fine Tune			for channel C
5			Tone Period Coarse Tune			for channel C
6			Noise Period
7			Enable
8			Amplitude					for channel A
9			Amplitude					for channel B
10			Amplitude					for channel C
11			Envelope Period Fine Tune		
12			Envelope Period Coarse Tune		
13			Envelope Shape		
14 & 15		Unused		

	 		Table 3-1  Sound Chip Registers

HOW THE SOUND PARAMETERS ARE SET ON THE CHIP 
A sample program called TABLE Access Routine, provided on the demonstration disk, illustrates one method of setting sound parameters on the chip. Let's use our earlier example and set the Tone Period Fine Tune for channel A to 145. Table 3-1 indicates that Tone Period Fine Tune for channel A is register address 0. The Table Access Routine is designed to send values to all sixteen registers sequentially, beginning with 0. It first sends MOCKINGBOARD the register address (0) of the data to be sent. Next, it sends MOCKINGBOARD the data (145). The Table Access Routine continues this process until all sixteen register addresses have been sent data. If a parameter does not need to be set, you should send a zero to that register address.

3-3
All information to MOCKINGBOARD flows on one of two direct lines. The first line sends only register addresses and data. But MOCKINGBOARD can not distinguish addresses from data, because the addresses and data are all numerical values. The second line is used to send an instruction identifying what was sent on the other line. Let's use our example to clarify the information flow to MOCKINGBOARD. When 0 is sent on the first line, the second line sends instructions to MOCKINGBOARD that the 0 is a register address. Next, 145 is sent on the first line and the instruction to MOCKINGBOARD that 145 is data, is sent on the second line. The two lines work almost simultaneously. In fact, information may be sent to MOCKINGBOARD continuously, because it flows in only one direction. 

A separate program called PRIMary Routines (also provided on the disk), contains the four subroutines to handle the instructions to MOCKINGBOARD. They are: 

INIT subroutine. Initializes or primes MOCKINGBOARD to receive information. The initialization process is done once at the beginning of a program. MOCKINGBOARD must be initialized or sound parameter s sent to it will be ignored. Your program will continue, but no sound will be generated. MOCKINGBOARD does not have to be initialized again during the same program, unless the computer is shut off or the system is reset.

LATCH subroutine. Tells MOCKINGBOARD that a register address is being sent to it. 

WRITE subroutine. Tells MOCKINGBOARD that data (a parameter value) is being sent. 

RESET subroutine. Clears all sixteen registers to zeros. As a precautionary measure, the registers should be RESET at the start of a program to avoid generation of unexpected sounds. 

These two programs, Table Access Routine and Primary Routines, work together to send the proper instructions and data to MOCKINGBOARD. The Table Access Routine orchestrates the task. While Primary Routines send instructions to MOCKINGBOARD, it is the Table Access Routine which selects the appropriate instruction to send. 

3-4
To understand the principles behind these two programs, let's examine what happens in a mailroom. The parallel between a mailroom and MOCKINGBOARD will clarify how MOCKINGBOARD transfers data for sound generation. 

mail 				The mail truck arrives each day at 9.00 am. The mail 
				clerk is prepared to receive the mail at this time each day. 
MOCKINGBOARD 		CALL the INIT routine at the beginning of your program. This routine prepares MOCKINGBOARD to receive information. 
mail				The mail is sorted into piles for each mail slot. Each mail slot belongs to a particular individual and is appropriately labelled. 
MOCKINGBOARD		Each sound is described by I 6 sound parameters and 
	those parameters correspond to a particular register on the
sound chip. The registers, numbered from 0 to 15,
correspond to the mail slots, Each sound parameter is assigned to a register just as a name on the mail associates it with a particular mail slot. The sound parameters are predetermined and stored in memory. 
mail				Before the new mail is placed into the mail slots, each slot
				is checked to make sure it is empty. 
MOCKINGBOARD		The Table Access Routine RESETs (or clears) all 16 registers as a precaution against unwanted sounds. 
mail				The mail is sorted in mail slot order and the slot door for
				the first pile is opened. 
MOCKINGBOARD		The Table Access Routine sends the register address to 
			MOCKINGBOARD. It also tells the subroutine LATCH
			(Primary Routines) to send instructions to MOCKING- 
			BOARD to "latch" onto that register so the data will know 
			where to go. 
mail				The first pile is retrieved and placed in the opened mail slot. 

3-5
MOCKINGBOARD		The Table Access Routine retrieves the data for the 
				first register from its place in memory and sends it to
				MOCKINGBOARD. It also tells the subroutine, WRITE 
			(Primary Routines), to instruct MOCKINGBOARD to
			place that data into the latched register. 
mail				Each remaining pile of mail is processed in the same manner. The distribution of mail is completed when all the piles have been placed in their respective slots. 
MOCKINGBOARD		The next register is latched and the corresponding data is 
				written to that register. When al 16 registers are filled, 
				MOCKINGBOARD will generate a sound and send it to
				the speakers. 

LATCH and WRITE are similar to the standard BASIC programming command, POKE. The address is identified first, then the data to be poked. 

The data retrieval method used in the Table Access Routine is comparable to the standard programming commands, DATA and READ, where data is retrieved and read into the program for processing. 

SUMMARY OF PRIMARY ROUTINES AND TABLE ACCESS ROUTINE
The Primary Routines consist of four subroutines called INIT, LATCH, WRITE, and RESET. Each subroutine has a specific function in the transmission of instructions to MOCKINGBOARD. These subroutines utilize the instruction line to transmit information to MOCKINGBOARD. Each tells MOCKINGBOARD what to do with the information being transmitted on the address/data line. 

The Table Access Routine coordinates the flow of information to MOCKINGBOARD by sending information on the address/data line and selecting the appropriate Primary Routines instruction for the address/data sent. As the name of the line indicates, only a register address or data is transmitted on this line. 

The Table Access Routine also retrieves the data from a memory location where sound parameters are stored. The data can be POKEd into memory at a specific location by READing the data into your program with a Data statement. The data may be stored in any unused memory location, but the Table Access Routine must be told its location. 

3-6
The data is POKEd in register address order. Conveniently, the order is sequential. Therefore, the data for the first register is POKEd into the first address of the memory location, then the data for the second register is POKEd into the next consecutive address and so forth until all sixteen have been POKEd. If more than one set of sound parameters are needed, the next set of parameters may be stored immediately following the first set. When the second sound is to be played, the Table Access Routine must know where this set of sound parameters begin (start of first sound plus 16), The two sound chips on MOCKINGBOARD may be accessed separately. Each chip uses the same method of instruction and address/data transmission. At the beginning of this section, we mentioned that the only difference between the two sound chips was that each had its own "phone number." Therefore, both the Primary Routines and Table Access Routines have duplicate sets of code to access each separately. Included in the Primary Routines is another set of four subroutines called INIT2, LATCH2, WRITE2 and RESET2. The Table Access Routine also has a duplicate set of code labelled in a similar manner.

SIREN SOUND EFFECT 
Type this program right on your demonstration disk. (You may leave out the REM (remark) statement, as it serves only to explain the flow of the program.) It is the first sound of a siren. If you are using a fresh disk, you must copy the PRIMary Routines and the TABLE Access Routine onto your disk and run them either before you run the program or within the program itself. (Delete last line of TABLE.) Also, MOCKINGBOARD must be initialized at the beginning, with a CALL 36864 (INIT) and CALL 36908 (INIT2). 

5  REM
		***DATA FOR SOUND; 145=FINE TUNE; 62=ENABLE;
		      15=AMPLITUDE
10 DATA	145,0,0,0,0,0,0,62,15,0,0,0,0,0,0,0
18 REM
		***STARTING ADDRESS FOR STORAGE OF SOUND DATA
20 A=33024

3-7

25	REM
		***READ AND STORE ALL VALUES FOR SOUND IN SEQUENTIAL
                        ORDER STARTING AT LOCATION 33024
		***WHEN X=0, IT IS ADDED TO "A" WHICH IS 33024 TO EQUAL
		      33024. PLACE THE FIRST DATA FROM LINE 10, 145, INTO
		      LOCATION 33024
30 FOR X=0 TO 15:READ D
40 POKE A+X,D
50 NEXT
75	REM
		***USE TEMPORARY LOCATIONS 8 AND 9 TO POINT TO THE
		      STARTING ADDRESS OF SOUND, 33024; CALL TABLE ACCESS
		      ROUTINE TO SEND DATA TO MOCKINGBOARD AND PLAY
		      THE SOUND
80 POKE 8,0:POKE 9,129:CALL 32768
85	REM
		***USE DELAY LOOK FOR DURATION OF SOUND
90 FOR T=1 TO 342: NEXT T
145	REM	
		***CALL RESET TO STOP THE SOUND AND CLEAR REGISTERS
150 CALL 36897
160 END

Save and run this program. Lines 5 through 50 place the set of sound parameters sequentially in memory, starting at 33024. Line 80 plays the sound for the period of time designated in line 90. Line 150 stops the sound with a CALL TO RESET.

Now, let's add the second part of the siren sound

15 DATA 86,1,0,0,0,0,0,62,15,0,0,0,0,0,0,0
30 FOR X=0 TO 31: READ D
100 POKE 8,16:POKE 9,129: CALL 32768
120 FOR T=1 TO 342:NEXT T

Line 15 is the second sound data and line 30 is changed to READ 16 more data. Line 100 plays the second sound. The temporary locations, 8 and 9,

3-8
are changed to point to the second set of sound data. The Table Access Routine is CALLed to send it to MOCKINGBOARD. Line 120 allows us to hear this sound for a given period of time. 

Save and run this program, Did you hear a siren? This program demonstrates two manipulation techniques, duration (lines 90 and I 20) and sequencing of two or more sounds (lines 80 through 120). 

A delay loop follows each note because, otherwise, the notes would alternate too quickly for you to hear them. The only difference between the two notes is the tone period registers for channel A, refer to the chart on musical notes, Appendix E, page A-6. The first note is a middle or 4th octave A with a Tone Period value of 145. The second note falls between F# and G in the third octave; it has a Tone Period value of 342 or a coarse tune of 1 and fine tune of 86. 

The changes necessary to create these two tones involve only two registers. Therefore, load the base parameters needed to create the notes and change the Tone Period registers as required to alter the note. In addition, lines 70 and l40 places the sound generation in a loop so that the sir en will play five times. Here's how to do it. 

l0  DATA 0,0,0,0,0,0,0,62,l5,0,0,0,0,0,0,0
20  A=33M4 
30  FOR X = 0 TO l5: READ D
40  POKE A+X,D
50  NEXT
55  REM 
		***SET THE POINTERS TO POINT TO LOCATION 33024
60	POKE 8,0: POKE 9,129
65  REM
		***REPEAT THE SIEN SEQUENCE FIVE TIMES
70	FOR Z = 1 TO 5
75	REM
		 ***PLAY THE FIRST SOUND
80 POKE 33024,145: P0KE 33025,0:CALL 32768
90 FOR T = 1 TO 342: NEXT T 

3-9
95 REM
		***PLAY THE SECOND SOUND. CHANGE FIRST REGISTER TO
		      86 AND SECOND REGISTER TO 1. SINCE TONE PERIOD
		      =342, FINE TUNE = 342-INT(342/256)*256 AND COARSE TUNE
                               TUNE=INT(342/256)
100 POKE 33024,86:POKE 33025,1:CALL 32768
120 FOR T=1 TO 342:NEXT T
135 REM
		***IF Z IS LESS THAN 5, PLAY THE SEQUENCE AGAIN
140 NEXT
145 REM
		***SHUT THE SOUND OFF
150 CALL 36897
160 END

Now, try this same program, but this time make use of the two sound chips and both speakers. The Primary Routines and Table Access Routine have secondary sets of routines to produce sounds out of the second speaker with the other sound chip. You will be able to play one tone through the left speaker and the other through the right. 

The Table Access Routine uses a temporary memory location to store the beginning address of the sound to be played back. This stored address is referred to as a "pointer" because it points to where the sound data begins. 

We have already used locations 8 and 9, in our siren example, to store the address for the first sound chip. The second sound chip uses Location 10 and 11. The address is divided into high and low bytes. 

High byte is calculated by taking the beginning address and dividing it by 256. The resulting whole number is stored in location 9 or 11. Low byte is the remainder from the division and is stored in location 8 or 10. The siren sound effects program stores the data at 33024. When divided by 256, this address equals 129 with no remainder. The 129 is stored in 9 or 11 and 0 is stored in 8 or 10.

3-10
To produce the siren sound through both speakers, set the pointer locations, 10 and 11 to 33024. The pointer for the first sound chip, 8 and 9, also points to this same address. Both chips may utilize data in the same memory location because the data is not affected by use, 
D  < = = >POINTER LOC    8,  9 -> SOUND CHIP 1 -> SPEAKER 1
A
T
A  < = = >POINTER LOC 10, 11 -> SOUND CHIP 2 -> SPEAKER 2

Change the following lines as indicated: 

62 POKE l0,0: POKE 1l,l29
100 POKE 33024,86:POKE 33025,1
110 CALL 36897:CALL 32796
130 CALL 3694l 

Line 110, the CALL to 36897, is the RESET subroutine (Primary Routine) for the first sound chip. This CALL will shut off the first sound chip. If we do not shut off one of the chips, both would produce sound at the same time, and we would create a two-note chord. This CALL was not necessary in the earlier programs because both notes were generated by one sound chip. The second sound wrote over the register values of the first sound. 

Line 100, the CALL 32768, is dropped and picked up in line 110 as CALL 32796, which is the Table Access Routine for the second sound chip. It plays the second note through the other speaker. Line 130 turns off the second sound with a CALL to RESET2. Note that the pointers (8,9 and 10,11) do not have to be POKEd each time with the address of the sound data. The sound data has not moved from its location; therefore, its address remains the same. 

10 DATA 0,0,0 0,0,0,0,62,15,0,0,0 0,0,0,0
20 A = 33024
30 FOR X =0 TO 15: READ D
40 POKE A+ X,D
50 NEXT

3-11
55 REM
***SET BOTH SOUND CHIP POINTERS TO POINT TO
THE ADDRESS OF THE SOUND DATA, 33024.
60 POKE 8,0:POKE 9,129
62 POKE 10,0:POKE 11, 129
70 FOR Z= 1 TO 5
75 REM
		***CHANGE THE SOUND DATA IN MEMORY TO THE FIRST
		SOUND AND PLAY IT THROUGH THE FIRST SPEAKER WITH
		A CALL TO THE TABLE ACCESS ROUTINE. (NOTE THAT
		32768 IS THE ROUTINE FOR THE FIRST CHIP.)
80 POKE 33024,145:POKE 33025,0:CALL 32768
90 FOR T = 1 TO 342:NEXT T
95 REM
		***CHANGE THE SOUND DATA IN MEMORY TO
		THE SECOND SOUND
100 POKE 33024,86:POKE 33025,1
105 REM
		***TURN OFF THE FIRST SOUND CHIP WITH A CALL RESET
		AND PLAY THE SECOND SOUND THROUGH THE SECOND
		SPEAKER WITH A CALL TO THE TABLE ACCESS ROUTINE.
		(NOTE 32796 IS THE ROUTINE FOR THE SECOND CHIP.)
110 CALL 36897:CALL 32796
120 FOR T=1 TO 342:NEXT T
125 REM
		***CALL RESET2 TO SHUT OFF THE SECOND SOUND CHIP 130 CALL 36941
135 REM
		***IF Z IS LESS THAN 5, PLAY THE SEQUENCE AGAIN
140 NEXT
160 END 

In this last example, one tone of the siren is played through one speaker and the other tone through the second speaker. Other variations are also possible. 

3-12
THE SPEECH CHIPS 
The Text To Speech Rule Editor is used to develop words or phrases for use in your programs. Enter the Test Node from any character rule table and type in the word or phrase you wish to use. Adjust the pronunciation, using the parameter controls and stress markers. Once you are satisfied with the quality of speech, save the word or phrase by typing control-S from the Test Mode. Name the file using a maximum of eight characters, beginning with a letter (A-Z). 

The word or phrase saved is a composite file of all the speech parameters. However, the composite file contains only data. This data is similar to the 16 sound parameters needed to produce a sound effect. While the sound parameters are finite, the speech parameters consist of four parameters for each phoneme code generated to produce the speech. If a word consists of 20 phoneme codes, then the composite file of that word contains 100 parameters (including the phoneme codes). 

From the Rule Editor, a word or phrase is spoken using the Text To Speech Algorithm. Outside of the Rule Editor, another type of program must be employed to generate speech. The Text To Speech Algorithm is no longer necessary, because the conversion from text to phoneme codes has already been done and saved. A program called the Composite Driver, included on the demonstration disk, acts as a messenger and transmits speech codes to the speech chip from the composite data file. 

The Composite Driver is similar in concept to the Table Access Routine. The Table Access Routine retrieves data and sends it to the sound chip. The Table Access Routine knows where the data is located by using a pointer. The Composite Driver also has a pointer which tells it where the speech data is located. 

These similarities standardize the programming method employed in generating both sound and speech. Let's enhance a short program with speech. Load the following files in memory prior to running the sample program or at the beginning of the sample program: 

BLOAD COMPOSITE DRIVER
BLOAD < composite data file name >, A < address in memory ) 

The composite data file may be stored in any unused memory space. 

3-13
The pointer location for the beginning address of the speech data is stored in location 249 and 250. The high byte of the address is stored in 250 and the low byte is stored in 249. If you are unfamiliar with high and low bytes, the high byte is obtained by dividing the address by 256 and the low byte is the remainder of this division. If the data is stored at 33024, then the high byte is 33024/256 or 129. The low byte is zero since there is no remainder. 
The following phrase was created using the Rule Editor and saved on the demonstration disk as PHRASE 1: 

WITH MOCKINGBOARD YOU'LL NEVER BE SPEECHLESS 

Type in the program below on your copy of the demonstration disk. If you are using a fresh disk, copy the COMPOSITE DRIVER and PHRASE 1 files onto your disk. 

IO HOME
20 D$ = CHR$(4)
25 REM
		***LOAD COMPOSITE DRIVER
30 PRINT D$"BLOAD CONPOSITE DRIVER"
35 REM
		***LOAD THE DATA FILE PHRASE 1 AT LOCATION 35072
40 PRINT D$"BLOAD PHRASE 1, A 35072"
45 REM 
		***TELL COMPOSITE DRIVER WHERE THE DATA FILE
		PHRASE 1 RESIDES. CONVERT 35072: HIGH BYTE-INT
		(35072/256) OR 137, PUT IT IN LOCATION 250; LOW BYTE-INT
		(35072/256) - 137 OR 0, PUT IT IN LOCATION 249.
50 POKE 249,0:POKE 250, 137
55 REM
		***TELL COMPOSITE DRIVER TO BEGIN SPEAKING.
		COMPOSITE DRIVER IS LOCATED AT 27904.
60 CALL 27904
70 END 

This program will speak the entire phrase and then end at line 70. In most cases, the program would not speak and then end, it would continue on with other tasks. If this program did not end at line 70, the speech could be interrupted prematurely by an input from the keyboard or program code. In order to protect against such an interruption, the program should check to determine if the speech chip is finished speaking. 

3-14
When MOCKINGBOARD speaks, a busy flag is set. This flag is located at location 255. When MOCKINGBOARD is finished speaking, the flag is cleared, Your program can monitor this flag. A standard BASIC programming command called PEEK may be used to look at the contents of this location. 

Type the following lines into the above program. Delete line 70. Save the new version of the program and run it. 

80 VTAB 6:HTAB 1:PRINT "WOULD YOU LIKE TO HEAR IT AGAIN?";
		:GET A$
90 IF A$ = "Y" THEN GOTO 60
100 IF A$ =- "N" THEN GOTO 120
11O GOTO 80
120 END 

The question, "WOULD YOU LIKE TO HEAR IT ACAIN? " appears on the screen almost at the same time as the speech begins. If you respond to this question before the speech ends, you will interrupt it. Try it. Press the Y key several times in quick succession. The phrase is not allowed to finish until you stop pressing the key. To prevent this, insert the following lines in this program. Save and run it. You will no longer be permitted to interrupt the speech. 

65 REM
		***CHECK TO SEE IF FINISHED SPEAKING. IF NOT, KEEP
		CHECKING UNTIL IT IS.
70 IF PEEK (255)> 0 THEN 70 

To incorporate more than one phrase in your program, load each file at the beginning of the program. Load each one at a different location, so you will be able to call them at will. Change the pointers, 249 and 250, to point to the phrase you wish spoken just before CALLing the composite driver. Let's try it with PHRASE2, which says: I LOVE TO TALK. This time, let's print the phrases on the screen. 

10 HOME
20 D$ =- CHR$(4)
30 PRINT D$"BLOAD COMPOSITE DRIVER"
40 PRINT D$"BLOAD PHRASE1, A 35072"
42 REM 
		***LOAD THE SECOND PHRASE AT 36864 

3-15
45 PRINT D$"BLOAD PHRASE2, A 36864"
47 PRINT "WITH MOCKINGBOARD YOU'LL NEVER BE SPEECHLESS"
50 POKE 249,0: POKE 250,137
60 CALL 27904
70 IF PEEK (255)>0 THEN 70
80 VTAB 6:HTAB 1:PRINT "WOULD YOU LIKE TO HEAR IT AGAIN?";
	:GET A$
90 IF A$ = "Y" THEN GOTO 60
100 IF A$ = "N" THEN GOTO 120
110 GOTO 80
120 VTAB 10:HTAB 1:PRINT "WOULD YOU LIKE TO HEAR ANOTHER
	PHRASE?"; :GET B$
130 IF B$ = "Y" THEN GOTO 152
140 IF B$ = "N" THEN GOTO 170
150 GOTO 120
152 VTAB 10:HTAB 1:PRINT "I LOVE TO TALK!"
155 REM
		***CHANGE THE POINTERS TO POINT TO PHRASE2 AT 36864
		:HIGH BYTE = INT (36864/256) OR 144, PUT IN 250; LOW BYTE 
		= 36864/256-144 OR 0, PUT IN 249. TELL COMPOSITE DRIVER
		TO SPEAK THIS PHRASE.
160 POKE 249,0:POKE 250, 144:CALL 27904
170 END 

Save and run this program. If you would like to try out a different phrase, change line 40 and/or 45 to load your file. Don't forget to change the phrase printed on the screen in lines 47 or 152. Why not make all the prompts in this program speak?

USING TEXT TO SPEECH AND THE RULE TABLE IN YOUR PROGRAM 
The above programming method is a very convenient way to generate speech, provided you know what vocabulary will be required in your program. This is not always possible or desirable. You may wish to have a person using your program type in his own responses. These words could a so be spoken by MOCKINGBOARD. However, unless the response is limited to a predefined vocabulary, words not previously coded will be left unsaid. 

Another method of generating speech will allow MOCKINGBOARD to speak an unlimited vocabulary. This program incorporates the Text to Speech

 

3-16
program included on the demonstration disk. It uses a table of rules (also included on the disk to convert text into speech. The text may consist of characters typed from the keyboard or characters assigned to a string variable. It may also be text saved in a text file. If your program is very large, this method may not be economically implemented, due to the size of the rule table. However, if you can anticipate the vocabulary that may be used in your program, including responses from the user, an empty rule table may be used to build a custom list of words, The empty rule table will allow you to enter only rules which may pertain to your program. If you prefer, you may also trim the current rule table to a size more suitable to your program and save the revised version under another name. 

Any rule table may be included in your program along with Text To Speech. A sample program using this method is given below. Regardless of whether you are converting input from the keyboard or assigning it to a string variable within your program, you must assign the input to the variable MB$. The program, which Text To Speech uses to retrieve the text data, looks for this variable. This program is called MB$ GETTEXT. 

IO HOME
20 D$ = CHR$(4)
30 PRINT D$"BLOAD TEXT TO SPEECH"
40 PRINT D$"BLOAD MB$ GETTEXT"
45 REM
		***LOAD THE RULE TABLE
50 PRINT D$"BLOAD MKB:RULE. TABLE"
60 PRINT D$"BLOAD NKB:RULE. LENGTH"
70 PRINT D$"BLOAD MKB:RULE. INDEX"
75 REM
		***ASSIGN THE PHRASE TO BE SPOKEN TO MB$
80 MB$ = "WITH MOCKINGBOARD YOU'LL NEVER BE SPEECHLESS"
85 REM
	***TELL TEXT TO SPEECH TO BEGIN SPEAKING THE PHRASE
90 CALL 26123
95 REM
	***CHECK TO SEE IF FINISHED SPEAKING. IF NOT, KEEP
	CHECKING UNTIL IT IS.
100 IF PEEK (255)>0 THEN 100
110 END 

3-17
MKB:RULE is the standard rule table designed by Sweet Micro Systems. You may replace this with your rule table file name. The .TABLE, .LENGTH and .INDEX must be appended to your rule table file name. These files monitor the expansion and reduction of the rule table as well as where all the characters reside in memory. They are always updated and saved when you save a rule table. 
If you wish to speak a response from the user change line 80 to: 

80  INPUT "ENTER TEXT: ";MB$ 

The INPUT statement may be any question or prompt. 

A-1
APPENDIX A Phoneme Chart 

LIST OF CONSONANT PHONEMES 

                                                 CODE
PHONEME		1	2	3	4		EXAMPLES 

B			24	64	A4	E4		bat, tab
D			25	65	A5	E5 		dub, bud
F			34	74	B4	EA		fat, ruff, photo, laugh
HV			2A	6A	AA	EA		eh!
HVC			2B	6B	AB	EB		d(h)ouble
HF			2C	6C	AC	EC		hat, home		
HFC			2D	6D	AD	ED		P(h)ad, fluff(h), black(h)		
HN			2E	6E	AE	EE		hnh-hnh
J			31	71	81	F1		job, rage		 
K			29	69	A9	E9		kit, tick
KV			26	66	A6	E6		big, gag
L			20	60	A0	E0		lab, ball
LI			21	61	A1	E1		plan, club, slam
LF			22	62	A2	E2		bott/e, channe/
M			37	77	B7	F7		mad, dam
N			38	78	B8	F8		not, ton		
NG			39	79	B9	F9		ring, rang
P			27	67	A7	E7		pat, tap
R			1D	5D	9D	DD		rat
S			30	70	B0	F0		sat, lass
SCH			32	72	B2	F2		shop, push
T			28	68	A8	E8		tap, pat
THV			35	75	B5	F5		bathe, the
TH			36	76	B6	F6		bath, theory
V			33	73	B3	F3		vow, pave
W			23	63	A3	E3		why, quake
Y1			04	44	84	C4		you
Z			2F	6F	AF	EF		zap, maze
			00	40	80	C0		[pause] 
 
The 9 columns of code for each phoneme allow you to alter the length of any sound, and choose the version which provides the most intelligibility and natural quality. Each successive column represents a phoneme which is approximately 25% shorter than its predecessor. For most purposes, column 1 will serve as a standard value. 

A-2
APPENDIX A Phoneme Chart (continued) 

LIST OF VOWEL PHONEMES 

                                                  CODE 
PHONEME		1	2	3	4	EXAMPLES 

A			08	48	88	C8	day			
AI			09	49	89	C9	care
AE			0C	4C	8C	CC	dad
AEI			0D	4D	8D	CD	laugh
AH			0E	4E	8E	CE	top, about
AHI			0F	4F	85	CF	father
AW			10	50	90	D0	saw, caught
E			01	41	81	C1	beet, be
EI			02	42	82	C2	advent
EH			0A	4A	8A	CA	leg, said
EHI			0B	4B	8B	CB	silent
ER			1C	5C	9C	DC	third, urn, heard
I			07	47	87	C7	sit, bid
O			11	51	91	D1	boat
OO			13	53	93	D3	put, pull, look
OU			12	52	92	D2	orb
U 			I6	56	96	D6	boot, you
UI			17	57	97	D7	poor
UH 			I8	58	98	D8	cup
UHI			19	59	99	D9	circus
UH2 			1A	5A	9A	DA	nation
UH3 			1B 	5B	9B	DB	nation

FOREIGN SOUNDS
AY			05 	45	85	C5	francais	French
A			3A 	7A	BA	FA	etre		French or umlauted A
									in German
E2			3E	7E	BE	FE	schön		German
IE			06	46	86	C6	il		French
IU			14	54	94	D4	peut		French
IUI			15	55	95	D5	Goethe	German
OH			3B	7B	BB	FB	menu, tu	French
U			3C	7C	BC	FC	fiihlen		German
UH			3D	7D	8D	FD	menu, tu	French
Y			03	43	83	C3	y		French
LB			3F	7F	BF	FF	il		French
Rl			1E	5E	9E	DE	réponse	French
R2			1F	5F	9F	DF	richtig	 	German

A-3
APPENDIX A  Programmable Sound Generator Registers

REGISTER				DESCRIPTION		DEC	HEX

R0						FINE TUNE			0-255	00-FF
	CHANNEL A TONE PERIOD
R1						COARSE TUNE		0-15	00-0F
_______________________________________________________________________

R2						FINE TUNE			1-255	00-FF
	CHANNEL B TONE PERIOD		
R3						COARSE TUNE		0-15	00-0F
_______________________________________________________________________

R4						FINE TUNE			0-255	00-FF
	CHANNEL C TONE PERIOD
R5						COARSE TUNE		0-15	00-0F
_______________________________________________________________________

R6	NOISE PERIOD			ALL CHANNELS		0-31	00-1F
_______________________________________________________________________

R7	ENABLE				NOISE/TONE			0-63	00-3F
_______________________________________________________________________

R8	CHANNEL A AMPLITUDE						0-16	00-10
						AMPLITUDE LEVEL
R9	CHANNEL B AMPLITUDE		MODE SELECT		0-16	00-10
					                FIXED=0-15
R10	CHANNEL B AMPLITUDE	                VARIABLE=16       	0-16	00-10
_______________________________________________________________________

R11						FINE TUNE ENVELOPE	0-255	00-FF
_______________________________________________________________________

R12	ENVELOPE PERIOD	            	COARSE TUNE		0-255	00-FF
						ENVELOPE
_______________________________________________________________________

R13	ENVELOPE SHAPE/CYCLE	           CONT, ATTACK,        	0-15	00-0F
						ALT, HOLD
_______________________________________________________________________

R14	NOT USED	REGISTER VALUE NOT SIGNIFICANT
R15	NOT USED	REGISTER VALUE NOT SIGNIFICANT

A-4
APPENDIX C Noise and Tone Enable Register
(adapted from General Instrument Programmable Sound Generator Data Manual)

Register Value     Noise Channel                Tone Channel             Register Value     Noise Channel                Tone Channel  
DEC	HEX	C	B	A	C	B	A	DEC	HEX	C	B	A	C	B	A	
00	00	ON	ON	ON	ON	ON	ON	32	20	-	ON	ON	ON	ON	ON	
01	01	ON	ON	ON	ON	ON	-	33	21	-	ON	ON	ON	ON	-	
02	02	ON	ON	ON	ON	-	ON	34	22	-	ON	ON	ON	-	ON	
03	03	ON	ON	ON	ON	-	-	35	23	-	ON	ON	ON	-	-	
04	04	ON	ON	ON	-	ON	ON	36	24	-	ON	ON	-	ON	ON	
05	05	ON	ON	ON	-	ON	-	37	25	-	ON	ON	-	ON	-	
06	06	ON	ON	ON	-	-	ON	38	26	-	ON	ON	-	-	ON	
07	07	ON	ON	ON	-	-	-	39	27	-	ON	ON	-	-	-	
08	08	ON	ON	-	ON	ON	ON	40	28	-	ON	-	ON	ON	ON	
09	09	ON	ON	-	ON	ON	ON	41	29	-	ON	-	ON	ON	-	
10	0A	ON	ON	-	ON	ON	-	42	2A	-	ON	-	ON	-	ON	
11	0B	ON	ON	-	ON	-	-	43	2B	-	ON	-	ON	-	-	
12	0C	ON	ON	-	-	ON	ON	44	2C	-	ON	-	-	ON	ON	
13	0D	ON	ON	-	-	ON	-	45	2D	-	ON	-	-	ON	-	
14	0E	ON	ON	-	-	-	ON	46	2E	-	ON	-	-	-	ON	
15	0F	ON	ON	-	-	-	-	47	2F	-	ON	-	-	-	-	
16	10	ON	-	ON	ON	ON	ON	48	30	-	-	ON	ON	ON	ON	
17	11	ON	-	ON	ON	ON	-	49	31	-	-	ON	ON	ON	-	
18	12	ON	-	ON	ON	-	ON	50	32	-	-	ON	ON	-	ON	
19	13	ON	-	ON	ON	-	-	51	33	-	-	ON	ON	-	-	
20	14	ON	-	ON	-	ON	ON	52	34	-	-	ON	-	ON	ON	
21	15	ON	-	ON	-	ON	-	53	35	-	-	ON	-	ON	-	
22	16	ON	-	ON	-	-	ON	54	36	-	-	ON	-	-	ON	
23	17	ON	-	ON	-	-	-	55	37	-	-	ON	-	-	-	
24	18	ON	-	-	ON	ON	ON	56	38	-	-	-	ON	ON	ON	
25	19	ON	-	-	ON	ON	-	57	39	-	-	-	ON	ON	ON	
26	1A	ON	-	-	ON	-	ON	58	3A	-	-	-	ON	-	ON	
27	1B	ON	-	-	ON	-	-	59	3B	-	-	-	ON	-	-	
28	1C	ON	-	-	-	ON	ON	60	3C	-	-	-	-	ON	ON	
29	1D	ON	-	-	-	ON	-	61	3D	-	-	-	-	ON	-	
30	1E	ON	-	-	-	-	ON	62	3E	-	-	-	-	-	ON	
31	1F	ON	-	-	-	-	-	63	3F	-	-	-	-	-	-	

A-5
APPENDIX D  Envelope Shape Register
(adapted from General Instrument Programmable Sound Generator Data Manual)

Register Val                 Bit Values
DEC	HEX	CONT	ATTK      ALT	HOLD	GRAPHIC REPRESENTATION

00	00	OFF	OFF	x	x	\____________

04 	04	OFF	ON	x	x	/|____________

08 	08	ON	OFF	OFF	OFF	\|\|\|\|\|\|\|\|\|\|\|\|\|\|\

09 	09	ON	OFF	OFF	ON	\____________

10 	0A	ON	OFF	ON	OFF	\/\/\/\/\/\/\/\/\/\/\/\/\/
                                                                          ___________
11 	0B	ON	OFF	ON	ON	\|

12 	0C	ON	ON	OFF	OFF	/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|
                                                                         ____________
13 	0D	ON	ON	OFF	ON	/

14 	0E	ON	ON	ON	OFF	/\/\/\/\/\/\/\/\/\/\/\/\/\

15 	0F	ON	ON	ON	ON	/|____________

		
A-6 ... A-8
APPENDIX E 	Equal Tempered Chromatic Scale(continued)
			(fCLOCK- 1.023 MHz)

                                                     TONE PERIOD
                                                (decimal)             (hex)
Note   Octv	 Frequency     Coarse  Fine     Coarse  Fine
C 	1	32.703 	7	163	07	A3	
C#	1	34.648 	7	53	07	35	
D	1	36.708	  	6	205	06	CD	
D#	1	38.891		6	108	06	6C	
E	1	41.203		6	15	06	0F	
F	1	43.654		5	184	05	B8	
F#	1	46.249		5	102	05	66	
G	1	48.999		5	24	05	18	
G#	1	51.913		4	207	04	CF	
A	1	55.000		4	138	04	8A	
A#	1	58.270		4	73	04	49	
B	1	61.735		4	11	04	0B	
C	2	65.406		3	209	03	D1	
C#	2	69.296		3	154	03	9A	
D	2	73.416		3	102	03	66	
D#	2	77.782		3	54	03	36	
E	2	82.406		3	7	03	07	
F	2	87.308		2	220	02	DC	
F#	2	92.498		2	179	02	B3	
G	2	97.998		2	140	02	8C	
G#	3	103.826	2	103	02	67	
A	3	110.000	2	69	02	45	
A#	3	116.540	2	36	02	24	
B	3	123.470	2	5	02	05	
C	3	130.812	1	232	01	E8	
C#	3	138.592	1	205	01	CD	
D	3	146.832	1	179	01	B3	
D#	3	155.564	1	155	01	9B	
E	3	164.812	1	131	01	83	
F	3	174.616	1	110	01	6E	
F#	3	184.996	1	89	01	59	
G	3	195.996	1	70	01	46	
G#	3	207.652	1	51	01	33	
A	3	220.000	1	34	01	22	
A#	3	233.080	1	18	01	12	
B	3	246.940	1	2	01	02	
C	4	261.624	0	244	00	F4	
C#	4	277.184	0	230	00	E6	
D	4	293.664	0	217	00	D9	
D#	4	311.128	0	205	00	CD	
E	4	329.624	0	193	00	C1	
F	4	349.232	0	183	00	B7	
F#	4	369.992	0	172	00	AC	
G	4	391.992	0	163	00	A3	
G#	4	415.304	0	153	00	99	
A	4	440.000	0	145	00	91	
A#	4	466.160	0	137	00	89	
B	4	493.880	0	129	00	81	
C	5	523.248	0	122	00	7A	
C#	5	554.368	0	115	00	73	
D	5	587.328	0	108	00	6C	
D#	5	622.256	0	102	00	66	
E	5	659.248	0	96	00	60	
F	5	698.464	0	91	00	58	
F#	5	739.984	0	86	00	56	
G	5	783.984	0	81	00	51	
G#	5	830.608	0	76	00	4C	
A	5	880.000	0	72	00	48	
A#	5	932.320	0	68	00	44	
B	5	987.760	0	64	00	40	
C	6	1046.496	0	61	00	3D	
C#	6	1108.736	0	57	00	39	
D	6	1174.656	0	54	00	36	
D#	6	1244.512	0	51	00	33	
E	6	1318.496	0	48	00	30	
F	6	1396.928	0	45	00	2D	
F#	6	1479.968	0	43	00	2B	
G	6	1567.968	0	40	00	2B	
G#	6	1661.216	0	38	00	26	
A	6	1760.000	0	36	00	24	
A#	6	1864.640	0	34	00	22	
B	6	1975.520	0	32	00	20	
C	7	2092.992	0	30	00	1E	
C#	7	2217.472	0	28	00	1C	
D	7	2349.312	0	27	00	1B	
D#	7	2489.024	0	25	00	19	
E	7	2636.992	0	24	00	18	
F	7	2793.856	0	22	00	16	
F#	7	2959.936	0	21	00	15	
G	7	3135.936	0	20	00	14	
G#	7	3322.432	0	19	00	13	
A	7	3520.000	0	18	00	12	
A#	7	3729.280	0	17	00	11	
B	7	3951.040	0	16	00	10	
C	8	4185.984	0	15	00	0F	
C#	8	4434.944	0	14	00	0E	
D	8	4698.624	0	13	00	0D	
D#	8	4978.048	0	12	00	0C	
E	8	5273.984	0	12	00	0C	
F	8	5587.712	0	11	00	0B	
F#	8	5919.872	0	10	00	0A	
G	8	6271.872	0	10	00	0A	
G#	8	6644.864	0	9	00	09	
A	8	7040.000	0	9	00	09	
A#	8	7458.560	0	8	00	08	
B	8	7902.080	0	8	00	08	

A-9
APPENDIX F Assembly Language Program Listings

			1	*PRIMARY ROUTINES
			2	*FOR SLOT 4
			3	*
			4			ORG	$9000
			5	*				;ADDRESSES
										FOR FIRST
										6522
			6	ORB		EQU	$C400		;PORT B
			7	ORA		EQU	$C401		;PORT A
			8	DDRB		EQU	$C402		;DATA DIRECTION
										REGISTER (A)
			9	DDRA		EQU	$C403		;DATA DIRECTION
										REGISTER (B)
			10	*					;ADDRESSES
										FOR SECOND
										6522
			11	ORB2		EQU	$C480		;PORT B
			12	ORA2		EQU	$C481		;PORT A
			13	DDRB2	EQU	$C482		;DATA DIRECTION
										REGISTER (B)
			14	DDRA2	EQU	$C483		;DATA DIRECTION
										REGISTER (A)
15	*
16	*ROUTINES FOR FIRST 6522
17	*
9000:	A9	FF		18	INIT		LDA	#$FF		;SET PORT A
											FOR OUTPUT
9002:	8D	O3	C4	19			STA	DDRA		
9005:	A9	07		20			LDA	#$07		;SET PORT B
											FOR OUTPUT
9007:	8D	02	C4	21			STA	DDRB
900A:	60			22			RTS			;RETURN
23	*
900B:	A9	07		24	LATCH	LDA	#$07		;SEND "LATCH
											COMMAND"
900D:	8D	00	C4	25			STA	ORB		;TO SOUND
											CHIP
9010:	A9	04		26			LDA	#$04		;THROUGH
											PORT B
9012:	8D	00	C4	27			STA	ORB
9015:	60			28			RTS			;RETURN
29	*
9016:	A9	06		30	WRITE	LDA	#$06		;SEND "WRITE
											COMMAND"
9018:	8D	00	C4	31			STA	ORB		;TO SOUND 
											CHIP
901B:	A9	04		32			LDA	#$04		;THROUGH
											PORT B
901D:	8D	00	C4	33			STA	ORB
9020:	60			34			RTS			;RETURN
35	*
9021:	A9	00		36	RESET	LDA	#$00		;SEND "RESET
											COMMAND"
9023:	8D	00	C4	37			STA	ORB		;TO SOUND
											CHIP
9026:	A9	04		38			LDA	#$04		;THROUGH
											PORT B
9028:	8D	00	C4	39			STA	ORB
902B:	60			40			RTS			;RETURN
41	*
42	*ROUTINES FOR SECOND 6522
43	*
902C:	A9	FF		44	INIT2		LDA	#$FF		;SET PORT A
											FOR OUTPUT
902E:	8D	83	C4	45			STA	DDRA2
9031:	A9	07		46			LDA	#$07		;SET PORT B
											FOR OUTPUT
9033:	8D	82	C4	47			STA	DDRB2
9036:	60			48			RTS			;RETURN
49	*
9037:	A9	07		50	LATCH2	LDA	#$07		;SEND "LATCH
											COMMAND"
9039:	8D	80	C4	51			STA	ORB2		;TO SOUND
											CHIP
903C:	A9	04		52			LDA	#$04		;THROUGH
											PORT B
903E:	8D	80	C4	53			STA	ORB2	
9041:	60			54			RTS			;RETURN	
55	*
9042:	A9	06		56	WRITE2	LDA	#$06		;SEND "WRITE
											COMMAND"
9044:	8D	80	C4	57			STA	ORB2		;TO SOUND
											CHIP
9047:	A9	04		58			LDA	#$04		;THROUGH
											PORT B
9049:	8D	80	C4	59			STA	ORB2
904C:	60			60			RTS			;RETURN
				61	*	
904D:	9A	00		62			STA	#$00		;SEND "RESET
											COMMAND"
904F:	8D	80	C4	63			STA	ORB2		;TO SOUND
											CHIP
9052:	A9	04		64			LDA	#$04		;THROUGH
											PORT B
9054:	8D	80	C4	65			STA	ORB2
9057:	60			66			RTS			;RETURN

				1   	"TABLE ACCESS ROUTINE
				2	"FOR SLOT 4
				3	*
				4			ORG	$8000
				5    	*					;ADDRESSES
											FOR FIRST
											6522
				6  	PTR		EQU	$08		;DATA
											POINTER
				7	ORA		EQU	$C401		;PORT A
				8	LATCH	EQU	$900B		;LATCH SUB-
									            ROUTINE
			9	WRITE	EQU	$9016		;WRITE SUB-
										ROUTINE
			10	RESET	EQU	$9021		;RESET SUB-
										ROUTINE
			11	*					;ADDRESSES
										FOR SECOND
										6522
			12	PRT2		EQU	$0A		;DATA
										POINTER
			13	ORA2		EQU	$C481		;PORT A
			14	LATCH2	EQU	$9037		;LATCH SUB-
										ROUTINE
			15	WRITE2	EQU	$9042		;RESET SUB-
										ROUTINE
			16	RESET2	EQU	$904D		;RESET SUB-
										ROUTINE
			17	*	
18	*ROUTINES FOR FIRST 6255
19	*
8000:	20	21	90	20	START	JSR	RESET	;RESET SOUND
											CHIP
8003:	A0	00		21			LDY	#$00		;USED TO IDENTIFY
											REGISTER
8005:	8C	01	C4	22	LOOP		STY	ORA		;# OF SOUND
											CHIP
8008:	20	0B	90	23			JSR	LATCH
800B:	B1	08		24			LDA	(PTR),Y	;GET DATA FROM
											TABLE
800D:	8D	01	C4	25			STA	ORA
8010:	20	16	90	26			JSR	WRITE	;STORE IN REGISTER
8013:	C0	0F		27			CPY	#$0F		;END OF DATA?
8015:	F0	04		28			BEQ	DONE		;YES, EXIT
8017:	CB			29			INY
8018:	4C	05	80	30			JMP	LOOP		;NO, GET NEXT
											SET
801B:	60			31	DONE		RTS			;RETURN
				32	*	
				33	*ROUTINES FOR SECOND 6522	
				34	*	
801C:	20	4D	90	35	START2	JSR	RESET2	;SAME INSTRUCTIONS
											AS 
801F:	A0	00		36			LDY	#$00		;ABOVE
8021:	8C	81	C4	37	LOOP2	STY	ORA2
8024:	20	37	90	38			JSR	LATCH2
8027:	B1	0A		39			LDA	(PTR2),Y
8029:	8D	81	C4	40			STA	ORA2
802C:	20	42	90	41			JSR	WRITE2
802F:	C0	0F		42			CPY	#$0F
8031:	F0	04		43			BEQ	DONE2
8033:	CB			44			INY
8034:	4C	22	80	45			JMP	LOOP2
8037:	60			46	DONE2	RTS

1	"PROCESSOR LOOP
2	"FOR LASER AND BOMB
3	"SOUND EFFECT
4	*
5			ORG	$8F00
6	*					;FOR FIRST 6522
				7	*	
				8	PTR		EQU	$08		;DATA POINTE
				9	TONE		EQU	$0A		;TONAL VALUE
				10	TIME		EQU	$0B		;TIME VALUE FOR
  											DELAY
				11	BASE		EQU	$C400		;CARD ADDRESS
				12	ORA		EQU	BASE+1	;PORT A
				13	TAR		EQU	$8000	;	TABLE ACCESS
											ROUTINE
				14	LATCH	EQU	$900B		;LATCH SUBROUTINE
				15	WRITE	EQU	$9016		;WRITE SUBROUTINE
			16	RESET	EQU	$9021		;RESET SUBROUTINE
			17	WAIT		EQU	$FCAB	;WAIT SUBROUTINE
			18	*	
			19	*	
8F00:	A9	00		20	LASER	LDA	#$00		;LOAD HIGHEST
8F02	85	0A		21			STA	TONE		;FREQUENCY VALUE
8F04:	A9	0F		22			LDA	#$0F		;LOAD SHORT
8F06:	85	0B		23			STA	TIME		;TIME DELAY
8F08:	4C	13	8F	24			JMP	START	;AND START
8F0B:	A9	30		25	BOMB	LOA	#$30		;LOAD MIDDLE
8F0D:	85	0A		26			STA	TONE		;FREQUENCY VALUE
8F0F:	A9	40		27			LDA	#$40		;LOAD LONGER
8F11:	85	0B		28			STA	TIME		;TIME DELAY
8F13:	A9	90		29	START	LDA	#$90		;SET TABLE ADDRESS
8F15:	85	08		30			STA	PTR
8F17:	A9	81		31			LDA	#$81
8F19:	85	09		32			STA	PTR+1
8F1B:	20	00	80	33			JSR	TAR		;TRANSFER DATA
8F1E:	A9	00		34			LDA	#$00		;LATCH FIRST
											REGISTER
8F20:	8D	01	C4	35			STA	ORA		;ADDRESS
8F23:	20	0B	90	36			JSR	LATCH
8F26:	A5	0A		37	LOOP		LDA	TONE		;GET TONE VALUE
8F28:	8D	01	C4	38			STA	ORA		;STORE IN REGISTER
8F2B:	20	16	90	39			JSR	WRITE
8F2E:	A5	0B		40			LDA	TIME		;GET TIME VALUE	
8F30:	20	A8	FC	41			JSR	WAIT		;AND DELAY
8F33:	E6	0A		42			INC	TONE		;INCREMENT TONE
											VALUE
8F35:	A9	FF		43			LDA	#$FF		;END OF INCREASE?
BF37:	C5	0A		44			CMP	TONE
8F39:	F0	03		45			BEQ	DONE		;YES,EXIT
8F3B:	4C	26	8F	46			JMP	LOOP		;NO, START AGAIN
8F3E:	A5	0B		47	DONE		LDA	TIME		;GET TIME VALUE
8F40:	20	AB	FC	48			JSR	WAIT		;DELAY
8F43:	A9	00		49			LDA	#$00		;RESTORE ORIGINAL
8F45:	85	0A		50			STA	TONE		;TONE VALUE
8F47:	20	21	90	51			JSR	RESET	;CLEAR SOUND CHIP
8F4A:	60			52			RTS			;REGISTERS AND
											RETURN

				1  *SPEECH-COMPOSITE DRIVER	
				2  *		
				3			ORG	$6D00
				4  *	
				5  TABPTR		EQU	$F9		;DATA POINTER
				6  OUTPTR		EQU	$FB		;START OF DATA
											POINTER
				7  ENDPTR		EQU	$FD		;END OF DATA
											POINTER
				8  BUSY		EQU	$FF		;BUSY FLAG
				9  IRQL		EQU	$03FE		;INTERRUPT VECTOR,
											LOW BYTE
				10  IRQH		EQU	$03FF		;INTERRUPT VECTOR,
											HIGH BYTE
				11  BASE		EQU	$C440		;FIRST SPEECH CHIP
				12  DURPHON	EQU	BASE		;REGISTER 0 OF
											SPEECH CHIP
				13  INFLECT		EQU	BASE+$01	;REGISTER 1 OF
											SPEECH CHIP
				14  RATEINF	EQU	BASE+$02	;REGISTER 2 OF
											SPEECH CHIP
				15  CTTRAMP	EQU	BASE+$03	;REGISTER 3 OF
											SPEECH CHIP
				16  FILFREQ		EQU	BASE+$04	;REGISTER 4 OF
											SPEECH CHIP
				17  PCR		EQU	$C0C		;PERIPHERAL
											CONTROL
											REG-6522
				18  IFR		EQU	$C40D		;INTERRUPT FLAG
											REG-6522
				19  PCR		EQU	$C48C		;INTERRUPT ENABLE
											REG-6522
				20  IFR		EQU	$C48D	
				21  IER		EQU	$C48E	
				22  *SETUP ROUTINE	
				23  *	
6D00:	78			24			SEI			;DISABLE INTERRUPTS
6D01:	A9	4D		25			LDA	#<INTERR	;SET INTERRUPT
											VECTOR
6D03:	8D	FE	03	26			STA	IRQL		;TO POINT TO
											INTERRUPT
6D06:	A9	6D		27			LDA	#>INTERR	;SERVICE ROUTINE
6D08:	8D	FF	03	28			STA	IRQH
				29	*	
6D0B:	AS	FA		30			LDA	TABPTR+1	;GET HIGH ADDRESS
											OF DATA
6D0D:	85	FC		31			STA	OUTPTR+1	;STORE IN WORK
											POINTER
6D0F:	A6	F9		32			LDX	TABPTR	;GET LOW ADDRESS
											OF DATA
6D11:	E8			33			INX			;INCREMENT TWICE
6D12:	E8			34			INX			;TO SKIP OVER
											LENGTH BYTES
6D13:	D0	02		35			BNE	CONT		;CHECK FOR PAGE
											BOUNDARY
6D15:	E6	FC		36			INC	OUTPTR+1
6D17:	86	FB		37	CONT		STX	OUTPTR	;STORE LOW BYTE
				38	*	
6D19:	A0	01		39			LDY	#$01
6D1B:	B1	F9		40			LDA	(TABPTR),Y	;GET HIGH LENGTH												BYTE
6D1D:	18			41			CLC
6D1E:	65	FA		42			ADC	TABPTR+1	;AND ADD TO BASE
											ADDRESS
6D20:	85	FE		43			STA	ENDPTR+1	;STORE END ADDRESS
6D22:	88			44			DEY
6D23:	81	F9		45			LDA	(TABPRT),Y	;GET LOW LENGTH
											BYTE
6D25:	18			46			CLC
6D26:	65	F9		47			ADC	TABPTR	;AND ADD TO BASE
											ADDRESS
6D28:	90	02		48			BCC	CONT1	;CHECK FOR PAGE
											BOUNDARY
6D2A:	E6	FE		49			INC	ENDPTR+1
6D2C:	85	FD		50	CONT1	STA	ENDPTR	;STORE END ADDRESS
				51	*	
6D2E:	A9	FF		52	CONT5	LDA	#$FF		;SET BUSY FLAG
6D30:	85	FF		53	STA		BUSY			;AND SET PERIPHERAL
											CONTROL
6D32:	A9	0C		54			LDA	#$0C		;REGISTER TO
											RECOGNIZE
6D34:	8D	0C	C4	55			STA	PCR		;SIGNAL FROM SPEECH
											CHIP
6D37:	A9	80		56			LDA	#$80		;RAISE CTRL BIT IN
											REGISTER 3
6D39:	8D	23	C4	57			STA	CTTRAMP
6D3C:	A9	C0		58			LDA	#$C0		;SET TRANSITIONED
											INFLECTION
6D3E:	8D	20	C4	59			STA	DURPHON	;MODE IN REGISTER 0
6D41:	A9	70		60			LDA	#$70		;LOWER CTRL BIT
6D43:	8D	23	C4	61			STA	CTTRAMP
6D46:	A9	82		62			LDA	#$82		;ENABLE 6522
											INTERRUPTS
6D48:	8D	0E	C4	63			STA	IER
6D48:	58			64			CLI			;CLEAR INTERRUPT
											MASK
6D4C:	60			65			RTS			;RETURN TO CALLER
				66	*	
				67	*INTERRUPT ROUTINE
6D4D:	8A			68	INTERR	TXA			;SAVE REGISTERS
6D4E:	48			69			PHA
6D4F:	98			70			TYA
6D50:	48			71			PHA
6D51:	A9	02		72			LDA	#$02		;CLEAR INTERRUPT
											FLAG
6D53:	8D	0D	C4	73			STA	IFR		
6D56:	A0	00		74			LDY	#$00		;INIT REGISTERS
6D58:	A2	04		75			LDX	#$04
6D5A:	A5	FB		76			LDA	OUTPRT	;CHECK FOR END OF
											DATA FILE
6D5C:	C5	FD		77			CMP	ENDPTR
6DSE:	D0	20		78			BCC	CONT6	;IF NOT THEN
											CONTINUE
6D60:	A5	FC		79			LDA	OUTPTR+1	;CHECK HIGH ADDRESS
											ALSO
6D62:	C5	FE		80			CMP	ENDPRT+1
6D64:	D0	1A		81			BCC	CONT6	;IF NOT THEN
											CONTINUE
6D66:	A9	00		82			LDA	#$00		;IF END, TURN EVERY-
											THING OFF
6D68:	8D	20	C4	83			STA	DURPHON	;STORE PAUSE
											PHONEME
6D68:	A9	70		84			LDA	#$70		;ZERO AMPLITUDE
6D6D:	8D	23	C4	85			STA	CTTRAMP
6D70:	A9	00		86			LDA	#$00		;CLEAR BUSY FLAG
6D72:	85	FF		87			STA	BUSY		
6D74:	A9	02		88			LDA	#$02		;CLEAR INTERRUPT
											ENABLE
6D76:	8D	0E	C4	89			STA	IER		;IN 6522
6D79:	68			90	RET		PLA			;RESTORE REGISTERS
6D7A:	A8			91			TAY
6D7B:	68			92			PLA
6D7C:	AA			93			TAX
6D7D:	A5	45		94			LDA	$45
6D7F:	40			95			RTI			;RETURN FROM
											INTERRUPT
				96	*	
6D80:	B1	FB		97	CONT6	LDA	(OUTPTR),Y	;GET DATA
6D82:	9D	20	C4	98			STA	BASE,X	;STORE IN SPEECH
											CHIP
6D8F:	E6	FB		99			INC	OUTPTR	;NEXT DATA
6D87:	D0	02		100			BNE	CONT7
6D89:	E6	FC		101			INC	OUTPTR+1
				102	*	
6D88:	CA			103	CONT7	DEX			;NEXT REGISTER
6D8C:	E0	FF		104			CPX	#$FF		;LAST REGISTER?
6D8E:	D0	F0		105			BNE	CONT6	;NO, CONTINUE
6D90:	F0	E7		106			BEQ	RET		;YES, RETURN

ADDEMDUM

Page A-15, SPEECH-COMPOSITE DRIVER update as follows:

INSERT 
After line 16:	DDRB 	EQU 	$C402 
		DDRA 	EQU 	$C403 
After line 29:			LDA 	#$00
				STA 	DDRA
				STA 	DDRB 
After line 89: 			LDA 	#SFF 
				STA	DDRA
				LDA	#$07 
				STA 	DDRB