少し前のことですが、物置を整理しているとこんなものが出てきました。
ゲームボーイです。なつかしいですねぇ。
テトリスのカートリッジが入ったままの状態で出てきました。かなり長い間放置していたにもかかわらず、電池を入れると完動しました。
その後ネットで調べてみると、今でもゲームボーイは結構利用されているようで特に音源として使われることが多いみたいです。C言語による開発環境も整備されていて、フリーのゲームも結構配布されているのには驚きました。
面白そうなのでUbuntuに開発環境を構築してみました。Cコンパイラはこちらのサイトが最終のもののようです。環境の構築については様々なサイトで解説されているので興味ある方は調べてみて下さい。
サンプルプログラムやフリーゲームのソースなどもたくさん公開されているので、色々コンパイルしてみました。コンパイルしたバイナリは、山ほどあるゲームボーイエミュレーターでそのまま実行できます。
自分でも簡単なプログラムをつくって遊んでいたのですが、どうせならエミュレーターでなく実機で動かしたいという気持ちが湧いてきました。しかも、ゲームボーイとPCやワンボードマイコンを接続する記事などがネットに投稿されていたりするので自分でも試してみたくなります。
そこでAmazonでこれを購入しました。
GB USB SMART CARD 64M for GB/GBC/GBA(でもGBAカートリッジとしては使えないよね)というもので、PCとUSB接続してゲームボーイのプログラムを書き込めばゲームボーイカートリッジとして使用できるものです。
購入したときは¥5,220でした。64Mとありますが、これはbitなので8Mバイトの容量ということです。自分でコンパイルしたサンプルやフリーソフトを書き込んでみるときちんと実機で動作しました。
最近のWindowsではUSBデバイスの設定に手間がかかるようですが、書き込みにはWindowsXP環境を利用したのでなんの問題もありませんでした。
これでひとしきり遊んだ後しばらくは放置していたのですが、ふと最近ゲームボーイのシリアル端子にArduinoをつなごうと思い立ちました。ところがゲームボーイのシリアル端子は特殊な形状なので専用のシリアルケーブルが必要です。
そこでいつものようにハードオフのジャンク品売り場で探してみると、ありました!ラッキーなことに一本だけ見つけることが出来ました。ありがたや。
これで必要なものは揃ったので、あとはプログラミングです。ゲームボーイのシリアルについては、こことかここのサイトで詳しく説明してくださっているのですぐに理解できます。プログラムもそれほど難しいものではありませんでした。
今回利用したArduinoは5V動作のPro Miniですが、電圧があえばどの種類のArduinoでも動作すると思います。
ゲームボーイとArduinoの接続は以下のようにしました。
ゲームボーイ端子 → Pro Miniピン
2 TXD → 4
3 RXD → 3
5 CLK → 2
6 GND → GND
スケッチとゲームボーイのCソースはこちらです。
Arduino Pro Miniスケッチ
GBsender.ino
ゲームボーイ
receive.c
ゲームボーイのシリアルは、クロックが発生するごとに1ビットのデータの送信と受信を同時に行うようになっています。クロックはゲームボーイ本体で発生させても外部から供給してもどちらでも構わないようなので、Pro Mini側で発生させました。
動作はPro Miniから0〜255のデータを繰り返し送り続け、ゲームボーイは送られてきたデータに+1して送り返すというものになっています。ゲームボーイは受け取ったデータをキャラクターとして画面に表示し続けます。
こんな感じです。
Pro Miniは受け取ったデータを16進でシリアルプリントし続けます。
ところで、送受信を始めるとなぜかゲームボーイが最初に余計な1ビットを拾ってしまいます。これがノイズ(スタートビット?)なのかなんなのか分かりませんでしたが、消すことが出来ないので送信開始時にPro Miniからダミーの7ビットデータを送って、ゲームボーイ側で1バイトのデータとして受け取らせます。そしてこの1バイトデータを捨てることで、以降のデータを正常に受けられるようにしています。
実際の使用方法ですが、まず初めにゲームボーイの電源を入れて画面にreceiving...と表示されたらシリアル接続されているPro Miniの電源を入れます。するとひたすらデータの送受信を行い続けるようになります。
これでゲームボーイに色々な機器を繋げられるので、活用の幅も広がりそうです。元々ゲームボーイのスペックが昔のマイコン並なので、プログラム次第で色々なことが出来そうです。後でまた何か利用方法を考えてみましょう。
※コメント投稿者のブログIDはブログ作成者のみに通知されます