上の3つの記事と私のTwitterで随時解析情報をお知らせしてきましたが、一定の成果を
得られたためここに記しておきます。
ハードウェア、ファームウェアについて
・CPUはAllWinnerの8コア 2.0GHz A572という割と豪華な奴
・ストレージ8G,うち2GをゲームROM含むrootsとして使用
・Linux Kernel 5.15
Linux version 5.15.123-yocto-standard (oe-user@oe-host) (aarch64-poky-linux-gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.38.20220313) #1 SMP PREEMPT Mon Jan 29 02:33:21 UTC 2024
一応サポート情報のOSSからダウンロードしたソースコードでコンパイル可能ではある
・が、書き換えて動く保証はない(BROMでの検証がきつい)し、ENVを書き換えてLinuxのコマンドラインを改変しようとしたら文鎮化した。
・eGON ヘッダバージョンが4.0
・u-bootはtina 2018-07ベース
・rootfsについては特に検証されていないので書き換えは可能
・SDカードスロットのパターンがあるので、これにSyterKitというツールキットで作ったブートローダやベアメタル実行ファイルを書きこんで動かすことが可能(mmc0)
・これで実行ファイルを作り、ROOTFSをフルダンプしたうえで、initスクリプトにUSBメモリのマウントとシェルスクリプトを読み込むようなバックドアを書き込み、システムを自由に書き換えることに成功した。
うっしゃぁキタでこれぇ!
— ひろみつ@リバエン屋 (@bakueikozo) September 14, 2024
取り付けたSDスロットにA527用のベアメタルの開発環境で作ったバイナリ書いてシリアル出力できたで!
やっぱ元のDDR環境ではシリアル出力が完全に抑制されてるように見える
おかげで探すのに大変手間取ったUART0はPB9,10のマッピングになってたぞ#DDRmini https://t.co/M5TbXK1Ast pic.twitter.com/3WO3T1n9pQ
USBメモリに書いたシェルスクリプトを呼び出すコードを仕込むことに成功した
— ひろみつ@リバエン屋 (@bakueikozo) September 29, 2024
これで毎回rootfsを書き換えなくて済むぞ
なかなか動かなくて悩んでたら、windowsで書いてたから改行コードが間違えてたわ pic.twitter.com/v3CZmfxZtA
・↑SDカードスロットと配線のはんだ付けが必要
・↑はんだ付けを必要としてないFELモードからの独自バイナリも起動できるらしいが、私はまだ試していない
Here's my code if anyone is interested. It includes the patches I had to make for sunxi-tools and sunxi-syterkit, as well as the eMMC dumper tool I made. The dumper tool reads blocks into SRAM and then you can use sunxi-fel's read command to save that datahttps://t.co/qE2vEnbOHh
— 987123879113 (@_987123879113) September 28, 2024
・普通に使えるシリアルコンソールは出ていないが、DTSを定義するなりレジスタを設定するなりすれば使える2系統は出てるっぽい。
あと、SDカードをあきらめればPF2,4も使えるのかも。
・ハードウェアシリアルを復活させるのは一寸めんどいけど、Linux起動後であればUSB Serial Gadgetをコンパイルして読み込ませ、gettyを起動するようにすれば起動後にはシェルに入ることができるようになる。passwdの書き換えが必要
あれやこれやといろいろやった結果、まずはようやく動作中のDDRMiniにUSB gadget serial経由でshellログインできるようになった。これでメニューからMAME改を起動しているときに渡してるパラメータが見えるようになった。後はここから工夫してできればEtherでつなぎたいんだけど・・・ pic.twitter.com/txQsqPltQJ
— ひろみつ@リバエン屋 (@bakueikozo) October 1, 2024
ソフトウェアについて
・メニュー画面の実行ファイルとエミュレータ部分の2つに分かれている
・ゲームエンジンはMAMEベースのエミュレータ。ベースっていうか、DDR以外の部分を削ったものに独自パッチとROMの暗号・復号化ルーチンを付け足したり、デモの制御などを行うための改変が行われている
・DDR2ndMIXの未収録曲は、ゲーム用CDDAのCHDのトラックを無音化することで鳴らないようにされている。白看板はMAME改側で対応。
未収録曲選択した時でもgreat song!!って言って無音で始まるの腹抱えて笑っちゃったよ
— ひろみつ@リバエン屋 (@bakueikozo) October 2, 2024
でもそれは昨日までの話
技術的には行けるのを確認した pic.twitter.com/O861vxIhla
・そのほか付属のROMはおそらくMAMEのROMセットと全く同じものらしい
(ただし、暗号化されている)
・暗号、複合ルーチンは解析済みのため、必要であればCHDの中身を書き換えるか、拾ってきて(ダメ)差し替えるだけで選曲・ステージで鳴らすことができる。白看板を消すにはプログラムへのパッチが必要
ちなみにMAMEのposixfileのopen64とかpread64とかlseek64とかを暗号に対応してる関数にされたのでposixfileのコードを参考しながらアセンブラを読んだらもっと読みやすくなると思いますhttps://t.co/JPJRJz240S
— 987123879113 (@_987123879113) September 29, 2024
・本来MAMEでエミュレーションするときには基板のセルフチェックを通るため時間がかかるが、収録時に通過後に保存したステートセーブを読み込んで起動している
・3rdMIXも同様にデータが削られているような気がする。加えて、起動時に本体内に音源データをプリロードしているのでステートセーブを読まないようにしたうえで、CHDを差し替えると読み込まれた時点のデータがロード、再生される(ような気がする)。追加でプログラムにもパッチが必要かもしれない。当てたものが↓
3rdいけた pic.twitter.com/wVGf7QdD7K
— ひろみつ@リバエン屋 (@bakueikozo) October 2, 2024
・USBでファームアップがあったが、この手法で曲が追加される可能性はゼロではない。ゼロではないが。
というわけで、少なくとも私のDDRMiniは、再生できない曲が無音で足譜だけ流れるような残念な状態ではない状態にすることができました。
しかし、まぁ権利の問題でこうなっているので、これをあれこれするようなことをこれ以上私からどうこうすることはできないのです。
しかし、筐体の出来やLEDの演出は大変よく作られていて、ゲーセンに通いまくっていた青春時代を思い出させてくれるとても良い飾りだと思います。
あとは、そうね、普通にaarch64なのでそれ用のMAMEなりStepManiaをコンパイルして突っ込む、ことは可能かと思いますので、追々やっていきたいと思います。まずはここまで。