ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
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 ; |
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
前へ
次へ
目次へ戻る
ホームページトップへ戻る