16ビットマイコンボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第28回]
●BP(ブレークポイント)
[第21回]でステップ動作について書きました。
TK−80はハード回路で発生させた割込み信号によって1命令ごとにステップ動作ができるようになっていました。
ND80Z3.5やND8080も同様の回路によってステップ動作ができます。
ND80KL/86(AM188)の場合、ステップ動作をするためにスイッチの状態は読みますがハードウェア割込みではなくて、フラグレジスタのTF(トレースフラグ)をONにすることによって、シングルステップ動作を実現しています。
ところで、8080やZ80のシステムでは、昔からハードウェア割込みを使わないで、ソフトウェアによってユーザープログラムにブレークポイントを設定することで、プログラムデバッグを行なう方法が知られていました。
RST7(FF)による方法です。
この方法はRAM上のプログラムにしか使えませんが、その最大の利点は、仕掛けたブレークポイントに到達するまでの間は通常の実行時間で実行されるという点にあります。
シングルステップ動作は文字通り1ステップごとに割込みが発生するため、目的のポイントに到達するまで、いわば無駄に時間を費やしてしまいます。
このBPの機能もND80Z3.5、ND8080に標準搭載しているZB3BASICのマシンランゲージに実装されています。
ND80KL/86にKL5C80A12を搭載した場合には、Z80互換動作になりますから、もちろんND80Z3.5、ND8080と同様にBPによるソフトウェアブレーク機能を使うことができます。
そこまで書いてきましたからには、AM188を実装して8086システムとした場合でも、同じ機能を搭載しないわけにはいきませんでしょう。
Z80や8080の場合には外部割込みと兼用になっている1バイトのRST7命令(コードFF)をユーザプログラムのブレークさせたいところに置くことで、アドレス0038番地に無条件でジャンプさせることによって、ブレークさせる仕組みを使っています。
AM188(8086)にも同じような機能が組み込まれています。
AM188(8086)では、TFによるType 01hの割込み、INT 01hと同じように、Type 03hの割込み、INT 03hが用意されています。
INT 03hは8080、Z80のRST7命令と同じ1バイトの命令コードです(コードCC)。
使い方は8080、Z80のRST7(FF)と全く同じです。
INT 03h(マシン語コードCC)が実行されると、その時点のFR(フラグレジスタ)、CC(コードセグメントレジスタ)、PC(プログラムカウンタ)をスタックに退避したあと、割込みテーブルの000C〜000Fの値がPC、CCに入れられ、そのアドレスにジャンプします。
AM188(8086)の割込みテーブルは[第22回]で説明をしています。
現在作成中のAM188用システムプログラムにもBP(およびRT)の機能を組み込みました。
[第25回]でテストしたシングルステップ用のテストプログラム(TRCTEST.COM)をアドレス9000にロードしました。
拡張子COMのファイルの実体はバイナリファイルですから、/LDコマンドで指定アドレスに普通にロードできます。
下がそのアセンブルリストです。
2018/5/25 7:226 trctest.LST [00001] ;;;trace test [00002] ; [00003] ORG=8000 [00004] ; [00005] 8000 B000 MOV AL,00 [00006] 8002 FEC0 LOOP:INC AL [00007] 8004 EBFC90 JMP LOOP <8002> [00008] ; LOOP =8002 |
このプログラムはアドレス8000から開始するプログラムとして書かれたものです。
Z80や8080では特別の例を除いて、一般的には書かれたアドレス以外のアドレスにそのままロードまたはコピーした場合には、正しく実行できません。
しかし8086では逆に特殊な例を除いては、別のアドレスにロード、コピーしても、そのまま正しく実行されます。
このようなプログラムをリロケータブル(再配置可能型)プログラムといいます。
カギはJMP命令のコードです。
Z80や8080ではジャンプ先、CALL先アドレスは絶対番地を指定しますが、8086では上のリストにあるように、その命令からの相対的な位置を指定しています。
ですから上のコマンドプロンプト画像のように8000から書かれたプログラムを9000にロードしても、正しく実行されます。
なおZ80でもJR命令は同じ仕組みの相対ジャンプ命令です。
16ビットマイコンボードの製作[第28回]
2018.5.30upload
前へ
次へ
ホームページトップへ戻る