2018.5.20
前へ
次へ
ホームページトップへ戻る


16ビットマイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第21回]


●ステップ動作

ステップ動作はマシン語プログラムを1命令ずつ実行させる機能です。
元祖TK−80は命令を実行する毎にボード上の回路で割込み信号を発生させることによって、ステップ動作を可能にしていました。
それにならってND80Z3.5も割込みを利用してステップ動作をさせています。
ND80KL/86本体ボードも同じように割込み発生回路を実装していて、KL5C80A12を実装したときは、その回路によってステップ動作をすることができます。
下がステップ回路を含む回路図です。

ディップスイッチDS1のbSがONのとき、KL5C80A12が1命令を実行するごとにIC6(74HC74)から割込み信号が出力されます。
モニタプログラムに書かれている割込み処理プログラムによって、ステップ動作が実行されます。
この回路のキモは74HC74のクロック入力にZ80(KL5C80A12)のM1出力が使われていることです。
M1はZ80から出力される信号で、Z80が命令の第1バイトを実行するときにアクティブになります(命令によって第2バイトもアクティブになるものもあります)。

しかしAM188ではこの方法は使えません。
いえ。
使えないことはないかもしれませんが、回路が複雑になってしまいます。
AM188の場合にはもっと簡単な方法があることに気が付きました。
ソフトウェアによる方法です。
そのためにAM188のステップ動作のためには、ディップスイッチDS1のbSがONになっているかどうかをソフトウェアで読むことができるようにだけしてあります。
上の回路でディップスイッチDS1のbSの状態はIC9pin12に送られています。
下はその信号を受ける回路を含む回路図です。

信号はIC9(74HC126)に入っています。
このスイッチの状態はI/Oアドレス90〜93に対してIN命令を実行することで、入力されるデータのビット5に反映されます。

確かにこの回路でAM188はディップスイッチの状態を知ることができます。
しかしそれでどうするとステップ動作をすることができるのでしょうか。
実は、8086にはシングルステップを可能にする機能が備わっているのです。
私自身、そんな機能については全然知りませんでした。
ND80KL/86マイコンボードのAM188用モニタプログラムを作成する過程で、8086についてあらためてその命令や機能について調べていて、初めて知ったのでした。
それで、もう3ヶ月も前のことなのですが、AM188用のモニタプログラムにステップ動作プログラムを組み込んでおいたのでした。
そんなことはもうすっかり忘れてしまっておりました。
今回モニタプログラムのリストを確認していて、なんだかうまくいきそうなプログラムが書かれていることに気が付いた次第です(こんなプログラムを書いていたなんて、もう全く記憶にありません)。

具体的なプログラムの説明などについては次回以降にすることにします。
まずはステップ動作の実際について見ていただきましょう。
テストプログラムは前回見ていただいたI/O出力プログラムです。
下に再掲します。

2018/5/17  7:226  iotest1.LST
[00001]                     ;;; i/o test
[00002]                     ;18/5/17
[00003]                         ORG=8000
[00004]                     ;
[00005] 8000  B055          LOOP:MOV AL,55
[00006] 8002  E682              OUT 82,AL
[00007] 8004  B044              MOV AL,44
[00008] 8006  E682              OUT 82,AL
[00009] 8008  EBF690            JMP LOOP <8000>
[00010]                     ;
LOOP         =8000  

前回見ていただいたように、マシン語の命令をメモリの8000〜に入力済みです。
ディップスイッチDS1のbSをONにしました。
いよいよ実行です。

[8][0][0][0][ADRSSET]と入力しました。


[RUN]を入力すると...。

8000番地の命令が実行されてLEDのアドレス表示部には次のアドレス8002が表示され、データ表示部にはALレジスタの値が表示されています。

[CONT]キーを押すと8002番地のOUT命令が実行された結果、I/Oポート出力に接続されているLEDに55が表示されました(LED回路の都合で反転表示されています)。

7セグメントLEDのアドレス表示部には次のアドレス8004が表示され、データ表示部にはALレジスタの値が表示されています。

[CONT]キーを押しました。

8004番地の命令が実行されてLEDのアドレス表示部には次のアドレス8006が表示され、データ表示部にはALレジスタの値(44)が表示されています。

[CONT]キーを押しました。

8006番地のOUT命令が実行された結果、I/Oポート出力に接続されているLEDに44が表示されました(LED回路の都合で反転表示されています)。
7セグメントLEDのアドレス表示部には次のアドレス8008が表示され、データ表示部にはALレジスタの値が表示されています。

[CONT]キーを押しました。

8008番地のJMP命令が実行された結果、プログラムカウンタは8000にセットされ、7セグメントLEDのアドレス表示部には8000が表示されました。

[CONT]キーを押しました。

8000番地の命令が実行されてLEDのアドレス表示部には次のアドレス8002が表示され、データ表示部にはALレジスタの値(55)が表示されました。

16ビットマイコンボードの製作[第21回]
2018.5.20upload

前へ
次へ
ホームページトップへ戻る