honeylab's blog

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

アストロシティミニのハードウェア詳細

買わないって言ってたんだけど、分解写真見たら買ってもいいかと思ったので買いました。

 

基板のチップ全体がシールドでおおわれてたせいであんまり分解写真がなかったようですが、これは簡単に取れるやつです。

本体・LCD周辺はほかの人が写真撮ってると思うので
基板の現在の解析状況を貼っておきます。

 

f:id:honeylab:20201218154127p:plain

 

そして、UARTが見つからない…

FELのスイッチもない。

まさかここにきて本当にUART廃止した…?

 

実は、PCエンジンミニからはFelキーが廃止され、起動時にUSB経由でパケットを投げることでFelモードに入るような仕組みになっています。

すこしめんどいですが、これで中にアクセスはできるはずです。

今後いろいろ試してみます。

 

参考に、メガドライブミニ、PCエンジンミニの基板の写真へのリンクも貼っておきますね。

honeylab.hatenablog.jp

 

さて、システム詳細。

メインSoC ZUIKI Z7213。メガドラミニ、PCエンジンMiniと同じやつ。

システム全体の開発は例によってZUIKIがやってます。

www.zuiki.co.jp

例によって、LinuxなどOSSの部分はセガのサイトで公開されています。

sega.jp

 

 

 

 

ROM FORESEE FS33ND04GS108TF10 (512MB)

メガドラミニと一緒。メガドラミニは一部違うロットもあったみたいだけど。

RAM Unic SCB13H2G160 (256M)

 

パネルのボタンは全部普通のGPIOにつながってるので、必要ならば適当にスイッチを付けるだけでボタン入力に変換できます。

 

背面USB、ホストサイドはやはりメガドラミニ、PCEミニと同じようにMA8601のHUBチップを介しています。

HDMI出力もEP952。今回の特徴は外部HDMIにも接続できること。

基板の特徴として、チップ番号やピン配置のシルクがきちんと記載され、丁寧なつくりの印象を受けました。

 

最新の解析状況はtwitterで上げていくと思いますので、よかったらフォローしてみてください。

twitter.com

 

あと、いまから買うならこのリンク踏んでからから買ってねw

 

 

 

アストロシティミニ

アストロシティミニ

  • 発売日: 2020/12/17
  • メディア: Video Game
 

 

任天堂 GAME & WATCHを分解してあれこれしてSTM32評価ボードとして使う

「GAME & WATCH スーパーマリオブラザーズ」、例のごとく分解・魔改造していきます。

 

基板の詳細な画像などは、例えばこちらとか

mazu-bunkai.com

もっときれいに分解しているほかの方のサイトがありますので、
そちらのほうを是非参照してください…

 

 

 はい、我々甘ちゃんなので、このハード、いつものようにLinux+エミュで構成されているものと思い込んでNintendoのOSSサイトをリロードしまくっていたのですが、その期待を全力で裏切って、STM32という極めて効率的なハードを選定してきました。

 

 基板をよく見るとわかるのですが、メインクロックの水晶振動子は実装されず、代わりに32.768の時計 RTC用の水晶が実装されています。

 


このため、スペック表にきちんと月差を記載することができたんですね。

 

任天堂さすがすぎる。

 

液晶はINNOLUX製おそらく320x240と思われました。

 

 この型番でググっても何の情報も出てきません。カスタムだと思われます。

 

基板上にはゲームのROMや動画像データが収録されていると思われるFlashが実装されていました。

 中身を読みだしてみましたが、完全にランダムであり、圧縮か暗号化が全体にかけられているものと推測されました。この時点で私は割とスキル不足で完全解析をあきらめましたw

仮に内蔵されているROMイメージを既存の別のROMイメージに書き換えたとしても、内蔵エミュレータはおそらくマリオブラザーズほぼ専用になっていて、それ以降に発売された、標準マッパー以外のROMイメージなどに対応させるのは困難だと思われます。
そのため、そういった改造を行うには汎用のNESエミュレータをポーティングすることが一番の近道になります。

