ディスクシステムローダー(セーバー)の準備 その2

  • 2013/01/01(火) 13:28:06

あけましておめでとうございます。
大晦日にやっていたことをちょっと報告。

で、まずはどんな信号が出ているか調べてみました。
まず、ディスクシステムのピンアサインから。

こういう感じで見たとき、昔のバッ活で書いてあったピンアサインになります。

一応、NESDevにある、「Famicom Disk System technical reference」とあわせて対応を書くと、

1 -WriteGate
2 5V
3 -MOTOR(-ScanMedia)
4 GND
5 -WriteData
6 BatterySence
7 -WritetableMedia
8 VCC Out
9 ReadData
10 -MediaSet
11 -Ready
12 -Reset(-StopMotor)
こんな感じになります。
ただ、これでは信号が扱いにくいので、RAMアダプター側からケーブルをもらってきて、



その先のピンで調べました。
#「Famicom Disk System technical reference」に後でみたら書いてあったけど。
1ピン←         →12ピン
です。
で、そのピンでの信号を調べると、
1(brown) GND RtoD
  NC  
3(orange) -WriteData RtoD
4(yellow) ReadData DtoR
5(green) -WriteGate RtoD
6(blue) -MOTOR(-ScanMedia) RtoD
7(violet) -Reset(-StopMotor) RtoD
8(grey) -WritableMedia DtoR
9(white) -Ready DtoR
10(black) -MediaSet DtoR
11(pink) BatterySence DtoR
12(cyan) 5V RtoD
こんな感じ。RtoDとかDtoRは信号方向です。(Drive、RAMアダプターって意味)


このように強引に信号を取り出して、動作を確認してみました。

続きを読む

ディスクシステムローダー(セーバー)の準備

  • 2012/12/30(日) 17:39:41

なんか、凄く昔(暑かったころ)の話をいまさらやってます。

で、どういうことをしたいかというと、ディスクシステムからのRDデータをそのままタイムカウントしてあげて、すべてのビット変化時間を記録するというもの。

前にもちょっと書きましたが、96.4KHzのクロック動作するディスクシステムなので1クロックがおおよそ10.37us程度です。
MFM変調されているので、

Clock ----____----____----____----____----____----____----____----____----____

Data ----------------________________________--------________----------------
1 1 0 0 0 1 0 1 1
C/D |C |D |C |D |C |D |C |D |C |D |C |D |C |D |C |D |C |D |
Disk ____-_______-___________-_______-___________-_______________-_______-___

上から、ベースのクロック(96.4KHz)、ビットとしてのデータ(0か1)、MFM方式のクロックウィンドウの間隔とデータウィンドウの間隔(大体です)、実際のRDからの出力の順であらわしてみました。
で、要するに、一番下のRDのビットが立ち上がったところから次の立ち上がりまでの時間を計測してそれをどんどんデータにしていく必要があります。
ベースクロックから考えると、最小で10.37us、その次に長いのが、1.5倍で15.5us程度、最長のもので20.74usになります。

で、まず考えたのが、FT245RLをUSBで接続してパラレルでデータをやり取りするもの。
これだとD2XXでBitBangで制御すれば理論的には1Mbyte/s程度のデータ入出力が可能ということでした。で、1Mbyte/sでも使用するピンはRDの入力1ピンの変化を見ていくだけ。
ですので、どっちにしても1Mbits/secの能力です。
ってことは、データの取りこぼしが無く良好に制御できたとしても、10^-6sec=1us程度の分解能しかありません。下手をすると上記の速度さえ間に合わないということに。
これではまったく速度が足りないということが判り、Windowsなどから直接データをサンプリングするのは危険だという結論になりました。

考えたのがAVRのタイマを使ってきちんと測定し、その間隔のデータをwindows機へ送信する形で設計する方向とします。

で、結局どの程度の分解能をもたせるか?ということから考えました。
ちなみに立ち上がっているビットの長さは1us程度で意味はあまりありません。
なぜならディスクはそのエッジトリガによってデータを扱うからで、エッジとしてパルスが出ていればその長さには意味がありません。
ディスクシステムからの出力は5Vですので、AVRも5Vで使用することにしました。最近の一般的なものであれば、オーバークロックも可能ですが、とりあえず定格の20Mhzで動作させます。
すると最大の分解能は1/20Msecなので、50nsecになります。
で、50nsecの分解能で上記の間隔をデータ化する、10.37us=207カウント、15.5us=310カウント、20.74us=415カウントになり、16ビットカウンタでインプットキャプチャを利用すればデータ化は問題ないと考えました。

