ひとりごと 「集計と乱数」


●最初に、集計のカラクリについて。
 テレビ番組などで、観客がひとつずつボタンを持って、「そうだと思う方スイッチオン!」で、人数が表示されるが、
あれは、どんなカラクリになっているのか疑問に思っていた。
 やはり、100人なら100個のフリップフロップを備えていて、ボタンを押すことでそれがセットされて、最終的に、ON
になっているフリップフロップを数えるというやり方なんだと思う。しかし、これじゃハード的に規模が大きくなるんじゃ
ないか。
 なにか、もっとうまいやり方はないものかと、たまに思い出しては考えるけど、やっぱり無いのかなあと思う。
 ボタンは押したら押したままじゃなくて、すぐ離すだろうし、何度も押してその分がカウントされないように、やはり
セットオンリーのフリップフロップで受けないとダメだろうな。
 何か良い方法はないかご存じの方は教えて下さい。


●次に、乱数について。
 乱数を発生させるのは意外と難しい。
 ある装置で、毎回、起動時に乱数を発生させて、その値をタイマに使うというものがあった。そこで悩んだのは、
乱数をどうやって発生させるかということだった。
 最初は、発振回路の出力でカウンタICを回し、リセット解除のタイミングで止まった値を採用していたが、いまいち
乱数らしくなかった。そりゃそうだろう。だいたいタイミングが決まっている。ICの初期値だって、不定とはいえ、現実
にはだいたい決まっている。リセットのタイミングは電解コンデンサによって、不正確なディレイを逆に利用したのだが
意外に正確だったりした。カウンタのクロックを極力高くして、誤差が大きくでるように工夫してみたりしたが。
 こんなアイディアもあった。EEPROMに前回の値を記憶しておいて、今回電源を入れた時にその値をもとに、新しい
乱数値を計算して求めるというもの。

 トラ技で見たのは、3倍と7倍の周波数の発振回路を設けて、それを利用するというものだった。お互いに重ならない
ようになっているわけだ(素数?)。

 ところでパチンコの抽選(玉が入ったら当たりかハズレか判定する)も、乱数によっている。最近は、新乱数方式と
いってハードウェア的にカウンタを回しているが、従来はソフトで処理していた。

 興味があって、じつはROMの解析をしてみた事があるのだが、一般の産業機器を開発している人間から見れば、
じつに奇妙なやり方だった。割り込みじゃなくて、数ミリ秒ごとに「リセット」しているのである!
 パチンコ雑誌に載っていた抽選方式の記事を読むと、リセットだと書いてあるけど、最初は割り込みの間違いじゃ
ねーかと思っていた。ところが実際に基板を調べたら、本当にハードウェアリセットだったのだ。水晶発振器の出力
がカウンタICにつながっていて、その何段目かの出力がCPUのリセット端子に入っていた。

 プログラムの流れを0番地から追いかけてみた。まず、電源投入後かどうか判断していて、電源投入後だったら
必要な初期化を行うようになっていた。具体的には、RAMのある番地に55AAが書いてあるかチェックしていて
値が違ったら、電源が切れていたのだと判断していた。

 プログラムは直線的に流れながら、ところどころでいろんなサブルーチンを呼び出していた。液晶表示の更新とか
ランプの制御とか、センサの監視とか。この流れが、ある時間内に終わるようになっていて、最後は待機状態に
なっていた。たしかJPで同じ番地でループしていたっけか。そうして次のリセットを待つ。

 電源投入後でなかったら、つまり通常の「割り込み」だと、あるカウンタを+1する。これは機種によって違うのだが
パチンコ台に確率として1/256のように書いてあるが、これがそのカウンタの周期だ。小数点以下があるのは、
当たりが複数あるわけで、この分母をその数だけ整数倍する。もし1/256なら、周期256で当たりがひとつという
ことになる。

 このカウンタは、電源が入っている限り一定周期で+1されている。もし玉がスタートに入ったら、それをセンサー
が検出した瞬間のカウンタ値を拾う。この値が、あらかじめ決まっている当たりの番号と等しいなら当たりとする。
 つまり、「玉が入った瞬間に、運命が決まっている」ということ。

 液晶画面の派手なアニメーションを見ながら、当たれ!当たれ!と興奮するのは、じつは無駄なのである。鍵穴
