約10日間に渡ってAI-1000を触り続けてきたけれど、一旦キリにしようと思ってる!
形がカッコよくて大好きで、でも全く使ったことがなくてミステリアスだったAI-1000が、この10日間でものすごく身近に感じるようになった!(^-^)
HD61700も触ったことがなかったけれども、良い経験になった!
思った通りの素直さと柔軟さを兼ね揃えたCPUで、アドレッシングがもう少し強かったら良かったかもなぁ…と思うことはあったけれども、妙な制限で悩むことは無かった(^^)
この先にもいくつかやってみたい事があったけれども、AI-1000というよりはHD61700でやりたい事でもあったので、AI-1000としては一旦キリにしようと思う!
「実はこんな事を考えてました」的な話を書きつつ終わりにしたい。
#書いた後に読み直してみたら、イイワケ大会になってた!w
HD61700エミュレータ
このブログを読んでくださってる方々ならば「ああ、やっぱりね」と思われるかと思うけど、ワリと真剣にエミュレータ書こうと思ってましたw ここにAI-1000とかPB-1000と書かない辺りに事情がある(^^)
プログラムを本体へ送り込む前にロジックの確認をしてみたかったり、実行速度を測ったりするために使おうと考えて作ろうと思ってた。
そういう意味では画面が表示される必要は何もないし、むしろ出なくて良い。あくまでもCPUの動作確認という感じだ。
次に書く「やりたい事」とも絡んでいたため、順番に作業していくつもりだった。
いかんせん、作るのに時間が掛かりそう(2〜3日の作業が無理そう)なので、気力が続かない恐れがあって「今じゃないかも」と考えたのだ。
8080→HD61700コンバータ
実はこちらが本命!
8080CPUのバイナリをHD61700で動くように、マシン語コンバータを作ろうかなーと思っていた。これのメリットは、8080で動くCコンパイラなどが活用できるようになる事だ。
単純な「バイナリのコンバータ」をイメージしていたのだが、実現に向けて深く考え始めてみると、実は結構厄介だな…と分かった。
↑こんな資料も作っていた。
これは「8080のコードをHD61700に割り当てるとこんな感じ?」というイメージを書いたものだ。まだ一度もHD61700でコーディングをしていない時期(逆アセンブラが完成していない頃?)に書いたものなので、割り当てられた命令が適切ではないのかも知れない。スタックフレームについては後回しになっていたので、この表では何も考慮されてない(^^;
これを作ってる最中に「あれ?HD61700にはキャリーを含む加減算命令がなくね?」と気がついたのだ。同時にサインフラグの存在がない事も気になった。8080のライブラリはこれら2つのフラグをかなり活用して作られているので、対応は必須と思われた。
これらフラグの情報を組み立てるために、HD61700側のコードが冗長になりそうだと分かった事、フラグがすぐに参照されるわけではないので(ありがちなのはフラグ変化後、ロードやリターンしたのちにフラグ参照とか)プログラムの状態遷移管理が必要になる事、コードサイズの長大化に伴いテストが大変になりそうな事などから、実機よりもエミュレータが必要だと判断していた。
これも単純なコンバータでなくなった瞬間から、開発にはとても時間が掛かりそうな予想がされたため、今じゃないだろうな…と思って開発を断念した。
なにかのコンパイラ
コンパイラ作ってみたいなーと思っていた。ここはやっぱりCコンパイラ?
HD61700の特徴(レジスタがたくさんあって直交性の高いアーキテクチャ)を活かすためには、レジスタ割り当てが必須と思う。単純なスタックマシンのVMとはワケが違う規模のものになりそうなので、これも簡単じゃないなぁ…と思った。
この辺りはコンパイラに精通されている方であれば容易に想像がつくと思う。
じゃあBASICコンパイラとかは?…とも思ったが、実は私はBASICのコンパイラを作ったことがない!(^-^;; 過去に一度も作ったことがないものは調査その他に時間がかかりすぎる(^^)
実機で実行するコンパイラならば中間言語をたどっていくタイプのコンパイラが作れそうなので、BNF解析は必要ないなーとか思いつつも、今度は逆に「HD61700でコンパイラ書くの?!」って躊躇してしまった(^^;
ディスクを活かした何か
せっかくMD-100を所有しているので、ディスクを活かした何かを作ってみたいなぁ…と思っている。その「何か」が何なのかが分かってないのが一番の問題(^^;;
MD-100 emulatorも手元にあるので、こちらも活用していきたい。
上記のどれもがAI-1000に特化したものではなく、PB-1000でも活用できそうな話題だ!
きっと近いうちにPB-1000でも何かをやると思うので、そちらと絡めながら取り組めたらいいな…と思う!
ところで…PB-1000やAI-1000の動作クロックっていくつなんでしょ?
エミュレータ作ろうと思った時にサイクル数はわかるけど動作速度がわかんないよ…と思った!(^^;;
ご存じの方はぜひコメントまたはTwitterで教えてくださると嬉しいです!
ではまた次回!(^-^)ノ
次は何のマシン触りましょうかね!