現在地

INS807xにモニタを移植


前回書き始めていたモニタですが、いつものようにD(ump)コマンドが動くころには慣れてしまって残りはサクサク進み基本的なD,G,S,Lコマンドはすぐにできました。今回はちょっとわけあってP(unch)コマンドも追加しています。

SC/MP(I と II)とは以下のような相違点があります。

  1. 16ビット演算命令
    これ自体は便利でありがたいのですが、キャリ/ボロー込みの加減算命令がなくなってしまいました。モニタには必要ありませんでしたが、16ビットを超える演算は相当面倒になると思われます。条件分岐がAレジスタ(下位8ビット)でしかできないのも意外に不便です。
    SC/MPでは16ビットの値をメモリとやり取りすることがなかったのでエンディアンの概念がありませんでしたが、SC/MP IIIはリトルエンディアンです。
  2. スタックとサブルーチン
    サブルーチン呼び出しの機能が追加されたのは助かります。同時に長距離ジャンプも追加され、4kBページの制約も解消されています。
  3. 乗除算命令
    乗算は符号付のみ、除算は符号無のみという少し変なところもありますが、用途によっては便利でしょう。モニタでは使っていません。
  4. ダイレクトアドレッシング
    0xFF00~0xFFFFに直接アクセスできるようになりました。これでワーク領域のベースアドレス用に貴重なポインタレジスタを確保しなくてもよくなります。
  5. Eによるインデックス
    レジスタ相対アドレッシングで-128を指定すると定数ディスプレースメントの代わりにEが使われる機能は削除されてしまいました。
  6. ステータスレジスタの操作
    SCL(キャリをセット)のような専用命令はなくなり、即値とのAND/OR命令に変わりました。SC/MPでは加減算の前にキャリ設定を多用していたのが1.によって不要になったので特に不便は感じません。
  7. CALL命令
    ベクタによるサブルーチン呼び出し機能、8080/Z80系のRST命令のような使い方を想定しているのかな。動作としては8086のINT命令に近いですね。

やはりサブルーチン機能の追加が一番ありがたいですかね。呼び出しのたびに20バイト以上もマクロ展開していましたから。Universal MonitorもSC/MP版と比べてP(unch), L(oad)コマンドが増えているにもかかわらず、バイナリサイズは約5/8ですんでいます。

まだ細部まで検討していませんが、SC/MPでは完全には実現不能と書いたR(egister)コマンドもSC/MP IIIなら書けそうな気がしています。CALL命令もブレークポイント用に良さそうですし。

参考文献・関連図書: 
INS8070シリーズ データシート, National Semiconductor.

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
※ コメントは原則公開です。個別のご相談などは「ご意見・ご要望」からお願いします。