この評価基板(言い切った)、CPU内蔵Flashへの書き込みやデバッグのためのSWDポートがきちんと残されています。

 

ST謹製の開発ツールでCPUを指定し、C言語でプログラムを書き込むことで自由にプログラムを動作させることができます。
また、通常の開発環境であれば、書き込まれたプログラムの読出しやデバッグが可能ですが、さすがにこの辺はプロテクトがかかっていて、単純に読み出すことは不可能でした。加えて、私の持っているツールでは高度なデバッグ操作ができないようで、その辺はもうあきらめることにしました。

 ということで、この基板をSTM32H7の評価基板として使い倒すための調査を行いました。

 
ボタン配線などは割と簡単にパターンをたどることでわかります。
LCDの配線もデータ、クロックなどはSTM32内蔵のLCDドライバのピンアサインをもとに推測、およびトレースで判別させました。

 

f:id:honeylab:20201126011227p:plain

しかし、どうやらLCDの初期化にはSPIでコマンドを投げてやる必要があるらしいということがわかり、ロジックアナライザでの解析を行いました。

 

どうにか初期化シーケンスが判明し、LCDフレームバッファの内容を表示させるところまでは到達しました。
後はボタン、音声周りですが、ここはまぁそんなに難しくないと思います

 

が、まぁここから先はぶっちゃけ誰でもできるので…w

なんか面白いネタ無いかなぁ…w

 

海外のハッカーの人がFlash内の解読、再Packに成功したようで、ROMイメージの書き換えなどには成功しているようです。

おそらくこちらの方が最速で突っ走っているかと

twitter.com

 

ところで、みんなが期待している簡単にROMを差し替えるツール的なもの、
今回のハードに関してはそもそも、USBコネクタの配線がSoCまで届いていないこと、
プログラムの書き換えには専用のハードがいることから、

特定の電子工作マニア以外にはおそらくできないものになると思います。

例えばCPU内蔵のプログラムの書き換えには 

 こういうのが必要

とか

FlashROMの書き換えには

 こういうのとか

 
ここはハードの制限なので、ソフトではどうにもならんですねぇ。

 

オリックス給油カード&リパークの駐車後払い法人カードを拾ったので届けてみたら

三井のリパーク~♪

 

先日、保育園の送り迎えに使用している駐車場の精算機で
カード挿入口にカードが置き忘れられていることに気づきました

 

f:id:honeylab:20201105163953j:plain

 

説明書を隅から隅まで読むタイプの人は気づいているかもしれませんが、

クレジットカード等には習得時の連絡先と、会社によっては

「薄謝進呈」

f:id:honeylab:20201112101732p:plain


と書かれていることがよくあります。皆さん自分のカードを確認してみましょう。

 

さて、クレジットカード、交番に届けたところで実はお礼なんてもらえません。

しかし、センターに連絡するとお礼がもらえるそうです。

これはこれは。

 

いや、マジでお礼が欲しいわけではなく、その内容そのものに興味があったのでセンターに電話してみました。

拾得したことを伝えると、時間、場所、こちらの連絡先を聞かれ、
後日返送用封筒を送るので、カードにはさみを入れて返送してくれ、とのことでした。
特にここでお礼についての話はありません。

ははーん、返信用封筒とともに送られてくるか、送付後に別途そっと送られてくるんだな??

大体、なんかしらのお礼、って言ったらQUOカードやろ。500円か?ええんやで??

 

などと思いつつ数日、返送用封筒とお礼の手紙が到着しました。

f:id:honeylab:20201112095210j:plain

「ささやかではございますが、お礼の品を同封いたします」

 

おっなんやなんや

 

f:id:honeylab:20201112095241j:plain

 

ど どーん!!!!

ボールペン!!!

 

オリックス バッファローズの ボールペン!!!!

 

…ありがとうございます!!!!!

 

googleで検索してみると、クレジットカード会社によってはQUOカードだったりすることはあるみたいです。
これが、只の法人支払いカードだからなのか、ご時世なのか、会社の力やそのほか諸々のことなのかはわかりませんが、とりあえずこのカードを届けると、バッファローズのボールペンがもらえることがわかりました。

 

