| 1 | FIELD1 SETIDL\r |
| 2 | /IDLE RANDOM NUMBER GENERATOR\r |
| 3 | EXTERN #IDLE\r |
| 4 | \r |
| 5 | JA #RET\r |
| 6 | TEXT +SETIDL+\r |
| 7 | SXR, SETX XR\r |
| 8 | SETB BP\r |
| 9 | BP, F 0.0\r |
| 10 | XR, ORG .+3\r |
| 11 | EXP, 0\r |
| 12 | IDLAD, ADDR #IDLE-1 / Pointer to idle routine in FRTS\r |
| 13 | POINT,\r |
| 14 | JOB, ADDR DOIT / Address of routine to run\r |
| 15 | ORG XR+10\r |
| 16 | K0100, 100\r |
| 17 | K0003, 3\r |
| 18 | ROTWRD, 0017\r |
| 19 | #LBL=.\r |
| 20 | COMMON NUMCOM\r |
| 21 | NUMBER, ORG .+3\r |
| 22 | \r |
| 23 | COMMON TXTCOM\r |
| 24 | RTEXT, ORG .+1147\r |
| 25 | LINES, ORG .+0044\r |
| 26 | ASCVAR, ORG .+0003\r |
| 27 | TXTLOC, ORG .+0003\r |
| 28 | DATA, ORG .+0352\r |
| 29 | ORG #LBL\r |
| 30 | SEEDPT, ADDR NUMBER\r |
| 31 | 0\r |
| 32 | DATHAK, 7777\r |
| 33 | ADDR ASCVAR\r |
| 34 | DATABL, 1763-1 / Address of Direct Access table entry 8 in FRTS\r |
| 35 | COUNT, 0 / Idle loop count\r |
| 36 | COUNT2, 7774 / Outer counter\r |
| 37 | RESET, 7774 / Outer counter value\r |
| 38 | X4=14 / Autoindex reg\r |
| 39 | ORG 10*3+BP\r |
| 40 | FNOP\r |
| 41 | JA SXR\r |
| 42 | 0\r |
| 43 | RET, JA .\r |
| 44 | \r |
| 45 | BASE 0\r |
| 46 | #RET, STARTD\r |
| 47 | FLDA 10*3\r |
| 48 | FSTA RET\r |
| 49 | SETB BP\r |
| 50 | BASE BP\r |
| 51 | STARTF\r |
| 52 | TRAP4 SET8 /GO TO 8 MODE STUFF.\r |
| 53 | JA RET /DONE. ON IDLE QUEUE.\r |
| 54 | \r |
| 55 | SET8, 0\r |
| 56 | /\r |
| 57 | / Horrible hackery. This sets up the FRTS direct access table\r |
| 58 | / to allow us to open the ADVENT.DA file without having to\r |
| 59 | / rebuild it each time. Open it using USR, and this lets us\r |
| 60 | / go use it later. (DEFINE FILE always creates a new one.)\r |
| 61 | TAD DATABL\r |
| 62 | DCAZ X4\r |
| 63 | SCDF, CDF 0\r |
| 64 | TAD DATHAK\r |
| 65 | DCA% X4\r |
| 66 | TAD DATHAK+1\r |
| 67 | DCA% X4\r |
| 68 | TAD DATHAK+2\r |
| 69 | DCA% X4\r |
| 70 | TAD CDFIDL\r |
| 71 | SZA CLA\r |
| 72 | JMP SFIELD /ALREADY DONE\r |
| 73 | TAD IDLAD /FIELD OF IDLE ROUTINE\r |
| 74 | JMS MKCDF\r |
| 75 | DCA CDFIDL\r |
| 76 | TAD IDLAD+1 /ADDRESS OF #IDLE\r |
| 77 | DCAZ X4\r |
| 78 | CDFIDL, 0 /GETS CDF\r |
| 79 | TAD SKPINS /SKP INSTRUCTION\r |
| 80 | DCAZ% X4 /STORE AT #IDLE\r |
| 81 | TAD JOB+1 /ADDRESS OF IDLE ROUTINE\r |
| 82 | DCAZ% X4 /STORE AT #IDLE+1\r |
| 83 | TAD JOB\r |
| 84 | JMS MKCDF\r |
| 85 | IAC / CDF -> CIF CDF\r |
| 86 | DCAZ% X4 /STORE AT #IDLE+2\r |
| 87 | SFIELD, CIF CDF\r |
| 88 | JMP% SET8\r |
| 89 | \r |
| 90 | /\r |
| 91 | / Blinky lights\r |
| 92 | /\r |
| 93 | SKPINS,\r |
| 94 | DOIT, SKP / Entry point, one-time use constant\r |
| 95 | TAD ROTWRD /GET WORD TO DISPLAY\r |
| 96 | STALL, ISZ COUNT\r |
| 97 | JMP STALL\r |
| 98 | ISZ COUNT2\r |
| 99 | JMP STALL\r |
| 100 | FLOP, RAL /Shift over\r |
| 101 | DCA ROTWRD /Save it\r |
| 102 | TAD RESET /Reset outer counter\r |
| 103 | DCA COUNT2\r |
| 104 | SNL\r |
| 105 | JMP DONE\r |
| 106 | TAD ROTWRD\r |
| 107 | FLIP, RAR /Rotate back\r |
| 108 | DCA ROTWRD\r |
| 109 | TAD FLOP\r |
| 110 | DCA COUNT /Save old rotate\r |
| 111 | TAD FLIP /And flip 'em around\r |
| 112 | DCA FLOP\r |
| 113 | TAD COUNT\r |
| 114 | DCA FLIP\r |
| 115 | DCA COUNT\r |
| 116 | DONE, TAD SEEDPT\r |
| 117 | JMS MKCDF\r |
| 118 | DCA .+1\r |
| 119 | 0\r |
| 120 | TAD SEEDPT+1\r |
| 121 | DCA EXP\r |
| 122 | CLL IAC\r |
| 123 | TAD EXP\r |
| 124 | DCA POINT\r |
| 125 | TAD% POINT\r |
| 126 | TAD K0100\r |
| 127 | SPA\r |
| 128 | JMP OVRFLO\r |
| 129 | DCA% POINT\r |
| 130 | JMP DOIT+1\r |
| 131 | \r |
| 132 | OVRFLO, CLA CLL\r |
| 133 | DCA% POINT\r |
| 134 | TAD% EXP\r |
| 135 | IAC\r |
| 136 | AND K0003\r |
| 137 | DCA% EXP\r |
| 138 | JMP DOIT+1\r |
| 139 | / Change field number into CDF instruction\r |
| 140 | MKCDF, 0\r |
| 141 | CLL RTL\r |
| 142 | RAL /INTO BITS 6-8\r |
| 143 | TAD SCDF /CDF TO #IDLE\r |
| 144 | JMP% MKCDF\r |
| 145 | \r |
| 146 | END\r |