MAGIC VOICE Anleitung - Manual

CBM Home Allgemeines
General
Einführung
Introduction
Anschluss
Connection
Anwenden des Moduls
Using the Module
Vokabular
Vocabulary
Tipps & Tricks
Tips & Tricks
Ergänzendes
Additional stuff
Demos
Demos
Spiele
Games
Zeitschriften
Magazines
Sprach Downloads
Speech Downloads
Lexikon
Lexicon
Internes
Internal
Hardware
Hardware
Firmware
Firmware
Sprachdaten
Speechdata
Bit-Format
Bit allocation
De-/Codierung
De-/Coding
Nützliches und mehr
Utilities and more
Speech Playtool Magic Game Cart Magic Talkie Magic Voice NT Ersatzteile & Reparatur
Spares & Repair


Um das Magic Voice Modul zum sprechen zu bringen, genügt es den BASIC Befehl SAY zu verwenden. Das Magic Voice kann mit BASIC und Assembler programmiert werden.
To make the Magic Voice module talking, it is sufficient to use the BASIC command SAY. The Magic Voice can be programmed using BASIC and assembly language.


Bedienungsanleitung - Operating Manual

Die Original Bedienungsanleitung als pdf-Dokument. Nach dem Einscannen wurden in der Nachbearbeitung verschiedene Tippfehler korrigiert.

Bedienungsanleitung zum herunterladen:
The orignal operating manual as pdf-document. After scanning there have been corrected several typos in the postprocessing.

User Manual for Download:

Handbuch - Manual MagicVoiceSpeechModule_Manual.zip
.zip 5330 KB / .pdf 5459 KB


Revision 20110827

Quellen im Internet: Internet sources:

 1. http://web.inter.nl.net/hcc/davies/mvmanual.html External Link (HTML-Version)
 2. http://www.cubic.org/~doj/c64/magic.html External Link (HTML-Version, etwas besser aufbereitet, und mit ERRATA SHEET)
 3. http://project64.ath.cx/hw/magicvoice.txt External Link (TEXT-Version, Project64)
 4. https://www.retro-commodore.eu/2020/12/28/magic-voice-speech-module/ External Link (PDF-Version (OCR scanned) and TEXT-Version)

BASIC

Das Magic Voice stellt vier zusätzliche BASIC-Befehle zur Verfügung: SAY, RATE, VOC und RDY.

Befehlsbeschreibung:
The Magic voice provides four additional BASIC commands: SAY, RATE, VOC and RDY.

Commands and their description:

 SAY
Dieser Befehl veranlasst das Magic Voice Modul, ein Wort zu sprechen. Dem SAY-Befehl muss entweder das zu sprechende Wort in Anführungszeichen oder die Wortnummer folgen. This command causes the Magic Voice module to speak a word. Following to the SAY command must be either the spoken word in quotation marks or the word number.

Beispiel - Example:

 SAY "HI"   Das Modul sagt "HI" - The Module says "HI"
 SAY 154    Die Wortnummer 154 entspricht dem Wort "HI" - The word number 154 corresponds to the word "HI"


 RATE
Mit diesem Befehl kann die Sprechgeschwindigkeit in 10 Stufen eingestellt werden. Dies ist hilfreich, um eine natürlicher klingende Sprache zu erzeugen. Dem RATE-Befehl muss eine Zahl zwischen 1 (schnell) und 10 (langsam) folgen. Der Standardwert ist 4. Die folgende Tabelle zeigt die 10 verfügbaren Geschwindigkeiten und den Faktor um den sich die Standardgeschwindigkeit ändert. With this command the speech speed can be changed in 10 steps. This is helpful to provide more natural sounding speech. Following to the RATE command there must be a number between 1 (fast) and 10 (slow). The default value is 4. The following table shows the 10 available speeds, and the factor by which the standard rate changes.

RATE 1 2 3 4 5 6 7 8 9 10
Faktor
(laut Datenblatt
according to datasheet)

0,7

0,8

0,9

1,0

1,1

1,2

1,3

1,4

1,5

1,55
Faktor
(laut Handbuch
according to manual)

