実機の動作保全も必要でした・・ その3

メガCDバックアップ用ダンパーの制作(2020/7/20~2020/8/9)

その2

1.回路図と基本方針

Arduino Pro Microを利用する前提として、メガCD側から読みだしたデータはUSB経由でPCに転送する必要があります。

デフォルトで実装している通信手段としてはUSB Serial(UART)通信があり、Tera Termなどのターミナルソフトと通信することが可能です。 特別な通信ドライバもハードの追加も必要ないため、まずはシリアルコンソールでASCIIベースの通信を利用するのが良さそうです。

○基本方針
(1)Arduino Pro MicroとホストPCとの通信はUSB Serial(UART)を利用する。
(2)ターミナルソフトにASCII文字列でデータを送付してバイナリに変換する。
まずは、こんな所でしょうか。

○配線図
ダンパーの配線図です。
5Vを使わない点と、スケッチ書き換え用にリセットスイッチを設けた以外は、ジョイスティック用の回路そのままです。


○部品一覧
 (1)Arduino Pro Micro互換モジュール
 (2)ブレッドボード
 (3)D-SUB 9P(メス)ソケット
 (4)静音タクトスイッチ(6個入)
後は線材少々と、ハンダこてやニッパ等の道具類です。


2.最初の作成(失敗編)

まずはサラっと作ってみました。

しかし、メガドライブに接続しようとしていきなり躓きました。 DSUB-9ソケットの固定具が干渉してメガドライブに装着できません。

そこで以下のように固定具の片側を金切りバサミでカットして、本体にセットできる ようにしてみました。

この状態でメガCD側でSega Loaderを実行してBIOSのダンプを試みましたが、やはりNG(ERR変化が拾えない)でした。

その後、スケッチの制御ロジックにミスがあったのを直したり、色々手を尽くしてみたのですが、 読出しが止まったりデータが化けたりと安定しない状況が続きました。

データ化けは明らかにDSUB-9ソケットとメガドライブ側との接続が甘いせいと思われるため、 いったん市販のDSUB-9ソケットの利用はあきらめ、手持ちのメガドライブ用パッド(メガブラスター)をバラして接続ケーブルを流用してみることにしました。

メガブラスターを分解してケーブルソケットを抜いて流用。

こんな感じでメガドライブ側と接続します。

これでメガCD側でSega Loaderを実行してBIOSのダンプを試みたところ、かなりマシな動作になりました。 が、やはりたまに(数Kbyteに1回程度)化けたり、ダンプが止まったりと安定しません。

同じBIOSデータを読み出した結果を何度も見比べていたところ、特定のタイミングで下位データが化ける(0になる)事が判明。 しかもその後、ERRステータス読出しが失敗する(メガCD側と同期がとれなくなる)事象が発生する。 うーん・・。と言う所でピンと来ました。

ALF(Auto Line Feed)=Highを出力後、メガCD側のアドレス切替とERR信号の変化(Lo→High)を待つのですが、 このERR変化がかなりシビアなタイミングのため、読みこぼしが発生してメガCD側との同期がズレてしまうようでした。

PINDでERRを読み出す際に変数にデータをコピーしてから比較チェックしていたのですがそれだと遅いし、 何よりシリアル通信割り込みが入るとダメだと判明。

冗長なコードを省いてダンプデータの読出し中は割込み禁止にした所、奇麗に読み出せるようになりました。

ひとまず安定したダンプデータの読出しが可能となったため、メガCDのBIOSをダンプしてエミュレーターで動作するか確認してみました。

○ダンプデータ(抜粋)


○Kega Fusionでの実行
全く問題なく動きました。

メガCDゲームもOK


■動作したスケッチ(シンプルHEX版)
 シンプルなHEX形式でダンプします。Tera Termのログ機能でASCII形式で保存して後でコマンドライン指定(certutil)でバイナリ形式に変換します。(利用法はスケッチに記載)


○スケッチの書き込み/動作確認
Arduino IDEで「ファイル」→「新規ファイル」で新規スケッチを開いて、上記のスケッチを全て貼り付けます。

マイコンが認識していることを確認したら、「マイコンボードに書き込む」をクリックしてコンパイル・書き込みを実行します。


3.XMODEM通信利用で高速化

ASCII HEX形式でダンプデータが読み出せるようになったのでROMカセット等のダンプを開始したのですが、 本数を重ねるごとに、バイナリ変換の手間の面倒さと、何より転送が遅い事が気になるようになってきました。

元々1バイトづつ読み出す仕様なので、転送速度がある程度遅いのは仕方のない事ですがASCII形式だと1バイト毎に3バイトの送信が必要になり、 思っていたより遅く感じます。と言うことでバイナリファイルをそのまま送る手段を検討しました。

ターミナルソフトTera Termでサポートしている転送プロトコルでかつ、 メジャーなものと言えば、XMODEMです。

古くはDOS時代のパソコン通信から活躍している通信プロトコルなので、あらゆるOS上のターミナルソフトに実装されており、 それだけでもサポートするメリットはありそうです。

1パケット128バイト区切りの通信とはいえ通信速度もASCII HEX形式と比較して2倍以上の高速化が期待できます。 シンプルな通信仕様なので、先ほどのスケッチに追加する形で実装してみました。