ゲームギアミクロのLCDに何か出す & 1.15インチの謎に迫る

この手のハードの解析について、みんなの興味があるところなのは
ほかのゲームのエミュとかROMを入れられるとかそういうところなんだと思いますが、
それははっきり言って最終的には「できる」んですよ。

でも、それをすること自体には、いろいろな問題、
情報発信の責任がついてきてしまいます。

「ネタ」としてその手のことに近いことをやることはあると思いますが、
例えば簡単な入れ替えツールや明確なROMの引っこ抜き方はこのブログには出てきませんのであしからず。

 

さて、このハード、Linuxとしてデバイスが抽象化されていますので、その辺のハンドルを試してみます。

内蔵LCDはST7789VWというわりとハイスペックな240x240の液晶が搭載されています。

shikarunochi.matrix.jp

Linuxから画面に表示させるには、フレームバッファというデバイスに何かしらのデータを書き込むと、割り当てられたディスプレイに何かが表示されます。
普通のマシンでは、 cat /dev/urandom > /dev/fb0 として、画面にごみが表示されることを確認することが多いです。

seenaburns.com

ゲームギアミクロでも同様に、/dev/fb0が存在していますのでこれを試してみます…

ゲームのUIをストップさせてこのコマンドを実行させてみますが…何も表示されません。

あれれ?どういうことだろう。

ゲームのUIを動かしたまま、上記コマンドを実行すると一瞬画面にごみが表示されました。

おやおや。どうやらこのマシンでは、fbに書き込んだデータは別の仕組みでlcdに転送されているようです。

いろいろ調べてみると、"/sys/kernel/screen_update/update” というファイルが見つかりました。このファイルに"1"を書き込むと、ドライバがfb0からlcdに転送してくれる仕組みになっているようです。

では改めて、urandomからfbに書き込み。

さらに、クロスコンパイルしたfb-testを実行してみます。

コマンドだけ打ち込んでもLCDが変わりません。

ここは手動で/sys/kernel/screen_update/updateを更新します

 

 

実行している動画です。

 

このように、一応fb0に連動してlcdを更新させることができました。
fbを使用するアプリケーションはlcdへの転送を組み込むか、別途バックグラウンドで転送するアプリを動作させれば(syncの問題は出ますが)
普通のLinuxのアプリのように動作させることが可能です。

もしくは、このdispドライバが非同期更新の仕組みを持っていると助かるのですが…

 

 

ところで、公式スペックによると画面サイズは1.15インチということになっています。 

f:id:honeylab:20201008023329p:plain

 

発売前、液晶の解像度とこの1.15インチという値から、内蔵されるLCDを探していたのですが見つかりませんでした。
こんな中途半端(160x144)の値の液晶をカスタムで作るわけはないため、オーバーサイズの液晶をマスクして使うことは想定していました。

 

上記の動画を見るとわかるように、左上の点が下にオフセットされています。

つまり、こんな感じでゲームギアミクロでは正方形の液晶の上下をマスクして長方形に見せています。

f:id:honeylab:20201008023201p:plain

ドライバのパラメータを見てみると、以下のように設定されていました。

f:id:honeylab:20201008021515p:plain

内部fbは256x238として使用されていて、エミュレータでは160x144に描画、
これをLCDの[0-240,38-180]の範囲に拡大表示する、という動作です。
つまり横方向1.5倍、縦方向…ちょっと合わない…?

まぁ、最終的に整数倍にならないのはたぶんそれをやるとゴリゴリの表示になっちゃう、とかいう理由で調整したんじゃないですかね。たぶん。
(計算でぴったり合わせてドヤ顔するつもりだったんだけどなぁ…)

ところで、このLCD、スペック的には1.3インチということになっています。

では、公式スペックの1.15インチはどこから来たのでしょう。

f:id:honeylab:20201008024442p:plain

 

 

…出た!!!1.15インチ!!! この中途半端な値はここから来たのね!

