ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.7.1 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆8080アセンブラ TK80の時代にはプログラムはマシン語のまま入力しました。そのマシン語のプログラムは、命令コード表を見ながら1命令ずつニーモニックからマシン語に翻訳して作りました。パソコンのなかった時代にはそうするしかなかったのです。 今はパソコンが使えますから、アセンブラを使えば効率のよいプログラム作りができます。 ND80ZVには8080アセンブラとZ80アセンブラが附属しています。 |
[第74回]
●電子オルガンプログラム
前回は8080アセンブラの実行例として、電子オルガンプログラムをアセンブルしてみました。
ND80ZVのキーを押すとそのキーに割り当てられた高さの音がスピーカーから出力される、というプログラムです。
このプログラムは、以前にどこかで紹介したことがあるような気がして捜してみましたら、CPUをつくろう![第363回]にありました。
MYCPU80の操作説明書の内容紹介のところです。
キーと音の高さの対応図もありますので、そちらのページも参照してみてください。
プログラムリストもそこに掲載してあります。
前回紹介しました電子オルガンプログラムとほとんど同じものですが、CPUクロックが異なっているために、その部分は違っています。
MYCPU80のCPUクロックは2MHzで、命令の実行クロック数もオリジナルの8080とは異なっています。
今回のND80ZVのCPUクロックは6MHzですし、CPUはZ80ですから、やはり命令によってクロック数は8080と違っているものもあります。
ただ今回紹介しました電子オルガンプログラムは、初心者の方の参考にもなるように、と考えて、ソースプログラムは、命令数の少ない8080用のプログラムとして、8080ニーモニック(インテルニーモニック)で書きました。
Z80は8080の命令をマシン語レベルでは8080と全く同じように実行しますから、ソースプログラムの命令を8080のニーモニックで書いても全く問題はありません。
あ。もちろん8080ニーモニックで書いたソースプログラムは8080アセンブラでなければ、マシン語コードに翻訳することはできません。
同様にZ80ニーモニック(ザイログニーモニック)で書いたソースプログラムはZ80アセンブラでなければ、マシン語に翻訳することはできません。
しかしどちらの手続きによっても、アセンブルされてマシン語に翻訳された結果は同じものになります。
もっともZ80にはあるけれども8080にはない命令もたくさんありますから、そのような命令はZ80アセンブラでなければマシン語に翻訳することはできません。
ND80ZVはマシン語やアセンブラを勉強中の方にもぜひ使っていただきたい、と思っております。
そう思って、あらためてCPUをつくろう![第363回]も読み直してみたのですけれど、プログラムリストと、プログラムの動作の説明がしてあるだけで、プログラムそのものの説明はないようです。
まあ。めちゃめちゃ忙しかったんですものねえ。
でも、せっかくサンプルとして電子オルガンのプログラムリストをお見せしたことですから、この機会にプログラムそのものの説明をしてみたいと思います。
とっても簡単なプログラムですから、どなたもご理解いただけることと思います。
あ。
そういえば、突然に思い出しました。
●8080アセンブラ注記
前回は、そのもうひとつ前の回でND80ZVとDOS/VパソコンをUSBで接続して、DOS窓上のリモートプログラムを実行して、ND80ZVのキー入力の代わりに、パソコンのキーから入力して、ND80ZVをリモート操作する、という説明をしたあとで、突然8080アセンブラの説明を割り込んではじめてしまいました。
今回もまだその続きで、またもや脱線したまま走っております。
リモートプログラムの実行も、8080アセンブラの実行も、同じDOS窓(DOSプロンプト)の中で行いますし、その前の回のリモートプログラムの説明の次にいきなり8080アセンブラの話になってしまったものですから、ひょっとすると、お読みいただいている方のなかには、8080アセンブラもUSBで接続したND80ZVが実行しているのではないか、と誤解された方もみえるかもしれません。
同じDOSプロンプトで実行しますけれど、8080アセンブラはDOS/Vパソコンの上だけで動作します。
8080アセンブラは8086の命令で書かれたプログラムです(8080の命令ではありません)。
うーん。ややこしーい。
8080アセンブラは、その実行によって、8080のマシン語コードファイルを生成しますが、その生成の過程では、ND80ZVの接続を全く必要としません。
8080アセンブラを使うときには、ND80ZVをUSBから切り離しておいても全く構いません。
●電子オルガンプログラムの説明
さて、では前回もお見せしましたsound6.lstを少しずつ切り分けながら説明をしていくことにいたします。
2010/7/20 21:25 sound6.txt END=8056 ;;;SOUND6.TXT ;;; sound for ND80Z3 clock=6MHz ;;; 10/3/18 10/6/15 7/20 ;;; ORG $8000 ; KEY=$0247 ; 8000 CD4702 SND:CALL KEY 8003 3C INR A 8004 CA0080 JZ SND 8007 3D DCR A 8008 CD0E80 CALL SNDSB 800B C30080 JMP SND |
; 800E F5 SNDSB:PUSH PSW 800F E5 PUSH H 8010 D5 PUSH D 8011 C5 PUSH B |
8012 213F80 LXI H,SNDTBL 8015 85 ADD L 8016 6F MOV L,A 8017 46 MOV B,M 8018 1E1A MVI E,1A |
801A 50 SNDS1:MOV D,B 801B 3EEF MVI A,EF;sp out=H,DMAoff 801D D398 OUT 98 801F E5 SNDS2:PUSH H;11--------- 8020 E5 PUSH H;11 | 11+11+10+10+4+4+10=60 8021 E1 POP H;10 | 60/6=10 8022 E1 POP H;10 | 8023 00 NOP;4; | 10microsec 8024 15 DCR D;4 | 8025 C21F80 JNZ SNDS2;10---- |
8028 50 MOV D,B 8029 3ECF MVI A,CF;sp out=L,DMAoff 802B D398 OUT 98 802D E5 SNDS3:PUSH H;11--------- 802E E5 PUSH H;11 | 11+11+10+10+4+4+10=60 802F E1 POP H;10 | 60/6=10 8030 E1 POP H;10 | 8031 00 NOP;4; | 10microsec 8032 15 DCR D;4 | 8033 C22D80 JNZ SNDS3;10---- |
8036 1D DCR E 8037 C21A80 JNZ SNDS1 |
803A C1 POP B 803B D1 POP D 803C E1 POP H 803D F1 POP PSW 803E C9 RET |
; ; SOUND TABLE 803F 7F SNDTBL:DB 7F;so4 8040 77 DB 77;so#4 8041 71 DB 71;ra4 8042 6A DB 6A;ra#4 8043 5F DB 5F;do5 8044 59 DB 59;do#5 8045 54 DB 54;re5 8046 4F DB 4F;re#5 8047 47 DB 47;fa5 8048 43 DB 43;fa#5 8049 3F DB 3F;so5 804A 3B DB 3B;so#5 804B 35 DB 35;ra#5 804C 32 DB 32;si5 804D 2F DB 2F;do6 804E 2C DB 2C;do#6 804F 25 DB 25;mi6 8050 27 DB 27;re#6 8051 2A DB 2A;re6 8052 4B DB 4B;mi5 8053 38 DB 38;ra5 8054 64 DB 64;si4 8055 23 DB 23;fa6 8056 21 DB 21;fa#6 ;END KEY =0247 SND =8000 SNDS1 =801A SNDS2 =801F SNDS3 =802D SNDSB =800E SNDTBL =803F |