2021-12-27 22:44 — asano
カテゴリー:
2650ボードが動き始めたのでソフトウェアを書いていきます。
前回ループが動作したのでメモリからの読み出しは動いており、次は書き込みができることを確認しなくてはなりません。
テストコードを書いても良いのですが、EMILY BoardのUART機能を使うための初期化ルーチンを動かしてみることにします。これはメモリに数バイトの定数を書き込むだけなのでこのテストにはうってつけです。
正しく書けたかどうかはEMILY Boardの機能でメモリをダンプしてみれば一目瞭然です。
特に問題なかったのでいつものように1文字出力・メッセージ出力・行編集と進めていきます。
ここまで動くようになる頃にはだいぶ慣れてきていますので、あとは黙々と実装していくだけです。
例によって書いていて気になったことをあげてみます。
- スタック内蔵
スタックは8段分が内蔵されており、メインメモリとは別になっています。これはサブルーチンコール時の戻りアドレス専用で、レジスタの退避などには使用できません。RETC
,RETE
以外では読み出すこともできないので呼出し命令直後にパラメータを置いておくなどのテクニックは使えません。ブレークポイントも停止場所の取得ができないでしょう。 - レジスタは8ビット
汎用レジスタは8ビットのものが7つのみです。2つ合わせて16ビットとして使うことはできず、メモリを直接ポイントすることはできません。メモリアドレスを扱うときはメモリ上においてインダイレクトアドレッシングを利用します。
これはどことなく6502に似ており、実際Universal Monitorは6502版をベースにしています。 - 絶対アドレス
ブランチ系命令では32kBのどこでも絶対アドレス指定ができますが、それ以外では8kBのページ内しか指すことができません。ワークエリアなどはページ内に置くか、ページ内にアドレスを置いてインダイレクトでアクセスするしかありません。これ大きなメモリを積む場合、特にROM化する場合に大きな問題になります。例えばH'0000'~H'3FFF'にROM・H'4000'~H'7FFF'にRAMなどとするとROM上のプログラムからRAMへのアクセスが大変なことになります。 - PSWによって動作の変わる命令
加減算やローテート命令でキャリを含めるかどうか、コンペア時に符号付として扱うか符合無しとして扱うかはProgram Status Wordと呼ばれる特殊レジスタのビットによって決まります。
ここも6502や65816に似ています。65816みたいに命令長が変わったりはしませんが。 - 大小比較
大小比較は小さい・一致・大きいとそれぞれの否定の組み合わせになっており、ゼロ(Z)とキャリ(C)の組み合わせよりは直感的でわかりやすく感じます。 - I/O命令
ちょっと変わっているのはコマンドとデータの2つのアドレスしか使えないかわりに1バイト命令でアクセスできるNon-extendedと、2バイト命令になるけど8ビットアドレスが使えるExtendedの2種類あることですね。両者はハードウェア的に判別できるので合計で258のアドレスが使用可能です。
次回は未搭載になっている2651を動かす予定です。
参考文献・関連図書:
"Signetics 2650 Microprocessor", Signetics.
関連項目:
Add new comment