ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.6.28 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆特注品Z80ボードND80ZHの機能説明 TK80コンパチブルで、その上中日電工オリジナルのND80Zとしても動作するというZ80CPUのワンボードマイコンを企画し、その開発準備をしていたところに、ND80Zの特注品の開発依頼をいただきました。製品名はND80ZHです。 新企画のZ80ボード(ND80ZV)はこのあとで製作することになりますが、基本的な機能はND80ZHと共通していますから、まずはND80ZHの機能を説明します。 |
[第14回]
●ND80Zモニタのステップ動作とプリンタ出力
今回もZ80版TK80ボード(ND80ZH)のモニタ機能の説明です。
ND80Zモニタのステップ機能はTK80のステップ機能と同じ動作をします。
しかしND80Zモニタのステップ機能には、さらにプリンタ出力の機能が付け加えられています。
[2011.6.28注記]ND80ZVにはプリンタ出力機能はありません。
ND80ZHのプリンタコネクタに、セントロニクスプリンタ(MSDOS時代のプリンタ)を接続して、「プリンタへのレジスタ出力可」の設定にしたうえで、ステップ操作をすると、命令を1ステップずつ実行するたびに、7セグメントLEDにアドレスやAFレジスタの値を表示するとともに、プリンタにそのときの全CPUレジスタの値がプリントアウトされます。
また写真で説明をすることにしましょう。
ステップ動作の様子を確認するために簡単なプログラムをメモリに書きました。
8000 3E05 MVI A,05 …Aレジスタに05を入れる
8002 D640 SUI 40 …Aレジスタから40(=64)を引く
8004 C30280 JMP $8002 …8002にジャンプする
たったこれだけの簡単なプログラムです。
フラグが変化する様子も見たいのでSUI命令を使ってみました。
●プリンタへのレジスタダンプON
プリンタへのレジスタダンプ出力をONにするには、[第11回]で説明したI/Oモードを使います。
[*I/O]キーに続いてデータキーの[0]を押すと、プリンタへのレジスタダンプ出力がONになります。
キーのレイアウトはこちら([第11回])の写真を参照してください。
データキーの[0]は[*I/O]モードでは、[PR(REG)]つまりレジスタのプリンタ出力のON/OFF切り換えキーになります。
[*I/O]に続いて[0]([PR(REG)])を押したところです。
FFD1はプリンタ制御用ワークレジスタアドレスです。
7セグメントLEDのデータ表示部に表示された01は、プリンタ出力ONの表示です。
繰り返して、[*I/O]に続いて[0]([PR(REG)])を押すと、プリンタON(データ表示部下位2桁が01)とプリンタOFF(データ表示部下位2桁が00)が交互に表示されます。
もう一度[*I/O]に続いて[0]([PR(REG)])を押したところです。
データ表示部下位2桁が00になりました。
このときはプリンタを接続していても、プリンタにレジスタダンプ出力は行われません。
リセット直後はこの状態になります。
今回はレジスタダンプがプリンタに出力される様子を見たいので、もう一度[*I/O]に続いて[0]([PR(REG)])を押して、レジスタダンプのプリンタ出力ONにします。
●ステップ動作開始
ディップスイッチのbSをONにすると、ステップ機能がONになります。
ディップスイッチの写真はこちら([第13回])にあります。
ステップ機能をONにしたら準備完了です。
[8][0][0][0][ADRSSET]と入力してプログラムの開始アドレスをセットします。
この状態で[RUN]キーを押すと、8000番地からのユーザプログラムが実行されます。
ステップ機能がOFFのときはそのままユーザプログラムが実行され続けられますから、今回のテストプログラムの場合には「無限ループ」なのでリセットされるまで実行を続けます。
今回はディップスイッチのbSをONにしてステップ機能がONになっていますから、8000番地の命令を実行するとすぐにブレイクしてモニタに戻ってきます。
8000番地の3E05(MVI A,05)を実行した直後にブレイクしてモニタに戻ったところです。
7セグメントLEDのアドレス表示部には次の命令の実行アドレス8002が表示され、データ表示部の上位2桁にはAレジスタの値05が表示され、下位2桁にはF(フラグレジスタ)の値が表示されています。
ここまではTK80の場合と同じなのですが、このとき、プリンタにはCPUの全レジスタの値が下のように出力されます。
[CONT]キーを押しました。
[CONT]キーはTK80の[RET]キーと同じです。
[CONT]キーを押すと、ブレイクしたアドレスからユーザープログラムの実行が再開されます。
ステップ機能がONになっていますから、8002の命令D640(SUI 40)を実行すると、直後にブレイクしてモニタに戻ります。
7セグメントLEDのアドレス表示部には次の実行アドレス8004が表示されています。
Aレジスタの値05に対してSUI 40が実行された結果、05−40=C5なので、データ表示部の上位2桁にはC5が表示され、下位2桁にはF(フラグ)レジスタの値83が表示されています。
フラグレジスタが83と表示されても、そのままでは何のことだかわかりませんが、同時にプリンタ出力されるレジスタダンプリストには、右端にフラグレジスタの各ビットが出力されていますから、それを見るとフラグの状態を簡単に知ることができます。
S(サイン)フラグとC(キャリー)フラグがONになっていることがわかります。
続いて[CONT]を押しました。
アドレス8002に戻りました。JMP命令が実行されただけなのでまだレジスタの値は変化していません。
下はプリンタ出力です。
[CONT]を押しました。
また8002番地の命令D640(SUI 40)が実行されて、Aレジスタの値は、C5−40=85になりました。
今回の計算ではC(キャリー)フラグはOFFになります。
85は負数なので、まだS(サイン)フラグはONになっています。
[CONT]を押しました。
またアドレス8002に戻りました。JMP命令が実行されただけなのでまだレジスタの値は変化していません。
[CONT]を押しました。
8002番地の命令D640(SUI 40)が実行されて、Aレジスタの値は、85−40=45になりました。
今回の計算ではS(サイン)フラグもC(キャリー)フラグもOFFになります。
今回はPフラグがONになっています。
Z80では、ADD、SUBなどの算術演算の結果のフラグでは、Pフラグはパリティフラグではなくてオーバーフローフラグです。
負数である85から正数の40を引いたのに結果が正数の45になってしまうので、オーバフローフラグがONになるのです。
8ビットの符号付数の最小値は80(十進数の−128)なので、85(−123)からは40(64)は引けません。
ですからオーバフローフラグがONになります。
この連載記事を途中から読み始められた方で、今説明した2進数(16進数)の正数と負数についてのところが、どうもよくわからないなあ、と感じられた方はこちら(CPUをつくろう![第14回])にその説明がありますので、参考になさってください。
CPUをつくろう!第446回(2010.3.2upload)を再編集
ワンボードマイコンをつくろう![第14回]
2011.6.28upload
前へ
次へ
目次へ戻る
ホームページトップへ戻る