各メニュー項目の内部処理 †
注意とお願い †
この内容にはかなり推測が含まれています。
また,作業量が膨大なため,よろしければ協力をお願いします。
利便のため,次のような表記をします。
- NORメモリのアドレス@0x00000 - @0xFFFFF
- 物理メモリアドレス$0x00000000 - $0xFFFFFFFF
- 仮想メモリアドレスV0x00000000 - V0xFFFFFFFF
- I2C上のデバイスに実装されている,拡張されたGPIOをExGPIOと呼びます。(詳しくはページ下に)
Show UniqueID †
@0xFE0A8~@0xFE0AFまでの8バイトを,逆順に(つまり@0xFE0AFから)1バイトづつ表示させています。
NORメモリは$0x00000000に接続されており,$0x000FE0A8~0x000FE0AFを(またはその物理アドレスに対応する仮想アドレスを)単純に読み込むだけでUniqueIDを取得することができます。
LED Test †
各LEDについての点灯・消灯を行います。
各LEDの点灯方法は,これでいいのかあまり自信はありませんが,以下の通り(だと思われます)です。
試してみて実際そのLEDが点灯・消灯した場合,また間違っていたら場合にも報告していただけると嬉しく思います。
本体側キーボードのLED †
GPIOの<17>ピンをセットすることで点灯。クリアすることで消灯することができます。
セットとクリアはGPIO Pin Output Set registerもしくはGPIO Pin Output Clear registerで行えます。
LCD側キーボードのLED †
ExGPIOのビット6をセットすることで点灯。クリアすることで消灯できます。
電波用LED †
- 赤 $0x0800000Cのビット0を,バイトストアによってセットすることで点灯,クリアすることで消灯できます。
- 緑 $0x0800000Cのビット1を,バイトストアによってセットすることで点灯,クリアすることで消灯できます。
- 青 ExGPIOのビット15をセットすることで点灯。クリアすることで消灯できます。
青だけが違った方法で接続されています。
充電用LED †
- 橙 ExGPIOのビット17をセットすることで点灯。クリアすることで消灯できます。
- 緑 ExGPIOのビット16をセットすることで点灯。クリアすることで消灯できます。
サービスモード,診断モード,EXTRAメニューモード,Zaurusテストモード(これ以降は単にサービスモードと記す)の各メニュー項目について,その内部的な動作が分かったものを記していきます。
I2Cについて(IOExpander含む) †
W-ZERO3[es]のI2Cのアドレス66にはなんらかのデバイスが接続されています。I2Cについては現在はまだ解析途中ですが,今のところアドレス66以外はまだサービスメニューのプログラム上で出現していません。
特に,ExGPIOもこのI2Cデバイスで担っています。ExGPIOはおそらく全部で24ビット存在し,そのビットをセット/クリアするには以下の手順でI2Cに書き込みます。次の手順は,1つの手順で1バイトを送信しているものとします。
- 66<<2+0を書き込む。(I2Cで通信するアドレスを左詰め+書き込みなのでLSBは0)
- 書き込むピンが0-7番目なら192を,8-15なら194を,16-23なら196を書き込む。(おそらくレジスタを表している)
- 書き換えるビットに対応した値を書き込む。(例:ビット12にのみ書き込むときは,12-8でビット4を立てる。ビット3にのみ書き込むときは,ビット3を立てる。ビット18にのみ書き込むときは,18-16でビット2を立てる)
- 書き換えるビットを0か1にセットして書き込む。