スバルセレクトモニターと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に吸い出すハードウェアの設計ということになりそうです。幸い、USB経由で比較的簡単にGPIOを操作することができるFT232Hというデバイスがありますので、これを利用して読み出そうと思っています。


ツールの今後と公開予定

現在のところ、このツールは'91-'92のSVX用カートリッジ専用になっています。バンク切り替えにて前半のROMにアクセスしていることがわかってきましたので、さらなる解析によってこれらのROMが解析できるようにツールを拡張できる可能性があります。また今後他の車種用のカートリッジROMデータが入手出来れば解析は進むかもしれません。
SSM-II本体は壊れていて動作しなくてもいいので、SSM-IIを持っていて貸してもよい。あるいはROMデータを提供してもよいという方がおられましたら歓迎したいと思います。よろしくご連絡ください。

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