The comp.sys.apple2 Usenet newsgroup Apple II FAQs
originate from the II Computing Apple II site, 1997-2012.
Csa2 FAQ resource file: R027MOCKBD.HTML
Revised February 7, 2011 Rubywand
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
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 (layout is for the Mockingboard A)
_______
________________ ________
_
|
| |
| | | {3} {4} |_
[5]
| [1] | |
[2] | | [7] |
__ __
|_______| |________________|
|________| |6 | |6 |
|__| |__|
_______
________________ ________
|
| |
| | |
| [1] | |
[2] | | [7] |
|_______| |________________|
|________|
|___________________________________________________________|
|___________________| [8]
1. AY-3-8913 Programmable Sound Generator Chips (Function and programming
on
Mockingboards is identical to 40-pin
AY-3-8910 used on earlier models.)
2. 6522 Versatile Interface Adapter chips
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. Audio Amplifier Chips
7. Speech Chips/Sockets for one or two Speech Chips
8. Standard Apple II Edge Connector (gold plated contacts)
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. You will 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.
1-3
The comments to the right explain 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 the control (CTRL) key.
COMMAND PARAMETER
PRESET RANGE
^A
AMPLITUDE
11 0-11
^I
INFLECTION
8 0-25
^F
FILTER FREQUENCY 232
0-253
^R
SPEECH RATE
8 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.
[A] RULE TABLE - R
[B] NUMBER OF RULES - 16
[C] ADDRESS - 34494
[D] LENGTH - 160 BYTES
[E]
1. !(R)! = OESC
2. !(READY)!= 1D4A4A2501
3. !(READ)= 1D414125
4. !(REC)+= 1D0130
5. !(REC)= 1D0A29
6. !(RE)^#= 1D01
7. (RE)D= 1D0A
8. (RHY)TH= 1D07
9. (RH)= 1D
10. (RINE)!= 1D0138
[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] Command Prompt (Type one of the editor commands in Table 1-1 below.)
KEY FUNCTION KEY FUNCTION
^Z Select new character
table
E Edit an entry
I Insert a new rule
D Delete an entry
T Test mode
U Update Main Rule Table
^S Save Rule Table to
disk
^L Load Rule Table
^P Print Character Table
^Q Quit or exit program
^X Help menu
SPC Press SPACE to 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]
|
1 !(R)!=0E5C
|
/ | \
[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= l1
69 (O)^Y= 1l
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= 1D07
15 TH(ROUGH)= 1D16
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
l0 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)!= 1D0F645C68C0
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)!= 1D0E645C68C0
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
ONE 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
ONE PER COARSE
15 0 5 5 5
NOISE PERIOD
31 10
ENABLE
63 62
AMPLITUDE
16 0 10 10 10
(FIX = 0- 15/VAR = 16)
ENVL PER FINE
255 0
ENVL PER COARSE
255 4
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
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.
REGISTER
MAX CHANNEL
NAME
VAL ALL A B C
TONE PER FINE
255 0 209 7 140
ONE 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
Unused
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.
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.
3-5
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
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
3-7
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
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
3-9
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.
3-11
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
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.
10 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
110 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.
3-15
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
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.
10 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 16 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)
Reg. Noise
Tone Reg. Noise
Tone
Value Channel Channel
Value Channel 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)
Reg.
Bit Values
Value
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
(fCLOCK- 1.023 MHz)
TONE PERIOD
Decimal Hex
Note Oc Freq Crse
Fine Crse 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 ... A-20
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 (B)
9 DDRA
EQU $C403 ;DATA DIRECTION REGISTER (A)
10 *
;ADDRESSES FOR SECOND 6522
11 ORB2 EQU
$C480 ;PORT B
12 ORA2 EQU
$C481 ;PORT A
13 DDRB2 EQU $C482
;DATA DIRECTION REGISTER2 (B)
14 DDRA2 EQU $C483
;DATA DIRECTION REGISTER2 (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 SUBROUTINE
9 WRITE EQU
$9016 ;WRITE SUBROUTINE
10 RESET EQU $9021
;RESET SUBROUTINE
11 *
;ADDRESSES FOR SECOND 6522
12 PRT2 EQU
$0A ;DATA POINTER
13 ORA2 EQU
$C481 ;PORT A
14 LATCH2 EQU $9037
;LATCH SUBROUTINE
15 WRITE2 EQU $9042
;RESET SUBROUTINE
16 RESET2 EQU $904D
;RESET SUBROUTINE
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 ABOVE
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 POINTER
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
(INCLUDES ADDENDUM INSERTS)
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
16 DDRB
EQU $C402 ;DATA DIRECTION REGISTER (B)
16 DDRA
EQU $C403 ;DATA DIRECTION REGISTER (A)
17 PCR
EQU $C40C ;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 *
29 LDA #$00
;INSERT FROM ADDENDUM
29 STA DDRA
;INSERT FROM ADDENDUM
29 STA DDRB
;INSERT FROM ADDENDUM
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 EVERYTHING 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
89 LDA #$FF
;INSERT FROM ADDENDUM
89 STA DDRA
;INSERT FROM ADDENDUM
89 LDA #$07
;INSERT FROM ADDENDUM
89 STA DDRB
;INSERT FROM ADDENDUM
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
#$FF
STA DDRA
LDA #$07
STA DDRB
Note: Assembly language inserts done in original program (above).
The version below integrates the
Addendum changes as subroutines to preserve correct line numbering and
machine code.
1 *SPEECH-COMPOSITE DRIVER
(PATCHED)
2
ORG $6D00
3 TABPTR
EQU $F9 ;DATA POINTER
4 OUTPTR
EQU $FB ;START OF DATA POINTER
5 ENDPTR
EQU $FD ;END OF DATA POINTER
6 BUSY
EQU $FF ;BUSY FLAG
7 IRQL
EQU $03FE ;INTERRUPT VECTOR, LOW BYTE
8 IRQH
EQU $03FF ;INTERRUPT VECTOR, HIGH BYTE
9 BASE
EQU $C440 ;FIRST SPEECH CHIP
10 DURPHON EQU BASE
;REGISTER 0 OF SPEECH CHIP
11 INFLECT EQU BASE+$01
;REGISTER 1 OF SPEECH CHIP
12 RATEINF EQU BASE+$02
;REGISTER 2 OF SPEECH CHIP
13 CTTRAMP EQU BASE+$03
;REGISTER 3 OF SPEECH CHIP
14 FILFREQ EQU BASE+$04
;REGISTER 4 OF SPEECH CHIP
15 DDRB
EQU $C402 ;INSERT FROM ADDENDUM
16 DDRA
EQU $C403 ;INSERT FROM ADDENDUM
17 PCR
EQU $C40C ;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: 20 92 6D 28
JSR PSUB1 ;JSR TO PATCH SUB1
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 EVERYTHING 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: 20 9E 6D 89
JSR PSUB2 ;JSR TO PATCH SUB2
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
107 *
6D92: 8D FF 03 108 PSUB1 STA
IRQH ;BEGIN PATCH SUB1
6D95: A9 00 109
LDA #$00
6D97: 8D 03 C4 110
STA DDRA
6D9A: 8D 02 C4 111
STA DDRB
6D9D: 60
112 RTS
;RETURN TO CALLER
113 *
6D9E: 8D 0E C4 114 PSUB2 STA
IER ;IN 6522 BEGIN PATCH SUB2
6DA1: A9 FF 115
LDA #$FF
6DA3: 8D 03 C4 116
STA DDRA
6DA6: A9 07 117
LDA #$07
6DA8: 8D 02 C4 118
STA DDRB
6DAB: 60
119 RTS
;RETURN TO CALLER