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


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

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

[第33回]



●8086プログラムの悩ましい問題(2)

本日1日の頑張りで、ちょっとBASICらしい動きができるようになってきました。
あと2〜3日頑張って、らしいところまで進みましたら、どのくらい大変な作業をしているのか、というあたりを少しまとめて見ていただくつもりです。
本日も早朝からずっとデバッグ作業にかかっていましたので、いささか疲れてしまいました。
ですので本日のところは少しだけ簡単に書くことにいたします。

このところ、Z80のアセンブラで書いたプログラムをもとにして、それを8086のプログラムに書き直すという作業をしています。
前回書きましたように、Z80と8086の命令語の機能の違いがもとで、想定外のプログラム動作に悩まされてしまうことがあります。
前回はその2、3の例について書きましたが、Z80と8086の悩ましい相違点はまだまだありました。

前回はZ80がAレジスタとフラグレジスタを合わせて、PUSH AF、POP AFとするのに対して、8086ではAXレジスタとフラグレジスタは別々に扱わなくてはいけないために、困ることが出てきます、ということを書きました。
Z80は8ビットCPUですから16ビットCPUとの機能の差は歴然としていますが、8086にはない機能ももっています。
そのひとつが裏レジスタです。
Z80の主なレジスタはA、F、H、L、B、C、D、Eですが、全く同じレジスタがもう一組あります。
便宜上A’、F’、H’、L’、B’、C’、D’、E’と呼称することもありますが、アセンブラ、機械語で直接、裏のレジスタを操作することはできません。
この2組は同時には使えず、どちらか一方は裏に隠れています。
どちらかをアクティブにする命令は、A、Fについては、EX AF,AF’で、H、L、B、C、D、Eは一括して、EXXで入れ替えます。
たとえば起動時に裏だったH’、L’はEXX命令を実行すると表に出て、H、Lになります。
逆に今まで表で使われていたH、Lは裏に回ってH’、L’になります。
考え方はややこしいのですが、レジスタを多用したいときなど、この機能はなかなかに便利なので、ついつい使ってしまいます。
便利なのですけれど、気をつけて使わないと表と裏の区別がつかなくてミスをしてしまうことにもなりかねません(上に書きました様に表裏の区別はできません)。
8086にはこの機能はありませんから、EX AF,AF’、EXXを使っているところは全部書き換えなくてはなりません。
これはなかなかにしんどい作業です。

便利といえば、Z80にはあって、8086にはないユニークな命令がほかにもあります。
RLDとRRDです。
これは目的によっては、泣けるほど有り難い命令です。
8086にはこんな命令はありません。
置き換えるのに苦労します。



こんなおかしな命令は、どんなときに使うの?と疑問に思われるかもしれません。
これが便利なのです。
良く見るとメモリの内容が4ビット単位で左または右にシフトしています。
シフトではみ出た4ビットは上位(または下位)のメモリに与えることができます。
たとえばメモリに連続して入っているBCD(4ビット)の値をシフトしたい用途などにぴったりです。
8086で同じことをしようとすると結構面倒なプログラムを書かなければなりません。
Z80ってすごい石だったんだなあ、とあらためて感心してしまいます。

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

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