ゲームの吸い出しの話

スーパーファミコンのゲームを読み取って複製したいのですが、できますか?

みたいなメールを受け取ったんですが、、、何なんだろう?

私のことを違法コピーの無料コンサルタントか何かと思っているんでしょうか? そういう人だと思われてるのか? ゲーム開発用としてカートリッジ基板の自作を3年ほど続けてきましたが、その結果がコレってのが、もう残念すぎです。

メールを受け取って既に数日が経過しているのですが、まだ怒りが治らないので、これを書くことにしました。

 

ゲームの吸い出し行為が合法か? 違法か?

自分は「違法」だと思ってます。コピーツール(吸い出し機やマジコン)がまっとうなお店で売ってないことを考えれば明らかです。レトロフリークもこれに該当すると思います。海外旅行のお土産でコピーツールを買ってみれば、もっとハッキリすると思います。

しかし、Amazonで検索すると、コピーツールがゾロゾロと出てきます。最近だと秋葉原のショップで「Cartridge Reader」というのが売られています。普通に売っているってことは、税関を通過してるということでしょうか? 不思議です。当然のように売っているので、罪の意識が薄い人が居るのでしょうか? だったらそれらを買えばいいだけで、私にメールする必要はないのでは。

 

上の写真は「デジゲー博2018(2018年11月開催)」のIMPACT SOFTさんのブースで売っていた「FC Bus-EmulatoR」。

撮影した時はこれが何なのか全くわかりませんでした。

 

gamernium.com

開発元、GamerniumさんのWebページより。上記のページの注意書きでは、「ゲームのアップロード/ダウンロードは違法です」程度にとどまっています。まあ、同人なので、法的なグレーさは許されてると思います。

 

私の解釈としては、吸い出し行為は違法です。

ただし、自分の持ってるゲームを吸い出して、自分で遊んでいるだけなら、問題ないと思います。違法行為ですが、告発する人は居ません。密造酒を自分で作って、自分で飲んでいる状態と同じと考えていますが、果たして良い例えなのかどうか。

 

アルカディア用カートリッジ基板の自作

アルカディア用のカートリッジ基板を自作してみました。

以下のページに作り方を公開しています。

sites.google.com

youtu.be

動画。

 

仕組みはシンプル。5V動作可能なフラッシュメモリをバスにつなぐだけです。

初の試みとして、超薄型ユニバーサル基板をカードエッジとして使ってみました。が、接触の信頼性が良くないので、プリント基板を作った方がいいです。

 

自作したフラッシュメモリライター。Pi STARTERで動きます。

 

関連

nicotakuya.hatenablog.com

nicotakuya.hatenablog.com

Raspberry Pi PicoでDVI出力

f:id:nicotakuya:20220410134957j:plain

Raspberry Pi PicoでDVI出力(HDMI)を試してみました。

前回の「VGA出力」はアナログRGBなのに対して、今回はデジタルRGBです。上の写真はAdafruitが公開しているサンプル「hello_dvi」を実行中の様子です。

 

f:id:nicotakuya:20220410135348j:plain

使用した部品、「Adafruit DVIブレークアウトボード」です。スイッチサイエンスで330円(+送料)でした。

この他、「Raspberry Pi Pico用DVIアダプタ基板(990円)」という部品も使えます。商品説明が「HDMIっぽい」となってますが、HDMIです。

 

f:id:nicotakuya:20220410135510p:plain

説明文を元に書いた回路図。

VGA出力にくらべてシンプルです。公式もこっちを採用したほうが良かったのでは。

 

f:id:nicotakuya:20220410135556j:plain

完成。

 

f:id:nicotakuya:20220410135642j:plain

サンプルの「sprite_bounce」を実行中。

うちのディスプレイの仕様なのかもしれませんが、解像度が低い場合はこんな感じで額縁状態で表示されます。

 

f:id:nicotakuya:20220410135915j:plain

「moon」を実行中。

 

f:id:nicotakuya:20220410140030j:plain

「terminal」を実行中。

 

f:id:nicotakuya:20220410140119j:plain

「mandelbrot」を実行中。

f:id:nicotakuya:20220410135736j:plain

Shuichi TAKANOさんという方が開発したファミコンNESエミュレータ「pico-infones ver.0.1」を動かしてみました。試しに自作のファミコンゲームを入れてみたら動きました。ドキュメントによると、対応するゲームパッドはBUFFALO BGC-FC801、SONY DUALSHOCK 4、SONY DualSenseの3種類とのこと。

以下のページでUF2ファイルとソースコードを公開されています。

GitHub - shuichitakano/pico-infones: infones for pico

 

f:id:nicotakuya:20220410233435j:plain

(追記)

バッファローのBSGP801を接続した場合、ボタンが複数反応してしまうという現象が発生していたのですが、次の方法で修正してみました。

まず「pico-infones-0.1」のソースをGitHubからダウンロードします。

「hid_app.cpp」の内の2箇所を変更。

・258行目「uint8_t axis[3];」→「uint8_t axis[2];」に変更。

・267行目「gp.axis[2] = rep->axis[2];」を削除。またはコメントアウト