を指でおさえてみたり?、ガラスを叩いたり、念力を送ったり?、いろいろとやっているようだが、玉が入った時に、
もう決まっているのだ。
 隣のオッサンが、店のネオンの影響で電圧が・・・とかオカルトっぽい話をしたり、自分が席をたった後に打った
オバチャンが大当たりして悔しいとか、そういうのはナンセンスなのである。

 ところで、体感器というものがある。これはメトロノームのようなもので、一定周期を振動で教えてくれる。違法では
ないが、これを良しとする店は無いと思う(パチンコしないので知らない。雑誌などからの知識)。
 当たりを判定するためのカウンタは、一定周期で回っている。つまり当たりのタイミングも一定周期だから、もし
そのタイミングを知る事ができれば、それに合わせて玉を打ち出すようにすれば、無駄な玉を節約して、当たりやすく
なるわけだ。たしか、一度当たったら、そのタイミングをセットするのかな。見たことないから知らない。
 その周期は、機種によって違うようでだいたい数秒である。
 パチプロは、こんな機械を使わなくても、自分の体でタイミングがとれるわけだ。怪しげな機械を持っていないから、
店員に調べられても問題ない。(プロお断りと言われる可能性はあるかも?)

 最近のハードウェア乱数方式は、雑誌で紹介されていたが、より高速の周期で、カウンタICを回すので、当たりの
タイミングを体でとらえる事が困難というわけ。でも人間の能力ってすごいからなあ・・・できるヤツも現れるかも?(笑)
 しかし、いまどき74HCなんかのICが、しかもDIPが、ゾロゾロ並んでいる基板というのも珍しい。

 釘調整というのは、スタートへの玉の入りやすさを調整するわけだ。玉が入りやすくなれば、確率が上がることになる。
但し、公には釘調整は許されていないらしい。NHK「新・電子立国」の書籍には、番組で釘調整のシーンを放送したら、
K察からクレームが来たと書いてあった。本当は、パチンコ台をいじることは禁止されているからだ。それを、大目に見て
やっているのだから、放送されたら困るということらしい。

 なおパチスロの場合は、もともとカウンタICで回していて、周期も長い。確か16384だったか?
 自分はぜんぜんやらないから知らないのだけど、あれは、ドラムの絵柄が止まって見えるぐらい訓練していても、
機械がわざとすべらせるから、そう簡単には当たらないらしい。ボタンを押した瞬間は確かに777なのだが、次の瞬間に、
ズルッと一桁がずれる。逆に、ある条件下では、でたらめに押しても777が揃う。
 すべては、マイコン様が支配しているということだな・・・。

 いわゆる裏ROMとか、不正がいろいろあるが、その対策としてワンチップCPUとかケースのカシメなどがあるものの、
やはりイタチごっこで、決定的な対策になっていないようだ。
 それなら基板を樹脂で固めてしまえばと思うが、そういうわけにもいかないようだ。だって必要に応じて検査できないと
いけない。不正の疑いがある場合、固めてあったら調べるのが大変すぎるだろう。検査用のコネクタだけ出すという方法
もあるかもしれないが、メーカー自身が怪しいことをする場合もある(かもしれない)し、なかなか対策は難しいようだ。

 前に、テレビでやっていたけど、最近はレントゲンで基板を調べているようだ。見た目がクリソツなCPUが偽造されて
いるので、正規かどうか判断するには、レントゲンで見ないとわからないとか。


 ところでパソコンのプログラム言語では、乱数を得る関数があるが、これはどうやっているか。基本的には、システム
のインターバルタイマを使っている。つまりさっきのパチンコと似たような感じで、周期的に増えるカウンタの値を、ある
瞬間に拾うわけだ。だがプログラムの流れ的に、拾うタイミングがだいたい一定になれば、乱数らしくなくなる事も。
 数学的に乱数を作る方法としては、たしか、5を掛けて1を足すんだったか・・・でもこれは、周期が短すぎて使えない。