0,65

1,0

1,4
Speech speed
(laut Entwickler
according to developer)

- 30 %

100 %

+ 50/55 %
Compression/Expansion Coefficient
(U.S. Patent 4163120, July 1979)
Table B

0,755

0,844

0,918

1,00

1,09

1,18

1,29

1,40

-

-

Beispiel - Example:

 RATE 1
 SAY "COMMAND"
 SAY "ER"
 SAY "OF"
 SAY "COMPUTER"
 SAY "SSSS"
 RATE 4


 VOC
Mit diesem Befehl wird dem Sprachmodul die Verfügbarkeit eines erweiterten Vokabulars mitgeteilt. Das Vokabular kann von einer Diskette oder Kassette geladen werden. Der Befehl wird nur benötigt, wenn zusätzliches Vokabular in den Speicher geladen wurde. This command alerts the speech module to the presence of an extended vocabulary loaded into the system memory. This vocabulary might come from optional disks or cassettes. This command is only needed when additional vocabulary data has been loaded into memory.

Beispiel - Example:

 LOAD"VOCABULARY.PRG",8,1   Laden eines Vokabulars, zum Beispiel nach Adresse 24576 - Loading of an vocabulary, for example to address 24576
 VOC(24576)                 Mitteilung an das Sprachmodul und Übergabe der Startadresse - Notification to the Speech Module and handover of the start address

 SAY 256                    Spricht das erste Wort (0+256) des neuen Vokabulars - Says the first word (0+256) of the new vocabulary


 RDY
Dies ist eine logische Funktion und dient zur Rückmeldung wenn die Sprache vollständig ausgegeben wurde. RDY ist "TRUE" (wahr), wenn die Sprache vollständig ausgegeben wurde, und "FALSE" (falsch), wenn das Modul noch spricht. This is a logical function which returns the value TRUE if the magic voice is ready to accept another SAY command and FLASE if not.

Beispiel - Example:

 10 IF NOT RDY THEN 10
 20 SAY "HI"

Hinweis - Note:

Im Handbuch wird angegeben, dass RDY auch dazu verwendet werden kann, das vorhanden sein des Moduls festzustellen.
RDY = 0 wenn Modul nicht vorhanden und RDY = -1 wenn das Modul vorhanden ist.
Diese Abfrage funktioniert nicht!
Stattdessen kann man folgende Abfrage durchführen:
The manual indicates that RDY can also be used to determine the existence of the module.
RDY = 0 if the module is not present and RDY = -1 if the module is present.
This query will not work!
A correct way to detect the presence of a Magic Voice while using a basic program is as follows:

 10 REM TEST OB DAS MODUL VORHANDEN IST
 20 IF PEEK(49176) <> 234 THEN GOTO 100:REM $C018 $EA NOP
 30 IF PEEK(49177) <> 234 THEN GOTO 100:REM $C019 $EA NOP
 40 IF PEEK(49178) <>  96 THEN GOTO 100:REM $C01A $60 RTS
 50 REM AB HIER PROGRAMMCODE DER DAS MODUL BENUTZT
 60 SAY 1:SAY 2:SAY 3
 80 GOTO 200
 100 REM PROGRAMMCODE FALLS KEIN MODUL VORHANDEN IST
 110 PRINT"DAS MAGIC VOICE MODUL IST NICHT VORHANDEN"
 200 END


 DATA
Neben SAY, RATE, VOC und RDY ist im Magic Voice Modul auch der DATA Befehl definiert, inwieweit dieser eine andere/erweiterte Funktion hat, ist noch unerforscht. In addition to SAY, RATE, VOC, and RDY, the Magic Voice module also defines the DATA command; the extent to which this command has a different or expanded function has not yet been investigated.


Fehlermeldungen:

Das Magic Voice Modul erkennt und informiert den Anwender mit folgenden BASIC-Fehlermeldungen:

Error Messages:

The Magic Voice detects and informs the user of certain kinds of errors that it detects:

ILLEGAL QUANTITY ERROR
Wenn man den SAY Befehl mit einem Wort verwendet, das nicht im Wortschatz enthalten ist.

