8080マイコンをつくろう!(TK−80完全復活!)
なんと8080です!
もちろん、BASICからCP/Mまで、できます!
36年の時を経ていまよみがえる
8080CPUマイコン組立キット!
なんたってはるか昔の生産中止品を集めて作る組立キットです。
生産前から堂々予告です。
入手できなくなったら
即生産終了!売り切れ御免!




2016.6.11

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

[第39回]

●ゲームプログラムの乱数について(2)

また何日か間が空いてしまいました。
遅れておりました特注品をやっと納品しましたところ、プログラムにまずいところがみつかって、その対策を最優先するため、ホームページの更新をするだけの余裕がありませんでした。
やっと対策ができてほっと一息ついたところです。

前回はND8080組立キットに付属しております「応用プログラム」の乱数について、少し書き始めたところで終ってしまいました。
今回も途中で終ってしまいそうですが、少しずつだけでも書かなければ、と思って書いております。

下は「応用プログラム」の「プログラムbQ CRASY EIGHT」の乱数発生サブルーチンです。
このサブルーチンをコールするとAレジスタに0〜7の範囲の整数が入ります。

                           ;ransu
80BA E5       RND3:PUSH H
80BB D5            PUSH D
80BC 2A0580   RND2:LHLD RNDDT
80BF 23         INX H
80C0 7C         MOV A,H
80C1 E603       ANI 03
80C3 67         MOV H,A
80C4 220580     SHLD RNDDT
80C7 3A0780     LDA RNDDT2
80CA 57         MOV D,A
80CB 7E            MOV A,M
80CC E607       ANI 07
80CE BA            CMP D
80CF CABC80     JZ RND2
80D2 320780     STA RNDDT2
80D5 D1            POP D
80D6 E1            POP H
80D7 C9            RET
              ;


しかし、このリストだけを見ていても、どうしてこれが乱数プログラムなのか、ちょっとわからないのでは、と思います。
でも下のリストを見てください。
BASICプログラムで上のサブルーチンを繰り返しコールして、その結果を集計したものです。
その後に少しプログラムを変更したために、ここでコールしている乱数プログラムは上のリストとは2バイトずれています。
このリストはND8080のZB3BASICでプログラムを書いてそれを実行したときのログの一部です。

 >/ld crazy88.bin,8000
loading CRAZY88.BIN ...0139(313)bytes loaded,from 8000 to 8138
>.
    10 A%=0
    20 DIM DD%(7)
    30 FOR B%=0 TO 7
    40 DD%(B%)=0
    50 NEXT B%
    60 FOR B%=0 TO 255
    70 USR($8100)
    80 DD%(A%)=DD%(A%)+1
    90 PRINT A%;" ";
   100 NEXT B%
   110 PRINT 
   120 FOR B%=0 TO 7
   130 PRINT B%,DD%(B%)
   140 NEXT B%
>    70 USR($8200)
>cm 8200
8200 5E-cd
8201 27-bc
8202 39-80
8203 06-32
8204 06-40
8205 5E-f4
8206 27-c9
8207 39-
>r.
3 2 7 3 4 0 3 5 7 3 2 0 3 0 7 3 7 0 3 7 0 3 6 7 0 3 1 7 0 3 
4 7 6 7 3 0 1 4 3 6 4 7 3 5 2 5 0 1 7 3 2 3 6 7 3 0 1 3 5 0 
1 5 6 2 7 6 0 2 4 0 6 7 6 0 7 1 4 0 1 6 3 6 7 1 4 0 1 4 0 5 
0 2 0 5 0 7 1 5 1 2 4 3 0 2 4 3 5 1 3 1 0 2 4 3 2 6 3 1 0 2 
6 3 5 0 2 6 3 5 1 3 1 0 2 4 3 2 5 3 6 2 4 3 1 2 6 3 5 0 3 4 
0 2 6 3 2 4 3 7 3 5 0 2 6 3 2 0 3 1 6 7 2 4 3 2 6 3 0 3 0 4 
5 4 2 5 4 2 5 4 2 3 5 4 2 3 6 5 4 2 5 3 2 0 3 1 0 3 0 3 2 7 
3 4 0 3 5 7 3 2 0 3 0 7 3 7 0 3 7 0 3 6 7 0 3 1 7 0 3 4 7 6 
7 3 0 1 4 3 6 4 7 3 5 2 5 0 1 7 
0            43
1            22
2            32
3            57
4            26
5            23
6            23
7            30


ZB3BASICはマシン語サブルーチンとの間で値の受け渡しを簡単にできるように特別な整数の変数(A%〜Z%)をRAMの固定領域に割り当てています。
8200から書いた、乱数サブルーチンをコールするサブルーチンでは、そこで得られた乱数値をアドレスF440に入れてリターンしています。
F440はBASIC変数A%のアドレスです。

実行結果を見てください。
「0」と「3」が少し多いですけれど、簡単なゲーム用の乱数としては、まあまあ使えますでしょう。
さて、どうしてさきほどの「乱数」サブルーチンで乱数らしきものを発生させることができるのか?
皆様、おわかりになりますでしょうか?

というところで、本日も時間がなくなってしまいました。
続きはまた次回にいたします。

8080マイコンをつくろう![第39回]
2016.6.11upload

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