3/19に発売されたPCエンジンmini
過去に挑んだ
「ニンテンドークラシック ファミコンミニ、スーパーファミコンミニ」
「メガドライブミニ」
「NEOGEO Arcade Stick Pro」
に続くゲーム内蔵コンソールの分解解析です。
pcwatchですでに分解され、さらっと内部構造は説明されていますので、
それよりも詳しい部分の解析をしていきます。
まずはサクッと基板の内部写真を。
先述の記事にも出ていますが、かなり多くの部分がメガドライブミニと共通しています。
ちなみにこちらがメガドライブミニの基板です。
ZUIK製のZ7213というSoC。これはAllwinnerのSocをベースにカスタムされたチップ、ということですが、A33やR16といったチップとピンアサイン、内部ブロックは同じと考えられ、全く同じファームウェアが動作し、ユーティリティでSoCの内部IDを問い合わせるとA33と返答されます。私はカスタムではなくリマーク・リブランドだと思っているのですが…。
メガドライブミニは内部ストレージがTSOPのNAND Flashだったのですが、
その部品が実装できるパターンがそのまま残され、
さらに追加でeMMCのパターンを設けて実装されています(IC4付近)
USB HUBチップであるMA8601の使用や、HDMI周りのI/F回路、PCBのレイアウトやアートワークもほとんど共通化されています。
メガドライブミニで行ったような内部USBメモリの増設なども同じように行えます(カーネルの書き換えが必要)
一点大きな違いとして、6ピンの謎のi2cっぽいチップのパターンがメガドライブミニでは実装されていなかったところ、本機では実装され(IC7)、実際に通信していることが確認されました。残念ながら未解析で何のためのチップかはわかっていません。
しかし、同じ瑞起製、SoCとしてR16を搭載していた「電車でGo! PnP」の基板にも同じパターンが存在し、部品が実装されていたことが確認されています。
(こちらのサイトで分解検証されています)
電車でGo!PnPと本機との共通点、メガドライブミニでの差異ブート・内蔵ストレージがeMMCであるか、NAND Flashであるか、という点があります。
もしかしたら、eMMCに対応するための特別なbootROMか何かが書かれているのでは?と今推測しているところです。
基板の裏側です。いくつかのFETとテストパッドがあります。
これに加えて、お行儀よく内部に使用されているu-bootやLinuxのカーネルソースが公開されていますので、ダウンロードしておきます。
基板上のRXD,TXDをUSBシリアルケーブルなどで接続し、シリアルターミナルで開くことでより深い解析が行えます。
起動直後にシリアルターミナルから's'の文字を入力し続けるとu-bootのシェルに入ることができます。
tftpboot生きてる pic.twitter.com/bptnHSoEPD
— ひろみつ(honeylab) (@bakueikozo) 2020年3月19日
ここではいくつかのデバッグ・テストコマンドの実行や、起動にかかる環境変数の変更ができます。
ここで、拙著「メガドライブミニのひみつ」などで紹介している環境変数変更の手法によって/etc/shadowをのぞき見し、rootパスワードを取得します。
※※※ メガドライブミニのひみつ BOOTH にて頒布中 ※※※
これにより、Linuxのコンソールにログインすることができるようになり、もっと詳しい解析を行っていくことができます。
起動しているプロセスの一覧なんかも見れます。
ここから先は、Linuxの知識があればあれやこれやそれができていきます。
さて、ダウンロードしたOSSソースを確認してみます。
まだあけてないけど予想通りz7213っぽいな pic.twitter.com/NfNPucKjWl
— ひろみつ(honeylab) (@bakueikozo) 2020年3月19日
兄弟機・同じ開発元であるメガドライブミニのソースコードとdiffをとってみたところ、純正のコントローラや対応コントローラが全く違うことに対応した、という程度の差分で、ほとんど同じソースコードであることがわかりました。
「メガドライブミニ」では、カーネルソース内、対応SPECIALデバイスとしてパッドのVID,PIDを設定することで、専用製品のみに対応するように設計されていました。
これと同様、本機でも付属、および開発元であるHORIのいくつかのパッドのみ使用できるようになっているようです。
カーネルのソースを確認したところ、PCエンジンミニで使用できるゲームパッドは、メガドラミニのときと同じように制限されている。
— ひろみつ(honeylab) (@bakueikozo) 2020年3月19日
ここを見るとHORIのVIDを持っているもの6種類のようだ。 pic.twitter.com/dqw3do8NgZ
これが対応しているデバイスのVID,PIDです。
hub.c: { SPECIAL_USB_DEVICE(0x14cd, 0x8601) }, // 内蔵USBハブ、およびマルチタップ?
hub.c: { SPECIAL_USB_DEVICE(0x0F0D, 0x138) }, // 付属パッド
hub.c: { SPECIAL_USB_DEVICE(0x0F0D, 0xC1) }, // HORI Pad Switch
hub.c: { SPECIAL_USB_DEVICE(0x0F0D, 0xAA) }, // 不明?
hub.c: { SPECIAL_USB_DEVICE(0x0F0D, 0xF1) }, // 不明?
hub.c: { SPECIAL_USB_DEVICE(0x0F0D, 0x139) }, // 海外版付属パッド?
hub.c: { SPECIAL_USB_DEVICE(0x0F0D, 0xEE) }, // HORIPAD mini4
不明な製品が多いですが、もしかしたらこのPIDの製品を持っている方は使用できる可能性があります。
USBハブのID ma8601はメガドライブミニと同じですので、使いまわせる可能性もありますね。
また、付属の純正パッドですが、分解してみたところ連射スイッチのパッドが残されていました。
もしかしてと思ってパターンにスイッチをつけてみると…
#PCエンジンmini の標準パッドに連射スイッチ用の接点が有った件、もしやと思ってスイッチつけてみたら連射機能使生きてるっぽいよ!(実機では試してない
— ひろみつ(honeylab) (@bakueikozo) 2020年3月19日
物理スイッチの取り付けは中級レベル)の半田付けが入りそうだが、過去の部品を流用できればこれはワンチャン
(ドフにあったけど高かったな) https://t.co/ozIaja4KJg pic.twitter.com/QoXbpRaqm8
見事連射モードが作動していました。
もしかしたら連射スイッチはただのボタン扱いで内蔵エミュレータによるハンドリングになるのかなと思っていましたが、パッド側で対応していたようです。
さて、まずはこんなところ。これからもうすこしいろいろ書いていきたいのですが…
そうそう、内蔵エミュレータですが、公式の情報通りM2が作成したもののようです。
内蔵ゲームのROMは一つのバイナリファイルとして圧縮・暗号化されていて、基本的にはエミュレータ"m2engage"からしか参照できないようになっています。
#PCエンジンmini 60本?うちCDROMのゲームが何本も入ってるのに4GBのeMMCでなんで足りるん?と思って見てみた。
— ひろみつ(honeylab) (@bakueikozo) 2020年3月20日
ゲームのデータで2G使ってない。
同じディレクトリにlibopusってのがいるので、もしかしてCD-DAなり音声の部分Opusとやらで圧縮してるのかなhttps://t.co/pw4Ucn78HW pic.twitter.com/nMBLqCZiP2
これは同様にM2が作成した"m2engage”が使用されている「メガドライブミニ」と全く同じ方式です。
ちなみにファミコンミニでは、一般的なNES/SNES用のROMがパーティション内にファイルとして納められ、パーティション自体をLinuxの暗号化ファイルシステムとしてマウントするようになっていました。(そのため、吸い出してもそのままでは使用しにくいですが、本体内に複合キーが納められていたり、Linuxの起動中には普通にファイルとして参照できるため、逆に全く暗号化されていないのと同じ状態になっていました)
さて、ちょっとTwitterで見かけたのですが、購入直後から診断モードに入ってしまって
ゲームにたどり着けない状態になっている方がいらっしゃったようです。
factory-testに入る条件
— ひろみつ(honeylab) (@bakueikozo) 2020年3月20日
/miscに.userがあれば通常起動、なければ.assyをチェックしてASSY test、ASSY未テストならPCBAテストが実行される。PCBAがパスなら.assyを作る。(次回分岐先)
1回目のテストは通っている(miscパーティションはマウントできてる)ということで、パーティション破損じゃなくて https://t.co/dZlndHfKXV pic.twitter.com/yTiQoILW8O
起動スクリプトを解析してみたところ、どうやら2回通るはずのハード診断ルーチンを一回しか通さずに出荷されてしまっているようで…
対応しているパッドを2本接続してテストを通してしまえば通常通り使えると思うのですが、初期セットにはパッドが一個しかない…つらみ
うっかり私みたいにガツガツ解析してればファイルを修正することで修正が可能なんですがね…
さて、とりあえず初報はこんな感じ。今後もうちょっと解析するか、本にまとめるか、どうしようかなぁ…