When the user tries to "SAY" a word that is not in the module's vocabulary.

? TYPE MISMATCH ERROR
Wenn man den Befehlen RATE oder VOC kein numerisches Argument (also eine Zahl) folgen lässt. If the functions RATE or VOC are called with a non-numeric argument.


Assembler

Der Magic Voice enthält eine Sammlung von Routinen, damit Assembler-Programme die Sprachausgabe benutzen können. The Magic Voice includes a collection of routines to allow assembly programs to operate the speech synthesizer.

Benutzerschnittstelle

Der Assembler-Schnittstelle besteht aus Unterprogrammaufrufe, wobei die Argumente in den A, X und Y-Registern übergeben werden.

Wenn möglich, wurden die Prozeduraufrufe so gestaltet, dass sie Benutzerfreundlich sind. Funktionen erfordern außer dem Byte im A-Register des Prozessors kein weiteres Byte. Wenn zwei Bytes benötigt werden, wird das A-Register und das X-Register verwendet. Nur wenn ein Zählwert benötigt wird, wird das Y-Register verwendet.

Die übliche Verwendung der Register ist wie folgt:

A-Register: vollständiger Operand oder Low-Byte, wenn eine Adresse übergeben wird.
X-Register: High-Byte, wenn eine Adresse übergeben wird.
Y-Register: Anzahl (0 bedeutet 256).

Registerwerte bleiben nur erhalten, wie in den detaillierten Beschreibungen unten angegeben.

Es gibt ein separates Unterprogramm für jede der folgenden Funktionen:

$C003 - SRESET - Modul zurücksetzen
$C006 - SPSTAT - Modulstatus ermitteln
$C009 - SAYIT - Sprechen eines Wortes
$C00C - SAYRAM - Sprechen eines Wortes aus dem RAM-Speicher
$C00F - SPEED - Sprechgeschwindigkeit des Sprachsynthesizers einstellen
$C012 - SETTAB - Adresse der Sprach-Nachschlagetabelle festlegen
$C015 - SIGNAL - Vektor (Zeiger) auf Programmcode nach Sprachende aktivieren

Detaillierte Funktionsbeschreibungen und Aufrufspezifikationen sind unten angegeben.
User Interface:

The assembly language interface consists of subroutine calls with the argument passed in the A, X and Y registers.

Where possible, the calling procedures have been designed with ease of use in mind. Functions requiring a single byte except that byte in the processor's A-register. Where two bytes are needed the A-register and the X-register are both used. Only when a count is needed is the Y-register used.

The conventional uses of the registers are as follows:

A-register: complete operand or low byte if an address is passed.
X-register: upper byte if an address is passed.
Y-register: count (0 implies 256).

Registers are preserved only as indicated in the detailed descriptions below.

There is a seperate subroutine for each of the following functions:

$C003 - SRESET - Reset speech module
$C006 - SPSTAT - Get speech module status
$C009 - SAYIT - Say a word
$C00C - SAYRAM - Say a word from RAM
$C00F - SPEED - Set speaking speed of synthesizer
$C012 - SETTAB - Set utterance look up table address
$C015 - SIGNAL - Enable vectoring to completion code

Detailed functional descriptions and calling specifications are provided below.


Assembler Routinen - Assembler routines:

SRESET - Reset The Speech System / Stop Talking
Einsprung - Entry Beschreibung - Description
Adresse - Address $C003 Dieser Befehl setzt die Hardware des Synthesizers zurück. Er sollte zu Initialisierungszwecken in Anwendungsprogramme integriert werden und kann dazu verwendet werden, die Sprachausgabe mitten in einer Äußerung zu unterbrechen.

This command resets the synthesizer hardware. It should be included in applications programs for initialization purposes and may be used to stop speech output in mid-utterance.
Bedingung - Condition Keine - None
Rückgabe - Returned Information
Akkumulator (A-Reg) ist zerstört
Accumulator (A-reg) is destroyed


