どうも uPD7752 の使い方に関する解説はほとんど知られていないようで、TALK文以外の使い方をしている人は皆無だと思います。
資料としては、
・NEC技報1981年10月号
・uPD7752 データシート
ぐらいしかなさそうです。
また、BASIC のTALK文の解析は、
・Oh!PC 1985年1月号
で、多少詳しく解析されています(ただし、この記事は、uPD7752 の仕様を知らずに解析しているようです)。
アクセスは、I/O ポートの0xE0〜0xE3 を使います。
○0xE0:リード:ステータス読み出し
(0xE0〜0xE3 のどれを読み出しても同じ)
bit7:BUSY
bit6:REQ
bit5:nINT/EXT
bit4:Error
bit3-0:"0"
BUSY が"1" の時は、音声データを出力している時(uPD7752が動作している時)です。
REQ が"1" の時は、ホルマントデータの入力を要求している時です。
nINT/EXT は、"0" 時:内部ROMデータ、"1" 時:外部データで音声を再生している事を示します。
Error は、
・REQ が"0" の時に、ホルマントデータを書き込まれた
・REQ が"1" になってから、所定時間以内に、ホルマントデータが書き込まれなかった。
時に、"1" にセットされます。
・uPD7752 がリセットされた。
・新しいコマンドが書き込まれた。
時に、"0" にリセットされます。
○0xE0:ライト:ホルマントデータ書き込み
ややこしいので後ほど。
○0xE1:ライト:禁止(未使用)
このポートは使えません。
○0xE2:ライト:モード書き込み
動作する速度を設定します。
bit2: "0"時、10ms/frame、"1"時、20ms/frame です。
bit1-0:
"00"時、Normal speed
"01"時、Slow(×1.2)
"10"時、Fast(×0.8)
"11"時、Disable となります。
bit7-3:未使用
○0xE3:ライト:コマンド書き込み
"11111111" 時、音声合成を停止します。
"11111110" 時、ホルマントデータを外部データにします。
それ以外は、全て内部ROMデータになります。
bit5-0: 内部ROMデータの番号(0-63)
bit7-6:未使用
P6では、内部ROMデータは、0-4 しか実装されていないようです。
使い方としては、
・内部ROMデータを使う場合
1)0xE2 に出力し、速度を設定する。
2)0xE3 に再生するROM番号を出力し、音声を再生する。
・外部データを使う場合
1)0xE2 に出力し、速度を設定する。
2)0xE3 に 0xFE を出力し、外部データを選択する。
3)0xE0 のbit6 を確認し、"1" になっていたら、ホルマントデータを1バイト書き込む。
4)出力すべきホルマントデータがなくなるまで、3)に戻る。
内部ROMデータを使う場合は、すごく簡単です。
外部データを使う場合は、常に REQ になっているかを監視する必要があるので、ちょっと面倒です。
REQ が"1" になってから、所定時間以内にデータをセットしないとエラーになるので、注意が必要です。
BASIC の TALK文では、REQ をずっと監視し続けるために、他の処理が出来ないようになっています。