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