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

目次

TK-85の動作確認を行う

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

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
                                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がきちんと動作し、しかもプログラムに間違いがないことが判明する(動画)。

プログラムの解説

 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命令によりサブルーチンを抜け出す。

プログラムの改造

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

参考文献

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