The board layout shown here was created with Autotrax, the corresponding file for this layout can be found here: .
Download. More information about Autotrax and download can be found on the main hardware page.
Building instruction First you should solder in the wire bridges. Then the resistors and the trimmer. Next, the capacitors, taking care of the correct polarity of the tantalum beads. Now it's the turn of the ICs. Here it is important to make sure that the notches are on the right side. Don't "fry" the legs too long, otherwise the ICs are even. Now plug in the 9pol. SUB-D socket in the middle of the front side of the board, so that five pins are on the assembly side and the other four are on the solder side. Pin 7+8 are soldered to the traces. The pins 1+2 are connected with a wire jumper to the opposite solder tags (holes left of R1). The remaining pins on the solder side can be soldered for stabilization. But be careful that the pins 6+9 don't get on the traces of the pins 7+8. To be on the safe side shorten pins 6+9 a bit. Finally screw the chinch socket into the hole and solder the ground contact. Again, do not "fry" it too long, otherwise the plastic part of the thing will deform and you won't get a plug in anymore. The inner terminal is connected to the free leg of capacitor C3 with a wire bridge. To further stabilize the Sub-D socket you can glue it on the assembly side with hot glue.
Tones are density changes in the air with a frequency between, for example, 20 and 15000 Hertz. In order for computers to be able to work with tones at all, it is necessary to convert these density changes into a quantity that can be measured by the device. This task is performed by a microphone, for example, by converting density fluctuations into corresponding voltage fluctuations. A digitizer now has the task to convert the analog, infinitely fine stepped signal into a digital, finitely fine stepped signal. The higher the resolution of the digitizer is, the finer these steps are, so the better is the quality at a later playback. Unfortunately the memory consumption is also the higher. We believe that with a resolution of two bits, i.E. Four values, we have found the best compromise between the storage capacity of the computer and the resistance of the ears.
The Speech-Basic digitizer has to be connected to the headphone output of a dictation machine, a Walkman® , a radio recorder or a stereo system. The analog signal is divided into four values by the digitizer in a chain of three operational amplifiers. The downstream inverting trigger then ensures clean and defined levels. In the last IC the three signals are still combined to two bits, whereby the following assignment table is used:
111 becomes 00 = value 1 110 becomes 01 = value 2 100 becomes 10 = value 3 000 becomes 11 = value 4
The circuit now leads these two bits to joystick port 2 as joystick UP and joystick DOWN. There these two bits are read up to 18000 times per second. Four stored in one byte each. The later playback is done by the volume register $D418 of the sound chip, so the circuit is not necessary for this purpose. Each of the four digitizing stages can be assigned to any volume level. By dynamically changing this assignment table, the above mentioned echo and reverb effects are then possible.
The first time
Before the first recording can be made, the hardware should be subjected to a function test and an adjustment. For this you need the basic extension "Speech-Basic" (Listing 1, please enter with the MSE) and a C 64 or C 128 and a screwdriver.
Turn off your computer and plug the digitizer into joystick port 2, but not yet into a sound source. Switch the unit on again. Do all keys still respond? Very good! Then you have already made no gross mistakes in setting up the circuit. Now load the Speech-Basic program with
LOAD "SPEECH-BASIC, 8
And start it with RUN . The computer should immediately respond with the message C64 SPEECH SYSTEM V2:7 report back. Speech-Basic always reports in lowercase mode. If this is not the case (especially after ), the command RESET a re-initialization without loss of program should be performed. Since some Cornmodore computers have a strongly bouncing RESTORE key, it can happen that the restore is aborted in the middle of the process, RESET brings the computer back to a defined state.
Now assign four easily distinguishable colors (in this example four shades of gray) to the four digitizing steps with the command COLDEF 0,11,12,15 to four easily distinguishable colors (in this example four shades of gray). If you now enter the command HEAR SPEED 1 If you enter the "Echo" key, you will enter the monitoring mode. The screen should be switched off (like in cassette mode). Show one of the four defined colors. If you turn the potentiometer on the board from the leftmost stop to the rightmost stop, the screen should sequentially take on the four defined colors in order of definition. If this is the case, the circuit works properly.
To adjust, turn the potentiometer fully and sensitively back to the right, keeping an eye on the picture. If the screen color changes from color 3 to color 2 (in the example from medium gray to dark gray), the circuit is set correctly. It can now convert negative deflections about as well as positive ones.
Make sure, however, that you set your digitizer exactly to the changeover point between stage 2 and 3. So the screen must not jump back and forth between dark and medium gray by itself. Otherwise you will get a disturbing noise at quiet places later when recording. You exit the listening mode by pressing the space bar.
Reading in sound
Speech-Basic itself occupies the memory range from $0800 (2048) to $1800 (6144). This is directly followed by the memory area for basic programs and variables. Its upper limit is called HIMEM and is normally $A000 (40960), but can be changed within reasonable ranges with the command of the same name. The memory area for acoustic signals then extends from HIMEM to (almost) the physical end of the memory. So by changing HIMEM you can divide the memory between basic program and sound. For working in direct mode, it has proven useful to make the sound storage as large as possible. With the command HIMEM $1A00 you reserve about 57.5 kilobytes for the audio memory. 512 bytes are still available for the Basic control program. If you have forgotten the current memory allocation at the moment, you can get it by the command MEM get on the screen. Furthermore, the assignment tables of the color values and the volume values should be assigned meaningfully for the recording. This is done with the commands COLDEF 0,11,12,15 and VOLDEF 0,5,10,15. You can of course use your own values. Now wind the music cassette to the desired position and turn the volume and bass all the way down to zero. The digitizer must of course be connected to both the computer and the amplifier for recording.
Enter HEAR:RECORD SPEED 1 .(function key 4) on. The computer is now in listening mode again, but this time it is serious! Start the music recorder. Slowly turn up the volume. Pay attention to the sound. On the distribution of the stripes on the screen. You will notice that the sound is usually best when all four colors are represented on the screen in roughly equal measure. Now play a little with the bass control. You will notice that too strong bass impulses "cover" the sound. Find the right setting for the bass control and remember it. If you think that the level for this piece is optimal, rewind the music recorder and start again. As soon as you press the space bar, Speech-Basic starts to transfer the read values also into the memory. After about 14 seconds the memory is full and the computer reports again; however, you can cancel the recording (and likewise the playback) at any time by pressing (without ). If you were in the direct mode, you get even the abort address displayed.
If you do not want to fill the entire memory, you can at the RECORD-command also specify an address range with. The complete syntax for RECORD is RECORD FROM anf TO end SPEED x
With anf and end greater than HIMEM and x greater than 0. The playback of acoustic signals is done with the PLAY-command (function key 3), whose syntax is similar to that of RECORD corresponds to. More about this later.
Since Speech-Basic uses the RAM area under the two ROMs especially intensively, the LOAD and SAVE routines had to be rewritten. The new commands are called BLOAD and BSAVE and always save the RAM contents. Both commands work only with floppy disk stations, because it would be quite nonsensical to try to store 60 KByte on tape. To save the entire sound memory to diskette, it is sufficient to use, "BSAVE "name " specify. However, the complete syntax here is
BSAVE "name",dv FROM anf TO end.
The parameters can be omitted from back to front. The syntax of the BLOAD-command is identical to that of BSAVE identical. Here gives anf the address to which the data should be loaded. If it is missing, the data will be loaded to the original address from which it was saved. The value end specifies a maximum value that will not be exceeded. If the file is longer than end, the overhanging bytes are ignored. This allows a complete control of the loading process. Sending disk commands. To display the table of contents of the diskette. For the syntax of these commands please refer to the tabular command overview.
Isolating words – the block table
It is relatively easy with Speech-Basic to find and isolate single words, sentences or other sound parts. To do this, the memory area in question should be selected twice with PLAY and press the key once before and once after the desired word or sentence. Then you already have approximately the start and end address of the memory block with the word in question. Now you can extend this range with
FROM anf TO end
Listen to it, move the borders a bit more, sensibly page by page (i.E. In 256-byte steps), until you have the word exactly. However, it is very cumbersome to re-enter the sometimes quite "crooked" numerical values found in this way each time. It makes much more sense to specify these addresses in a BLOCK and henceforth to rely only on this BLOCK to obtain. A so called BLOCK is defined with the command of the same name. The syntax is
BLOCK x (FROM anf (TO end)) (str)
Where anf and end are the already known start and end addresses; str is a short comment of any length, up to a maximum of eight characters. The block number x can move between 1 and 31. Here the block number 30 with the address range of the function key assignment predefined, so that this can be easily saved. Block number 31 contains the block table itself, so that this can also be stored. The block number 0 cannot be defined, although it exists. It always represents the start and end address of the last BLOAD-Commands available.
Whenever and wherever you need a start and end address in the format FROM anf TO end If you are allowed to specify a block in the format BLOCK x specify. Speech-Basic then sets the initial-. End address of the block. This is the case with the commands PLAY, RECORD, BLOAD, BSAVE, MON and at the BLOCK-command itself. For example, the following line is possible:
BLOCK 1 BLOCK 0 "Good day"
To save the start and end addresses of the words "Guten Tag" just loaded, thus freeing up block 0 for the next loading process. In the same way the construction
BSAVE "f keys,8 BLOCK 30
Syntactically correct. The deletion of the block table is done with the loop
FOR x=1 TO 29:BLOCK x"":NEXT x
Since both the start and end address are missing, the smallest (HIMEM) and the largest ($FFF8) available address are automatically used.
You can view the block table at any time with MAP x-y. The syntax is the same as for LIST, so for example MAP 10, MAP -10 and so on. The word BLOCK is on the function key 6; if you want to view the entire block table, it is sufficient to press and , because BLOCK without all parameters corresponds to the command MAP 0-31. This prevents deleting a block unintentionally.
Special effects – as program and as macro
Once you have isolated single words, it is easy to program special effects – and that is, the only thing for which the program mode still. All other work is better done in dialog. The simplest effect is the rap or break effect, i.E. Repeating words or syllables several times. You simply define the word to repeat (2), the part of the sentence before (1) and the part behind (3) as blocks. Then, in the simplest case, let the whole thing be spoken in the order 1,2,2,3 (Listing 2). The speed of the playback can then still be changed ("scratching", Listing 3).
If you define the end (i.E. The last syllable) of a sentence as a block and repeat it several times at the end with decreasing volume, you will achieve an echo or reverb effect (Listing 4). This quickly reveals a disadvantage: whenever a command is finished, the screen flashes briefly. In addition, there is a short but audible interruption in the sound sequence of such a jingle each time. A remedy for this is that the EXEC-Command. EXEC knows only one parameter, a command string, which can contain any number of letter commands. The program
10 PLAY BLOCK 1 SFEED 1- 20 PLAY BLOCK 2:PLAY BLOCK 2 30 PLAY BLOCK 3
can be made like this
EXEC "[email protected]"EXEC
Summarize. The string is processed much faster than the program, furthermore the screen remains switched off until the string is completely processed.
Now you know how to work with Speech-Basic and what you can achieve with Speech-Basic. You should still use the following formal. Therefore read or at least skim the somewhat dry) command description. On the one hand you will find further commands explained there, which have not been used so far, on the other hand you will discover many important hints there, where to look for errors.
Command list by subject groups
The commands in this list are sorted by subject groups. In the command description upper case letters mean command words, lower case letters mean parameters. Brackets must not be entered, but indicate parameters that may be omitted. "Str" is, unless otherwise specified, any string expression. Block is a memory block in the format FROM anf TO end or end, end or BLOCK x. A is a two-byte integer value (address). N is a "one-byte integer value. Dv denotes a device number (address).
All disk commands use the logical file number 127 for data transfer. This channel is closed by CLOSE closed. You should not use this file number in your programs.
The listing can be stopped at any time with.
It is possible to use hex and binary numbers everywhere (PRINT $A000, x=$FCE2 * %OllOll). Hex numbers are marked by a preceding "$", binary numbers by a "%". A hex number containing the sequence "DEF" must be written "DEF", otherwise the conversion routine of the operating system will write a DEF-token (from the DEF .FN – command) inserts. Otherwise you will get an error message.
In IF. .THEN-constructions must follow the THEN a colon when new defined commands follow. Otherwise there will be an SYNTAX ERROR, although the command would be correct.
A) Basic commands to control the extension
RESET – delete the sound chip, the video controller and the CIAs. In addition, the vector table of the kernel (from $0390) is reallocated. RESET should be the first command in every program.
BASIC – Switch off Speech-Basic. In direct mode you first get the question "are you sure?" Which you can set with "Y" for the command to be executed. In, program mode, the system assumes that the shutdown is intentional, so the confirmation prompt is omitted. Basic sets LOMEM do not return to $0800 and do not stop a running program. Only the additional commands are switched off.
HELP -. Shows a table of speech-basic command tokens. HELP* shows a table of Basic V2 tokens.
B) Utilities and disk commands
KEY (n,str) – Assign function keys. KEY displays an editable list of function key assignments. The sign "-" cannot be placed on a function key, it represents a RETURN ($OD). A maximum of 15 characters can be assigned to a function key. The keys are preset with the following values:
After a certain training period, the key should be assigned with "SPEED" can be reassigned. The new version of Speech-Basic can then be started with
BSAVE "SPEECH-BASIC,8 FROM $0801 T0 $1800
MEM – gives an overview of the current memory distribution, for example in the following form:
BASIC: $1801 to $1803 – Length of the current program
SOUND: $a000 to $fff8 – the sound memory
KEYS: $0c6f to $0cef – Position of the function keys
BLOCKS: $165b to $l7db – Location of the block table
DISK (str(,dv)) – Edit command channel. Parameter reads the command channel of the disk station. Display it on the screen. If one passes a command string, the error status is not read out, so that it can be compared to a query with INPUT # and the corresponding handling in the program is available.
DIR (str(,dv)) – Display table of contents. DIR without parameters returns the disk directory "$" from. Str can be one of the usual search masks ("$:s* = p")
BLOAD "name"(,dv) (block) – The program file name is dv loaded. If a block is specified, the program file is sent to the address anf is loaded, otherwise the program takes over the load address of the file. The charging process is started when the address is reached end aborted. BLOAD is processed like a normal basic command, the running program does not restart like with a normal LOAD. The start and the end address of the loaded program are stored in the BLOCK 0 passed to. BLOAD always loads into RAM, even in the range $D000 to $DFFF (value $34 in memory location 1).
BLOAD "s.Test",8 FROM $A000
BLOAD "b.Test",8 BLOCK 31:REM Load block table
BSAVE "name" (,dv) (block) – the block block will be in the file name on the unit dv stored. It is recommended that sound files be preceded by a "s." Or "snd." To mark. For block tables one should use "b." Or " blk." Append. This marking is followed by the name of the loading and demonstration program.
BSAVE "s.Test",8 FROM $A000 TO $B000
BSAVE "b.Test",8 BLOCK 31:REM save block table
C) Tone commands
HEAR (SPEED n) – allows online listening at the digitizer. This assigns specific color and volume values to the four digitization stages. The color values are written to the VIC register $D020, the volume values are written to the SID register $D418. Exit with the space bar. RECORD (block) (SPEED n) – works like HEAR. At the same time the read values are logged in the memory area block. The recording can be aborted prematurely with. If this was done in direct mode, an abort address is output ("stopped at xxxxx"). The maximum recording speed is 1; the slowest speed that still makes sense is about 40.
RECORD FROM $A000 TO $D000
RECORD SFEED 1
RECORD BLOCK 1 SFEED 10
PLAY (block) (SPEED n) – is the inversion of
RECORD. The data in the specified block will be interpreted as sound data, the assigned color and tone values will be output. The maximum playback speed is 0, the PLAY-routine is therefore faster than the RECORD-Routine. Volume. Determine color assignment. The four values supplied by the digitizer are never directly output as color or sound. Instead, the value assigned to them is written to the corresponding register. The commands VOLDEF and COLDEF affect this assignment table accordingly. Definition: A block is a command channel defined by the start of-. End address limited memory area. Instead of the formal parameter ("block") either the direct reference to addresses in the form "FROM anf TO end or shorter ",anf,end" or the reference to a block of the block table in the form "BLOCK n". The end address end must be greater than the start address ard and less than $FFF9.
BLOCK without parameters, analogous to KEY, the entire block table to. This prevents the accidental deletion of a block (theoretically, this would require HIMEM and $FFF8 must be used as default).
The blocks exist 0 to 31, the block 0 however, cannot be defined. It describes the function key assigned with the last BLOAD loaded memory area. The blocks 30 and 31 describe the location of the function key table and the block table itself, but can be redefined. If this is the case, the original values can be replaced by MEM be requested.
The string expression Str can be up to eight characters long and only appears again in the output of the block table. It is intended to briefly reflect the content of a block (usually only one word).
The block table can be paused by the command sequence
FOR n=1 to 29:BLOCK n"" :NEXT n
BLOCK 1"":REM delete block 1
BLOCK 1,$A000:REM end address..Is $FFF8
BLOCK 1,$A000,$B000:REM short form of
BLOCK 1 FROM $A000 TO $B000
BLOCK 1 BLOCK 0:REM block 0 save
BLOCK 1 BLOCK 0 a$:REM save and name block 0
BLOCK 1 TO $B000:REM FALSE!
MAP (x(-(y)))/(-y) – outputs the block table in editable form. The complicated formal parameter behind MAP is no reason to panic. It describes a syntax similar to that of the LIST-Command is identical. As with LIST no variables are allowed here either.
HIMEM a – denotes the upper limit of the basic memory. It forms the first address usable for sound data. The value a cannot be less than the end address of the current program and cannot be greater than $A000. The HIMEM-Command contains the CLR-Command.
HIMEM $1A00:REM largest possible memory for tone
HIMEM $A000:REM largest possible memory for basic
PAUSE (a) – wait without parameters PAUSE to a change of state on port 2, i.E. To incoming sound data. Because of the double assignment of the CIA with joystick port. Keyboard, the command is unusable in direct mode. PAUSE with parameter a program stops for a interrupt cycles (about a/60 seconds).
EXEC str – interprets the passed string as a command string specifying a sequence of blocks to be played back. In addition, parameters such as volumes or colors can be described. The type of data is described with a preceding letter (command). The following commands exist:
P w – Play block w
S w – Set speed value
W w – w/60th wait
V w,w,w – Define volume table
C w,w,w – Define token table
# str – "goto" String Str
" – End command string
All other characters will abort EXEC. The individual commands can, but do not always have to, start with ":" are separated.
The parameter w is a constant or a variable. IMPORTANT: The end flag (bracket monkey) must not be omitted, otherwise unwanted commands may be executed.
EXEC slv0, 5,10, 15pl # c$
EXEC a$" ":REM end with security
EXEC a$+b$" "
On the program service diskette there is an example (pop in the head), which shows the possibilities of the EXEC-Command makes extensive use of.
E) Other commands
HEX and DEC – the numerical output at EXEC and MON influence. HEX selects hexadecimal number output, DEC displays the decimal output.
SCREEN flag – screen on or off? Normally the screen is displayed at HEAR, RECORD, PLAY and EXEC switched off. The SCREEN-Command allows Speech-Basic to operate even when screen is on. Flag is either the token ON or OFF or an expression equal to or not equal to zero.
MON (block) and< (Arrow to the left) – The sound monitor
With MON a memory block can be displayed on the screen as it was read. Four tone values each form one byte. The individual values are thereby changed in them by COLDEF assigned values colored, to be better distinguishable.
The values can be changed by overwriting. Changes are taken over with . The command "< " (arrow to the left) causes the adoption of the values. To avoid the READY-message, however, it jumps directly into the interpreter loop. Therefore it cannot be used in the program. MON allows the correction of short, noisy pauses and the byte-accurate retrieval of words. In addition MON a good level control.