しかし、それを実装する上でさらに問題が発生。
カウンタとしてデータは取れるのですが、1つのデータは2バイト長になってしまい、10.37usのデータが連続した場合、200Kbyte/sec程度のデータ通信速度が必要です。
USB2.0なら大丈夫ですが、問題はAVR側の方でした。
USARTとかでいいかなと思っていましたが、理論値の最高でも2Mbps程度ですので、ぎりぎりです。

で、一つの方法として、分解能を落としてみます。
50nsecでのサンプリングをやめて、プリスケーラを1/8にて400nsecでのサンプリングにします。
これだと当然すべてのカウントが256未満になりますので、1データ辺り1バイト長になりますので、半分の転送速度でOKです。
もしくはタイマーのクロック別なカウンターで生成して、もうちょっと分解能を上げ(100nsec程度)ても1バイト長になりますので、このほうがいいかなと思っています。
で、この状態でも200Kbyte/sec程度の速度が必要でした。
FT232RLでは最大460kbps程度でまったく間に合いません。

結局いろいろ探していると、FT232Hなるものが!
おおっ!まさしくこれです。
高速なFIFOとかもあるし、いろいろできそうですが、USART以外でAVRにあるインターフェースで高速なものは後はSPIインターフェースです。
これがあればUSB-SPIとして通信できますよ。
FT232H側がSPIのマスターになるので、AVR側はスレーブですが、スレーブでもマスタークロックの1/4で通信できるので、5Mbits/secつまり600Kbyte/sec程度はいけるのか?ということのようです。

こんな妄想を繰り返し、パーツを集めて今年が終わりました。
皆様良いお年を。
では〜

PC-9821でHxCを使う

  • 2012/11/11(日) 00:05:14

時々問い合わせが来るのですが、PC-9821を所有していないので今まであまり気にしていませんでした。
知り合いからPC-9821をお借りすることができたのと、ひょんな事からもう2台

手に入ったので、これで使用できるかやってみました。
現役でPC-9821は使用していなかったので、まずFDDがどんなものか全くわからない状態からスタートという有様。

エマティ・なにわさんの「エマティなリサイクル」をかなり参考にさせていただきました。
というかここを見ればわかると思います。
とりあえず、VFOはFDD側に必要ないということがわかりました。

さっそくやってみます。

続きを読む

ゲームギアのRGB化(回路図間違ってましたorz)

  • 2012/11/03(土) 10:42:06

というわけで、回路図間違ってましたorz

というのも、後3台ほどゲームギアがあるので、この際基板を作って全部作ってしまおうとおもったら、なんか変ということに気づきましたorz。

できた基板はこんな感じ。

左のAttiny2313はこの前作ったメガドラのパッド変換です。

作る人いないと思うけど、パターンはこれ

片面基板として作りました。copperはなしになっています。
3段がさねとか2段がさねは判りますよね?
#「これ」のところでpdfになっているパターンが出ます。

正しい回路図はこちらです。D0-3が間違っていました。

あと、やっぱり2ASICの方がノイズが多いですね。マメにパスコン入れたほうがいいですが基板に追加するスペースがないので、ジャンパ気味に取り付けました。

では〜。

メガドライブ6ボタンパッドのパラレル出力化

  • 2012/10/17(水) 23:32:01

ゲームギアのRGB化に伴って、以前はセガサターンパッドを接続できるように改造しましたが、今回はメガドライブのパッドを接続できるようにしました。

メガドライブは3ボタンも6ボタンも内部的にはセレクト信号がL、Hで出力されるデータが異なっているようでした。
詳細はApplauseこと寺川 愛印のこちらのサイトに公開されておられる「セガ メガドライブ 6ボタンパッドの読み取り方」を参考にさせていただきました。

で、この信号を変換してそれぞれ個別のボタン押下に対応できるようにATtiny2313で作成したのがこちら。


動作はこんな感じ

出力を変換できます。
3ボタンのパッドでも動作します。
残念ながらATtiny2313が20pinで入出力に使用できるピン数がリセットを無効にしても18ピンしかないので、modeスイッチだけは使用できません。

以下、コードなどを置いておきます。

続きを読む