| 1 | /LP11 HANDLER\r |
| 2 | \r |
| 3 | LPVERSION="B&77\r |
| 4 | \r |
| 5 | *0\r |
| 6 | \r |
| 7 | -1\r |
| 8 | DEVICE LP11;DEVICE LP;1040;LPT&177+4000;ZBLOCK 2\r |
| 9 | \r |
| 10 | /LP HANDLER FOR RT-11 LINE PRINTER.\r |
| 11 | /The PDP-8 is connected to a RT-11 job via a seriell line.\r |
| 12 | /This handler simply starts the RT-11 program RECVLP on SY:\r |
| 13 | /which transfers all incomming characters to LP:.\r |
| 14 | \r |
| 15 | \r |
| 16 | / IOTs for communication interface:\r |
| 17 | DEVCOD= 31\r |
| 18 | \r |
| 19 | VRSF= DEVCOD^10+6001\r |
| 20 | VRRB= DEVCOD^10+6006\r |
| 21 | VSF= DEVCOD^10+6011\r |
| 22 | VLS= DEVCOD^10+6016\r |
| 23 | \r |
| 24 | FIXTAB\r |
| 25 | \r |
| 26 | \r |
| 27 | / special characters:\r |
| 28 | CTRLC= 3\r |
| 29 | TAB= 11\r |
| 30 | LF= 12\r |
| 31 | CR= 15\r |
| 32 | CTRLN= 16\r |
| 33 | CTRLZ= 32\r |
| 34 | \r |
| 35 | \r |
| 36 | *200\r |
| 37 | \r |
| 38 | PLINK, 0000\r |
| 39 | CLA STL RAR / handler actually starts here\r |
| 40 | TAD I LPT / R/W BIT TO LINK L\r |
| 41 | AND LP7700 / I\r |
| 42 | CMA /TREAT 0 PG CNT AS 0 WD CNT N\r |
| 43 | DCA LPTWC /SAVE -(DBLWD COUNT+1) K\r |
| 44 | RDF /\r |
| 45 | TAD LPTCIF / M\r |
| 46 | DCA LPTXIT /SAVE CIF CDF RETURN FIELD U\r |
| 47 | TAD I LPT / S\r |
| 48 | AND LPT70 / T\r |
| 49 | TAD LPCDF0 /\r |
| 50 | DCA LPTCDF / N\r |
| 51 | ISZ LPT /POINT TO BUFFER O\r |
| 52 | TAD I LPT /GET BUFFER ADDRESS T\r |
| 53 | DCA LPTCA /SAVE BUFFER PTR\r |
| 54 | ISZ LPT /PT TO BLOCK # C\r |
| 55 | TAD I LPT /GET IT H\r |
| 56 | ISZ LPT /POINT TO ERROR RETURN G\r |
| 57 | LPTCDF, HLT / !\r |
| 58 | SNL\r |
| 59 | JMP LPTERR /CAN'T READ FROM LPT\r |
| 60 | SZA CLA\r |
| 61 | JMP LPT1\r |
| 62 | \r |
| 63 | \r |
| 64 | / Initialization - start RECVLP on '11\r |
| 65 | \r |
| 66 | VLS /initialize\r |
| 67 | VRRB / communication interface\r |
| 68 | CLA\r |
| 69 | RDF\r |
| 70 | TAD LPCDF0\r |
| 71 | DCA RESFLD\r |
| 72 | LPCDF0, CDF 0\r |
| 73 | JMS TRATXT\r |
| 74 | "R\r |
| 75 | 40\r |
| 76 | "R\r |
| 77 | "E\r |
| 78 | "C\r |
| 79 | "V\r |
| 80 | "L\r |
| 81 | "P\r |
| 82 | CR\r |
| 83 | 00\r |
| 84 | RESFLD, HLT\r |
| 85 | JMP LPT1\r |
| 86 | \r |
| 87 | \f/UNPACKING LOOP - USES A SHIFT REGISTER METHOD TO GET THE\r |
| 88 | /THIRD CHARACTER IN EACH DOUBLEWORD.\r |
| 89 | \r |
| 90 | LPTLP, STL /GUARD BIT OF SHIFT REGISTER\r |
| 91 | LPROTL, RTL\r |
| 92 | RTL\r |
| 93 | SPA /DO WE HAVE 8 BITS SHIFTED IN?\r |
| 94 | JMP LPTELP\r |
| 95 | DCA LPTCDF /SAVE SHIFT REGISTER\r |
| 96 | TAD I LPTCA\r |
| 97 | JMS I PLINK /PRINT A CHAR\r |
| 98 | SZA\r |
| 99 | JMP ERR\r |
| 100 | TAD I LPTCA\r |
| 101 | ISZ LPTCA /BUMP INPUT POINTER\r |
| 102 | LP7400, 7400 /PROTECT ISZ\r |
| 103 | AND LP7400\r |
| 104 | CLL RAL\r |
| 105 | TAD LPTCDF /SHIFT HIGH 4 BITS INTO\r |
| 106 | JMP LPROTL /SHIFT REGISTER\r |
| 107 | \r |
| 108 | LPTELP, JMS I PLINK /PRINT 3RD CHAR OF DOUBLEWORD\r |
| 109 | SZA\r |
| 110 | JMP ERR\r |
| 111 | LPT1, ISZ LPTWC\r |
| 112 | JMP LPTLP /GET 3 MORE CHARS\r |
| 113 | LPTCTZ, ISZ LPT /BUMP TO NORMAL RETURN\r |
| 114 | LPTXIT, HLT /RESTORE FIELDS\r |
| 115 | JMP I LPT /EXIT\r |
| 116 | \r |
| 117 | LPTERR, STL CLA RAR /PUT 4000 IN AC\r |
| 118 | JMP LPTXIT /AND TAKE ERROR RETURN\r |
| 119 | \r |
| 120 | LPTWC, 0\r |
| 121 | LPTCA, 0\r |
| 122 | \r |
| 123 | \r |
| 124 | TRATXT, 0\r |
| 125 | TAD I TRATXT /get character\r |
| 126 | ISZ TRATXT /point to next\r |
| 127 | SNA /character zero?\r |
| 128 | JMP I TRATXT /yes - return\r |
| 129 | JMS I PLINK /no - transfer it\r |
| 130 | SNA\r |
| 131 | JMP TRATXT+1\r |
| 132 | \r |
| 133 | \r |
| 134 | ERR, CLA CLL SNL\r |
| 135 | JMP LPTCTZ\r |
| 136 | TAD PLINK\r |
| 137 | TAD OFFSET\r |
| 138 | DCA PLINK\r |
| 139 | CLA IAC STL RAL /AC=CTRL/C\r |
| 140 | JMS I PLINK / send CTRL/C to abort job on '11\r |
| 141 | LP7700, CLA SMA /never skips\r |
| 142 | JMP LPTERR\r |
| 143 | \r |
| 144 | \r |
| 145 | LPT70, 70\r |
| 146 | LPTCIF, CDF CIF 0\r |
| 147 | OFFSET, VTYPE-LPTPCH\r |
| 148 | \r |
| 149 | *376\r |
| 150 | LPT, LPVERSION /NORMAL ENTRY POINT\r |
| 151 | JMS PLINK\r |
| 152 | IFNZRO LPT-376 <ENTERR.QQQQ>\r |
| 153 | PAGE\r |
| 154 | \f\r |
| 155 | /CHAR PRINT ROUTINE\r |
| 156 | \r |
| 157 | LPTPCH, 0\r |
| 158 | IAC\r |
| 159 | AND (177 /7 bit\r |
| 160 | SNA\r |
| 161 | JMP I LPTPCH /don't transfer RUBOUTs\r |
| 162 | TAD (-1 /restore character\r |
| 163 | DCA CHAR /save it\r |
| 164 | TAD CHAR\r |
| 165 | AND (7770\r |
| 166 | SNA CLA\r |
| 167 | JMP I LPTPCH /Null - CTRL/G\r |
| 168 | TAD CHAR\r |
| 169 | TAD (-CTRLZ\r |
| 170 | SNA\r |
| 171 | JMP EOF\r |
| 172 | SMA\r |
| 173 | JMP NOCTRL\r |
| 174 | TAD (CTRLZ-CTRLN\r |
| 175 | SMA CLA\r |
| 176 | JMP I LPTPCH\r |
| 177 | \r |
| 178 | NOCTRL, ISZ COUNT2\r |
| 179 | JMP OUTB\r |
| 180 | CLA IAC\r |
| 181 | JMS VTYPE\r |
| 182 | JMS VREAD\r |
| 183 | JMS VREAD\r |
| 184 | CLA\r |
| 185 | TAD (CR\r |
| 186 | JMS VTYPE\r |
| 187 | JMS VREAD\r |
| 188 | JMS VREAD\r |
| 189 | OUTB, CLA\r |
| 190 | TAD CHAR\r |
| 191 | JMS VTYPE /transfer it\r |
| 192 | TAD (-TAB\r |
| 193 | TAD CHAR\r |
| 194 | SZA CLA\r |
| 195 | JMP OUTA\r |
| 196 | TAD (40\r |
| 197 | DCA CHAR\r |
| 198 | OUTA, JMS VREAD /read the echo\r |
| 199 | CIA\r |
| 200 | TAD CHAR /is it what we sent?\r |
| 201 | SZA CLA /yes\r |
| 202 | JMP LPERR /no - transfer error\r |
| 203 | \r |
| 204 | /Test for End Of Line\r |
| 205 | TAD (-CR\r |
| 206 | TAD CHAR\r |
| 207 | SZA CLA\r |
| 208 | JMP I LPTPCH\r |
| 209 | TAD (-113\r |
| 210 | DCA COUNT2\r |
| 211 | JMS VREAD /wait for the LF\r |
| 212 | CLA\r |
| 213 | JMP I LPTPCH\r |
| 214 | \r |
| 215 | \r |
| 216 | EOF, TAD (CTRLZ\r |
| 217 | JMS VTYPE\r |
| 218 | JMS VREAD\r |
| 219 | JMS VREAD\r |
| 220 | JMS VREAD\r |
| 221 | JMS VREAD\r |
| 222 | JMS VREAD\r |
| 223 | CLA IAC CLL\r |
| 224 | JMP I LPTPCH\r |
| 225 | LPERR, IAC STL\r |
| 226 | JMP I LPTPCH\r |
| 227 | \r |
| 228 | \r |
| 229 | \r |
| 230 | COUNT2, -113\r |
| 231 | CHAR, 0\r |
| 232 | \r |
| 233 | \r |
| 234 | /This routine reads one character from the serial line. The parity\r |
| 235 | /bit is stripped off. It also checks for CTRL/C from\r |
| 236 | /the terminal.\r |
| 237 | \r |
| 238 | VREAD, 0000\r |
| 239 | CLA\r |
| 240 | VR1, JMS CINTER /abort if CTRL/C\r |
| 241 | VRSF\r |
| 242 | JMP VR1\r |
| 243 | VRRB /get the character\r |
| 244 | AND (177\r |
| 245 | JMP I VREAD /return\r |
| 246 | \r |
| 247 | \r |
| 248 | VTYPE, 0000\r |
| 249 | VWTF, JMS CINTER /abort if CTRL/C typed\r |
| 250 | VSF\r |
| 251 | JMP VWTF\r |
| 252 | VLS\r |
| 253 | CLA\r |
| 254 | JMP I VTYPE /return\r |
| 255 | \r |
| 256 | CINTER, 0000\r |
| 257 | KSF /is there a character?\r |
| 258 | JMP I CINTER /no - return\r |
| 259 | DCA AC /yes - save Accu\r |
| 260 | KRB /read character\r |
| 261 | AND (177 /no parity\r |
| 262 | TAD (-CTRLC /is it CTRL/C?\r |
| 263 | SZA CLA /skip if it is\r |
| 264 | JMP NOCC /no - return\r |
| 265 | CLA IAC STL RAL /send CTRL/C\r |
| 266 | JMS VTYPE / to host - this aborts host job\r |
| 267 | CDF CIF 0 /exit\r |
| 268 | JMP I (7600 / to OS/8\r |
| 269 | \r |
| 270 | NOCC, TAD AC /restore Accu\r |
| 271 | JMP I CINTER /return\r |
| 272 | \r |
| 273 | AC, 0\r |
| 274 | \r |
| 275 | \r |
| 276 | $\r |
| 277 | \f\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\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\0\0\0\0\0\0\0\0\0\0\0\0\0\0 |