乱数の話(18年前)

1995年ですから、もう20年近くになります。当時、トランジスタ技術で、PIC16F84が紹介されました。

PIC16F84

PIC16F84は DIP 18-binのMCUです。ROMにプログラムを書き込んで実行させます。

今時のArduinoみたいな話、といったら少しは伝わるでしょうか。

LEDをチカチカさせるとか、圧電スピーカを鳴らす、というので遊びました。

時期が今頃で、僕はジングルベルを鳴らした記憶があります。

バイメタル電球

クリスマスと言えば、(当時は)バイメタル電球だったかと思います。たくさんの電球がそれぞれのタイミングで不規則にチカチカするものです。

M系列乱数

名前を出すと怒られると思うので、Kさんとしますが、KさんはPIC16F84を使ってM系列乱数でLEDをチカチカさせ(て、バイメタル電球のチカチカのように)する、というのをやってました。

すごいなぁ、と感心したことを思い出します。

最近だと

今時だと、電球は、みんなコンピュータ制御ですかね。もう、電球ではなくてLEDですか。

4-bit のM系列乱数

たとえば、漸化式をXn = Xn-4 + Xn-1 として、内部状態を 4-bit としてみると、こういうのをLispで書くのも芸がないですが、手元に scratch buffer があるので、、、 :

(setq lexical-binding t)
(let ((u 1))
  (defun rnd-next ()
    (let ((b0 (logand u 1))
          (b3 (logand (lsh u -3) 1))
          (b13 (lsh u -1)))
      (let ((bn (logxor b0 b3)))
        (setq u (logior (lsh bn 3) b13))))))

最近のEmacs (24 >=)では、レキシカルスコープでクロージャが使えるんですね。関数rnd-nextを次々に呼び出すと、

8
12
14
15
7
11
5
10
13
6
3
9
4
2
1
...

という列が得られます。

インベーダの話に戻って

インベーダのUFOの得点 に関して書きましたけど、むしろ、あれはM系列でしょうか。 内部状態4-bitで15の周期(0なし)ですもんね。