2012年12月13日

音声合成の設計(2)

  まず、uPD7752 の使い方から。

  どうも 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 をずっと監視し続けるために、他の処理が出来ないようになっています。





posted by えすび at 18:47| Comment(0) | P6解析:音声合成 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。