| 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 |