ふぅ、すっきりした…三平方の定理ってこうやって使うのよ。

ゲームギアミクロを分解&解析(システムにログイン)

honeylab.hatenablog.jp

↑前回からの続き

 

/etc/shadowを引っ張ってきてhashcatにかけたけど全然終わらん

これは過去の例を見て対策されたに違いないw

 

ということでいったんパス解析をあきらめてfs直接書き換えてログインを試みようとするが、手持ちのflashリーダではggミクロに乗っているspi nandにアクセスできないことが分かった

 

もともとのrootfsパーティションsquashfsファイルシステムでnand上にあり、uboot上からパッチをあてるのは結構難しい

いろいろ考えていると、どうやら搭載nand上のhパーティションががら空きであることが分かった。
もともと存在するrootfsパーティションは結構でかいサイズだが、中身は大した量ではないようだ。

そこで、いったんシングルユーザモードでrootfsにアクセスしてシステム軌道に必要なファイルをnandh上にコピーし、

(/etc/shadowも書き換えてパスワードを削除する)ubootでのkernel起動パラメータを書き換えて、nandhをrootfsにして起動させてみることにした。

f:id:honeylab:20201007052016p:plain

ログイン成功

さて、ログインできたはいいが、今のところ外部から何かを持ち込む手法がないな…
起動ログを見るとandroid_usb0は生きてるみたいなのでrndisを試してみるが、なんかバグってるらしくて動かない

あとはmass_stroageかな。

ゲームギアミクロを分解&解析(初報)

 

ゲームギアミクロ ブラック

ゲームギアミクロ ブラック

  • 発売日: 2020/10/06
  • メディア: Video Game
 

 

届いた

箱に対して小さいw

Image

分解

SoC Allwinner F1C200s (ARM926EJ-S [41069265] revision 5 (ARMv5TEJ))

メガドライブミニなどに使用されていたAllwinner

…違った!あれはZUIKIだ!!(棒読み)…

ゲフン、 Allwinner製のARM CPUが採用されています。

f:id:honeylab:20201006161629p:plain

小型LCDが使用されていることから、Licheeあたりに使われてるこの辺だと想定はしていましたが、まさにその通りでした。

SPI Flash ROM に bootloader/linux/game/romが書き込まれています。

f:id:honeylab:20201006161701p:plain



フォームファクタ考えると妥当。予想通り。

FELモード用ボタン

基板上にタクトスイッチがついています。

f:id:honeylab:20201006161731p:plain


このボタンを押しながらUSBを接続するとFELモードになりますが、
一般的なユーザには今のところ使い道はありません。

Image
ファミコンミニなどから続く、書き換えツールなどはこのモードを使用することになります。

 

シリアルコンソール

分解して基板上にあるこのJP2の端子がシリアルIOです。

f:id:honeylab:20201006161759p:plain


15200bpsで接続し、各種操作ができます。

bootloaderの起動中に's'を送り続けることでu-bootのシェルに残れます。

Image

その後、Linuxのコンソールの表示、ログインプロンプトまではスムーズに進めます。

f:id:honeylab:20201006161432p:plain


ログインのためのパスワードは現在調査中です。

 

LCD

ゲームギアの解像度は160x144ですが、
これをちょうど満たすようなこの大きさのLCDはありませんでした。
そのため、これより一回り大きな液晶を使うのだと考えていましたが、やはりその通りでした。ドライバ上からは240x240と認識されているので、1x1等倍ではなくもしかしたら1.5倍になってるのかも??

f:id:honeylab:20201006161924p:plain

f:id:honeylab:20201006161015p:plain

 

 

いまのところ面白いのはこのぐらい。

あと、セガのHPからOSSアーカイブがダウンロードできるはずなんだけど…

ゲームギアミクロ | セガ | オープンソースのライセンスおよびソースコードアーカイブ

まだ出てきてない。リンクミスだと思う。

 

プログラマー向けカロリーメイトのサイトでドヤ顔するためのまとめ

一部界隈で話題の、プログラマー向けカロリーメイトCUIサイト

 

