honeylab's blog

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

メガドライブミニ (Genesis Mini) をハックする(2)特定のUSBデバイスしか使えない縛り

あと数時間でメガドラミニが到着するはずですが、その前に昨日セガから公開されたOSSソースコードをもとにハックの準備をしていきます。

https://sega.jp/mdmini/doc/mdmini-oss/

前情報で、どうやら付属の純正パッド以外のコントローラが認識しないという話が聞こえていました。また、マルチタップ代わりのUSBハブも専用品番でないと使えない、とのことです。

f:id:honeylab:20190919054355p:plain

https://game.watch.impress.co.jp/docs/news/1185012.html

おそらく動作保証とかいろいろ理由はあるのでしょうが、既存のハードウェアリソースが使えないのはちょっともったいないですよね。

では、公開されたLinuxソースコードをあさっていきます。

USBドライバ周りのはずですので drivers/usbあたりを探してみます。

すると、hub/core.cに不思議な文字列を発見しました。

 

 
#ifdef CONFIG_USB_SPECIAL_DEVICE
#define SPECIAL_USB_DEVICE(ven, prod) \
    .idVendor = (ven), \
    .idProduct = (prod)

struct device_id {
    __le16 idVendor;
    __le16 idProduct;
};

static const struct device_id special_id_list[] = {
    { SPECIAL_USB_DEVICE(0x14cd, 0x8601) },
    { SPECIAL_USB_DEVICE(0x0ca3, 0x24) },
    { SPECIAL_USB_DEVICE(0x0ca3, 0x25) },
    { SPECIAL_USB_DEVICE(0x0bda, 0x5411) },
    { SPECIAL_USB_DEVICE(0x05e3, 0x0608) },
    { SPECIAL_USB_DEVICE(0x2109, 0x2817) },
    { SPECIAL_USB_DEVICE(0x1a40, 0x0101) },
    { SPECIAL_USB_DEVICE(0x1dd8, 0x000f) },
    { SPECIAL_USB_DEVICE(0x1dd8, 0x000b) },
    { SPECIAL_USB_DEVICE(0x0079, 0x0011) },
    {}
};
#endif

 

また、関連するKConfigには

config USB_SPECIAL_DEVICE bool

"Only Support special devices" depends on USB

default n help if you say Y here,then only support special device!!!

という項目と、hub.cに以下のような定義がありました。

#ifdef CONFIG_USB_SPECIAL_DEVICE
    if(special_match_id(udev, special_id_list)) {
        if (retval >= 0)
            retval = -EINVAL;
        goto fail;
    }
#endif

どうやらここに指定していないUSBデバイス

認識時に振り落とされるようです。

では、ここで指定されているVID/PIDが何の製品なのか確認してみましょう。

VID Vendor Name PID Product Name
14CD Super Top 8601 4-Port hub
0CA3 Sega Corp. 0024 同梱Pad ?
0C3A Sega Corp. 0025 同梱Pad ?
0BDA Realtek Semiconductor Corp. 5411 おそらくUSBHUB
05E3 Genesys Logic, Inc 0608 USB HUB
2109 VIA Labs, Inc. 2817 おそらくUSBHUB
1A40 Terminus Technology Inc. 0101 USB HUB
1DD8 BUFFALO  000f BSGP1204 
1DD8 BUFFALO  000b BSGP1601
0079 DragonRise Inc 0011 GamePad
 
というリストができました。
公開されている情報と同じ…ように見えますが、見慣れない「DragonRise」というゲームパッドが見えています。
drivers/hid/inputあたりを確認すると、なぜか0C3A:0024や0025の製品が、このDragonRiseというゲームパッドのドライバ内でハンドルされています。
また、configでDragonRiseを有効にした時に同梱Padも認識されるようになっています。もしかすると、これが実質標準のゲームパッドハンドラで、そこに挿入する形で同梱のドライバをハンドルさせるようにしたのかもしれません。
 
さて、このあたりが事前に情報の出ていた「特定のHUBやゲームパッドしか認識できない」という挙動の原理のようです。
この辺を修正するか、デバイス側で調整してやれば認識するようになるかもしれませんね。
カーネルコンパイル&書き込みが必要なのでまだまだ先の話になると思います)
 

メガドライブミニ (Genesis Mini) をハックする(1)

動画とか、discordとかに流れてきたゲーム機レビュアー?の人の画像を見てハックの準備を進めています。っていうかずいぶんわかったぞ。

もう準備、っていうよりハックの実作業といっても過言じゃないだろ。

 

