2011年11月19日

音声+ジョイスティック基板

 現在、動作している音声+ジョイスティック基板の情報です。


 !注意! 実践するなら、自己責任で行ってください(質問などはして頂いても構いませんが)。


  音声回路、ジョイスティック回路は、次の通りです。


音声回路(アンプ付き)


ジョイスティック回路


  両方とも特殊な事はしていません。

  実装した基板がコレです。

音声基板表


音声基板裏


  音声回路は、LPFだけだと音声が小さいので、LM386 で増幅しました。

  部品も特殊なものはありません。VR は、B型でも構いませんが、A型の方が使いやすいはずです。

  スピーカーで聞いている分にはほとんど気になりませんが、イヤホンで大音量で聞くと小さいノイズが聞こえます。



  ジョイスティック回路は、FPGAの方で制御するので、接続のみです。

  ただし、FPGA が、5V で入出力できないので、既存のジョイスティックで使用できないものがあるかと思います。
  例えば、連射機能があるものなどで、3.3V 動作しないIC を使っているものなどは使えません。

  どうしても使う場合は、3.3V <=> 5V の変換を行ってください。

  この時、ジョイスティックの6,7 ピンは、入力以外に出力も行うことがありますので、注意が必要です。
  また、8 ピンは、出力専用です。


  ちなみに、PC-6001 のBASICでサポートされているジョイスティック以外にも、


 ・FM-TONWS 用JOY-PAD
  4方向と、A、Bボタン、RUN、SELECTボタン

  XPD-1LR (リブルラブル、クレージークライマーなど対応)
  4方向×2、A、Bボタン


  も動作することを確認しました。



  通常の2ボタンは、0x1CA6 をコールするだけでOKです。

  Aレジスタ= [ "1" , "1" , Bボタン , Aボタン , 右 , 左 , 下 , 上 ]

  が返ってきます。



  TOWNS の JOY-PAD のRUN、SELECT ボタンは、押した時に「右、左」「上、下」を同時に押したような回路になっています。
  4方向ボタンで、右と左が同時に押すことは有り得ないので、このようにしているようです。


  XPD-1LR は、パッドの中に74HC157(セレクタ)が入っています。
  セレクト信号は、ジョイスティックの8 ピンに接続されていますので、この信号をH/L を切り替えることで、右か左のどちらの4方向キーの

値を読み出すかを切り替えられます。

  実際には、AY-3-8910 のポートB に次の値を出力します。

 ・パッド1の左の方向キーの読み出し:"01000000"
 ・パッド1の右の方向キーの読み出し:"01010000"
 ・パッド2の左の方向キーの読み出し:"00000000"
 ・パッド2の右の方向キーの読み出し:"00100000"



  上記2つのパッドは...P6 で対応しているソフトはなさそうです。


posted by えすび at 13:18| Comment(0) | FPGA化:音声周り | このブログの読者になる | 更新情報をチェックする

2011年10月25日

音声出力の設計(1)

 次は音声出力だー、という事で、AY-3-8910 の実装をしました。

 AY-3-8910 のデータシートは、いろいろ探すとありますが、細かい情報がここにありました。

 http://d4.princess.ne.jp/msx/psg/


 YM2149 の情報ですが、基本的にコンパチのPSG です(MSX で使われていたようです)。


 音声のデジタルデータまでは作れますが、ここからスピーカーを鳴らすのは D/A 変換が必要になります。
 Xilinx の評価ボードで、オーディオ出力をしているものがありましたので、それを参考にしました。

 D/A は、デルタシグマD/A を使います(Xilinx の xapp154.pdf を参照)。また、外部にローパスフィルタを接続しました。

フィルタ回路


 xapp154.pdf には、違う値が書いているんですが、手持ちの部品がなかったため、適当に変えてしまいました(^^;

 一応、値の選定として、フィルタの計算は、以下のHPを使いました。

 http://sim.okawa-denshi.jp/Fkeisan.htm

 カットオフ周波数は 7KHz ほどなので、このくらいでいいかと。
 また、直列の抵抗値は、ベタHになった時にも問題がないかなー、ということで。


 実際に作った回路です。

音声出力回路

 DE0 のボードの上に乗っている小さな基板がそれです(奥の赤いのが、PC-6601SR本体です)。


 外付け回路が出来たので、後はAY-3-8910 を実装するだけです。


 AY-3-8910 のデータシートにかなり詳しく動作が書かれているので、その通りに実装するだけで、あっけなく音声が出力されました。
 データシートに書かれていない内容(実際に出力する電圧だとか、ノイズの生成多項式など)に関しては、上のHP を参考にしました。


 それぞれ個々の音声に関しては実装が簡単に出来るのですが、それを同時に出力する時の事がよく分からなかったので、実機を参考にしました。

 実機を参考にした結果、分かったのは次の通りです。

・1チャネルで、音声とノイズを両方発生させると、個々の音量が減る。
 例えば、SOUND 0,0:SOUND 1,0:SOUND 6,0 としておいて、TONE-A を発生、ノイズを最高周波数(殆ど聞こえない)としておく。
 それからSOUND 7,&HFE とすると、TONE-A だけが鳴るが、その後にSOUND 7,&HF6 とすると、TONE-A の音量が小さくなる。

 → 多分、TONE とノイズの合計値が、最大値になっているようだ。

・1チャネルを鳴らした時と、3チャネルを同時に鳴らした時の、それぞれのチャネルの音量は変わらない。

 → これは、AY-3-8910 で出力信号を直結していることからも、この結果は正しそうである。



 実際の音声はここには載せませんが、動かしたソフトは実機と同じような音が鳴っています(ちょっとびっくりです)。


 いろいろと試しましたが、今の所、問題があるのはポリス&ギャングだけです。

 ポリス&ギャングは、主メロディーと効果音のバランスが、実機とかなり違います。何となく原因に心当たりはありますが。


posted by えすび at 12:35| Comment(0) | FPGA化:音声周り | このブログの読者になる | 更新情報をチェックする