2011.12.8
前へ
次へ
目次へ戻る
ホームページトップへ戻る

ワンボードマイコンをつくろう!(パソコンの原点はここから始まった) TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます

[第129回]


●電子サイレンプログラム

前回お見せした電子サイレンプログラムはTK−80のプログラムです。
非常に短いプログラムですが、さすがプロだけあってじつに巧妙に作って有ります。
前回はちょっと時間がなくなってしまいましたので、終わりをはしょってしまいました。
プログラムリストではニーモニックが3箇所空白になっているところがありました。
アドレス8214とアドレス822Cのコード47のニーモニックはMOV B,Aです。
また8218のコード0640のニーモニックはMVI B,40です。
実はこの3箇所の命令は無駄な命令です。
なぜ無駄なのか、ちょっと考えてみてください。
頭の体操です。
ヒントはこの3箇所のアドレスでBレジスタの値がどうなっているか?を考えてみることです。

おそらく。
校正の段階で誰かがそのことに気が付いて、この3箇所のニーモニックを削除したのではないか、と思います。
しかし。
アセンブラはそれで済みますが、マシン語コードはこういう場合が一番面倒です。
削除したところから後のアドレスが全部変わってしまいます。
問題はジャンプ命令とCALL命令です。
削除した個所から後のアドレスへのジャンプ命令やCALL命令のアドレス部は全部書き直さなくてはなりません。
そのあたりで行き違いが発生して、前回ご覧いただいたように、ニーモニックのみが削除されて、オブジェクトコードはもとのまま残ってしまった、のではないでしょうか?

こうやって読んでいきますと、なんとなくウラでの編集作業のどたばたが浮かんでくるようでなかなかに興味深いものがあります。

その部分はとにかく無駄ですから削除してしまうことにいたしまして、前回書きましたように、ハードウェアの違いから、前回のリストのままではND80ZVではサイレンは鳴ってくれません。
TK−80では、I/Oポート8255のCポートのビット1にアンプ付きスピーカを接続することを前提として、サウンド関係のプログラムが書かれています。
TK−80の8255のCポートのI/Oアドレスは02です。

一方ND80ZVでは、最初から基板上にスピーカのアンプ回路がついています。
そして出力回路のジャックにスピーカのプラグを接続すれば、スピーカから音を出すことができます。
ND80ZVのスピーカ出力回路は8255ではなくてTTLです。
I/Oアドレスは98で、そのビット5を使います。

下はその違いを考慮してND80ZV用に書き直した電子サイレンプログラムです。
;TK−80 の注釈をつけたところがND80ZVのために変更した部分です。
I/Oに出力する命令部分以外は変更していません(無駄な3箇所の命令は削除してあります)。

これはアセンブラのソースプログラムです。
ND80ZV組立キットには8080アセンブラも附属していますから、メモ帳などでソースプログラムを書いて8080アセンブラで簡単にマシン語プログラムを作成することができます。

;;; SIREN from "maikon nyumon" for ND80Z3
;;;
;;; 11.12.8
;
	ORG $8200
;
START:MVI B,50
LOOP1:MVI A,FF   ;TK-80 02
	OUT 98   ;TK-80 02
	CALL WAIT
	MVI A,DF ;TK-80 00
	OUT 98   ;TK-80 02
	CALL WAIT
	DCX B
	MOV A,B
	CPI 40
	JNZ LOOP1
LOOP2:MVI A,FF   ;TK-80 02
	OUT 98   ;TK-80 02
	CALL WAIT
	MVI A,DF ;TK-80 00
	OUT 98   ;TK-80 02
	CALL WAIT
	INX B
	MOV A,B
	CPI 50
	JNZ LOOP2
	JMP START
;
WAIT:PUSH B
WAIT2:DCR B
	JNZ WAIT2
	POP B
	RET
;
上のソースプログラムを8080アセンブラ(ASM80)にかけると、下のようにマシン語プログラムを翻訳作成してくれます。

2011/12/8  21:31  SIREN.TXT
END=8235
              ;;; SIREN from "maikon nyumon" for ND80Z3
              ;;;
              ;;; 11.12.8
              ;
              	ORG $8200
              ;
8200 0650     START:MVI B,50
8202 3EFF     LOOP1:MVI A,FF   ;TK-80 02
8204 D398     	OUT 98   ;TK-80 02
8206 CD2F82   	CALL WAIT
8209 3EDF     	MVI A,DF ;TK-80 00
820B D398     	OUT 98   ;TK-80 02
820D CD2F82   	CALL WAIT
8210 0B       	DCX B
8211 78       	MOV A,B
8212 FE40     	CPI 40
8214 C20282   	JNZ LOOP1
8217 3EFF     LOOP2:MVI A,FF   ;TK-80 02
8219 D398     	OUT 98   ;TK-80 02
821B CD2F82   	CALL WAIT
821E 3EDF     	MVI A,DF ;TK-80 00
8220 D398     	OUT 98   ;TK-80 02
8222 CD2F82   	CALL WAIT
8225 03       	INX B
8226 78       	MOV A,B
8227 FE50     	CPI 50
8229 C21782   	JNZ LOOP2
822C C30082   	JMP START
              ;
822F C5       WAIT:PUSH B
8230 05       WAIT2:DCR B
8231 C23082   	JNZ WAIT2
8234 C1       	POP B
8235 C9       	RET
              ;
LOOP1        =8202  LOOP2        =8217  START        =8200  
WAIT         =822F  WAIT2        =8230  

このリストは人間が理解し易いようにソースプログラム部分とマシン語の部分を対比する形で作成されたもので、拡張子が.lstのファイルです。

8080アセンブラで作成したマシン語プログラムはND80ZVとUSBケーブルで接続して、ND80ZVに送信することができます。
ND80ZVに送信されるマシン語プログラムファイルは上のリストファイルではなくて、拡張子.btkというファイルで、それもASM80によってリストファイルと同時に作成されます。
下は8080アセンブラ(ASM80)を実行したあと、送信プログラム(HIDWR)でND80ZVにプログラムを送信している様子です。



なお、HIDWR命令の実行に先だって、ND80ZV(TK80モニタモード)は、[REG]キーを押して、LOADスタンバイにしておきます。

[訂正]
今回の作業をしていてND80ZV組立キットの附属説明書にミスがあることがわかりました。
下記のように訂正願います。

「アセンブラ・逆アセンブラ操作説明書」の5ページ
[誤]
1)先にND80ZVの[*(I/O)]キーを押します(TK80モニタモードでは、[*(I/O)]キーは[LOAD]キーとして働きます)。
[正]
1)先にND80ZVの[REG]キーを押します(TK80モニタモードでは、[REG]キーは[LOAD]キーとして働きます)。

この電子サイレンプログラムについてはもう少し続きがあるのですが、今回もまた時間がなくなってしまいました。
この続きはまた次回にすることにいたします。

ワンボードマイコンをつくろう![第129回]
2011.12.8upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る