○参考にさせて頂いたページです(感謝いたします)
XMODEM についてのメモ ssuzukiの日記
2.1 XMODEM 通信プロトコルの仕様

■作成したスケッチ(XMODEM通信対応版)
XMODEM通信対応スケッチです。 Tera TermのXMODEM受信で直接バイナリファイルに保存できます。

スケッチファイルのダウンロードやコピーなどの利用はこちらからどうぞ)

○スケッチの書き込み/動作確認
Arduino IDEで「ファイル」→「新規ファイル」で新規スケッチを開いて、上記のスケッチを全て貼り付けます。

マイコンが認識していることを確認したら、「マイコンボードに書き込む」をクリックしてコンパイル・書き込みを実行します。


4.XMODEM通信対応版スケッチの使い方

XMODEM版の使い方(MEGA CD BIOSダンプ方法)を説明します。
(1)まず、メガCDにSega LoaderのCD-Rを入れて実行します。


(2)Sega Loaderが起動したら「DUMP BIN」を選択してSTARTボタンを押下します。


(3)自作のダンパーをメガCDの2Pポートに接続。次にUSB経由でホストPCと接続します。


(4)ホストPC側でTera Termを起動して、通信設定をします。
「Setup」⇒「Terminal..」
 この設定は特に変更しないで良いはずです。


「Setup」⇒「Serial port..」
 通信速度は115200BPS。Portはダンパーを接続すると新たに追加されるポートを指定します。


「Serial port..」の設定が完了するとTera Termコンソールにメッセージが表示されます。 ここまで完了したら「Save setup..」でTera Termの設定を保存しておくと次から楽です。


(5)メガCD側のCart Dumpメニューから「CD bios」を選択してSTARTボタンを押下するとダンプが開始されます。

(6)ホストPC側のコンソールにダンプサイズとXMODEM受信を促すメッセージ
「Please start receiving XMODEM protocol」が表示されるので、


(7)「File」⇒「Transfer」⇒「XMODEM」⇒「Recieve..」を選択。


(8)ファイル名を入力して「保存」をクリックします。
 (Option指定が「Checksum」になっていることも確認)

ファイルの受信が開始されます。


(9)受信が終了すると「Dump data send finished.」が表示され、次回の受信待ちに遷移します。


(10)ホストPC側にダンプファイルが保存されていれば成功です。


使い方は以上です。


5.制作後記(2020/8/9)

 正直言うと15年(せめて10年)くらい前なら、USB化しなくても良かったなぁと言う感じです。 PCの入手も楽でしょうし、何より中古のゲーム機材(接続ケーブルとか)も状態の良いものが安く入手できたと思います。(全て自業自得ですが・・)

そうは言いつつも、何とかメガCDを修理でき、ダンパーのArduino化を行ったことでOSに依存しないバックアップ環境を構築できた点は、満足しています。

その後、手持ちのゲームカートリッジは32X含め、ほぼ全てダンプできました。


勢ぞろい。(まだまだ出てきそうです・・)


こうなると、次はPCエンジンかなぁ・・


6.おまけ DSUB-9でソケット制作(リベンジ編)(2020/8/2~8/5、8/9)

一度は利用を断念したDSUB-9ソケットですが、メガブラスターのケーブルを流用したままと言うのもマズいので何とか使えるように工夫してみました。


D-SUB 9P(メス)ソケットは入手性も良く、 何より価格が安いのでこれが使えると色々メリットはあると思います。

(1)簡易版
利用が困難だった主な原因は、固定金具によりメガドライブ側のコネクタと密着しにくい点なので、 金切りバサミを使って金具を全て取っ払ってみました。(硬かった!)

金具を取っ払っただけだと、バラけてしまうので、接着剤で固定します。

メガドライブに接続して、ソケットが密着するようにぐぐっと押し込んでやります。

この状態でダンパーを動かすと、きちんとデータがダンプできるようになりました。 やや密着が甘いので奥に押し込んで使う必要があり、かつ少々取り外しに苦労しますが、 作成が容易なので、まずはこれもアリかなと思います。

(2)ハウジング収納版
ソケット端子がむき出しのままだと使いづらいので、ハウジングに格納してみました。 やり方ですが、テーパーリーマーを使って固定具のパンチ穴を広げて固定箇所をなめていくと、金具をきれいに外すことができます。

次に端子を配線してから、ハウジングに収めますが、この時2つに分離した金具のうち、 端子側(コネクタに差し込まない方)の金具を裏返して、 ソケット部と一緒にホットボンド等で固めてやるとがっちり固定できます。


ハウジングに収めると重心が変わるためなのか、メガドライブと密着しづらくなりました。 そういった場合は、ソケットの根もと部分(橙色の箇所)をヤスリかルーターで1mmくらい削ってソケットを延長してやると良い感じです。(右の画像はソケットが1mmくらい長くなってます)

これで奥までソケットが差し込めるようになり、ダンプ時にメガブラスターのケーブルを流用せず済みます。



○その4メガCDバックアップRAMカートリッジ用ダンパーの制作
○その5XMD-2のS端子出力とRGB出力について
○その6メガドライブの音質(CX1034フィルタ回路)改善
○その7メガCDのコンデンサ交換(続き)と32Xメンテナンス実施

○その1メガCDが故障しました
○その2メガCDバックアップ検討
戻る