ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.6.28 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆特注品Z80ボードND80ZHの機能説明 TK80コンパチブルで、その上中日電工オリジナルのND80Zとしても動作するというZ80CPUのワンボードマイコンを企画し、その開発準備をしていたところに、ND80Zの特注品の開発依頼をいただきました。製品名はND80ZHです。 新企画のZ80ボード(ND80ZV)はこのあとで製作することになりますが、基本的な機能はND80ZHと共通していますから、まずはND80ZHの機能を説明します。 |
[第12回]
●REGモード
Z80版TK80ボード(ND80ZH)の機能説明の続きです。
前回はND80ZHの特殊キーの機能について説明をしました。
[*I/O]キーとともに使う機能(I/Oモード)についての説明です。
I/Oモードの機能には、前回説明をした[*I/O][IN]、[*I/O][OUT]のほかにもまだあるのですが、それについてはちょっと理由があって、すこし説明を後回しにしたいと思います。
先にREG(レジスタ)モードについて説明をします。
TK80モニタでは、CPU(8080)のレジスタ用のバッファがRAMのワークエリアに用意してありました。
そこに任意の値を書いてから、ユーザプログラムを実行させるようにすることで、レジスタに初期値を与えてからユーザプログラムを実行させることができました。
またステップ動作やブレイク動作をさせたときに、その時点でのCPUレジスタの値が、RAM上のレジスタバッファに格納されるので、それを確認することで、プログラムのデバッグを効率良く行うことができるようになっていました。
ND80Zモニタにもそれと同じ機能があります。
しかし、ND80ZのCPUはZ80なので、レジスタの数が8080の倍以上もあります。
TK80モニタでは、RAMに格納されたレジスタの値を確認するのに、[ADRSSET]と[READINC][READDEC]を使っていました。8080のようにレジスタの数がそれほど多くないのであれば、そういう方法でも使うことができたのですが、Z80では、そういう方法ではちょっとつらくなります。
ちなみに、TK80でのレジスタとそれに対応してRAM上に置かれたレジスタバッファのアドレスは以下の通りです。
なおオリジナルのTK80は実装されていたメモリが小容量だったので、RAM上のレジスタバッファのアドレスは83XX番地にありましたが、ここではMYCPU80用に直したTK80モニタのRAMアドレスで説明をします。
そのアドレスは今回製作を進めているZ80版TK80に実装予定のTK80モニタでも同じになっています。
メモリアドレス | CPUレジスタ |
FFEB | A |
FFEA | F |
FFE9 | B |
FFE8 | C |
FFE7 | D |
FFE6 | E |
FFE5 | H |
FFE4 | L |
FFE3 | SP(H) |
FFE2 | SP(L) |
FFE1 | PC(H) |
FFE0 | PC(L) |
たとえばブレイク後に、HレジスタとLレジスタの値を確認してみることにします。
上の表から、Hレジスタの値はアドレスFFE5にセーブされています。またLレジスタの値はFFE4にセーブされていますから、次のようにキー入力します。
[F][F][E][5][ADRSSET]
これでHレジスタの値が7セグメントLEDのデータ表示部に表示されます。
次に[READDEC]を押すと、アドレスが−1されてFFE4になるので、Lレジスタの値がデータ表示部に表示されます。
8080の場合には、上の表程度ですから、この表を見ながらキー操作することはそれほど面倒ではありません。
しかしZ80ではちょっとそれは難しいことになります。
Z80は上記の8080のレジスタに加えて、IX、IY、I、R(これは特殊なレジスタで普通は使いません)があり、さらにH、L、D、E、B、C、A、Fの各レジスタがもう一組あります(俗に裏レジスタといいます)。
これだけのレジスタのためにRAM上にそれぞれレジスタバッファを用意していますから、それをTK80と同じようにメモリアドレスを指定して値を確認したり、また値を設定したりしようとすると、いちいちメモリマップを見ながら、そこからレジスタに対応するアドレスを拾い出してキー入力することになりますから、これはなかなかに面倒な作業になります(下表参照)。
メモリアドレス | CPUレジスタ |
FFEB | A |
FFEA | F |
FFE9 | B |
FFE8 | C |
FFE7 | D |
FFE6 | E |
FFE5 | H |
FFE4 | L |
FFE3 | SP(H) |
FFE2 | SP(L) |
FFE1 | PC(H) |
FFE0 | PC(L) |
FFDF | IX(H) |
FFDE | IX(L) |
FFDD | IY(H) |
FFDC | IY(L) |
FFDB | A’ |
FFDA | F’ |
FFD9 | B’ |
FFD8 | C’ |
FFD7 | D’ |
FFD6 | E’ |
FFD5 | H’ |
FFD4 | L’ |
FFD3 | I |
FFD2 | R |
ずいぶん前説が長くなってしまいました。
そういうわけで、ND80Zには、このレジスタバッファの操作を簡単に行えるようにREG(レジスタ)モードという機能があるのです。
使い方は簡単です。
[REG]キーに続けてデータキーを押すことで、そのデータキーに白抜き文字で印刷されているレジスタに対応するレジスタバッファを選択することができます(前回[第11回]のキーの写真を参照してください)。
操作例を写真で説明することにします。
最初に、[REG]キーを押します。
するとREG(レジスタ)モードになります。
7セグメントLEDのアドレス表示部に「rrrr」が表示されます。
[REG]キーに続いて、データキーを押すと、そのキーに印刷してある白抜き文字のレジスタ(に対応するメモリアドレス)が選択されて、その値がデータ表示部に表示されます。
データキーの[6]が[PC]です。[REG]に続いて[6]([PC])キーを押したところです。
7セグメントのデータ表示部にPC(プログラムカウンタ)の値が表示されます。
ステップ動作をさせて、アドレス8202で止まったあと、レジスタモードのキー操作をしましたので、このように表示されています。
[REG]キーに続いてデータキーを押すということで、任意のレジスタを選択できますが、簡単な方法として[READINC][READDEC]が使えます。
上の表示のときに、[READDEC]を押しました。
SP(スタックポインタ)が表示されました。
続けて[READDEC]を押しました。
HLレジスタが表示されました。
続けて[READDEC]を押しました。
DEレジスタが表示されました。
続けて[READDEC]を押しました。
BCレジスタが表示されました。
これは「裏レジスタ」のD’E’です。
これも「裏レジスタ」のB’C’です。
このようにレジスタモードでは[READDEC][READINC]キーを使って、レジスタを順に表示させることができます。
表示順はリングになっていて、エンドレスで行われます。
また表示されているデータの代わりに新しい値を入力してから、[WRITEINC]を押すことで、そのレジスタバッファの値を書きかえることができます。
レジスタモードを終了するには、[REG]キーに続けてデータキーの[0]([OFF])を押します。
CPUをつくろう!第443回(2010.2.26upload)を再編集
ワンボードマイコンをつくろう![第12回]
2011.6.28upload
前へ
次へ
目次へ戻る
ホームページトップへ戻る