DDRminiで自前ビルドのMAMEが動いた!
ここまでのまとめ
さて、すでに分かっているように、こいつの中にはZUIKIの手下の開発会社がカスタムしたDDR専用のMAMEがインストールされています。
完全にそれ以外を除去したわけではありませんので、それ以外の関連のゲームは少しの手直しで動作させることができる可能性があります。
Kinda broken in some ways (savestates don't work) but it is playable. The background videos cause some hitching though but that also happened in normal MAME too so I guess that's to be expected. pic.twitter.com/qEpJiWkM85
— 987123879113 (@_987123879113) October 10, 2024
しかし、それ以外のゲームを動かすためのコードは入っていない可能性がありますし、通常のMAMEで使用できる各種機能やパッドのカスタマイズなどは使用できません。
この機械、8コアのARM64が入っているというこの手の機器としてはかなり高性能な演算機能を持っていますので、エミュレーション性能もかなり高いはずです。
それを利用するために、どうにかしてMAMEを入れてみたいところでしたが。
MAME全然わからんw
さらにクロスビルドということもあって全然わからん。
あちこち探したところ、似た環境のARM64であるRaspberryPiように一発でMAMEをクロスビルドしてくれるツールキットを見つけたのでこれを使ってみました。
途中、変な制約につかまってまともにコンパイルできるまで2日ほどかかってしまいましたが、最終的に見事動作する環境を作ることができました!
よっし!!!!
— ひろみつ@リバエン屋 (@bakueikozo) October 11, 2024
MAME 0.270 on DDR mini
パフォーマンスが出るかはわからん!が、動いたらもうあとはすぐやろ!
昼寝する pic.twitter.com/PcHy5dj5Av
音声・音量周りの調整ができないなど不便な点はまだまだ残っていますが、HDMIも簡単に使用できるため結構なんでもできる気がします。
これだけ動くDDR筐体の形をしたMAMEマシンなら、まぁクッソ高いわ!というところから、ちょっと高いかも、ぐらいまで楽しめるんじゃないでしょうか。
とりあえずは、DDRやBEMANIシリーズがどのぐらい動くのかは気になるところです。
ただし、内蔵のMAME(シュリンク版)は、ver0.24ぐらいからのフォークっぽく、一応は謹製扱いのパッチワークがされていると考えると、もしかしたら内蔵のやつの方が再現度が高かったりするんでしょうか。わかんないですけど。
まぁ、本当に必要ならバックポートしたらいいんだと思うんですけどね。逆アセンブルするしかないけど。
で、動きました、とはいうけど、残念ながらみんながみんなぱっとインストールできる状態にはなっていません。少なくとも私はSDカードのはんだ付けからrootfsを書き換えて、USBへのバックドアを作っています。
それに対して、いつものようなFELモードでの書き換えの道も開かれたようです。
Here's the rough write up. I included all of the patches, tools, and scripts I made for this project. I suck at writing docs so someone should probably make an easy step by step guide on how to use everything.https://t.co/DKEz6fb8cD
— 987123879113 (@_987123879113) October 9, 2024
これを使えば、はんだ付けなし、本体を分解して基板を開いてボタンを押しながらUSBを接続してインストール、という手順でインストールすることができるようになるでしょう。それまで、もうちょっとだけこの戦いは続くんじゃ。
DDRMini解析まとめ
上の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をコンパイルして突っ込む、ことは可能かと思いますので、追々やっていきたいと思います。まずはここまで。
DDRMini 作業ログ
Avaota-SBCというDDRMiniにかなり近い構成のボード用にビルドしたバイナリが断片的に動くので、これを使ってファームウェアを吸い出しつつ、逆アセンブルを続けているところではあります。
やったーeMMCの中身をSDカードにまるっと書きだすプログラムができたぞー… pic.twitter.com/Bute6RmR34
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 17, 2024
・UART0(PB9,PB10)が明確にデバッグ用に出ているがLinuxの先ではDTSで無効化されているのでほとんど何も出てこない。が、最初のBOOTの間はdの先行入力でちょっとだけメッセージが出る。
・BOOT0 (emmc上0x2000)がboard_initした後、MMCからTOC1パッケージを読み込んでいる。このへんはこの二つのページの機材がよく似ている。
Allwinner H700 Firmware extraction - KNULLI Wiki
Teclast P85T - linux-sunxi.org
・上にあるように、u-bootのエリアがあるけど実はu-bootじゃないのかな、と思って読み込んで逆アセンブルしているけど、本当にu-bootっぽい。
「U-Boot 2018.07-00009-g40a0e96-dirty (Jul 24 2024 - 13:19:23 +0800) Allwinner Technology」
このツリーは、ベースの2018に山ほどのパッチをしてようやく動かしているものらしい。
・このTOC1がemmcのbootパッケージから!ANDROIDを読んで起動している
・その次のパーティションがrootfs、ここにゲームもROMも入っている
・ゲームのROMは独自の暗号化がされている。
・rootfsを書き換えるだけである程度動かせるとは思うけど、現状何も出力できないしシェルにログインできないので大変やりにくい
・どうにかシェルを使うためシリアルコンソールの有効化を試みている
・UART0はLinuxのDTSで無効化されているので起こすのは難しい
・配線を辿るとUART2もつながっている。
うーん、これPB9,10が出てるってことはPB0-6ぐらいが出てる可能性あるな
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 20, 2024
PB0,1が出るならuart2が生きてるんだよな pic.twitter.com/kB3e9OCcAX
・ENVのパラメータをいじればttyS2でコンソールが起きるはず
・ENVをいじって書き戻そう!
・書き戻した
・壊れた。
壊れた。
書き戻す場所を間違えたのか、値がおかしいのか。
もっかいeMMCのフルダンプを取ってどこを壊したのか調べてみる。
遠い。
DDR miniのハッキングがいよいよ本格的に始まった
分解して下調べをしていたDDR mini
既にファームウェアアップデート用のUSBを探しそうな画面が発見されていますが、
これは適当にUSBを挿せばいいものではなく、必要な条件のもとパッケージングしたものに対して発動するものだと思われます。
DDRmini 本体のStartボタンを左右同時押ししながら電源投入するとファームウェアアップデートモードに入るんだけど、コレってワンチャンあるのか!? #DDRmini pic.twitter.com/Z7P9Nc5ekK
— Иaoya@でんきや (@Smith708) September 13, 2024
その条件を調べることや、他にバックドアがないかどうかを調べるため、内部のソフトウェアを調べていきます。
で、どうやって?
まず、このAllwinnerのCPUは、FELモードというUSB経由であれやこれやするためのモードが備わっていますが、ここで行うことができるのはプログラムの転送ぐらいです。
まずFELモード上でu-bootなどのブートローダを転送して実行し、そのあとファームウェアを転送して書き込んだりすることができます。
過去にさんざん弄ったファミコンミニの系列はこの方法でカーネル書き換えが進められてきました。
しかし、今回採用されたA527というCPU、かなり新しいもので従来使われていたようなu-bootが対応できていないようで、まともにコンパイルできるツリーが見つかりませんでした。そのため、何か他の方法を使わなければなりません。
いろいろ探していたとこ、A527やその互換のT527というCPUを搭載したAvaotaSBCというオープンソース設計の組み込みボードがあるのを見つけました。
また、それに対応したベアメタルの開発環境、そしてブートローダとLinuxの入ったOSイメージがあります。これが使えそうだと踏んで調査を行いました。
Allwinner系のCPUの多くは、起動シーケンスとしてeMMC(8bit onboard SDC2)のほかに、SDカード(4bit SDC0)やSPI Flash、NAND等いろいろなストレージから起動できます。
A527は都合がいいことに、基板上のeMMCより先に、今回基板上からオミットされたSDカードスロットから起動することがデータシートに記載されていました。
そのため、まずSDカードスロットを復活させました。
しかし、SDカードソケットを付けてもそのままでは使えません。
きちんと使えないように、各信号線が基板上で分断されていますので、そこをすべてジャンパし、またCLK以外の線は10Kオームでプルアップする必要があります。
よしよしよし!謎が解けたぞ
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 12, 2024
この青色をジャンパ、赤色は10kでプルアップすればSD繋がるはず!
CLKとDET、ワザとシールドに隠したな! pic.twitter.com/aOTKnduWcf
この配線を行い、SDスロットの信号を見ながら電源を入れるとCLK信号が観測され、SDカードを探しに来ていることが確認できました。
よしよしよし 電源投入時にSD初期化CLK出てるぞ! pic.twitter.com/Jbkb4JSzF3
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 12, 2024
次はSDカードの中身の準備です。
先ほど見つけたベアメタルの環境をコンパイルし、テストコードをいくつか書いてみます。
一応動いているようですが、動いた結果が観測できません。
なぜなら、標準入出力であるシリアルポートが発見できていないからです。
今までのミニコンソールは、それっぽいところを当たりながら電源を入れればすぐにブートローダやLinuxのメッセージが表示されていました。が、今回は徹底的にその動作が潰されていて、全く信号が確認できません。
とはいえ、シリアルの配線は絶対に残っているはずです。
うーん.... pic.twitter.com/QG5utWIE0w
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 12, 2024
データシートとピンアサイン、そして基板上の配線を穴が開くほど見つめながらプログラムを調整したところ、見事にシリアルポートをの出力を確保できました。
うっしゃぁキタでこれぇ!
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 14, 2024
取り付けたSDスロットにA527用のベアメタルの開発環境で作ったバイナリ書いてシリアル出力できたで!
やっぱ元のDDR環境ではシリアル出力が完全に抑制されてるように見える
おかげで探すのに大変手間取ったUART0はPB9,10のマッピングになってたぞ#DDRmini https://t.co/M5TbXK1Ast pic.twitter.com/3WO3T1n9pQ
プログラムが動いたらこっちのもの。eMMCの中身を読み込み、SDカードに保存して解析すればいいのです。
というわけで、先ほどの環境からSDカードを使っているサンプルを改造し、実装してみましたが。。。。。動かん。っていうか、動きが変。
どうやら、SDカードとeMMC、どちらかしか使わないと仮定してあり、各パラメータを保存するメモリを一つ分しか確保しないコードになっていました。
これを修正し、カード二枚が同時に使えるようにしたところ、無事、eMMCとSDカードどちらからも読み込めるようになったんですが・・・・書き込めない!!!!
オンボードeMMCが認識できたので、これで中身が吸い出せるぞ。が、DRAMを初期化しようとするとおそらくパラメータがほかの基板用なので失敗してしまう。なので起動環境内のRAMでやらないといけないが・・・何キロかはあるといいな。マップどこだ。
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 14, 2024
最悪シリアルからhexdumpなんだけどw… pic.twitter.com/4Qo1VDX5xV
さんざん悩みつつ調べた結果、書き込み部分が実装されていませんでしたw
というのは一寸違ってて、実はSDカードの伝送、高速化のために普通はDMAによるメモリ転送を使い、まとめて転送するようになっています。
今回のベアメタル環境、DDRMiniの環境と完全に同じではないため、基板上のDDRメモリの初期化が行えず、大きなメモリ空間やDMAが使えない状態でした。
そのため、DMAではなくFIFOに1バイトずつ書き込む”CPU転送”モードを使う必要があったのです。サンプルソースのドライバでは、DMAの部分は読み書きどちらも実装されていましたが、CPU転送、レスポンスの読み込みにしか使わないので書き込む部分は省略されてたんですね。気づくのにしばらくかかりました。
Linuxのドライバのソースなどを参照し、この部分を実装すると、見事eMMCの内容をSDカードに書きこむことができるようになりました。
やったーeMMCの中身をSDカードにまるっと書きだすプログラムができたぞー… pic.twitter.com/Bute6RmR34
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 17, 2024
書き込めたらこっちのもの。中身を調べていきます。つづく。
クラファン支援してたDDRminiが届いたので例の儀式
※ちょっと編集しました
SDカードからのアップデートについて考えすぎてて、USBメモリ経由でのアップデートが不可能ではないことを忘れていました。。。
届いた でかい
外見、まじで満足感がある
スピーカのところの丸ネオン、LEDとアクリルとかでごまかすんじゃなくて、
ちゃんと粒々入りの高輝度LEDがビカビカしてて大変素晴らしい
という外見のレビューはほかの人に任せて、当然こちらは中身をレビューします。
#DDRmini 届いた!!!でかいwwww満足度高い!! pic.twitter.com/zTyDurHtYE
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 11, 2024
がっつりヒートシンクの付いたCPU、外してみるとAllwinnerのA527というのがついています。
なんと8コアx2Gヘルツの結構最近出た強力なCPUです。
これまでZUIKIが出してきたミニコンソールはZ7231というAllwinner A33と同等のCPUを詰んでいましたが、これは16ビット時代のCPUをエミュレートするのが精々で、事前人試したところプレステレベルのエミュレーションでもまともに動かなかったので、何かしら上位のCPUを搭載してエミュレーションにするか、マジで再実装してそのクラスに落とし込むかどっちかだと思っていたんですが、思ってたより強力なの乗せてきたな、という感じです。
基板のピンを当たってみましたがどうやら今のところ電源投入時のシリアルメッセージが表示されず、使用しているブートローダーがわかりません。
公開されているOSSの中に、u-bootが入っていないので、うっかり忘れていなければu-boot以外のものが使われている気がします。
ゲーム環境ですが、メニューからゲームシリーズを選んで起動した瞬間に、MAMEなどでおなじみのCDイメージの名前がちらっと表示されるので、間違いなくエミュレーションであると考えられます。
どういうベースで実装してくるかと思ったがemuベースだなこれ….まじか….まあそうなるよな そのためのA527 pic.twitter.com/xkUQqz3tZO
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 11, 2024
版権が取れなかったものは曲選択時にそのメッセージのテクスチャと、曲が始まると無音で譜面が流れるようになっています。
実はこの辺の作業、おそらくROMかエミュレータにちょっとフラグを立てて動かすレベルのパッチを当てて対応していると考えられます。
全部動くようにしといて、取れなかった奴はならない、とできるからね。
いや、これマジで英断だと思う。曲流せないならリストから外すもん。
でも、他の人の反応をを見てもわかるように、クラファンで支援するレベルの人は脳内再生が余裕なのでこれが大正解だったように思えます
で、一部の人がブーブー言ってるSDカードシステムが実装されなかったがどうして発生したのかに関して、基板を調査して想定される理由を検討してみましょう。
まず、基板にSDカードスロットのパターンが残っています。ので、普通にここに該当するパターンのソケットを取り付ければSDカードを挿すことができます。
が、それでは当然動かないです。
基板を拡大してみると、そのほかの小部品が実装されていません。
SDカードの配線が切断されている部分はもともと開発段階では0Ωジャンパが実装され、SDカードを認識できるように工夫してありました。
こうしておけば、基板のパターンを再変更して製造しなくても、実装段階での部品リストからこのジャンパを外せばいいだけになるため、コストがかかりません。
つまり配線がジャンパで切り離せるようになっているのは
「最初から製品版では削除する予定だった」からです。
搭載されているAllwinnerのシステムはアップグレードにUSBを使った「FELモード」というものがあります。しかし、ベータテストなどの段階でこれを使って毎回ファームを書き換えるのはPCも必要なので大変面倒です。そのため、必要なソフト本体をSDカードに入れて、差し替えて簡単に比較デバッグができるようにしてあったんでしょう。
どうも、発表会なんかでアップグレードを。。。みたいな話が出たのは、
担当者がうっかり口走っただけだと思います。
結果、真に受けちゃった人が出たのは失策でしょうが、最終発表仕様に書いてなかったものが当然載ってくるわけはないとは思うので騒ぎすぎな気がします。
で、先述したようにSDカードは配線が切断されているためまともに使用することができません。代わりに「FELモード」を使ったアップデートは原理的には可能ですが、USBを繋いだだけではだめで、FELモード用のピンをLOWにしなければいけません。
で、もちろんそれは開発中には必要になるため、特定のボタンなどに割り当てられた隠し機能になっていることが多いです。今回は分解した基板上、USBコネクタの近くにあるタクトスイッチを押しながらUSB-CコネクタをPCに接続すると、FELモードに入ることが確認できました。
【朗報】基板上のUSB2pコネクタの近くのボタン押しながらUSB-C給電でFELモードです
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 11, 2024
すぐに切れるので、PCEMiniと同じネゴなければ落ちるやつだと思います
あ!ソースどこ!!!!?! pic.twitter.com/MyhnV9WUF4
しかし、このCPU、新しすぎてこれに対応したFEL書き込み用のプログラムが転がっていません。まぁ、もちろんZUIKIは持ってるわけですが、
このモードに入るために分解が必要なので、ユーザー側でのアップデートが案内されることはおそらくないと思います。
※ですが、よく考えたらUSBメモリにファイルを入れて更新、の可能性がありました。
ーーーーーー 追記 -----
イーグレットツーミニはファームウェアアップデータをちゃんと内蔵していて、SDカードからですがアップデートができるようになっていました。
DDRMiniでも、ファームウェアアップデータを呼び出す方法が発見されたので、
このアップデータがUSBメモリに対応していたら同様にアップデートできるかもしれません
ーーーーーー 追記ここまで -----
で、それだけではちょっとつまんないよね。
ということで、例によって改造していくわけです。
まず、FEL書き込みをどうにかするために、本体側のプログラムを探らないといけません。普通はどっかにシリアルデバッグが出ているはずなんですが、全然見つかりません。困った。
もう一つの手段として、本体側のプログラムを吸い出すためのプログラムをSDカードから動かせないか、ということです。
このCPUであるA527のマニュアルを参照してみると、起動デバイスの検索順として、まずMMC0、続いてeMMC(MMC2)、見つからなければ基板上のそのほかのFlashを探す、ということになっています。ただし、この動作をeFuseというワンタイム設定レジストリで無効にすることもできます。FELから読んでみたところ、そうはなっていないように見えます。
ここで、MMC0はさっきから騒いでいる基板上のSDカードコネクタです。ここから起動できないでしょうか。
切られた配線を基板を拡大して追っていくと、大体の配線を繋ぐことができました。
本当に起動時にSDカードを探しに来ているか、ということは、オシロスコープでSDカードのピンを見てみるとわかります。
こちらに書かれているように、SDを探しに来ていればCLKピンに反応があるはずです。
参考:秋月白箱の調査
FLASH剥がしてもmicroSDスロットにクロック出てるのでカード起動ワンチャンあるかも知れない。 pic.twitter.com/hwCw6ooa22
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) March 17, 2023
何回か試してみますが、何も起きません。おかしい。
よく見てみると、CLKであるはずの配線、切断されている場所が見当たりません。
もしかして、と一度組み立てた基板のCPUヒートシンク、シールドを外してみると・・・なんとこの中にあと二本、切断されている場所がありました!!!
これを繋いでみると。。。。
やった!!SDクロックが来ています。
おそらく起動シーケンスとして使えるのは確実。
このSDカードに必要なブートローダーとOSを書いて、EMMCを吸い出せば中の構造がわかり、それに対応して改造したものを書き戻せば今回の制限が外せるかもしれません。また、おそらくエミュレーションベースで、ある程度汎用性があるはず。
このCPUを詰んでいれば、現状のポータブルなSystem573のエミュレータとしてはかなり強力な環境だと思います。つまり、ほかのACゲームも突っ込めるかも。という希望があります。
で、ブートローダーとOSは・・・・・?
とりあえず、このCPUを使った開発ボードや、u-bootのポーティングをやってる人と、そのほかのベアメタルBootloaderは一応あるっぽいので、まずはSDカードからこれを起動できるようにコンパイルする環境づくりだ!!!
AllwinnerT527はA527の自動車用(順序が逆かも)で、A523とは内部がだいぶ似ているはずです。ぴったりのが無くてもその辺から漁るしかない。
技術書典16の託児サービスを使ったら売り上げが倍増した件について
今回ブログの方で告知するの忘れてましたが、技術書典16(オフライン会場)に参加してきました。
過去記事を読んでいる方は知っていると思いますが、うちには呼び込み君とその所有者である息子と、その妹がいます。
で、前回は特にその呼び込み君の本を作ったことと、うちの家庭の事情で子供たちを家に置いて私がオフライン会場に出てくることは難しいため、前回の技術書典15ではオンライン参加、その前の14ではオフライン会場のブース裏に子供を2人抱え込んで参加しました。
久しぶりに #技術書典 14 会場出展します!
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) 2023年5月17日
配置 え15「はにらぼ」です
お品書きは今のところこんな感じ
Qrio本がもし前に合えばちょっと作ります
既刊の電子版を会場もしくはオンラインで決済・DLできます。
あと、自由に測れる体温計置いときますね(怒られなければ) pic.twitter.com/rpJX25Snpf
その前、多分6かな?では外部の一時預かりを利用しました。
https://aieiyohogakuen.com/ (いまはないようですが、当時池袋園がありました)
で、7の時になんと技術書典の運営としてサークル参加者向け託児サービスが始まり、これだ!と申し込んだのですが、息子がまさかの発熱で託児することができず、どうにかうちで見ててもらって私単騎で参加しました。
(コロナ禍以前のため、家族の発熱に対してはまだ制限がなかった時代の話です)
その後、コロナ禍を受けて託児サービスが難しくなり、提供が休止されていました。
そのため、技術書典14では子供をブース裏に抱え込んで参加することにしました
技術書典、普通の即売会からは考えられないほどブースが広く(1サークルで180cm机1卓)、ブース裏もまぁまぁ、こどもがうっかり転がっても大丈夫なぐらいな広さはあるんです。なぜか。
あとは子供たちがブース裏で極力退屈せず、最悪ずっとYoutubeでも見せておけばいいやと思ってやってみましたがこれがなかなか大失敗でした。
そんなに悪さをすることはありませんでしたが、まず到着時点で子供見ながらの移動・搬入のおかげでまずサークル入場遅刻。そのため開始前チェックに間に合わず販売開始が遅れ、それに伴いろくにPOPも飾ることもできずテーブルの上は本が並んでいるだけ。
どうにか値段表はつけましたが、表紙だけでは大した訴求もできず、前を通る人の目には映ってんだか映ってないんだかのままみんな素通りしていきます。そして暇だとぐずり出す子供達。ああもうw
昼飯も食わせないといけないし、遊びにもいきたいし、で結局15時前には撤収せざるを得ませんでした。
こどもたちが限界なのでぼちぼち撤収します
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) 2023年5月21日
売り上げも過去の過去に子供を外部の一時預かりに委託して参加したときに比べて凄惨な結果になり、参加したという記録が残っただけな感じになりました。
という過去があった上で、コロナ禍を耐え切った技術書典、16で堂々の託児サービスの復活!(だったよね??経緯間違ってたらごめん)やっとキタ!ということで託児を申し込み、新刊を抱えて乗り込むことにしました。
託児サービスについて
「 同人イベントのための託児」と記載されているように、同人イベントの日程に合わせて一時保育を提供してくれている「にじいろポッケ」さんが運営しています。
そのため「〇〇合わせ」と表記されてるのおもろい。
で、普通のイベントとかだと額面を書いていいのか悪いのかあれなんですが、ちゃんと案内されてるので書いておきますが、当然有料です。
https://nijiiropokke.info/?p=6075
このイベント合わせの日は8時間で8000円、とのことです。まぁ安いです。
しかもこの日は水族館遠足らしいです。すごい。
で、恐ろしいことに、「技術書店あわせ」の場合、(事前申し込みが必要です)
技術書典サークル参加者に対して無料で提供されます。恐ろしいです。
必要な持ち物として着替え、おやつ、お弁当、さえ持っていけば無料です。
託児場所も、サンシャインのビルの中なので、売り場からビルの中を5分も歩けば到着します。
活動の様子も随時Upしてくれるので安心です
ランチタイム😋#にじいろポッケ#技術書典 pic.twitter.com/pS056eV3pb
— 同人イベントのための託児 にじいろポッケ (@nijiiropokke) 2024年5月26日
そんなわけで全く子供の心配もせず設営に専念でき、
無事開催時間満了で参加することができました。
売り上げとしても無事十分な冊数を頒布でき、ちゃんと「参加した」感を得ることができました。
終了後お迎えで、子供達からも特に不平不満もなく、十分に遊んでいただいたことがよくわかりました。
詳細なレポートもいただけて大変感謝です。
(↓名前出てますが隠してないので問題ないです)
下の子、保育園ではお昼寝しますが自宅で休日に寝ることはほとんどないんですが、ポックリと昼寝したらしいです。びっくり。
そんなわけで、うちの体制としてはちょうどいいところに一時保育が可能であるか、この施策が行われている技術書典ぐらいしか参加できず、特に技術書典に関しては託児利用者が優遇され過ぎているのではないかという気がしないでもないですが、ちゃんと体制として運営されている、ということでありがたく利用させていただけました。ありがとうございました。
で、新刊ですが、そんなに売れるもんでもなく、万人に刺さるわけではないので物理本は取り置きを残すのみになっています。
その他の本に関しては、引き続き開催されているオンラインマーケットにて電子版をDLしていただくことも出来ますんので、うっかり刺さった方は是非読んでいただけたら嬉しいです。
DAM XG1000の演奏中にTMIDI鍵盤表示風の画面を表示する
いよいよ煮詰まってきました。
元々私がこのカラオケマシンをいじっているのは、カラオケ中に
画面内にただの「見えるガイドメロディ」ではなく、
なんらかの方法で歌唱すべき階名を表示することなのです。
↓正式名称「見えるガイドメロディ」
できれば五線譜、もしくは階名付きのピアノロールを出したい。
そのためには、現在再生している、本来は採点に使用されているデータを横取りし、
さらに画面表示を横取りしなければなりません。
研究に研究を重ね、ようやく全てのデータの取得が完了し、
画面表示の基礎部分ができたので、これから画面表示機能を精緻化させていく予定です。
そのファーストステップとして、DTMをやっていた人なら誰も知っている
「TMIDI Player」に内蔵されている、鍵盤表示画面を実装してみました。
TMIDI Playerには鍵盤表示画面内に、
各チャンネルの和音を解析してコード表示する機能もあるんですよね。
これと同じようにコードを表示してやれば、伴奏補助機能がつくんですよ。
これをどうしても実装したくてな。
↓TMIDIPlayerの鍵盤表示画面。A06のところに「Cm」って出てる
実際に実装した鍵盤画面(WIP)
参照時刻をプレイヤーじゃなくてMIDIデバイスから取得したらデータと同期が取れた pic.twitter.com/CrOXifHNWK
— ひろみつ (@bakueikozo) 2024年4月8日
ここまでできたんだからあと少しだわ。
なんか音符長が想定より長いトラックがあったりして表示が変だけど、
とりあえずメロディがちゃんと動いてるのは見えると思う
っていうけど大変なのよこれ。
その辺の大変な技や、リバースエンジニアリングの手法などは、
5月に開催予定の技術書典16(2024/05/26)の新刊としてまとめて発表したいと思いますので興味のある方はぜひお買い求めください(自分の首を絞めた)