Yamamoto's Laboratory
Lesson
   1.Numbers
   2.Memory
   3.RAM
   4.Ports
   5.Timer
   6.ROM
   7.8085A
   8.Instruction
   9.Monitor
Appendix
 2.Detail

Appendix 2Detailed Description; Programs 1 thru 4モニタープログラム解説

Elenco Electronics社Elenco Electronics社のコンピュータートレーニングボード MICRO-MASTER MM-8000 の Appendix 1 に関する解説です.モニタープログラムの内容について説明します(参照:MM-8000のマニュアルのAPPENDIX 2).

目次


PROGRAM 1

モニタープログラムの プログラム 1 について説明します.このソースコードは AppendixPROGRAM 1 に,フォローチャートはLESSON 10図 1 にあります.以下,プログラムのステップ(STEP)毎に動作を説明しますが,ステップはソースコードやプログラムに示されています.

STEP 10-1
次に実行する命令のアドレスは,プログラムカウンター(PC)と呼ばれるレジスターに書かれます.電源をONあるいはリセット直後,レジスター PC は 0000 となっているので,メモリーの 0000 番地から命令は実行されます.JMP 命令はそれに引き続く 2バイトの値を PC レジスターに格納します.ここでは,0060 が格納されるので,つぎは 0060 番地に書かれている命令が実行されます.別の言い方をすれば,「実行が 0060に移る」です.メモリーの先頭付近は割り込みなどのプログラムが書かれる領域(ベクタ領域)なので,そこを飛び越える必要があります.
STEP 10-2
0060番地の LXI DE 命令により,0061番地と0061番地の値がレジスターペアー DE にコピーされます.ローオーダーの OA(アドレス 0061) は E レジスターに,ハイオーダーの O1(アドレス 0062) は D レジスターにコピーされます.この 010A は RAM(コピー先)にコピーする ROM(コピー元)の最初のアドレスです.
STEP 10-3
先のステップ同様に,L レジスターに DC,H レジスターに 80 がコピーされます.この 80DC は コピー先である RAM の最初のアドレスです.
STEP 10-4
8085は,メモリーからメモリーへの直接コピーはできません.そのため,コピーするメモリーのデータは一度レジスターに格納する必要があります.そのため,コピー元の最初のアドレスが格納されている DE レジスターの値(010A)であるアドレス 010A のデータ(EB)を A レジスターにコピーします.
STEP 10-5
HLレジスターの値(010A)であるアドレス 80DC に,A レジスターの値をコピーします.これで,コピー元の ROM のアドレス 010A の値が,コピー先の RAM の 80DC にコピーされます.
STEP 10-6
引き続きコピーを行うために,DE と HL レジスターの値をインクリメント(+1)し,STEP 10-4 — 10-5 を繰り返します.INX HL は HL レジスターを +1 INX DE は DE レジスターを +1 します.
STEP 10-7
コピーの完了を調べるステップです.コピー先の最後のアドレスは 80FF(参照: Appendix 1の表5)なので,L レジスターの値が 00 になればコピーの処理は完了です.最初に「MOV AL」により,L レジスターの値を A レジスターにコピーします.引き続く「CPI 00」では A レジスターが 00 になれば,Z フラグがセットされます.CPI は A レジスターから即値(ここでは 00)を引き,フラグをセットします.Z フラグを監視することで,コピー動作の完了のチェックができます.
STEP 10-8
Z フラグがセットされていなければ,COPY のアドレス(0066)に戻ります.Z フラグがセットされている場合には,アドレス 0070 に処理が移ります.
STEP 10-9
IOポート(8155)のポート A を入力に,ポート B と C を出力にセットします.Lesson 4 で学習したとおり,そのためには 8155 のコマンドステータスレジスターに OE を書き込む必要があります.「MVI A」と引き続く 0E で,A レジスターに 0E を格納します.次の 「OUT 80」で,8155 のコマンドステータスレジスターに A レジスターの値を書き込みます.このコマンド「OUT 80」では,この命令の実行中には上位のアドレスライン(A15 - A08)にも「1000 0000」が出力されます.CPU の IO の場合,下位アドレスの 8 ビット(AD07-AD00)が IO 選択とデータ転送に使われますが,ここでの回路では A15 が 8155 の CE に接続されており効果があります.そのため,「OUT 80」とする必要があります.80 の代わりに,A14とAD06も 1 になる C0 でも同じように動作すると思う(?).
STEP 10-10
8085 を停止します.

