honeylab's blog

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

NEOGEO Arcade Stick Proシステム詳細

前の記事で、シリアルが出力されない、と記述しましたが、

honeylab.hatenablog.jp


ハック対策なのか部品点数削減なのかはわかりませんが
一部の部品が実装されていないだけでした。

f:id:honeylab:20191113141114j:plain

基板裏面、シールドを外してR44がSoCのTXと4ピンのTXピンの間に直列に挿入される回路になっていますが、これが実装されていませんでした。
この部分に適当な抵抗をはんだ付けするか、保護を気にしなければジャンパするだけでTX出力が有効化されました。

R38がRXに直列接続かと思ったのですが、こちらは片側がVCCに接続される(プルアップ)だけだったので、ここは空のままでOKです。電圧レベルは3.3V系(TXは3Vスイングでした)です。

 

この方法で起動ログが取得できました。全体は以下のリンクにあります。

https://bitbucket.org/snippets/hiromitu/GrgMz6

ところで、この起動ログの後、ログインプロンプトが…と思ったら

普通にシェルのコンソールでした…

f:id:honeylab:20191114102440p:plain

ぇぇぇぇぇ…

さて、使用しているLinuxのバージョンは…?

root@snk:/ # uname -a
/system/bin/sh: uname: not found

あれ、unameコマンドが無いぞ…?
すごいシュリンクしたrootfsなのかな…?

127|root@snk:/ # cat /proc/version
Linux version 3.4.0+ (frank@ubuntu) (gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-57) ) #57 SMP PREEMPT Sat Oct 12 02:02:05 PDT 2019

/proc/versionから見えました。

ちゃんと、Linuxですね。
ところで、Linuxを使用しているからにはGPLに基づいた権利表記とソースコードの公開が必要なはずですが、

権利表記が適当…っていうか、これよく見たら使ってるよ、しか言ってないな…

ソースコードも今のところ公開されておらず…

取り合えず、サポートにソースコード頂戴ね、ってメールしておきました。

もしかすると、今後のシステムアップデートで更新されるかもね!!!

さて、なんでunameすらないのかな…といろいろ調べてみると、どうやらKernelの起動後、Androidシステム(という言い方が正しいのかがわからない)が起動されているようです。

Processor : ARMv7 Processor rev 1 (v7l)
processor : 0
BogoMIPS : 1022.18

processor : 3
BogoMIPS : 1022.18

Features : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0

Hardware : gs702c
Revision : 0000
Serial : b6db2d7d18a7c7a7

cpuinfoはこんな感じ。普通にARMでした。

NEOGEO miniのATM7013HがMIPSだったので、こいつもMIPSなのでは…と思っていたのですが、さすがにそうではなかったようです。
ARMであれば、追加で何かのプログラム・エミュレータを入れたりするのも簡単です。

Android Kernelで動いてはいますが、メニューやエミュレータは普通のELF executableでした。
なんでわざわざAndroid…と思ったのですが、

/system/build.propを覗いてみたところ

root@snk:/system # cat build.prop
ro.build.id=KOT49H
ro.build.display.id=Demo_7051H-user 4.4.2 KOT49H eng.songzhining.20161121.190628 test-keys
ro.build.version.incremental=eng.songzhining.20161121.190628
ro.build.version.sdk=19
ro.build.version.codename=REL
ro.build.version.release=4.4.2
ro.build.date=Mon Nov 21 19:10:55 CST 2016
ro.build.date.utc=1479726655
ro.build.type=user
ro.build.user=songzhining
ro.build.host=srv-pad-compile5
ro.build.tags=test-keys
ro.product.model=GS705B
ro.product.brand= Android
ro.product.name= Demo_7051H
ro.product.device=snk
ro.product.board=atm7051H_demo_q88_hd
ro.product.cpu.abi=armeabi-v7a
ro.product.cpu.abi2=armeabi
ro.product.manufacturer=Actions
ro.wifi.channels=
ro.board.platform=ATM702X
ro.build.product= Demo_7051H
ro.build.description=Demo_7051H-user 4.4.2 KOT49H eng.songzhining.20161121.190628 test-keys
ro.build.fingerprint=Android/Demo_7051H/q88_hd:4.4.2/KOT49H/eng.songzhining.20161121.190628:user/test-keys
ro.build.characteristics=tablet 

のように、GS705Bというタブレット用の開発環境がそのまま流用されているようです。うわぁ。

要するに、これはジョイスティックのついたAndroidタブレットです。
(悪口ではないですよ。)


bootlogを見ると、どうもブートローダはu-bootではないようです。
vfatフォーマットの/miscパーティション内に置いたboot.imgからkernelを起動出来たり、結構便利な感じですね。

f:id:honeylab:20191114103831p:plain

起動ロゴっぽいbinとかもあるので、ファームウェア自体にあまり手を触れず、
結構遊べそうな感じです。

そして、肝心のエミュレータですが…

f:id:honeylab:20191114104014p:plain

 「mvsnjemu」ですね。NEOGEO miniと一緒だね。
GPLだね。よろしくね。

 

何かしらのグラフィックのアクセラレーションが効いてるんじゃないかと思うんですが、まだその辺は確認していません。
mvsnjemu内にSDL_INITがいたので、その辺を使えば普通に効くのかしら。

なんかしら適当なのを適当に持ってくればなんでも動きそうな気がします。
バイス周りは絞ってると思うのでできればカーネルを再コンパイルしたいところではありますが…

 

そして、気になってる人も多いと思う隠しゲーム。
順次アンロックになるので外部からゲームファイルを供給するのか、フラグ解除方式なのかという話でしたが

とりあえず、内部に全ゲームROMは収められていることはわかりました。
また、私レベルのユーザであれば自分でアンロックもできることはわかりました。
それ以上は、記録に残すことはやめておきます。(うざい)

 

とりあえず、カーネルのソースお願いね!