スバルセレクトモニターと90年代のスバル車のページ
90年代のスバル車をこよなく愛する人たちへ
セレクトモニタROMの解析 | ECU ROMの解析 | セレクトモニタ(WRX) | セレクトモニタ(SVX) | クルーズコントロール

セレクトモニタ-II ROMの解析


SVX用のセレクトモニタforWindowsの改訂をするにあたって、従来のECU/TCUのROM解析によるパラメータ位置特定だけではのプロトコルとパラメータの格納位置特定だけではどうしようもなくなってきました。

4WSのコントローラはRAM領域は読み出せますが、ROM領域は読み出せませんので、プログラムからパラメータ位置を特定するのは不可能です。さらに、エアコンコントローラ情報の温度表示がずれているほか、ATF温度も正しくなさそうです。ただしい値を表示できるようにするためには、これまで避けてきたSSM-IIのカートリッジROMの解析を行うしかないということになりました。

幸いにもSVX用のROMカートリッジの内容は、ここからダウンロード可能ですし、SSMのCPUは日立の6303であることがわかっています。ROMの先頭からはセレクトモニタで表示されるメニュー一覧がテーブルになっていることはあらかじめPhilさんによって解析されています。この解析を更に進めて、メインテーブルだけでなく、メニュー文字列テーブル、単位文字列テーブルパラメータ格納位置テーブル、パラメータ毎のデコードテーブル、ダイアグノーシスビット位置テーブルとダイアグノーシス内容を見れるようにして、デコードテーブルから参照されるプログラムを逆アセンブルして見れるようにすればよいわけです。各メニュごとにデコードプログラムがあるようなので、中身を見れば読み出した8bit値をどう数値に変換して表示しているかがわかるはずです。


基本的にはECU ROMの解析ツールと同じように逆アセンブラ機能が必要です。リセットベクタや割り込みベクタ以外に解析したテーブルからプログラムだと思われるエントリーポイントも追加します。ここから解析をするとおよそプログラムとデータが分離されますので、さらに未解析のテーブルがありそうな位置が特定しやすくなります。解析ツールを作りながらROMを解析し、新たな解析機能を追加してという作業の繰り返しになります。

文字列やデコード処理のエントリーアドレス、パラメータが格納されているRAMのアドレスはマスターテーブル上ではインデックス(番号)で示されていて、別な場所に格納されているテーブル上のオフセットを示しています。ダイアグノーシスパラメータは先頭アドレスがこのテーブルに格納され、そこから数バイト連続したアドレスに格納されます。ダイアグノーシスパラーメータが何ビットあるかは、また別のテーブルに格納されています。


すべてのテーブルがわかったところで、デコードエントリをひとつづつ見ていって読み出した8bit値をどのように数値化していくか、プログラムを読み解くことになります。基本的には読み取った値にオフセット値を引いて、係数をかけ、丸め処理をして、中央値を足して、上位の桁の0を空白に置換し、符号をつけるという処理になるようです。いちいちプログラムで書いてあるので解析して読み取らないといけません。TCUのATF温度センサーの特性は非線形なので、テーブル引きになっていました。



SSMカートリッジの解析

"Diagnostics and Datalogging for Subaru SVX"で紹介されいてるSVX用のSSMカートリッジは2種類あって、'91-'92年初期型用のカートリッジは解析ができています。ROMは32KBytes(256Kbit)でメモリ空間の後半半分に配置されます。ところが、'95以降用ものは64KBの容量があり、HD6303Yのメモリ空間が64KBであり、チップ内部のI/OやRAM、LCDパネルが接続されていることを考えると、特別な仕組みがない限りすべてのROM空間をアクセスできるはずがなく、こちらのカートリッジのROMの解析は頓挫していました。
GC8インプレッサのSSMカートリッジROMのデータも公開されてい居ないため、こちらの調査を兼ねて、eBAYで出品されていたカートリッジをいくつか購入してみることにしました。


基板は2種類、'94までの基板AK200001は256KBitのROM、'95以降のAK300115には512KbitのROMの他64KbitのRAMが乗っていて、2種類の基板はSVXのページで紹介されている2種類と同じもののようです。プリント基板のパターンを追いかけて回路図にしました。


この回路図を読み解くとアドレス0x2000-0x3FFFのメモリウインドウにROMの前半32KBを8KBx4バンクに分割した空間を配置しているようです。さらに0x0000-0x1FFFの8KBにはカートリッジ上に追加されたRAMが配置されています。HD6303Yの内部RAM、内部I/Oと同じアドレスに配置されているので、内部RAMやI/Oが優先的にアクセスされるようになっているものと思われます。
SSM本体が無いためハードウェアの解析をして調べることはできません。ROMプログラムを更に解析しないとどうやってバンクを切り替えているのかはわかりませんが、おそらくGPIOのどれかの2ピンを使用しているのではないかと思います。

BANK0 0x0000-0x1FFF
BANK1 0x2000-0x3FFF
BANK2 0x4000-0x5FFF
BANK3 0x6000-0x7FFF

次のステップとして、カートリッジの内容をPCに吸い出すハードウェアを設計して作成しました。とりあえず、バンク切り替えは未テストですが、32KB版('94 IMPREZA)のカートリッジのROM内容を読み出すことに成功しました。64KB版も4つのバンク切り替えをして、読み出せました。ROMが読み出せたら次はいよいよ中身の解析です。


ツールの今後

現在、このツールは'91-'92のSVX用カートリッジ以外に対応できるように、テーブルの位置を手動で指定できるようになっています。カートリッジによってマスターテーブルがバンク切り替えしたROM部分に配置されているものもあれば、後半32KBにのみ配置されているものもあります。厳密にテーブルの配置にルールがあるわけではなく、テーブルがどこにあるかはプログラムに埋め込まれているようです。文字列テーブルの位置もそれぞれまちまちです。特徴からテーブルを見つける方法をツール上のメモに追加しました。本来はプログラムを解析するのが正しいのですが、手間がかかり過ぎます。購入したカートリッジの1つはイモビライザ用でした。これにはバンク内になにも書かれていません。実装されているROMが64KBだからといってたくさんデータが入っているというわけではなさそうです



アクセスカウンター アクセスカウンター