A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rka / paroff / randu.ra
CommitLineData
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
40I, ORG .+3\r
41F, 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
67NOTFIR, 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
78POS, 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
144T, / OLD RANDOM NUMBER, START OF NEXT\r
145T1, 0\r
146T2, 0\r
147T3, 0\r
148L, / NEW RANDOM NUMBER\r
149L1, 0\r
150L2, 0\r
151L3, 0\r
152R177, 177\r
153R7400, 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
163TWIDD,\r
164TW1, 0\r
165TW2, 0\r
166TW3, 0\r
167LOOP, 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
174XONQB, 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