もっと桁を多くとって、上位の桁を抜き出して使ったほうがいいようだ。いずれにしても、ある周期をもっていて、規則性
があるから、完全なる乱数とは言えないと思う。

 昔、Apple][というパソコンがあったが、これは確か、キー入力を待っている間、乱数用のカウンタを回していたと思う。

 以前、オカルト系の雑誌で、「例のダウジングのオヤジ」が、ピラミッド形の建物の中で、パワーを測定するとか言って
あやしげな機器をもちだして色々やっているのが載っていた。その中で、ポケコンを利用していた。これは何かというと
ピラミッドパワーによって、乱数に影響が出るという事らしい。をいをい・・・そりゃ違うぞ!!
 乱数の求め方は、さっきも書いたように、ある規則をもってしまうわけだ。とくに変化はみられなかった・・・というのは
当たり前だろう。少なくともポケコンに関しては、デタラメな事をやっているのが明らかだ。

 本当に、「神のみぞ知る」?みたいな乱数が欲しかったら、たしか・・・本で読んだと思うのだが・・・、放射性物質を
利用するのが良いらしい。でも手に入らないから、自然放射線を使うか?ガイガーカウンタを放置しておくと、空気中や、
宇宙から降り注ぐ宇宙線を検知して、ピッと鳴る。このタイミングを利用して、乱数を作る方法があるようだ。
 ダイオードが発するノイズ(ホワイトノイズ)を増幅して、そのパルスを利用する方法はないだろうか、とも思う。

 「疑似乱数」に対して、「本当の乱数」を作るのは難しい事なのです。


 私はギャンブルをしない主義で、パチンコを学生時代に、つきあいでやったぐらい。宝くじは、子供の頃からオヤジが
買うのを見ていて、まず当たったためしが無い。宝くじとはそういうものだと、身銭を切って教えてくれたすばらしい
オヤジだ(笑)。

 パチスロもやらないんだけど、あれは、7が揃えば当たりだろうぐらいしか知らなかった。
 ゲームのルールを知らなくて、コインを1枚ずつ入れて回していたら、人に笑われてしまった。

 その後、色々勉強したら、あれもパチンコと一緒で、スタートを押した瞬間に内部抽選されるわけ。そこで当たりかはずれ
か、運命は決まってしまうんだ。だから、リールが回ってるのをしっかり見て、ストップを押して目を揃えようとしても、
揃わない時は揃わないんだ。抽選カウンターはパチンコより早く回って、周期が16384あるらしい。
 フラグが立つ、というのだけど、内部当たりというのか、その状態になったら、リールを見てストップを押し、揃えるようだ。

 中古台でも手に入れて、解析記事を書いてみたいものだ。
 しかし捨てるのが大変だから、あまり自宅に置きたくない。むかしパチンコ台を拾ってきて、引っ越しの前に捨てるの
が大変だったから。

 パチスロのリールは1回転した事を検出するセンサーが付いている。もしリールを手で押さえて動きを止めても、ちゃんと
復旧するようになっている。別にリールを手で回しても、抽選には関係ない。
 リール1周には21コマの絵柄があり、1周する時間はさっきのセンサーでわかるので、その時間を21で割れば、
1コマあたりの時間がわかる。もし7が基準から3コマだったら、1コマあたりの時間を3倍して、それをマイコンの
タイマーで計って、7のタイミングでストップボタンを押すような回路をくっつけてやれば、目押しができるわけね。

 内部的にハズレ状態なら、7に揃えようとしても「すべる」事になる。ストップを押しても、何コマか進んでしまうわけ。
だから、いくら動体視力がよくても揃えられないんだな。

 そうだ、ロボットに打たせたらどうだろう?
 ホンダのロボットをギャンブラー化する。そのまま普通に、パチンコ屋まで歩かせる。店員の注意は聞かない。アセンブラ
で注意しないとわかんないよとか(笑)。
 ロボットだから、リールの絵柄は止まって見える。
 「おまえは高いんだから、しっかり稼いでこいよ!!」とか(笑)。
 やっぱりロボットは高いから、チンパンジーを訓練して「ギャンブラー・猿」にするとか。

 ところで、自宅でスロットを遊ぶには、コインの問題があるだろう。あれはかなりうるさい。スピーカーもうるさいが、
コインもうるさいし、手が金属くさくなる。
 そこで、コインセレクターの代わりに接続すれば、コイン信号を発生してくれる装置が市販されている。ホッパーも、
そういうダミー信号を出してくれる装置が市販されている。

 原理は非常に単純だから、PICがいじれる人ならできるだろう。コインセレクターは、フォトインタラプターが2つあって
コインの速度を見ている。この波形を、オシロ2チャンネル使って観測すれば、どう作れば良いかわかるだろう。ホッパーも
同様に、モーターが回って、メカ的にコインを1個ずつはじき出す時にセンサーが信号を出すから、この波形を見て、
その通りの波形が出るように組めばよい。



戻る