Browse code

Added PRNG demo example

Andrew Alderwick authored on 25/08/2021 20:04:25
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,60 @@
1
+( pseudo-random number generator )
2
+
3
+( devices )
4
+
5
+|00 @System     [ &vector $2 &wst      $1 &rst    $1 &pad   $4 &r      $2 &g      $2 &b    $2 &debug  $1 &halt $1 ]
6
+|20 @Screen     [ &vector $2 &width    $2 &height $2 &pad   $2 &x      $2 &y      $2 &addr $2 &pixel  $1 &sprite $1 ]
7
+|b0 @DateTime   [ &year   $2 &month    $1 &day    $1 &hour  $1 &minute $1 &second $1 &dotw $1 &doty   $2 &isdst $1 ]
8
+
9
+( variables )
10
+
11
+|0000
12
+
13
+( program )
14
+
15
+|0100 ( -> )
16
+	( init )
17
+	;on-frame .Screen/vector DEO2
18
+	( seed prng (must be nonzero) )
19
+	.DateTime/month DEI .DateTime/day DEI
20
+	#00 .DateTime/second #a0 SFT2 EOR2
21
+	#00 .DateTime/minute #40 SFT2 EOR2
22
+	.DateTime/hour EOR
23
+	ORAk ,&non-zero JCN INC2 &non-zero
24
+	;prng/seed STA2
25
+
26
+	( theme )
27
+	#0fe5 .System/r DEO2 
28
+	#0fc5 .System/g DEO2 
29
+	#0f25 .System/b DEO2
30
+	BRK
31
+
32
+@on-frame ( -> )
33
+	#c0
34
+	&loop
35
+		,draw-pixel JSR
36
+		INC
37
+		DUP ,&loop JCN
38
+	POP
39
+	BRK
40
+
41
+@draw-pixel
42
+	,prng JSR
43
+	#00 SWP .Screen/x DEO2
44
+	#00 SWP .Screen/y DEO2
45
+	#01 .Screen/pixel DEO
46
+	JMP2r
47
+
48
+@prng ( -- number* )
49
+	( returns the next number in the 65,535-long sequence,
50
+	  which is never zero but every other 16-bit number
51
+	  appears once before the sequence repeats )
52
+	,&seed LDR2
53
+	DUP2 #70 SFT2 EOR2
54
+	DUP2 #09 SFT2 EOR2
55
+	DUP2 #80 SFT2 EOR2
56
+	,&seed STR2k POP
57
+	JMP2r
58
+
59
+	&seed $2
60
+