メガドライブミニの基板を見ると、ファミコンミニとかのR16が乗ってる基板のレイアウトと部品の並びは同じで、引き出されてるペリフェラルの並びが同じようにしか見えない。発振子の出てる位置も、USBの引き出し位置も一緒。
メーカが同じで、シリーズが近ければ大体似たようなピン配置になることから考えて、R16/A33系統、もしかしたらちょっと上位ぐらいのSoCが乗っていて、ピンアサインはほぼ互換っていうか一緒なんじゃないか。

リセット+USB挿入でFELモードに入るところまでは確認されてるらしいけど、本体を手元に持っている人はそれ以上詳しくなくてわからないらしい。

sunxi-toolsで soc idがなんて出るかが気になる。

もしも違うidが出たとしたら、

https://github.com/linux-sunxi/sunxi-tools/blob/master/soc_info.c

ここに適当に互換しそうなやつを追加して試してみればいいんだよね?
コンパイルの準備をしておこう。

 そして、ファミコンミニのu-boot/kernelでは、UART0がPortFに割り当てられてたんだけど、これはコンパイルオプションでPortBにも割り当てられる。っていうか、そうじゃないとSDカードポートと競合する。今回SDカードポートは出てないようで、
基板をひっくり返してみたところ、仮にR16と同じピンアサインだったらまさにジャストの位置からPB0/PB1(UART0 TX/RX)がテストパッドに引き出されてる。

 


もう間違いなくこれがUARTピンだと思う。

SoC周りにあと2本パッドがあるけど、まだそこはわかってない。もしかしたらデバッグトリガがあったりなかったりして。

 

というわけで、届いて速攻でNANDを引っぺがす前に、UARTを探すっていう作業はたぶん済んだ状態まで来た。

あと2週間も待つの…????

 

 

I saw this movie and get some pictures from friends.

www.youtube.com

 

 

 

A snapshot from the Movie tell me many many information to prepare hacking.

 

SoC(System On chip) like as a CPU is Z7213 from "ZUIKI" but is is seems to be having Allwinner's core.

http://www.zuiki.co.jp/products/z7213/

 

f:id:honeylab:20190905215816p:plain f:id:honeylab:20190905220403p:plain

 

This PCB's artwork is close to NESC/SNESC 's PCB layout.
I think Z7213 has upper compatible to R16/A33 Soc from AllWinner.

 

Because .....

This table is pinout of R16.

 

f:id:honeylab:20190905220742p:plain

 Right Bottom has X'tal in/out,Right Top has USB0/USB1 Pattern.
Bottom Center has RAM's wire,and Left Side has NAND wires.
There is no contradiction.

 

f:id:honeylab:20190905221914p:plain

I believe each SoC has compatiblilty core but not only pin-out.

And this picture is of other side of Genesis Mini's pcb around SoC.

f:id:honeylab:20190905223131p:plain

 

https://linux-sunxi.org/Nintendo_NES_Classic_Edition

PB0/PB1 is UART for the "mainline u-boot" default UART0 pins.
Or "legacy u-boot" can use this pins for UART0 with configuration.

I see PB0 and PB1 wires are taken out to TEST PAD.
I can use UART console without doubt with soldering when the console will arrived.
If the stock kernel will not accept console login or hack,but SEGA must be show the source-code of u-boot and Linux Kernel.
I can compile them with enabling UART access and run new u-boot from USB FEL mode.

 

 

未来からやってきたメガドライブミニ最速解析本

技術書典7でうちの島が別室になっていて全然お客さんが来なくて3時ぐらいにもう帰ろっか…っていう雰囲気になっている嫌な夢を見ました!勘弁して!!!

 

令和最初のゲームハード最速解析本

技術書典7で頒布予定です。

]techbookfest.org

 

最速解析本の進捗がやってきたので貼っておきます(どういうことなんだってばよ)

(未来の自分が鋭意執筆中なので内容は刻々と変わっていく予定です。)

f:id:honeylab:20190904083349p:plain

f:id:honeylab:20190904083430p:plain




9/22 池袋サンシャイン 技術書典7に出展します。

 

techbookfest.org

techbookfest.org

 

今回のお品書きは以下の予定です。

  • NO HACK,NO LIFE! Vol.1 (予価1000円)

このブログで紹介したりしなかったりした機械の分解・解析・改造を再編集したものです。ドンキGPLカメラやレトロアーケード、フォトフレームの改造詳細、
そして、児童館にあった30年前の大型電気遊具を修理したレポなどなんと100p予定!

f:id:honeylab:20190828144235p:plain f:id:honeylab:20190828144324p:plain

9/19に発売されるメガドライブミニを速攻で分解して解析し、本にまとめて9/22に頒布してしまおうという無謀なチャレンジ。果たして実るか。成果が出てれば500円。