PROGRAM 2

DELAY ROUTINE

DISPLAY ROUTINE

ディスプレイルーチンのフローチャートは,Lesson 11図 3 に示されています.また,Appendix 1 の PROGRAM 2 にソースコードを示します.それらを参考に,以下を理解してください.

STEP 11-B1
アドレス 0077 のLHLD(Load H and L direct)命令は,引き続く2バイトが示すアドレスのデータを HL レジスターにロードします.すなわち,アドレス 80FA の値(MODE L)が L レジスターに,アドレス 80FB の値(MODE H)が H レジスターに入れられます.この MODE のバイト(MODE LとMODE H)はディスプレイに表されるバイトや少数点バイトの生成に使われます.アドレス 007A の INP はこの命令の次のアドレスの値が示すポートからデータを読み込み,それを A レジスターに格納します.アドレス 007B の値 83 は,アウトプットポートとして設定されたポート C を表します.Lesson 4 で示したとおり,ポート C から出力されるデータは,Aレジスターに格納されます.ポート C は出力に設定されているにもかかわらずデータを読み込む命令は奇異に感じるかもしれません.しかし,これは問題はなく,ポートCのデータを読み込むことができます(詳しくは,Lesson 4 の READING OUTPUT PORT).アドレス 007C の XRI(Exclusive oR Immediate) 命令は,Aレジスターの値とこの命令の次のアドレスの値(ここでは 01)と排他的論理和を実行します.実行の結果は,Aレジスターに格納されます.排他的論理和をとる 01 のビット 1—7 は 0 なので,これらの A レジスターのビットは変化しません.一方,ビット 0 は 1 のため,A レジスターのビット 0 は補数(ここでは反転)になります.アドレス 007E の MOV BA(MOVe register)は,A レジスターの値を B レジスターにコピーします.後で,このデータはポート C に出力される.ビット0はデータを表示するディスプレイ(1 or 2)を決定するので,データは反対側のディスプレイに表示される.
STEP 11-B3
このステップでは,ビット0が1だと点灯し0だと消灯する小数点の表示を制御するバイト(少数点バイト: 図1-d)を生成します.7セグ LED ディスプレイの小数点は,DA Mode:消灯,AL mode:ディスプレイ2(右側)のみ点灯,AH mode:ディスプレイ1(左側)のみ点灯します(図 1-b).小数点バイトのビット 1—7 は 0 です.図 1 d に,この少数点バイトを示します.これはパターンテーブルからのバイトを統合し,ディスプレイを駆動するポート B に出力されます.これにより,小数点を伴ったひとつの数字が 7セグ LED に表示されます.少数点バイトを作るために,小数点が点灯する場合のビット 0 が 1 の代わりに,ビット 0 が 1 になる仮のバイトを生成します.図2の b に小数点が点灯する条件を示します.Step 11-B2a で,図2の c に示す条件のビット 0 が 1 のバイトが作られる.望まない DA にある 1 は,11-2b と 11-2c のステップでマスクされる.ステップ 11B-2d でビットゼロは補数に変換(反転)される.ビット 1—7 はマスクされ,最終少数点バイトは C レジスターに保管される.
a MODE H MODE L
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
Data(DA) Mode 1 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0
Address Low(AL) Mode 1 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1
Address High(AH) Mode 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
b MODE
DA AL AH
Display 1(left) 0 0 1
Display 2(right) 0 1 0
  
c MODE
DA AL AH
Display 1(left) 1 0 1
Display 2(right) 0 1 0
d 最後の小数点バイト
7 6 5 4 3 2 1 0
小数点点灯 0 0 0 0 0 0 0 0
小数点消灯 0 0 0 0 0 0 0 1
小数点バイトの発生

PROGRAM 3

PROGRAM 4

ページ作成情報

参考資料

  1. MM-8000のマニュアルのAPPENDIX 2

更新履歴

2014年01月01日 ページの新規作成


no counter