Upgrade to GPLv3
[its.git] / system / itsdev.974
1 ;;; Copyright (c) 1999 Massachusetts Institute of Technology
2 ;;;
3 ;;; This program is free software; you can redistribute it and/or
4 ;;; modify it under the terms of the GNU General Public License as
5 ;;; published by the Free Software Foundation; either version 3 of the
6 ;;; License, or (at your option) any later version.
7 ;;;
8 ;;; This program is distributed in the hope that it will be useful,
9 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
10 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 ;;; General Public License for more details.
12 ;;;
13 ;;; You should have received a copy of the GNU General Public License
14 ;;; along with this program; if not, write to the Free Software
15 ;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
16
17 ; I T S MISCELLANEOUS DEVICES
18
19 IFN PTRP,[
20
21 SUBTTL  PAPER TAPE PUNCH ROUTINES
22
23 PTPO:   JSP Q,STDOPN
24         7,,PTPUSR
25         PTPA,,PTPB
26         PTPWA,,PTPWB
27         PTPI,,0
28         PTPI,,0
29
30 BPIPUN: JSP E,NBTOCH
31         CAIN A,EOFCH
32         POPJ P,
33         JRST APIPU2
34
35 APIPUN: SKIPGE C
36          SKIPA A,(C)
37           UMOVE A,(C)
38         ANDI A,177
39 APIPU2: CAIN A,14
40          JRST PUNFF
41         TRO A,200
42         JRST PIPUN3
43
44 PIPUN:  SKIPGE C
45          SKIPA A,(C)
46           UMOVE A,(C)
47 PIPUN3: SKIPG PUNCC
48          JRST PUNW1
49 PIPUN2: IDPB A,PUNIP
50         HRRZ A,PUNIP
51         CAIN A,PUNBE-1
52         MOVEI A,PUNBO
53         HRRM A,PUNIP
54         SOS PUNCC
55 PUNST:  SKIPGE PUNNT
56         POPJ P, ;PUNCH OUT OF TAPE
57         CONSO PTP,7
58         CONO PTP,10+PCHCHN
59         POPJ P,
60
61         PUSHJ P,PUNW2
62 PUNW1:  PUSHJ P,UFLS
63         JRST PIPUN2
64
65 PUNW2:  SKIPG T,PUNCC
66         POPJ P,
67         CAIL T,PUNSIZ*2
68         JRST POPJ1
69         JRST POPJ3
70
71 PUNFF:  MOVEI T,55
72         CAMLE T,PUNCC
73         PUSHJ P,UFLS
74         MOVSI B,-4
75         PUSHJ P,PUNFF2
76         MOVEI A,214
77         PUSHJ P,PIPUN2
78         MOVSI B,-50
79 PUNFF2: MOVEI A,0
80         PUSHJ P,PIPUN2
81         AOBJN B,PUNFF2
82         POPJ P,
83
84 WBPIPN: JSP Q,WRDBT
85 WAPIPN: MOVEI T,6
86         CAMLE T,PUNCC
87         PUSHJ P,UFLS
88         SKIPGE C
89          SKIPA B,(C)
90           UMOVE B,(C)
91         MOVSI E,-6
92 WPIPN2: MOVEI A,2
93         LSHC A,6
94         PUSHJ P,PIPUN2
95         AOBJN E,WPIPN2
96         POPJ P,
97 \f
98 PBRK1:  MOVEI A,PUNSIZ*4-4
99         CAMG A,PUNCC
100         JRST PUNSTP
101         CONSZ PTP,100   ;CHECK NO TAPE FLAG
102         JRST PBRK2      ;PUNCH OUT OF TAPE
103         ILDB A,PUNOP
104         DATAO PTP,A
105         HRRZ A,PUNOP
106         CAIN A,PUNBE-1
107         MOVEI A,PUNBO
108         HRRM A,PUNOP
109         AOSA PUNCC
110 PUNSTP: CONO PTP,0
111         JRST LPBKRT
112
113 PBRK2:  SETOM PUNNT     ;PTP OUT OF TAPE
114         JRST PUNSTP
115
116 ;PTP SLOW CLOCK ROUTINE
117 PTPCHK: SKIPGE PUNNT
118         CONSZ PTP,100
119         POPJ P,
120         HRRZM P,PUNNT
121         JRST PUNST      ;PTP HAS TAPE NOW
122
123 EBLK
124
125 PUNNT:  105     ;-1 => PTP OUT OF TAPE
126 PUNCC:  PUNSIZ*4-4
127 PUNIP:  (1000)PUNBO-1
128 PUNOP:  (1000)PUNBO-1
129 PUNBO:  BLOCK PUNSIZ
130 PUNBE:
131
132 BBLK
133
134 PUNCLR: MOVEI A,PUNSIZ*4-4
135         MOVE B,PUNIP
136         MOVEM A,PUNCC
137         MOVEM B,PUNOP
138         POPJ P,
139
140 PUNFIN: MOVE T,PUNSIZ*4-4       ;.CALL FINISH
141         CAMLE T,PUNCC
142          PUSHJ P,UFLS
143         POPJ P,
144
145 AFEED:  HRRZ A,(R)
146         CAIL A,PTPI     ;LOWEST PTP DEV #
147         CAILE A,PTPWB   ;HIGHEST PTP DEV #
148         POPJ P, ;PTP NOT OPEN ON CHNL
149         MOVEI A,0
150         PUSHJ P,PIPUN3
151         JRST POPJ1
152 \f
153 SUBTTL  PAPER TAPE READER ROUTINES
154
155         PTRCHX==10      ;NUMBER OF CHARACTERS IGNORED AT END OF TAPE
156
157 PTRO:   PUSH P,[PTRO1]  ;SO STDOPN WILL RETURN
158         JSP Q,STDOPN
159         7,,PTRUSR
160         REDUAI,,REDBAI  ;ASCII MODE
161         REDUII,,REDBII  ;IMAGE MODE
162         REDUTI,,0       ;ALL 8 HOLES MODE
163         REDUTI,,0       ;" " " "
164
165                 ;RETURN FROM STDOPN
166 PTRO1:  POPJ P,         ;OPEN LOST
167         AOS (P)         ;OPEN WON, MAKE RETURN SKIP
168         SKIPE PTRUSE
169         POPJ P,         ;READER ALREADY OPEN, DON'T RESET
170                         ;READER NOT ALREADY OPEN, SO
171                 ;RESET PTR POINTERS AND START UP READER
172         CONO PI,PTROFF  ;INHIBIT INTERRUPTS
173         MOVEI T,20      ;BUSY FLAG
174         PUSHJ P,PTRST   ;START UP READER IF NOT ALREADY RUNNING
175                 ;RESET PTR BUFFER POINTERS
176 PTRZAP: MOVE A,[041000,,PTRBUF-1]       ;BUFFER BYTE POINTER
177         MOVEM A,PTRIP   ;BUFFER INPUT (INTERRUPT) POINTER
178         MOVEM A,PTROP   ;BUFFER OUTPUT (IOT) POINTER
179         MOVEI A,PTRCHX  ;REINITIALIZE CHARACTER COUNT
180         MOVNM A,PTRCC   ;" " "
181         CONO PI,PTRON   ;RE-ENABLE INTERRUPTS
182         JRST PTRSIW     ;RESET STATUS OF IMAGE WORD AND RETURN
183
184                 ;CLOSE CHANNEL ON WHICH PTR OPEN
185
186 PTRCLS: CONO PI,PTROFF  ;INHIBIT INTERRUPTS
187         SOSL PTRUSE     ;DECREMENT USE COUNTER
188         JRST PTRONJ     ;PTR OPENED ON MORE CHANNELS
189         SETOM PTRUSR    ;NO MORE OPENS ON READER, INDICATE NO USER
190         SETOM PTRDIE    ;EVENTUALLY TURN OFF READER
191         JRST PTRZAP     ;RESET BUFFER STATUS
192
193 PTRRS:  CONO PI,PTROFF  ;PTR .RESET ROUTINE
194         JRST PTRZAP
195 \f
196                 ;BLOCK ASCII INPUT
197
198 PTRBAI: JSP E,INBTCH    ;DO IT A CHARACTER AT A TIME
199
200                 ;GET AN ASCII CHARACTER IN W
201
202 PTRUAI:
203 PTRCHA: PUSHJ P,PTRCH   ;GET CHARACTER - SKIPS IF EOF.
204         TRZA W,200      ;CLEAR 200 BIT
205          JRST POPJ1
206         JUMPE W,PTRCHA  ;IF RESULT ZERO THEN DON'T CALL IT ASCII
207         CAIN W,177      ;IF RUBOUT,
208          JRST PTRCHA    ;THEN IGNORE IT
209         POPJ P,         ;ASCII, USE IT
210
211 PTRBII: JSP W,WRDBTI    ;BLOCK IMAGE INPUT.
212
213                 ;UNIT IMAGE INPUT
214                 ;END-OF-FILE GIVES SIXBIT /######/
215
216 PTRUII: PUSHJ P,PTRCH   ;GET CHARACTER
217          TRNE W,200
218           CAIA          ;CALL IT BINARY IF 200 SET, OR IF EOF.
219            JRST PTRUII
220         IDPB W,PTRIBP
221         JUMPL W,PTRUI2  ;IF REACHED EOF, SKIP 1 OR 2.
222         SOSLE PTRICC    ;IF WORD NOT FULL,
223          JRST PTRUII    ;THEN GO BACK FOR MORE
224         JRST PTRUI1     ;ELSE RETURN THE WORD.
225
226 PTRUI2: SOSG B,PTRICC
227          JRST PTRUI3
228         CAIE B,5
229          JRST PTRUII
230         JRST PTRUI4
231
232 PTRUI3: AOS (P)         ;IF WE REACHED EOF, SKIP TWICE.
233 PTRUI4: AOS (P)         ;REACHED EOF BEFORE WORD; SKIP ONCE.
234 PTRUI1: MOVE W,PTRIW    ;WORD FULL,
235 PTRSIW: MOVEI B,6       ;NOW REINITIALIZE POINTERS TO WORD
236         MOVEM B,PTRICC  ;CHARACTER COUNT OF WORD
237         MOVE B,[440600,,PTRIW]  ;POINTER TO WORD
238         MOVEM B,PTRIBP
239         POPJ P,
240 \f
241                 ;GET A CHARACTER IN W OR SKIP RETURNING -1,,EOFCH IF NONE AVAILABLE
242
243 PTRUTI:         ;UNIT MODE ALL-HOLES INPUT.
244 PTRCH:  MOVEI T,20      ;BUSY FLAG
245         PUSHJ P,PTRCHW  ;WAIT FOR A CHARACTER
246          PUSHJ P,UFLS
247         SOSGE I,PTRCC   ;DECREMENT CHARACTER COUNT
248          JRST PTRCH1    ;BUFFER EMPTY
249         MOVEI T,10      ;DONE FLAG
250         CAIGE I,REDSIZ-PTRCHX   ;IF BUFFER LESS THAN 1/4-FULL,
251          PUSHJ P,PTRST  ;THEN MAKE SURE READER RUNNING
252         ILDB W,PTROP    ;GET CHARACTER
253         HRRZ B,PTROP    ;RING THE BUFFER
254         CAIL B,PTRBUF+REDSIZ-1
255          MOVEI B,PTRBUF
256         HRRM B,PTROP
257         POPJ P,
258
259                 ;END-OF-FILE ENCOUNTERED DURING PTRCH
260
261 PTRCH1: AOS PTRCC       ;RESTORE CHARACTER COUNT TO ITS ORIGINAL STATE
262         JRST UNIEOF
263
264                 ;SKIP IF CHARACTER IN BUFFER OR END-OF-TAPE
265
266 PTRCHW: SKIPG PTRCC     ;IF CHARACTER IN BUFFER,
267         CONSO PTR,400   ;OR POWER IS OFF,
268         JRST POPJ1      ;THEN EXIT SKIPPING
269                         ;OTHERWISE,
270                 ;MAKE SURE READER RUNNING
271
272 PTRST:  CONSZ PTR,7
273         CONSO PTR,30    ;IF RUNNING,
274         JRST .+2
275         POPJ P,         ;THEN THAT'S ALL
276         CONO PTR,PTRCHN(T)      ;NOT RUNNING, RESTART WITH SELECTED FLAG
277         SETOM PTRDIE    ;LET SLOW CLOCK FIGURE OUT IF THERE'S TAPE
278         POPJ P,
279 \f
280                 ;PTR INTERRUPT ROUTINE
281
282 PTRBRK: AOSN PTRSTP     ;IF READER SHOULD BE STOPPED THIS BREAK,
283         JRST PTRFUL     ;THEN STOP IT (BUFFER FULL)
284         DATAI PTR,A     ;GET CHARACTER
285         SETOM PTRDIE    ;TELL SLOW CLOCK THAT BREAK HAS HAPPENED
286         IDPB A,PTRIP    ;PUT IN BUFFER
287         HRRZ A,PTRIP    ;RING THE BUFFER
288         CAIN A,PTRBUF+REDSIZ-1
289         MOVEI A,PTRBUF
290         HRRM A,PTRIP
291         AOS A,PTRCC     ;TOTAL CHARACTER COUNT-PTRCHX
292         CAIGE A,REDSIZ*4-10-PTRCHX
293         JRST LPBKRT
294         SETOM PTRSTP    ;STOP READER AT NEXT BREAK
295         JRST LPBKRT
296
297 PTRFUL: CONO PTR,PTRCHN ;BUFFER FULL, STOP READER
298         MOVEI A,1       ;TELL SLOW CLOCK...
299         MOVEM A,PTRDIE  ;NOT TO TURN IT OFF
300         JRST LPBKRT
301
302                 ;SLOW CLOCK ROUTINE
303                 ;CHECKS READER EVERY HALF-SECOND
304
305 PTRCHK: AOS A,PTRDIE
306         CAIN A,1        ;IF UNINTENTIONALLY STOPPED FOR OVER HALF-SECOND
307         CONO PTR,400    ;THEN TURN THE READER OFF
308         POPJ P,
309
310 EBLK
311                 ;PTR VARIABLES
312
313 PTRDIE: -264            ;END-OF-TAPE DETECTION
314 PTRSTP: 0               ;-1 => STOP READER AT NEXT BREAK (SET DURING BREAK WHEN BUFFER FULL)
315 PTRIP:  041000,,PTRBUF-1        ;BUFFER INPUT (INTERRUPT) POINTER
316 PTROP:  041000,,PTRBUF-1        ;BUFFER OUTPUT (IOT) POINTER
317 PTRBUF: BLOCK REDSIZ    ;READER BUFFER
318 PTRCC:  -PTRCHX         ;NUMBER OF CHARACTERS IN BUFFER -PTRCHX
319
320 PTRIW:  0               ;CURRENT WORD FOR IMAGE MODE
321 PTRIBP: 440600,,PTRIW   ;POINTER TO CURRENT WORD
322 PTRICC: 0               ;CHARACTER COUNT TO CURRENT IMAGE MODE WORD
323
324 BBLK
325
326 ]               ;END OF IFN PTRP
327 \f
328 SUBTTL  LINE PRINTER ROUTINES
329
330 IFN NLPTP,[
331 NLPTO:  MOVE A,UTMPTR(U)
332         SKIPGE NLUSR
333         SKIPL TTYTYP-USRRCE(A)
334          JRST TPLO
335         SETOM NLFREE
336         MOVEI T,LPTBSZ
337         CAME T,NLPTBR   ;WAIT TILL LPT BUFFER IS EMPTY.
338          PUSHJ P,UFLS
339         CONSZ NLPT,207  ;AND LPT ISN'T STILL PRINTING LAST WD
340          PUSHJ P,UFLS
341         PUSH P,[NLPTO1]
342         JSP Q,STDOPN
343         1,,NLUSR
344         NLPTDN,,NLPTBN
345
346 NLPTO1: POPJ P,         ;LPT NOT AVAIL & NOT ASSIGNED.
347                         ;LPT ASSIGNED, INIT IT.
348         CONO NLPT,1000  ;PUT LPT INTERFACE IN IMAGE MODE,
349         DATAO NLPT,[23*2]       ;TURN ON THE LPT'S MOTOR.
350         MOVEI I,1000
351         CONSZ NLPT,200  ;WAIT TILL IT IS ON.
352          SOJG I,.-1
353         AOS (P)
354 NLPTO3: HRROI I,NLPTCF
355         HRROI C,I
356         PUSHJ P,BNLPTO  ;CAN'T PCLSR SINCE BUFFER IS EMPTY.
357         HRRZ I,NLPTBP
358         HRLI I,010700
359         MOVEM I,NLPTIP
360         POPJ P,
361
362 NLPTCF: 15_29.+14_22.+177_15.+177_8+177_1
363 ]
364 \f
365 IFN GLPTP,[     ;GOULD ELECTROSTATIC PRINTER ROUTINES
366
367 IFE DL10P,.ERR GOULD PRINTER WITHOUT A PDP11 TO RUN IT?
368
369 ;OPEN ROUTINE
370
371 GLPTO:  SKIPE GLPTER
372          JRST OPNL7     ;DEV NOT READY IF 11 UNHAPPY
373         MOVEI Q,[1,,LPTUSR
374                  GLPTDN,,GLPTBN]
375         PUSHJ P,STDOPN
376          POPJ P,
377         SETZM GLPGRF
378         TLNE C,10       ;BIT 3.4 => GRAPHICS MODE.
379          SETOM GLPGRF
380         JRST POPJ1
381
382
383
384
385
386
387 ;IOT ROUTINES
388
389         SKIPA T,[SIOKT] ;SIOT HANDLER = UNIT HANDLER MINUS ONE
390 GLPTDO:  MOVEI T,CHRKTO
391         MOVE E,[440700,,5]
392         JRST GLPTOO
393
394 GLPTBO: MOVEI T,BLKT
395         MOVE E,[444400,,1]
396 GLPTOO: JSP B,(T)
397         SETZ GLPMPP
398         GLPMPC
399         GLPBGB
400         GLPBWW
401         JRST 4,.
402         SKIPE GLPTBC
403
404 ;CLOSE ROUTINE
405
406 GLPCLS: SKIPE GLPMPP            ;IF THERE'S AN UN-SENT BUFFER,
407          PUSHJ P,GLPBWW         ;BARK AT THE PDP11
408         SKIPE GLPTBC            ;WAIT FOR ALL BUFFERED STUFF TO BE SENT
409          PUSHJ P,UFLS
410         PUSHJ P,GLPBG0          ;AVOID IOCERR AT NEXT OPEN
411         IRPS CH,,12 14 177 105
412          MOVE C,[SETZ I]        ;AT CLOSE SEND FF, EOF
413          MOVEI I,CH             ;THIS CAN'T PCLSR ONCE IT GETS A NEW BUFFER.
414          PUSHJ P,GLPTDO
415          TERMIN
416         SETZM GLPGRF
417         PUSHJ P,GLPBWW          ;WRITE LAST BUFFER
418         SETOM LPTUSR
419         SETOM LPTUSE
420         POPJ P,
421
422 ;BUFFER GET ROUTINE
423
424 GLPBGB: SKIPE GLPTER
425          JRST IOCER1            ;DEV NOT READY IF 11 UNHAPPY ABOU IT.
426         SKIPE GLPTBC
427          POPJ P,                ;BUFFER BUSY
428 GLPBG0: MOVEI TT,GLPTBF
429         MOVEI J,GLPBSZ
430         JRST SIOBGX
431
432 ;BUFFER DISCARD ROUTINE
433
434 GLPBWW: MOVE D,[450000,,GLPTBF-1]       ;DL10 BYTE POINTER (7-BIT BYTES)
435         SKIPE J,GLPGRF
436          HRLI D,340000          ;GRAPHICS MODE => 8-BIT BYTES
437         MOVEM D,GLPTBP
438         SKIPN D,GLPMPP          ;COMPUTE # CHARS IN BUFFER
439          POPJ P,
440         JUMPL D,[SOJA D,GLPBW1]
441         MOVEI TT,15             ;INDEPENDENT OF E, BLOCK VS UNIT, ETC.
442         TLNE D,760000
443          JRST [ IDPB TT,D ? JRST .-1 ]
444 GLPBW1: MOVEI D,-GLPTBF+1(D)
445         IMUL D,[4 ? 5]+1(J)     ;GRAPHICS => 4, ELSE 5.
446         MOVEM D,GLPTBC          ;START THE PDP11
447         SETZM GLPMPP            ;FLAG THAT BUFFER IS NOT ACTIVE AT M.P. LEVEL
448         SETZM GLPMPC
449         POPJ P,
450
451 ;NOTE:  TPL CODE HAS DELIBERATELY BEEN OMITTED.
452 ;THE DL10 LIMITS THE BUFFER SIZE TO 256 WORDS.  WITH THIS SMALL
453 ;A BUFFER THE SYSTEM JOB CAN'T DRIVE THE PRINTER AT FULL SPEED
454 ;BECAUSE IT CAN ONLY IOT ONCE A SECOND OR SO.
455 ;ANYWAY, THE NECESSARY TPL CODE IS HAIRY.
456 ]       ;END IFN GLPTP
457 \f
458 IFN OLPTP,[
459
460 LPTLPP==60.
461
462 LPTO:   CAMN U,OLUSR
463         JRST LPTO2      ;ALREADY HAS IT
464         MOVE A,UTMPTR(U)        ;GET POINTER TO USER RESOURCE
465                         ;(TTY DEPENDANT)
466         SKIPL TTYTYP-USRRCE(A)
467         JRST TPLO
468 LPTO2:  PUSH P,[LPTO1]
469         JSP Q,STDOPN
470         1,,OLUSR
471         LPTDN,,LPTBN
472
473 LPTO1:  POPJ P,         ;OPEN LOST
474         SKIPE OLUSE     ;OPEN WON
475         JRST POPJ1      ;NOT FIRST OPEN BY THIS USER
476         AOS (P)
477 LPTRS2: MOVEI A,15      ;ENTRY FROM LPTRS, DUMP OUT CRUD ON THIS LINE THEN FORM FEED
478         PUSHJ P,PILPT
479         MOVEI A,14
480         JRST PILPT
481
482 BLPTO:  MOVEI E,PILPT
483         JRST NBTOCH
484
485 PILPT1: SKIPGE C
486          SKIPA A,(C)
487           UMOVE A,(C)
488         ANDI A,177
489 PILPT:  CAIN A,177
490         POPJ P,         ;IGNORE RUBOUTS
491         MOVEI T,130.    ;LPTCC COMPARED WITH 132. BY SYSTEM JOB BEFORE TRY OF .OPEN
492         CAMLE T,LPTCC
493         JRST LPTW1      ;WAIT
494 LPTIM:  CAIGE A,40
495         JRST LPTRC
496         CAIL A,140
497         SUBI A,40
498 LPTIM2: AOSN LPTBSF
499         PUSHJ P,LPC     ;PRINT PREV STUFF AND SPACE OVER
500         AOS T,LINEPOS
501 BADCOL: CAIN T,-1       ;PATCH NUM OF BAD COL IN HERE WHEN NECESSARY
502         JRST LPTBC1
503         CAILE T,120.
504         JRST PILPT2
505 LPC1:   SUBI A,40
506         IDPB A,LPTIP
507         HRRZ A,LPTIP
508         CAIN A,LPTBE-1
509         MOVEI A,LPTBO
510         HRRM A,LPTIP
511         SOS LPTCC
512         CONSO OLPT,7
513         CONO OLPT,LPTCHN
514         POPJ P,
515
516 LPTBC1: PUSH P,A
517         MOVEI A,40
518         PUSHJ P,LPC1
519         POP P,A
520         JRST LPC1
521 \f
522 LPTRC:  CAIN A,10
523         JRST LPTBS      ;BACK SPACE
524         CAIN A,11
525         JRST LPTTAB
526         CAIN A,12
527         JRST LPTLF
528         CAIN A,14
529         JRST LPTFF
530         CAIN A,EOFCH
531         JRST LPTEOF
532         SETOM PCL
533         CAIE A,15
534         JRST LPTRCH
535 LPT.CR: SETZM LINEPOS
536         SETZM LPTBSF
537         JRST LPC1
538
539         PUSHJ P,LPTW2
540 LPTW1:  PUSHJ P,UFLS
541         JRST LPTIM
542
543 LPTW2:  CAMLE T,LPTCC
544         POPJ P,
545         MOVE T,LPTCC
546         CAIL T,<LPTBE-LPTBO>*2
547         JRST POPJ1
548         JRST POPJ3
549
550 LPTBS:  SKIPG LINEPOS
551         POPJ P, ;AT BEG OF LINE, IGNORE
552         SOS LINEPOS
553         SETOM LPTBSF
554         POPJ P,
555
556 LPTRCH: CAIN A,33
557         JRST LPTALT
558         MOVE B,A
559         MOVEI A,"^
560         PUSHJ P,LPTIM2
561         MOVEI A,100(B)
562         JRST LPTIM2
563
564 LPTALT: MOVEI A,"$
565         JRST LPTIM2
566
567 PILPT2: SOS LINEPOS
568         POPJ P,
569
570 LPTEOF: SKIPE OLUSR
571         POPJ P,
572         SUB P,[1,,1]    ;SYSTEM JOB HACKING  SO CLOBBER TO EOF
573         XCTR XRW,[CLEARM (C)]
574         POPJ P,
575
576 LPTCLS: SKIPLE OLUSE    ;LPT CLOSE, IS THIS THE ONLY CHANNEL LPT OPEN ON
577         JRST LPTCL3
578         SKIPN LINEPOS   ;THIS IS LAST CLOSE, CHECK TO SEE IF LOSER LEFT POSITION SCREWED
579         SKIPE LPTPPS
580         PUSHJ P,LPTCL2  ;INCREMENT TO NEXT PAGE
581         MOVEI T,SCRTPC
582         IORM T,SUPCOR   ;LOOK FOR TPL FILES TO PRINT
583         SETOM OLUSR     ;DO THIS FIRST SO DONT NEED CLOCK OFF LPT HACKED BY ONE JOB AT A TIME
584 LPTCL3: SOS OLUSE       ;DECREMENT USE COUNT
585         POPJ P,
586
587 LPTCL2: MOVEI A,100.
588         CAMLE A,LPTCC
589         POPJ P, ;NO ROOM FORGET IT
590         MOVEI A,15
591         PUSHJ P,LPTIM
592         MOVEI A,14
593         JRST LPTIM
594 \fLPTTAB:        PUSHJ P,LPTS
595         LDB J,[300,,LINEPOS]
596         JUMPE J,CPOPJ
597         JRST .-3
598
599 LPTS:   MOVEI A,40
600         JRST LPTIM2
601
602 LPTLF:  AOS J,LPTPPS    ;LINE FEED, INCREMENT LINE #
603         CAIL J,LPTLPP   ;END OF PAGE?
604 LPTFF:  SETZM LPTPPS    ;END OF PAGE CLEAR OUT PAGE POS (ENTRY FOR FF)
605         PUSHJ P,LPC
606         JRST LPC1
607
608 LPC:    MOVE J,LINEPOS  ;CR AND SPACE BACK OVER TO LINPOS
609         MOVE B,A
610         MOVEI A,15
611         AOSN PCL
612         SKIPE LINEPOS
613         PUSHJ P,LPT.CR
614         CLEARM LPTBSF   ;IN CASE WAS ALREADY AT BEG OF LINE
615         SOJL J,LPC2
616         PUSHJ P,LPTS
617         JRST .-2
618
619 LPC2:   MOVE A,B
620         POPJ P,
621
622 EBLK
623
624 LPTCC:  <LPTBE-LPTBO>*5-5
625 LINEPOS:        0       ;LINE POSITION # CHARS PRINTED THIS LINE BEFORE CURRENT
626 LPTPPS: 0       ;PAGE POSITION (# LINES PRINTED BEFORE CURRENT)
627
628 PCL:    0       ;INCREMENTED BY LF OR FF, SETOMED BY OHTER CONTROL CHARS
629         ;PROBABLY UNNECESSARY BUT NOT WORTH FLUSHING
630 LPTBSF: 0       ;-1 => BACKSPACES HAVE BEEN TYPED, CR AND SPACE OVER BEFORE MAKING INK
631
632 LPTIP:  700,,LPTBO-1
633 LPTOP:  700,,LPTBO-1
634
635 BBLK
636
637 LPTCN:  CAIN A,<15-40>&177
638         JRST LPTCR      ;CRR
639         CAIN A,<12-40>&177
640         MOVEI A,400     ;LINE FEED
641         CAIN A,<14-40>&177
642         MOVEI A,401     ;FORM FEED
643         CAIE A,177      ;SKIP IF LOOKS LIKE A LEFT ARROW
644         JRST LPTCN1     ;GO TO PRINT
645         HRRZ A,LPTOP    ;LOAD OUPUT POINTER
646         CAIE A,LPTBE-1  ;SKIP IF CURRENT PNTR = END OF BUFFER
647         JRST LPENT3     ;REAL LEFT ARR
648         MOVE A,[350700,,LPTBO]
649         MOVEM A,LPTOP
650         JRST LPENT2
651 ]
652 \f
653 IFN NLPTP,[
654 NLPT1:  SKIPGE C
655          SKIPA A,(C)
656           UMOVE A,(C)
657         MOVE B,NLPTIP
658         TLNN B,760000
659         JRST NLPTW      ;MAY NOT BE ROOM
660 NLPTW1: IDPB A,NLPTIP
661         MOVE T,NLPTIP
662         CAMN T,NLPTEP
663         SUBI T,LPTBSZ
664         HRRM T,NLPTIP
665         TLNE T,760000
666         POPJ P,
667         SOSGE NLPTBR
668         JRST 4,.
669 NLPTGO: CONO PI,LPTOFF
670         CONSO NLPT,7
671         CONO NLPT,100+LPTCHN    ;SET OUTPUT DONE
672         JRST LPTONJ
673
674 NLPTW:  SKIPG NLPTBR
675         PUSHJ P,UFLS
676         JRST NLPTW1
677
678 EBLK
679
680 NLPTIP: 010700,,NLPTBO-1
681 NLPTBO: BLOCK LPTBSZ
682 NLPTEP: 010700,,NLPTBO+LPTBSZ-1
683 NLPTPP: NLPTBO  ;OUTPUT PNTR (PI)
684 NLPTBR: LPTBSZ
685 NLPTBP: 004400,,NLPTBO-1        ;BLKT POINTER
686 NLPTBC: LPTBSZ  ;BLKT CNT = MIN(# WDS TILL END OF BUF,NLPTBR)
687 NLPTOP: NLPTBO  ;VALUE OF NLPTBP BEFORE BLKT CALL
688 NLFREE: -1      ;-1 => LPT IN USE RECENTLY.
689                 ;0 => NOT IN USE SINCE LAST VSCLK.
690                 ;1 => NOT SINCE NEXT-TO-LAST VSCLK.
691                 ;=>2 => LPT MOTOR NOW OFF.
692
693 BBLK
694 \f
695 BNLPTO: MOVE B,NLPTBP
696         MOVEM B,NLPTOP
697         PUSH P,[BNLPT1]
698         MOVE E,[444400,,1]
699         JSP B,BLKT
700         SETZ NLPTBP
701         NLPTBC
702         BNLPTG
703         BNLPT1
704         @J
705         SKIPG NLPTBR
706
707 BNLPT1: MOVE T,NLPTBP
708         MOVE W,T
709         CAMN T,[004400,,NLPTBO+LPTBSZ-1]
710         MOVE T,[004400,,NLPTBO-1]
711         MOVEM T,NLPTBP
712         EXCH T,NLPTOP
713         SUB T,W ;- # WORDS WRITTEN
714         ADDB T,NLPTBR   ;DECREASE ROOM
715         JUMPL T,[JRST 4,.]
716         JRST NLPTGO
717
718 BNLPTG: MOVE TT,NLPTBP
719         MOVE J,NLPTBR
720         MOVEI T,NLPTBO+LPTBSZ-1
721         SUBI T,(TT)     ;# WORDS UNTIL END OF BUFFER
722         CAMLE J,T
723         MOVE J,T
724         MOVEM J,NLPTBC
725         JRST POPJ1
726
727 NLPTCL: SKIPLE NLPTBR   ;ENOUGH ROOM?
728         PUSHJ P,NLPTO3
729         SETOM NLFREE
730         SETOM NLUSR
731         SETOM NLUSE
732         POPJ P,
733
734 NLPDCL: MOVSI H,760000
735         SKIPA A,[177]
736 NLPDC1: PUSHJ P,NLPTW1
737         TDNE H,NLPTIP
738         JRST NLPDC1
739         HRRZ A,NLPTIP
740         CAIN A,NLPTBO+LPTBSZ-1
741         MOVEI A,NLPTBO-1
742         HRLI A,004400
743         MOVEM A,NLPTBP
744         MOVNI A,(A)
745         ADDI A,NLPTBO+LPTBSZ-1
746         MOVE B,NLPTBR
747         CAMLE A,B
748         MOVE A,B
749         MOVEM A,NLPTBC
750         JRST NLPTCL
751 ]
752 \f
753 IFN NTYP\OLPTP\NLPTP\PLTP\340P\PDP6P\STKP\PTRP,[
754
755 EBLK
756 LPTA:   0
757 LPTB:   0
758 LPTACS: BLOCK 15
759
760 LPTBRK: 0
761 BBLK
762         MOVEM A,LPTA
763 IFN NTYP,[              ;A KLUDGE FOR THE PDP 11 ON DM
764         CONI NTY,A
765         TRNE A,7        ;NO PIA
766          TRNN A,200000  ;NO FLAG
767           CAIA
768            JRST NTYBRK  ;AHH, FLAG AND PIA
769 ]
770         
771 IFN OLPTP,[
772         CONSZ OLPT,7
773         CONSZ OLPT,10
774         JRST .+2
775         JRST LPENT1     ;LINE PRINTER
776 ]
777 IFN NLPTP,[
778         CONSZ NLPT,7
779         CONSO NLPT,100  ;DONE
780         JRST .+2
781         JRST NLPENT     ;NEW LINE PRINTER
782 ]
783 IFN 340P,[
784         CONI DIS,A
785         TRNN A,77
786         JRST LPTBR2
787         CONSZ DIS,7400
788         JUMPL A,SRECYC  ;SPECIAL DISPLAY CHNL
789 ]
790 LPTBR2: MOVEM B,LPTB
791 IFN PLTP,[
792         CONSZ PLT,SDS+PDS
793         JRST PLTBRK     ;PLOTTER
794 ]
795 IFN PTRP,[
796         CONSZ PTR,7
797         CONSO PTR,10
798         JRST .+2
799         JRST PTRBRK
800         CONSZ PTP,10
801         JRST PBRK1      ;PAPER TAPE PUNCH
802 ]
803 IFN PDP6P,[
804         CONSO DSDEV,7
805         JRST .+3
806         CONSZ DSDEV,10
807         JRST DSDBRK     ;INTERRUPT FROM OTHER PROCESSOR
808 ]
809 IFN STKP,[
810         CONSZ STK,7
811         CONSO STK,10
812         JRST .+2
813         JRST STKINT     ;STANFORD KEYBOARD
814 ]
815 LPBKRT: MOVE A,LPTA
816         JRST 12,@LPTBRK
817
818 LPTRT1: MOVS A,[C,,LPTACS]
819         BLT A,17
820 LPTRT3: MOVE B,LPTB
821         MOVE A,LPTA
822         JRST 12,@LPTBRK
823 ]         ;END IFN OLPTP\ ETC.
824 .ELSE [
825 EBLK
826 LPTBRK: 0
827 BBLK
828         JRST 4,.
829 ]
830 \f
831 IFN OLPTP,[
832 LPENT3: MOVEI A,177
833         JRST LPTCN1
834
835 LPTCR:  CONO OLPT,10+LPTCHN     ;PRINT LINE
836         AOS LPTCC
837         JRST LPBKRT
838
839 LPENT1: MOVEI A,<LPTBE-LPTBO>*5-5
840         CAMG A,LPTCC
841         JRST LPTSTP
842 LPENT2: ILDB A,LPTOP
843         TRNE A,100
844         JRST LPTCN
845 LPTCN1: DATAO OLPT,A    ;OUTPUT CHARACTER
846         AOS A,LPTCC
847         CONSZ OLPT,10
848         JRST LPBKRT
849         CAIGE A,<LPTBE-LPTBO>*5-5
850         JRST LPENT2
851 LPTSTP: CONO OLPT,0     ;CLEAR PIA
852         MOVEI A,SCRTPC
853         SKIPGE LPTUSR
854          IORM A,SUPCOR  ;LPT NOW IDLE
855         JRST LPBKRT
856
857 EBLK
858
859 LPTBO:  BLOCK LPTBSZ-1
860         -1
861 LPTBE:
862
863 BBLK
864
865 STALPT: MOVE E,LINEPOS
866         DPB E,[130700,,D]
867         DPB A,[60300,,D]        ;MODE
868         MOVE E,LPTCC
869         CAIG E,150.
870         TRO D,1_9.
871         CAIL E,30000
872         TRO D,1_<9.+1>
873         POPJ P,
874
875 LPTRS:  CONO PI,LPTOFF
876         MOVEI A,5*<LPTBE-LPTBO>-5
877         MOVEM A,LPTCC
878         MOVE A,[700,,LPTBO-1]
879         MOVEM A,LPTIP
880         MOVEM A,LPTOP
881         SETZM LINEPOS
882         CONO PI,LPTON
883         JRST LPTRS2
884
885 ]
886 \f
887 IFN NLPTP,[
888 NLPENT: MOVE A,NLPTBR
889         CAIN A,LPTBSZ
890         JRST NLPTST
891         CAIL A,LPTBSZ
892         JRST 4,.
893         DATAO NLPT,@NLPTPP
894         AOS A,NLPTPP
895         CAIN A,NLPTBO+LPTBSZ
896         MOVEI A,NLPTBO
897         MOVEM A,NLPTPP
898         AOS NLPTBR
899         JRST LPBKRT
900
901 NLPTST: CONO NLPT,200   ;CLEAR DONE AND PIA
902         MOVEI A,SCRTPC
903         SKIPGE NLUSR
904          IORM A,SUPCOR  ;LPT NOW IDLE
905         JRST LPBKRT
906
907 NLPTRS: CONO PI,LPTOFF
908         MOVE A,[010700,,NLPTBO-1]
909         MOVEM A,NLPTIP
910         MOVEI A,NLPTBO
911         MOVEM A,NLPTPP
912         MOVE A,[004400,,NLPTBO-1]
913         MOVEM A,NLPTBP
914         MOVEM A,NLPTOP
915         MOVEI A,LPTBSZ
916         MOVEM A,NLPTBR
917         MOVEM A,NLPTBC
918         CONO PI,LPTON
919         JRST NLPTO3
920 ]
921 \f
922 SUBTTL  STANFORD KEYBOARD
923
924 IFN STKP,{
925 ;3.4 => DON'T HANG ON IOT IF NO CHAR (RETURN -1 INSTEAD)
926 ;3.5 = 1 => DON'T DO CHAR CONVERSION
927 ;    = 0 => CONVERT ACCORDING TO OTHER BITS
928 ;3.6 = 1 => ITS MODE (CTRL DOES CTRL AND META IS 8TH BIT)
929 ;    = 0 => STANFORD MODE (400 = META, 200 = CTRL, AND ALL THE
930 ;           CHARS FROM 1-177 CAN BE GENERATED WITH TOP AND SHIFT.)
931 ;3.7 = 1 => IF 3.5 = 0, 3.6 = 1, THEN DON'T INPUT META BIT
932
933 STKO:   TLNE C,3        ;BLOCK OR OUTPUT
934         JRST OPNL12     ;MODE NOT AVAILABLE
935         CONO PI,CLKOFF
936         SKIPL STKUSR
937         JRST OPNL10     ;DEVICE NOT AVAILABLE
938         MOVEM U,STKUSR
939         AOSE STKUSE
940         JRST 4,.        ;CAN ONLY BE OPEN ONCE
941         CONO PI,CLKON
942         HRRZ A,UUAC(U)
943         MOVE A,CHNBIT(A)
944         ROT D,-2
945         DPB D,[220400,,A]
946         MOVEM A,STKMSK
947         MOVE A,STKBP
948         MOVEM A,STKIP
949         MOVEM A,STKOP
950         SETZM STKBC
951         DATAI STK,A     ;CLEAR DONE
952         CONO STK,LPTCHN
953         MOVEI A,STKDP
954         MOVEM A,(R)
955         JRST POPJ1
956
957 STKCLS: CONO STK,0      ;CLEAR PIA
958         SOSL STKUSE
959         JRST 4,.        ;CAN ONLY BE OPEN ONCE
960         SETOM STKUSR
961         POPJ P,
962
963 STKRS:  CONO PI,LPTOFF
964         MOVE A,STKBP
965         MOVEM A,STKIP
966         MOVEM A,STKOP
967         SETZM STKBC
968         JRST LPTONJ
969 \f
970 STKI:   MOVE TT,STKMSK
971         TLNE TT,1
972          JRST STKI1
973         PCLT
974         SKIPG STKBC
975          PUSHJ P,UFLS
976 STKI2:  ILDB A,STKOP
977         SOS STKBC
978         TLNN TT,2
979          JRST STKCV     ;DO CONVERSION
980 STKI3:  MOVE W,A
981         MOVE A,STKOP
982         CAMN A,STKEP
983         SUBI A,STKBL
984         HRRM A,STKOP
985         POPJ P,
986
987 STKI1:  SKIPLE STKBC
988         JRST STKI2
989         JRST STTYI3
990
991 STKINT: MOVEM B,LPTB
992         DATAI STK,B
993         ANDI B,1777     ;CURRENTLY 10 BITS
994         MOVE A,STKBC
995         CAIL A,STKBS
996         JRST LPTRT3     ;NO ROOM.  JUST IGNORE CHAR
997         IDPB B,STKIP
998         AOS STKBC
999         MOVE A,STKIP
1000         CAMN A,STKEP
1001         SUBI A,STKBL
1002         HRRM A,STKIP
1003         MOVE A,STKUSR
1004         HRRZ B,STKMSK
1005         AND B,MSKST2(A)
1006         IORM B,IFPIR(A)
1007         JRST LPTRT3
1008
1009 EBLK
1010 STKBL==40
1011 STKBS==STKBL*3
1012 STKIP:  001400,,STKIB-1
1013 STKIB:  BLOCK STKBL
1014 STKEP:  001400,,STKIB+STKBL-1
1015 STKBP:  001400,,STKIB-1
1016 STKOP:  001400,,STKIB-1
1017 STKBC:  0
1018 STKMSK: 0       ;BIT FOR CHANNEL STK OPEN ON
1019                 ;3.1 => DON'T HANG ON IOTS MODE
1020                 ;3.2 => DON'T CONVERT CHARS
1021                 ;3.3 => ITS MODE
1022                 ;3.4 => DON'T INPUT META IN ITS MODE
1023 BBLK
1024 \f
1025 STKCV:  LDB B,[000600,,A]       ;LOW 6 BITS
1026         CAIN B,33
1027         JRST STKCV1     ;33
1028         CAIL B,35
1029         CAILE B,47
1030         JRST .+2
1031         JRST STKCV2     ;35-47
1032         CAIL B,74
1033         CAILE B,77
1034         JRST .+2
1035         JRST STKCV3     ;74-77
1036         TRNE A,400
1037         JRST STKCVT     ;TOP IS ON
1038         CAIG B,32
1039         JRST STKCV4     ;0-32
1040         CAIN B,34       ;SKIP IF 50-73
1041         JRST STKCVB     ;34
1042 STKCVX: TLNN TT,4       ;SKIP ON ITS MODE
1043         JRST STKCVY     ;STANFORD MODE
1044         ANDI A,1000     ;META BIT
1045         LSH A,-2
1046         TLNN TT,10      ;SKIP ON DON'T INPUT META BIT
1047         IORI B,(A)
1048         MOVE A,B
1049         JRST STKI3
1050
1051 STKCVY: LDB D,[110100,,A]       ;META BIT
1052         LSH D,8         ;IN 400 POSITION
1053         ANDI A,200      ;CTRL BIT
1054         IORI A,(D)
1055         IORI A,(B)
1056         JRST STKI3
1057
1058 STKCV1: MOVEI B,15
1059         JRST STKCVX
1060
1061 STKCV2: MOVEI Q,-35(B)  ;35-47 (-35)
1062         IDIVI Q,5
1063         LDB B,STKBPT(J)
1064         JRST STKCVX
1065
1066 STKCV3: CAIE B,74
1067         JRST STKCV5     ;75-77
1068         MOVEI B,177
1069         JRST STKCVX
1070
1071 STKCV5: MOVEI B,33
1072         JRST STKCVX
1073 \f
1074 STKCVT: CAIG B,32       ;TOP IS ON
1075         JRST STKCT1     ;0-32
1076         CAIN B,34
1077         JRST STKCT2     ;34
1078         MOVEI Q,-50(B)  ;50-73 (-50)
1079         MOVE D,B
1080         IDIVI Q,5
1081         LDB B,STKBP1(J)
1082         TRNE A,200      ;SKIP IF CTRL IS OFF
1083         TLNN TT,4       ;SKIP IF ITS MODE
1084         JRST STKCVX
1085         CAIL D,52
1086         CAILE D,72
1087         TRZ B,100       ;50,51,73
1088         JRST STKCVX
1089
1090 STKCT1: MOVE Q,B        ;0-32 TOP ON
1091         MOVE D,B
1092         IDIVI Q,5
1093         LDB B,STKBP2(J)
1094         TRNE A,200      ;SKIP IF CTRL IS OFF
1095         TLNN TT,4       ;SKIP IF ITS MODE
1096         JRST STKCVX
1097         CAIN D,12
1098         TRZ B,100
1099         JRST STKCVX
1100
1101 STKCT2: MOVEI B,16
1102         JRST STKCVX
1103
1104 STKCV4: TLNN TT,4       ;SKIP IF ITS MODE
1105         JRST STKCV6
1106         TRNE A,200
1107         JRST STKCVX     ;ITS, CTRL
1108 STKCV6: TRO B,100
1109         TRNN A,100
1110         TRO B,40        ;SHIFT WAS OFF
1111         JRST STKCVX
1112
1113 STKCVB: MOVEI B,134
1114         TRNE A,200      ;SKIP IF CTRL IS OFF
1115         TLNN TT,4       ;SKIP IF ITS MODE
1116         JRST STKCVX
1117         TRZ B,100
1118         JRST STKCVX
1119 \f
1120 DEFINE  STKM A,B,C,D,E
1121         A_29.+B_22.+C_15.+D_8+E_1
1122 TERMIN
1123
1124 DEFINE  STKM1 TBL
1125         350700,,TBL(Q)
1126         260700,,TBL(Q)
1127         170700,,TBL(Q)
1128         100700,,TBL(Q)
1129         010700,,TBL(Q)
1130 TERMIN
1131
1132 STKBPT: STKM1 STKTBL
1133 STKTBL: STKM 12,0,0,40,0
1134         STKM 33,0,0,11,14
1135         STKM 13,0,0,0,0
1136
1137 STKBP1: STKM1 STKTB1
1138 STKTB1: STKM 133,135,26,174,41
1139         STKM 5,77,17,60,36
1140         STKM 22,23,20,21,44
1141         STKM 45,32,30,1,136
1142
1143 STKBP2: STKM1 STKTB2
1144 STKTB2: STKM 0,34,7,6,74
1145         STKM 100,76,33,75,47
1146         STKM 137,31,27,25,24
1147         STKM 173,176,4,43,35
1148         STKM 46,140,10,37,3
1149         STKM 42,2,0,0,0
1150 };IFN STKP
1151 \f
1152 SUBTTL  INTERFACE (?) TO DM PDP11 ON NTY (REALLY WANT A CAIOS)
1153 IFN NTYP,[
1154 IFN TK10P,      .ERR    YOU REALLY WILL LOSE WITH BOTH TTY AND 11 ON NTY
1155 NTYOPN: PUSHJ P,NTYOP1  ;SET UP OPEN
1156          POPJ P,        ;OPEN LOST?
1157         SKIPE NTYUSE    ;IF THIS IS FIRST OPEN, DO SOME INITIALIZING
1158          JRST POPJ1
1159         CONO NTY,0      ;STOP INTS
1160         SETOM NTYOAC
1161         MOVE A,[NTYIOI,,NTYIOR]
1162         BLT A,NTYORM    ;INITIALIZE ALL THE POINTERS AND COUNTERS
1163         CONO NTY,620000+NTYCHN
1164         JRST POPJ1
1165
1166 NTYOP1: ROT D,1         ;MODE BACK, TO GET INPUT & OUTPUT
1167         JSP Q,STDOPN
1168          3,,NTYUSR
1169          NTYIT,,NTYOT
1170          0,,0           ;NTYBIT,,NTYBOT
1171
1172 NTYRS==CPOPJ
1173
1174 NTYCLS: SOSL NTYUSE     ;-1 MEANS FREE (USE STDCLS?)
1175          POPJ P,
1176         SETOM NTYUSE
1177         SETOM NTYUSR
1178         POPJ P,
1179
1180 ;MAIN PROGRAM ROUTINES FOR IOT/SIOT ...
1181
1182 NTYBI==IOCR10
1183 NTYBO==IOCR10
1184
1185 NTYTO::
1186 NTYOPT: PCLT                    ;PUT OUTPUT INTO BUFFER
1187         SKIPG C
1188          SKIPA A,(C)
1189           UMOVE A,(C)           ;FETCH THE USERS BYTE
1190         SKIPG NTYORM            ;WAIT FOR ROOM
1191          PUSHJ P,UFLS
1192         IDPB A,NTYOIP
1193         SOSGE A,NTYORM
1194          JRST 4,.               ;WENT BELOW ZRO?
1195         AOSN NTYOAC
1196          CONO NTY,10+NTYCHN     ;NOT ACTIVE, START PI LEVEL
1197         AOSGE NTYOIR
1198          POPJ P,
1199         MOVE A,[NTYOII,,NTYOIR] ;RING AROUND THE ROSY
1200         BLT A,NTYOIP
1201         POPJ P,
1202 NTYTI::
1203 NTYIGT: MOVEI T,NTYIBS*4
1204         PCLT
1205         CAMG T,NTYIRM
1206          PUSHJ P,UFLS           ;WAIT UNTIL A BYTE COMES IN
1207         ILDB W,NTYIOP
1208         AOS NTYIRM              ;NOW MORE ROOM
1209         AOSGE NTYIOR            ;RING?
1210          POPJ P,
1211         MOVE B,[NTYIOI,,NTYIOR] ;REDO POINTERS
1212         BLT B,NTYIOP
1213         POPJ P,
1214 \f
1215 ;INTERRUPT ROUTINES
1216
1217 NTYBRK: TRC A,2000              ;DEVICE #
1218         TRNE A,7000
1219          JRST NTYSEL            ;STOPPED ON OTHER DEVICE
1220         TRNE A,40
1221          JRST NTYIPT            ;INPUT
1222         TRNE A,20
1223          JRST NTYOGT            ;OUTPUT
1224 NTYRET: CONO NTY,620000+NTYCHN  ;RESTART
1225         JRST LPBKRT
1226
1227 NTYSEL: TRC A,2000              ;HAVE TO KNOCK DOWN SOME OTHER FLAG
1228         ANDI A,7000
1229         LSH A,3
1230         CONO NTY,400000+NTYCHN(A)
1231         CONSZ NTY,40
1232          DATAI NTY,A            ;CLEAR INPUT
1233         CONSZ NTY,20
1234          CONO NTY,20+NTYCHN     ;CLEAR OUTPUT
1235         AOS NTYERR
1236         JRST NTYRET
1237
1238 NTYOGT: MOVEI A,NTYOBS*4
1239         CAMG A,NTYORM
1240          JRST  [SETOM NTYOAC
1241                 CONO NTY,20+NTYCHN
1242                 JRST NTYRET]
1243         ILDB A,NTYOOP
1244         AOS NTYORM
1245         DATAO NTY,A
1246         AOSGE NTYOOR
1247          JRST NTYRET
1248         MOVE A,[NTYOOI,,NTYOOR]
1249         BLT A,NTYOOP            ;ZAP THE POINTER AND COUNT (RING BUF)
1250         JRST NTYRET
1251
1252 NTYIPT: SOSG NTYIRM
1253          CONO NTY,100+NTYCHN    ;IF HDWE NOT IN, BUFFER WILL BE CLOBBERED
1254                                 ;BUT ALSO, THE COUNT WILL BE NEG!!!
1255         DATAI NTY,A
1256         IDPB A,NTYIIP
1257         AOSGE NTYIIR
1258          JRST NTYRET
1259         MOVE A,[NTYIII,,NTYIIR]
1260         BLT A,NTYIIP            ;RING THE BUFFER POINTERS
1261         JRST NTYRET
1262
1263 ;DATA AREAS FOR THE NTY INTERFACE TO DM PDP 11
1264
1265 NTYIBS==1000
1266 NTYOBS==100
1267
1268 NTYIOI: -NTYIBS*4       ;STUFF TO INITIALIZE INPUT SIDE
1269         041000,,NTYIBF-1
1270 NTYIII: -NTYIBS*4
1271         041000,,NTYIBF-1
1272         NTYIBS*4
1273
1274 NTYOOI: -NTYOBS*4       ;INITIALIZES OUTPUT SIDE
1275         041000,,NTYOBF-1
1276 NTYOII: -NTYOBS*4
1277         041000,,NTYOBF-1
1278         NTYOBS*4
1279
1280 EBLK
1281
1282 NTYIOR: -NTYIBS*4       ;RING COUNTER, INPUT BUFFER, OUTPUT PART
1283 NTYIOP: 041000,,NTYIBF-1 ;BYTE POINTER, "   "
1284 NTYIIR: -NTYIBS*4       ;RING CTR, INPUT BUFFER, INPUT PART
1285 NTYIIP: 041000,,NTYIBF-1 ;BYTE POINTER, "   "
1286 NTYIRM: NTYIBS*4        ;ROOM EMPTY IN IN BUFFER
1287
1288 NTYOOR: -NTYOBS*4       ;RING CTR, OUTPUT BUFF, OUT PART
1289 NTYOOP: 041000,,NTYOBF-1 ; BYT PTR,  " "
1290 NTYOIR: -NTYOBS*4       ;RING CTR, OUT BUFF, IN PART
1291 NTYOIP: 041000,,NTYOBF-1 ;BYT PTR, "  "
1292 NTYORM: NTYOBS*4        ;ROOM IN THE OUTPUT BUFFER
1293
1294 NTYIBF: BLOCK NTYIBS    ;INPUT BUFFER
1295 NTYOBF: BLOCK NTYOBS    ;OUTPUT BUFFER
1296
1297 NTYOAC: -1              ;FLAG, OUTPUT ACTIVE UNLESS -1
1298 NTYUSR: -1
1299 NTYUSE: -1
1300
1301 NTYERR: 0
1302
1303         BBLK
1304 ];NTYP
1305 \f
1306 SUBTTL  PDP-10 TO PDP-11 INTERFACE AND XGP
1307
1308 IFN TEN11P,[
1309 EBLK
1310 T11MP:  BLOCK 256.      ;CONTENTS OF TEN11 MAP, -1 => CONFLICT PAGE
1311 BBLK
1312                         ;ELSE 0 => AVAIL
1313                         ;4.9=1 => CONTENTS OF MAP WD EXCEPT 4.7-4.3 => USE COUNT
1314 IFN XGP,XGPTP==376      ;PAGE NUMBER IN 10-11 RESERVED FOR CLK LEVEL XGP HACKS
1315
1316 ;PLACE WD IN A IN AVAIL 10-11 MAP ENTRY (RETURN IN RH B)
1317 T11AD:  SKIPE TEN11F
1318         POPJ P,
1319         MOVE C,A
1320         JSP Q,T11FND    ;SKIP UNLESS NO MAP ENTRIES AVAIL
1321         JRST T11A1      ;WD ALREADY IN PAGE
1322         MOVEI C,0       ;FIND FREE PAGE
1323         JSP Q,T11FND
1324         JRST T11A2
1325         POPJ P, ;NO FREE PGS AVAIL
1326
1327 T11A1:  LDB E,[350500,,T11MP(B)]
1328         CAIN E,37
1329         JRST T11FN2     ;USAGE COUNT MAX FOR THAT ENTRY
1330         AOS E
1331         DPB E,[350500,,T11MP(B)]
1332         JRST POPJ1
1333
1334
1335 T11A2:  MOVEM A,T11MP(B)
1336         MOVEM A,400000+T11CP*2000(B)    ;STORE IN HARDWARE
1337         JRST POPJ1
1338
1339 T11FND: MOVSI B,-256.
1340 T11FN1:
1341 IFN XGP,[       CAMN B,[-256.+XGPTP,,XGPTP]     ;DON'T ALLOCATE SPECIAL XGP ENTRY TO OTHER USERS
1342         JRST T11FN2
1343 ]
1344         MOVE E,T11MP(B)
1345         TLZ E,174000    ;USE COUNT BITS
1346         CAMN E,C
1347         JRST (Q)        ;FOUND IT
1348 T11FN2: AOBJN B,T11FN1
1349         JRST 1(Q)       ;CANT FIND IT
1350
1351
1352 ;DELETE REF TO T11 PAGE IN B
1353 T11DL:  SKIPE TEN11F
1354         POPJ P,
1355         MOVE E,T11MP(B)
1356         AOJE E,CPOPJ    ;REALLY CONFLICT PAGE
1357         LDB E,[350500,,T11MP(B)]
1358         SOJL E,T11DL1   ;DELETING LAST REF TO PAGE?
1359         DPB E,[350500,,T11MP(B)]
1360         POPJ P,
1361
1362 T11DL1: CLEARM T11MP(B)
1363         CLEARM 400000+T11CP*2000(B)
1364         POPJ P,
1365 ]
1366 \f
1367 IFN TEN11P,[
1368
1369 ;.CALL ADR
1370 ;       LOSE
1371 ;       WIN
1372 ;ADR/   SETZ
1373 ;       SIXBIT /T11MP/
1374 ;       ARG 1 VIRT PAGE #
1375 ;       ARG 2 DESIRED T11 MAP WORD
1376
1377 NT11M:  TDNE A,[-400]   ;TEMP? TEN11 CALL A HAS USER PG
1378          JRST OPNL33    ;INVALID ARG - BAD USER PAGE #.
1379         SKIPE TEN11F
1380          JRST OPNL7     ;DEVICE NOT READY.
1381         PUSHJ P,UPLC
1382         MOVE W,A
1383         JUMPGE B,OPNL33
1384         TLZ B,174000    ;DONT ALLOW ANYTHING IN USAGE COUNT BITS
1385         MOVE D,B
1386         LDB E,Q
1387         JUMPE E,NT11M1  ;PAGE MUST BE FREE OR ABS, OTHERWISE ERROR
1388         CAIE E,-1
1389          JRST OPNL13    ;FILE ALREADY EXISTS
1390         LDB B,T
1391         ANDI B,PMRCM
1392         LDB E,[.BP <PMRCM-377> B]       ;GET MOBY #
1393         ANDI B,377
1394         CAIN E,T11CPA_-18.
1395         PUSHJ P,T11DL
1396         MOVEI B,0
1397         DPB B,Q
1398         DPB B,T
1399 NT11M1: MOVE R,Q
1400         MOVE A,D
1401         PUSHJ P,T11AD
1402          JRST OPNL37    ;NO CORE AVAILABLE.
1403         ADDI B,200000+<<T11CPA_-18.>_8> ;ADDRESS CORRECT MOBY
1404         TLNE A,200000
1405         TRO B,400000    ;WRITE PERMISSION
1406         DPB B,T
1407         MOVEI C,-1
1408         DPB C,R
1409         LSH W,10.
1410         ADDI W,2000
1411         CAMLE W,HUSRAD(U)
1412         MOVEM W,HUSRAD(U)
1413         JRST POPJ1
1414 ]
1415 .ELSE NT11M:    JRST OPNL1      ;NO SUCH DEVICE.
1416 \fIFN XGP,[
1417 ;CLOCK LEVEL XGP CODE FOR FILLING IMAGE MODE BUFFERS
1418 ;ASSUMES XGP11P IS POINTER TO FIRST 11 RING NODE
1419 ;AND THAT THE 11 BUFFER RING STRUCTURE IS:
1420
1421 ;       POINTER TO NEXT NODE OF BUFFER
1422 ;       USE WORD        (0=> EMPTY)
1423 ;       POINTER TO BUFFER (ASSUMED TO BE 1K 10 STYLE, 2K 11 STYLE)
1424
1425 ;
1426 ;THE NODES AND THE BUFFERS MUST BEGIN ON EVEN PDP-11 WORDS
1427 ;I.E. 11 ADDRESSES ENDING WITH TWO ZEROES.
1428
1429 ;THIS CODE USES A SPECIAL 10-11 INTERFACE ENTRY
1430 ;NAMELY, XGPTP, AND THREE EXEC PAGES, XGPC WHICH POINTS TO
1431 ;THE LOW 2K OF PDP-11 CORE, USED FOR THE RING NODE POINTERS
1432 ;XGPUB WHICH POINTS TO THE CURRENTLY HACKED USER PAGE
1433 ;AND XGPB WHICH POINTS PERMANENTLY TO THE 10-11 PAGE CORRESPONDING
1434 ;TO XGPTP
1435
1436 XGP11==1        ;PDP-11 RUNNING XGP
1437 XGPCA==XGPC*2000+400000 ;EXEC ADR OF LOW PDP-11 CORE
1438 XGPBA==XGPB*2000+400000 ;EXEC ADR OF BUFFER IN PDP-11
1439 XGPUBA==XGPUB*2000+400000       ;EXEC ADR OF CURRENT PAGE IN USER'S MAP
1440 XGNTPG==117.    ;MAX # TIED DOWN PAGES (WOULD YOU BELIEVE...)
1441 X11BFP==102     ;LOC OF XGP BUFF HEAD IN 11 (PDP11 ADR 410)
1442
1443 XGPCLK: PUSH P,A
1444         PUSH P,B
1445         MOVE A,XGPTM1   ;TIME FIRST PAGE LOCKED IN CORE
1446         ADDI A,30.*60.  ;1 MINUTE
1447         CAMGE A,TIME    ;WIN?
1448         JSP Q,XGPFLS    ;LOSE...
1449         SKIPL XGPINI    ;DON'T HACK UNTIL MAIN PGM HAS PAGES TIED DOWN
1450         JRST POPBAJ
1451         SPM XGPSPM      ;SAVE OLD MAP
1452 XGPC1:  MOVE A,XGP11P   ;GET POINTER TO FIRST PDP-11 BUFFER
1453         MOVE A,XGPCA(A) ;GET CONTENTS FROM PDP-11
1454         LDB B,[242000,,A]       ;GET NEXT RING POINTER
1455         LDB A,[042000,,A]       ;GET USE WORD
1456         JUMPN A,POPBAJ  ;BUFFERS FULL
1457         TRNE B,3
1458         JSP Q,XGPFLS    ;NEW BUF POINTER NOT ON EVEN WD BNDY
1459         LSH B,-2        ;CONVERT TO 10 ADDRESS
1460         SKIPE B
1461         CAIL B,2000     ;IS IT WITHIN CONTROL PAGE?
1462         JSP Q,XGPFLS    ;FLUSH
1463         EXCH B,XGP11P   ;SETUP NEXT POINTER, GET BACK OLD ONE
1464         MOVEM B,XGPOB   ;SAVE OLD POINTER FOR HACKING BUFF FULL
1465         MOVE B,XGPCA+1(B)       ;GET POINTER TO 11 BUFFER
1466         LDB B,[242000,,B]
1467         TRNE B,3
1468         JSP Q,XGPFLS
1469         LSH B,8         ;SETUP 10-11 ENTRY
1470         IOR B,[600000+<XGP11_8>,,1777]  ;R/W, PROT INFINITE
1471         MOVEM B,400000+2000*T11CP+XGPTP ;GRONK INTO 10-11 INTERFACE
1472         MOVEM B,T11MP+XGPTP     ;FOR DEBUGGING ONLY
1473         ILDB A,XGP10P   ;GET POINTER TO NEXT 10 PAGE
1474         CAIL A,TSYSM    ;LOSE
1475         JRST 4,.        ;MAIN PGM HAS POINTER TO NXM
1476         JUMPE A,XGPFIN  ;HERE WE ARE DONE, I HOPE.  DEUS GRATIUS
1477         MOVE B,A        ;SAVE MMSWP ENTRY # TO CLEAR OUT TIE DOWN
1478         IORI A,600000   ;R/W
1479         DPB A,[.XGPUB+EXEUMP]   ;GRONK EXEC MAP
1480         LPMR XGPSPM     ;RESET ASSOC REGS
1481         MOVE A,[XGPUBA,,XGPBA]
1482         BLT A,XGPBA+1777        ;DO THE STUFF!
1483         MOVSI A,-1
1484         ADDM A,MMSWP(B) ;CLEAR TIE DOWN, PHEW!
1485         SKIPGE MMSWP(B) ;STOP BUGGY LOSSAGE
1486         JRST 4,.
1487         PUSHJ P,XGPBIT  ;GET TABLE INFO
1488         TDNN A,XGPMTB(B)
1489         JRST 4,.        ;UNTIED PAGE NOT TIED DOWN
1490         ANDCAM A,XGPMTB(B)      ;CLEAR THE BIT
1491         MOVEI A,0
1492         DPB A,[.XGPUB+EXEUMP]   ;CLEAR EXEC PAGE MAP
1493         MOVE A,XGPOB    ;GET OLD RING PTR
1494         MOVEI B,30      ;CHANGE RH ONLY TO A 1
1495         MOVEM B,XGPCA(A)        ;SET BUFFER FULL
1496         JRST XGPC1      ;LOOP TO GET A NEW BUFFER
1497
1498
1499
1500 XGPFIN: SETZM XGPINI
1501         JSP Q,XGPFLS
1502
1503 ;MMSWP ENTRY IN B,
1504 ;RETURNS BIT IN A
1505 ;WD OF TABLE IN B
1506 XGPBIT: MOVE A,B
1507         IDIVI A,36.
1508         MOVNS B
1509         PUSH P,A
1510         MOVSI A,400000
1511         LSH A,(B)
1512         JRST POPBJ
1513
1514 ;CALLED FROM CORE ALLOCATOR WHEN FLUSHING PAGES
1515 ;OF A JOB WHICH HAVE LH OF MMSWP NON ZERO.
1516
1517 XGPCFL: CAME U,XGPUSR   ;ARE WE CONCERNED?
1518         POPJ P, ;NOPE
1519         PUSH P,A
1520         PUSH P,B
1521         MOVE B,TT       ;B GETS MMSWP INDEX
1522         PUSHJ P,XGPBIT  ;GET INDEXES INTO XGPMTB
1523         TRNN A,XGPMTB(B)        ;IS THIS A PAGE BEING HACKED BY XGP?
1524         JRST POPBAJ     ;NOPE
1525                         ;FALLS THRU
1526
1527 ;XGPFLS IS CALLED AT THE CLOCK LEVEL IF ANYTHING GOES WRONG WITH ANYTING
1528 ;AND AT THE END OF THE RUN.
1529 ;IT FREES THE WORLD, AND FLUSHES THE XGP USER
1530
1531 XGPFLS: MOVEM Q,XFLSPC
1532         SETOM XGPUSR    ;FLUSHES XGP, ALSO PREVENTS TIMING ERRORS IF XGPFLS CALLED
1533                         ;AT CLOCK LEVEL, SINCE IT WON'T BE ANY MORE
1534         PUSH P,C
1535         PUSH P,D
1536         CLEARB A,B
1537         MOVSI C,400000
1538         MOVSI D,-1
1539 XGPFL1: TDNN C,XGPMTB(B)
1540         JRST XGPFL3     ;THIS PAGE NOT HACKED
1541         ADDM D,MMSWP(A) ;UNTIE THIS PAGE
1542         SKIPGE MMSWP(A)
1543         JRST 4,.
1544         ANDCAM C,XGPMTB(B)      ;AND FLUSH THIS BIT
1545 XGPFL3: ROT C,-1        ;MOVE ON TO NEXT BIT
1546         SKIPGE C        ;BEG OF NEW WORD?
1547         AOS B   ;YES, AOS XGPMTB INDEX
1548         CAIGE A,TSYSM-1 ;FINISHED WITH ALL OF MMSWP ENTRIES?
1549 XGPFL2: AOJA A,XGPFL1   ;NOPE, LOOP BACK FOR MORE FUN
1550         POP P,D
1551         POP P,C
1552         JRST POPBAJ
1553
1554
1555 ;MAIN PROGRAM BUFFER TIE DOWN ROUTINES
1556 ;.CALL FOO
1557 ;FOO:   SETZ
1558 ;       SIXBIT /XGPIM/
1559 ;       SETZ POINTER TO [# OF PAGES,,FIRST PAGE]
1560
1561 NXGPIM: XCTR XRW,[MOVES B,(A)]  ;GET POINTER, AND CHECK FOR WRITE
1562         JUMPL B,XCONT   ;CONTINUING A PREVIOUS CALL
1563         SKIPN TEN11F
1564         SKIPL XGPUSR
1565         POPJ P,         ;LOSE
1566         MOVEI C,X11BFP  ;BUFF HEAD IN 11 DEFINED AS 1000
1567         MOVEM C,XGP11P
1568         MOVE C,XGPCA(C) ;GET BUFF POINTER FROM 11
1569         JUMPE C,CPOPJ   ;LOSE, THE 10-11 IS LOSING OR PGM LOSING
1570         MOVE C,TIME
1571         MOVEM C,XGPTM1  ;SET UP TIMEOUT ON PAGE LOCK
1572         SETZM XGPINI    ;SAY NOT ACTIVE
1573         MOVEM U,XGPUSR  ;AND BEING LOADED
1574         SETZM XGPTAB
1575         MOVE C,[XGPTAB,,XGPTAB+1]
1576         BLT C,XGPTAB+LXTAB-1    ;CLEAR OUT OLD PAGE BUF TABLE
1577         MOVE C,[441400,,XGPTAB]
1578         MOVEM C,XGP10P  ;SETUP BYTE POINTER TO PAGE LIST
1579 XTIE:   TLO B,400000
1580         UMOVEM B,(A)
1581         HRRZ C,B
1582         HRRZ E,B        ;C,E GET PAGE # NEXT TO BE TIED DOWN
1583         HLRZ D,B        ;D GETS COUNT OF PAGES LEFT
1584         LSH C,10.
1585         UMOVE B,20(C)   ;BRING IN THAT LOSING PAGE
1586         PUSHJ P,SWTL
1587         CIRPSW
1588         TRZ D,400000
1589         CAIL D,XGNTPG   ;MAX # PAGES TIED DOWN
1590         JRST XLOSE
1591         EXCH E,A
1592         CAIL A,400
1593         JRST XLOSE      ;PAGE OUT OF REASONABLE RANGE
1594         PUSH P,A
1595         PUSHJ P,UPLC    ;FIND OUT PAGE MAP ENTRY
1596         LDB B,Q
1597         CAIN B,-1
1598         JRST XLOSE1
1599         LDB B,T
1600         ANDI B,PMRCM
1601         CAIL B,TSYSM
1602         JRST 4,.
1603         PUSHJ P,XGPBIT
1604         CONO PI,CLKOFF  ;CLOCK OFF TO PREVENT PAGES 1/2 TIED DOWN
1605         TDNN A,XGPMTB(B)        ;WE HAVE HIT THIS PAGE ALREADY
1606         CAME U,XGPUSR   ;TIMEOUT OR OTHER GROSS LOSSAGE
1607         JRST XLOSE1     ;DON'T TIE THIS ONE DOWN, AND FLUSH ALL THE REST
1608         IORM A,XGPMTB(B)        ;SET BIT IN XGP MEM TABLE
1609         LDB B,T
1610         ANDI B,PMRCM
1611         IDPB B,XGP10P   ;PUT IN BUFFER LIST
1612         MOVSI A,1
1613         ADDM A,MMSWP(B) ;TIE IT DOWN GOOD (FOR ALL YOU BONDAGE FREAKS)
1614         CONO PI,CLKON
1615         PUSHJ P,LSWPOP  ;CIRPSW
1616         POP P,B
1617         SOJLE D,XBFIN   ;WE ARE DONE TYING START XGPING
1618         AOS B
1619         HRL B,D
1620         MOVE A,E        ;NOW, LOOP FOR MORE CRUFTIES, OR
1621 XCONT:  CAME U,XGPUSR   ;REENTER HERE IF THE MAD SWAPPER HAD US SWAPPED OUT
1622         POPJ P,
1623         JRST XTIE
1624
1625 XLOSE1: CONO PI,CLKON   ;CLEANUP AFTER LOSSAGE
1626         SUB P,[1,,1]
1627 XLOSE:  PUSHJ P,LSWPOP  ;CIRPSW
1628         PUSH P,A
1629         PUSH P,B
1630         JSP Q,XGPFLS    ;FLUSH THE LAST VESTIGE OF THIS ABORTIVE ATTEMPT TO CAUSE WINNAGE
1631
1632 XBFIN:  SETOM XGPINI    ;THE WORST IS OVER, SIT BACK AND RELAX
1633         MOVE A,[441400,,XGPTAB]
1634         MOVEM A,XGP10P
1635         JRST POPJ1      ;TELL HIM HE MAY EVEN WIN SOMEDAY
1636
1637 XPLO:   CONO PI,CLKOFF
1638         PUSHJ P,XPLST
1639         JRST XPLO1
1640         CONO PI,CLKOFF
1641         PUSHJ P,XPLWT
1642         PUSHJ P,UFLS
1643         MOVE T,XPLU
1644         SKIPE IOCHNM(T)
1645         JRST XPLO2
1646         MOVE T,SV40(T)
1647         CAME T,[.SLEEP 17,]
1648 XPLO2:  JRST OPNL10
1649         CONO PI,CLKON
1650         MOVNI A,1
1651         MOVSI B,(SIXBIT /XPL/)
1652         PUSHJ P,CLIO
1653         POPJ P,
1654         MOVE A,UTMPTR(U)
1655         MOVE B,XPLU
1656         MOVEM A,UTMPTR(B)
1657         JRST POPJ1
1658
1659 XPLO1:  PUSHJ P,UDELAY
1660         JRST XPLO
1661
1662 XPLST:  SKIPL T,XPLU
1663         PUSHJ P,XPLIN
1664         JRST POPJ1
1665         HRROI A,XPL
1666         CONO PI,UTCOFF
1667         PUSHJ P,NUJBST
1668         JRST UTCONJ
1669         JRST UTCOJ1
1670
1671 XPLWT:  SKIPGE T,XPLU
1672         POPJ P,
1673         PUSHJ P,XPLIN
1674         SKIPGE IOCHNM(T)
1675         JRST POPJ1
1676         MOVS Q,SV40(T)
1677         CAIN Q,(.SLEEP 17,)
1678         AOS (P)
1679         POPJ P,
1680
1681 XPLIN:  PUSH P,U
1682         CAML T,USRHI
1683         JRST XPLIN1
1684         HLRE U,UNAME(T)
1685         AOJN U,XPLIN1
1686         MOVSI U,(SIXBIT /XPL/)
1687         CAME U,JNAME(T)
1688 XPLIN1: AOS -1(P)
1689         POP P,U
1690         POPJ P,
1691
1692 ;VARIABLES AREA
1693 EBLK
1694
1695 XGPTAB: BLOCK XGNTPG/3+1        ;PAGE #'S OF XGP BUFS IN 12 BIT BYTES
1696 LXTAB==.-XGPTAB
1697 XGP11P: 0       ;POINTER TO 11 RING STRUCTURE (10 STYLE ADR INTO XGPC)
1698 XGPOB:  0       ;TEMP FOR OLD XGP11P
1699 XGP10P: 0       ;BYTE POINTER INTO XGPTAB FOR GETTING 10 BUFFERS
1700 XGPMTB: BLOCK TSYSM/36.+1       ;BIT TABLE FOR KEEPING
1701                                 ;TRACK OF AOSES OF MMSWP
1702 XGPUSR: -1      ;XGP USER INDEX, -1 IF NONE
1703 XGPINI: 0       ;IF -1, SIGNAL TO CLK CODE THAT ALL BUFFERS ARE NOW TIED  DOWN.
1704 XFLSPC: 0       ;PC OF LAST CALL TO XGPFLS
1705 XGPSPM: BLOCK 8 ;STORAGE FOR PAGE MAP ENTRIES
1706 XGPTM1: 0       ;TIME FIRST PAGE TIED DOWN
1707 XPL:    SIXBIT /XPL/    ;FILE + JNAME OF XPL INTERPRETER
1708 XPLU:   0       ;INDEX OF LOADED XPL
1709
1710 BBLK
1711 ]
1712
1713 IFE XGP,NXGPIM: JRST OPNL1      ;NO SUCH DEVICE
1714 \f
1715 SUBTTL  ROBOT ARM ROUTINES
1716
1717 IFN ARMP,[
1718 NARMCH==11.
1719
1720 AARMOVE:        UMOVE A,(J)
1721         JUMPGE A,CPOPJ
1722         CAMGE A,[-100,,]
1723         JRST ILUUO
1724         CONO PI,CLKOFF
1725         CAMN U,ARMUSR
1726         JRST AARM1A
1727         SKIPL ARMUSR
1728         JRST ILUUO
1729 ;       CONO TIPDEV,0
1730 ;       CONI TIPDEV,C
1731 ;       JUMPE C,ILUUO   ;DONT ALLOW ARM TO RUN WITHOUT TIPBRK
1732 ;       DATAI TIPDEV,C
1733 ;       TRNN C,1
1734 ;       JRST ILUUO      ;WRIST DETENT OFF NORMAL- BARF
1735 ;       CONO TIPDEV,TIPBCH
1736         MOVEM U,ARMUSR
1737 AARM1A: CONO PI,CLKON
1738         MOVSI B,-NARMCH
1739 AARM1:  SETZM ARMDF(B)
1740         SKIPN ARMF
1741         SETOM DESTIN(B) ;NOT PREV IN USE, INITIALIZE
1742         AOBJN B,AARM1
1743         SKIPN ARMF
1744         SETOM OMPXIF
1745         SKIPN ARMF
1746         PUSHJ P,IMXON   ;START IMX
1747         SETOM ARMF      ;ARM NOW IN USE
1748         SETOM DLSRCH
1749 ARML:   UMOVE E,(A)     ;PICK UP COMM
1750         LDB C,[220400,,E]
1751         JUMPE C,ARML1   ;NO INDEX
1752         XCTR XRW,[HRRZ Q,(C)]
1753         ADD E,Q
1754         TLZ E,17
1755 ARML1:  TLZE E,20
1756         XCTR XRW,[HRR E,(E)]
1757         LDB D,[360600,,E]       ;CHNL
1758         LDB C,[300600,,E]       ;OP
1759         CAIGE D,NARMCH
1760         CAIL C,NARMOP
1761         JRST ARMLOS
1762         PUSHJ P,@ARMOPT(C)
1763         AOBJN A,ARML
1764 \fADF1:  MOVSI D,-NARMCH
1765 ADFL:   SKIPL A,ARMDF(D)
1766         JRST ADF2
1767         TLNE A,100000
1768         JRST .+3
1769         MOVE C,RMAXV(D)
1770         MOVEM C,MAXV(D)
1771 ADF2:   AOBJN D,ADFL
1772         SETZM DLSRCH
1773         JUMPL B,POPJ1
1774         POPJ P,
1775
1776 ARMLOS: SETZM DLSRCH
1777         JRST ILUUO
1778
1779 ARMOPT: ASDEST  ;0 SET DEST
1780         ASVEL   ;1 SET VELOC
1781         ATDEST  ;2 COMPARE COMPUTED POSN
1782         ATVEL   ;3 COMPARE COMPUTED VELOC
1783         AADST   ;4 COMPARE ACTUAL POS
1784         ARPOST  ;5 READ CURRENT POSITION
1785 NARMOP==.-ARMOPT
1786
1787 ARPOST: LDB B,IMPXPP(D) ;READ POSITION
1788         UMOVEM B,(E)
1789         POPJ P,
1790
1791 ASDEST: ANDI E,7777
1792         CAMGE E,DESMIN(D)
1793         MOVE E,DESMIN(D)
1794         CAMLE E,DESMAX(D)
1795         MOVE E,DESMAX(D)
1796         MOVEM E,DESTIN(D)
1797         MOVSI E,600000
1798 ADFSET: IORM E,ARMDF(D)
1799         POPJ P,
1800
1801 ASVEL:  ANDI E,7777
1802         CAMLE E,RMAXV(D)
1803         MOVE E,RMAXV(D)
1804         MOVEM E,MAXV(D)
1805         MOVSI E,500000
1806         JRST ADFSET
1807
1808 AADST:  LDB C,IMPXPP(D) ;COMPARE ACTUAL POSITION
1809         SUB C,DESTIN(D)
1810         JRST ATD1
1811 \f
1812 ATDEST: SKIPA C,DESTIN(D)       ;COMPARE COMPUTED POSITION
1813 ATVEL:  SKIPA C,VELOC(D)        ;COMPARE COMPUTED VELOCITY
1814         SUB C,POST(D)
1815 ATD1:   MOVMS C
1816         CAMLE C,E
1817         TLO B,400000
1818         POPJ P,
1819
1820 SERVO:  MOVSI A,-NARMCH
1821         AOSN OMPXIF
1822         JRST SERVI
1823 SERV1:  MOVE T,DESTIN(A)
1824         SUB T,POST(A)
1825         SKIPN VELOC(A)
1826         JUMPE T,SERVX
1827 SERV1A: MOVN B,MAXV(A)
1828         MOVE C,VELOC(A)
1829         SUB C,MAXA(A)
1830         CAMGE C,B
1831         MOVE C,B
1832         MOVE B,VELOC(A)
1833         ADD B,MAXA(A)
1834         CAMLE B,MAXV(A)
1835         MOVE B,MAXV(A)
1836         CAMG T,B
1837         CAMGE T,C
1838         JRST SERV2
1839         MOVM D,T
1840         CAMLE D,MAXA(A)
1841         JRST SERV2
1842 SERV3:  MOVEM T,VELOC(A)
1843         ADDB T,POST(A)
1844         IOR T,OMPXP(A)
1845         DATAO OMPX,T
1846 SERVX:  AOBJN A,SERV1
1847 SERVR:  JRST ARMSVR
1848
1849 SERV2:  SKIPGE T
1850         SKIPA D,C
1851         MOVE D,B
1852         SUB T,VELOC(A)
1853         MOVM E,D
1854         IMUL D,E
1855         IDIV D,MAXA(A)
1856         ASH D,-1
1857         CAMGE D,T
1858         SKIPA E,B
1859         MOVE E,C
1860         MOVE C,E
1861         XOR C,VELOC(A)
1862         JUMPGE C,SERV2A
1863         MOVE C,E
1864         XOR C,T
1865         JUMPGE C,SERV2A
1866         SKIPA T,VELOC(A)
1867 SERV2A: MOVE T,E
1868         JRST SERV3
1869 \f
1870 SERVI:  LDB B,IMPXPP(A) ;INITIALIZE TO CURRENT ARM STATE
1871         MOVEM B,POST(A)
1872         SETZM VELOC(A)
1873         SKIPGE DESTIN(A)
1874         MOVEM B,DESTIN(A)
1875         IOR B,OMPXP(A)
1876         DATAO OMPX,B
1877         AOBJN A,SERVI
1878         JRST SERVR
1879
1880 AARMOFF:        CAME U,ARMUSR
1881         POPJ P,
1882         CONO TIPDEV,0
1883         SETZM ARMF
1884         PUSHJ P,IMXCL1
1885         SETOM ARMUSR
1886         POPJ P,
1887
1888 AARMRS: CAME U,ARMUSR   ;RESET ARM LOCK FLAGS
1889         POPJ P,
1890         MOVSI A,-NARMCH
1891 AARMR1: SKIPL ARMLOK(A)
1892         JRST AARMR2
1893         CONO PI,OMXOFF
1894         SETOM DESTIN(A) ;RELOAD ARM COMM FROM CURRENT POS
1895         CLEARM ARMLOK(A)
1896         SETOM OMPXIF
1897         CONO PI,OMXON
1898 AARMR2: AOBJN A,AARMR1
1899         POPJ P,
1900
1901
1902 TIPBRK: DATAI TIPDEV,B
1903         TRNE B,1        ;WRIST DETENT
1904         JRST TIPBR2
1905         SETOM ARMLOK+ARMVRT     ;UNHAPPINESS
1906 TIPBR2: EXCH B,TIPBR
1907         XOR B,TIPBR
1908         SKIPGE A,ARMUSR
1909         JRST TIPBR1
1910         ANDI B,7
1911         LSH B,ATPSFT
1912         IORM B,PIRQC(A)
1913 TIPBR1: JRST OMXRET
1914
1915 \f
1916 EBLK
1917
1918 ;JOINT ASSIGN
1919 ;0-10 AMF SWING VERT HORIZ YAW TILT GRIP ROTATE EXTEND ROLL
1920 ;11-12 NEW VIDI FOCUS IRIS
1921
1922 ARMVRT==1       ;CHNL # OF ARM VERT
1923
1924 DESMIN: IRPS A,,0 41 233 0 0 0 0 0 0 0 0
1925         A
1926 TERMIN
1927 DESMAX: IRPS A,,7777 7777 7323 7777 7777 7777 7777 7777 7777 7777 7777
1928         A
1929 TERMIN
1930 DESTIN: BLOCK NARMCH    ;-1 NOT COMMANDED   + VAL OF POSITION COMMAND
1931 POST:   BLOCK NARMCH    ;POSITION OF ARM AT PI LEVEL
1932 VELOC:  BLOCK NARMCH
1933 MAXV:   BLOCK NARMCH
1934 ARMDF:  BLOCK NARMCH    ;4.9 VARIABLE CHANGED 4.5 POS VAR 4.7 VEL 4.6 ACC
1935 ARMLOK: BLOCK NARMCH    ;IF -1 AXIS LOCKED DO NOT ALLOW CHNG IN COMMAND
1936
1937 MAXA:   REPEAT NARMCH,14
1938 RMAXV:  REPEAT NARMCH,140
1939
1940 OMPXP:  IRPS A,,2 3 4 6 7 12 11 10 5 32 31
1941         A,,
1942         TERMIN
1943
1944 IMPXPP: IRPS A,,102 103 104 106 107 112 111 110 105 132 131
1945         301400-140000*<A-A/3*3>,,MPXBUF+A/3
1946         TERMIN
1947
1948 ARMUSR: -1      ;-1 OR INDEX OF USER DOING ARMOVE
1949 OMPXIF: 0       ;-1 => INITIALIZE DESTINS'S TO CURRENT ARM POSITION
1950 ARMF:   0       ;-1 ARM IN USE, 0 NO ARMOV EXECUTED
1951 TIPBR:  0       ;TIP BREAK REG LAST TIME READ IN
1952 BBLK
1953 ]
1954 \f
1955 SUBTTL  INPUT MULTIPLEXOR
1956
1957 IFN IMXP,[
1958 APOTSE: CONI MPX,T
1959         JUMPE T,ILUUO   ;MPX NOT AVAIL
1960         MOVE C,B
1961 APOTS1: UMOVE A,(C)
1962         ANDI A,377      ;GET IMPX CHNL
1963         JUMPE A,CPOPJ           ;CHNL 0 = END OF LIST
1964         IDIVI A,3               ;COMPUTE MPXBUF INDEX
1965         ADD A,MPXPT(B)          ;FORM BYTE PTR
1966         MOVSI B,-NPOTCH         ;SET UP TN DELETE PREVIOUS POT CONN
1967 PTS1:   CAMN A,POTBPT(B)        ;IS ENTRY FOR SAME CHNL
1968         SKIPG POTUSR(B) ;AND ACTIVE
1969         JRST PTS2               ;NO,KEEP LOOKING
1970         CAME U,POTUSR(B)        ;IS THIS USER THE ONE WHO MADE ENTRY
1971         JRST ILUUO              ;NO,ILLEGAL
1972         PUSHJ P,NARK            ;DEACTIVATE AND FREE ENTRY
1973
1974 PTS2:   AOBJN B,PTS1            ;TRY NEXT ENTRY
1975         MOVEI B,400000          ;MASK FOR DELETE ONLY
1976         XCTR XRW,[TDNE B,(C)]           ;SKIP ON NEW ENTRY WANTED
1977         JRST PTSR               ;TRY FOR NEXT BLOCK
1978         MOVSI B,-NPOTCH         ;SET UP TO FIND FREE ENTRY
1979 PTS3:   SKIPL POTUSR(B)         ;SKIP ON FREE
1980 PTS4:   AOBJN B,PTS3            ;TRY OTHER SLOTS
1981         JUMPGE B,ILUUO          ;NO SLOTS AVAIL
1982         CONO PI,CLKOFF          ;PREVENT OTHER GRABBERS
1983         SKIPGE POTUSR(B)        ;SKIP IF JUST TAKEN
1984         JRST PTS5               ;OKAY FOR SURE
1985         CONO PI,CLKON           ;REENABLE
1986         JRST PTS4               ;TRY ANOTHER
1987
1988 PTS5:   SETZM POTUSR(B)         ;MARK TAKEN
1989         AOS IMXNTO
1990         AOS POTCON              ;INCREMENT NUMBER SLOTS IN USE
1991         PUSHJ P,IMXON           ;START IMPX
1992         CONO PI,CLKON           ;AND ENABLE
1993 PTS6:   MOVEM A,POTBPT(B)       ;SAVE PTR TO MPXBUF FOR MPX ROUTINE
1994         XCTR XRW,[HRRZ A,1(C)]          ;GET USER ADR
1995         XCTRI XRW,[MOVES (A)]
1996          JRST .+2
1997           JRST PTSL1            ;NO,LOSE
1998         XCTR XRW,[HLL A,1(C)]           ;GET BYTE FIELDS
1999         TLNN A,777700           ;IF NONE SPECIFIED
2000         TLC A,4400              ;ASSUME FULL WORD
2001         TLZ A,77                ;FLUSH INDEX,INDIRECT
2002         MOVEM A,POTVPT(B)       ;SAVE AS USER MEM PTR FOR MPX ROUTINE
2003 PTS7:   UMOVE A,(C)
2004         ANDI A,3        ;GET FLOAT + ABS BITS
2005         MOVEI D,PUFLI           ;ADDR OF FLOATING INCREMENTAL UPDATE
2006         TRNN A,1                ;SKIP ON FLOATING
2007         MOVEI D,PUFXI           ;ADDR OF FIXED INCREMENTAL UPDATE
2008         TRNE A,2                ;SKIP ON NOT ABSOLUTE
2009         SOS D                   ;ABS ROUTINE STARTS ONE BEFORE INCREMENTAL
2010         MOVEM D,POTUPD(B)       ;SAVE ROUTINE ADDR FOR MPX ROUTINE
2011 PTS8:   XCTR XRW,[MOVN D,2(C)]          ;GET LOWER LIMIT
2012         MOVNM D,POTOFS(B)       ;SAVE AS OFFSET FOR MPX ROUTINE
2013         TRNE A,1                ;SKIP ON FIXED
2014         JRST PTS9               ;GO SET FLOATING PARAMS
2015         XCTR XRW,[ADD D,3(C)]           ;UL-LL
2016         ASH D,-2                ;SCALE MULTIPLIER
2017 \f
2018 PTS9R:  MOVEM D,POTSCL(B)       ;STORE SCALE FACTOR FOR MPX ROUTINE
2019         LDB D,POTVPT(B)         ;GET CURRENT VARIABLE VALUE
2020         TRNE A,1                ;SKIP ON FIXED
2021         JRST PTS10              ;COMPUTE FLOATING INCR VALUE
2022         SUB D,POTOFS(B)         ;D_VAL-LL FIXED
2023         MOVSI E,200000          ;SET TO ROUND VALUE
2024         ASHC D,-25.             ;SCALE TO GET 12 BIT VALUE
2025         DIV D,POTSCL(B)         ;COMPUTE INCR VAL FOR VAR
2026 PTS10R: HRROM D,POTVAL(B)       ;STORE INCR VALUE FOR MPX ROUTINE
2027         MOVEM U,POTUSR(B)       ;STORE USER TO ACTIVATE MPX ROUTINE
2028 PTSR:   ADDI C,4                ;ADVANCE POINTER TO NEXT 4 WORD BLOCK
2029         JRST APOTS1             ;GO SET MORE TABLE ENTRIES
2030
2031 PTS9:   FADR D,3(C)             ;UL-LL IN FLOATING
2032         FSC D,-12.              ;SCALE DOWN FOR POT RANGE
2033         JRST PTS9R              ;RETURN WITH SCALE FACTOR
2034
2035 PTS10:  FSBR D,POTOFS(B)        ;D_VAL-LL FLOATING
2036         FDVR D,POTSCL(B)        ;COMPUTE INCR VAL FLOATING
2037         MULI D,400              ;FIX INCR VAL
2038         TSC D,D                 ;WORK FOR BELOW LOWER LIMIT
2039         ASH E,-243(D)           ;VALUE IN E
2040         MOVE D,E                ;TO D LIKE FIXED
2041         JRST PTS10R             ;RETURN WITH INCR VALUE
2042
2043
2044 PTSL1:  PUSHJ P,NARK
2045         PUSHJ P,TPFLT
2046         JRST UUOTRO
2047
2048 ;POTS UPDATE CALLED BY MPX ROUTINE
2049
2050 UPOTS:  SPM UPTPGT
2051         MOVSI A,-NPOTCH         ;SET UP TO LOOP FOR ALL POT TABLE POSITIONS
2052         SETZM UPUSR             ;INDICATE NO USER SET UP
2053 UPOT1:  SKIPLE U,POTUSR(A)      ;SKIP ON SLOT UNUSED OR IN PROCESS
2054         JRST UPOT2              ;GO TRY TO UPDATE VAR
2055 UPOTR:  AOBJN A,UPOT1           ;TRY NEXT POT TABLE ENTRY
2056         LPMR UPTPGT     ;RESTORE MAP
2057         JRST UPOTRT             ;DONE
2058
2059 UPOT2:  CAMN U,UPUSR            ;IS THIS USER LAST UPDATED
2060         JRST UPOT3              ;YES, RELOCATION IS SETUP
2061         MOVE T,USTP(U)          ;TEST TO SEE IF
2062         SKIPN UMAPS(U)  ;MAP LOADED TO POINT TO OTHER USER
2063         TLNE T,BUCSTP+BCSTOP    ;USER BEING MOVED
2064         JRST UPOTR              ;YES DON'T UPDATE FOR HIM
2065         MOVEM U,UPUSR           ;SAVE AS LAST USER SET UP
2066         LPMR UPGML(U)   ;LOAD USERS MAP
2067 \fUPOT3: LDB B,POTBPT(A)         ;GET CURRENT ABS POSITION
2068         HLRZ C,POTVAL(A)        ;GET POS LAST TIME
2069         TRNE C,400000           ;SKIP UNLESS FIRST TIME
2070         JRST UPOT3A
2071         MOVE T,B
2072         SUB T,C
2073         MOVMS T
2074         CAMG T,PTNOIS
2075         JRST UPOTR
2076 UPOT3B: HRLM B,POTVAL(A)        ;SAVE FOR NEXT TIME
2077         SUB B,C                 ;GET AMOUNT OF INCREMENT
2078         CAIL C,5252             ;SKIP IF NOT IN UPPER THIRD
2079         JUMPG B,UPOT4           ;JUMP IF IN UPPER THIRD AND GOING UP
2080         CAIGE C,2525            ;SKIP IF NOT IN LOWER THIRD
2081         JUMPL B,UPOT5           ;JUMP IF IN LOWER THIRD AND GOING DOWN
2082 UPOT6:  HRRE C,POTVAL(A)        ;GET PREV INCREMENTAL VALUE
2083         ADD C,B                 ;UPDATE BY POT INCR
2084         CAILE C,7777            ;IF NEW VALUE WOULD EXCEED 7777
2085         MOVEI C,7777            ;CLAMP IT TO 7777
2086         CAIGE C,0               ;IF NEW VALUE WOULD BE LESS THAN 0
2087         MOVEI C,0               ;CLAMP IT TO 0
2088         HRRM C,POTVAL(A)        ;STORE NEW INCR VALUE
2089         JSP B,@POTUPD(A)        ;CALL ROUTINE TO COMPUTE NEW VARIABLE VALUE
2090         HRRZ T,POTVPT(A)        ;STORE VAR IN USER MEM
2091         XCTRI XR,[MOVE B,(T)]
2092          JRST .+2
2093           JRST INARK
2094         MOVEI D,B
2095         HLL D,POTVPT(A)
2096         DPB C,D
2097         XCTRI XW,[MOVEM B,(T)]  ;STORE VAR IN USER MEM
2098          JRST UPOTR
2099
2100 INARK:  SETOM POTUSR(A) ;THIS POT A LOSER, FLUSH
2101         SOS POTCON
2102         SOS IMPXF
2103         SOSGE IMXNTO
2104         DATAO DSDEVN,[MPX]
2105         JRST UPOTR              ;RETURN FOR MORE POTS
2106
2107 UPOT4:  HRREI C,-6(B)           ;C_DELTA-6
2108         IMULI C,3               ;C_DELTA*3-22
2109         CAMLE C,B               ;IF POT TURNED UP FAST
2110         MOVEM C,B               ;THEN BOOST INCREMENT
2111         JRST UPOT6              ;RETURN TO STORE
2112
2113 UPOT5:  HRREI C,6(B)            ;C_DELTA+6
2114         IMULI C,3               ;C_DELTA*3+22
2115         CAMGE C,B               ;IF POT TURNED DOWN FAST
2116         MOVEM C,B               ;THEN DECREASE DECREMENT
2117         JRST UPOT6              ;RETURN TO STORE
2118 \f
2119 PUFXA:  HLRZ C,POTVAL(A)        ;ABS ENTRY, USE DIRECT VALUE
2120 PUFXI:  MUL C,POTSCL(A)         ;INCR ENTRY, SCALE VALUE
2121         ASHC C,25.              ;200000,,=FULL WORD
2122         ADD C,POTOFS(A)         ;OFFSET VALUE
2123         JRST (B)                ;RETURN WITH USER FIELD VALUE
2124
2125 PUFLA:  HLRZ C,POTVAL(A)        ;ABS ENTRY FOR FLOAT PT
2126 PUFLI:  TLC C,232000            ;FLOAT POT VALUE
2127         FAD C,C                 ;NORMALIZE
2128         FMPR C,POTSCL(A)        ;SCALE FLOATING VALUE
2129         FADR C,POTOFS(A)        ;ADD OFFSET
2130         JRST (B)                ;RETURN WITH NEW FLOATING VAR VALUE
2131
2132 UPOT3A: MOVE C,B                ;FIRST TIME USE CURRENT VALUE
2133         JRST UPOT3B
2134
2135
2136 NARK:   SETOM POTUSR(B) ;TURN OFF AND FREE POT CHANNEL
2137         SOS POTCON      ;DECREMENT # OF SLOTS IN USE
2138         JRST IMXCL1     ;FLUSH THIS USE OF MPX AND MAYBE DEASSIGN MPXR
2139
2140 POTCLS: MOVEI A,NARK    ;ON CLOSE FLUSH ALL ENTRIES FOR USER
2141 POTCLA: MOVSI B,-NPOTCH ;SET UP TO TEST ALL ENTRIES FOR USER U
2142 POTCL1: CAMN U,POTUSR(B)        ;SKIP IF DIFFERENT USER
2143         PUSHJ P,(A)     ;FLUSH IT MAYBE
2144         AOBJN B,POTCL1  ;TRY ALL SLOTS
2145         POPJ P, ;DONE
2146
2147 EBLK
2148 POTUSR: REPEAT NPOTCH,-1        ;-1=FREE, 0=PROCESS, +=USER INDEX
2149 POTBPT: BLOCK NPOTCH            ;BYTE PTR INTO MPXBUF
2150 POTVPT: BLOCK NPOTCH            ;BYTE PTR INTO USER MEM INDEXED BY R
2151 POTVAL: BLOCK NPOTCH            ;DIRECT VALUE,,INCR VALUE
2152 POTUPD: BLOCK NPOTCH            ;ADDR OF ROUTINE TO COMPUTE NEW VALUE
2153 POTSCL: BLOCK NPOTCH            ;SCALE FACTOR FOR VARIABLE
2154 POTOFS: BLOCK NPOTCH            ;OFFSET FOR VARIABLE
2155 MPXPT:  REPEAT 3,301400-140000*.RPCNT,,MPXBUF   ;POINTERS FOR 12 BIT MPX BYTES
2156 UPUSR:  0       ;USER FOR WHOM RELOC SETUP AND NOT STOPPED
2157 UPTPGT: BLOCK 8 ;SAVE MAP
2158
2159 POTCON: -1      ;<NUMBER OF POTS CONNECTED>-1
2160
2161 PTNOIS: 3       ;IGNORE ANY CHANGE < OR = THIS AS POT NOISE
2162 ]
2163 \f
2164 SUBTTL  340 DISPLAY
2165
2166 IFN 340P,[
2167 ;
2168 ; DISPLAY INTERRUPT ROUTINE
2169 ;
2170 DRECYC: 0
2171 ;
2172 BBLK
2173 ;
2174         MOVEM A,LPTA
2175         MOVE A,DRECYC
2176         MOVEM A,LPTBRK
2177         MOVE A,[B,,LPTB]
2178         BLT A,LPTB+17-B+1-1
2179         JRST DRECY1
2180 SRECYC: MOVE A,[B,,LPTB]
2181         BLT A,LPTB+17-B+1-1
2182         CONSZ DIS,2000
2183         JRST DSLTPB     ;LIGHT PEN BREAK
2184         SKIPGE 340MD
2185         JRST SRCYRB     ;RANDOM BREAK
2186         CONSZ DIS,5000
2187         JRST SRCY4
2188 DRECY1:
2189 ;       DATAI 710,A
2190 ;       SUB A,LQTIM
2191 ;       CAIL A,32000./2
2192 ;       JRST DISF2      ;MISSING CLOCK BREAK DUE TO DIS
2193         HLRE A,DBLKOP
2194         SKIPL A
2195         TDZA A,A
2196         MOVNS A
2197         ADDB A,DWDS     ;CREDIT BACK WDS NOT USED
2198         JUMPL A,DISF2
2199         HRRZS DBLKOP
2200         SKIPE 340MD
2201         JRST SRCY3      ;IDS OR DIS
2202 SRCY1:  HRRZ A,LDISP
2203         JUMPE A,ENDLIS
2204         JSP B,DPFTCH
2205         JUMPL A,SRCY2A  ;SINGLE BLKO PNTR
2206         MOVEM A,LDISP   ;LIST
2207         HLRZS A
2208         JUMPE A,SRCY5   ;THIS ENTRY NULL
2209         JSP B,DPFTCH
2210         SKIPGE LMODE
2211         JRST SRCY1A     ;DSTRT
2212 SRCY1C: JUMPGE A,SRCY5
2213         MOVEM A,LUBLKP  ;SAVE FOR DEBUGGING
2214         HLRO C,A
2215         MOVNS D,C       ;+ COUNT
2216         LDB E,[1200,,A] ;WD WITHIN PG
2217         ADD E,D
2218         LSH E,-10.
2219         AOS E
2220         MOVE J,E        ;SAVE # EXEC PGS REQD
2221         SUBI E,N340PB
2222         JUMPG E,SRCY2B  ;CANT MAKE IT IN ONE WHACK
2223         MOVN Q,E        ;SAVE MAX ACCEPT STARTING EXEC PG #
2224         HRLZS E
2225         HRRZ C,A
2226         CAIGE C,20
2227         JRST DISLOS
2228         ANDI C,776000   ;USER PG #
2229         MOVNI R,1       ;BEST STARTING PLACE SO FAR
2230 SRCY2D: CAMN C,340DA(E) ;LOOK FOR PG SET UP TO RIGHT USER PG
2231         JRST SRCY2F     ;FOUND ONE
2232 SRCY2I: AOBJN E,SRCY2D
2233         HRRZ E,R
2234         JUMPGE R,SRCY2C ;PARTIALLY SET UP PLACE FOUND
2235         AOS 340DP
2236         CAML Q,340DP    ;NONE AVAIL, IS RING PNTR IN ACCEPTABLE AREA?
2237         SKIPA E,340DP   ;YES
2238         CLEARB E,340DP  ;NO RESET
2239 SRCY2C: MOVE R,DDAD(E)
2240         LSH R,-10.
2241         DPB R,[121000,,A]       ;SWITCH BLKO PNTR TO EXEC MD PG
2242         MOVEM A,LDBLKP
2243         MOVEM A,DBLKOP
2244         HLRES A         ;FOR GROSS DISPLAY LISTS
2245         ADDM A,DWDS     ;APPROX TO WDS TO DISPLAY
2246         IDIVI A,1000.
2247         SOS A   ;QUOTIENT MAY BE ZERO
2248         MOVEM A,DISDIE
2249         MOVNI A,EWRT
2250         ADDM A,DWDS
2251         ADDI E,2        ;OFFSET FOR POINTER PAGES
2252         MOVEI A,0
2253 SRCY2E: CAME C,A340P1(E)        ;PG SET TO RIGHT ADR?
2254         JRST SRCY2J     ;NO SET UP
2255 SRCY2K: ADDI C,2000
2256         AOS E
2257         SOJG J,SRCY2E   ;SET UP ALL PGS IN BLOCK
2258         CONSZ DIS,5400
2259         CONO DIS,100\SDCHN_3\DISCHN
2260         JRST SRCYCX
2261
2262 SRCY2J: JSP B,DDFTC
2263         MOVEI B,-2(E)
2264         MOVEM B,340DP
2265         JRST SRCY2K
2266
2267 SRCY2B: JRST DISLOS     ;TEMP
2268
2269 SRCY2F: MOVE D,J        ;FIRST PAGE MATCHES, DO ENOUGH ADDITIONAL PAGES MATCH?
2270         SOJLE D,SRCY2C  ;ONLY ONE PAGE NEEDED.  WINS
2271         MOVEI TT,2000(C)
2272         MOVEI R,1(E)
2273 SRCY2H: CAME TT,340DA(R)
2274         JRST SRCY2G     ;NOT SET UP FOR WHOLE BLOCK
2275         ADDI TT,2000
2276         AOS R
2277         SOJG D,SRCY2H
2278         JRST SRCY2C     ;SET UP FOR WHOLE BLOCK.  WIN
2279
2280 SRCY2G: HRRZ R,E        ;SAVE BEST SO FAR
2281         JRST SRCY2I
2282 \fDPFTCH:        HRRZ C,A
2283         CAIGE C,20
2284         JRST DISLOS
2285         TRZ C,1777
2286         MOVSI E,-N340PB-2
2287 DPFTC2: CAME C,A340P1(E)        ;PG SET UP TO RIGHT ADR?
2288         JRST DPFTC1     ;NO
2289         TRZ A,776000    ;YES RETCH REL ADR
2290         XCTRI [MOVE A,@DPAP(E)]
2291          JRST (B)       ;NO FAULT
2292         JRST 4,.        ;SHOULD HAVE BEEN VERIFIED WHEN LOADED
2293
2294 DPFTC1: AOBJN E,DPFTC2  ;LOOP ON ALL EXEC PNTR PAGES
2295         MOVE E,340PP    ;NONE SET UP SO SELECT ONE TO SET UP
2296         AOS D,340PP     ;INCR IT FOR NEXT TIME
2297         CAILE D,1
2298         CLEARM 340PP    ;RESET
2299 DDFTC:  SPM DPBS        ;ENTRY FOR DATA PGS STORE MAP
2300         SKIPGE U,DISUSR
2301         JRST 4,.
2302         SKIPL CIRPSW
2303         JRST DDFTC2     ;MAP MIGHT CHANGE
2304         SKIPGE A340P1(E)
2305         JRST DDFTC3
2306         SETOM A340P1(E) ;WIPE OUT OLD ENTRY
2307         LDB W,DPEP(E)   ;PICK UP OLD PAGE
2308         TRZN W,600000   ;NO ACCESS
2309         JRST 4,.
2310         ANDI W,PMRCM
2311         CAIL W,TSYSM
2312         JRST 4,.
2313         MOVEI R,0
2314         DPB R,DPEP(E)
2315         SKIPGE DDEXCF+340P1(E)
2316         JRST DDFTC3
2317         LDB R,[MUR,,MEMBLT(W)]
2318         CAIE R,MURUSR
2319         JRST 4,.
2320         MOVSI R,-1
2321         ADDM R,MMSWP(W) ;REDUCE COUNT OF EXEC REFS
2322 DDFTC3: MOVE W,C        ;SET PAGE IN E TO PNT TO ADR IN C
2323         LSH W,-10.      ;GET USR PG #
2324         ROT W,-1        ;GET WD # AND SAVE WHICH HALF IN SIGN
2325         ADDI W,UPGMP(U)
2326         HLRZ R,(W)
2327         SKIPGE W
2328         HRRZ R,(W)      ;PICKS UP PAGE ENTRY
2329         HLRZ T,UPGCP-UPGMP(W)
2330         SKIPGE W
2331         HRRZ T,UPGCP-UPGMP(W)
2332         TRNN R,600000
2333         JRST DDFTC1     ;NO ACCESS OR SWAPPED OUT
2334         LDB Q,[PMRCAD,,R]
2335         CAIN T,-1
2336         JRST DDFTC4     ;ABS PG
2337         CAILE Q,TSYSM
2338         JRST 4,.
2339         SKIPGE MEMBLT(Q)
2340         JRST DDFTC2     ;CAN'T SET UP EXEC PG POINTING TO THIS ONE
2341         LDB TT,[MUR,,MEMBLT(Q)]
2342         CAIE TT,MURUSR
2343         JRST 4,.
2344         CLEARM DDEXCF+340P1(E)
2345         MOVSI TT,1
2346         ADDM TT,MMSWP(Q)        ;AOS COUNT OF EXEC PGS
2347 DDFTC5: MOVEM C,A340P1(E)
2348         DPB R,DPEP(E)   ;STORE USERS PG ENTRY IN EXEC MAP
2349         LPMR DPBS       ;RESET ASSOC REG
2350         ANDI A,1777     ;FLUSH USER ADR EXCEPT WD IN PAGE
2351         XCTRI [MOVE A,@DPAP(E)] ;REF PAGE TO MAKE SURE ITS THERE, ETC
2352          JRST (B)
2353         JRST 4,.
2354
2355 DDFTC4: SETOM DDEXCF+340P1(E)   ;INDICATE PAGE POINTING TO ABS PAGE
2356         JRST DDFTC5
2357
2358 DDFTC1: JUMPE R,DISLOS  ;MAP COMPLETELY 0 MUST BE ILM
2359         JUMPE T,DISLOS  ;ILM
2360         MOVEM U,DISSWI
2361         LDB W,[121000,,C]
2362         MOVEM W,DISSPG  ;RQ PG IN
2363 DDFTC2: MOVNI A,3       ;HANG FOR 3 60THS
2364         JRST DISF2A
2365
2366 SRCY1A: JUMPGE A,SRCY1B
2367         MOVEI A,-1(A)
2368 SRCY1D: JSP B,DPFTCH
2369         SOJA A,SRCY1C
2370
2371 SRCY1B: TLNN A,777000
2372         JRST SRCY5
2373         HLRZ A,LDISP
2374         JRST SRCY1D
2375
2376 SRCY3:  SOSGE DTIME
2377         JRST DISF       ;LIMIT REPETITION RATE
2378         SKIPL NDSFMS    ;SKIP ON FRAME HACK NOT ACTIVE
2379         JSP B,ENDFM1    ;MAYBE STOP DISPLAY AFTER SPEC # OF FRAMES
2380         MOVE A,IDBLKP
2381         MOVEM A,DBLKOP
2382         CONO DIS,100\SDCHN_3\DISCHN
2383         SETOM DISDIE
2384         JRST SRCYCX
2385
2386 SRCY4:  CONO DIS,200\SDCHN_3\DISCHN     ;EDGE GRONK DIS AND KEEP GOING
2387         JRST SRCYCX
2388
2389 DISF2:  MOVNI A,300.
2390 DISF2A: MOVEM A,DTIME
2391         SETOM DISON
2392         JRST DISF3
2393
2394 DISF:   SETOM DISON
2395 DISF1:  MOVEI A,1
2396         MOVEM A,DTIME
2397 DISF3:  CONO DIS,100
2398 DISF4:  MOVEI A,DIS300-1
2399         MOVEM A,DBLKOP
2400 SRCYCX: MOVE A,[JSR DBLKPB]
2401 SRCYB1: MOVEM A,40+2*DISCHN
2402 SRCYB2: JRST LPTRT1
2403
2404 DIS300: 3000
2405         3000
2406
2407 DCRSTP: SKIPE 340MD     ;STOP DISPLAY FOR CORE SHUFFLING
2408          POPJ P,        ;BUFFER NOT IN USER CORE SO NO ACTION
2409 DCRST1: SETOM CDISOF
2410         CONO DIS,0
2411         POPJ P,
2412
2413 DCRRST: SKIPE 340MD     ;DISPLAY RESTART
2414          POPJ P,
2415         SKIPL DISOFF
2416          CONO DIS,SDCHN_3+DISCHN
2417         CLEARM CDISOF
2418         POPJ P,
2419 \f
2420 DSLTPB: DATAI DIS,LLTPSN
2421         AOS LTPCNT
2422         HRRZ A,LLTPSN
2423         ADDM A,LTPCY
2424         HLRZ A,LLTPSN
2425         ADDM A,LTPCX
2426         SKIPGE B,DISUSR
2427         JRST 4,.
2428         MOVEI A,%PILTP
2429         AND A,MSKST(B)
2430         IORM A,PIRQC(B)
2431         CONO DIS,@LTPDCN
2432         JRST SRCYCX
2433
2434 EBLK
2435
2436 DBLKP1: 0
2437 DBLKPB: 0
2438
2439 BBLK
2440         MOVEM A,DBLKP1
2441         MOVE A,[BLKO DIS,DBLKOP]
2442         MOVEM A,40+2*DISCHN
2443         MOVE A,DBLKP1
2444         JRST 12,@DBLKPB
2445
2446 SRCYRB: CONI DIS,A
2447         SKIPGE A
2448         CONO DIS,100    ;WOULD ASSIGN IF IDLE
2449         MOVE A,[JSR DIGNOR]
2450         JRST SRCYB1
2451
2452 EBLK
2453
2454 DIGNOR: 0
2455
2456 BBLK
2457         CONO DIS,0
2458         DATAO DSDEV,[DSNDIS]
2459         JRST 12,@DIGNOR
2460 \f
2461 ENDLIS: SETOM DISDIE
2462         MOVE A,DROOT
2463         MOVEM A,LDISP
2464         SOSGE DTIME
2465         JRST DISF       ;LIMIT REPETION RATE
2466         SKIPL NDSFMS
2467         JSP B,ENDFM1    ;HACK FRAME HACK
2468         CONO DIS,100\SDCHN_3\DISCHN
2469         JRST SRCY1
2470
2471 ENDFM1: SKIPE NDSFMS    ;STOP DISPLAY IF SPEC # OF FRAMES UP ELSE RETURN
2472         SOSGE NDSFMS
2473         JRST ENDFM2     ;STOP WORLD
2474         JRST (B)
2475
2476 ENDFM2: SETOM DISOFF
2477         JRST DISF1
2478
2479 SRCY5:  MOVNI A,EWRT/2
2480         ADDB A,DWDS
2481         JUMPGE A,SRCY1
2482         JRST DISF2
2483
2484 DISLOS: SKIPE 340MD
2485         JRST 4,.
2486         SKIPGE A,DISUSR
2487         JRST 4,DISF2A
2488         MOVEI B,%PIDIS
2489         IORM B,PIRQC(A)
2490         MOVSI A,(SETZ)
2491         JRST DISF2A     ;DIE FOR A LONG TIME
2492
2493 SRCY2A: SOSGE DTIME
2494         JRST DISF
2495         SKIPL NDSFMS
2496         JSP B,ENDFM1
2497         CONO DIS,100\SDCHN_3\DISCHN
2498         JRST SRCY1C
2499
2500 \f
2501 SUBTTL  340 DISPLAY - .DSTART, .DSTRTL
2502
2503 DISACR: CAME U,DISUSR
2504         POPJ P,
2505         SKIPE 340MD     ;COME HERE IF PAGE BEING FLUSHED + EXEC PAGE POINTING TO IT
2506         JRST 4,.        ;SHOULD NOT BE SET UP TO USER PAGE
2507         CONO PI,UTCOFF
2508         SETOM A340P1-340P1(T)
2509         SKIPGE DDEXCF(T)
2510         JRST DISAC1
2511         ADDB J,MMSWP(TT)
2512         SKIPGE J
2513         JRST 4,.
2514 DISAC1: SKIPGE DISOFF
2515         JRST POPJ1
2516         PUSH P,T
2517         PUSHJ P,DISZAP
2518         POP P,T
2519         JRST POPJ1
2520
2521 ;ROUTINES TO START 340 DISPLAY WITH DIS BUFF IN USERS CORE
2522 ADSTART:        TDZA E,E        ;CALL 10,
2523 ADSTL:  MOVNI E,1       ;CALL 12,
2524         MOVEI A,0
2525         PUSHJ P,ADSDV
2526         POPJ P,
2527         SETOM DISOFF
2528         CONO DIS,0
2529         CLEARM 340MD
2530         MOVEM E,LMODE
2531         HRRZ C,40
2532         MOVEM C,DROOT
2533         MOVEM C,LDISP
2534         SETZM DISOFF
2535         PUSHJ P,DISZAP
2536         JRST CLKOJ1
2537
2538 ANDIS:  CAME U,DISUSR
2539         POPJ P,
2540         UMOVE A,(J)
2541         JUMPL A,ANDIT1  ;WAIT FOR COMPLETION OF LAST NDIS
2542         JUMPE A,ANDIT2  ;RETURN COUNT LEFT FROM LAST NDIS
2543         MOVEM A,NDSFMS  ;DISPLAY N TIMES AND THEN STOP
2544         SKIPL DISOFF
2545         JRST POPJ1
2546         SETOM DISDIE
2547         CLEARM DISOFF
2548         PUSHJ P,DISZAP
2549         JRST POPJ1
2550
2551 ANDIT1: SKIPL DISOFF
2552         PUSHJ P,UFLS
2553         POPJ P,
2554
2555 ANDIT2: MOVE A,NDSFMS
2556         JRST APTUAJ
2557 \f
2558 SUBTTL  340 DISPLAY - .DSTOP, .DCLOSE, .LTPEN
2559 ADSTOP: CAMN U,DISUSR   ;OPER 16
2560         SKIPGE DISOFF
2561         POPJ P,
2562 ADCLB:  PUSH P,B
2563         PUSH P,C
2564         MOVSI C,-1
2565         SETOM DISOFF
2566         SETZM DBLINK
2567         CONO DIS,0
2568         MOVEI A,1
2569         MOVEM A,DTIME
2570         SETZM DISON
2571         SETOM DISDIE
2572         CONO PI,UTCOFF
2573         MOVSI A,-N340CL
2574 ADCLB1: SETOM A340P1(A)
2575         LDB B,DPEP(A)
2576         ANDI B,600000+PMRCM
2577         SKIPGE DDEXCF+340P1(A)
2578         JRST ADCLB2     ;POINTING TO EXEC PG
2579         TRZE B,600000
2580         ADDM C,MMSWP(B)
2581 ADCLB2: AOBJN A,ADCLB1
2582         CLEARM 340PP
2583         CLEARM 340DP
2584         CLEARM EXEUMP+.340P1
2585         REPEAT N340PB/2,CLEARM EXEUMP+.DPG0+.RPCNT
2586         MOVE A,[JSR DIGNOR]
2587         MOVEM A,40+2*DISCHN
2588         CONO PI,UTCON
2589         POP P,C
2590         JRST POPBJ
2591
2592 ADCL1:  SOSE DISNTO
2593         POPJ P,
2594         JRST AIDS7
2595
2596 ADCLOSE:        CAME U,DISUSR   ;OPER 15
2597         POPJ P,
2598         SKIPLE 340MD
2599         JRST AIDS8
2600 AIDS7:  PUSHJ P,ADCLB
2601         PUSHJ P,ADCL2
2602         JFCL
2603 AIDS9:  SETOM 340MD
2604         SETOM DISUSR
2605         DATAO DSDEV,[DSNDIS]    ;DEASSIGN DIS
2606         POPJ P,
2607
2608 AIDS8:  MOVE A,U        ;FLUSH CHNLS IN CASE OF .DCLOSE FROM DIS OR IDS
2609         PUSHJ P,CHSCAA
2610         PUSHJ P,ADSDV4
2611         JRST AIDS7
2612
2613 ALTPEN: MOVE C,B
2614         CAME U,DISUSR   ;CALL 14,
2615         JRST ALTPP2
2616         XCTR XR,[SKIPL A,(C)]
2617         JRST ALTPP1
2618         TLNN A,377777
2619         JRST .+3
2620         SKIPN LTPCNT
2621         PUSHJ P,UFLS
2622 ALTPP1: CONO PI,LPTOFF  ;INHIBITS LPEN BREAKS
2623         MOVE A,LDISP
2624         XCTRI XW,[MOVEM A,4(C)]
2625          SKIPA A,DBLKOP
2626           JRST ALTPPL
2627         TRZ A,400000
2628         LDB B,[121000,,A]
2629         LDB B,[121000,,A340P1-340P1(B)]
2630         DPB B,[121000,,A]
2631         XCTRI XW,[MOVEM A,5(C)]
2632          SKIPA B,C
2633           JRST ALTPPL
2634         HRLI B,LLTPSN
2635         XCTRI XBW,[BLT B,3(C)]
2636          JRST .+2
2637           JRST ALTPPL
2638         SETZB A,LTPCNT
2639         MOVEM A,LTPCY
2640         MOVEM A,LTPCX
2641         JRST LPTONJ
2642
2643 ALTPP2: XCTR XW,[SETZM (C)]
2644         XCTR XW,[SETZM 1(C)]
2645         POPJ P,
2646
2647 ALTPPL: CONO PI,LPTON
2648         PUSHJ P,TPFLT
2649         JRST ALTPEN
2650 \f
2651 SUBTTL  340 DISPLAY
2652
2653 ADSDV:          ;A HAS NEW 340MD
2654         CONO PI,CLKOFF
2655         CONI DIS,T      ;DIS AVAILABLE
2656         JUMPN T,ADSDV1  ;YES
2657         CONO DIS,0
2658         CONI DIS,T
2659         JUMPE T,ADSDVN  ;DIS NOT AVAIABLE
2660 ADSDV1: SKIPL T,DISUSR
2661         CAMN U,DISUSR
2662         JRST ADSDVY     ;YES
2663         CAME U,UMASTER
2664         JRST ADSDVM     ;MAYBE
2665 ADSDV2: SKIPGE A,DISUSR ;TAKE AWAY DISPLAY
2666         JRST ADSDV3
2667         PUSHJ P,RPCCK
2668 ADSDV7: SKIPL DISUSR
2669         SKIPG 340MD
2670         JRST ADSDV3
2671         PUSH P,R
2672         PUSHJ P,CHSCAA  ;CHANGE 340 CHANNELS TO NUL DEV
2673         PUSHJ P,ADSDV4
2674         POP P,R
2675         SETZM DISNTO
2676 ADSDV3: MOVE A,340MD
2677 ADSDVY: SETZM DBLINK
2678         SETOM NDSFMS    ;TURN OFF FRAMER HACK
2679         CAME A,340MD
2680         JUMPE A,ADSDV5  ;SAME USER CLOBBERING HIS IDS OR DIS
2681 ADSDV6: PUSHJ P,ADCLB
2682         MOVEM U,DISUSR
2683 ADCL2:  SKIPGE A,340BF
2684         JRST CLKOJ1
2685         LSH A,-10.
2686         PUSHJ P,MEMR
2687         SETOM 340BF
2688         JRST CLKOJ1
2689
2690 ADSDV4: HRRZ Q,(R)
2691         CAIG Q,DN340L
2692         CAIGE Q,DN340B
2693         POPJ P,         ;NOT A 340 CH
2694         CAIL Q,DN340C
2695         SKIPA T,[NLODN] ;UNIT MODE
2696         MOVEI T,NLBDN   ;BLOCK MODE
2697         SOS DISNTO
2698         HRRM T,(R)
2699         POPJ P,
2700 \f
2701 ADSDV5: SKIPGE 340MD
2702         JRST ADSDV6
2703         MOVE A,DISUSR
2704         JRST ADSDV7
2705
2706 ADSDVM: CAMN T,UMASTER
2707         JRST ADSDVN     ;CURRENT USER UMASTER
2708         MOVE T,UTMPTR(U)
2709         MOVE T,TTYTYP-USRRCE(T) ;GET BITS FOR NEW GUY IN LH OF T
2710         HRR T,DISUSR
2711         HRR T,UTMPTR(T)
2712         HLR T,TTYTYP-USRRCE(T)
2713         TRNE T,%TT3HP
2714         JRST ADSEQ1     ;CURRENT USER HAS HIGH PRIORITY
2715         TRNE T,%TT340
2716         JRST ADSEQ2     ;CURRENT USER NEAR 340
2717         TLNN T,%TT340+%TT3HP    ;GIVE TO NEW GUY IF HE IS EITHER
2718         JRST ADSEQ
2719 ADSWIN: JRST ADSDV2
2720
2721 ADSEQ1: TLNN T,%TT3HP
2722         JRST ADSDVN     ;NO
2723 ADSEQ:  SKIPL TTYTBL(U) ;MAYBE
2724         JRST ADSWIN
2725 ADSDVN: JRST CLKONJ
2726
2727 ADSEQ2: TLNE T,%TT3HP
2728         JRST ADSWIN
2729         TLNN T,%TT340
2730         JRST ADSDVN
2731         JRST ADSEQ
2732 \f
2733 SUBTTL  340 DISPLAY AS ASCII DEVICE
2734
2735 DISO:   PUSHJ P,AIDS1
2736         JRST OPNL10     ;NOT AVAILABLE
2737         AOS DISNTO
2738         SETOM 340DMD
2739         LDB B,[20200,,D]
2740         AOS B
2741         LSH B,4
2742         MOVEM B,CSCALE
2743         LDB TT,[40200,,CSCALE]
2744         MOVNS TT
2745         MOVEI T,170.
2746         LSH T,(TT)
2747         TRZ T,7
2748         MOVEM T,DISCHS  ;CHARS THAT WILL FIT THIS SIZE
2749         MOVEI T,88.
2750         LSH T,(TT)
2751         MOVEM T,DISLNL  ;LINES THAT WILL FIT
2752         PUSHJ P,DSIZAP
2753         MOVSI T,-1777
2754         HRR T,340BF
2755         SOS T
2756         MOVEM T,IDBLKP
2757         SETZM DISOFF
2758         PUSHJ P,DISZAP
2759         SETOM 340T
2760         JSP Q,OPSLD3
2761         DN340C,,DN340B
2762         DN340H,,DN340W
2763
2764 340FF:  SKIPL 340T
2765         JRST 340FF1
2766         MOVE A,TIME
2767         MOVEM A,340T
2768 340FF1: MOVE T,340T
2769         ADDI T,30.*3
2770         CAML T,TIME
2771         PUSHJ P,UFLS
2772         SETOM 340T
2773         PUSHJ P,ADCLB
2774         PUSHJ P,DSIZAP
2775         JRST DISZAP
2776 \f
2777 DSIZAP: SETZM DBLOAT
2778         SETZM 340XMD
2779         SETZM DBLINK
2780         MOVE T,340BF
2781         MOVEI A,34117
2782         IOR A,CSCALE
2783         MOVEM A,(T)
2784         PUSH T,[221700060000]
2785         HRLI T,0600
2786         MOVEM T,340BFP
2787         MOVE A,[403737403737]
2788         MOVEI B,1(T)
2789         HRLS B
2790         AOS B
2791         MOVEM A,1(T)
2792         BLT B,1775(T)
2793         MOVE A,DISLNL
2794         MOVEM A,DISLNS
2795         MOVE A,DISCHS
2796         MOVNM A,DISCHC
2797         MOVEI T,(HRRZ I,(A))
2798         HRLM T,AIDC1
2799         POPJ P,
2800
2801 \f
2802 340B:   MOVEI E,340D
2803         JRST NBTOCH
2804
2805 340C:   SKIPGE C
2806          SKIPA A,(C)
2807           UMOVE A,(C)
2808         ANDI A,177
2809 340D:   CAIN A,^C
2810         POPJ P,
2811         CAIN A,^L
2812         JRST 340FF
2813         CAIN A,^T
2814         JRST DSIZAP
2815         SKIPE DISLNS
2816         SKIPGE DBLOAT
2817         POPJ P,
2818         CAIN A,^B
2819         JRST BLNKON
2820         CAIN A,^E
2821         JRST BLNKOF
2822         SKIPE 340XMD
2823         PUSHJ P,340D1   ;ENTER CHR MOD INF NOT ALREADY
2824 340E:   EBLK
2825 AIDC1:  HRRZ\HLRZ I,DISTBL(A)
2826         BBLK
2827         TRNN I,-100
2828         JRST 340FC      ;NORMAL CHR
2829         TRNN I,-200
2830         JRST 340K       ;FAKE OUT 340 NON-SPACING CHRS
2831         PUSHJ P,(I)     ;ROUTINE DISPATCH (MAY SKIP OR SKIP TWICE)
2832         JRST 340E       ;WRONG CASE OR SOMETHING, TRY AGAIN
2833 340F:   IDPB I,340BFP
2834 340F2:  MOVE J,340BFP
2835         ANDI J,1777
2836         CAIL J,1776
2837         SETOM DBLOAT
2838         POPJ P,
2839
2840 340FC1: SKIPL DISCHC    ;DISPLAY IF COUNT NOT OUT BUT DONT INCR COUNT
2841 340FC:  AOSG DISCHC     ;INCR COUNT + DISPLAY IF NOT OUT
2842         JRST 340F
2843         JRST 340F2
2844
2845 340HD1: SKIPN 340XMD    ;ESCAPE TO PARAM MODE
2846         PUSHJ P,340H1
2847 340D1:  MOVEI I,74117   ;PARAM WD
2848         IOR I,CSCALE
2849         PUSHJ P,340F    ;STORE PARAM WD
2850         MOVEI I,6
2851         DPB I,[300600,,340BFP]  ;SWITCH TO CHR MODE
2852         SETZM 340XMD
2853         POPJ P,
2854
2855 340K:   MOVEI I,40      ;SPACE TO MAKE SPACING
2856         PUSHJ P,340FC1
2857         XCT AIDC1       ;GET NON-SPACING LETTER AND DISPLAY
2858         JRST 340FC
2859 \f
2860 340W:   JSP Q,WRDBT
2861         XCTR XRW,[MOVSS (C)]
2862         PUSHJ P,340H
2863         XCTR XRW,[MOVSS (C)]
2864 340H:   SKIPGE DBLOAT
2865         POPJ P,
2866         SKIPN 340XMD
2867         PUSHJ P,340H1   ;ENTER HALF WD MODE IF NOT ALREADY
2868         UMOVE I,(C)     ;PICK UP LOSERS HALF WD
2869         JRST 340F
2870
2871 340H1:  MOVEI I,37      ;IN CHR MODE, EXCAPE
2872         PUSHJ P,340F
2873         LDB I,[360600,,340BFP]
2874         JUMPE I,340H2
2875         CAIE I,22
2876         JRST 340H1
2877 340H2:  MOVEI A,22
2878         DPB A,[300600,,340BFP]
2879         SETOM 340XMD
2880         POPJ P,
2881
2882 BLNKON: MOVE A,DBLINK
2883         CAIL A,DBLNKN
2884         POPJ P,
2885         PUSHJ P,340HD1
2886         MOVE B,340BFP
2887         AND B,[770060,,1777]    ;ADR OF PARAM WD TO BLINK INTEN OF
2888         TLO B,300+B
2889         MOVE A,DBLINK
2890         MOVEM B,DBLNKB(A)
2891         AOS DBLINK
2892         MOVEI T,15.
2893         PUSHJ P,CLQADD
2894         BLINKB
2895         JRST 340F2
2896
2897 BLNKOF: PUSHJ P,340HD1
2898         JRST 340F2
2899
2900 BLNKBR: SKIPN A,DBLINK
2901         JRST CLQRET     ;BLINKING TURNED OFF
2902         SKIPL B,340BF
2903         SKIPGE CDISOFF
2904         JRST BLNKB3
2905         MOVE C,DBLNKF
2906 BLNKB2: DPB C,DBLNKB-1(A)
2907         SOJG A,BLNKB2
2908         SETCMM DBLNKF   ;COMPLEMENT FLAG
2909 BLNKB3: MOVEI T,15.     ;1/4 SEC
2910         MOVEI C,BLINKB
2911         JRST CLQREE
2912 \f
2913 SUBTTL  340 DISPLAY
2914
2915 AIDS1:  MOVEI A,2
2916         PUSHJ P,ADSDV   ;DETERMINE IF THIS LOSER SHOULD GET DISPLAY
2917         POPJ P,
2918 AIDS3:  PUSHJ P,TCALL
2919         JRST IOMQ
2920         JRST AIDS2      ;NO MEM AVAIL
2921         MOVEI B,MUDISB
2922         MOVE T,A
2923         LSH T,10.
2924         MOVEM T,340BF
2925         DPB B,[MUR,,MEMBLT(A)]
2926         MOVEI B,2
2927         MOVEM B,340MD
2928         JRST POPJ1
2929
2930 AIDS2:  SKIPG MEMFR
2931          JRST AIDS9
2932         PUSHJ P,LOSSET
2933             AIDS9
2934         PUSHJ P,UDELAY
2935         PUSHJ P,LSWDEL
2936         JRST AIDS3
2937
2938 IFN 0,[
2939 ;INTERPRETIVE DISPLAY COMPILER
2940
2941 IDISO:  PUSHJ P,AIDS1
2942         JRST OPNL10     ;NOT AVAIL
2943         AOS DISNTO
2944         SETZM 340DMD
2945         SETOM AISWS
2946         HRLI T,442200
2947         MOVEM T,340BFP
2948         MOVEI Q,10135   ;TURN OFF LP SCALE 1 INT 5
2949         IDPB Q,340BFP
2950         MOVEI T,1_4
2951         MOVEM T,CSCALE
2952         MOVEM T,VSCALE
2953         MOVEM T,ISCALE
2954         MOVSI A,(MOVE)  ;DONT HACK CHR'S PER LINE
2955         MOVEM A,DISCHS
2956         MOVNM A,DISCHC
2957         CONO DIS,500
2958         MOVEI A,DN340I
2959         JRST OPNSLT
2960
2961
2962 340I:   MOVEM C,AIDPCP
2963         UMOVE C,(C)
2964
2965 AIDL:   UMOVE R,(C)
2966 AIDL2:  TRNE R,1
2967         JRST AIDL1      ;NOT CHR MODE
2968         MOVEI Q,(HRRZ I,(A))
2969         HRLM Q,AIDC1
2970         MOVE Q,CSCALE
2971         IORI Q,60100
2972         PUSHJ P,AIDPY
2973         MOVE J,[220600,,Q]
2974 AIDCL:  MOVE B,[440700,,R]
2975 AIDC3:  ILDB A,B
2976 EBLK
2977 AIDC1:  HRRZ\HLRZ I,DISTBL(A)
2978 BBLK
2979         TRNN I,-100
2980         JRST AIDC5
2981         TRNN I,-200
2982         JRST AIDC7
2983         PUSHJ P,(I)
2984         JRST AIDC1
2985 AIDC5:  IDPB I,J
2986         TLNN J,770000
2987         PUSHJ P,AIDC2
2988         TLNE B,760000
2989         JRST AIDC3
2990         AOS C
2991         UMOVE R,(C)
2992         MOVE I,UEXIT
2993         CAMN I,[JRST ONEFLS]
2994         JRST AIDC6
2995         TRNN R,1
2996         JRST AIDCL
2997 AIDC6:  MOVEI I,37
2998         IDPB I,J
2999         TLNE J,770000
3000         JRST .-2
3001         PUSHJ P,AIDC2
3002
3003 AIDL1:  MOVE B,UEXIT
3004         CAMN B,[JRST ONEFLS]
3005         JRST AIDI
3006         LDB B,[30300,,R]
3007         AOJA C,@AIDTB(B)
3008
3009 AIDC7:  MOVEI I,40
3010         PUSHJ P,AIDC4
3011         XCT AIDC1
3012         JRST AIDC5
3013
3014 AIDI:   MOVE R,AIDPCP
3015         UMOVEM C,(R)
3016         SOS UUOH
3017         JRST UUOE1
3018
3019 AIDTB:  AIER1
3020         AIPT
3021         AIVC
3022         AIINC
3023         AIOP
3024         AIVC
3025         REPEAT 2,AIER1
3026 \f
3027 AIPT:   LDB I,[251600,,R]       ;PICK UP Y
3028         SUB I,DWDB
3029         MOVEI TT,220000
3030         DPB I,[1200,,TT]
3031         LSH I,-10.
3032         ANDI I,17
3033         MOVEM I,YFLD
3034         LDB I,[61600,,R]        ;X
3035         SUB I,DWDL
3036         MOVEI E,0
3037         TRNE R,2
3038         TRO E,2000      ;INTENSIFY
3039         DPB I,[1200,,E]
3040         LSH I,-10.
3041         ANDI I,17
3042         MOVEM I,XFLD
3043         MOVEI Q,20000
3044         PUSHJ P,AIDPY
3045         MOVE Q,TT
3046         PUSHJ P,AIDPY
3047         MOVE Q,E
3048         PUSHJ P,AIDPY
3049         JRST AIDL
3050
3051 AIDC4C: SKIPL DISCHC
3052         POPJ P,
3053         JRST AIDC4
3054 ]
3055 AIDC4B: AOSLE DISCHC
3056         POPJ P,
3057 AIDC4:
3058 IFN 0,[
3059         SKIPGE 340DMD
3060         JRST AIDC4A     ;DIS
3061         IDPB I,J
3062         TLNE J,770000
3063         POPJ P,
3064 AIDC2:  PUSHJ P,AIDPY
3065         MOVEI Q,0
3066         MOVE J,[220600,,Q]
3067         POPJ P,
3068 ]
3069 AIDC4A: IDPB I,340BFP
3070         POPJ P,
3071 IFN 0,[\f
3072 AIDPY:  HRLS Q
3073         DATAI DIS,AIDPIC
3074         DATAO DIS,Q
3075 AIDP1:  MOVEI H,50
3076 AIDP1A: CONSZ DIS,DVEF+DHEF     ;EDGE FLAGS
3077         JRST DEGFS
3078         CONSO DIS,200
3079         SOJG H,AIDP1A
3080         JUMPE H,AIER2
3081         CONSZ DIS,DVEF+DHEF
3082         JRST DEGFS
3083         SKIPN XFLD
3084         SKIPE YFLD
3085         JRST AIDP2
3086 DEG4B:  HRRZ H,340BFP
3087         SUB H,340BF
3088         CAIL H,1777
3089         JRST AIER3
3090         IDPB Q,340BFP
3091 AIDP2:  MOVEI Q,0
3092         POPJ P,
3093
3094 DEGFS:  DATAI DIS,DEGVCC
3095         CONI DIS,H
3096         LSH H,-15.
3097         ANDI H,7
3098         CAIN H,4        ;VECTOR
3099         JRST DEGVC
3100         SKIPN XFLD
3101         SKIPE YFLD
3102         JRST DEG5A
3103         MOVEI Q,400000
3104         CAIN H,3
3105         MOVEI Q,373737
3106         PUSH P,H
3107         PUSHJ P,DEG4B   ;LEAVING INSERT APPROPRIATE ESCAPE INSTEAD
3108         POP P,H
3109 DEG5A:  CONO DIS,200
3110         MOVEI TT,50.
3111         CONSO DIS,DVEF+DHEF+200
3112         SOJG TT,.-1
3113         JUMPE TT,AIER2
3114         CONSO DIS,200
3115         JRST DEG5A      ;RIDE OUT TO FINAL EDGE
3116         DATAI DIS,TT
3117         XOR TT,AIDPIC
3118         TRNN TT,1000
3119         JRST DEG5B
3120         HRR TT,AIDPIC
3121         TRNE TT,1000
3122         AOS XFLD
3123         TRNN TT,1000
3124         SOS XFLD
3125 DEG5B:  TLNN TT,1000
3126         JRST DEG4
3127         HLL TT,AIDPIC
3128         TLNN TT,1000
3129         SOS YFLD
3130         TLNE TT,1000
3131         AOS YFLD
3132         JRST DEG4
3133
3134 DEG5:   MOVE TT,DEGVCC
3135         CONSZ DIS,DVEF
3136         JRST DEG1
3137 DEG3:   CONSO DIS,DHEF
3138         JRST DEG4
3139         TRNE TT,1000
3140         SOS XFLD
3141         TRNN TT,1000
3142         AOS XFLD
3143 DEG4:   MOVEI TT,0
3144         DPB TT,[44000,,XFLD]
3145         DPB TT,[44000,,YFLD]
3146         CONSO DIS,200
3147         CONO DIS,200    ;CONTINUE
3148         MOVEI TT,100.
3149         CONSO DIS,200+DVEF+DHEF
3150         SOJG TT,.-1
3151         JUMPE TT,AIER2
3152         SKIPN XFLD
3153         SKIPE YFLD
3154         JRST AIDP1      ;NOT COMING ON
3155 DEG4F:  DATAI DIS,TT
3156         CAIN H,4
3157         MOVE TT,DEGVCC
3158         PUSH P,Q        ;COMING ON PRODUCE SETPOINT
3159         PUSH P,H
3160         MOVEI Q,20100
3161         IOR Q,@DEGSCT(H)
3162         PUSHJ P,DEG4B
3163         HLRZ Q,TT
3164         IORI Q,220000
3165         PUSHJ P,DEG4B
3166         HRRZ Q,TT
3167         CONI DIS,H
3168         LSH H,-15.
3169         DPB H,[150300,,Q]
3170         MOVE TT,(P)
3171         CAIN TT,4
3172         JRST DEGVC1
3173 DEG4D:  SUB P,[2,,2]
3174         JRST AIDP1
3175
3176 DEGSCT: [0]
3177         [0]
3178         [0]
3179         CSCALE
3180         VSCALE
3181         VSCALE
3182         ISCALE
3183         [0]
3184 \f
3185 DEG1:   TLNE TT,1000
3186         SOS YFLD
3187         TLNN TT,1000
3188         AOS YFLD
3189         JRST DEG3
3190
3191 DEGVC:  SETOM DEGVCF
3192         SKIPN XFLD
3193         SKIPE YFLD
3194         JRST DEG5       ;NOT GOING OFF
3195         CLEARM DEGVCF
3196         HRRZ A,AIDPIC
3197         HLRZ B,AIDPIC
3198         PUSHJ P,DEG4C
3199         CONSZ DIS,DVEF
3200         SUBI B,2
3201         CONSZ DIS,DHEF
3202         SUBI A,2
3203         SKIPGE A
3204         MOVEI A,0
3205         SKIPGE B
3206         MOVEI B,0
3207         DPB B,[100700,,Q]
3208         DPB A,[700,,Q]
3209         TRO Q,400000
3210         PUSHJ P,DEG4B
3211         JRST DEG5
3212
3213 DEGVC1: SKIPN XFLD
3214         SKIPE YFLD
3215         SKIPLE DEGVCF
3216         JRST .+2
3217         JRST DEG4D      ;VECTOR TOTALLY OUT OF IT
3218         IORI Q,100000
3219         PUSHJ P,DEG4B
3220         POP P,H
3221         POP P,Q
3222         DATAI DIS,A
3223         HLRZ B,A
3224         HRRZS A
3225         PUSHJ P,DEG4C
3226         DPB B,[100700,,Q]
3227         DPB A,[700,,Q]
3228         MOVE A,DEGVCC
3229         MOVEM A,AIDPIC
3230         JRST AIDP1
3231
3232 DEG4C:  HRRZ I,DEGVCC
3233         SUB A,I
3234         HLRZ I,DEGVCC
3235         SUB B,I
3236         MOVMS A
3237         MOVMS B
3238         CAIGE A,1000
3239         JRST .+3
3240         MOVNS A
3241         ADDI A,2000
3242         CAIGE B,1000
3243         JRST .+3
3244         MOVNS B
3245         ADDI B,2000
3246         LDB I,[40200,,VSCALE]
3247         MOVNS I
3248         ASH A,(I)       ;GET X INC IN A
3249         ASH B,(I)       ;Y IN B
3250         POPJ P,
3251 \f
3252 AIINC:  MOVE Q,ISCALE
3253         IORI Q,140100
3254         PUSHJ P,AIDPY
3255         SETOM DDINCI
3256         MOVEI Q,0
3257         MOVE B,[200400,,Q]
3258 AIIN1:  MOVE D,[440600,,R]
3259 AIIN8:  ILDB T,D
3260         LDB E,[200,,T]  ;LOAD COUNT
3261         JUMPE E,AIIN5   ;NULL INCREMENT
3262 AIIN7:  TRNN T,4        ;SKIP ON INTENSIFY
3263         JRST AIIN2
3264         SKIPG DDINCI    ;SKIP ON SET TO INTENSIFY
3265         JRST AIIN3
3266
3267 AIIN7A: LDB H,[30300,,T]
3268         MOVE H,DINCT(H)
3269         IDPB H,B
3270         PUSHJ P,AIIN6   ;MAYBE START NEW WORD
3271         SOJG E,AIIN7
3272
3273 AIIN5:  TLNE D,700000
3274         JRST AIIN8
3275         UMOVE R,(C)
3276         LDB H,[30300,,R]
3277         TRNE R,1
3278         CAIE H,3        ;INC MODE
3279         TROA Q,400000
3280         AOJA C,AIIN1
3281         PUSHJ P,AIIN6A
3282         JRST AIDL2
3283
3284 AIIN6:  TLNE B,770000
3285         POPJ P,
3286
3287 AIIN6A: PUSHJ P,AIDPY
3288         MOVEI Q,0
3289         SETOM DDINCI
3290         MOVE B,[200400,,Q]
3291         POPJ P,
3292
3293 AIIN2:  SKIPN DDINCI
3294         JRST AIIN7A     ;INTENSITY AGREES
3295 AIIN3:  SKIPL DDINCI
3296         PUSHJ P,AIIN6A
3297         HRRZM P,DDINCI
3298         TRNE T,4
3299         TROA Q,200000
3300         CLEARM DDINCI
3301         JRST AIIN7
3302
3303 AIVC:   MOVE Q,VSCALE
3304         IORI Q,100100
3305         LDB A,[251700,,R]       ;DY
3306         LDB B,[61700,,R]        ;DX
3307         TRNE A,40000
3308         ORCMI A,77777
3309         TRNE B,40000
3310         ORCMI B,77777
3311         MOVM E,A
3312         MOVM TT,B
3313         MOVE H,VSCALE
3314         LSH H,-4
3315         ANDI H,3
3316         MOVNS H
3317         LSH E,(H)
3318         LSH TT,(H)
3319         JUMPN E,.+2
3320         JUMPE TT,AIDL
3321         PUSHJ P,AIDPY
3322 AIVCL:  MOVE H,E
3323         MOVE J,TT
3324 AIVC3:  CAIG J,177
3325         CAILE H,177
3326         JRST AIVC2
3327         SUB E,H
3328         DPB H,[100700,,Q]
3329         SKIPGE A
3330         TRO Q,1_<8+7>
3331         SUB TT,J
3332         DPB J,[700,,Q]
3333         SKIPGE B
3334         TRO Q,1_7
3335         TRNE R,1_1
3336         TRO Q,200000
3337         JUMPN E,.+3
3338         JUMPN TT,.+2
3339         TRO Q,400000
3340         PUSH P,A
3341         PUSH P,B
3342         PUSH P,E
3343         PUSH P,TT
3344         PUSHJ P,AIDPY
3345         POP P,TT
3346         POP P,E
3347         POP P,B
3348         POP P,A
3349         JUMPN E,AIVCL
3350         JUMPN TT,AIVCL
3351         JRST AIDL
3352
3353 AIVC2:  LSH J,-1
3354         LSH H,-1
3355         JRST AIVC3
3356 \f
3357 AIOP:   LDB B,[60300,,R]
3358         JRST @AIOPT(B)
3359
3360 AIOPT:  AIER5
3361         AIPSJ
3362         AIPPJ
3363         AIJMP
3364         AIPSH
3365         AIIPOP  ;5
3366         AIPS
3367         AIER5
3368         AIER5
3369
3370 AIPSJ:  XCTR XRW,[AOS D,43]     ;PICK UP PDL PNTR AND INCR
3371         XCTR XRW,[MOVEM C,(D)]  ;STORE RETURN PC
3372 AIJMP:  HLRZ C,R
3373         JRST AIDL
3374
3375 AIPPJ:  UMOVE D,43
3376         XCTR XRW,[HRRZ C,(D)]
3377         JUMPE C,AIEXT   ;POPJ INTO 0 START SIGNAL
3378         XCTR XRW,[SOS 43]
3379         JRST AIDL
3380
3381 AIEXT:  SKIPL AISWS
3382         JRST AIDST3
3383 AIDST:  MOVEI Q,3000
3384         PUSHJ P,DEG4B
3385         MOVE A,340BF
3386         ADD A,[-2000-1,,-1]
3387         MOVEM A,IDBLKP
3388         MOVEM A,DBLKOP
3389         MOVEI A,1
3390         MOVEM A,DTIME
3391         SETZM DISOFF
3392         CONO DIS,1100\DISCHN\SDCHN_3
3393 AIDST3: POPJ P,
3394
3395 AIPSH:  HLRZ TT,R
3396         UMOVE TT,(TT)
3397         XCTR XRW,[AOS D,43]
3398         UMOVEM TT,(D)
3399         JRST AIDL
3400
3401 AIIPOP: HLRZ TT,R
3402         XCTR XRW,[SOS D,43]
3403         UMOVE E,1(D)
3404         UMOVEM E,(TT)
3405         JRST AIDL
3406
3407 AIPS:   LDB A,[140600,,R]
3408         HLRZ B,R
3409         CAIL A,AIMXP
3410         JRST AIER7
3411         ANDI B,3
3412         LSH B,4
3413         XCT AIPST(A)
3414         JRST AIDL
3415
3416 AIPST:  JRST AIER7
3417         HLLEM R,AISWS   ;START MODE
3418         MOVEM B,CSCALE
3419         MOVEM B,ISCALE
3420         MOVEM B,VSCALE
3421         JRST AIPSA
3422         HLRM R,DWDL
3423         HLRM R,DWDB
3424 AIMXP==.-AIPST
3425
3426 AIPSA:  MOVEM B,CSCALE
3427         MOVEM B,ISCALE
3428         MOVEM B,VSCALE
3429         JRST AIDL
3430 ]\f
3431 EBLK
3432 XFLD:   0       ;HIGH ORDER BITS OF X COOR REG (LIGHT=0)
3433 YFLD:   0       ;  ... Y
3434 CDISOF: 0       ;DISPLAY OFF IN CORE ALLOC
3435 340BF:  -1      ;POINTER TO 1K BLOCK FOR 340 BF (MEM ADR)
3436 340BFP: 0       ;POINTER TO 340BF
3437         DBLNKN==10.
3438 DBLINK: 0       ;0=IDLE ;+N=NUM OF ENTRIES
3439 DBLNKF: 0       ;BLINK FLAG, -1 MEANS START BLINK OFF
3440 DBLNKB: BLOCK DBLNKN    ;BYTE POINTER TO PARAMETER HW TO CHANGE
3441 BLINKB: 0       ;CLOCK QUEUE BLOCK
3442         -1
3443         JRST BLNKBR
3444 AIDPCP: 0       ;USER LOCN WHERE TO STORE BACK PC IF NECC
3445 CSCALE: 0       ;SCALE FOR CHR WRDS
3446 ISCALE: 0       ;SCALE FOR INCREMENT
3447 VSCALE: 0       ;SCALE FOR VECTOR WDS
3448 DWDL:   0       ;14 BIT COOR OF LH 340
3449 DWDB:   0       ;14 BIT COOD OF BOT 340
3450 DEGVCF: 0       ;EDGE FLAG FOR VECT -1 UNLESS GOING AWAY
3451 DEGVCC: 0       ;COORD AT EDGE
3452 DDINCI: 0       ;-1 CURRENT INTENSITY NOT COMMITED (IN INCREMENT MODE)
3453         ;+ => 1 - => 0
3454 AISWS:  0       ;SELECT DISPLAY START MODE -1 STARTS DISPLAY AFTER IOT
3455 AIDPIC: 0       ;COORDINATES AT START OF AIDPY
3456
3457 LLTPSN: 0       ;. TO .+3 BLTED TO USER
3458 LTPCNT: 0
3459 LTPCY:  0
3460 LTPCX:  0
3461 LTPDCN: 200\SDCHN_3\DISCHN
3462
3463 LDISP:  0       ;DISPLAY LINK POINTER
3464 LMODE:  0       ;LISP LINK MODE FLAG
3465 DISOFF: -1      ;-1 IF DIS NOT IN USE OR STOPPED DUE TO FRAME HACK
3466 DTIME:  0
3467
3468 340MD:  -1      ;MODE IN WHICH DISPLAY OPEN
3469                 ;-1 NOT DISPLAYING 0 .DSTART ETC 2 AS DIS OR IDS
3470 340DMD: 0       ;0 IDS -1 DIS
3471 340XMD: 0       ;IN DIS, 0=CH 1=IMAGE
3472 DBLOAT: 0
3473 340T:   0       ;TIMER FOR DIS PAGE
3474 LUBLKP: 0       ;LAST USER BLKO PNTR SET UP AT IN LEVEL, FOR DEBUGGING
3475
3476 ;START 340 EXECPG AREA
3477
3478 A340P1: -1      ;USER ADR THAT EXEC PG SET UP FOR
3479 A340P2: -1
3480 340DA:  REPEAT N340PB,-1
3481 N340CL==.-A340P1        ;THIS BLOCK MUST BE CONSEC
3482 340DP:  0       ;0=> N30PB-1 PNTR TO DATA PGS
3483 340PP:  0       ;PNTR TO 340P1 OR P2 ALTNERATELY
3484
3485 DPAP:   400000+340P1*2000(A)    ;EXEC ADR TO REF PAGE
3486         400000+340P2*2000(A)
3487 DDAD:   REPEAT N340PB, 400000+<DPG0+.RPCNT>*2000(A)
3488
3489 DPEP:   .340P1+EXEUMP   ;BYTE PNTR TO EXEC MAP PAGE ENTRY
3490         .340P2+EXEUMP
3491 DDEP:   REPEAT N340PB, CONC .DPG,\.RPCNT,+EXEUMP
3492
3493 DPBS:   BLOCK 8 ;SAVE PAGE BOX AT PI DIS LVL
3494
3495 DROOT:  0       ;DIS RESTART POINTER TO LOSER CORE
3496 DBLKOP: 0       ;TEMP DIS BLKO PTR
3497 LDBLKP: 0       ;LAST
3498 DISON:  0       ;-1 IF DIS STOPPED AFTER SPECIAL INT OR BLKO OVERFLOW
3499                 ;IE RESTART AFTER PASSAGE OF TIME
3500 DISDIE: 0       ;0      ;-1 IF DIS HASNT DIED
3501 DISTPR: 0       ;-1 TO TURN OFF DISPLAY
3502 IDBLKP: 0       ;BLKO PNTR IF IN INTERP DISPLAY MODE
3503 NDSFMS: -1      ;-1 NOT HACKING FRAME HACK ELSE NUMBER OF FRAMES REMAINING
3504 DISNTO: 0       ;# TIMES DIS OR IDS OPEN
3505 DWDS:   0       ;- # WDS SENT TO DIS-EWRT PER TRIP THRU SRECYC
3506                 ;RESET TO MDISWD EVERY 1/30
3507                 ;IF <0 DISPLAY STOPS FOR 5 SEC -300.->DTIME
3508
3509 DISCHS: 0       ;LENGTH OF LINE IN CURRENT SIZE
3510 DISCHC: 0       ;-# CHR POS REMAINING
3511 DISLNL: 0       ;# OF LINES WILL FIT CURRENT SIZE
3512 DISLNS: 0       ;# LINES REMAINING
3513 BBLK
3514 \f
3515 DEFINE LC A
3516 A,,DISLC
3517 TERMIN
3518
3519 DEFINE UC A
3520 DISUC,,A
3521 TERMIN
3522
3523 DEFINE AC A
3524 A,,A
3525 TERMIN
3526
3527
3528
3529 ADISCR: MOVE I,DISCHS
3530         MOVNM I,DISCHC
3531         MOVEI I,34
3532         JRST POPJ1
3533
3534 DISALF: SOS DISLNS
3535         MOVEI I,33
3536         JRST POPJ1
3537
3538 DSATB:  MOVEI I,40      ;B
3539         PUSHJ P,AIDC4B
3540         LDB I,[300,,DISCHC]
3541         SKIPG DISCHC
3542         JUMPN I,DSATB
3543         JRST POPJ2
3544
3545 DISBLB: MOVEI I,50      ;DOWN ARROW
3546         PUSHJ P,AIDC4B
3547         TRO A,100       ;CONVERT TO UC LETTER
3548 DISUC:  SKIPA I,[HRRZ I,35(A)]  ;SWITCH TO UC
3549 DISLC:  MOVE I,[HLRZ I,36(A)]   ;SWITCH TO LC
3550         PUSHJ P,AIDC4   ;STORE CASE CODE
3551         HLLM I,AIDC1
3552         POPJ P,
3553
3554 ADISBS: MOVEI I,72      ;BACKSPACE
3555         SOS DISCHC
3556         JRST POPJ1
3557
3558 DISRUB: MOVEI I,"X&77   ;LC X
3559         PUSHJ P,AIDC4
3560         MOVEI I,72      ;340 BACKSPACE
3561         PUSHJ P,AIDC4
3562         MOVEI A,"O      ;YES, A
3563         POPJ P, ;LOOP BACK
3564
3565 DISTBL: POPJ2,,POPJ2    ;IGNORE 0
3566         REPEAT 6,LC DISBLB
3567         LC 63   ;BELL
3568         LC ADISBS
3569         AC DSATB
3570         AC DISALF
3571         LC DISBLB
3572         LC DISBLB
3573         AC ADISCR
3574         REPEAT 33-16,LC DISBLB
3575         LC 47   ;ALT MD (RT ARROW)
3576         REPEAT 4,LC DISBLB
3577         AC 40
3578         REPEAT 133-41,UC <.-DISTBL>&77
3579         LC 53
3580         LC 52   ;BACKSLASH
3581         LC 54
3582         LC 100+67
3583         LC 60
3584         LC 100+66
3585         REPEAT 173-141,LC <.-DISTBL-140>
3586         LC 55
3587         LC 62   ;VERTICAL BAR=174
3588         LC 56
3589         LC 43   ;TILDE=176
3590         LC DISRUB
3591 IFN .-DISTBL-200,PRINTX /DISTBL LOSS/
3592
3593
3594 DINCT:  10
3595         2
3596         14
3597         3
3598         12
3599         16
3600         17
3601         13
3602
3603
3604
3605 REPEAT NDOPL, CONC AIER,\.RPCNT+1,:     JSP D,AIER
3606
3607 AIER:   HRRZ R,UUAC(U)
3608         ADDI R,IOCHNM(U)
3609         MOVEI D,1+1-AIER1(D)
3610         LSH D,6+18.
3611         IORM D,IOCHST-IOCHNM(R)
3612         MOVE T,AIDPCP
3613         UMOVEM C,(T)
3614         JRST IOCERR
3615 ]
3616 \f
3617 IFN VIDP,[
3618 ;
3619 SUBTTL  NEW VIDISECTOR ROUTINES
3620 ;
3621 TVCO:   HLRZ D,C
3622         SKIPA Q,[TVCOBK]
3623 NVIDI:  MOVEI Q,NVDOBK
3624         PUSH P,R
3625         PUSH P,[NVIDI2]
3626         JRST STDOP1
3627
3628 NVIDI2: JRST POPAJ
3629         POP P,R
3630         PUSHJ P,NVDGET
3631         JRST NVIDI3
3632 NVIDI1: MOVEM A,(R)
3633         CAIN Q,TVCOBK
3634         AOS NTVCOS
3635         CAIN Q,TVCOBK
3636         TLNE C,1        ;ONLY DO IF TVC OUTPUT OPEN
3637         PUSHJ P,TVCNOS
3638         JRST POPJ1
3639
3640 NVIDI3: PUSHJ P,OPNL25
3641         JRST NVDCLS
3642
3643 NVDOBK: 1,,NVDUSR
3644         NVIDOP,,BNVIDO
3645
3646 BNVIDI: JSP Q,WRDBT
3647 NVIDIT: SKIPGE NVDIFL
3648         PUSHJ P,UFLS
3649         UMOVE B,(C)
3650         MOVEM B,NVDCOR
3651         CONO PI,OMXOFF
3652         SETOM NVDIFL
3653         PUSHJ P,NVDVS1  ;TURNS OMPCH ON
3654         SKIPGE NVDIFL
3655         PUSHJ P,UFLS
3656         MOVE B,NVDCOR
3657         UMOVEM B,(C)
3658         POPJ P,
3659 \f
3660 RNVDIB: JSP Q,WRDBT
3661 RNVDIU: SKIPN NVDCNT    ;TVC INPUT
3662         JRST RNVDO2
3663         XCTR XRW,[MOVES (C)]    ;MAKE SURE GOING TO WIN
3664         MOVE T,NVDOPT
3665         CAMN T,NVDVPT
3666         PUSHJ P,UFLS
3667         MOVE B,(T)
3668         SOS NVDCNT
3669         UMOVEM B,(C)
3670         AOS T,NVDOPT
3671         CAIL T,NVDBUF+NVDLNG
3672         MOVEI T,NVDBUF
3673         MOVEM T,NVDOPT
3674         POPJ P,
3675
3676 TVCOBK: 3,,NVDUSR
3677         DNVDIU,,DNVDOU
3678         DNVDIB,,DNVDOB
3679
3680 TVCCLS: SOSGE NTVCOS
3681         PUSHJ P,TVCINI  ;TRY TO AVOID GARBAGE PNT PART WAY VIDISECTED
3682 NVDCLS: SOSGE NVDUSE
3683         PUSHJ P,VIDFLS
3684         POPJ P,
3685
3686 TVCNOS: LDB A,[251700,,C]       ;TVC OPEN ROUTINE
3687 TVCN1:  TRZ A,703000    ;DONT LET LOSER FOOL AROUND
3688         IORI A,NVDCHN_15.
3689         LDB B,[20300,,A]        ;DCO
3690         JUMPE B,TVCO3
3691         CAIN B,7
3692         JRST TVCO6      ;DCO DISABLED FOR DCL=7
3693         IMUL B,[-100]
3694 TVCO4:  ADDI B,1300
3695 TVCO7:  MOVEM B,NVDDK   ;DARK VALUE CORRECT FOR DCO
3696         MOVE TT,A
3697         XOR TT,TVCONO
3698         TRNE T,340
3699         JRST TVCO5      ;CHANGE IN VIDI SELECTION STATUS
3700 TVCO5A: MOVEM A,TVCONO
3701         POPJ P,
3702 \f
3703 TVCO3:  LDB T,[200,,A]  ;CONF
3704         CAIN T,3
3705         MOVNI B,100     ;IF CONF=3 & DCO=0 VALUE 100 LESS THAN PREDICTED ABOVE
3706         JRST TVCO4
3707
3708 TVCO5:  TRZ A,700000    ;CLEAR CHNL OUT OF TVCONO
3709         CONO NVDX,(A)   ;START RLYS
3710         MOVEI T,2
3711         SKIPL TVQBLK+1  ;WAIT IF PREV RQ NOT SATISFIED
3712         PUSHJ P,UFLS
3713         PUSHJ P,CLQADD  ;RQ LATER TRANSFER TO VIDD1
3714         TVQBLK
3715         JRST TVCO5A
3716
3717 TVCO6:  LDB T,[200,,A]  ;CONF
3718         IMUL T,[-200]   ;CALCULATE WHEN OVF HAPPENS
3719         ADDI T,2000
3720         JRST TVCO7
3721
3722 TVCINI: CONO PI,OMXOFF
3723         SETZM NVDCNT
3724         MOVE T,NVDIPT
3725         MOVEM T,NVDVPT
3726         MOVEM T,NVDOPT
3727         MOVE T,NVDBKR
3728         CAIN T,1
3729         SETOM NVDBKR
3730         JRST OMXONJ
3731
3732 VIDFLS: SKIPL NVDUSE    ;SKIP IF OPENS ON NVD, .VSCAN
3733         POPJ P,
3734         DATAO DSDEV,[DSNVID]    ;DEASSIGN VIDI
3735         SETOM NVDUSR
3736         POPJ P,
3737
3738 NVDGET: CONO NVDX,@TVCONO       ;TRY TO ASSIGN BAT
3739         CONI NVDX,TT
3740         JUMPE TT,CPOPJ
3741         JRST POPJ1
3742
3743
3744 NVDBRK: MOVE T,NVDBKR
3745         JRST NVTAB(T)   ;DISPATCH ON REASON FOR BREAK
3746
3747         JRST NEWORK     ;STARTUP OF SOME NEW FUNCTION
3748 NVTAB:  JRST SCNB1      ;NEW VSCAN POINT
3749         JRST TVB1       ;NEW TVC POINT
3750         JRST INVD1      ;NEW NVD PNT
3751 ;       JRST DRET       ;NEW DAEMON POINT
3752 \f
3753 TVB1:   DATAI NVDX,@NVDVPT      ;READ IN OF TV POINT
3754         CONI NVDX,T
3755         LSH T,-11.
3756         DPB T,[220200,,@NVDVPT] ;READ ALL RELAVENT INFO FROM BAT
3757         TRNE T,3
3758         JRST TVB2       ;DCO OR OVFL
3759         MOVE T,@NVDVPT
3760         ANDI T,1777
3761         CAMLE T,NVDDK
3762         JRST TVB2       ;DUE TO NOISE/PROB DARKER THAN DCO
3763 TVB3:   AOS T,NVDVPT
3764         CAIL T,NVDBUF+NVDLNG
3765         MOVEI T,NVDBUF
3766         MOVEM T,NVDVPT  ;INCREMENT TO NEXT POINT
3767         JRST NEWORK
3768
3769 TVB2:   MOVE T,NVDDK
3770         DPB T,[1200,,@NVDVPT]
3771         DPB T,[240600,,@NVDVPT] ;PUT IN FLOATING PART
3772         LSH T,-6
3773         DPB T,[330400,,@NVDVPT]
3774         JRST TVB3
3775
3776 TVNEXT: MOVE T,NVDVPT
3777         CAMN T,NVDIPT
3778         JRST TVCFIN
3779         MOVEI T,1       ;SET UP FOR NEXT TV POINT
3780         MOVEM T,NVDBKR
3781         MOVE T,NVDVPT
3782         HLRZ T,@NVDVPT
3783         CONO NVDX,@TVCONO
3784         DATAO NVDX,T
3785         EXCH T,VIDXOL
3786         SUB T,VIDXOL
3787         MOVMM T,VIDTEM
3788         HRRZ T,@NVDVPT
3789         DATAO NVDY,T
3790         EXCH T,VIDYOL
3791         SUB T,VIDYOL
3792         MOVMS T
3793         CAMGE T,VIDTEM
3794         MOVE T,VIDTEM
3795         CAIL T,1000
3796         JRST TVB5
3797         DATAO NVDT,[-4]
3798 NVDBR4: JRST OMXRET
3799
3800 TVB5:   TLC T,232000    ;CALCULATE SETTLING TIME
3801         FAD T,T
3802         LDB T,[330400,,T]
3803         DATAO NVDT,SETLL-10.(T)
3804         JRST NVDBR4
3805 \f
3806 SETLL:          ;SETTLING TIME IN 10 MICROSEC
3807         -6      ;DEFLECTING 512 - 1023 
3808         -10     ;1024 - 2047
3809         -16     ;2048 - 4095
3810         -26     ;4096 - 8191
3811         -45     ;8192 - 16383
3812         -70     ;16384
3813
3814 RNVDOB: JSP Q,WRDBT
3815 RNVDOU: MOVEI T,NVDLNG-1        ;TO PREVENT HANGUP AT PI ON WRAPAROUND
3816         CAMG T,NVDCNT
3817         JRST RNVDO2
3818         UMOVE B,(C)
3819         MOVEM B,@NVDIPT
3820         AOS NVDCNT
3821         AOS T,NVDIPT
3822         CAIL T,NVDBUF+NVDLNG
3823         MOVEI T,NVDBUF
3824         MOVEM T,NVDIPT
3825         CONO PI,OMXOFF
3826         SETOM TVFLG
3827 NVDVS1: MOVE T,TVCONO
3828         SKIPGE NVDBKR
3829         CONO NVDX,2000(T)
3830         JRST OMXONJ
3831
3832 RNVDO2: POP P,T ;CALLED FROM RNVDI ALSO
3833         ANDI T,-1
3834         CAIE T,WRDBRT
3835         JRST IOCER9
3836         POPJ P,
3837
3838 NEWORK:;        SKIPGE DAEMFL
3839 ;       JRST DNEXT
3840         SKIPL SCNUSR    ;DEFLECT FOR NEW VSCAN POINT
3841         JRST SCNB2
3842         SKIPGE NVDIFL   ;NVD
3843         JRST INVD2
3844         SKIPGE TVFLG    ;DEFLECT FOR NEW TVC POINT
3845         JRST TVNEXT
3846         SETOM NVDBKR    ;NO MORE CROCKS FOR VIDISECTOR TO DO
3847         MOVE T,TVCONO
3848         TRZ T,703000    ;SAVE STATE OF VIDI SELECT
3849         CONI NVDX,A
3850         CONO NVDX,(T)
3851         SKIPN A
3852         DATAO DSDEV,[DSNVID]    ;RE DEASSIGN VIDI IF WAS DEASSIGNED 
3853                         ;(CONO DID CLEAR PIA, DONE, AND SET MODE FLOPS THO)
3854         JRST OMXRET
3855
3856 TVCFIN: SETZM TVFLG
3857         JRST NEWORK
3858 \f
3859 INVD1:  DATAI NVDX,NVDCOR
3860         CONI NVDX,T
3861         LSH T,-11.
3862         DPB T,[220200,,NVDCOR]
3863         SETZM NVDIFL
3864         JRST NEWORK
3865
3866 INVD2:  MOVEI T,2
3867         MOVEM T,NVDBKR
3868         CONO NVDX,@TVCONO
3869         HLRZ T,NVDCOR
3870         DATAO NVDX,T
3871         HRRZ T,NVDCOR
3872         DATAO NVDY,T
3873         DATAO NVDT,[-7]
3874         JRST NVDBR4
3875 \f
3876 SUBTTL  NEW VIDISECTOR ROUTINES - .VSTST
3877
3878 AVSTST: UMOVE A,(J)
3879         CAME U,NVDUSR
3880         JRST AVST4
3881         JUMPE A,AVST1   ;READ CURRENT STATE
3882         JUMPL A,AVST2
3883 AVST3:  SKIPL SCNUSR    ;HANGUP TILL VSCAN FINISHED
3884         PUSHJ P,UFLS
3885 AVST2:
3886 SCNSTP: CONO PI,OMXOFF  ;FLUSH VSCAN ENTIRELY
3887         SKIPGE SCNUSR
3888         JRST OMXONJ     ;ALREADY FINISHED
3889         SETOM SCNUSR
3890         SOSGE NVDUSE
3891         SETOM NVDUSR
3892         SKIPN NVDBKR    ;IGNORE VSCAN POINT IN PROGRESS IF ANY
3893         SETOM NVDBKR
3894 VSLS2:  PUSH P,A
3895         PUSH P,B
3896         PUSH P,W
3897         MOVSI B,-1
3898         MOVSI W,-2
3899 SCNS2:  LDB A,VEXT(W)
3900         TRNN A,600000
3901         JRST SCNS4
3902         ANDI A,PMRCM
3903         ADDM B,MMSWP(A)
3904 SCNS4:  MOVEI A,0
3905         DPB A,VEXT(W)
3906         AOBJN W,SCNS2
3907         MOVE A,USER
3908         SPM UPGML(A)
3909         LPMR UPGML(A)
3910         POP P,W
3911         POP P,B
3912         POP P,A
3913         PUSHJ P,VIDFLS
3914         JRST OMXONJ
3915
3916 AVST4:  JUMPE A,ILUUO
3917         POPJ P,
3918
3919 AVST1:  SKIPGE SCNUSR
3920         POPJ P,
3921         MOVE A,NVDPTR
3922         SUBI A,400000+VSB1*2000
3923         JRST APTUAJ
3924
3925 ;CHECK TO SEE IF MEM PROTECT STILL OK
3926 SCNACR: CAMN U,SCNUSR
3927         POPJ P,
3928         AOS (P)
3929         JRST SCNSTP
3930
3931 ;STOP SCAN
3932 SCNSTC: CONO NVDX,0
3933         POPJ P,
3934
3935 ;RESTART SCAN AFTER STOP FOR SHUFFLING
3936 SCNRST: CONO NVDX,NVDCHN_17
3937         POPJ P,
3938
3939 \f
3940 SUBTTL  NEW VIDISECTOR ROUTINES - .VSCAN
3941
3942 AVSCAN: XCTR XRW,[MOVES (C)]
3943         XCTR XRW,[MOVES 12(C)]
3944         SKIPL SCNUSR
3945         PUSHJ P,UFLS
3946         CONO PI,CLKOFF
3947         CAME U,NVDUSR
3948         SKIPGE NVDUSE
3949         AOSA NVDUSE
3950         JRST ILUUO
3951         MOVEM U,NVDUSR
3952         CONO PI,CLKON
3953         PUSHJ P,NVDGET
3954         JRST VSLOS
3955 A.VS1:  SETZM BATMXA
3956         XCTR XRW,[HLRZ A,2(C)]
3957         MOVEM A,NVDCNX
3958         MOVEM A,NVDCN3
3959         XCTR XRW,[HRRZ A,2(C)]
3960         MOVEM A,NVDCNY
3961 IRPS XY,,X Y P X Y P,A12,,1 1 1 2 2 2,N,,3 6 11 4 7 12,YX,,X X X Y Y Y
3962         UMOVE A,N(C)
3963         IDIV A,NVDCN!YX
3964         MOVEM A,BATD!XY!A12
3965 TERMIN
3966 IRP XY,,[P,X,Y]ADR,,[[[1,,]],5(C),10(C)]
3967         MOVE A,BATD!XY!1
3968         ADD A,BATD!XY!2
3969         ASH A,-1
3970 IFE .IRPCNT,    ADD A,ADR
3971 IFN .IRPCNT,    XCTR XRW,[ADD A,ADR]
3972         MOVEM A,BAT!XY!1
3973         MOVEM A,BAT!XY!2
3974         IFN .IRPCN,[IDIV A,BATP1
3975         MOVEM A,NVID!XY]
3976 TERMIN
3977         XCTR XRW,[HRRZ B,1(C)]
3978         LDB A,[121000,,B]
3979         CAIL A,376
3980         JRST VSLOS
3981         MOVEI W,0
3982         PUSHJ P,VSMS1
3983         MOVEI W,1
3984         PUSHJ P,VSMS1
3985         SPM UPGML(U)
3986         LPMR UPGML(U)
3987         HRRZ R,B
3988         ANDI R,776000
3989         ADDI R,4000-2000
3990         XCTR XRW,[HLRO D,1(C)]
3991         MOVE A,NVDCNX
3992         IMUL A,NVDCNY
3993         JUMPLE A,VSLOS  ;SIZE OF RASTOR
3994         MOVNS D         ;PLUS COUNT
3995         CAMLE A,D
3996         JRST VSLOS      ;WON'T FIT
3997         CAML A,R
3998         JRST VSLOS      ;WON'T FIT IN EXEC PGS
3999         ADD A,B
4000         MOVEM A,BATMXA
4001         LDB A,[121000,,A]
4002         PUSHJ P,UPLC
4003         LDB A,T
4004         TRC A,600000
4005         TRCE A,600000   ;SKIP ON R/W/F
4006         JRST VSLOS      ;TOP PAGE LOSES
4007         ANDI B,1777
4008         ADDI B,400000+VSB1*2000
4009         MOVEM B,NVDPTR
4010         XCTR XRW,[HRRZ A,(C)]
4011         PUSHJ P,TVCN1
4012         MOVE A,[JRST SCNG1]
4013         MOVEM A,SCNB1A
4014         CONO PI,OMXOFF
4015         MOVEM U,SCNUSR
4016         MOVE A,TVCONO
4017         SKIPGE NVDBKR
4018         CONO NVDX,2000(A)
4019         CONO PI,OMXON
4020         XCTR XRW,[SKIPL (C)]
4021         POPJ P,
4022         JRST AVST3
4023
4024 VSLS3:  PUSHJ P,LSWPOP
4025 VSLOS:  PUSHJ P,VSLS1
4026         JRST ILUUO
4027
4028
4029 VPGLOS: PUSHJ P,VSLS1
4030         PUSHJ P,TPFLT
4031         JRST UUOTRO
4032
4033 VSLS1:  SOSGE NVDUSE
4034         SETOM NVDUSR
4035         CONO PI,OMXOFF
4036         JRST VSLS2
4037
4038 VSMS1:  PUSHJ P,SWTL
4039         CIRPSW
4040         LDB A,[121000,,B]
4041         ADD A,W
4042         MOVEM A,VSMPG
4043         PUSHJ P,UPLC
4044         CONO PI,CLKOFF
4045         LDB A,Q
4046         JUMPE A,VSMS2   ;NO ACCESS
4047         CAIN A,-1
4048         JRST VSLS3
4049         LDB A,T
4050         TRNN A,600000
4051         JRST VSMS3      ;SWAPPED OUT
4052         TRNN A,400000
4053         JRST VSLS3      ;RD ONLY
4054         TRO A,200000
4055 VSMS2:  DPB A,T         ;CHANGE R/W/F TO R/W
4056         LDB TT,VEXT(W)
4057         DPB A,VEXT(W)
4058         MOVSI Q,1
4059         ANDI A,PMRCM
4060         SKIPE A
4061         ADDM Q,MMSWP(A)
4062         JUMPE TT,VSLS4
4063         ANDI TT,PMRCM
4064         MOVSI Q,-1
4065         ADDM Q,MMSWP(TT)
4066 VSLS4:  PUSHJ P,LSWPOP
4067         JRST CLKONJ
4068
4069 VSMS3:  PUSHJ P,LSWPOP
4070         MOVE A,VSMPG
4071         SOSGE NVDUSE
4072         SETOM NVDUSR
4073         PUSHJ P,CWAIT
4074         SKIPL VIDSWI
4075         MOVEM U,VIDSWI
4076         MOVEM A,VIDSPG
4077         SKIPL VIDSWI
4078         PUSHJ P,UFLS
4079         SUB P,[1,,1]
4080         JRST AVSCAN
4081 \fSCNB1: DATAI NVDX,@NVDPTR
4082         CONI NVDX,T
4083         LSH T,-11.
4084         DPB T,[220200,,@NVDPTR]
4085         TRNE T,3
4086         JRST SCNB1C     ;OVF OR DCO?
4087         MOVE T,@NVDPTR
4088         ANDI T,1777
4089         CAMG T,NVDDK    ;OR VALUE GREATER THAN DCO LEVEL
4090         JRST NEWORK
4091 SCNB1C: MOVE T,NVDDK
4092         DPB T,[1200,,@NVDPTR]
4093         DPB T,[240600,,@NVDPTR] ;PUT IN FLOATING PART
4094         LSH T,-6
4095         DPB T,[330400,,@NVDPTR]
4096         JRST NEWORK
4097
4098 SCNB2:  CONO NVDX,@TVCONO       ;SETUP FOR NEXT VSCAN POINT
4099         DATAO NVDX,NVIDX
4100         DATAO NVDY,NVIDY
4101         MOVE T,NVIDX
4102         EXCH T,VIDXOL
4103         SUB T,VIDXOL
4104         MOVMM T,VIDTEM
4105         MOVE T,NVIDY
4106         EXCH T,VIDYOL
4107         SUB T,VIDYOL
4108         MOVMS T
4109         CAMGE T,VIDTEM
4110         MOVE T,VIDTEM
4111         CAIL T,1000
4112         JRST SCNT5
4113         DATAO NVDT,[-4]
4114 SCNT4:  CLEARM NVDBKR
4115         EBLK
4116 SCNB1A: JRST SCNG1      ;OR AOS (AOSA) NVDPTR
4117         BBLK
4118         JRST SCNS1      ;HOMO LINEAR FROB
4119 SCNB1B: SOSG NVDCNX     ;SIMPLE MINDED
4120         JRST SCNB3
4121 IRPC X,,XY
4122         MOVE T,BATD!X!1
4123         ADDB T,BAT!X!1
4124         HLRZM T,NVID!X
4125 TERMIN
4126 SCNBX:  JRST OMXRET
4127
4128 SCNT5:  TLC T,232000    ;CALCULATE SETTLING TIME
4129         FAD T,T
4130         LDB T,[330400,,T]
4131         DATAO NVDT,SETLL-10.(T)
4132         JRST SCNT4
4133
4134 SCNB3:  SOSG NVDCNY
4135         JRST SCNB4
4136 IRPC X,,XY
4137         MOVE T,BATD!X!2
4138         ADDB T,BAT!X!2
4139         MOVEM T,BAT!X!1
4140         HLRZM T,NVID!X
4141 TERMIN
4142
4143         MOVE T,NVDCN3
4144         MOVEM T,NVDCNX
4145         JRST SCNBX
4146
4147 SCNB4:  SKIPL NVDCNY    ;WAIT FOR LAST DATAO TO RETURN A POINT
4148         JRST SCNBX
4149         SETOM SCNUSR
4150         SOSL NVDUSE
4151         JRST NEWORK
4152         SETOM NVDUSR
4153         DATAO DSDEV,[DSNVID]    ;DEASSIGN BAT
4154         MOVSI B,-1
4155         MOVSI W,-2
4156 SCNB4B: LDB A,VEXT(W)
4157         TRNN A,600000
4158         JRST SCNB4A
4159         ANDI A,PMRCM
4160         ADDM B,MMSWP(A)
4161 SCNB4A: MOVEI A,0
4162         DPB A,VEXT(W)
4163         AOBJN W,SCNB4B
4164         JRST NEWORK
4165
4166 SCNS1:  MOVEM U,NVDTMU
4167         SOSG NVDCNX
4168         JRST SCNS3
4169 IRPC X,,PXY
4170         MOVE T,BATD!X!1
4171         ADDB T,BAT!X!1
4172         IFN .IRPCN,[IDIV T,BATP1
4173         MOVEM T,NVID!X]
4174 TERMIN
4175
4176 SCNBX1: MOVE U,NVDTMU
4177         JRST SCNBX
4178
4179 SCNS3:  SOSG NVDCNY
4180         JRST SCNB4
4181 IRPC X,,PXY
4182         MOVE T,BATD!X!2
4183         ADDB T,BAT!X!2
4184         MOVEM T,BAT!X!1
4185         IFN .IRPCN,[IDIV T,BATP1
4186         MOVEM T,NVID!X]
4187 TERMIN
4188         MOVE T,NVDCN3
4189         MOVEM T,NVDCNX
4190         JRST SCNBX1
4191
4192 SCNG1:  MOVSI T,(AOSA)
4193         SKIPN BATDP1
4194         SKIPE BATDP2
4195         MOVSI T,(AOS)
4196         HRRI T,NVDPTR
4197         MOVEM T,SCNB1A
4198         TLNN T,(AOSA-AOS)
4199         JRST SCNS1
4200         JRST SCNB1B
4201
4202 \f
4203 SUBTTL  NEW VIDISECTOR ROUTINES
4204
4205 EBLK
4206
4207 NVDIPT: NVDBUF  ;POINTER TO INSERT IN BUF
4208 NVDVPT: NVDBUF  ;POINTER TO WORD  BEING VIDISECTED
4209 NVDOPT: NVDBUF  ;POINTER TO WITHDRAW FROM BUF
4210 NVDCNT: 0       ;NUMBER PTS IN BUF
4211 NVDBUF: BLOCK NVDLNG
4212 VIDSTRT:        0
4213 LBTCNO: 0       ;LAST CONO TO BAT
4214 NVDIFL: 0       ;+=> RQ TO READ NVD PNT
4215 NVDCOR: 0       ;NVD DEV, COORDINATES TO PI, READ DATA FROM PI
4216 NTVCOS: -1      ;# TVC OPENS
4217
4218 IRPC X,,XYP
4219         IRPC N,,12
4220                 BAT!X!!N:       0
4221                 BATD!X!!N:      0
4222         TERMIN
4223 TERMIN
4224
4225 NVDCNX: 0
4226 NVDCNY: 0
4227 NVDCN3: 0
4228 NVIDX:  0
4229 NVIDY:  0
4230 BATMXA: 0
4231 NVDPTR: 0
4232 NVDTMU: 0
4233 SCNUSR: -1      ;USER IN CURRENT .VSCAN, -1 .VSCAN FREE
4234 SCNREL: 0
4235 TVCONO: 0       ;CONO FOR TVC DEVICE AND VSCAN (NORM HAS CHNL BUT NOT IF IN VIDDLY)
4236 NVDDK:  0       ;-1=>VID VALUE CORRESP TO DCO
4237 TVFLG:  0       ;-1=>TVC WORK IN PROGRESS
4238 NVDBKR: -1      ;REASON LAST POINT READ IN, DISPATCH ADDRESS FOR INTS
4239                         ;-1 NONE  0 VSCAN  1 TVC  2 NVD
4240 TVQBLK: 0       ;CLOCK QUEUE BLOCK
4241         -1
4242         JRST VIDD1
4243 VIDXOL: 0       ;OLD VIDI CORDS
4244 VIDYOL: 0       ;OLD VIDI CORDS
4245 VIDTEM: 0       ;LARGEST DELTA
4246 VSMPG:  0
4247 VEXT:   .VSB1+EXEUMP
4248         .VSB2+EXEUMP
4249
4250 BBLK
4251
4252 VIDD1:  MOVEI A,NVDCHN_15.
4253         IORB A,TVCONO   ;RESTORE CHNLS TO TVCONO
4254         CONO NVDX,2000(A)       ;CAUSE EVENTUAL VIDI INT TO SEE IF ANYTHING YO DO
4255         JRST CLQRET     ;RETURN TO CLOCK ROUTINE
4256 ]
4257 \f
4258 SUBTTL  VIDEO SWITCH AND VIDEO BUFFER ROUTINES
4259
4260 ;SYSTEM CALLS FOR HACKING THE VIDEO SWITCH AND VIDEO BUFFERS.
4261
4262 IFE N11TYS,[
4263 NVDBF==OPNL1
4264 NVIDSW==OPNL1
4265 ]
4266
4267 IFN N11TYS,[
4268
4269 VBDFLS: PUSH P,B
4270         PUSH P,T
4271         PUSH P,I
4272         PUSH P,Q
4273         PUSH P,C
4274         MOVSI B,-MXVBN  ;FLUSH ALL BUFFERS ASSIGNED TO JOB IN U
4275 VBDFL3: CAMN U,VBAST(B)
4276          JRST VBDFL1
4277 VBDFL2: AOBJN B,VBDFL3
4278         SKIPE NVDBA(U)
4279          JRST 4,.
4280 VBDFL6: POP P,C
4281         POP P,Q
4282         POP P,I
4283         POP P,T
4284         POP P,B
4285         POPJ P,
4286
4287 VBDFL1: JSP Q,11CM1
4288          JRST VBDFL4    ;LOST..
4289         PUSH P,B
4290         JSP Q,NVDBU2    ;FLUSH BUFFER
4291          JFCL           ;PDP11 TIMED OUT
4292          JFCL           ;PDP11 GAVE NEGATIVE REPLY
4293         POP P,B
4294         JRST VBDFL2
4295
4296 VBDFL5: CAMN U,VBAST(B)
4297 VBDFL4:  SETOM VBAST(B)
4298         AOBJN B,VBDFL5
4299         CLEARM NVDBA(U)
4300         JRST VBDFL6
4301
4302 ;VIDBUF SYSTEM CALL - ASSIGN OR DEASSIGN VIDEO BUFFERS
4303 NVDBF:  JSP Q,11CM1     ;SET UP ACS, LOCK SWITCH.
4304          JRST OPNL7     ;LOST
4305         JUMPGE A,NVDBU1 ;JUMP IF DEASSIGN COMMAND
4306         MOVSI C,2_<16.+4-18.>
4307         JSP Q,NVDCMD    ;TELL PDP11 TO ASSIGN BUFFER.
4308          JRST OPNL7     ;PDP11 TIMED OUT
4309          JRST OPNL6     ;PDP11 GAVE NEGATIVE REPLY
4310         HRRZ A,C
4311         CAIL A,MXVBN
4312          JRST OPNL6     ;PDP11 HAS MORE VIDEO BUFFERS THAN WE DO
4313         AOS NVDBA(U)    ;WON
4314         MOVEM U,VBAST(A)
4315         JRST POPJ1
4316
4317 NVDBU1: MOVE B,A        ;DEASSIGN VIDEO BUFFER
4318         CAIGE B,MXVBN   ;CHECK THAT VIDEO BUFFER IS LEGAL
4319          CAME U,VBAST(B) ;AND BELONGS TO THIS JOB
4320           JRST OPNL33   ;NOT LEGAL VIDEO BUFFER NO
4321         JSP Q,NVDBU2    ;TELL PDP11 TO FREE THE BUFFER.
4322          JRST OPNL7     ;TIMED OUT
4323          JRST OPNL23    ;GAVE NEG REPLY
4324         JRST POPJ1      ;WON
4325 \f
4326 EBLK
4327 ;TABLE OF VIDEO BUFFER ASSIGNMENTS.
4328 VBAST:  REPEAT MXVBN,-1 ;-1 => FREE, ELSE USR IDX.
4329 11CVSR: -1 ? 0          ;SWITCH TO LOCK TO PROTECT 10-TO-11 COMMAND VARS.
4330 BBLK
4331
4332 ;VIDSW SYSTEM CALL - SET VIDEO SWITCH.
4333 NVIDSW: JSP Q,11CM1     ;LOCK SWITCH, ETC.
4334          JRST OPNL7
4335         LSH A,4.+16.
4336         LSH B,4.+16.
4337         MOVEM A,1(I)
4338         MOVEM B,2(I)
4339         MOVSI C,1_<16.+4-18.>
4340         JSP Q,NVDCMD
4341          JRST OPNL7     ;TIMED OUT
4342          JRST OPNL23    ;PDP11 DIDN'T FEEL LIKE SWITCHING THE SWITCH
4343         JRST POPJ1
4344
4345 NVDBU2: SETOM VBAST(B)  ;GIVE DEASSIGN COMMAND TO 11
4346         LSH B,4.+16.
4347         MOVEM B,1(I)    ;WHICH ONE TO DEASSIGN
4348         SOSGE NVDBA(U)
4349          JRST 4,.
4350         MOVSI C,3_<16.+4-18.>
4351 ;GIVE COMMAND IN C TO PDP11, WAIT, RETURN (Q) IF 11 TIMES OUT,
4352 ;1(Q) IF 11 GIVES NEGATIVE REPLY AND 2(Q) IF SUCESSFUL
4353 ;IN ANY CASE, SWITCH IS UNLOCKED
4354 ;ASSUMES ARGS ALREADY SET UP, AND 11CVSR LOCKED.
4355 NVDCMD: MOVEM C,(I)     ;STORE COMMAND-TYPE, TELLING PDP11 TO GO.
4356 NVDCM1: CAME C,(I)
4357          JRST NVDCM2    ;IT'S FINISHED, WE WIN.
4358         SOJG T,NVDCM1   ;LOOP FOR A WHILE,
4359         PUSHJ P,LSWPOP
4360         JRST (Q)        ;FAIL - 11 TIMED OUT
4361
4362 NVDCM2: MOVE C,1(I)     ;RETURNED ARG IN CASE OF ASSIGN VIDEO BUFFER
4363         LSH C,-4.-16.
4364         SKIPGE (I)      ;PDP11 FINISHED: DID COMMAND SUCCEED?
4365          AOS Q          ;YES SKIP EXTRA TIME
4366         SETZM (I)
4367         PUSHJ P,LSWPOP
4368         JRST 1(Q)
4369
4370 ;LOCK SWITCH AND SET UP.. RETURN TO (Q) IF FAILS (SWITCH NOT LOCKED IN THAT CASE)
4371 ;RETURN TO 1(Q) IF SUCEEDS
4372
4373 11CM1:  SKIPL TT11P
4374          JRST (Q)
4375         PUSHJ P,SWTL
4376          11CVSR
4377         LDB T,[061600,,TT11HA]
4378         LDB I,[061600,,400000+TTPG0*2000(T)]
4379         ADDI I,400000+TTPG0*2000        ;I HAS 10-TO-11 COMMAND BFR ADDR.
4380         MOVSI T,1       ;# TIMES TO LOOP WAITING FOR 11 TO ACKNOWLEDGE
4381 11CM2:  SKIPG (I)
4382          JRST 1(Q)      ;11 READY FOR COMMAND.
4383         SOJG T,11CM2
4384         PUSHJ P,LSWPOP
4385         JRST (Q)        ;TIMED OUT
4386 ]
4387 \f
4388 SUBTTL  TABLET AND ROBOT CONSOLE
4389
4390 IFN TABP,[
4391
4392 ITAB:   IFE TABCLK,[
4393         SOSLE TABRTC
4394         JRST ITAB6
4395         SKIPGE TABUSR
4396         JRST ITAB7
4397         MOVE A,TABRTE
4398         MOVEM A,TABRTC
4399         CONO RBTCON,RTABC_3+TABCHN
4400 ]       IFN TABCLK,     CONO RBTCON,RTABC_3
4401         ROT A,36.*2
4402         DATAI RBTCON,A
4403         JUMPL A,ITAB    ;TRY AGAIN
4404         LDB B,[400300,,A]
4405         CAME B,TABLSZ
4406         JRST ITAB2
4407         CAIN B,7
4408         JRST ITAB3      ;PEN OUT OF CONTACT
4409         LDB B,[221400,,A]       ;X
4410         SUB B,TABLSX
4411         MOVMS B
4412         CAML B,TABDTA
4413         JRST ITAB2
4414         LDB B,[1400,,A]
4415         SUB B,TABLSY
4416         MOVMS B
4417         CAML B,TABDTA
4418         JRST ITAB2
4419 ITAB3:  AOS B,TABSMC
4420         CAIL B,77
4421         JRST ITAB2
4422 ITAB5:  IFN TABCLK,[
4423         MOVE T,TABRTE
4424         MOVEI C,TABQBK
4425         SKIPL TABUSR
4426         JRST CLQREE
4427         JRST CLQRET
4428 ]       IFE TABCLK,[
4429         JRST OMXRET
4430
4431 ITAB6:  DATAI RBTCON,A  ;FLUSH DATA
4432         JRST OMXRET
4433
4434 ITAB7:  CONO RBTCON,0
4435         JRST OMXRET
4436 ]
4437 ITAB2:  MOVE B,TABSMC
4438         DPB B,[140600,,TABLST]
4439         SETZM TABSMC
4440         HRRZM A,TABLSY
4441         LDB B,[221400,,A]
4442         MOVEM B,TABLSX
4443         LDB B,[400300,,A]
4444         MOVEM B,TABLSZ
4445         EXCH A,TABLST
4446         JUMPE A,ITAB5   ;JUST STARTING UP
4447         MOVE B,TABCC
4448         CAIL B,LTABBF
4449         JRST ITAB4      ;FULL
4450         MOVEM A,@TABIP
4451         AOS TABCC
4452         AOS B,TABIP
4453         CAIL B,TABBFE
4454         MOVEI B,TABBUF
4455         MOVEM B,TABIP
4456         JRST ITAB5
4457
4458 ITAB4:  MOVSI B,(SETZ)  ;SET DATA LOST
4459         IORM B,TABLST
4460         JRST ITAB5
4461
4462 ]
4463 \f
4464 IFN RBTCP,[
4465
4466         ;ROBOT CONSOLE READ SWITCHES
4467 ARBTC:  UMOVE A,(J)
4468         CONO PI,TABOFF
4469         CONO RBTCON,RLTSWC_3+IFE TABCLK,TABCHN
4470         ROT A,36.*2
4471         DATAO RBTCON,A
4472         ROT A,36.*2
4473         DATAI RBTCON,A
4474         CONO PI,TABON
4475         UMOVEM A,(J)
4476         POPJ P,
4477
4478 ;DATA FORM
4479 ;4.9 DATA LOST BEFORE THIS
4480 ;4.8-4.6 TAB "Z"
4481 ;4.5-4.4 USUSED
4482 ;4.3-3.1 TABLET X
4483 ;2.9-2.4 REPEAT COUNT
4484 ;2.4-1.1 TABLET Y
4485
4486 TABO:   PUSH P,[TABO1]
4487         JSP Q,STDOPN
4488         1,,TABUSR
4489         DTABUI,,DTABBI
4490
4491 TABO1:  POPJ P,         ;OPEN LOST
4492         SKIPE TABUSE    ;OPEN WON
4493         JRST POPJ1      ;NOT FIRST OPEN
4494         LDB T,[250300,,C]
4495         AOS T
4496         MOVEM T,TABRTE  ;TABLET RATE (IGNORE THIS MANY BETWEEN TAKES)
4497         LDB T,[300600,,C]
4498         MOVEM T,TABDTA  ;DELTA FOR COORD TO BE DIFFERENT
4499         PUSHJ P,TABCLR
4500 IFE TABCLK,     CONO RBTCON,RTABC_3+TABCHN
4501 IFN TABCLK,[    PUSHJ P,CLQAD1  ;START UP CLOCK LEVEL
4502         TABQBK
4503 ]       JRST POPJ1
4504
4505 BTABI:  UMOVE J,(C)     ;INITIAL AOBJN PNT
4506         JSP Q,WRDBT
4507 UTABI:  SKIPG TABCC     ;TABLET .IOT
4508         JRST TABI1      ;NO DATA AVAIL, SEE IF BEING ACCUMULATED
4509 UTABI1: MOVE A,@TABOP
4510         UMOVEM A,(C)
4511         AOS T,TABOP
4512         CAIL T,TABBFE
4513         MOVEI T,TABBUF
4514         MOVEM T,TABOP
4515         SOS TABCC
4516         POPJ P,
4517
4518 TABI1:  HRRZ T,(P)
4519         CAIN T,WRDBRT
4520         JRST TABI2
4521 TABI3:  SKIPG TABCC
4522         PUSHJ P,UFLS
4523         JRST UTABI1
4524
4525 TABI2:  XCTR XRW,[CAMN J,(H)]
4526         JRST TABI3      ;NO WDS TRANSFERRED
4527         SUB P,[1,,1]    ;RETURN TO USER SOME HAVE BEEN TRANSFERRED
4528         POPJ P,
4529
4530 TABCLR: CONO PI,TABOFF
4531         SETZM TABCC
4532         MOVEI T,TABBUF
4533         MOVEM T,TABIP
4534         MOVEM T,TABOP
4535         SETZM TABSMC
4536         SETZM TABLST
4537         CLEARM TABLSX
4538         CLEARM TABLSY
4539         CLEARM TABLSZ
4540 IFE TABCLK,     SETZM TABRTC
4541         CONO PI,TABON
4542         POPJ P,
4543 EBLK
4544
4545 TABBUF: BLOCK LTABBF
4546 TABBFE:
4547 TABOP:  TABBUF  ;OUTPUT PNTR (MP)
4548 TABIP:  TABBUF  ;INPUT PNTR (PI)
4549 TABCC:  0       ;ACTIVE WDS IN TAB BUFFER
4550 TABSMC: 0       ;COUNT OF TIMES "SAME" DATA RECEIVED FOR TAB
4551 TABLST: 0       ;LAST DATA
4552 TABLSZ: 0       ;Z OF LAST DATA
4553 TABLSX: 0       ;X
4554 TABLSY: 0       ;Y
4555 TABDTA: 0       ;DELTA FOR COORD TO BE DIFFERENT
4556 TABRTE: 0       ;TABLET RATE (TAKE EVERY N'TH ONE)
4557 IFN TABCLK,[TABQBK:     0       ;CLOCK QUEUE BLOCK
4558         -1
4559         JRST ITAB
4560 ]
4561 IFE TABCLK,[
4562 TABRTC: 0       ;COUNT WITHIN TABRTE
4563 ]
4564         BBLK
4565 ]
4566 \fIFN IMXP,[
4567
4568 SUBTTL  INPUT MULTIPLEXOR ROUTINES
4569
4570 IMPXO:  CONI MPX,T
4571         JUMPE T,OPNL25
4572         TRNN D,2
4573         JRST IMPXO2     ;READ AT MN PRGM
4574         SKIPGE IMPXF    ;IMAGE (READ AT PI)
4575         SETOM MPXWF
4576         PUSHJ P,IMXON
4577 IMPXO2: AOS IMXNTO
4578         HLL A,C
4579         JSP Q,OPSLD3
4580         IMXDN,,BIMXDN
4581         IMPXDN,,BIMPXD
4582
4583 IMXON:  AOSGE IMPXF
4584         JRST 4,.        ;SHOULD NOT HAVE BEEN LESS THAN -1
4585         PUSHJ P,CLQAD1  ;START CLOCK LEVEL
4586         MPXBLK
4587         POPJ P,
4588
4589 BIMPXS: JSP Q,WRDBT
4590 IMPXS:  SKIPGE MPXWF
4591         PUSHJ P,UFLS
4592         UMOVE A,(C)
4593         ANDI A,377
4594         CAILE A,LCHN
4595         JRST IMPXS1
4596 AIMXW5: IDIVI A,3
4597         LDB A,IMPXT(B)
4598         UMOVEM A,(C)
4599         POPJ P,
4600
4601 IMPXCL: TRNE A,4        ;SKIP ON WAS READING AT MP
4602 IMXCL1: SOS IMPXF       ;WAS READING AT PI
4603         SOSGE IMXNTO
4604         DATAO DSDEVN,[MPX]
4605         POPJ P,
4606
4607 IMPXRS: SETOM MPXWF
4608         POPJ P,
4609
4610 IMPXT:  301400,,MPXBUF(A)
4611         141400,,MPXBUF(A)
4612         1400,,MPXBUF(A)
4613 \f
4614 BIMXS1: JSP Q,WRDBT
4615 IMPXS1: UMOVE A,(C)
4616         TDZE A,[-400]
4617         JRST IOCER4
4618 AIMXW4: MOVE T,MPXWF
4619         CAILE A,LCHN
4620         MOVNI T,2       ;CHNL NOT READ IN BY PI HACK
4621 AIMXW2: SKIPL IMXSW
4622         PUSHJ P,UFLS
4623         CAME T,MPXWF
4624         AOJGE T,AIMXW3  ;PI FROB HAS CYCLED (MAYBE)
4625         AOSE IMXSW
4626         JRST AIMXW2     ;READING IMX AT PI
4627         DATAO MPX,A     ;SELECT CHNL
4628         CONO MPX,0      ;START CONVERSION
4629         MOVEI B,62
4630         CONSO MPX,10
4631         SOJG B,.-1
4632         JUMPE B,IMPXFE
4633         XCTR XRW,[DATAI MPX,(C)]
4634 IMX1:   SETOM IMXSW
4635         POPJ P,
4636
4637 AIMXW3: SKIPGE MPXWF
4638         JRST AIMXW4     ;IT WAS JUST SETOMMED
4639         JRST AIMXW5     ;HAS BEEN READ IN BY PI HACK SO GOBBLE DATA
4640
4641 IMPXFE: XCTR XRW,[SETOM (C)]
4642         JRST IMX1
4643
4644 IMPXSR: AOSE IMXSW
4645         JRST MPXRT1     ;USING IMX AT MN PRGM LVL
4646         MOVE T,[<-LCHN>/3-1,,MPXBUF-1]
4647         MOVEM T,MPXPTR  ;SET UP BLKI POINTER
4648         MOVE T,[BLKI MPX,MPXPTR]
4649         MOVEM T,IMXLC   ;SET UP DC INTERUPT LOCN
4650         MOVE T,[JSR MPXCYC]
4651         MOVEM T,IMXLC+1 ;SET UP DC INT LOC+1
4652         DATAO MPX,[0]   ;READ STARTING WITH CHNL 0
4653         CONO MPX,140+DCCHN
4654         MOVEI T,5       ;12TH SEC
4655 IFN ARMP,SKIPN ARMF
4656         SKIPL POTCON
4657         MOVEI T,2       ;1/30 SEC, HAIRY POTS
4658         JRST .+2
4659 MPXRT1: MOVEI T,1       ;LOST RETRY IN 1/60
4660         MOVEI C,MPXBLK
4661         SKIPL IMPXF
4662         JRST CLQREE     ;RE-ENTER RQ
4663         JRST CLQRET     ;RETURN
4664 \f
4665 EBLK
4666
4667 OMXNTO: -1
4668 IMXNTO: -1
4669 IMPXF:  -1      ;-1 IF MPX NOT RUNNING
4670 MPXWF:  0
4671 MPXBLK: 0       ;CLOCK QUEUE BLOCK
4672         -1
4673         JRST IMPXSR
4674 MPXPTR: 0
4675 IMXST:  0
4676 IMXSW:  -1      ;-1 IF IMX AVAIL
4677 IMXTBB: LCHN
4678 MPXBUF: BLOCK <LCHN>/3+1
4679 IMXTBE==.-1
4680
4681 IMXACS: BLOCK 20
4682 MPXCYC: 0
4683
4684 BBLK
4685
4686         CONO MPX,0
4687         SETOM IMXSW
4688         AOS MPXWF
4689         MOVEM T,IMXST
4690         MOVE T,[JSR MPXCYC]
4691         MOVEM T,IMXLC
4692         MOVE T,IMXST
4693 ;       SKIPGE POTCON
4694 ;       SKIPE ARMF
4695 ;       JRST MPXCYG
4696         JRST 12,@MPXCYC
4697
4698 MPXCYG: MOVEM 17,IMXACS+17
4699         MOVEI 17,IMXACS
4700         BLT 17,IMXACS+16
4701 IFN ARMP,[
4702         SKIPE ARMF
4703         JRST SERVO
4704 ARMSVR:]
4705         SKIPL POTCON
4706         JRST UPOTS
4707 UPOTRT: MOVSI 17,IMXACS
4708         BLT 17,17
4709         JRST 12,@MPXCYC
4710 ]
4711 \fIFN OMXP,[
4712
4713 SUBTTL  OUTPUT MULTIPLEXOR ROUTINES
4714
4715 OMPXO:  CONI OMPX,T
4716         JUMPE T,OPNL25
4717         AOS OMXNTO
4718         HLL A,C
4719         JSP Q,OPSLD3
4720         OMPXDN,,BOMPXDN
4721         OMXDN,,BOMXDN
4722
4723 BOMXDS:
4724 BOMPXS: JSP Q,WRDBT
4725 OMXDS:
4726 OMPXS:  XCTR XRW,[DATAO OMPX,(C)]       ;ZAP CHNL
4727         POPJ P,
4728
4729 OMPXCL: SOSGE OMXNTO
4730         DATAO DSDEVN,[OMPX]
4731         POPJ P,
4732
4733 EBLK
4734 OMXACS: BLOCK 20
4735
4736 OMPXBK: 0
4737 BBLK
4738         MOVEM 17,OMXACS+17
4739         MOVEI 17,OMXACS
4740         BLT 17,OMXACS+16
4741 IFN VIDP,[
4742         CONSZ NVDX,700000
4743         CONSO NVDX,1000
4744         JRST .+2
4745         JRST NVDBRK
4746 ]
4747 IFN ARMP,[
4748         CONSZ TIPDEV,10
4749         JRST TIPBRK
4750 ]
4751 IFN TABP,[
4752         CONSZ RBTCON,7
4753         CONSO RBTCON,10
4754         JRST .+2
4755         JRST ITAB
4756 ]
4757 ;       MOVEI J,OMPCHN
4758 ;       JSP E,SPUR      ;SPURIOUS INT
4759 OMXRET: MOVSI 17,OMXACS
4760         BLT 17,17
4761         JRST 12,@OMPXBK
4762 ]
4763 \f
4764 SUBTTL  MORSE CODE SENDER (COD DEVICE)
4765
4766 IFN CODP,[
4767 ;       CODITC==CODBFL*5-1      ;WHEN TO TRY TO INTERRUPT
4768
4769 CLKCOD: SETOM TT        ;USED AS A FLAG
4770         MOVE B,CODWD
4771         LSH B,-1
4772 CLKCC3: CAIN B,1
4773         JRST CLKCC1
4774         LDB A,[100,,B]
4775         EXCH A,LSTBIT
4776         CAME A,LSTBIT
4777         DATAO 70,LSTBIT
4778         MOVEM B,CODWD
4779         MOVE T,CODSPD
4780         MOVEI C,CODTIM
4781         JRST CLQTTR     ;RE-ENTER OR NOT DEPENDING ON TT
4782
4783 CLKCC1: MOVE A,CODCC
4784         CAIL A,CODBFL*5
4785         JRST CLKCC5
4786 CLKCC8: AOS CODCC
4787         ILDB B,CODPTR
4788         MOVE A,CODPTR
4789         CAMN A,[10700,,CODBUF+CODBFL-1]
4790         HRRI A,CODBUF-1
4791         HRRM A,CODPTR
4792         CAIL B,140
4793         JRST CLKCC2
4794         CAIGE B,40
4795         JRST CLKCC1
4796         MOVE B,CODTBL-40(B)
4797         JRST CLKCC3
4798 CLKCC6: MOVE B,CDRUB
4799         JRST CLKCC3
4800 CLKCC2: CAIN B,177
4801         JRST CLKCC6
4802         SUBI B,137
4803         MOVEM B,CODSPD
4804         JRST CLKCC1
4805
4806 CLKCC5:
4807 ;       CAIN A,CODITC
4808 ;       JRST CLKCC7
4809         MOVEI B,2
4810         SETZM TT        ;INDICATE IDLE
4811         JRST CLKCC3
4812
4813 ;CLKCC7:        MOVE A,CODUSR   ;GET INDEX OF USER
4814 ;       MOVE B,CODITB   ;GET CHANNELS OPEN MASK
4815 ;       AND B,MSKST2(A) ;FIND OUT WHAT CODE CHANNELS ENABLED,
4816 ;       MOVNM B,CODITD
4817 ;       AND B,CODITD
4818 ;       IORM B,IFPIR(A) ;AND REQUEST INTERRUPT ON LOWEST NUMBERED ONE
4819 ;       JRST CLKCC8     ;SEND REMAINING CHARACTER(S) IN BUFFER
4820 \f
4821         ;RETURN HERE FROM STDOPN
4822 CODO1:  POPJ P,         ;NON-SKIP RETURN
4823         AOS (P)         ;DO NOT CHANGE TO JRST POPJ1 AT END
4824         MOVEI I,1       ;INDICATE "IOPOP"
4825
4826         ;CODE DEVICE IOPUSH AND IOPOP ROUTINE (SETS INTERRUPT MASK)
4827
4828 CODIOP: SUBI R,IOCHNM(U)        ;GET "AC FIELD" (ROUTINES THAT NEED IT RESTORE R)
4829         MOVE A,CHNBIT(R)        ;SET UP INTERRUPT BIT
4830         XCT CDPTBL(I)   ;IORM OR ANDCAM TO CODITB
4831         POPJ P,
4832
4833 CDPTBL: ANDCAM A,CODITB ;IOPUSH AND CLOSE
4834         IORM A,CODITB   ;IOPOP AND OPEN
4835
4836         ;COD CLOSE ROUTINE
4837 CODCLS: MOVEI I,0       ;TO SIMULATE IOPUSH
4838         PUSHJ P,CODIOP  ;CLEAR RELEVANT INTERRUPT BIT
4839         CONO PI,CLKOFF  ;CLOSE, USE STANDARD SEQUENCE
4840         SOSGE CODUSE
4841         SETOM CODUSR
4842         JRST CLKONJ
4843
4844 SEND:   SKIPGE C
4845          SKIPA A,(C)
4846           XCTR XRW,[MOVE A,(C)] ;UNIT OUTPUT
4847         CAIA
4848 BSEND:   JSP E,NBTOCH   ;BLOCK OUTPUT
4849         ANDI A,177
4850         CAIN A,"S-100
4851          JRST CODSSS
4852         SKIPE CODSSF
4853          JRST CODSST
4854         SKIPG CODCC     ;WAIT FOR ROOM
4855          PUSHJ P,UFLS
4856         IDPB A,CODIPT
4857         MOVE A,CODIPT
4858         CAMN A,[10700,,CODBUF+CODBFL-1]
4859          HRRI A,CODBUF-1
4860         HRRM A,CODIPT
4861         SOS CODCC
4862         MOVE T,CODSPD
4863         PUSHJ P,CLQADD  ;START UP CLOCK LEVEL
4864          CODTIM
4865         POPJ P,
4866
4867 CODO:   PUSH P,[CODO1]  ;CODO1 SETS UP INTERRUPT BIT
4868         JSP Q,STDOPN
4869         1,,CODUSR
4870         CODDN,,CODBN
4871
4872
4873 CODSSS: SETOM CODSSF
4874         POPJ P,
4875
4876 CODSST: SETZM CODSSF
4877         SUBI A,137
4878         JUMPLE A,CPOPJ
4879         MOVEM A,CODSPD
4880         POPJ P,
4881
4882 CODRS:  CONO PI,CLKOFF
4883         MOVEI A,CODBFL*5
4884         MOVEM A,CODCC
4885         MOVE A,CODIPT
4886         MOVEM A,CODPTR
4887         JRST CLKONJ
4888
4889 CODFIN: MOVE T,CODBFL*5 ;.CALL FINISH
4890         CAMLE T,CODCC
4891          PUSHJ P,UFLS
4892         POPJ P,
4893 \f
4894 EBLK
4895 CODITB: 0       ;MASK OF CHANNELS OPEN, 1.1=>0
4896 CODITD: 0       ;RANDOM SCRATCH LOCATION
4897 CODWD:  2       ;CURRENT WORD
4898 CODTIM: 0       ;CLOCK QUEUE BLOCK
4899         -1
4900         JRST CLKCOD
4901 CODSPD: 3       ;CODE SPEED (SET FROM CHARS >=140) WPM= 75./(CODSPD)
4902 CODCC:  CODBFL*5
4903 CODPTR: 440700,,CODBUF
4904 CODIPT: 440700,,CODBUF
4905 LSTBIT: 0       ;FLUSH 60 CPS CHIRPS
4906 CODSSF: 0
4907
4908 CODBUF: BLOCK CODBFL
4909 BBLK
4910 \f
4911 DEFINE GCODE A
4912 BIT=1
4913 WRD=0
4914 IRPC B,,[A]
4915 IFSE B,-,[WRD=WRD+7*BIT
4916 BIT=BIT_4]
4917 IFSE B,.,[WRD=WRD+BIT
4918 BIT=BIT_2]
4919 IFSE B, ,[BIT=BIT_2]
4920 TERMIN
4921 WRD+4*BIT
4922 TERMIN
4923
4924 CODTBL: 20
4925         GCODE -.-.-
4926         GCODE .-..-.
4927         GCODE -. .-.
4928         REPEAT 2,1
4929         GCODE . ...
4930         GCODE .----.
4931         REPEAT 2,GCODE -.--.-
4932         GCODE .-.-
4933         GCODE . ...
4934         GCODE --..--
4935         GCODE -....-
4936         GCODE .-.-.-
4937         GCODE -..-.
4938         IRP A,,[-----,.----,..---,...--,....-,.....,-....,--...,---..,----.]
4939         GCODE A
4940         TERMIN
4941         GCODE ---...
4942         GCODE -.-.-.
4943         27727   ;K WITH LONG LAST DAH
4944         GCODE -...-
4945         GCODE ...-.-
4946         GCODE ..--..
4947         GCODE ...-.
4948         IRP A,,[.-,-...,-.-.,-..,.,..-.,--.,....,..,.---,-.-,.-..,--,-.,---,.--.,--.-
4949 .-.,...,-,..-,...-,.--,-..-,-.--,--..]
4950         GCODE A
4951         TERMIN
4952         GCODE -.--.
4953         GCODE -.-..-..
4954         GCODE .-.-.
4955         GCODE .-...
4956         GCODE -.. .
4957
4958 CDRUB:  GCODE ........
4959
4960 EXPUNGE WRD,BIT
4961
4962 ]
4963 \fIFN PLTP,[
4964
4965 SUBTTL  CALCOMP PLOTTER ROUTINES
4966
4967 PLOT:   SKIPGE C
4968          SKIPA A,(C)
4969           UMOVE A,(C)   
4970 PLOT1:  SKIPE A
4971         CAIN A,EOFCH
4972         POPJ P,
4973         SKIPG PLBFS
4974         JRST PLOTW1
4975 PLOTW2: IDPB A,PLPTR
4976         MOVE  A,PLPTR
4977         CAMN A,[600,,PLBUF+LPLBUF-1]
4978         HRRI A,PLBUF-1
4979         HRRM A,PLPTR
4980         SOS PLBFS
4981         AOSN PLON
4982         CONO PLT,SDS+PLTCHN
4983         POPJ P,
4984
4985         PUSHJ P,PLOTW3
4986 PLOTW1: PUSHJ P,UFLS
4987         JRST PLOTW2
4988
4989 PLOTW3: SKIPG T,PLBFS
4990         POPJ P,
4991         CAIL T,LPLBUF*5
4992         JRST POPJ1
4993         JRST POPJ3
4994
4995 BPLOT:  MOVEI E,PLOT1
4996         JRST NBTOCH
4997
4998 PLOTO:  MOVEI Q,PLOTOC
4999         PUSHJ P,STDOPN
5000          POPJ P,
5001         AOS (P)
5002 PLOTEL: ;TELL WHO'S USING THE PLOTTER
5003         BUG INFO,[PLOTTER USER],SIXBIT,UNAME(U),SIXBIT,JNAME(U)
5004         POPJ P,
5005
5006 PLOTOC: 1,,PLTUSR
5007         PLTDN,,PLTBN
5008
5009 PLTRS:  MOVEI A,LPLBUF*6
5010         MOVE B,PLPTR
5011         CONO PI,LPTOFF
5012         MOVEM A,PLBFS
5013         MOVEM B,PLIPTR
5014         JRST LPTONJ
5015 \f
5016 PLTBRK: MOVE A,PLBFS
5017         CAIN A,LPLBUF*6
5018         JRST PLSTP
5019         AOS PLBFS
5020         ILDB A,PLIPTR
5021         MOVE B,PLIPTR
5022         CAMN B,[600,,PLBUF+LPLBUF-1]
5023         HRRI B,PLBUF-1
5024         HRRM B,PLIPTR
5025         ANDI A,77
5026         LSH A,3
5027         TRO A,SDC+PDC+SD+PLTCHN
5028         TRNE A,PUP+PDN
5029         TRC A,SD#PD
5030         CONO PLT,(A)
5031         JRST LPTRT3
5032
5033
5034 PLSTP:  CONO PLT,SDC+PDC
5035         SETOM PLON
5036         JRST LPTRT3
5037
5038 EBLK
5039 PLBUF:  BLOCK LPLBUF
5040 PLON:   -1
5041 PLPTR:  440600,,PLBUF
5042 PLIPTR: 440600,,PLBUF
5043 PLBFS:  LPLBUF*6
5044 IPL:    SIXBIT /IPL/    ;FILE NAME 2 OF IPL JOB (USED FOR LOADING ASO JNAME OF IPL JOB)
5045 IPLU:   0       ;USER INDEX OF IPL JOB IF IT EXISTS OR -1 IF IPL BEING LOADED
5046
5047 ;INTERPRET PLOTTER OPEN ROUTINE
5048 BBLK
5049 IPLO:   CONO PI,CLKOFF
5050         PUSHJ P,IPLST   ;INITIATE LOADING OF IPL JOB
5051          JRST IPLO1
5052         PUSHJ P,PLOTEL
5053         CONO PI,CLKOFF
5054         PUSHJ P,IPLWT   ;WAIT FOR IPL JOB TO FINISH LOADING
5055         PUSHJ P,UFLS
5056         MOVE T,IPLU     ;INDEX OF IPL JOB
5057         SKIPE IOCHNM(T)
5058         JRST IPLO2      ;IPL JOB OPNS CLA ON CNNL 0
5059         MOVE T,SV40(T)
5060         CAME T,[.SLEEP 17,]     ;IPL JOB DOES SLEEP 17, WHEN READY
5061 IPLO2:  JRST OPNL10     ;DEVICE NOT AVAILABLE
5062         CONO PI,CLKON
5063         MOVE T,IPLU
5064         MOVE A,UNAME(T) ;SET UP CLI OPEN
5065         MOVSI B,(SIXBIT /IPL/)
5066         PUSHJ P,CLIO
5067         POPJ P,
5068         MOVE A,UTMPTR(U)
5069         MOVE B,IPLU
5070         MOVEM A,UTMPTR(B)
5071         JRST POPJ1
5072
5073 IPLO1:  PUSHJ P,UDELAY
5074         JRST IPLO
5075 \f
5076 IPLST:  SKIPL T,IPLU    ;MAKE SURE IPL JOB NOT ALREADY BEING LOADED
5077         PUSHJ P,IPLIN   ;MAKE SURE IPL JOB NOT ALREADY IN
5078         JRST POPJ1      ;DONT LOAD
5079         HRROI T,IPL
5080         CONO PI,UTCOFF
5081         PUSHJ P,NUJBST
5082         JRST UTCONJ
5083         JRST UTCOJ1
5084
5085 ;ROUTINE TO SEE IF IPL JOB WINS. CLKOFF OR CLKBRK IN PROGRESS
5086 IPLWT:  SKIPGE T,IPLU   ;CHECK IPL JOB LOADING FLAG
5087         POPJ P, ;IPL JOB STILL LOADING WAIT
5088         PUSHJ P,IPLIN   ;SEE IF IPL JOB IN CORE
5089         SKIPE IOCHNM(T) ;SEE IF IPL JOB IN USE
5090         JRST POPJ1      ;LOSE
5091         MOVE T,SV40(T)  ;SEE IF IPL JOB READY
5092         CAMN T,[.SLEEP 17,]     ;IPL JOB DOES .SLEEP 17, WHEN READY
5093         AOS (P) ;READY WIN
5094         POPJ P, ;NOT READY YET, WAIT
5095
5096 IPLIN:  PUSH P,U        ;ROUTINE TO SEE IF IPL JOB IN. C(T)=C(IPLU), CLKOFF OR CLKBRK IN PROGRESS
5097         CAML T,USRHI
5098         JRST IPLIN1     ;USER VARIABLES SLOT FLUSHED
5099         HLRO U,UNAME(T)
5100         AOJN U,IPLIN1   ;UNAME OF IPL JOB IS -1 (IN LH)
5101         MOVSI U,(SIXBIT /IPL/)
5102         CAME U,JNAME(T)
5103 IPLIN1: AOS -1(P)       ;IPL JOB NOT IN, SO SKIP
5104         POP P,U
5105         POPJ P,
5106
5107 ]
5108 ;UTC MUST BE OFF!
5109 NUJBST: MOVEI TT,MXCZS  ;ENTRY FROM ELSEWHERE TO DO SIMILAR THINGS
5110         SKIPL DEDTIM    ;SKIP IF SYS DEAD
5111         CAMG TT,UTTYCT
5112          POPJ P,        ;RING BUFFER FULL, WAIT
5113         MOVEM T,@UTTYI
5114         AOS UTTYCT
5115         AOS TT,UTTYI
5116         CAIL TT,UTTYS+MXCZS
5117         MOVEI TT,UTTYS
5118         MOVEM TT,UTTYI
5119         SETOM 1(T)      ;SET JOB LOADING FLAG
5120         JRST POPJ1
5121 \f
5122 SUBTTL  PDP-6 AS INFERIOR
5123
5124 IFN PDP6P,[
5125 ;.IPDP CH,
5126 ;INTERRUPT THE PDP6, I/O CH SHOULD HAVE PDP6 OPEN AS INFERIOR
5127 ;THIS CALL DOESNT SKIP OR INTERRUPT TO THE USER
5128
5129 AIPDP:  MOVSI T,%CLS6
5130         SKIPGE A,(R)
5131          TDNN T,CLSTB(A)
5132           POPJ P,
5133         CONO PI,LPTOFF
5134         CONI DSDEV,T
5135         ANDI T,7
5136         CONO DSDEV,20(T)
5137         JRST LPTONJ
5138
5139 ;PDP-6 DEVICE
5140 ;INTERRUPT FROM PDP6, MAYBE GENERATE IO CHANNEL USER INTERRUPT
5141
5142 DSDBRK: CONO DSDEV,10   ;TURN OFF FLAG
5143                         ;ALSO KEEP IT FROM INTERRUPTING FOR A WHILE
5144                         ;GETS TURNED ON AT DISMISS, SETOM PICLR AND SLOW CLK
5145         SKIPGE A,PDPISR
5146          JRST LPTRT3    ;NO ONE WANTS AN INT
5147         MOVE B,PDPMSK
5148         AND B,MSKST2(A)
5149         MOVNM B,PDPTMP
5150         AND B,PDPTMP
5151         IORM B,IFPIR(A) ;GENERATE USER INT
5152         JRST LPTRT3
5153 \f
5154                 ;PDP6 .OPEN ROUTINE (GET HERE FROM USR OPEN)
5155
5156 PDPO:   SKIPL PDP6UP    ;MAKE IT EASY TO MARK PDP6 AS DOWN.
5157          JRST OPNL10
5158         TLNN C,20
5159          JRST PDPO1     ;DON'T TRY TO ENABLE INTERRUPTS
5160         TLO C,400000    ;TRY TO ENABLE INTERRUPTS
5161         SKIPL PDPISR
5162          CAMN U,PDPISR
5163           JRST PDPO1
5164         JRST OPNL12
5165
5166 PDPO1:  PUSH P,U
5167         PUSHJ P,PDPO2
5168          JRST POPUJ
5169         AOS -1(P)
5170         POP P,U
5171         SKIPL (R)
5172          JRST .+3
5173           AOS PDPISE
5174           MOVEM U,PDPISR;GOT IT AS INFERIOR
5175         PUSHJ P,LSWPOP  ;RELEASE TREESW
5176         MOVEI I,1       ;DO "IOPOP" INTO CHNL
5177
5178 PDPIOP: SKIPL (R)
5179          POPJ P,        ;NOT OPEN TO INTERRUPT
5180         SUBI R,IOCHNM(U)
5181         MOVE A,CHNBIT(R)
5182         ADDI R,IOCHNM(U)        ;RESTORE R
5183         XCT PDPIOT(I)
5184         POPJ P,
5185
5186 PDPIOT: ANDCAM A,PDPMSK
5187         IORM A,PDPMSK
5188
5189 PDPCLS: MOVEI I,0       ;CLOSE
5190         PUSHJ P,PDPIOP  ;=> DO "IOPUSH"
5191 PDPCL1: CONO PI,CLKOFF
5192         SOSGE PDPUSE
5193          SETOM PDPUSR   ;LAST CHANNEL CLOSED
5194         SKIPL (R)
5195          JRST CLKONJ    ;NOT INTERRUPT ENABLED THIS CHNL
5196         SOSGE PDPISE
5197          SETOM PDPISR   ;LAST CHANNEL CLOSED
5198         JRST CLKONJ
5199
5200
5201 PDPO3:  MOVEI U,(A)     ;MAKE U INDEX OF SUPERIOR
5202 PDPO2:  SKIPL A,SUPPRO(U)       ;GET POINTER TO SUPERIOR, SKIP IF TOP LEVEL
5203          JRST PDPO3     ;TRY AGAIN
5204         HLRZ D,C
5205         TLO C,200000    ;SIGNAL PDP6 TO UBI ETC
5206         JSP Q,STDOPN
5207          3,,PDPUSR
5208          PDPUII,,PDPUIO
5209          PDPBII,,PDPBIO
5210 \f
5211 ;.UCLOSE PDP6
5212 PDPUCL: MOVSI C,%CLS6   ;GET PDP6 CLSTB BIT
5213         MOVEI R,IOCHNM(U)       ;GET PNTR TO USER'S IO CHNL AREA
5214         HRLI R,-20      ;MAKE AOBJN PNTR TO ALL CHNLS
5215         PUSHJ P,PDPCCK  ;CHECK CHNL
5216          PUSHJ P,PDPCZP ;CLOSE CHNL IF PDP6 OPEN ON IT
5217         AOBJN R,.-2     ;REPEAT FOR ALL CHNLS
5218         HRLI R,-LUIOP/2 ;MAKE AOBJN PNTR TO IO PDL (ADR ALREADY THERE)
5219         PUSHJ P,PDPCCK  ;CHECK ENTRY FOR PDP6
5220          PUSHJ P,PDPPZP ;CLEAR ENTRY IF PDP6 CHNL
5221         AOJ R,          ;INCR TO SKIP IOCHST ENTRY
5222         AOBJN R,.-3     ;REPEAT FOR WHOLE IO PDL
5223         POPJ P,         ;ALL PDP6 CHNLS THIS JOB SHOULD NOW BE CLOSED
5224
5225 PDPCCK: HRRZ B,(R)      ;GET CLSTB INDEX FROM IOCHNM
5226         TDNN C,CLSTB(B) ;IF NOT PDP6 CHNL
5227          AOS (P)        ;SKIP CLOSING CHNL
5228         POPJ P,
5229
5230 ;CLOSE PDP6 USER CHNL
5231 PDPCZP: PUSHJ P,PDPCLS  ;ADJUST PDP6 VARS
5232         JRST STDCLX     ;CLOBBER CHNL & RETURN
5233
5234 ;CLEAR PDP6 IO PDL ENTRY
5235 PDPPZP: PUSHJ P,PDPCL1  ;ADJUST PDP6 VARS (EXCEPT PDPMSK)
5236         SETZB A,(R)     ;CLEAR SAVED IOCHNM
5237         DPB A,[4000,,1(R)]      ;CLEAR SAVED IOCHST (SAVING CHNL # FOR .IOPDL)
5238         POPJ P,
5239 \fPDPCLR:        OFFSET 20-.     ;ROUTINE TO BE MOVED
5240         CONO PI,11577   ;CLEAR PI
5241         CONO 655550     ;CLEAR PROCESSOR
5242         DATAO 20,.+1    ;RELEASE DEVICES
5243         SETZ            ;CLEAR 0, ALSO BIT FOR DEASSIGNMENT (^)
5244         HRRZI 1,1       ;BLT POINTER 0,,1
5245         BLT 1,41                ;CLEAR AC'S, SELF, AND 41
5246 PDPCLE==.
5247         OFFSET 0        ;BACK TO NORMAL
5248 EBLK
5249
5250 PDPTMP: 0       ;TEMP FOR INT
5251 PDPMSK: 0       ;MASK OF INT BITS OF CHNLS OPEN
5252
5253 BBLK
5254
5255 PDPRST: PUSHJ P,MP6LD
5256         MOVE C,[400020,,400021]
5257         XCTR XW,[CLEARM 400020]
5258         XCTR XBRW,[BLT C,437777]
5259         MOVE C,[PDPCLR,,400020]
5260         XCTR XBW,[BLT C,400000+PDPCLE-1]
5261         MOVE C,[JRST 20]
5262         UMOVEM C,400041
5263         PUSHJ P,UDELAY
5264         UMOVE A,400041
5265         JUMPE A,PDPRS2  ;JUMP ON ROUTINE WON, DON'T HAVE TO CLEAR IT OUT
5266         XCTR XW,[CLEARM 400020]
5267         MOVE C,[400020,,400021]
5268         XCTR XBRW,[BLT C,400041]
5269 PDPRS2: JRST MPLDZ
5270 ];IFN PDP6P
5271 \f
5272 SUBTTL  DL10MP SYSTEM CALL
5273
5274 IFN DL10P,[
5275 ;.CALL DL10MP
5276 ;  ARG 1 - PAGE #
5277 ;CREATES A READ/WRITE, UNENCACHED, ABSOLUTE PAGE AT THAT POINT
5278 ;IN THE USER'S MAP.  THE PAGE CONTAINS THE DL10 CONTROL AREA.
5279 ;  VAL 1 - AOBJN POINTER TO DL10 CONTROL AREA WITHIN PAGE
5280 ;  VAL 2 - POINTER TO 3 WORDS USED FOR PDP11 EXAMINE/DEPOSIT COMMANDS
5281 ;  VAL 3 - POINTER TO FIRST FREE WORD WITHIN DL10 CONTROL AREA
5282
5283 DL10MP: TDNE A,[-400]
5284          JRST OPNL33            ;PAGE NUMBER TOO BIG
5285         PUSHJ P,UPLC
5286         LDB C,Q                 ;GET CIRC POINTER
5287         CAIE C,-1
5288          JUMPN C,OPNL13         ;PAGE SLOT ALREADY IN USE
5289         BUG INFO,[DL10MP BY],SIXBIT,UNAME(U),SIXBIT,JNAME(U)
5290         MOVEI C,600000+<DL10AR_-10.>    ;SUITABLE PTW
5291         DPB C,T
5292         MOVEI C,-1              ;ABS CIRC PNTR
5293         DPB C,Q
5294         CLRPGM (U)
5295         LSH A,10.               ;USER'S VIRTUAL ADDRESS
5296         ADDI A,2000
5297         CAMLE A,HUSRAD(U)
5298          MOVEM A,HUSRAD(U)
5299         SUBI A,2000-<DL10AR&1777>       ;VIR ADDR OF START OF DL10 CONTROL AREA
5300         HRLI A,-100             ;SIZE OF DL10 CONTROL AREA
5301         MOVEI B,DL10XD-DL10AR(A)
5302         MOVEI C,DLXEND-DL10AR(A)
5303         JRST POPJ1
5304 ];DL10P
5305 \f
5306 SUBTTL  TRAP DEVICE
5307
5308 ;.CALL TRPOPN
5309 ;  ARG 1 - <JOB> SPEC
5310 ;  ARG 2 - CHANNEL NUMBER IN THAT JOB TO BE OPENED AS TRAP DEVICE
5311 ;  ARG 3 - IOCHNM WORD (ONLY LH IS USED)
5312 ;  ARG 4 - IOCHST WORD
5313 ;THIS GIVES THE INFERIOR A TRAP DEVICE CHANNEL, WHICH GIVES
5314 ;A %PITRP INTERRUPT ON MOST OPERATIONS.  THE INFERIOR SIGNALS
5315 ;ITS DESIRE TO GET SUCH A CHANNEL BY OPENING THE TRAP DEVICE,
5316 ;WHICH ALSO GIVES A %PITRP INTERRUPT.
5317 ;TRPOPN IS ALSO USEFUL FOR STORING ERROR CODES INTO IOCHST OF AN ALREADY-OPEN TRAP CHANNEL
5318
5319 TRPOPN: TDNE B,[-NIOCHN]
5320          JRST OPNL14            ;BAD CHANNEL NUMBER
5321         MOVE J,A
5322         JSP T,NCORUI
5323          JFCL
5324 IFN PDP6P,[
5325         CAIN J,-1
5326          JRST OPNL34
5327 ];PDP6P
5328         JSP T,NCORWR
5329          JRST OPNL31            ;CAN'T MODIFY JOB
5330         ADDI B,IOCHNM(J)        ;GET IOCHNM WORD ADDRESS
5331         HRRZ T,(B)
5332         CAIE T,DNTRAP
5333          JUMPN T,OPNL13         ;FILE ALREADY EXISTS (YOU MUST CLOSE THE CHANNEL FIRST)
5334         HRRI C,DNTRAP
5335         MOVEM C,(B)
5336         MOVEM D,IOCHST-IOCHNM(B)
5337         JRST LSWPJ1             ;UNLOCK DIELOK, TAKE SUCCESS RETURN