CASIO AI-1000を使ってみる!その6

f:id:PocketGriffon:20210725233913j:plain

写真はPB-2000C。

海外で販売されていたマシンだけど、日本でいうところのAI-1000? ただAI-1000の特徴であるLisp言語ではなく、C言語が搭載されている。ということは、PB-1000Cの海外版と思った方がいいのかも??(実はよく分かってない)

 

解析できないコードが出てくる

あれから逆アセンブラを作り続けている。

……と言っても、日がな1日作業しているわけじゃなくて、外出しつつ資料読みつつあれこれしつつ…って感じなので、実質1日の作業量なんてたかがしれてる(^^;;

 

ROMデータを逆アセンブルするために格闘しているが、つじつまがあわないコードが出てきてしまった。3バイト命令を「3バイト」と解釈して次の命令を参照すると、命令そのものが変な感じになってしまう。「変」に感じるのは、突然脈絡もない命令が出てきてしまい、プログラムとしての流れが破綻してしまうのだ。

 

試しに3バイト命令を2バイトだと解釈すると、その次の命令も納得出来るコードが出る。

おかしい…さんざんっぱら調べたが、どうにも納得が出来ない。

理解が及ばない「何か」がソコにある。

もうこのままお蔵入りか…と思うほど追い込まれた。

そこまで追い込まれて、ようやく思いつく。

「もしかしてメーカーが作ったプログラムに未定義命令が使われてる?」と。

 

言葉の違い

ここで…私がイメージしていた「未定義命令」と、HD61700で使われている「未定義命令」の意味について、大きな違いに気づく。

 

私が思い描いていた未定義命令とは、Z80や6809にあるような「存在自体は有名だけどメーカーも正式にはサポートしていない命令」のイメージ。仕事で作るプログラムで未定義命令を使うなんてもってのほかで、むしろ使用禁止命令として張り出しちゃうくらい。

 

そしてHD61700界隈で使われている「未定義命令」とは、もしかしたら「未公開命令」なのではないか…と思うようになった。正式にサポートされているけれども、なんらかの事情で公開が控えられた命令であり、使う分には構わないけど説明はしないよ…的な命令コード。

 

私は未定義命令というのを前者で捉えていたので、HD61700には未定義命令が多いらしいけれども、ユーザーが速度やサイズを競うために使っているものであり、ROMの解析には何の影響もないだろうから、逆アセンブラや今後作るであろうアセンブラでは未対応で構わない…くらいの感覚で捉えていた(^^;;

 

Twitterなどで未定義命令の話題を出されても、反応が鈍かったのはこのせいだ(^^;;

まさか本体搭載ROMで使われるとは夢にも思っていなかったので、ずーっとずーっと後回し、もしかしたら理解しなくても良いものかも…とさえ思ってたww

 

うーん、趣味の世界で未定義命令を使うようになったら対応しようと思っていた逆アセンブラを、今この瞬間から対応するようにしなければならなくなった(^^;;

 

ココに至るまでの時間が長かった!

というわけで、現状報告でしたw

 

ではまた次回!(^-^)ノ