honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

PCエンジンmini 分解 まず初報

3/19に発売されたPCエンジンmini

過去に挑んだ

ニンテンドークラシック ファミコンミニスーパーファミコンミニ」

メガドライブミニ」

NEOGEO Arcade Stick Pro」

に続くゲーム内蔵コンソールの分解解析です。

pcwatchですでに分解され、さらっと内部構造は説明されていますので、

pc.watch.impress.co.jp


それよりも詳しい部分の解析をしていきます。

まずはサクッと基板の内部写真を。

f:id:honeylab:20200321212659p:plain

先述の記事にも出ていますが、かなり多くの部分がメガドライブミニと共通しています。
ちなみにこちらがメガドライブミニの基板です。

f:id:honeylab:20200321214650p:plain

 

ZUIK製のZ7213というSoC。これはAllwinnerのSocをベースにカスタムされたチップ、ということですが、A33R16といったチップとピンアサイン、内部ブロックは同じと考えられ、全く同じファームウェアが動作し、ユーティリティでSoCの内部IDを問い合わせるとA33と返答されます。私はカスタムではなくリマーク・リブランドだと思っているのですが…。


メガドライブミニは内部ストレージがTSOPのNAND Flashだったのですが、
その部品が実装できるパターンがそのまま残され
さらに追加でeMMCのパターンを設けて実装されています(IC4付近)
USB HUBチップであるMA8601の使用や、HDMI周りのI/F回路、PCBのレイアウトやアートワークもほとんど共通化されています。

メガドライブミニで行ったような内部USBメモリの増設なども同じように行えます(カーネルの書き換えが必要)

 一点大きな違いとして、6ピンの謎のi2cっぽいチップのパターンがメガドライブミニでは実装されていなかったところ、本機では実装され(IC7)、実際に通信していることが確認されました。残念ながら未解析で何のためのチップかはわかっていません。

しかし、同じ瑞起製、SoCとしてR16を搭載していた「電車でGo! PnP」の基板にも同じパターンが存在し、部品が実装されていたことが確認されています。

(こちらのサイトで分解検証されています)

mazu-bunkai.com

電車でGo!PnPと本機との共通点、メガドライブミニでの差異ブート・内蔵ストレージがeMMCであるか、NAND Flashであるか、という点があります。
もしかしたら、eMMCに対応するための特別なbootROMか何かが書かれているのでは?と今推測しているところです。

基板の裏側です。いくつかのFETとテストパッドがあります。

f:id:honeylab:20200321233344p:plain

これに加えて、お行儀よく内部に使用されているu-bootやLinuxカーネルソースが公開されていますので、ダウンロードしておきます。

 

www.konami.com

基板上のRXD,TXDをUSBシリアルケーブルなどで接続し、シリアルターミナルで開くことでより深い解析が行えます。

 

f:id:honeylab:20200321234005p:plain

 

起動直後にシリアルターミナルから's'の文字を入力し続けるとu-bootのシェルに入ることができます。

 

ここではいくつかのデバッグ・テストコマンドの実行や、起動にかかる環境変数の変更ができます。

ここで、拙著「メガドライブミニのひみつ」などで紹介している環境変数変更の手法によって/etc/shadowをのぞき見し、rootパスワードを取得します。

※※※ メガドライブミニのひみつ BOOTH にて頒布中 ※※※

honeylab.booth.pm

 

これにより、Linuxのコンソールにログインすることができるようになり、もっと詳しい解析を行っていくことができます。

 

起動しているプロセスの一覧なんかも見れます。

f:id:honeylab:20200321234546p:plain

ここから先は、Linuxの知識があればあれやこれやそれができていきます。

 

さて、ダウンロードしたOSSソースを確認してみます。

 


兄弟機・同じ開発元であるメガドライブミニのソースコードとdiffをとってみたところ、純正のコントローラや対応コントローラが全く違うことに対応した、という程度の差分で、ほとんど同じソースコードであることがわかりました。

メガドライブミニ」では、カーネルソース内、対応SPECIALデバイスとしてパッドのVID,PIDを設定することで、専用製品のみに対応するように設計されていました。
これと同様、本機でも付属、および開発元であるHORIのいくつかのパッドのみ使用できるようになっているようです。

 
これが対応しているデバイスの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はメガドライブミニと同じですので、使いまわせる可能性もありますね。

 

また、付属の純正パッドですが、分解してみたところ連射スイッチのパッドが残されていました。

もしかしてと思ってパターンにスイッチをつけてみると…

 

見事連射モードが作動していました。

もしかしたら連射スイッチはただのボタン扱いで内蔵エミュレータによるハンドリングになるのかなと思っていましたが、パッド側で対応していたようです。

 

さて、まずはこんなところ。これからもうすこしいろいろ書いていきたいのですが…

そうそう、内蔵エミュレータですが、公式の情報通りM2が作成したもののようです。
内蔵ゲームのROMは一つのバイナリファイルとして圧縮・暗号化されていて、基本的にはエミュレータ"m2engage"からしか参照できないようになっています。

 

これは同様にM2が作成した"m2engage”が使用されている「メガドライブミニ」と全く同じ方式です。

ちなみにファミコンミニでは、一般的なNES/SNES用のROMがパーティション内にファイルとして納められ、パーティション自体をLinuxの暗号化ファイルシステムとしてマウントするようになっていました。(そのため、吸い出してもそのままでは使用しにくいですが、本体内に複合キーが納められていたり、Linuxの起動中には普通にファイルとして参照できるため、逆に全く暗号化されていないのと同じ状態になっていました)

 

さて、ちょっとTwitterで見かけたのですが、購入直後から診断モードに入ってしまって
ゲームにたどり着けない状態になっている方がいらっしゃったようです。

 

起動スクリプトを解析してみたところ、どうやら2回通るはずのハード診断ルーチンを一回しか通さずに出荷されてしまっているようで…

対応しているパッドを2本接続してテストを通してしまえば通常通り使えると思うのですが、初期セットにはパッドが一個しかない…つらみ

うっかり私みたいにガツガツ解析してればファイルを修正することで修正が可能なんですがね…

さて、とりあえず初報はこんな感じ。今後もうちょっと解析するか、本にまとめるか、どうしようかなぁ…

 

すごいgdgdな分解している様子を映しているかもしれないYoutube動画はこちらです

youtu.be