作業が進まないうちに「その9」まで来てしまった!
しかもこの間に作ったものと言えば本体ROM→ホストへの転送と、今作ってる逆アセンブラだけという生産性の無さ(T-T)
これで「AI-1000を使ってみる」というタイトルでいいんだろうか…汗
いつもそうなんだけど、レトロパソコンで遊んじゃうぞと思いつつも、最初にウチにROMを抜き出したら、しばらーく本体には寄り付かなくなる(^^; 解析フェーズに入ってしまうと本体触る余裕が無くなっちゃうんですよね…。
完成した逆アセンブラ!
先日、ようやく1命令逆アセンブラを作り終えたが、コレと先日から作っていた「逆アセンブラの体裁を整えるモジュール」を合体させた。
内部的には2パス方式の逆アセンブラで、1パス目で出来る限りコードとデータを分離する処理を行い、2パス目で出力という、ワリと一般的なプログラム。
1パス目の処理でプログラムを大雑把に追いかける(CALやJRなども分岐していく)構造になっているので、多くのコードは発見する事が出来る。ここで解析出来ないのは、例えば「JP (レジスタ)」のような間接ジャンプや、「PUSHしてRTN」などの特殊なコードなどだ。
HD61700の場合はバンクを跨いだジャンプなども追いかけられない。そのため出力された逆アセンブラコードの精度はそこまで高くはない。
「その5」で書いたエントリファイルを充実させる事で、出力される逆アセンブルリストに自動的にコメントを挿入していってくれるので、調査すればするほどリストが充実されていく。
CASIO AI-1000を使ってみる!その5 - レトロパソコンであそぼう!
同じくその5で「超適当に」見つけ出した&H0D80からのジャンプテーブルだが、コードを見る限りリセットされた直後のエントリ?だったのかも知れない。&H0D80には「JP &H30FE」となっていて、その先は↓こんな感じのコードだ。
スタックの初期化、バンクレジスタの初期化などが並んでいる。
どのような経路でこのジャンプテーブルが呼び出されるのかは不明だけど、入り口っぽい箇所を見つけられたのは超ラッキーだった!
こんな感じでROMを逆アセンブルしたところ、7000行くらいに及ぶソースが出力された。まずはここから解析を開始する!
PB-2000C
ここから脱線!
ちょっと興味があったので、AI-1000の海外版?のPB-2000Cについて調べてみた。
CASIO AI-1000を使ってみる!その6 - レトロパソコンであそぼう!
↑その6で「PB-1000の海外版?」とか書いたけど、考えてみたらROMカードが刺さるんだからAI-1000の海外版だろ…と自己突っ込み(^^;;
ふと「PB-2000Cに、AI-1000のROMカードを刺したらどうなるんだろう?」と疑問に思った。
思ったら実験クン!(^-^)
そしたら……想像してた通り、普通に動いた!
ということは、内部ROMには互換性があるって事なのかな…。まぁCPU内部に含まれているROMなんて簡単には変更できないだろうから、当然といえば当然なのかも。
では、表示されるフォントはどうだろうか?
↑これがAI-1000で実行した結果。
グラフィックやカナ、日時などのが表示されている。
↑こちらがPB-2000Cで実行した結果。
グラフィック文字やカナ文字があった部分が、ウムラウト文字や別の記号に置き換わっている!へー、なるほどね!
フォントそのものが本体側に含まれているのか、それともROMの中で多言語に対応しているのかは分からないけれども、多言語対応するためには&H80以降のフォントは使っちゃダメだ!(そこまで意識するようなもの作る??)
さてここからはしばらく解析フェーズに入っていくけれども、見慣れないニーモニックと格闘するのは大変なので、ポケコンジャーナルなどに載っている情報は積極的に活用していこうと思う。表示とキー入力が分かれば、なにか作れそうな気もする。
#そしてその後は急激に飽きるのがいつものパターン…汗
ではまた次回!(^-^)ノ