Last updated: "2002/10/12 19:23:25 +0900"

小松平良樹プレゼンツ

MPC-10x で Intel Sytem Managenent BUS を垣間見てみる

MPC-102 (101 でも大丈夫だと思う) + BIOS 146JK、 あるいは MPC-103 + BIOS 209JK で、 Intel System Management BUS を経由して、次の情報を取得してみよう。

fivaSmbus_20021012_01.LZH

アーカイブ中の FIVASMB1.EXE は BIOS 146JK 用、 FIVASMB2.EXE は BIOS 209JK 用です。

BIOS に対応していない *.exe を動かしてしまうと、ハングアップしてしまうかも しれません。ご注意ください。

BIOS のバージョンが違うと、きっと動かない気がします。146JK, 209JK 以外の方は ごめんなさい。

BIOS の SMBUS 処理のエントリポイントをハードコーディングしてしまっているのだ。 しかもなんかよくわからないところが多々あります。

MPC-102 + BIOS 146JK + Windows98SE 上では、動いているように見えます。

実行例:

[D:\home\komatsu\fivaSmbus_20021012_01]fivasmb1
current voltage              :    12407 [mV]
remaining charge             :      741 [mAh]
remaining life               :       -1 [min]
charge/discharge cycles      :      351 [cycle]
flowing current              :        0 [mA]
motherboard temp             :       48 [C]

かなーりへたっておりますね。

"remaining life" は、バッテリ駆動時の残り動作時間 (予想) です。 AC 駆動時は -1 になります。

"flowing current" は、バッテリに流れ込んでいる電流値です。 充電時は正の値、バッテリ駆動時は負の値になります。

他の処理との排他制御なんていう高度なことは行っていません。 Windows 自体もきっと (根っこまで突き詰めると) 同じ仕組みで電池残量を 取得していると思いますが、処理がぶつかるときっとエラーになってしまいます。 実際、何回も繰り返し実行するとたまにエラーになります。 ... でも、エラーの原因は、排他制御をしていないのとは別の原因なのかも しれません。よくわかりません。

Windows2000 上で動くのかどうか興味のあるところ。 なんて思っていましたが、動かないという報告をいただきました。 ご報告くださった方、ありがとうございます。 Windows2000 上で動かないと、あんまり意味がないなあ...。

実行は自己責任にてお願いいたします。 上記のように、かなりやっつけのプログラムです。何がおきるかわかりません。

謝辞

LSI-C 試食版 ver 3.30c を使ってコンパイルしました。ありがとうございます。

"interrupt list" を参考にしました。thanks!

いろいろご報告くださった、2ちゃんねるの「いつでもどこでも名無しさん」 さん、ありがとうございます。



mail