Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | / SUBROUTINE RANDU\r |
2 | / THE RANDOM GENERATOR IS THAT FROM DECUS 5-25\r | |
3 | / MUST BE USED IN PDP8 CODE AS IT DOES SOME ILLEGAL ARITHMETIC\r | |
4 | /\r | |
5 | / USAGE\r | |
6 | / CALL RANDU (IX,F)\r | |
7 | / IX IS ANY NUMBER:\r | |
8 | / IF SET TO A FIXED NUMBER ON FIRST ENTRY A REPEATABLE SEQUENCE\r | |
9 | / IS GENERATED\r | |
10 | / BUT NOTE THAT ALL PARTS OF THE NUMBER MUST BE DEFINED\r | |
11 | / IE USE IX>1 AND 5-6 DIGITS\r | |
12 | / IF SET TO 0 A RANDOM NUMBER SEQUENCE IS INITIATED\r | |
13 | / NOTE THAT THIS SEQUENCE IS DEPENDENT OF THE BACKGOUND\r | |
14 | / JOB.\r | |
15 | / CALLING WITH THE SAME TIMING PARAMETERS MIGHT RESULT\r | |
16 | / IN REPETITION OF SAME SEQUENCE.\r | |
17 | / ALSO FIRST CALL TO RANDU SETS UP BACKGROUND JOB\r | |
18 | / AND A 0 CALL AT THAT TIME IS NOT RANDOM\r | |
19 | /\r | |
20 | / COORECT SEQUENCE TO GET A RANDOM START\r | |
21 | /\r | |
22 | / I=0\r | |
23 | / CALL RANDU(IX,X) NOTE RANDU CHANGES I\r | |
24 | / WRITE (0,..... TTY OUTPUT (OR INPUT) GIVES A 'RANDOM START'\r | |
25 | / I=0\r | |
26 | / CALL RANDU (IX,X) X IS RANDOM\r | |
27 | / CALL RANDU (IX,X) KEEP SAME I\r | |
28 | / ON SUBSEQUENT CALLS IT SHOULD BE LEFT UNTOUCHED\r | |
29 | /*** NOTE IX IS A NOT NORMAL FPP NUMBER IT SHOULD NOT BE USED IN FPP\r | |
30 | / ARITHMETIC ***\r | |
31 | / F IS ON RETURN A RANDOM NUMBER BETWEEN 0 AND 1\r | |
32 | \f SECT RANDU\r | |
33 | JA #ST\r | |
34 | #XR, ORG .+10\r | |
35 | TEXT 'RANDU'\r | |
36 | #RET, SETX #XR\r | |
37 | SETB #BASE\r | |
38 | JA .+3\r | |
39 | #BASE, ORG .+6\r | |
40 | I, ORG .+3\r | |
41 | F, ORG .+3\r | |
42 | ORG #BASE+30\r | |
43 | FNOP\r | |
44 | JA #RET\r | |
45 | FNOP\r | |
46 | #GOBAK, 0;0\r | |
47 | #LBL=.\r | |
48 | ORG #LBL\r | |
49 | #RTN, BASE #BASE\r | |
50 | JA #GOBAK\r | |
51 | #ST, STARTD\r | |
52 | 0210\r | |
53 | FSTA #GOBAK,0\r | |
54 | 0200\r | |
55 | SETX #XR\r | |
56 | SETB #BASE\r | |
57 | LDX 0,1\r | |
58 | FSTA #BASE\r | |
59 | FLDA% #BASE,1+\r | |
60 | FSTA I\r | |
61 | FLDA% #BASE,1+\r | |
62 | FSTA F\r | |
63 | STARTF\r | |
64 | FLDA TWIDD / IS THIS FIRST CALL\r | |
65 | JNE NOTFIR\r | |
66 | TRAP4 #FIRST / YES, INITIATE BACKGROUND LOOP\r | |
67 | NOTFIR, FLDA% I\r | |
68 | JNE #G0001\r | |
69 | FLDA TWIDD / FETCH TWIDDLER CONSTANTS\r | |
70 | FSTA% I / AND USE AS START OF RANDOM\r | |
71 | #G0001, FSTA L / PLACE TO SECT 8\r | |
72 | TRAP4 #RANDU / GO GENERATE NEW NUMBER\r | |
73 | FLDA L / FOR NEXT ITERATION\r | |
74 | FSTA% I\r | |
75 | FLDA T / NEW RANDOM NUMBER IE L WITH HIGH ORDER=0\r | |
76 | JGT POS\r | |
77 | FNEG / SHOULD BE 0-1\r | |
78 | POS, FSTA% F\r | |
79 | JA #RTN\r | |
80 | \f/ THE RANDOM GENERATOR\r | |
81 | / ON CALLING L=OLD RANDOM NR\r | |
82 | / ON EXIT L=NEW NUMBER\r | |
83 | / THE 2 LOW ORDER PARTS OF THIS ARE MOVED TO T\r | |
84 | SECT8 #RAND8\r | |
85 | #RANDU, 0\r | |
86 | TAD L3\r | |
87 | SNA / ALL PARTS MUST BE NON ZERO\r | |
88 | TAD . / NICE CONSTANT\r | |
89 | RAL\r | |
90 | AND R7400\r | |
91 | DCA T3\r | |
92 | TAD L2\r | |
93 | SNA\r | |
94 | TAD . / NICE CONSTANT ?\r | |
95 | AND R177\r | |
96 | TAD T3\r | |
97 | RTL\r | |
98 | RTL\r | |
99 | RAL\r | |
100 | DCA T1\r | |
101 | TAD L3\r | |
102 | AND R177\r | |
103 | RTL\r | |
104 | RTL\r | |
105 | RAL\r | |
106 | TAD L2\r | |
107 | DCA T2\r | |
108 | SZL\r | |
109 | ISZ T1\r | |
110 | NOP\r | |
111 | TAD L3\r | |
112 | CLL RAL\r | |
113 | SZL\r | |
114 | ISZ T2\r | |
115 | SKP\r | |
116 | ISZ T1\r | |
117 | NOP\r | |
118 | CLL\r | |
119 | TAD L3\r | |
120 | DCA L3\r | |
121 | TAD L2\r | |
122 | RAL\r | |
123 | SZL\r | |
124 | ISZ T1\r | |
125 | NOP\r | |
126 | CLL\r | |
127 | TAD T2\r | |
128 | DCA L2\r | |
129 | TAD L1\r | |
130 | SNA\r | |
131 | TAD .\r | |
132 | RAL\r | |
133 | TAD L1\r | |
134 | TAD T1\r | |
135 | DCA L1\r | |
136 | / END OF GENERATOR\r | |
137 | TAD L1 / WE ONLY WANT WORD 2 AND 3\r | |
138 | DCA T2\r | |
139 | DCA T1\r | |
140 | TAD L2\r | |
141 | DCA T3\r | |
142 | CDF CIF 0\r | |
143 | JMP% #RANDU\r | |
144 | T, / OLD RANDOM NUMBER, START OF NEXT\r | |
145 | T1, 0\r | |
146 | T2, 0\r | |
147 | T3, 0\r | |
148 | L, / NEW RANDOM NUMBER\r | |
149 | L1, 0\r | |
150 | L2, 0\r | |
151 | L3, 0\r | |
152 | R177, 177\r | |
153 | R7400, 7400\r | |
154 | EXTERN ONQB\r | |
155 | #FIRST, 0 / INITIATE BACKGROUND\r | |
156 | JMS% XONQB+1\r | |
157 | ADDR LOOP\r | |
158 | ISZ TW1\r | |
159 | ISZ TW2\r | |
160 | ISZ TW2 / NOT ALL =0\r | |
161 | CDF CIF 0\r | |
162 | JMP% #FIRST\r | |
163 | TWIDD,\r | |
164 | TW1, 0\r | |
165 | TW2, 0\r | |
166 | TW3, 0\r | |
167 | LOOP, 0\r | |
168 | ISZ TW1\r | |
169 | ISZ TW2\r | |
170 | ISZ TW3\r | |
171 | NOP\r | |
172 | CDF CIF 10\r | |
173 | JMP% LOOP\r | |
174 | XONQB, ADDR ONQB\r | |
175 | END\r | |
176 | \1a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 |