このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ

*目次 [#yf5a172c]

#contents


*TK-85の動作確認を行う [#za9ad027]

1:次のプログラムのマシン語の部分を、8000h番地から入力していった。

#code(asm){{
                                ORG	8000H
8000: 21 F8 83                  START:	LXI	H,83F8H
8003: 3E 08                     	MVI	A,08
8005: 36 40                     LOOP:	MVI	M,40H
8007: CD 14 80                  	CALL	ADDR1
800A: 36 00                     	MVI	M,00
800C: 23                        	INX	H
800D: 3D                        	DCR	A
800E: C2 05 80                  	JNZ	LOOP
8011: C3 00 80                  	JMP	START

8014: 16 40                     ADDR1:	MVI	D,40H
8016: 06 00                     ADDR2:	MVI	B,00
8018: 05                        ADDR3:	DCR	B
8019: C2 18 80                  	JNZ	ADDR3
801C: 15                        	DCR	D
801D: C2 16 80                  	JNZ	ADDR2
8020: C9                        	RET

}}

2:入力後にまた8000h番地に移動して、AUTOにスイッチが入っていることを確認してから、[RUN]を押す。

3:LEDの上を矢印が左から右に移動していけば、TK-85がきちんと動作し、しかもプログラムに間違いがないことが判明する([[動画:http://security2600.sakura.ne.jp/main2/data1/CIMG1791.AVI]])。


#youtube(v/p21SToB_3y,425,350);
#youtube(v/p21SToB_3yA,425,350);


**プログラムの解説 [#zcd6dd46]

 2〜10行目がメインプログラム(注目する桁を変化させる処理を担当)、12行目〜18行目が待機処理用サブルーチン(同じ桁で矢印が表示され続ける処理を担当)になっている。

-2行目の「LXI H,83F8H」でHLレジスタに83F8hをセット(H=83h,L=F8h)。
--83F8h番地はアドレスディスプレイの上1桁目のためのセグメントデータバッファである。
-3行目の「MVI A,08」でAレジスタに8をセット。
--LEDが8桁あることに関係する。
--Aレジスタは注目しているLEDの桁数に対応する。
-4行目の「MVI M,40H」でHLレジスタにセットされているアドレス値に40hをセット。
--40hはハイフンを対応するセグメントデータである。
--つまり、アドレスディスプレイの上1桁目にハイフンが表示される。
-5行目の「CALL ADDR1」でラベル名ADDR1のアドレス値(12行目)の命令が呼び出される。
-6行目の「MVI M,00」でHLレジスタにアドレス値に00hをセット。
--00hは表示なしを意味する。
--つまり、アドレスディスプレイの上1桁目のハイフンの表示が消える。
-7行目の「INX H」でHLレジスタの内容を+1する。
-8行目の「DCR A」でAレジスタの内容を-1する。
-9行目の「JNZ LOOP」でZフラグが0ならばラベル名LOOPのアドレス値にジャンプする。
-10行目の「JMP START」でラベル名STARTのアドレス値にジャンプする。
--Aを8からデクリメントしていき、0になるとゼロフラグが立つので、Aに8をセットするところまで戻る。つまり、8桁目→7桁目→…→1桁目→8桁目→…と注目する桁が変化していく(これは矢印の動きに対応)。
-12行目の「MVI D,40H」でDレジスタに40hをセットする。
--このDレジスタは矢印がその場で表示され続ける時間に対応している。
-13行目の「MVI B,00」でBレジスタに0をセットする。
-14行目の「DCR B」でBレジスタの内容を-1する。
--この処理が実行されると、Bレジスタは常に-1になる。
-15行目の「JNZ ADDR3」でZフラグが0ならばラベル名ADDR3のアドレス値にジャンプする。
-16行目の「DCR D」でDレジスタの内容を-1にする。
-17行目の「JNZ ADDR2」でZフラグが0ならばラベル名ADDR2のアドレス値にジャンプする。
--つまり、Dレジスタが40hからデクリメントされていき、最終的に0になったら、ジャンプせずに18行目のRET命令によりサブルーチンを抜け出す。


**プログラムの改造 [#t268dd1c]

 上記プログラムの8014〜8015番地を「MVI D,40H」から「MVI D,20H」に変更するして、同じく8000h番地に移動してからプログラムを走らせると、矢印の動きが早くなったことを確認できるはずである([[動画:http://security2600.sakura.ne.jp/main2/data1/CIMG1793.AVI]])。

#youtube(v/p_xI9iGNTOA,425,350);

*参考文献 [#p569c6cb]

-『TK-85トレーニングブック』