1 TITLE SYSCON - UUO HANDLER
\r
3 EXTERNAL CLOSE1,ILLINS,IN,JOBAC,JOBADR,JOBDAT
\r
4 EXTERNAL MTAPE1,OUT,RELEA1,UINBF,UINIT,UOUTBF
\r
5 EXTERNAL USRJDA,USRSAV,USTATO,USTATS,USTATZ
\r
6 EXTERNAL ERROR,UUOERR,CLDS,CLEN
\r
7 EXTERNAL IOIERR,MJOBPD,JOBPDL,WAIT1,USRREL,PUUOAC
\r
8 EXTERNAL JOBPDL,MJOBPD,USETST
\r
12 , DEC 06 00 EX UUO L PT PRE 06 UUO HANDLER
\r
14 , ALL UUOS DROP THEMSELVE IN REAL LOCATION 40, AND TRAP
\r
15 , TO 41. THE UUO HANDLER SHUFFLES THE UUO OFF TO THE USERS
\r
16 , 40,41, IF IT IS NOT A SYSTEM UUO.
\r
17 , SYSTEM UUOS FALL INTO THREE CLASSES, HANDLED DIFFERENTLY
\r
18 , (1) SYSTEM FUNCTIONS: LOAD ACS PDP, PROG, AND DISPATCH TO THE
\r
20 , (2) DEVICE INDEPENDENT I/O UUO: ALSO LOAD ACS DEVDAT AND IOS
\r
21 , AND GO THE THE SYSTEM FUNCTION.
\r
22 , (3) DEVICE DEPENDENT I/O UUOS: DO (1) AND (2), THEN DISPATCH
\r
23 , THROUGH THE TABLE WHOSE ADDRESS IS IN THE RIGHT HALF OF DEVSER(DEVD
\r
24 , CONTROL MAY ALWAYS BE RETURNED BY EXECUTING A
\r
26 , WHICH WILL RESTORE THE ACS, ARP BITS, AND RETURN.
\r
27 , THE UUO HANDLER IS PURE IF THE FOLLOWING RESTRICTIONS ARE OBSERVED.
\r
28 , RESTRICTIONS: UUOS CANNOT BE CALLED BY INTERRUPT SERVICE ROUTINES.
\r
31 , ROUTINES CALLED: ILLINS, ADRCK, EXCLK, UUOH, SETIOS,UUOUSR
\r
32 , UUOS CALLED: CALL, INIT, RELEAS, CLOSE, OUTBUF, INBUF
\r
33 , STATS, STATO, STATZ, OUTPUT, INPUT
\r
34 , DEVICE DEPENDENT: DEN, DLK, DSO, DSI, DGF
\r
35 , SYMBOLS SET/USED:
\r
36 , ACCUMULATORS: POP S/U TAC S/U
\r
39 , SYSTEM PARAMETERS: UIO U
\r
42 , JOB AREA: JOBAC U JOBDAT U
\r
44 , SYSTEM ADDRESSES: CLK S/U
\r
47 , DEVICE DATA BLOCK: DEVSER U
\r
48 , INTERNAL ADDRESSES: 40 S/U
\r
57 EXCH TAC,40 ;SAVE TAC; PICK UP UUO
\r
58 MOVEM 17,USRSAV ;SAVE 17
\r
59 TLNE TAC,77000 ;0 UUO IS ILLEGAL
\r
60 TLNE TAC,740000 ;UUO FOR SYSTEM?
\r
62 MOVE 17,JOBADR ;GET JOB AREA ADDRESS
\r
63 MOVEM TAC,40(17) ;STORE UUO IN USERS 40
\r
64 HRRZ TAC,41(17) ;PICK UP ADR OF USERS JSR
\r
65 JUMPE TAC,UUOSYS ;IF ADDRESS=0,ILLEGAL USER UU
\r
66 HLL TAC,UUO0 ;PICK UP PROCESSOR FLAGS FOR
\r
67 TLNN TAC,USRMOD ;WAS UUO FROM USER?
\r
68 JRST UUOSYS ;NO, ILLEGAL NUUO FROM SYSTEM
\r
69 MOVEI 17,(TAC) ;17 NOW HAS REL. ADR. OF USER
\r
70 CAMG 17,USRREL ;DONT INCREMENT RETURN IF PC
\r
71 HRRI TAC,1(TAC) ;INCREMENT PC
\r
72 EXCH TAC,UUO0 ;SET UP RETURN TO USER, PICK
\r
74 CAMLE 17,USRREL ;LEGAL MEMORY?
\r
75 JRST .+3 ;NO. DONT STORE PC
\r
76 ADD 17,JOBADR ;MAKE REL. ADR. INTO ABS. ADR
\r
77 MOVEM TAC,(17) ;STORE FLAGS AND PC LIKE JSR
\r
78 MOVE TAC,40 ;RESTORE TAC
\r
79 MOVE 17,USRSAV ;RESTORE 17
\r
80 JRST 2,@UUO0 ;RETURN TO USER
\r
84 UUOSYS: EXCH TAC,40 ;RESTORE TA. RESTORE THE UUO
\r
85 MOVE 17,UUO0 ;PICK UP PROCESSOR FLAG
\r
86 TLNN 17,USRMOD ;SYSTEM UUO FROM SYSTEM?
\r
88 MOVE 17,JOBADR ;NO. PICK UP ADR. OF USER PRO
\r
89 MOVEM 16,16(17) ;STORE AC16 IN USER 16
\r
90 HRRZ 16,17 ;SET UP BLP POINTER
\r
91 BLT 16,15(17) ;MOVE REAL ACS TO USER AREA
\r
92 MOVE 0,USRSAV ;MOVE USER 17 TO USERS AREA
\r
95 MOVE JDAT,JOBDAT ;LOAD UP JOB DAT AREA ADDRES
\r
96 MOVSI PDP,MJOBPD ;LOAD UP PUSH DOWN AC AND
\r
97 HRRI PDP,JOBPDL(JDAT) ;MAKE ABSOLUTE PATH
\r
98 SKIPA PROG,17 ;PROGRAM BASE ADDRESS
\r
99 UUOSY1: MOVE 17,USRSAV ;RESTORE AC17 IF UUO FROM SYS
\r
100 PUSH PDP,UUO0 ;SAVE RETURN ON PUSH DOWN LIS
\r
101 MOVE UUO,40 ;GET THE UUO INTO AC(UUO)
\r
102 LDB TAC1,[POINT 9,UUO,8] ;PICK UP UUO OP COD
\r
103 CAIL TAC1,100 ;ILLEGAL INSTRUCTION?
\r
105 CAIGE TAC1,40 ;SYSTEM UUO?
\r
106 JRST UUOERR ;NO. ILLEGAL
\r
108 MOVE DEVDAT,USRJDA(TAC) ;GET DDB
\r
109 CAIGE TAC1,100-UUOT2L ;AN IO UUO?
\r
111 CAIE TAC1,70 ;CLOSE AND RELEASE ARE ALWAYS LEGAL
\r
114 JUMPE DEVDAT,IOIERR ;CHANNEL MUST BE ASSIGNED
\r
115 MOVE IOS,DEVIOS(DEVDAT) ;GET DATA BLOCK STA
\r
116 JRST UUOT2-77+UUOT2L-1(TAC1) ;DISPATCH
\r
118 UUODSP: CAIGE TAC1,40+UUOT1L ;LEGAL SYSTEM UUO?
\r
119 JRST UUOT1-40(TAC1) ;YES. DISPATCH
\r
123 UUOT1: JRST UCALL ;40
\r
125 ;ADD NON IO UUOS HERE
\r
150 ,DISPATCH TO SPECIAL ROUTINE
\r
152 <U'A: PUSHJ PDP,UDSP
\r
155 UDSP: MOVE TAC,DEVSER(DEVDAT)
\r
156 MOVE TAC1,DEVCHR(DEVDAT)
\r
158 MOVEI TAC,NRTOSP-4 ;IGNORE THESE CALLS FOR NON-
\r
160 NRTOSP: JRST CUXIT1 ;SKIP RETURN
\r
161 JRST CUXIT1 ;SKIP RETURN
\r
162 JSP DAT,ERROR ;DUMP0
\r
163 JSP DAT,ERROR ;DUMP1
\r
167 UDEN: PUSHJ PDP,WAIT1
\r
170 MOVEM IOS,DEVIOS(DEVDAT)
\r
174 HLLM DEVDAT,USRJDA(TAC)
\r
178 UDLK: PUSHJ PDP,WAIT1
\r
179 TDZ IOS,[XWD IOEND,776000]
\r
180 MOVEM IOS,DEVIOS(DEVDAT)
\r
184 HLLM DEVDAT,USRJDA(TAC)
\r
196 , 6-CSS-DEC-CALL-PL-PRE2
\r
197 , H. R. MORSE 64-11-17
\r
199 , CALL 0,[SIXBIT/NAME/]
\r
200 , WHERE NAME IS THE NAME OF A SYSTEM ROUTINE.
\r
201 , IF NO SYSTEM ROUTINE WITH THE SPECIFIED NAME IF FOUND, THIS ROUTINE
\r
203 , MONITOR INTERFACE
\r
204 , ROUTINES CALLED: ERROR, HASH, SYSTEM ROUTINES DEFINED BY
\r
206 , SYMBOLS SET/USED:
\r
207 , ACCUMULATORS: DAT S/U PROG U
\r
209 ;CONTENTS OF USER AC PLACED IN AC TAC
\r
211 UCALL: TLO UUO,JDAT ;RELATIVIZE UUO ADDRESS
\r
212 MOVE DAT,@UUO; DAT:=NAME OF SYSTEM ROUTINE C
\r
214 CAME DAT,UCLTAB(TAC1); SEARCH SYSTEM TOUTINE NAME TA
\r
216 LDB DAT,PUUOAC ;USER UUO AC FIELD
\r
218 MOVE TAC,@DAT ;PICK UP CONTENTS OF USER AC
\r
219 JUMPL TAC1,@UCLJMP(TAC1)
\r
253 , DEV 06 00 EX COM L PT PRE 02 UXIT
\r
254 , H. R. MORSE 64-12-26
\r
256 , ANY TRANSFER OF CONTROL TO UXIT
\r
257 , EXITS THIS UUO CALL.
\r
258 , MONITOR INTERFACE
\r
259 , SYMBOLS SET/USED:
\r
260 , ACCUMULATORS: MAY RESTORE ALL ACCUMULATORS
\r
264 , JOB AREA: JOBAC U
\r
265 , SYSTEM ADDRESSES: USRUXT U
\r
270 INTERN UXIT,CUXIT1,CUXIT2
\r
274 UXIT: POP PDP,USRSAV ;RESTORE UUO EXIT ADDRESS FRO
\r
276 TLNN TAC,USRMOD ;WAS ENTRY FROM USER MODE?
\r
278 MOVEM TAC,USRSAV ;SET UP RETURN
\r
279 MOVSI 17, JOBAC(JDAT) ;RESTORE ACCUMULATO
\r
281 UXIT1: JRST 2,@USRSAV ;RETURN TO USERS PROGRAM
\r
283 UXIT2: EXCH TAC,USRSAV
\r