about MR2 B6 CPU事始め
99年12月1日 ロードスターのCPU解析開始
実は、ワタクシいつのまにかECUマニアになっていて(^^;;
トヨタ車だけに飽き足らず、BNR32やら、FC3Sやら、BMWやらの
プログラムデータを集めまくって来ました。
どれもいつかは乗ってみたいなぁと思っている車でして、
将来これらの車を手に入れたときに即座にROMチューンが
できるように集めているのです!!(半分本当)。
同じように、ユーノスロードスターと言う車にもずっと
惹かれておりまして、安くなってきたし機会があれば
ぜひ買いたい!と思っているのですが、ついAWを何台も
買ってしまったりして機会とお金を逃しつづけております。
BNR32も買わなきゃいけないのに、体と時間と金がたりない〜。
話を戻して...、
実はロードスターのECUで使っているCPUは、AE86等の
古いトヨタ車と同系列であるというのを知っていたので、
プログラム読んでみたいな〜、と思いつつも、縁がなくて
触ったことがありませんでした。
しかし、このたび!、ロードスターのエンジンチューニング
をなさっていてROMチューンをこれから初めたいという
NuMaTeCさんのとジョイント企画(実は私の一方的お願い)
で、私のページでB6とBP(どちらもMAZDAの4気筒エンジン。
それぞれ1600cc,1800cc)のプログラム解析をさせていただける
ことになりました。
NuMaTeCさんというのは、こちらをご覧の方には是非一度
ホームページに行って見てもらいたいのですが、ロードスターは
もちろん、バイクのエンジン等もチューンしてしまう
すごいプライベータの方です。でも本職も整備士の方です。
この方のすごいエンジンに、私の足りんノーミソで解析した
データが役に立つのでしょうか(^^;;
ハナハダ心配ですが、がんばっていきます。
さて、はじめましょうか。
まずは、B6とBPのデータをお借りしました。
バイナリエディタで覗いて見ると、B6の方は16KByte、BPは32KByteの
容量を使っていますね。
中身をさらに見ると、ナルホドナルホド(^^;;このCPUなら大丈夫!。
TOYOTAのカスタムCPUのように命令が並べ替えてあって、その
内容が非公開だったりするほど面倒なわけじゃなさそうです。
基本的にはAE86と同じCPUですね。
これを読んでいる方で、CPUの種類を書けよ〜と言う方にちょっとヒントを。
このCPUは、まぁ10年以上前の時代から考えても8bit CPUなわけで
アドレス空間は2^8の64KByteです。
#Pentiumが32bitCPUで4GByteの空間をもつのと比べるととても
#サミシイですが、そういう時代でした。ちなみに私が会社で
#作っているのは64bitCPUでこれは4Gx4Gの空間を持つことが
#できます。計算するのが面倒なんで書きませんけど。
この時代には、Intel8048,8080系列、Z80系列、モトローラM68系列
の8bitCPUがあって大体はこのどれかの系列です。
この64KBの空間のどこかに、これら16KBもしくは32KBのROMデータが
マップ(対応づけ)されて実行されるわけです。
まぁ、いろいろ実行上の理由がありまして、Intel,Z80系列では
ROMは0番地から、モトローラ系列では後ろにつめてROMが置かれます。
例えば16KBのROMはそれぞれこのように置かれます。
また、この時代のプログラムは、プログラム中でジャンプ先(次に
どこの命令を実行するか)やマップ等のアドレスを指定するのに
CPUから見たアドレスを直接書いてあるので、ROMをずらして
マップするとプログラムが正しく動きません。
さらにモトローラ系列の場合0番地付近にRAM領域があったり
するので、ここにROMを重ねることはできなくなっています。
B6のデータを手元にあったfreeの逆アセンブラで逆アセンブルすると、
大体変換できました。でも、オリジナルのCPUに対して少し
命令を追加してあるようで、ちょっと未定義命令(逆アセンブラが
変換できなかった命令)があるようですね〜。
でも、二次元マップを参照しているプログラム部分や、
チェックサムを計算している部分は大体分かったので
とりあえずの用は足りそうです。
しかし、これからのことを考えると、ちゃんとすべての
命令を変換できる逆アセンブラが欲しいですね〜。
このアセンブラの制作記については、次回に〜。
NuMaTeCさんに「マップの移動と拡大くらいすぐできますよ〜」
と言って請け負ってしまっただけに、これらを早速やらなく
てはなりません。
大体は逆アセンブルできたので、マップを参照している
プログラムを読みました。なるほどなるほど、トヨタと同じ
ですね、マップの先頭にX軸Y軸のサイズが書いてあって
そのあとにマップの本体がある。プログラム側ではマップの
サイズを規制するような部分はとりあえずは見当たらなかった
ので、ROMの空き領域に拡大したマップを移動して、X軸とY軸の
サイズを示している領域を新しいマップサイズに変更すれば
よさそうです。プログラムからは新しいマップの場所を
見に行くように変更すればいいのです。
うまくないですが、図で書くとこんな感じでしょうか。
とりあえず、この変更を加えたROMを2パターン作り、NuMaTeCさんに
送ってとりあえずは終了っす。
次回からは逆アセンブラをつくってじっくり行きます〜。
shmz@cds.ne.jp