https://www.otsuka.co.jp/cmt/to_programmer/cui/

こちら、Rubyまつもとゆきひろ氏監修ということもあって遊びごごろあふれたページのようです。

プログラマー向け」とは書いてありますが、これは「一般人」から見たいわゆるカタカタやってる人向け、ぐらいの意味ですね。

 

f:id:honeylab:20200804124750p:plainページを開くと、いわゆる黒いコマンド画面が表れます。
ここで、いろいろな操作をして楽しんでください、とのことです。

我々のようなこういう機械に慣れ親しんだ者から、
そして何か準備されたもの、ということを考えると、
すべての機能を把握するのは割と簡単です。
しかし、あまりなじみのない人にとっては全く楽しむことができないでしょう。

せっかくなので、この黒い画面で遊ぶ方法をいくつか紹介します。
また、この黒い画面、あくまでもブラウザ内で動いているだけなので、
めちゃくちゃをやっても壊れたりすることは全くありません。
安心して遊びましょう

 

ちなみに、トップページのコメントにはこんなことが書かれています。

f:id:honeylab:20200804125058p:plain

T.I氏 何者ですかね。

では、促されたようにUNIXコマンドをいくつか試してみましょう。

まず、ファイルリストを取得するコマンド「ls」をタイプしてみます。
小文字でls(エル エス)とタイプし、Enterキーを押します。

f:id:honeylab:20200804125150p:plain

about,artibles,campain,messages,product というリストが表れました。

これだけで、見たことない一般人に対してドヤれるレベルですのでどんどんドヤりましょう。

このリスト、最初はファイルだと思って、ファイルを表示するコマンド「cat」を実行してみました。しかし、

f:id:honeylab:20200804132601p:plain

思ったような動作はしません。そこで、ディレクトリ移動コマンド「cd」を使います。

cd スペース を打った後、ab とタイプし、おもむろに[tab]キーを押すとaboutが保管されますので、[Enter]を押します。

aboutディレクトリに入りましたので、ここでまた「ls」します。

f:id:honeylab:20200804132744p:plain

about.txtが表示されました。

では、 cat about.txt とタイプしてみましょう

f:id:honeylab:20200804132817p:plain

about.txtの中身が表示されました!

このディレクトリはこれでおしまいのようです。

上の階層に戻るには「cd ..」または、「cd」コマンドでホームディレクトリに戻ります。 

このように、この5個のディレクトリに入り、中身を見ることができます。

また、現在の絶対ディレクトリを確認する「pwd」コマンドが使えます。

f:id:honeylab:20200804133046p:plain

どうやら「/CalorieMate/LIQUID」ディレクトリにいるようです。

ここから、いろいろなディレクトリを辿ってどんなファイルがあるかを探すことができます。


ところで、ここでおもむろに「help」とタイプしてみましょう。

f:id:honeylab:20200804133214p:plain

 

なんと、このコンソールで使えるコマンド一覧が出てきます。
しかし、「Basic commands」とあるように、あくまでも一部で、それ以外は自分で探せ、ということのようです。
imgcatコマンドは、各ディレクトリ内にあるpngファイルを表示することができます。

例えば、

f:id:honeylab:20200804133347p:plain

こんなかんじ。

また、openコマンドでは上記にある「twitter.link」などのリンク先をブラウザで開くことができます。

 

基本的なコマンドは上記のリスト通りですが、ついでに内部構造をちょっと調べて、すべての利用可能なコマンドを確認してみました。

f:id:honeylab:20200804134718p:plain

コマンドリストは上記で全部です。たぶん。
「システム」と分類したものは、いわゆるUNIXコマンドのようなコマンドとして使用できます。
「ネタ」となっているコマンドは、その挙動とは違った結果を返すものです。
是非実行してみてください。

slコマンド、絶対入ってると思ったのになかったなぁw


しかし、私は口が軽いので以下ネタバレを含みます。

ちゃんと自分で実行してみたい人は、ここから下は後で読むことにしてくださいね。

 

続きを読む