これでZ軸が除外されて、十字ボタンのXY軸だけ読み取るようになります(たぶん)。

ターミナルを起動して「cd pico-infones-0.1」「mkdir build」「cd build」「cmake ..」「make」でビルドをやり直します。buildフォルダにpicones.uf2が作成されたら成功です。

Raspberry Pi PicoでVGA出力

Raspberry Pi PicoのVGA出力(アナログRGB)を試してみました。VGA出力の回路図は「Hardware Design with RP2040」という公式のドキュメントで公開されています。

https://datasheets.raspberrypi.com/rp2040/hardware-design-with-rp2040.pdf

この中の「Chapter 3. VGA, SD Card & Audio Demo Board」と互換性のある回路が、Pimoroniという会社から「Pico VGA Demo Base」という名前で売られています。実売価格は2970円。、、、うーむ、ちょっと高い。

今回はVGA出力回路を自作する事で、これを買わずに済ませます。

 

f:id:nicotakuya:20220403013435j:plain

材料は次の通り。

・抵抗(5種類×3組)。

・D-subコネクタ(15pin)

・ピンソケット(1列80pinを切断)

・ユニバーサル基板(Cタイプ。ドリルで穴を空けました。)

Raspberry Pi Pico。テクノロジアで購入しました。

 

もしUSBホスト機能(キーボード接続など)を使う場合には次の部品を用意します。

・USBコネクタ

ショットキーバリア・ダイオード

・ポリスイッチ

 

f:id:nicotakuya:20220404015845p:plain

「Demo Board」を勝手にアレンジした回路図。この抵抗を並べただけのDA変換が面白いです。

RGB各5ビットなので、32×32×32=32768色という計算になります。オリジナルは499/1k/2k/4k/8k ohm抵抗を使っていますが、抵抗値を変更しています。このため、発色が微妙に違うかもしれません。

「VSYS」端子は1.8〜5.5Vの電圧を入れると、内部で3.3Vを作り出してくれるというDC/DCコンバータになっています。ショットキーバリア・ダイオードは逆流防止用として使っています。

Pico側のUSBポートにキーボード/ゲームパッド(要USBホストケーブル)が刺さっていた場合、「VBUS」端子から給電します。オリジナルはジャンパーピンで接続していますが、ポリスイッチで大電流で切断するようにアレンジしてます。

オリジナルはI2Sオーディオ出力(PCM5101A)とSDカードスロットが付いているのですが、今回は節約して付けません。

 

f:id:nicotakuya:20220403013537j:plain

f:id:nicotakuya:20220403013628j:plain

完成。

 

f:id:nicotakuya:20220404015115j:plain

公式のサンプルの中にVGA出力のデモ(scanvideo)があります。自分の場合はラズパイ4でソースをビルドしました。

https://github.com/raspberrypi/pico-playground

Picoにuf2ファイルを書き込みます。BOOTSELボタンを押してPicoをラズパイ4のUSBポートに接続すると、仮装ドライブとしてマウントされるので、uf2ファイルをドラッグ&ドロップします。

 

f:id:nicotakuya:20220404015507j:plain

「demo1」。ラズパイのマークが画面内を移動するデモです。

ちなみにこのVGAケーブルは10年以上放置してた物ですが、まさか今になって活躍するとは。

 

f:id:nicotakuya:20220404015557j:plain

「mandelbrot」。マンデルブロ集合のデモ。図形が果てしなく拡大されます。

 

f:id:nicotakuya:20220404015051j:plain
「hscroll_dma_tiles」。画面が横方向にスクロールするデモ。この左側に出てるドット絵って、権利的にアウトな気が、、、。

 

f:id:nicotakuya:20220403013709j:plain

「sprite_demo」。スプライトのデモ。Ebenさんの顔が動き回ります。

というわけで、難なくVGA出力に成功しました。PicoじゃないRaspberry Piには予めhdmiポートが付いていて、安価に画面表示することができます。そうなると、PicoでわざわざVGA出力することにどんな意味があるのか? 改めて問題になってくるかと思います。

VGA出力の使い道として、2つの例を紹介します。


youtu.be

VGA出力の例、その1。

液晶が故障したゲームボーイから信号を取り出して、TV出力するという装置。Element14の動画で、アンディ・ウエストさんという方が製作してました。ソースはGitHubに公開されているのですが、370行くらいで書かれていて驚きです。

 

www.raspberrypi.com

VGA出力の例、その2。

Picoで動く「DOOM」です。「DOOM」はオープンソース化されていて、もう珍しいゲームではありませんが、500円くらいのマイコンで動いてしまうのは技術的興味がそそられます。どういうわけか、GitHubにはuf2ファイルがなくて、ソースしか置いてありません。ラズパイ4でビルドを試みたのですが、エラーが出てうまくいきませんでした。まだバージョン0.1なので、今後改善されるかもしれません。

 

(2020/4/21追記) 無理やりビルドしてみましたが、この直後に画面が真っ暗になってしまいます。うまく動きません。あと、ディスプレイが非対応の解像度を使っているみたいです。