Initial commit
[retro-software/dec/tops10/v1.19.git] / src / scnser.mac
1 TITLE SCNSER - SCANNER SERVICE\r
2 SUBTTL TOM EGGERS     8-9-65\r
3 EXTERN SETIOD, ADVBFE, ADVBFF, JBTADR, CLRBYT,STTYB1\r
4 EXTERN SCNCHN, COMCNT, SCNSAV, SCNRET,STOP1, DEVLST,TTYTAB\r
5 INTERN SCNINI\r
6 \r
7 ;TTYPTR=DEVOAD+1\r
8 ;TTYCTR=TTYPTR+1\r
9 ;TTYBUF=TTYCTR+1\r
10 PION=200   ;TURN PI ON BIT\r
11 PIOFF=400               ;TURN PI OFF BIT\r
12 ;SCNDDB                 ;NUMBER OF DEVICE DATA BLOCKS\r
13 ;STTYBF7   ;SIZE OF TELETYPE BUFFER\r
14 CHREC=TEM               ;AC FOR CHARACTER\r
15 VPOS=ITEM               ;VERITICAL POSITION OF TELETYPE\r
16 HPOS=VPOS+1             ;               HORIZONTAL POS.\r
17 DDB=DEVDAT\r
18 LINE=TAC1               ;AC THAT HOLDS SCANNER LINE NUMBER\r
19 SYNC=40000              ;1 WHEN A BUFFER IS READY TO TRANSFER\r
20 DETH=10000              ;1 IF TTY DETACHED AND OUTPUT WAITING\r
21 NIO=20000               ;STOP ALL IO\r
22 TOUT=IO                 ;OUTPUT IN PROGRESS\r
23 NCERR=IOBKTL            ;CHARACTER LOST ON TYPE IN\r
24 DCHAR=177               ;DELETE CHARACTER\r
25 ECHOF=IODTER            ;ECHO FAILURE OCCURED\r
26 TPMON=1000              ;IO IS FROM MONITOR\r
27 SP=2000                 ;SPECIAL TELETYPE CHAR. IS BEING INTERPRETED\r
28 DDTM=100000             ;DDT MODE\r
29 T35=4000   ;TELETYPE HAS TAB,FF,VT,ETC. MECHANISM\r
30 USRB=100   ;TURN OFF TPMON WHEN OUTPUT IS FINISHED      \r
31 USRBC=20000             ;RT HALF MONITOR IOS WORD. REMAIN IN MONITOR MODE\r
32 INTERNAL SCNINT,CTYINT,TTYUSR,TTYURC\r
33 ENTRY TTYDSP\r
34 EXTERN TSCNLN,TCONLN,MTTYLN,CPOPJ1\r
35 EXTERN CPOPJ\r
36 EXTERN FSNCHN,SCNCHL,OUT,PUUOAC,PJOBN,PUNIT,PIOMOD\r
37 INTERNAL DDTGT,DDTRL,DDTIN,DDTOUT,TTYFND,TTYSTR,TTYFNU\r
38 EXTERNAL WAIT1,WSYNC,CLRBYT,JOB,CLDS,CLEN,TTYBFE,TTYBM1\r
39 EXTERNAL UXIT,ADRCK,TTYSAV,DEVPHY,DEVOPR\r
40 EXTERNAL TTYCTR,TTYPTR,TTYBUF,TTYLST,MLTTYL,SETRUN,STTYBF,TTY0DB\r
41 \r
42 PHPOS:  POINT 7,DEVIAD(DEVDAT),12       ;POINTER HORIZONTAL POSITION\r
43 PVPOS:  POINT 5,DEVOAD(DEVDAT),12       ;POINTER VERITICAL POSITION\r
44 PLASTC: POINT 7,DEVOAD(DEVDAT),7        ;POINTER TO LAST CHARACTER OU\r
45 PSCHAR: POINT 6,DEVIAD(DEVDAT),5        ;POINTER TO ^C OR ^O\r
46 \r
47 TPCJOBN:        POINT 9,TTYTAB(LINE),9  ;CONSOLE NUMBER FOR TTY\r
48 \f\r
49 SCNINI: MOVEI TAC,100000\r
50         CONO TTY,0              ;SHUT DOWN CONSOLE TTY\r
51         CONO DCSA,4010          ;RELEASE XMITTER,RECEIVER\r
52         CONSZ DCSA, 1000\r
53         CONO DCSA, 4000\r
54         CONSZ DCSA, 10\r
55         DATAI DCSB, TAC1\r
56         SOJG TAC,.-4\r
57         MOVEI TAC,SCNCHN\r
58         CONO TTY,3600(TAC)      ;CLEAR TTY, ASSIGN CHANNEL\r
59         CONO DCSA,FSNCHN        ;ASSIGN INTERRUPT CHANNELS\r
60         MOVSI TAC,MLTTYL        ;NO. OF TTY DEV. DATA BLOCKS\r
61         MOVSI DAT,TTYUSE        ;TTY DDB IN USE BIT\r
62         MOVSI IOS,TPMON+IOFST           ;VIRGIN STATUS\r
63         MOVEI DDB,TTYLST        ;FIRST TTY DDB ADDRESS\r
64 SCN1:   TDNN DAT,DEVMOD(DDB)            ;IS THIS TTY DDB IN USE?\r
65         SETZM DEVNAM(DDB)       ;NO. SET NAME TO 0\r
66         MOVEM IOS,DEVIOS(DDB)\r
67         SETZM TTYSAV(DDB)       ;CLEAR USER MODE TTY STATUS WORD\r
68         ANDCAM DAT,DEVMOD(DDB)          ;CLEAR USE BIT\r
69         HLRZ DDB,DEVSER(DDB)            ;GET NEXT TTY DDB\r
70         AOBJN TAC,SCN1\r
71         MOVSI TAC,MTTYLN        ;SET DDB USE BITS FROM TRANSLATOR TABLE\r
72         MOVSI TAC1,TTYUSE\r
73 SCN2:   SKIPE DDB,TTYTAB(TAC)\r
74         IORM TAC1,DEVMOD(DDB)\r
75         AOBJN TAC,SCN2\r
76         POPJ PDP,\r
77 \f\r
78 ;ROUTINE TO RETURN TTY TO VIRGIN STATE\r
79 ;CALL:    MOVE DDB, ADDRESS OF DEVICE DATA BLOCK\r
80 ;         PUSHJ PDP,TTYKIL\r
81 \r
82 INTERNAL TTYKIL\r
83 \r
84 TTYKIL: MOVE TAC,[XWD TTYUSE+TTYATC,ASSCON+ASSPRG]\r
85         ANDCAM TAC,DEVMOD(DEVDAT)       ;CLEAR DDB USE BIT\r
86         SETZM DEVNAM(DEVDAT)            ;CLEAR PHYSICAL NAME\r
87         SETZM DEVLOG(DEVDAT)            ;CLEAR LOGICAL NAME\r
88         JRST TTYDT1\r
89 \r
90 ;ROUTINE TO DETACH TTY FROM JOB\r
91 ;CALL:    MOVE DEVDAT,ADDRESS OF TTY DDB TO BE DETACHED\r
92 \r
93 INTERNAL TTYDET\r
94 \r
95 TTYDET: MOVE TAC,DEVMOD(DEVDAT)\r
96         TLZN TAC,TTYATC      ;WAS TTY ATTACHED?\r
97         JRST TTYKIL          ;NO, SO RETURN DDB TO POOL\r
98         MOVEM TAC,DEVMOD(DEVDAT)        ;YES, JUST CLEAR ATTACH BIT\r
99 TTYDT1: LDB LINE,PUNIT\r
100         SETM TTYTAB(LINE)\r
101         POPJ PDP,\r
102 \r
103 \r
104 CCHAR:  0          ;HOLDS CHARACTER FOR CONSOLE TELETYPE\r
105 ;CONTROL C - GO BACK TO MONITOR\r
106 ;CONTROL 0 - SUPPRESS OUTPUT\r
107 \r
108 TTYURC: SKIPA TAC,[XWD USRB,USRBC]      ;START JOB BUT REMAIN IN MON1\r
109 TTYUSR: MOVSI TAC,USRB          ;CAUSE TTY TO GO INTO\r
110         IORM TAC,DEVIOS(DEVDAT)         ;USER MODE WHEN\r
111         POPJ PDP, ;OUTPUT FINISHES\r
112 \r
113 INTERNAL TTYSET\r
114 \r
115 TTYSET: MOVSI TAC,IOFST         ;INITIALIZE USER TTY IOS WORD\r
116         MOVEM TAC,TTYSAV(DEVDAT)        ;FOR START COMMAND\r
117         JRST TTYUSR\r
118 \f\r
119 \r
120 ;ROUTINE TO ATTACH TTY TO A JOB\r
121 ;CALL:    MOVE DEVDAT,ADDRESS OF TTY DEVICE DATA BLOCK\r
122 ;         MOVE ITEM,JOB NUMBER\r
123 ;         PUSHJ PDP,TTYATT\r
124 ;         ERROR     ;DEVDAT=DDB ADR OF OTHER TTY\r
125                     ;IF ANOTHER ALREADY IS ATTACHED.\r
126 ;         OK RETURN ;DEVDAT, DAT AND TRANSLATOR TABLE SET\r
127 \r
128 INTERNAL TTYATT\r
129 \r
130 TTYATT: LDB LINE,PUNIT  ;LINE NO. OF THIS TTY\r
131         MOVEI DEVDAT,TTYLST ;SEARCH FOR DDB THAT IS ATTACHED\r
132         SKIPA\r
133 TTYAT2: HLRZ DEVDAT,DEVSER(DEVDAT)\r
134         JUMPE DEVDAT,TTYAT4\r
135         LDB TAC,PJOBN       ;JOB NUMBER\r
136         HLL TAC,DEVMOD(DEVDAT)          ;ATTACH AND USE BITS\r
137         TLNN TAC,DVTTY       ;IS THIS STILL A TTY DDB?\r
138         JRST TTYAT4          ;NO, THIS MUST BE IJOB\r
139         CAIN ITEM,(TAC)      ;JOB NUMBER THE ONE TO ATTACH?\r
140         TLNN TAC,TTYUSE      ;YES, IS IT THE DETACHED ONE?\r
141         JRST TTYAT2          ;NO, KEEP LOOKING\r
142         TLNE TAC,TTYATC         ;IS SOME TTY ALREADY ATTACHED?\r
143         POPJ PDP,               ;YES, ERROR RETURN WITH DEVDAT SET\r
144         PUSH PDP,DEVDAT         ;SAVE NEW DDB ADDRESS\r
145         MOVE DEVDAT,TTYTAB(LINE)\r
146         MOVE TAC,DEVMOD(DEVDAT)\r
147         PUSHJ PDP,TTYDET        ;DETACH DDB FROM TTY\r
148         POP PDP,DEVDAT\r
149 TTYAT3: DPB ITEM,TPCJOBN        ;STORE ATTACHED JOB NO.\r
150         DPB ITEM,PJOBN          ;SET JOB NUMBER\r
151         MOVSI TAC,TTYATC        ;SET ATTACHED BIT\r
152         PUSHJ PDP,TTYDAT        ;SETUP OUTPUT BYTE\r
153         JRST SCNIN              ;GO INITIALIZE DDB\r
154 \r
155 TTYAT4: MOVE DEVDAT,TTYTAB(LINE)        ;RESTORE OLD DDB ADDRESS\r
156         JRST TTYAT3\r
157 \f\r
158 \r
159 ;ROUTINE TO SETUP AC DEVDAT TO ADDRESS OF TTY WHICH HAS TYPED A COMMA\r
160 ;AC DAT TO BYTE POINTER TO OUTPUT BUFFER FOR COMMAND MESSAGE\r
161 ;AC TAC TO BYTE POINTER TO COMMAND STRING\r
162 ;AC ITEM TO JOB NUNMBER TTY IS ATTACHED TO\r
163 ;CALL:     PUSHJ PDP,TTYCOM\r
164 ;          NONE FOUND\r
165 ;          ACS SETUP\r
166 \r
167 INTERNAL TTYCOM\r
168 \r
169 TTYCOM: MOVSI LINE,MTTYLN\r
170         SKIPL TTYTAB(LINE)\r
171         AOBJN LINE,.-1\r
172         JUMPG LINE,CPOPJ\r
173         MOVSI DEVDAT,400000\r
174         ANDCAB DEVDAT,TTYTAB(LINE)\r
175         MOVSI DAT,440700\r
176         ADDI DAT,TTYBUF(DEVDAT)\r
177         MOVE TAC,DAT\r
178 \r
179 ;FALL INTO TTYJOB\r
180 \r
181 ;ROUTINE TO RETURN IN AC ITEM JOB NUMBER WHICH TTY IS ATTACHED TO\r
182 ;CALL:    MOVE DEVDAT,ADDRESS OF TTY DEVICE DATA BLOCK\r
183 \r
184 INTERNAL TTYJOB\r
185 \r
186 TTYJOB: LDB LINE, PUNIT\r
187         LDB ITEM,TPCJOBN\r
188         JRST CPOPJ1\r
189 \f\r
190 \r
191 ;TELETYPE SCANNER UUO ROUTINES\r
192 ;FOR DDT\r
193 \r
194 ;DDTGT WAITS FOR OUTPUT TO COMPLETE THEN PUTS\r
195 ;TELETYPE INTO DDT MODE\r
196 \r
197 DDTGT:  PUSHJ PDP,TTYSR1        ;FIND DEVICE DATA BLOCK\r
198         MOVE IOS,DEVIOS(DEVDAT)\r
199         TLNN IOS,DDTM\r
200         TLNN IOS,IO             ;OUTPUT IN PROGRESS\r
201         JRST DDTGT2             ;NO\r
202 ;       PUSHJ PDP,OUT           ;MAKE SURE OUTPUT STARTED\r
203         PUSHJ PDP,WAIT1         ;WAIT FOR OUTPUT TO FINISH\r
204 DDTGT2: TLO IOS,DDTM            ;SET DDT MODE BIT\r
205         MOVEM IOS,DEVIOS(DEVDAT)\r
206         JRST UXIT\r
207 \r
208 ;RELEASE TELETYPE FROM DDT MODE\r
209 ;MAKE SURE OUPUT IS FINISHED FIRST\r
210 \r
211 DDTRL:  PUSHJ PDP,TTYSR1        ;FIND DEVICE DATA BLOCK\r
212         MOVE IOS,DEVIOS(DEVDAT)\r
213         TLNE IOS,IO             ;OUTPUT IN PROGRESS?\r
214         PUSHJ PDP,WAIT1         ;YES, WAIT\r
215         MOVSI IOS,DDTM+SYNC\r
216         ANDCAM IOS,DEVIOS(DEVDAT)       ;TURN OFF DDT BIT\r
217         JRST UXIT\r
218 \f\r
219 \r
220 ;INPUT TO DDT\r
221 ;CALL AC,[SIXBIT /DDTIN/]     AC CONTAINS POINTER TO BUFFER AREA\r
222 ;BUFFER AREA MUST BE 21 WORDS LONG\r
223 \r
224 DDTIN:  PUSHJ PDP,TTYSR1                ;SET UP DEVDAT\r
225         MOVE IOS,DEVIOS(DEVDAT)\r
226         TLNE IOS,IO                     ;OUTPUT IN PROGRESS\r
227         PUSHJ PDP,WAIT1                 ;YES, WAIT\r
228 DDTIN2: MOVE IOS,DEVIOS(DEVDAT)\r
229         TLNE IOS,IOEND                  ;BUFFER ALREADY?\r
230         JRST DDTIN3                     ;YES\r
231         MOVEI IOS,IOACT\r
232         IORM IOS,DEVIOS(DDB)\r
233         PUSHJ PDP,WSYNC                 ;NO, WAIT\r
234         JRST DDTIN2\r
235 \r
236 DDTIN3: MOVSI TAC,NIO+IOFST+DDTM\r
237         IORM TAC,DEVIOS(DEVDAT)         ;STOP ALL IO\r
238         MOVE TAC,TTYPTR(DEVDAT)\r
239         PUSHJ PDP,CLRBYT                ;CLEAR OUT REMAINING BYTES\r
240         SUBI TAC,TTYBM1(DEVDAT)         ;NUMBER OF WORDS\r
241         LDB TAC1,PUUOAC       ;PICK UP AC NUMBER\r
242         ADDI TAC1,(PROG)                ;FIND REAL ADDRESS\r
243         MOVE TAC1,(TAC1)                ;PICK UP POINTER\r
244         ADDI TAC1,(PROG)                ;FIND REAL ADDRESS OF BUFFER\r
245         HRLI TAC1,TTYBUF(DEVDAT)\r
246         ADDI TAC,(TAC1)\r
247         BLT TAC1,(TAC)                  ;TRANSFER MONITOR BUFFER TO U\r
248         CLEARM 1(TAC)                   ;MAKE SURE THERE ARE SOME NUL\r
249         MOVSI TAC,NIO+IOEND\r
250         ANDCAM TAC,DEVIOS(DEVDAT)\r
251         JRST UXIT\r
252 \f\r
253 \r
254 ;OUTPUT FROM DDT\r
255 ;CALL AC,[SIXBIT /DDTOUT/]      AC HAS POINTER TO DDT OUTPUT BUFFER\r
256 \r
257 DDTOUT: PUSHJ PDP,TTYSR1\r
258         MOVE IOS,DEVIOS(DEVDAT)\r
259         TLNE IOS,IO                     ;OUTPUT IN PROGRESS?\r
260         PUSHJ PDP,WAIT1                 ;YES, WAIT\r
261         MOVE IOS,[XWD NIO+TOUT+DDTM,IOACT]\r
262         IORB IOS,DEVIOS(DEVDAT)\r
263         LDB TAC,PUUOAC          ;PICK UP AC NUMBER\r
264         HRLI TAC,JDAT           ;CALC REAL ADDRESS OF AC\r
265         HRR TAC,@TAC            ;PICK UP AC\r
266         HRLI TAC,@TAC           ;CALC REAL ADDRESS OF DDT BUF\r
267         HRRI TAC,TTYBUF(DEVDAT)\r
268         HRRZM TAC,TTYCTR(DDB)           ;A SUITABLY LARGE NUMBER\r
269         MOVE TAC1,TAC\r
270         BLT TAC,20(TAC1)                ;MOVE DDT BUFFER TO MONITOR\r
271         HRLI TAC1,440700\r
272 \r
273         MOVEM TAC1,TTYPTR(DEVDAT)\r
274         TLZ IOS,IOS+IOFST\r
275         PUSHJ PDP,TTYOU0\r
276         JRST UXIT\r
277 \f\r
278 \r
279 TTYSR1: MOVE ITEM,JOB\r
280 TTYSRC: MOVSI LINE,MTTYLN\r
281                 HRRZ DEVDAT,TTYTAB(LINE)\r
282                 JUMPE DEVDAT,TTYF0\r
283                 LDB TAC,TPCJOBN\r
284                 CAIN TAC,(ITEM)\r
285                 POPJ PDP,               ;FOUND\r
286         TTYF0:  AOBJN LINE,TTYSRC+1\r
287                 MOVSI TAC,576062        ;SIXBIT /OPR/\r
288                 JRST DEVPHY             ;SEARCH PHYSICAL DEVICE NAMES\r
289                                         ;AND RETURN OPERATOR TTY.\r
290 \r
291         ;ROUTINE TO FIND A TTY FOR A JOB\r
292         ;CALL:  MOVE ITEM,JOB NUMBER\r
293         ;       PUSHJ PDP, TTYFND\r
294         ;       ERROR RETURN\r
295         ;       RETURN WITH DEVDAT SET TO ADR OF DDB\r
296         ;       AND DAT SET TO BYTE POINTER TO MONITOR OUTPUT BUFFER\r
297 \r
298         TTYFNU: MOVE ITEM,JOB\r
299         TTYFND: PUSHJ PDP,TTYSRC                ;CALLED BY PUSHJ PDP,TTYFND\r
300         ;       PUSHJ PDP,WSYNC\r
301                 MOVSI TAC,NIO                   ;JOB NUMBER IN TAC1\r
302                 IORM TAC,DEVIOS(DEVDAT) \r
303         TTYDAT: MOVEI DAT,TTYBUF(DEVDAT)        ;SETUP OUTPUT BYTE POINTER\r
304                 HRLI DAT,440700\r
305                 POPJ PDP,\r
306 \r
307         TTYSTR: MOVE TAC,DAT\r
308                 PUSHJ PDP,CLRBYT\r
309                 SUBI TAC,TTYBM1(DEVDAT)\r
310                 ANDI TAC,-1\r
311                 IMULI TAC,5\r
312                 MOVEM TAC,TTYCTR(DEVDAT)\r
313                 MOVEI TAC,TTYBUF(DEVDAT)\r
314                 HRLI TAC,440700\r
315                 MOVEM TAC,TTYPTR(DEVDAT)\r
316                 MOVE IOS,DEVIOS(DEVDAT)\r
317                 IOR IOS,[XWD NIO+IOFST,IODTER+IOBKTL]\r
318                 ANDCM IOS,[XWD NIO+IOFST,IODTER+IOBKTL]\r
319                 PUSHJ PDP,GCHAR\r
320                 POPJ PDP, ;NOTHING TO TYPE\r
321                 JRST TTYOU2             ;START OUTPUT\r
322 \r
323         ;DISPATCH TABLE;\r
324 \r
325         TTYDSP: POPJ PDP, ;RELEASE\r
326                 JRST OUT        ;CLOSE\r
327                 JRST TTYOUT\r
328                 TDZ IOS,[XWD TPMON,ECHOF+NCERR]         ;INPUT\r
329                 TRO IOS,IOACT\r
330                 TLZE IOS, IOBEG\r
331                 TLO IOS, IOFST\r
332                 JRST MIS1\r
333 \r
334         TTYOUT: TDO IOS,[XWD TOUT+IOFST,IOACT]\r
335                 TDZ IOS,[XWD TPMON,ECHOF+NCERR]\r
336         TTYOU0: LDB HPOS,PHPOS\r
337                 LDB VPOS,PVPOS\r
338                 PUSHJ PDP, GCHAR\r
339                 POPJ PDP,\r
340                 DPB HPOS,PHPOS\r
341                 DPB VPOS,PVPOS\r
342         TTYOU2: LDB LINE,PUNIT\r
343                 CONO CLDS               ;DISABLE CLOCK\r
344                 CAIN LINE,TCONLN\r
345                 JRST CTYOUT\r
346                 CONO DCSA,0             ;DISABLE SCANNER\r
347                 CONO DCSB, (LINE)\r
348                 DATAO DCSA, CHREC\r
349                 CONO DCSA,FSNCHN\r
350                 DPB CHREC,PLASTC\r
351         TTYOU1: CONO CLEN               ;RE-ENABLE CLOCK\r
352                 MOVEM IOS,DEVIOS(DEVDAT)\r
353                 POPJ PDP,\r
354 \r
355         CTYOUT: CONO TTY,0              ;DISABLE TTY\r
356                 DATAO TTY,CHREC\r
357                 MOVEM CHREC,CCHAR\r
358                 CONO TTY,SCNCHN         ;RE-ENABLE\r
359                 JRST TTYOUT1\r
360 \r
361         CTYINT: CONSO TTY,50\r
362                 JRST .\r
363                 CONSO TTY,40\r
364                 JRST CTYOU1\r
365                 MOVEM TAC, CCHAR        ;DONT ECHO RUBOUT\r
366                 DATAI TTY, TAC\r
367                 ANDI TAC, 177\r
368                 CAIN TAC, 177\r
369                 JRST CTYRUB             ;IS A RUBOUT\r
370                 DATAO TTY, TAC          ;NOT, SO ECHO\r
371                 EXCH TAC, CCHAR\r
372                 JRST 12,@SCNCHL                 ;DISMISS INTERRUP\r
373 \r
374         CTYRUB: EXCH TAC, CCHAR\r
375         CTYOU1: JSR SCNSAV\r
376                 MOVEI CHREC,SCNCHN\r
377                 CONO TTY,200(CHREC)\r
378                 MOVE CHREC,CCHAR\r
379                 MOVEI LINE,TCONLN\r
380                 JRST TCOMM\r
381 \r
382         SCNINT: CONSO DCSA,1010\r
383                 JRST .\r
384                 JSR SCNSAV\r
385                 CONSO DCSA,10           ;RECEIVER FLAG?\r
386                 JRST SCNIN1             ;NO,XMITTER FLAG\r
387                 CONI DCSB, LINE\r
388                 DATAI DCSB, CHREC\r
389         TCOMM:  ANDI CHREC, 177\r
390                 CAILE LINE,TCONLN       ;CTY LINE OR LESS\r
391                 JRST TYPX               ;NO\r
392                 SKIPE DDB,TTYTAB(LINE)  ;DATA BLOCK ASSIGNED?\r
393                 JRST INUSE              ;YES\r
394                 PUSHJ PDP,DDBSRC        ;SEARCH FOR FREE TTY DEV. DATA BLOCK\r
395                 JRST TYPX               ;NONE FOUND, TYPE X\r
396                 CLEARB HPOS,VPOS        ;ASSUME TTY IS AT BEGIN OF FORM\r
397                 CONSZ DCSA,700          ;FULL DUPLEX?\r
398                 CAIN LINE,TCONLN        ;CTY?\r
399                 JRST INJEST             ;NO, SWALLOW CHAR\r
400                 JRST TYP1\r
401 \f\r
402 \r
403 ;ROUTINE TO SEARCH FOR FREE TTY DEV DATA BLOCK\r
404 ;CALL:    MOVE LINE,TTY LINE NO\r
405 ;         PUSHJ PDP,DDBSRC\r
406 ;         NONE FOUND\r
407 ;         RETURN DEVDAT, LINE SET\r
408 \r
409 DDBSRC:   MOVSI IOS,MLTTYL      ;NO. OF TTY DDB\r
410           MOVEI DEVDAT,TTYLST   ;ADDRESS OF FIRST DDB\r
411           SKIPA TAC,[XWD TTYUSE+TTYATC,ASSPRG+ASSCON]\r
412           HLRZ DEVDAT,DEVSER(DEVDAT)\r
413           TDNE TAC,DEVMOD(DEVDAT)       ;USE.ATTACH, AND BOTH ASSIGN\r
414           AOBJN IOS,.-2\r
415           JUMPGE IOS,CPOPJ      ;DDB FOUND?\r
416           MOVE IOS,[XWD TPMON+IOFST,IOACT]\r
417           MOVE TAC,[XWD TTYUSE,ASSCON]\r
418 \r
419 ;INITIALIZE TTY DEVICE DATA BLOCK(CALLED FROM TTYATT TOO)\r
420 \r
421 SCNIN:    IORM TAC,DEVMOD(DEVDAT)\r
422           DPB LINE,PUNIT        ;SET LINE NO. IN DDB\r
423           MOVSI TAC,646471      ;SIXBIT /TTY/\r
424           MOVEM TAC,DEVNAM(DEVDAT)\r
425           MOVE TAC,[POINT 6,DEVNAM(DEVDAT),17]\r
426           PUSH PDP,LINE         ;SAVE LINE NO.\r
427           TRNN LINE,70          ;IS THERE A HIGH ORDER OCTAL DIGIT?\r
428           JRST SCNIN0           ;NO\r
429           ROT LINE,-3           ;YES,CONVERT TO SIXBIT\r
430           ADDI LINE,20\r
431           IDPB LINE,TAC         ;STORE HIGH ORDER SIXBIT DIGIT\r
432           LSH LINE,20           ;IN PHYSICAL NAME\r
433 SCNIN0:   ADDI LINE,20\r
434           IDPB LINE,TAC         ;STORE LOW ORDER DIGIT\r
435           POP PDP,LINE\r
436 \r
437           HRRM DEVDAT,TTYTAB(LINE)      ;SET LINE NO. IN TRANSLATOR T\r
438           MOVSI TAC,436471      ;SIXBIT /CTY/\r
439           CAIN LINE,TCONLN      ;IS THIS CONSOLE TTY?\r
440           MOVEM TAC,DEVNAM(DEVDAT)      ;YES, SET NAME TO CTY\r
441           MOVE TAC,DEVNAM(DEVDAT)\r
442           SKIPN DEVOPR          ;IS THIS FIRST CHAR. TYPED BY ANYONE?\r
443           MOVEM TAC,DEVOPR      ;YES,SET THIS TTY AS OPERATOR TTY\r
444           JRST CPOPJ1           ;SUCCESSFUL RETURN\r
445 \r
446 SCNIN1:   DATAI DCSA,LINE       ;GET LINE NO. FROM FULL DUPLEX\r
447           MOVEI TAC,FSNCHN\r
448           CONO DCSA,4000(TAC)   ;RELEASE XMITTER SCANNER\r
449           SKIPE DDB,TTYTAB(LINE)        ;DATA BLOCK ASSIGNED?\r
450           CAIL LINE,TCONLN      ;LINE NO. TOO LARGE?\r
451           JRST SCNRET                   ;GO AWAY\r
452           LDB CHREC,PLASTC\r
453           JRST INUS1\r
454 \f\r
455 \r
456 TYPX:     CAIN CHREC,"X"                ;CHARACTER RECEIVED AN X?\r
457           JRST SCNRET                 ;YES, GO AWAY\r
458           MOVEI CHREC,"X"\r
459           CAIE LINE,TCONLN\r
460           JRST TYPX1\r
461           DATAO TTY,CHREC\r
462           JRST SCNRET\r
463 TYPX1:    CONSO DCSB,(LINE)\r
464           DATAO DCSA,CHREC              ;TYPE AN X\r
465           JRST SCNRET\r
466 \r
467 INUSE:    CONSZ DCSA,700        ;FULL DUPLEX?\r
468           CAIN LINE,TCONLN\r
469           JRST INUS1\r
470           CONO DCSB,(LINE)\r
471           DATAO DCSA,CHREC\r
472           DPB CHREC,PLASTC\r
473           JRST SCNRET\r
474 \r
475 INUS1:    MOVE IOS,DEVIOS(DDB)\r
476           LDB PROG,PJOBN\r
477           HRRZ PROG,JBTADR(PROG)\r
478           LDB HPOS,PHPOS\r
479           LDB VPOS,PVPOS\r
480           LDB TAC, TTYPTR(DDB)\r
481           TLNE IOS, SP\r
482           JRST SIM35\r
483 INUS2:    TLNN IOS,TOUT\r
484           JRST INJEST\r
485           CAME TAC, CHREC\r
486           JRST ECHO\r
487 INUS3:    PUSHJ PDP, GCHAR\r
488           JRST LEAV0\r
489 TYPE:     CAIN LINE,TCONLN\r
490           JRST CTSER3\r
491 TYP1:     CONO DCSB,(LINE)\r
492           DATAO DCSA, CHREC\r
493           DPB CHREC,PLASTC      ;SAVE CHARACTER FOR FULL DUPLEX\r
494 LEAVE:    MOVEM IOS, DEVIOS(DDB)\r
495 LEAV1:    DPB HPOS,PHPOS\r
496           DPB VPOS,PVPOS\r
497           JRST SCNRET\r
498 LEAV0:    MOVEM TAC,DEVMOD(DEVDAT)      ;IS TTY ATTCHED?\r
499           TLNN TAC,TTYATC\r
500           PUSHJ PDP,TTYKIL              ;NO,RETURN TO POOL\r
501           JRST LEAV1\r
502 \r
503 CTSER3:   DATAO TTY,CHREC\r
504           MOVEM CHREC,CCHAR\r
505           JRST LEAVE\r
506 \f\r
507 \r
508 ECHO:     TDO IOS,[XWD SP,ECHOF]\r
509           TLZ IOS,TOUT\r
510           MOVEI CHREC,177               ;SEND A RUBOUT AFTER ECHO CHE\r
511           JRST TYPE\r
512 \r
513 SIM35:    MOVSI TAC,-SCTABL\r
514           MOVE HPOS, SCTAB(TAC)\r
515           CAIE CHREC,(HPOS)\r
516           AOBJN TAC, .-2\r
517           LDB HPOS,PHPOS\r
518           JUMPGE TAC, ECHO\r
519           MOVS TAC, SCTAB(TAC)\r
520           TLNE TAC, 140         ;SPACING CHARACTER\r
521           AOJA HPOS,(TAC)       ;YES\r
522           JRST (TAC)            ;NO\r
523 \r
524 SCTAB:    XWD SPACE," "\r
525           XWD SIMLF,12\r
526           XWD SIMRO,177         ;RUBOUT\r
527           XWD SIMRO,134         ;BACK SLASH\r
528           XWD ASC3,15           ;CR\r
529           XWD SIMVA,"^"\r
530           XWD DELET1,"C"\r
531           XWD DELET1,"O"\r
532           XWD SIM4,"Z"\r
533           XWD DELET1,"U"\r
534 SCTABL=.-SCTAB\r
535 \r
536 SPACE:    TRNN HPOS,7           ;FINISHED SIMULATING TABS(8)\r
537           JRST SIM4             ;YES\r
538           JRST TYPE             ;NO, SEND ANOTHER SPACE\r
539 \r
540 SIMVA:    LDB CHREC,PSCHAR\r
541           TRO CHREC, 100\r
542           JRST TYPE\r
543 \r
544 SIMLF:    SOJG VPOS,TYPE        ;SEND ANOTHER LINE-FEED\r
545 SIM4:     TLZ IOS,SP\r
546           TLNN IOS,TOUT\r
547           JRST INJ4\r
548           JRST INUS3\r
549 \r
550 SIMRO:    TLZA IOS, SP\r
551 MOD35:    TRC IOS,T35\r
552           JRST LEAVE\r
553 \f\r
554 \r
555 INJEST:   CAIN CHREC,3          ;CONTROL C?\r
556           JRST INJ5\r
557           TLZE IOS,IOFST        ;IF FIRST CHARACTER IN, INITIALIZE\r
558           PUSHJ PDP,SETMB1\r
559           TLNE IOS,DDTM         ;1 DDT CHAR RESTARTS PROGRAM\r
560           TLO IOS,SYNC+IOEND    ;YES, TERMINATE BUFFER\r
561           CAIN CHREC,17                 ;COTNROL O?\r
562           JRST INJ6                     ;YES, FLUSH OUTPUT\r
563           TRZE IOS,ECHOF                ;ECHO HAS OCCURRED?\r
564           JRST INJ7                     ;YES, NOW RESUME OUTPUT\r
565           TRNE IOS,NCERR\r
566           JRST LEAVE\r
567           CAIE CHREC,033        ;NEW NEW ALT-MODE?\r
568           CAIN CHREC,176        ;NEW ALT-MODE?\r
569           MOVEI CHREC,175       ;CHANGE TO OLD\r
570           CAIN CHREC,20         ;CONTROL P TAB SIMULATION FLIP FLOP SWI\r
571           JRST MOD35\r
572           TLNE IOS,DDTM\r
573           JRST INJ25            ;SENT RUBOUTS ON TO DDT\r
574           CAIN CHREC,177        ;RUBOUT\r
575           JRST DELET\r
576 INJ25:    DPBI CHREC, TTYPTR(DDB)\r
577           SOS TAC, TTYCTR(DDB)\r
578           CAIL CHREC, 40\r
579           CAILE CHREC, 137\r
580           JRST SPCIN\r
581           ADDI HPOS,1\r
582 INJ4:     PUSHJ PDP, MOVBUF\r
583           JRST LEAVE\r
584 \r
585 SETMB1:   HRRI TAC, TTYBUF(DDB)\r
586           HRLI TAC, 440700\r
587           MOVEM TAC, TTYPTR(DDB)\r
588           HRLS TAC\r
589           AOS TAC\r
590           SETZM TTYBUF(DDB)\r
591           BLT TAC,TTYBFE(DDB) ;CLEAR OUT MONITOR BUFFER\r
592           MOVEI TAC, 111\r
593           MOVEM TAC, TTYCTR(DDB)\r
594           POPJ PDP,\r
595 \f\r
596 \r
597 INJ5:     PUSHJ PDP,SETMB1\r
598           PUSH PDP,ITEM         ;^C\r
599           LDB ITEM,TPCJOBN      ;YES, GET USER CONSOLE NUMBER\r
600           SKIPE ITEM\r
601           PUSHJ PDP,STOP1                 ;SHUT OFF JOB\r
602           POP PDP,ITEM\r
603           TLNN IOS,TPMON        ;SAVE STATUS OF TTY\r
604           MOVEM IOS,TTYSAV(DDB)         ;WHEN IT WAS IN USER MODE\r
605           MOVE IOS,[XWD TPMON+IOFST,IOACT]\r
606           MOVEI TAC,"C"\r
607           JRST INJ61\r
608 \r
609 INJ6:     PUSH PDP,TAC1         ;^O\r
610           TLZE IOS,IOW\r
611           PUSHJ PDP,SETIOD\r
612           POP PDP,TAC1\r
613           TLNE IOS,TPMON+DDTM\r
614           JRST INJ6A\r
615           TLNE IOS,TOUT\r
616           PUSHJ PDP,ADVBFE\r
617 INJ6A:    TLOA IOS,IOFST\r
618           JRST .-2\r
619           TRZ IOS,ECHOF\r
620           TRO IOS,IODEND\r
621           MOVEI TAC,"0"\r
622 INJ61:    DPB TAC,PSCHAR\r
623           MOVEI CHREC,"^"\r
624           JRST SPC21\r
625 \r
626 INJ7:     TLO IOS,TOUT\r
627           JRST INUS3\r
628 \f\r
629 \r
630 SPCIN:    MOVSI TAC,-SCITL      ;SEARCH FOR SPECIAL INPUT CHAR\r
631           MOVE TAC1,SCITAB(TAC)\r
632           CAIE CHREC,(TAC1)     ;FOUND?\r
633           AOBJN TAC,.-2         ;NO\r
634           HLR TAC,TAC1          ;SAVE DISPATCH ADDRESS\r
635           LDB LINE,PUNIT        ;RESTORE TAC1\r
636           JUMPL TAC,(TAC)       \r
637           JRST INJ4             ;CHARACTER NOT FOUND\r
638 \r
639 SCITAB:   XWD SPCCR,15          ;CR\r
640           XWD ASC1,12           ;LF\r
641           XWD SPC2,11           ;HORIZ TAB\r
642           XWD SPVT,13           ;VT\r
643           XWD SPFF,14           ;FF\r
644           XWD SPC4A,25          ;^U\r
645           XWD SPC7,32           ;^Z\r
646           XWD ASC1, 175         ;ALT MODE\r
647 SCITL=.-SCITAB\r
648 \r
649 SPCCR:    MOVEI HPOS,0\r
650           JRST ASC3\r
651 \r
652 SPFF:     SKIPA VPOS,[10]\r
653 SPVT:     MOVEI VPOS,4\r
654           TLNN IOS,T35          ;DONT SIMULATE FOR A MOD 35\r
655           TLO IOS,SP\r
656 ASC1:     LDB TAC,PIOMOD\r
657           TLNN IOS,TPMON\r
658           CAIN TAC,AL\r
659           TLO IOS,SYNC\r
660 ASC2:     TLNN IOS,SP\r
661           JRST INJ4\r
662 ASC3:     MOVEI CHREC,12        ;LINE FEED\r
663           JRST TYPE\r
664 \r
665 SPC4A:    PUSHJ PDP,SETMB1\r
666           MOVEI TAC,"U"\r
667           JRST INJ61\r
668 \r
669 SPC2:     TRNE IOS,T35\r
670           JRST LEAVE\r
671           MOVEI CHREC," "\r
672 SPC21:    TLO IOS,SP\r
673           JRST TYPE\r
674 \r
675 SPC7:     TLO IOS,SYNC+IOEND+SP         ;^Z\r
676           MOVEI TAC,"Z"\r
677           JRST INJ61            ;ECHO ^Z\r
678 \f\r
679 \r
680 DELET:    MOVE TAC,TTYCTR(DDB)\r
681           CAIL TAC,111\r
682           JRST DELET1\r
683 \r
684           MOVSI TAC,070000\r
685           ADD TAC,TTYPTR(DDB)\r
686           TLNE TAC,400000\r
687           ADD TAC,[XWD 347777,-1]\r
688           MOVEM TAC,TTYPTR(DDB)\r
689           AOS TTYCTR(DDB)\r
690 \r
691           MOVEI CHREC,334               ;BACK SLASH\r
692 DELET2:   TLO IOS,SP\r
693           JRST TYPE\r
694 \r
695 DELET1:   MOVEI VPOS,1\r
696           MOVEI CHREC,15\r
697           JRST DELET2\r
698 \f\r
699 \r
700 ;ROUTINE TO GET NEXT CHARACTER FROM OUTPUT BUFFER\r
701 ;CALL:    PUSHJ PDP,GCHAR\r
702 ;         NO MORE LEFT\r
703 ;         RETURN WITH CHAR. IN CHREC\r
704 \r
705 GCHAR:    TLZN IOS, IOFST\r
706           JRST GCHAR3\r
707 GCHAR1:   HRRZ TAC,DEVOAD(DDB)\r
708           ADD TAC, [XWD 000700+PROG,1]\r
709           MOVEM TAC, TTYPTR(DDB)\r
710           HRRZ TAC, @TAC\r
711           IMULI TAC, 5\r
712           MOVEM TAC,TTYCTR(DDB)\r
713 GCHAR3:   SOSGE TTYCTR(DDB)\r
714           JRST GCHAR5\r
715           LDBI CHREC, TTYPTR(DDB)\r
716           JUMPE CHREC, GCHAR7\r
717           CAIN CHREC, 11\r
718           JRST HT\r
719           CAIN CHREC, 12\r
720           AOJA VPOS,GCH3\r
721           CAIE CHREC, 13\r
722           CAIN CHREC, 14\r
723           JRST VTFF\r
724           ADDI HPOS,1\r
725           CAIN CHREC,15\r
726           MOVEI HPOS,0\r
727 GCH3:     AOSA (PDP)\r
728 GCH3A:    MOVE IOS,TTYSAV(DDB)          ;RESTORE STATUS TO USER\r
729 GCHAR4:   MOVEM IOS,DEVIOS(DDB)\r
730           POPJ PDP,\r
731 \r
732 GCHAR7:   TLNN IOS,DDTM         ;DDT BUFFER TERMINATED WITH NULL\r
733           JRST GCHAR3\r
734 GCHAR5:   PUSH PDP,TAC1\r
735           TLZE IOS, IOW\r
736           PUSHJ PDP, SETIOD\r
737           POP PDP,TAC1\r
738           TLNN IOS,TPMON+DDTM\r
739           PUSHJ PDP, ADVBFE\r
740           TLOA IOS,IOFST\r
741           JRST GCHAR1\r
742           TDZ IOS,[XWD IO,IOACT]\r
743           TLZN IOS,USRB\r
744           JRST GCHAR4\r
745           TLZ IOS,TPMON\r
746           LDB LINE,PUNIT        ;GET LINE NO.\r
747           PUSH PDP,ITEM\r
748           LDB ITEM,TPCJOB\r
749           PUSHJ PDP,SETRUN\r
750           POP PDP,ITEM\r
751           TRZN IOS,USRBC\r
752           JRST GCH3A\r
753           MOVSI IOS,TPMON+IOFST\r
754           JRST GCHAR4\r
755 HT:       TRNE IOS,T35\r
756           AOJA HPOS,GCH3\r
757           TLO IOS,SP\r
758 SPOUT:    MOVEI CHREC,240\r
759           JRST GCH3\r
760 \r
761 VTFF:     TRNE IOS,T35\r
762           AOJA VPOS,GCH3\r
763           MOVEI CHREC,12\r
764           TLO IOS,SP\r
765           JRST GCH3\r
766 \f\r
767 MOVBUF:   TLNE IOS,DDTM\r
768           JRST MOV3 ;DONT ADVANCE BUFFERS FOR DDT MODE\r
769           TLZN IOS,SYNC\r
770           SKIPG TTYCTR(DDB)\r
771           JRST .+2\r
772           JRST MIS1\r
773           TLNE IOS, TPMON\r
774           JRST MOVMON\r
775           MOVE TAC,DEVIAD(DDB)          ;IS TTY EXPECTING INPUT?\r
776           TRNE TAC,-1   \r
777           SKIPGE @TAC                   ;OR IS NEXT BUFFER READY?\r
778           JRST MIS  ;NO\r
779           PUSH PDP,TAC1\r
780           MOVE TAC,TTYPTR(DDB)\r
781           PUSHJ PDP,CLRBYT\r
782           MOVE TAC,DEVIAD(DDB)\r
783           PUSHJ PDP,ADRCK    ;MAKE SURE BUFFER WILL FIT\r
784           HRRZI TAC,STTYB1(TAC)         ;LENGTH+1\r
785 \r
786           MOVEI TAC,@DEVIAD(DDB)\r
787           ADDI TAC,2\r
788           HRR CHREC,TAC\r
789           ADDI TAC,STTYBF\r
790           HRLI CHREC,TTYBUF(DDB)\r
791           BLT CHREC,-1 (TAC)\r
792         \r
793           MOVEI TAC,111\r
794           SUB TAC, TTYCTR(DDB)\r
795           ADDI TAC,4\r
796           IDIVI TAC,5\r
797           MOVEI CHREC,@DEVIAD(DDB)\r
798           MOVEM TAC,1(CHREC)\r
799           PUSHJ PDP, ADVBFF\r
800           JRST .+1\r
801           TLOA IOS,IOFST\r
802 MOV3:     PUSH PDP,TAC1\r
803           TLZE IOS, IOW\r
804           PUSHJ PDP, SETIOD\r
805           POP PDP,TAC1\r
806           TRZA IOS,NCERR+IOACT\r
807 MIS:      TRO IOS, NCERR\r
808 MIS1:     MOVEM IOS, DEVIOS(DDB)\r
809           POPJ PDP,\r
810 MOVMON:   MOVSI TAC,400000\r
811           IORM TAC,TTYTAB(LINE)         ;SET BIT FOR MONITOR\r
812           TLO IOS,IOFST\r
813           MOVEI TAC,15\r
814           DPB TAC,TTYPTR(DDB) ;FORCE A CARRIAGE RET INTO MONITOR COMM\r
815           AOS COMCNT\r
816           POPJ PDP,\r
817 \r
818           END,\r