前回の技術書典やBOOTHで販売した本、フォントや版の大きさが悪くてかなり読みにくいものになってしまった反省を踏まえて、再編集・再印刷して少数発行します。
前回お求め頂いた方には、ご購入が分かる写真の添付またはアンケートにお答えいただくことで、新版のデジタルデータをDLできるようにさせていただく予定です。

 

以上3点、果たして間に合うか! 結果は現場で!

 今回の技術書典は2フロア使用しての開催とこのことです。
「はにらぼ」のブースは「け36D」(3階の中央付近)です。
会場にお越しいただいた読者の方、ぜひお声がけください。

 

 

胎児超音波心音計 エンジェルサウンズ Angelsounds の修理

妊娠12週程度以降から胎児の心音や臍帯音が聞けるということで、一般的な聴診器が売っていますが、超音波ドップラー音を復調して聞けるようにする、息子の胎児期間中に愛用していたエンジェルサウンズという機械。

 

 

 

 

f:id:honeylab:20190705102140p:plain

こいつ、メルカリで買った上にずいぶん酷使されたため多少傷んできました。
具体的には、電池ボックスの爪が折れ、2つあるヘッドホン端子のうち片方しか機能せず、それも接触不良になっているようです。

(※現在、メルカリでは医療用機器の売買ができなくなったと聞いています)

その程度のメンテナンスができないわけはないのでとりあえず、開けてみます。

ここが超音波発信・受信部のようです。ピエゾスピーカを半分に割ったような素子が、多少角度をつけて貼り付けられています。

f:id:honeylab:20190705102915p:plain

あと、これジェルを塗って使うということもあって、ミゾにホコリが溜まって汚ねぇw

なかなかアナログチックな基板。

左下の74HC04とそのそばのセラフィルが超音波発信部かな。
右下のMC1496は初見。AM変調ICらしい。
LM324がOpアンプ。そして今回直したい出力周りはLM386が一個だけなので、
最後に単純に分岐しているだけのようです。

 

f:id:honeylab:20190705103207p:plain


ジャックの根本にクラックしたようなところは見えませんが、
片方は生きているので、最悪ジャックを交換すれば治るのでしょう。
部品を手配して、その間にオシロで波形でも見てみたい気もしますが、
あんまりブラブラさせてこの線切っちゃうとやなのでさっさと直しましょうかね。

(※普通の人は、分解しちゃだめですよ。)

MA-E350/NLWを設定するメモ

沖縄県南大東島に設置する気象モニタリングシステムに使うため今回選定した機器。

www.centurysys.co.jp

docomoSIMカード使用でインターネットに接続できるいわゆるLinuxマイクロサーバ。
いままで類似案件では Openblock IoT BX1/EX1を使っていたんだけど、

www.plathome.co.jp

今回離島環境で電波状況が不安なため、外付けアンテナを使用できる機器として探していて、本当はArmadillo IoT G3Lを使うつもりだったんだけど、欠品により納期がずいぶん先になりそうなため次点としてこのMA-E350/NLWを選定しました。

armadillo.atmark-techno.com

遠隔地で動作させるため、本体にSoftEther VPN Clientを入れてリモートメンテできるようにしておく。また、配下に無線LANを使った各種センサを接続することがあるため、wlanをhostAPにして、wlanに接続したclientはppp経由でインターネットに接続できるようにする、というのを実現するためにやったことをまとめておかないといつでも忘れることができるので頑張って記録する。

ファームウェアの更新

まず、手元にある6台の機器のファームウェアLinux Ubuntu 14.04ベースとちょっと古めで、最近勉強した自動起動周りが使えなくなって再勉強が必要になっていた。Ubuntu18ベースのファームウェアも公開されていたが、安定しているか不安なので使わないでいた。しかし、どうも買った直後ぐらいに大規模更新があって、新しい出荷からUbuntu18ベースになるとのことだ。もしも追加納品が発生すると後からめんどくさくなるので、頑張ってファームウェアの更新をすることが必要だった…

https://ma-tech.centurysys.jp/doku.php?id=download_software:mae3xx:start

さて、どうにかファームウェアを更新したら追加パッケージを入れていく。

SoftEtherを入れるのにgccコンパイラが必要なため apt-get updateする
その他、あとの手順で必要になるパッケージは一気にまとめてgetしておこう
apt-getで入れたパッケージは overlaycfg -s other をしないと次回起動時にきれいさっぱり消えるのでややこしい

FutureNet MA-E300シリーズ | お客様サポート | CENTURY SYSTEMS

と、思ったけどsoftetherコンパイルした後はいらなくなるかもしれない。

一旦ビルドしたバイナリはどっかに取っておいて、gccのことは忘れてもらってもいいようだ

SoftEtherのビルドと設定