SPSTAT - Get Status Of Speech Module
Einsprung - Entry Beschreibung - Description
Adresse - Address $C006 Mit diesem Befehl lässt sich feststellen, ob das Sprachmodul vorherige "sayit"-Anfragen bereits abgeschlossen hat und ob eine neue "sayit"-Anfrage sofort bearbeitet werden kann.

This command may be used to determine whether the speech module has completed previous "sayit" requests and whether a new "sayit" request can be handled immediately.
Bedingung - Condition Keine - None
Rückgabe - Returned Information
A-Reg = 0 wenn bereit (Z-Flag = 1)
A-Reg = -1 wenn mit Sprechen beschäftigt (N-Flag = 1)
A-reg = 0 if ready
A-reg = -1 if busy talking

The N and Z bits of the processor status word are set accordingly.


SAYIT - Say A Word
Einsprung - Entry Beschreibung - Description
Adresse - Address $C009 Dieser Befehl löst die Synthese eines Wortes oder einer Phrase aus. Die Steuerung wird fast sofort an das aufrufende Programm zurückgegeben, sofern das Modul nicht bereits spricht. Wenn das Modul gerade spricht, wird die Kontrolle erst zurückgegeben, wenn die aktuelle Anforderung ausgelöst werden kann. Die Wörter mit den Nummern 0 bis 255 befinden sich im Sprachmodul. Die Wörter mit den Nummern 256 (X=$01) bis 4095 (X=$0F) werden so interpretiert, als befänden sie sich im Programmbereich des Benutzers.

Hinweis: Setze Bit 7 im X-Reg, um auf EXROM zuzugreifen.

This command initiated the synthesis of a word or phrase. Control is returned to the calling program almost immediately if the module is not already talking, then control is not already talking. If the module is talking, then control will not be returned until the current request can be initiated. Words number 0 through 255 are words which are in the speech module. Words number 256 (X=$01) through 4095 (X=$0F) are interpreted as located in the user's program space.

Note: Set Bit 7 in X-Reg to access EXROM.
Bedingung - Condition A-Reg = niederwertiger Teil der Wortnummer
X-Reg = höherwertiger Teil der Wortnummer
A-reg = least significant portion of the word number
X-reg = most significant portion of the word number
Rückgabe - Returned Information
Alle Register zerstört
All registers destroyed

CAUTION: Special care should be taken to ensure that no other process in the system that generates NMI's is active when the calls to the speech synthsizer are made. This includes the RS-232 channel and the serial bus devices. The RS-232 channel is the only channel which must be actually be CLOSED. The serial bus channels may be open and may be left opened, but must not actively transmit data. It is recommended that programs which wish to perform series use I/O check, via SPSTAT to ensure that speech output is complete before initiating the operations.


SAYRAM - Say A Word From RAM
Einsprung - Entry Beschreibung - Description
Adresse - Address $C00C Diese Anweisung ähnelt dem Befehl "SAYIT", mit dem Unterschied, dass die Struktur, die den Zugriff über das Speicherabbildungssystem ermöglicht, umgangen wird. Dieser Einstiegspunkt dient dazu, die Sprachausgabe aus im RAM gespeicherten Sprachdaten zu ermöglichen. Dies kann auch nützlich sein, wenn RAM-Versionen von Wörtern programmgesteuert geändert werden.

This command is similar to the "SAYIT" except that the structure permitting access through the memory mapping system is bypassed. This entry point is intented to permit generation of speech from RAM based speech data. This may also be useful if RAM versions of words are modified under program control.
Bedingung - Condition A-Reg = niederwertiger Teil der Wortnummer
X-Reg = höherwertiger Teil der Wortnummer
A-reg = least significant portion of the word number
X-reg = most significant portion of the word number
Rückgabe - Returned Information
Alle Register zerstört
All registers destroyed

Speech is generated as in the SAYIT command above. Utterances 0...255 are taken from the on-board vocabulary and utterances 256..4095 are taken from memory as established by the SETTAB routine. No mapping is performed. Speech data is taken directly from the program's address space.

Note: See caution under SAYIT above.


