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


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

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

[第40回]



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

8086システムプログラムも一応一区切りがつきましたので、ここ数日は中断しておりましたKL5C80A12の作業を再開してそちらのほうの作業をしておりました。
ホームページのほうも8086からKL5C80A12にテーマを切り換えて書くつもりでした。
そうしましたところ、気合を入れてがんばったお蔭で、この数日間で思ったよりも作業が進んで、なかなか越えられなかった壁をクリアできました。
それならなおさらKL5C80A12についての記事を書くべきところなのですが。
なんでしょうか、山を越えたということで、ほっとしたら何だか気が抜けてしまって、なんとなくぼんやりしてしまいました。
それで、緩んだ気を引き締めるために、手付かずになっておりました8086版の倍精度浮動小数点プログラムの作成作業にとりかかってしまいました。
そういうことで、KL5C80A12についてはあとちょっとだけ先に延ばすことにしまして、もう少し8086プログラムについて書くことにします。

少し前の記事で、Z80にはあって8086にはない命令のために、8086プログラムの作成作業に難儀をしています、ということを書きました。
8086は16ビットCPUですから、8080やZ80よりもはるかに機能が高いCPUのはずなのですが、いざプログラムを実際に書いてみますと、むしろ8080やZ80のほうが楽に書けてしまって、同じ内容のプログラムを8086の命令で書こうとすると、かえって苦労することがあります。
たとえば。
8086の条件ジャンプ命令(JZ、JS、JCなどなど)は8080やZ80と違ってその命令の前後−128〜+127バイトの範囲にしかジャンプできません。
8080やZ80なら64KBのアドレスのどこにでもジャンプできます。
この差は大きいです。

このところのZB3BASICを8086の命令で書き直すという作業は、とりあえずZ80の命令で書いたソースプログラムを8086の命令に機械的に置き換えるという作業からスタートしています。
機械的に置き換えるとはいっても、そう簡単にいくものではありません。
そのように置き換えただけのソースプログラムを8086アセンブラにかけますと、もう収拾がつかないくらいめちゃめちゃエラーが発生します。
それをひとつずつエラーが出ないように書き直すという、実にしんどい作業をこのところ続けてきています。
ちなみに今回の倍精度浮動小数点プログラムの場合、Z80プログラムから8086プログラムに機械的に書き換える自作の変換プログラムによって生成した最初のソースプログラムを8086アセンブラにかけた結果が下の画面です。

この画面では2458行から2555行までの約100行の間でエラーが23個も出ています。
もっともそのうち?がついたものは機械的な置き換えができなかったものなので、これは手作業で置き換えるしかありません。
そのほか正しく文字列が置き換えられなかったところなどもあります。
いずれにせよ、このようなエラーになったところを一行ずつ手作業で書き換えていきます。
実に面倒な作業なのですが、それでも何もないところから新規にプログラムを書くことに比べたらこのくらいの手間はどうということはありません。

エラーになったところをひとつずつつぶしていくと、最後にERR 08がたっぷり残ります。

ERR 08は上で書きました、条件ジャンプ命令の飛び先が−128〜+127バイトの範囲を超えている、というメッセージです。
たとえば左の画面で、一番下に表示されたJS BEKIEは右のソースリストの2486行にあります。
BEKIEが離れすぎているということなのですが、もともとZ80でプログラムした時点ではそんなことは全く意識しないで書いたわけですから、こういうことになってしまっても仕方がありません。
でも8086の場合にはこれではアセンブラが通りませんから直すしかありません。

とりあえずその部分だけ直して、もう一度8086アセンブラにかけたのが下の画面です。

JMP命令は8080やZ80と同じで64KBの範囲内ならどこへでもジャンプできますから、右のリストのように問題の条件ジャンプ命令をJMP命令で置き換えるように手直しします。
エラーメッセージが表示されなくなるまで、そのようにして、リストを修正していきます。
よう飽きずにやっとるなあ、とわれながら感心してしまいます。

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

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