ソースパッケージを落としてmakeする。
自動起動の設定はUbuntu18はsystemdでやったほうがいいので

https://qiita.com/kumasun/items/6fd9ddafc8ea6278f088

ここを参考にした(これはServerなのでClientに適宜書き換え)。

VPN用のipアドレスは /etc/network/interfacesに書いておく。

allow-hotplug vpn_vpn
iface vpn_vpn inet static
address 192.168.37.12
netmask 255.255.255.0

接続設定の作成をコマンドラインからやるのはかなりめんどくさいが、vpncmdコマンドでリモート管理を有効にして、Windowsマシンに入れたGUIツールで接続設定を書き込んだ。

root@plum:~# systemctl status vpn
vpn.service - Softether VPN Client Service
Loaded: loaded (/etc/systemd/system/vpn.service; enabled; vendor preset: enab
Active: active (running) since Sun 2019-06-09 21:24:51 JST; 16min ago
Main PID: 867 (vpnclient)
Tasks: 16 (limit: 1140)
CGroup: /system.slice/vpn.service
tq867 /root/vpnclient/vpnclient execsvc
mq868 /root/vpnclient/vpnclient execsvc

Jun 09 21:24:45 plum systemd[1]: Starting Softether VPN Client Service...
Jun 09 21:24:50 plum vpnclient[851]: The SoftEther VPN Client service has been s
Jun 09 21:24:51 plum systemd[1]: Started Softether VPN Client Service.

 

root@plum:~# ifconfig vpn_vpn
vpn_vpn: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.37.12 netmask 255.255.255.0 broadcast 192.168.37.255
inet6 fe80::5c4c:1fff:fe35:e9e9 prefixlen 64 scopeid 0x20<link>
ether 5e:4c:1f:35:e9:e9 txqueuelen 1000 (Ethernet)
RX packets 645 bytes 44720 (44.7 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 543 bytes 45122 (45.1 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ルーティングの設定

 

おもにここを参考に

http://ami-gs.hatenablog.com/entry/2014/03/20/175332

eth0になっているものをすべてppp0に変更しただけでうまく行った

あとhostapd

https://qiita.com/wannabe/items/a66c4549e4a11491f9d5

 

Planex ドコデモセンサー WS-USB01-THPを分解してみた。

プラネックスから発売されているこいつ

www.planex.co.jp

どうやらUSBから電源を供給、WiFiからクラウドに環境データを送信できるもののようです。

中身が気になったのでさくっと買って分解してみました。

外観

f:id:honeylab:20190605160936j:plain f:id:honeylab:20190605160259j:plain

ケースは接着されていないため、隙間に何か突っ込んで開けます。
(適当にやりすぎて見事にツメが折れましたが)

基板写真

 

 

f:id:honeylab:20190605160311j:plain

基板に書いてある「AMB7M03」というのをキーワードに探すと、どうやら
RealTekWiFi統合マイコン RTL8711AMのモジュールが載っているようです。

この辺をページ内検索すると見つかります。 

https://www.cnblogs.com/shangdawei/p/6534605.html

 

QRコードのシールを剥がしてみましたが何も書いてありませんでした。
電源投入直後にAPが立ち上がり、HTTPでアクセスするとClientとしてつなぐSSIDの設定画面になります。
あとは、説明書にクラウドの使い方とかが書いてありますが、残念ながらそっちには今のとこ興味がありませんので、その辺を探しにした方はごめんなさい。

 

f:id:honeylab:20190605160322j:plain

こっちには「G11AMEBAIR002」と書いてあります。この単語では何も見つかりませんでした。

さて、さっきのリンク先にあったように、このチップ RTL8711AM は ARM Cortex-M3相当のMCUを内蔵しているとのことです。

http://www.apmcomm.com/images/ds/enrf0063en.pdf

また、基板上にもISP用と思われるピンヘッダがあるためプログラムを書き込むことも理論上は可能かと思われます。

しかし、…開発環境はまぁgccだろうとしてかっちりこれを整えるのは大変だよな、と思って探していると、なんとRTL8711AMが乗ってArduino IDEから扱える環境があるようです。

http://www.rakwireless.com.cn/en/WisKeyOSH/Creator

おおお。そして、こいつの名前は「Creator Pro-Ameba RTL8711AM WiFi Module」と言うらしいです。
"Ameba"…聞いたことあるな。
いや、さっき書いてあった「G11AMEBA002」にしっかり書いてあるな。
どうやらこの辺の人らが作ったなにかなのかな?
もうすこし調べてみたらもしかしたらドンピシャな何かが出てくるのかもねw

基板上にあるISPヘッダとTPが2本、これが何なのかあとから調べてみたいと思います。