8080マイコンをつくろう!(TK−80完全復活!)
なんと8080です!
もちろん、BASICからCP/Mまで、できます!
36年の時を経ていまよみがえる8080CPUマイコン組立キット!
なんたってはるか昔の生産中止品を集めて作る組立キットです。
生産前から堂々予告です。
入手できなくなったら即生産終了!売り切れ御免!
[第42回]
●ゲームプログラムの乱数について(5)
ゲームのための乱数発生プログラムは毎回異なる数列になるようにしなければなりません。
Z80ではその仕掛けとして、本来はダイナミックRAMのリフレッシュ用カウンタレジスタとして用意されたRレジスタを利用する、という方法について前回は説明をしました。
しかし8080にはRレジスタがありません。
ND8080用の応用プログラム(ゲームプログラム)を作ろうとして、そこでつかえてしまいました。
なにかいい工夫はないものか。
必要は発明の母、なんてことを申しますが、そんな大げさなものではありませんけれど、8080でRレジスタの代わりになる、ちょいといい方法を思いつきました。
それがこれです。
; ;CHATTERING TIMER ; ;D1=4.5112ms->4.6841ms ;D2=9.0176ms->9.3648ms ;D3=27.0176ms->28.0679ms ; ORG $02DD 02DD 1624 D1:MVI D,24;=36 ck=7 (7+266*36+10)/2.048=9593/2.048=4684.08microsec 02DF 1E10 D1_2:MVI E,10;=16 ck=7 7+15*16+15=266 02E1 1D D1_3:DCR E; ck=5 02E2 C2E102 JNZ D1_3; ck=10 02E5 15 DCR D; ck=5 02E6 C2DF02 JNZ D1_2; ck=10 02E9 C9 RET; ck=10 02EA 1648 D2:MVI D,48;=72 (7+266*72+10+10)/2.048=19179/2.048=9364.75microsec 02EC C3CF03 JMP D2_2 02EF 16D8 D3:MVI D,D8;=216 (7+266*216+20)/2.048=57483/2.048=28067.87microsec 02F1 C3DF02 JMP D1_2 ;;; |
キー入力ルーチンでコールされるチャタリング回避のためのタイマールーチンです。
ということはキー入力プログラムを実行するときは、このタイマールーチンが必ずコールされます。
これを利用することを考えました。
もともとはD2:では繰り返し回数をセットしたあと、すぐにD1_2にジャンプしていたのですが、そこにRレジスタの代わりになるプログラムを埋め込みました。
D2_2(03CF)へのジャンプです。
下はそのジャンプ先のD2_2のプログラムです。
; 03CF EB D2_2:XCHG 03D0 21D2FF LXI H,R 03D3 34 INR M 03D4 EB XCHG 03D5 C3DF02 JMP D1_2 |
メモリ上に置いたRレジスタ(FFD2)の値を+1しています。
つまりキー入力ルーチンで、チャタリングタイマーをコールするたびにRレジスタの値が+1されるわけです。
今気が付きました。
このプログラムにはミスがありました。
繰り返しの数をDレジスタにセットするのはD2_2のあとでなければいけませんでした。
これではDレジスタがFFになってしまいます。
ま、でも、ちょっとチャタリングタイマーとしては大きい数字になりますが、ここはこういうことにしておきましょう。
将来何か直さなければならないところが出てきたときに、ついでに直すことにいたします。
このところずっと多忙で途中休み休みで書いてきました当連載もこれでひとまず終了ということにいたします。
これまで辛抱強くお付き合いいただきました皆様には心から感謝申し上げます。
ND8080組立キットはプリント基板やLSIの入荷がご注文に追いつかず、ご注文いただいた皆様には随分長くお待ちいただきました。
それも今月に入ってからやっと落ち着きました。
その後はそれほど待っていただかなくてもお届けすることができるようになりましたが、ここにきてプリント基板在庫がほとんどなくなってしまいました。
8080CPUや8224、8228もわずかな在庫が残っているだけですので、それがなくなったら追加で発注できるかどうかはなんともいえません。
もしご購入をお考えでしたら、早めのご注文をおすすめいたします。
8080マイコンをつくろう![第42回]
2016.6.23upload
前へ
次へ
ホームページトップへ戻る