SPEED - Set Speaking Speed Of Synthesizer
Einsprung - Entry Beschreibung - Description
Adresse - Address $C00F Mit der Funktion "SPEED" lässt sich die Sprechgeschwindigkeit des Sprachsynthesizers beschleunigen oder verlangsamen. Der Bereich der Geschwindigkeitsänderungen reicht von einer Verlangsamung um das 0,64-Fache (Geschwindigkeitscode = 1) bis zu einer Beschleunigung um das 1,4-Fache (Geschwindigkeitscode = 10). Die normale Geschwindigkeit entspricht dem Code 4.

The SPEED capability is used to speed up or slow down the speaking rate of the synthesizer. The range of speed variations is from .64X decrease in the speed (speed code = 1) to a 1.4X increase (speed code = 10). Normal speed is code 4.
Bedingung - Condition A-Reg = Geschwindigkeitscode von 1..10
A-reg = desired speed code from 1..10
Rückgabe - Returned Information
Kein Register beeinflusst
No register affected


SETTAB - Set Utterance Look Up Table Address
Einsprung - Entry Beschreibung - Description
Adresse - Address $C012 Die SETTAB-Funktion (setze Tabelle) dient dazu, dem Sprachmodul die Startspeicheradresse der vom Benutzer bereitgestellten Sprachdaten mitzuteilen. Sie entspricht dem BASIC-VOC-Befehl. Dieser Befehl MUSS vor jedem Versuch, Sprache mit Äußerungsnummern über 255 zu erzeugen, ausgeführt werden.

The SETTAB function is used to tell the speech module the starting memory address of user supplied speech data. It is identical to the BASIC VOC command. This command MUST be employed prior to any attempts to generate speech with utterance numbers greater than 255.
Bedingung - Condition A-Reg = niederwertiges Byte der Adresse
X-Reg = höherwertiges Byte der Adresse
A-reg = lower byte of address
X-reg = upper byte of address
Rückgabe - Returned Information
Keine - None


SIGNAL - Enable Vectoring To Completion Code
Einsprung - Entry Beschreibung - Description
Adresse - Address $C015 Diese Funktion dient zur Unterstützung fortgeschrittener Anwendungen, die asynchrone, ereignisgesteuerte Programmiertechniken implementieren. Der SIGNAL-Aufruf bewirkt, dass ein vom sprechenden Prozess verwaltetes Zähl-Semaphor (Variable) um eins erhöht wird. Auf dieses Semaphor wartet die Sprachabschlussroutine, die bei Signalisierung zur Adresse des Abschlusscode-Vektors ($C018) springt. Benutzer sollten in den drei Byte Speicher, die bei dieser Adresse beginnen, eine JMP-Anweisung einfügen. NUR $C018-$C01A SOLLTEN GEÄNDERT WERDEN.

This function is for support of advanced applications which implement asynchronous event driven programming techniques. The effect of the SIGNAL call is to increment a counting semaphore maintained by the talking process. This semaphore is waited on by the speech completion, which when signalled, will jump to the completion code vector address ($C018). Users should plant a JMP intruction in the three bytes of memory starting at this address. ONLY $C018-$C01A SHOULD BE CHANGED.
Bedingung - Condition JMP Befehl ...
JMP instruction to completion code handling routine MUST be planted in memory locations $C018-$C01A
Rückgabe - Returned Information
Keine - None

This JMP instuction should point into user code which handles the completion of the speeech output event. The user completion routine MUST terminate with an RTS instruction. Completion code handlers may be used for a variety of purposes but, in general, should be kept short since IRQ's are disabled and NMI's are ignored during this time.

NOTE: This facility also provides a means for user programs to detect the presence or absence of a speech module: a power-up footprint. The completor code vector area ($C018-$C01A) is initialized on power-up to the instruction sequence:
$C018 NOP
$C019 NOP
$C01A RTS

These instructions correspond to the values $EA, $EA, $60. User programs may detect the presence of a module by verifying that these locations contain the given values.


Nach oben zum Menü - Go top to menu
Copyright © 2006-2026 Stefan Uhlmann - Aktualisiert: 04. September 2026 - Valid HTML 4.01!