-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathITS 138
5201 lines (4562 loc) · 82.6 KB
/
ITS 138
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
TITLE ITS 1.0 3/19/67
MOBY==1
;AC DEFS
A=1
B=2
C=3
D=4
E=5
TT=6
I=7
Q=10
J=11
R=12
P=15 ;DO NOT CHANGE!
T=16 ;"
U=17 ;"
IOBIT==1 ;IOBIT IN MAP
TTYIF==1 ;RIGHT HALF BITS IN PIRQC
BCNTRZI==2 ;^Z TYPED
BPIPI==4 ;BAD LOC 42
AROIF==10 ;AROV
BILLOP==40 ;ILLEGAL INSTRUCTION
BIOADC==20000 ;MEMORY PROTECTION VIOLATION
BIOCER==400 ;CHANNEL ERROR
VALRTF==200 ;VALUE RETURN
ILLUAD==1000 ;USER DOES NOT HAVE THAT MUCH CORE
BRKF==2000 ;BREAKPOINT FLAG
BUTFUL==4000 ;UTAPE FULL
BILM==10000 ;NON-EX MEM
;10000 NON EX MEM
;200000 PDL OV
;20000 MPV
BADBTS=BIOADC+BCNTRZI+BPIPI+BIOCER+BILLOP+BILM+VALRTF+BRKF
TTYIMI==1 ;IMAGE INPUT ;BITS IN TTYSTS
TTYDDT==2 ;"DDT" MODE
TTYIMO==4 ;IMAGE OUTPUT
;BITS IN RH MSKST
BTINTE==1 ;ENABLE TTY INT
CLKON==2001 ;ABSOLUTE
CLKOFF==1001
APRCHN==7 ;DO NOT CHANGE
BADPC==5037
LSRMOD==10000
UUOMIN==40000,,
UUOMAX==46000,,
AUUO=UUOMAX ;USE TO SAVE CONDS ON ILLOP
IFE MOBY,MX1KB==12. ;MAX SYS 1K BLOCKS
IFN MOBY,MX1KB==250.
IFE MOBY,MXIOB==30. ;MAX DYN ALLOC ALLOC IO BUFFERS
IFN MOBY,MXIOB==400
SIOMT==30 ;MAX SIZE TRANSLATION TABLE
SIOML==8 ;LENGTH OF ENTRY IN TRANSLATION TABLE
LUPDL==30 ;LENGTH USER PDL
CPDLL==20 ;LENGTH CLOCK CHANNEL PDL
DCCHN==1 ;DC CHANNEL
DCCHNA==200_<-DCCHN>
UTCCHN==3 ;UTC CHANNEL
GETYOC==4 ;GE TYPOUT (DATAPHONE)
LPTCHN==5 ;LINE PRINTER CHANNEL
TTYCHN==5 ;TTY CHANNEL
DISCHN==6
SDCHN==5
GETYIC==5 ;GE TYPEIN DEV 70
UTCON==2001\200_<-UTCCHN>\200_<-TTYCHN>\200_<-GETYOC>\200_<-DISCHN>\200_<-SDCHN>
UTCOFF==1001\200_<-UTCCHN>\200_<-TTYCHN>\200_<-GETYOC>\200_<-DISCHN>\200_<-SDCHN>
CUINT==5000+UTCCHN
SCLKI==15. ;SLOW CLOCK PER REG CLOCK
MXOPT==8. ;SLOW CLOCK MAX UT OP CAN TAKE
NINFP==8. ;MAX. NO. OF INF. PROCED. / PROCED.
METOF=6 ;OFFSET BETWEEN CONTENTS OF MEMTOP AND HIGHEST ACT
GTYI=70 ;DEVICE FOR GE TYPEIN
GTYO=750 ;DEVICE FOR GE TYPOUT
VID=754 ;VIDISUCKER
DEFINE CONC A,B
A!B!TERMIN
DEFINE SUBTTL A/
TERMIN
GO:
LOC 41
JSR UUOH
LOC 40+2*APRCHN
JSR CLKBRK
LOC 40+2*TTYCHN
JSR TTYBRK
LOC 40+2*UTCCHN
JSR UTCBRK
LOC 40+2*DISCHN
BLKO DIS,DBLKOP
JSR DRECYC
LOC 40+2*GETYOC
JSR GTYOBK
JSR GTYOBK
LOC GO
SUBTTL TSS INITIALIZATION
CONO 633550
CONO PI,120000+11577
SETOM DISUSR
SETOM DISOFF
CONO DIS,100
MOVEI A,4
BAR: CONO TTY,@TTYLT(A)
DATAI TTY,
CONO TTY,3600+TTYCHN
SOJGE A,BAR
CLEARM USRHI
CLEARB U,USER
MOVE P,USRPDL(U)
PUSHJ P,GEKI ;INITIALIZE GE CONSOLES
MOVNI T,1
PUSHJ P,USTRA
JRST .-1
MOVEI B,SYSB-1
PUSHJ P,ACORE
JFCL
CLEARM USTP
CONO PI,UTCON+200
CONO 3000+APRCHN
JRST SCOR
PAT: BLOCK 200
SUBTTL PROCESSOR BREAK ROUTINES
CLKBRK: 0
CONSO 1000
JRST CLKB1 ;LOSSAGE
SKIPL CDSOFF
SKIPGE DISOFF
JRST DSTPD
AOSG DISON
JRST DSTRT
DSTPD: CONO 1000+APRCHN
AOSG CLKFL1
JRST 12,@CLKBRK ;EVERY 1/30 SEC
SETOM CLKFL1
AOS TIME
SOSLE CUQUAN ;CHECK QUANTUM
JRST 12,@CLKBRK
EXCH P,CPDLP
PUSH P,T
PUSH P,U
MOVE T,SLCLK
CAMGE T,TIME
JRST SSLCK ;SERVICE SLOW CLOCK
CLKSR1: MOVE U,USER
CLKSR: MOVE T,CLKBRK
SKIPL U
MOVEM T,UPC(U)
PUSHJ P,SEARCH ;SCHEDULE NEW USER
CLB1B: CAMN U,USER
JRST CLKB5A
SKIPGE U
CLKSC1: HRROI U,ECPDL-AC16S
POP P,AC17S(U)
POP P,AC16S(U)
EXCH P,CPDLP
JSR SWITCH ;SWAP USERS
MOVEM T,CLKBRK
MOVE T,AC16S(U)
MOVE U,AC17S(U)
JRST 12,@CLKBRK ;GO AWAY
DSTRT: MOVEM A,DISA
MOVE A,DISPTR
MOVEM A,DBLKOP
CONO DIS,100\SDCHN_3\DISCHN
MOVE A,DISA
JRST DSTPD
CLKB5A: SKIPE SCRFG1
JRST CLKSC1
MOVE T,UPC(U)
SKIPL U
MOVEM T,CLKBRK
CLKB5: POP P,U
POP P,T
CLKB3: EXCH P,CPDLP
JRST 12,@CLKBRK ;EXIT WHEN NO SWAP OCCURS
CLKB1: CONSZ PI,100000
JRST PARBRK
EXCH P,CPDLP ;NOT A CLOCK BREAK
PUSH P,T
PUSH P,U
MOVE U,USER
MOVE T,CLKBRK
CONSZ 20
CONSO 10
JRST CLB1A ;NOT AROV
TLZ T,400000
MOVEM T,CLKBRK
SKIPN PICLR(U)
JRST CLKB5
MOVEI T,AROIF
IORM T,PIRQC(U) ;SET USER AROV INT
JRST CLKSR
PARBRK: CONO PI,120000
AOS PARERR
JRST 12,@CLKBRK
PARERR: 0
CLB1A: CONSO 230000
JRST CLKB5 ;NOT PROCESSOR INT
TLNN T,LSRMOD
JRST 4,. ;ERROR IN EXEC MODE-SYSTEM DEAD!
MOVEM T,UPC(U)
CONI 1(P)
MOVEI T,230000
ANDM T,1(P)
CONO 430000+APRCHN
MOVEI T,BADBTS
IOR T,MSKST(U)
AND T,1(P)
JUMPE T,CLKB5
IORM T,PIRQC(U) ;BLAME IT ON THE USER
JRST CLKSR1
;SLOW CLOCK SERVICE ROUTINE
SSLCK: ADDI T,SCLKI
MOVEM T,SLCLK
CONSO UTC,4000 ;TIME FLG ENB
SKIPGE UIDLE
JRST SSLCK1
MOVE T,TIME
SUB T,LUTOTM
CAIGE T,MXOPT*SCLKI
JRST SSLCK1
SETOM UTHERR
CONO UTC,CUINT
SSLCK1: AOSN UIDLE
CONO UTC,CUINT
JRST CLKSR1
SUBTTL USER SCHEDULER
SEARCH: CLEARM SCRFG1
CLEARM SRCS
SETOM U0
SKIPL T,UTTYST
JRST USTART ;NEW USER START HIM UP
USTSCH: SKIPN USRHI
POPJ P,
SKIPGE U
MOVEI U,0
SEARL: ADDI U,LUBLK ;FIND NEXT USER COMING OUT OF I-O WAIT
CAML U,USRHI ;OR, IF NONE, NEXT USER
MOVEI U,0
SKIPE UNAME(U)
SKIPE USTP(U)
JRST SEARW
SEARLP: SKIPN PIRQC(U)
JRST SEAR2
MOVEI T,BADBTS ;INTERRUPT USER IF REQUESTED
SKIPE PICLR(U)
IOR T,MSKST(U)
AND T,PIRQC(U)
JUMPE T,SEAR2 ;NOT ENABLED & NOT BAD
CAMN U,USER
PUSHJ P,SBRK1 ;WANT TO INT CURRENT LOSER; STORE MACHINE CONDITIONS
PUSHJ P,PCLSR
JRST SEARC ;CAN'T INTERRUPT NOW
MOVE T,PIRQC(U)
ANDCM T,MSKST(U)
ANDI T,BADBTS
SKIPE PICLR(U)
JUMPE T,SBRK69
PUSHJ P,INTSUP ;USER LOSES TOO BADLY, INTERRUPT SUP. PROCEDURE
JRST SEARW
SBRK69: CLEARM PICLR(U) ;INTERRUPT LOSER
CONO PI,UTCOFF-<200_-<APRCHN>>
PUSH P,PIRQC(U)
CLEARM PIRQC(U)
CONO PI,UTCON-<200_-<APRCHN>>
MOVE T,UPR(U)
HRRZ T,42(T)
CAIL T,20
CAML T,MEMTOP(U)
JRST SERR
TLO T,LSRMOD
PUSH P,T
ADD T,UPR(U)
PUSH T,UPC(U)
AOS (P)
AOS (P)
POP P,UPC(U)
POP P,-1(T)
URUN:SEARE: AOSN SCRFLG ;RESTORE CURRENT USER TO ACTUAL MACHINE IF NECESSARY
PUSHJ P,SBRK2
SEARTN: JUMPGE U,SEARX1
AOSN SRCS
JRST SEARCH
SEARX1: SKIPL U
CLEARM FLSINS(U)
EXCH U,USER
POPJ P, ;RUN LOSER
SEAR2: SKIPN FLSINS(U)
JRST SEARC
MOVE T,EPDL2(U)
XCT FLSINS(U) ;TEST I-O WAIT INSTRUCTION
JRST SEARW ;NO SKIP UNRUNABLE 1 HIGH PRIOR 2 LOW
JRST SEARE
SEARC: SKIPGE U0 ;SKIPPED INTO FROM ABOVE
MOVEM U,U0
SEARW: CAMN U,USER
JRST SEARW1
SKIPGE USER
SKIPE U
JRST SEARL
SEARW1: MOVE U,U0
JRST SEARE
SERR: POP P,PIRQC(U) ;BAD INTERRUPT LOCATION
MOVEI T,BPIPI
IORM T,PIRQC(U)
JRST SEARLP
SBRK1: PUSH P,USER
SETOM USER
JSR SWITCH
POP P,U
MOVEM U,USER
SETOM SCRFLG
POPJ P,
SBRK2: PUSH P,U
MOVEM P,PSAVE
MOVNI U,1
JSR SWITCH
MOVE P,PSAVE
POP P,U
POPJ P,
;PUT PC IN LOSER MODE
PCLSR: MOVE T,SUEXIT(U)
SKIPE MEMTOP(U) ;NO CORE (IN CORE ASSIGN ROUTINE
CAME T,[JRST 2,@UUOH
POPJ P, ;WILL HAPPEN SOON
MOVE T,UPC(U)
TLNE T,LSRMOD
JRST POPJ1 ;HAPPY
SKIPE FLSINS(U)
JUMPN U,PCLSR1 ;BACK UP TO UUO
PCLSR4: MOVE T,[JRST ONEFLS ;MUNG EXIT OF UUO, COME BACK LATER
MOVEM T,SUEXIT(U)
POPJ P,
PCLSR1: HLRZ T,FLSINS(U)
CAIN T,(JRST)
JRST PCLSR4 ;EXEC FLUSH, RUN USER TO CLEAR, BUT MUNG EXIT
SOS T,SUUOH(U)
MOVEM T,UPC(U)
CLEARM FLSINS(U)
MOVEI T,AC0S(U)
HRL T,UPR(U)
PCLSR3: BLT T,AC17S(U)
SETOM SCRFG1
JRST POPJ1 ;BACK UP TO UUO, RESTORING ACS
INTSUP: PUSH P,U
SKIPGE U,SUPPRO(U)
JRST URSTRT
HLLZ T,U
IORM T,PIRQC(U)
POP P,U
MOVSI T,BUSRC
IORM T,USTP(U)
SETOM SRCS
POPJ P,
SUBTTL USER SWAP
SWITCH: 0
JUMPL U,SWT1
MOVEI T,AC0S(U)
BLT T,AC15S(U)
MOVSI T,UEXIT
HRRI T,UUO(U)
BLT T,AC17P-UEXIT+UUO(U)
MOVE T,40
MOVEM T,SV40(U)
SWT1: SKIPGE U,USER
JRST SWT2
MOVE T,SV40(U)
MOVEM T,40
MOVSI T,UUO(U)
HRRI T,UEXIT
BLT T,AC17P
DATAO UPR(U)
CONO @APRC(U)
MOVE T,UQUAN(U)
MOVEM T,CUQUAN
MOVSI T,AC0S(U)
BLT T,T-1
MOVE T,UPC(U)
JRST @SWITCH
SWT2: MOVEI T,NULJOB
JRST @SWITCH
;SUBTTL USER START ROUTINES
USTART: PUSH P,U
PUSHJ P,USTRA
JRST USTSC1
SUB P,[1,,1
MOVE T,[1,,(SIXBIT /HTN/)
MOVEM T,JNAME(U)
MOVEI T,USTCD
MOVEM T,UPC(U)
CLEARM USTP(U)
SETOM UTTYST
JRST SEARTN
USTSC1: POP P,U
JRST USTSCH
USTRA: MOVEI U,0 ;-1(P) MUST BE U
USTR3: CAML U,USRHI
JRST USTR1 ;ASSIGN MORE CORE TO USER STORAGE
SKIPN UNAME(U)
JRST USTR2
ADDI U,LUBLK
JRST USTR3
MORCOR: MOVE U,-2(P)
SUB P,[1,,1]
SETOM SUPCOR
POPJ P,
USTR1: MOVEI U,LUBLK
ADD U,USRHI
PUSH P,T
MOVE T,SYSL
CAIG T,USRSTG(U)
JRST MORCOR
POP P,T
EXCH U,USRHI
USTR2: PUSHJ P,USTR4
MOVEI T,SIOCHN(U)
MOVEM T,SIOCP(U)
CLEARM IOCHNM(U)
HRLI T,IOCHNM(U)
HRRI T,IOCHNM+1(U)
BLT T,IOCHNM+17(U)
JRST POPJ1
USTR4: SETOM USTP(U) ;TTY NO IN T
SETOM UNAME (U)
MOVEM T,TTYTBL(U)
SKIPL T
HRRZM U,TTYSTS(T)
MOVSI T,BUSRC
MOVEM T,USTP(U)
MOVSI T,LSRMOD
MOVEM T,UPC(U)
HRLI T,-LUPDL
HRRI T,UPDL-1(U)
MOVEM T,USRPDL(U)
CLEARM UPR(U)
CLEARM MSKST(U)
MOVE T,[JRST 2,@UUOH
MOVEM T,SUEXIT(U)
MOVEI T,APRCHN+40
MOVEM T,APRC(U)
CLEARM PIRQC(U)
SETOM SUPPRO(U)
SETOM PICLR(U)
CLEARM FLSINS(U)
CLEARM MEMTOP(U)
CLEARM RMEMT(U)
MOVSI T,(MOVEM U,)
MOVEM T,SAC17P(U)
POPJ P,
COREX: LSH TT,-10.
CORE 2(TT)
JRST .-1
LSH TT,10.
MOVEI J,2000-METOF-2(TT)
JRST (P)
UADRS2: LSH A,10.
UADRS1: HRRM A,UPR(U)
UADRS: MOVEI B,14(A) ;SET PNTRS FOR USER U USER MEM STARTING AT C(A)
MOVEM B,AC14P(U)
AOS B
MOVEM B,AC15P(U)
AOS B
MOVEM B,AC16P(U)
AOS B
CAMN U,USER
HRRM B,AC17P
HRRM B,SAC17P(U)
ADDI B,21
MOVEM B,40P(U)
AOS B
MOVEM B,41P(U)
CAME U,DISUSR
POPJ P,
PUSH P,A
SUB A,DRELOC
ADDM A,DBLKOP
ADDM A,DISPTR
ADDM A,DRELOC
POP P,A
POPJ P,
0 ;MAKE FLS INS ZERO
USTCD3: PUSHJ P,UFLS
USTCD: MOVE U,USER ;CODE TO LOAD USER HACKTRN
MOVE P,USRPDL(U)
MOVEI B,1
PUSHJ P,ACORE
JRST USTCD3
MOVEI J,2000-METOF-2
MOVE A,[(6+SIXBIT /UT2/
MOVSI B,(SIXBIT /@/
MOVE C,[SIXBIT /HACTRN/
OPEN 2,A
JRST 4,.
USTCD1: CAMN B,[JRST 1
TLZ C,400000 ;BIT SET FROM SIXBIT HACTRN
HRROI A,B
IOT 2,A
JUMPL C,USTCD1
JUMPGE B,USTCD2
MOVE D,B
HRRZ TT,B
HLRO I,B
SUB TT,I
CAML TT,J
JSP P,COREX ;PDL CLOBBERED BY UUO
IOT 2,B
HRRZ B,UPR(U)
ADD B,D
ROT D,1
ADD D,(B)
AOBJN B,.-2
HRROI A,B
IOT 2,A
CAME B,D
JRST USTCD
JRST USTCD1
USTCDR: MOVE U,USER
MOVE P,USRPDL(U)
PUSHJ P,IODCL
JRST USTCD
IODCL: PUSHJ P,ADFLUSH
MOVEI R,IOCHNM(U)
IODCL1: PUSH P,R
PUSHJ P,ACLOSE
POP P,R
CAIGE R,IOCHNM+17(U)
AOJA R,IODCL1
IODCL2: MOVEI R,IOCHNM+1(U)
PUSHJ P,ACLOSE
MOVE T,SIOCP(U)
TLNN T,-1
POPJ P,
POP T,(R)
MOVEM T,SIOCP(U)
JRST IODCL2
URSTRT: POP P,U
POP P,EPDL(U)
MOVE T,TTYTBL(U)
PUSH P,UPR(U)
PUSH P,MEMTOP(U)
PUSH P,SAC17P(U)
PUSH P,RMEMT(U)
PUSHJ P,USTR4
POP P,RMEMT(U)
POP P,SAC17P(U)
POP P,MEMTOP(U)
POP P,UPR(U)
MOVE T,[1,,(SIXBIT /HTN/)
MOVEM T,JNAME(U)
MOVEI T,USTCDR
MOVEM T,UPC(U)
CLEARM USTP(U)
JRST URUN
USTCD2: CLOSE 2,
JRST 1,(B)
;SUBTTL USER UUO WAIT ROUTINE
UFLS: CONO PI,CLKOFF ;DOES NOT WORK FOR XCT T
EXCH U,USER
MOVEM T,EPDL2(U) ;SAVE C(U)
MOVE T,USER ;AND C(T) FOR FLSINS
MOVEM T,EPDL1(U)
MOVEM U,USER
POP P,T ;WORK FOR INST (P)
MOVEM T,UPC(U)
SKIPA T,-2(T)
UFL3: MOVE T,(T)
HRRI T,@T ;CALCULATE E
TLZ T,37
MOVEM T,FLSINS(U)
TLC T,(XCT)
TLNN T,777740
JRST UFL3 ;WORK FOR XCT
PUSHJ P,SEARCH ;FIND NEW USER
CAMN U,USER
JRST UFL1 ;SAME USER
MOVE T,EPDL2(U)
MOVEM T,AC16S(U)
MOVE T,EPDL1(U)
MOVEM T,AC17S(U)
UFL2: JSR SWITCH ;SWAP USERS
JUMPL U,NULJOB
XORI T,UFL4
TDNN T,[LSRMOD,.-1]
JRST .+3 ;LOSE LOSE
XORI T,UFL4
MOVEM T,URSTR
MOVE T,AC16S(U)
MOVE U,AC17S(U)
UFL4A: CONO PI,CLKON ;CAUSE OF LOSE LOSE
UFL4: JRST 2,@URSTR
NULJOB: AOSN UIDLE
CONO UTC,CUINT
CONO PI,CLKON
MOVEI
MOVSI 1,(AOJA)
AOJA 1,1
UFL1: SKIPE SCRFG1
JRST UFL6
MOVE T,UPC(U)
MOVEM T,URSTR
MOVE T,EPDL2(U)
JRST UFL4A
UFL6: MOVNI U,1
JRST UFL2
LWAIT1: CONO PI,UTCON ;WAIT FOR INS W UTCCHN OFF
LWAIT: XCT @(P)
PUSHJ P,UFLS
CONO PI,UTCOFF
XCT @(P)
JRST LWAIT1
JRST POPJ1
SWAIT: MOVEI T,(@) ;WAIT FOR @ NEXT LOC TO BE NEG
HRLM T,(P)
SKIPL @(P)
PUSHJ P,UFLS
AOSE @(P)
JRST SWAIT 2
JRST POPJ1
SUBTTL UUO PROCESSOR
IOT=UUOMIN
OPEN=UUOMIN+1_27.
OPER=UUOMIN+2_27.
CALL=UUOMIN+3_27.
USET=UUOMIN+4_27.
BREAK=UUOMIN+5_27.
DISMIS=CALL 1,
TRAND=CALL 2,
TRANAD=CALL 3,
VALRET=CALL 4,
UTRAN=CALL 5,
CORE=CALL 6,
TRNDL=CALL 7,
DSTART=CALL 10,
FDELE=CALL 11,
ITYI=OPER 1
LISTEN=OPER 2
SLEEP=OPER 3
SETMSK=OPER 4
GETMSK=OPER 5
LOGIN=OPER 6
CLOSE=OPER 7
UFLUSH=OPER 10
ATTY=OPER 11
GBLTTY=OPER 12
IPUSH=OPER 13
IPOP=OPER 14
DFLUSH=OPER 15
DSTOP=OPER 16
RDTIME=OPER 17
RDSW=OPER 20
LPEN=OPER 21
UDISMT=OPER 22
.RUPC==0
.RVAL==1
.RILOOK==2
.ROLOOK==3
.RUNAME==4
.RJNAME==5
.RMSK==6
.RUSTP==7
.RPIRQC==10
.RINTB==11
.RMEMT==12
.RSV40==13
.SUPC==400000
.SVAL==400001
.SILOOK==400002
.SOLOOK==400003
.SMSK==400006
.SUSTP==400007
.SPIRQC==400010
USRUUO: MOVEM T,@40P(U) ;USER INTERPRETED UUO
HRRZ T,@41P(U)
CAIL T,20
CAML T,MEMTOP(U)
JRST ILLOP
HRLI U,1(T)
ADD T,UPR(U)
HRLI T,UUOH
BLT T,0
HLRM U,UUOH
UUOEX: MOVE T,@AC16P(U)
MOVE U,@AC17P
UEXIT: JRST 2,@UUOH
URSTR: 0
UUOH: 0
AC17P: MOVEM U,.
MOVE U,USER
MOVEM T,@AC16P(U)
SKIPL T,40
CAML T,[100000,,
JRST ILLOP
CAML T,[UUOMIN
CAML T,[UUOMAX
JRST USRUUO
ILLOP1: MOVEM P,@AC15P(U)
HRRZ P,UPR(U)
BLT P,@AC14P(U)
MOVE P,USRPDL(U)
LSH T,-27.
XCT UUODSP-UUOMIN_-27.(T)
URET: HRLZ U,UPR(U)
BLT U,U
JRST UEXIT
ONEFLS: CONO PI,CLKOFF
MOVE U,USER
HRRZ T,UPR(U)
BLT T,@AC15P(U)
MOVE T,[JRST 2,@UUOH
MOVEM T,UEXIT
MOVE P,USRPDL(U)
ILLOP3: AOS UUOH
UUOE1: CONO PI,CLKOFF
SOS T,UUOH
MOVEM T,UPC(U)
PUSHJ P,SEARCH
CAMN U,USER
JRST UFL7
UFL8: HRLZ P,UPR(U)
BLT P,P
MOVE T,@AC16P(U)
MOVEM T,AC16S(U)
MOVE T,@AC17P
MOVEM T,AC17S(U)
JRST UFL2
UFL7: SKIPN SCRFG1
JRST UFL8
MOVNI U,1
JRST UFL2
ILUUO: MOVEI T,BILLOP
UUOERR: IORM T,PIRQC(U)
MOVE T,40
MOVEM T,@40P(U)
JRST UUOE1
IOADC: MOVEI T,BIOADC
JRST UUOERR
;CODE TO BE FLUSHED
NSD: JRST URET
LCDIY: JRST URET
IOCERR: MOVEI T,BIOCER
IORM T,PIRQC(U)
JRST UUOE1
NCA: JRST URET
FILDF: JRST URET
UTPFUL: JRST 4,.
;UUO DISPATCH
UUODSP: PUSHJ P,AIOT
PUSHJ P,AOPEN
PUSHJ P,AOPER
PUSHJ P,ACALL
PUSHJ P,AUSET ;INSERT ADDED UUO'S HERE
PUSHJ P,ABREAK
PUSHJ P,ILLOP2
ILLOP: MOVE T,UUOH
TLNN T,LSRMOD
JRST 4,.
MOVSI T,(AUUO)
JRST ILLOP1
ILLOP2: MOVEI T,BILLOP
ILLOP4: IORM T,PIRQC(U)
JRST ILLOP3
; IOT DISPATCH
AIOT: LDB R,[270400,,40
ADDI R,IOCHNM(U)
HLRZ A,(R)
HRRZ B,(R)
HRRZ C,40
CAML C,RMEMT(U)
JRST IOADC
ADDI C,@UPR(U)
JRST @IOTTB(B)
;USET DISPATCH
AUSET: HRRZ C,40
CAML C,RMEMT(U)
JRST IOADC
ADDI C,@UPR(U)
LDB R,[270400,,40
ADDI R,IOCHNM(U)
HLRZ A,(R)
HRRZ B,(R)
SKIPL CLSTB(B)
JRST IOCERR ;NO USER IS OPENED ON THIS CHANNEL
HRRZ B,(C)
CAML B,RMEMT(U)
JRST IOADC
ADDI B,@UPR(U)
HLRZ Q,(C)
TRZE Q,400000
JRST OUTLOC
CAIL Q,MXVAL
JRST ILUUO
XCT USETL(Q)
MOVEM D,(B)
POPJ P,
USETL: MOVE D,UPC(A)
MOVE D,VALUE(A)
MOVE D,UILOOK(A)
MOVE D,UOLOOK(A)
MOVE D,UNAME(A)
MOVE D,JNAME(A)
MOVE D,MSKST(A)
MOVE D,USTP(A)
MOVE D,PIRQC(A)
HLLZ D,SUPPRO(A)
MOVE D,RMEMT(A)
MOVE D,SV40(A)
MXVAL==.-USETL
OUTLOC: CAIL Q,MXVAL
JRST ILUUO
MOVE D,(B)
XCT USETL1(Q)
POPJ P,
USETL1: PUSHJ P,UPCSET
MOVEM D,VALUE(A)
MOVEM D,UILOOK(A)
MOVEM D,UOLOOK(A)
JRST ILUUO
JRST ILUUO
MOVEM D,MSKST(A)
PUSHJ P,USTOP
MOVEM D,PIRQC(A)
JRST ILUUO
JRST ILUUO
JRST ILUUO
USTOP: EXCH U,A
CONO PI,CLKOFF
SKIPN USTP(U)
PUSHJ P,PCCK
DPB D,[410100,,USTP(U) ;BUSRC
CONO PI,CLKON
EXCH U,A
POPJ P,
UPCSET: EXCH U,A
PUSHJ P,PCCK
TLO D,LSRMOD
TLZ D,BADPC
MOVEM D,UPC(U)
CONO PI,CLKON
EXCH U,A
POPJ P,
AFDELE: CAML B,MEMTOP(U)
JRST IOADC
PUSH P,(C)
MOVSI T,(SETZ)
IORM T,(P)
JRST AFDEL1
;SUBTTL OPEN SET UP AND DISPATCH
;3.1 = 0 => INPUT =1 OUTPUT
;3.2=0 => UNITS =1 BLOCK
;3.3=0 => ASCII =1 IMAGE
;4.9 = DELETE OR RENAME
AOPEN: LDB R,[270400,,40 ;OPEN UUO
HRRZ C,40
CAML C,MEMTOP(U)
JRST IOADC
ADDI C,@UPR(U)
ADDI R,IOCHNM(U) ;C E(40) T AC(40)
HLRZ A,(R) ;OPEN FORMAT RH = DEV NAME
HRRZ B,(R) ;2ND IN 3RD WDS FILE NAME
PUSH P,R
PUSH P,C
PUSHJ P,@CLSTB(B) ;CLOSE PREV
POP P,C
POP P,R
CLEARM (R)
PUSH P,(C) ;GET DEV AND FILE NAMES
AFDEL1: PUSH P,1(C)
PUSH P,2(C)
PUSHJ P,TRAN ;IO MAP
JRST URET
MOVE A,-2(P)
MOVSI B,-NDEVS
HRRZ C,DEVTAB(B)
CAIE C,(A)
AOBJN B,.-2
JUMPG B,OPEN1
MOVSI C,400000