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


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

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

[第22回]


●Trace Flag

AM188のフラグレジスタは16ビットです(8086も同じ)。
そのフラグレジスタについて内容を確認するため、AM188のUser’s Manualを読んでいて、TF(Trace Flag)というフラグに目がとまりました。
なんだか期待したくなるような名前です。
それで、その説明を読んでみましたら。
こんな有り難いものがあったのか。
思わず、「おお」と声が出てしまいました。

[出典]Advanced Micro Devices,Inc. Am186EM and Am188EM Microcontrollers User’s Manual

Bit 8 がTFです。
説明によりますと、
TFビットが1にセットされていると、命令を実行後に割込み(trace interrupt)が発生する、
と書いてあります。
これ、これ。
有り難いじゃありませんか。
トレース割込みによってフラグレジスタがスタックにPUSHされるときに、TFはクリアされます。
トレース割込みによるステップ処理を実行後はIRETで元のプログラムに戻りますが、このときTFをセットしておくことで、トレース(ステップ)動作を続けることができます。

うむむむ。
しかし。
どうすればTFをセットすることができるのか。
そこは考えてみる必要があります。
それはそれとして、trace interruptというからには、やっぱり割込みに違いありません。
となると、今度はAM188の割込みについて知る必要があります。

●AM188の割込みテープル

8080ではINT0〜INT7がアドレス0000、0008、0010、...0038に割り付けられています。
8080では、たとえばINT7の割込みが発生すると、0038番地のルーチンがコールされます。
AM188の場合には、00000〜003FFの1KBに4バイトおきに256個の割込みテーブルが割り付けられています。
8080と違って、割込みが発生すると、そのテーブルアドレスがコールされるのではなくて、そこに書かれているアドレスにある割込み処理プログラムがコールされます。
AM188の割込みテーブルの説明です。

[出典]Advanced Micro Devices,Inc. Am186EM and Am188EM Microcontrollers User’s Manual

AM188の割込みはインタラプトタイプという0から255(0〜FF)のナンバーで区別されています。
このうちINT 00h〜INT 1Fhはいわば特殊な割込みとして定義済み(またはリザーブ)となっています。
INT 20h〜INT FFhはユーザーに開放されています。
表を見ると、Trace InterruptはINT 01hになっています。
割込みテーブルのアドレスは00004〜00007になります。

AM188はIntelの80C186/80C188の互換プロセッサとして開発されました。
参考までに80C186(80C188)についても確認してみました。

[出典]Intel Corporation 80C186 User’s Manual

AM188は80C188互換ということですが、割込みテーブルをよく見ると一部に互換ではないところが見られます。
TimerとかSerialとかの割込みも規定されています。
そうでした。
AM188/80C188はCPUと周辺ペリフェラルICを1個のチップに複合化したものでした。
ということになると、もともとの8086ではどうだったのか、ちょいと気になったので8086についても調べてみました。


[出典]Intel Corporation 8086 User’s Manual

おお。
こちらはTYPE 0からTYPE 4(INT 00h〜INT 04h)までしか規定されていません。
TYPE 5〜TYPE 31(INT 05h〜INT 1Fh)までがリザーブになっています。
INT 20h〜INT FFhがユーザーに開放されていることは、AM188、80C188も同じです。

ところでMSDOSでは主要な機能がINT 21hにまとめられています。
INT 21hはこのテーブルにある割り込み処理だったのでした。

そうそう。
AM188ではINT 01hがTrace Interruptである、と説明されていますが、80C186(80C188)、8086ではSigle−Stepになっています。
その表現のほうがそのものずばりで分かり易いですね。

時間がなくなってしまいました。
次回に続きます。

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

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