1 TITLE COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES
\r
2 SUBTTL T.HASTINGS 8-2-65
\r
3 ;CALLED FROM COMMAND DECODER WHICH IS CALLED FROM CLOCK ROUTINE
\r
4 ;WITH FOLLOWING ACS SET:
\r
5 ;TAC= BYTE POINTER TO COMMAND STRING(SPACE OR CR AFTER COMMAND NAME)
\r
7 ;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER
\r
8 ;DEVDAT= ADDRESS OF DEVICE DATA BLOCK INITIATING COMMAND
\r
9 ;JDAT = ADDRESS OF JOB DATA AREA, = 0 IF NO JOB AREA
\r
11 ;UPON RETURN FROM COMMAND SETUP ROUTINE, A CR-LF IS ADDED IF
\r
12 ;NEEDED AND TTY IS STARTED
\r
14 ;SINCE THE COMMAND DECODER IS CALLED FROM THE CLOCK ROUTINE
\r
15 ;COMMAND SETUP ROUTINES MUST RUN TO COMPLETION QUICKLY
\r
16 ;IF A COMMAND FUNCTION CANNOT DO THIS, IT MUST JUST SET
\r
17 ;THE JOB TO A RUNNABLE STATUS AND RETURN I MEDIATELY
\r
19 ; "IJOB" - INITIALIZE JOB
\r
21 EXTERNAL RADX10,JOBINI,JOBKIL,CRLF,MONJOB
\r
28 PJOB: MOVE TAC, ITEM
\r
32 ;KILL JOB(MUST HAVE CORE ASSIGNED)
\r
38 ; "START L" OR "START" - START AT LOC. L OR STARTING ADDRESS
\r
40 EXTERNAL OCTIN,JOBSA,START1,COMERA,STARTU,CPOPJ,CPOPJ1,STARTM
\r
42 START: PUSHJ PDP,STRT
\r
44 JRST STARTU ;GO SET JOB TO START(CONSOLE IN USER MO
\r
46 ; "STARTC L" OR "STARTC" - START AT LOC. L(TTY IN COMMAND MODE)
\r
51 STARTC: PUSHJ PDP,STRT
\r
53 JRST STARTM ;FO SET JOB TO START(TTY IN COM. MODE)
\r
55 ;ROUTINE TO SCAN ARGUMENT
\r
57 STRT: PUSHJ PDP,OCTIN ;CONVERT OCTAL NO,
\r
58 JRST ST2 ;EITHER NO NUMBER OR ERROR
\r
59 JRST ST3 ;START JOB C(TAC1)
\r
61 ST2: JUMPN TAC1, CPOPJ ;NOT A NUMBER IF NON-ZERO
\r
62 HRRZ TAC1, JOBSA(JDAT) ;NO, START AT STARTING ADDRES
\r
63 ST3: HRLI TAC1, 1000 ;USER MODE FLAG
\r
64 JRST CPOPJ1 ;OR RETURN
\r
67 ; "CONT" - CONTINUE EXECUTION FROM WHERE LEFT OFF
\r
69 EXTERNAL CONTU,CONMES,JBTSTS
\r
71 CONT: MOVSI TAC1, JERR
\r
72 TDNN TAC1, JBTSTS(ITEM) ;IS JOB ERROR BIT SET?
\r
73 JRST CONTU ;NO, GO SET JOB TO CONTINUE
\r
74 CONTA: JSP TAC,CONMES ;YES, PRINT CANT CONTINUE
\r
76 ASCIZ /CAN'T CONTINUE
\r
79 ; "CONTC" - CONTINUE EXECUTION(TTY REMAINS IN COMMAND MODE)
\r
84 CONTC: MOVSI TAC1, JERR
\r
85 TDNN TAC1, JBTSTS(ITEM) ;IS JOB ERROR BIT SET?
\r
89 ; "DDT" - START EXECUTION AT DDT IN USER AREA
\r
91 EXTERNAL JOBDDT,STARTU
\r
93 DDTGO: HRRZ TAC1, JOBDDT(JDAT) ;GET DDT STARTING ADDRESS
\r
94 JUMPN TAC1,DDT1 ;GO START JOB IF NON-ZERO
\r
95 JSP TAC,CONMES ;ZERO, PRINT"NO DDT"
\r
100 DDT1: HRLI TAC1,USRMOD ;USER MODE BIT
\r
101 JRST STARTU ;GO SET TO RUN JOB
\r
106 DIGITAL: JSP TAC,CONMES
\r
113 ; "CORE #" - ASSIGNS #*1024 WORDS OF CORE TO JOB
\r
114 ; "CORE" WITH NO ARGUMENT IS EQUIVALENT TO "CORE 0"
\r
117 EXTERNAL CORE1,DECIN,ANYRIN,CONMES,COMERA,NOTENF
\r
118 EXTERNAL JOBPFI,JBTADR,CPOPJ,JOBPRT,JOBPR1,JOBZER
\r
121 CORE: PUSHJ PDP, DECIN ;GET NO. OF 1K BLOCKS
\r
123 SKIPN TAC,TAC1 ;IS ZERO BEING ASKED FOR?
\r
124 JUMPN JDAT,JOBZER ;YES, RELEASE ALL DEVICES IF THERE WAS
\r
126 JRST COR2 ;CORE NOT AVAILABLE (AC TAC = BLO CKS L
\r
127 HRRZ JDAT, JBTADR(ITEM) ;CORE GRANTED, CLEAR PART OF
\r
128 JUMPE JDAT, CPOPJ ;UNLESS ALL CORE WAS RETURNED
\r
129 SETZM JOBPRT(JDAT) ;CLEAR PART PROTECTED FROM IO
\r
130 HRLI TAC,JOBPRT(JDAT)
\r
131 HRRI TAC, JOBPR1(JDAT)
\r
132 BLT TAC, JOBPFI(JDAT)
\r
135 COR2: PUSHJ PDP,RADX10 ;PRINT NO. OF FREE 1K BLOCKS LEFT
\r
138 ASCIZ / FREE 1K BLOCKS LEFT, NONE ASSIGNED
\r
140 COR3: JUMPN TAC1, COMERA ;NOT A NO. IF NON-ZERO, APPEND "?"
\r
141 JRST NOTENF ;NOT ENOUGH ARGUMENT
\r
144 ; "SAVE FILE-NAME" - SAVES JOB AREA ON RETRIEVABLE DEVICE
\r
145 ;ONLY A SAVE OR A GET IN PROGRESS FOR EACH JOB
\r
146 ;NO ATTEMPT IS MADE TO SAVE DEVICE ASSIGNMENTS, ACS, OR PC
\r
148 EXTERNAL SAVJOB,START1,SGSET
\r
150 SAVE: MOVEI TAC1, SAVJOB ;SETUP TO RUN SAVJOB
\r
153 ; "GET DEVICE:FILE-NAME" - SETS UP JOB AREA FROM RETRIEVABLE DEVICE
\r
157 GET: MOVEI TAC1, GETJOB ;SETUP TO RUN GET JOB
\r
162 ;"ASSIGN DEV:NAME" - ASSIGNS DEV TO JOB AND GIVES IT LOGICAL NAME NAM
\r
169 EXTERNAL CTEXT1, NOTENF, DEVLST, ASSASG, CONMES, PJOBN, ANYRDX, ERNAM
\r
170 EXTERNAL CRLF, DEVLG,SYSTAP
\r
172 ASSIGN: PUSHJ PDP, CTEXT1 ;GET FIRST ARGUMENT
\r
173 JUMPE TAC1, NOTENF ;NO ARGUMENTS TYPED IF 0
\r
174 MOVE T1, TAC1 ;SAVE DEVICE NAME
\r
175 PUSH PDP, ASSCON ;SAVE INPUT BYTE POINTER
\r
176 MOVEI TAC1, ASSCON ;SETUP ASSIGNED BY CONSOLE BIT
\r
177 ASSN: HLRZ DEVDAT, DEVLST
\r
178 ASSG0: CAME T1,DEVNAM(DEVDAT) ;DOES PHYSICAL NAME MATCH?
\r
180 PUSHJ PDP, ASSASG ;YES, TRY TO ASSIGN DEVICE
\r
181 JRST ASSER1 ;ALREADY ASSIGNED TO ANOTHER JOB
\r
182 JRST ASSFIN ;ASSIGNED
\r
184 ASSG1: MOVE TAC,DEVNAM(DEVDAT) ;IS THIS THE SYSTEM TAPE?
\r
187 LDB T, PJOBN ;SAVE OLD JOB NUMBER FOR THIS
\r
188 TRZ TAC,-1 ;COMPARE LEFT HALF ONLY
\r
190 PUSHJ PDP, ASSASG ;MATCH, TRY TO ASSIGN IT
\r
191 JRST ASSG2 ;KEEP LOOKING
\r
192 JUMPE T,ASSFIN ;IF OLD JOB NUMBER 0, DEVICE PREVIOSLY
\r
194 ASSG2: HLRZ DEVDAT, DEVSER(DEVDAT)
\r
195 JUMPN DEVDAT, ASSG0
\r
197 JRST NOTDEV ;PRINT NO SUCH DEVICE
\r
200 ;ALREADY ASSIGNED TO ANOTHER JOB
\r
202 ASSER1: POP PDP, TAC
\r
210 ASSMS2: ASCIZ /ALREADY ASSIGNED TO JOB /
\r
212 ;DEVICE ASSIGNED, GIVE IT A LOGICAL NAME
\r
214 ASSFIN: POP PDP,TAC ;RESTORE INPUT BYTE POINTER
\r
215 PUSH PDP,DEVDAT ;SAVE DDB ADDRESS
\r
216 PUSHJ PDP,CTEXT1 ;GET SECOND ARG, LOGICAL DEVICE NAME
\r
217 SKIPE TAC,TAC1 ;IS THERE A LOGICAL NAME SPECIFIED?
\r
218 PUSHJ PDP, DEVLG ;YES, SEE IF IT IS ALREADY IN USE
\r
221 MOVEI TAC,LOGERR ;YES, PRINT ERROR
\r
223 ASSF1: MOVE DEVDAT,(PDP) ;RESTORE DDB ADDRESS
\r
224 MOVEM TAC1,DEVLOG(DEVDAT) ;STORE IN DEVICE DATA BLOCK
\r
225 MOVSI TAC1,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT
\r
226 ANDCAM TAC1,DEVMOD(DEVDAT)
\r
227 PUSHJ PDP, ERNAM ;PRINT PHYSICAL DEVICE NAME
\r
234 LOGERR: ASCIZ /LOGICAL NAME ALREADY IN USE, /
\r
237 ;"DEASSIGN DEV" - DEASSIGNS DEVICE FROM CONSOLE
\r
239 INTERNAL DEASSIGN, NOTDEV
\r
240 EXTERNAL CTEXT1, DEVSRC, CONMES, ERNAM, DEASG, DEASTY
\r
242 DEASSIGN: PUSHJ PDP, CTEXT1 ;GET DEVICE NAME
\r
243 JUMPE TAC1,DEASTY ;NO ARG. IF 0, DEASSIGN ALL BUT TTY
\r
244 MOVE TAC, TAC1 ;DEVICE NAME
\r
245 PUSHJ PDP, DEVSRC ;SEARCH FOR DEVICE
\r
246 JRST DEAER1 ;NOT FOUND
\r
247 PUSHJ PDP, DEASG ;FOUND, DEASSIGN IT
\r
248 JRST DEAER2 ;NOT PREVIOUSLY ASSIGNED
\r
249 POPJ PDP, ;DEVICE DEASSIGNED
\r
252 DEAER1: JSP TAC,CONMES ;PRINT NO SUCH DEVICE
\r
254 ASCIZ /NO SUCH DEVICE
\r
257 DEAER2: PUSH PDP, DEVDAT ;PRINT PHYSICAL DEVICE NAME
\r
262 ASCIZ /WASN'T ASSIGNED
\r
266 ; "ATTACH N" - ATTACH CONSOLE TO JOB N
\r
267 ;CHANGES ADDRESS OF TTY DEVICE DATA BLOCK STORED IN -1(PDP)
\r
268 ;BY THE COMMAND DECODER
\r
271 EXTERNAL DECIN,TTYATT,JOBN,ERNAM,CONMES,TTYFND
\r
273 ATTACH: PUSHJ PDP,DECIN ;GET JOB NO.
\r
274 JRST ATT1 ;NOT A NUMBER OR NONE SPECIFIEED
\r
275 SKIPE TAC1 ;0 IS ILLEGAL
\r
276 CAIL TAC1, JOBN ;IS JOB NUMBER TOO BIG?
\r
277 JRST ATT1 ;ILLEGAL JOB NUMBER
\r
278 MOVSI TAC,JNA ;HAS THIS JOB NO BEEN ASSIGNED?
\r
279 TDNN TAC,JBTSTS(TAC1)
\r
280 JRST ATT4 ;NO, PRINT ERROR
\r
281 MOVE ITEM,TAC1 ;JOB NUMBER TO ITEM
\r
282 PUSHJ PDP,TTYATT ;NO, ATTACH TTY
\r
283 JRST ATT2 ;ERROR CANT ATTACH
\r
284 MOVEM DEVDAT,-1(PDP) ;CHANGE DEV DATA BLOCK ADDRES
\r
285 JRST TTYFND ;ATTACHED. GO SET UP OUTP. BYTE PTR.
\r
287 ATT1: JSP TAC,CONMES
\r
288 ASCIZ /ILLEGAL JOB NUMBER
\r
291 ATT2: PUSH PDP,DEVDAT
\r
292 PUSHJ PDP,ERNAM ;PRINT TTY DEVICE NAME
\r
295 ASCIZ / ALREADY ATTACHED
\r
298 ATT4: JSP TAC,CONMES
\r
299 ASCIZ /JOB NEVER WAS INITIATED
\r
302 ; "DETACH" - DETACH CONSOLE FORM JOB
\r
307 DETACH: AOS (PDP) ;SUPRESS CR-LF SO NO TTY DDB SETUP
\r
308 JRST TTYDET ;GO DETACH TTY
\r