2019-10-07 23:52 — asano
SC/MPボードへのモニタの移植が一段落つきました。新しいプロセッサへの移植は毎回似たような流れで行なっていますので、その流れを書いてみたいと思います。
- いつもループ確認の後はいきなりモニタを書き始めているのですが、今回のSC/MPはサブルーチンコールなど基本的な命令が不足しているので使いそうなマクロをまず用意しました。
- なるべく似たプロセッサ(今回はMC6800, 6502)を参考にしながら先頭から実装していきます。最初の目標はオープニングメッセージの表示で、いわゆる"Hello, world!"に相当します。
- サブルーチン類は必要になったものから実装していきます。ラベルや配置順は可能な限り共通にして、他プロセッサ向けとの対応が取りやすいようにします。
- メッセージが表示できるようになったら次は行入力ルーチンです。
- 続いてコマンドを実装していきます。どれから始めてもよいですが私はD(ump)からですね。パラメータを16進文字列からバイナリへ変換、16進表示などを順に確認しながら実装していきます。
- D(ump)が動くようになれば必要なものは大体揃っているのでS(et), G(o)コマンドはすぐに動かせます。
- P(unch), L(oad)はEMILY Boardを使っている限り無くてもあまり困りません。実装はそう難しいことは無いでしょう。
- R(egister)はまだMC6800しか書いていませんが、モニタで最も難しいところと言えます。このコマンド自体はワークエリア中の値を表示・変更するだけなのでレジスタの個数や名称の違いで済みますが、レジスタを適切に設定してG(o)したり、ユーザプログラムからモニタに制御がわたった瞬間のレジスタを保存する方法はプロセッサごとにまったく異なり、パズル的なところもあるからです。
今回は6.まで実装しています。
コンソールがEMILY Boardしかないので7.は必須ではなく未実装です。D(ump), S(et)も無くても良いのですが、さすがにG(o)しかないのはあんまりですし、SC/MPを体験するためにもある程度のコードは書かないと意味がありませんから。
8.についてはSC/MPでは完全には実現不能です。通常レジスタを設定してユーザプログラムへジャンプするにはRET
命令を使いますが、SC/MPにはありません。XPPC
を使うしかありませんが、ジャンプ後P1
~P3
のいずれかにモニタ内のアドレスが入ってしまうのを防げません。
コメントを追加