Initial commit
[retro-software/dec/tops10/v1.19.git] / src / comcon.mac
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
6 ;ITEM = JOB NUMBER\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
10 \r
11 ;UPON RETURN FROM COMMAND SETUP ROUTINE, A CR-LF IS ADDED IF\r
12 ;NEEDED AND TTY IS STARTED\r
13 \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
18 \r
19 ; "IJOB" - INITIALIZE JOB\r
20 INTERNAL IJOB\r
21 EXTERNAL RADX10,JOBINI,JOBKIL,CRLF,MONJOB\r
22 \r
23 IJOB:   JRST JOBINI\r
24 \r
25 ;PRINT JOB NUMBER\r
26 \r
27         INTERNAL PJOB\r
28 PJOB:   MOVE TAC, ITEM\r
29         PUSHJ PDP,RADX10\r
30         JRST CRLF\r
31 \r
32 ;KILL JOB(MUST HAVE CORE ASSIGNED)\r
33 \r
34         INTERNAL KJOB\r
35 KJOB:   JRST JOBKIL\r
36 \f\r
37 \r
38 ; "START L" OR "START" - START AT LOC. L OR STARTING ADDRESS\r
39 INTERNAL START\r
40 EXTERNAL OCTIN,JOBSA,START1,COMERA,STARTU,CPOPJ,CPOPJ1,STARTM\r
41 \r
42 START:  PUSHJ PDP,STRT\r
43         JRST COMERA     ;ERROR\r
44         JRST STARTU     ;GO SET JOB TO START(CONSOLE IN USER MO\r
45 \r
46 ; "STARTC L" OR  "STARTC" - START AT LOC. L(TTY IN COMMAND MODE)\r
47 \r
48 INTERNAL STARTC\r
49 EXTERNAL STARTM\r
50 \r
51 STARTC: PUSHJ PDP,STRT\r
52         JRST COMERA     ;ERROR\r
53         JRST STARTM     ;FO SET JOB TO START(TTY IN COM. MODE)\r
54 \r
55 ;ROUTINE TO SCAN ARGUMENT\r
56 \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
60 \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
65 \f\r
66 \r
67 ; "CONT" - CONTINUE EXECUTION FROM WHERE LEFT OFF\r
68 INTERNAL CONT\r
69 EXTERNAL CONTU,CONMES,JBTSTS\r
70 \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
75 \r
76         ASCIZ /CAN'T CONTINUE\r
77 /\r
78 \r
79 ; "CONTC" - CONTINUE EXECUTION(TTY REMAINS IN COMMAND MODE)\r
80 \r
81 INTERNAL CONTC\r
82 EXTERNAL CONTM\r
83 \r
84 CONTC:  MOVSI TAC1, JERR\r
85         TDNN TAC1, JBTSTS(ITEM)         ;IS JOB ERROR BIT SET?\r
86         JRST CONTM      ;NO\r
87         JRST CONTA      ;YES\r
88 \r
89 ; "DDT" - START EXECUTION AT DDT IN USER AREA\r
90 INTERNAL DDTGO\r
91 EXTERNAL JOBDDT,STARTU\r
92 \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
96 \r
97         ASCII /NO DDT\r
98 /\r
99 \r
100 DDT1:   HRLI TAC1,USRMOD        ;USER MODE BIT\r
101         JRST STARTU             ;GO SET TO RUN JOB\r
102 ;DIGITAL MAYNARD\r
103 \r
104 INTERNAL DIGITAL\r
105 \r
106 DIGITAL:        JSP TAC,CONMES\r
107         ASCIZ /HELLO\r
108 /\r
109 \f\r
110 \r
111 \r
112 \r
113 ; "CORE  #" - ASSIGNS #*1024 WORDS OF CORE TO JOB\r
114 ;   "CORE" WITH NO ARGUMENT IS EQUIVALENT TO "CORE 0"\r
115 \r
116 INTERNAL CORE\r
117 EXTERNAL CORE1,DECIN,ANYRIN,CONMES,COMERA,NOTENF\r
118 EXTERNAL JOBPFI,JBTADR,CPOPJ,JOBPRT,JOBPR1,JOBZER\r
119 EXTERNAL RADX10\r
120 \r
121 CORE:   PUSHJ PDP, DECIN        ;GET NO. OF 1K BLOCKS\r
122         JRST COR3               ;ERROR\r
123         SKIPN TAC,TAC1          ;IS ZERO BEING ASKED FOR?\r
124         JUMPN JDAT,JOBZER       ;YES, RELEASE ALL DEVICES IF THERE WAS\r
125         PUSHJ PDP,CORE1\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
133         POPJ PDP,\r
134 \r
135 COR2:   PUSHJ PDP,RADX10        ;PRINT NO. OF FREE 1K BLOCKS LEFT\r
136         JSP TAC,CONMES\r
137 \r
138         ASCIZ / FREE 1K BLOCKS LEFT, NONE ASSIGNED\r
139 /\r
140 COR3:   JUMPN TAC1, COMERA      ;NOT A NO. IF NON-ZERO, APPEND "?"\r
141         JRST NOTENF             ;NOT ENOUGH ARGUMENT\r
142 \f\r
143 \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
147 INTERNAL SAVE\r
148 EXTERNAL SAVJOB,START1,SGSET\r
149 \r
150 SAVE:   MOVEI TAC1, SAVJOB      ;SETUP TO RUN SAVJOB\r
151         JRST SGSET\r
152 \r
153 ; "GET DEVICE:FILE-NAME" - SETS UP JOB AREA FROM RETRIEVABLE DEVICE\r
154 INTERNAL GET\r
155 EXTERNAL GETJOB\r
156 \r
157 GET:    MOVEI TAC1, GETJOB      ;SETUP TO RUN GET JOB\r
158         JRST SGSET\r
159 \f\r
160 \r
161 \r
162 ;"ASSIGN DEV:NAME" - ASSIGNS DEV TO JOB AND GIVES IT LOGICAL NAME NAM\r
163 \r
164 ;TEMPORARY ACS\r
165         T1=BUFPNT\r
166         T=BUFWRD\r
167 \r
168 INTERNAL ASSIGN\r
169 EXTERNAL CTEXT1, NOTENF, DEVLST, ASSASG, CONMES, PJOBN, ANYRDX, ERNAM\r
170 EXTERNAL CRLF, DEVLG,SYSTAP\r
171 \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
179         JRST ASSG1              ;NO\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
183 \r
184 ASSG1:  MOVE TAC,DEVNAM(DEVDAT)         ;IS THIS THE SYSTEM TAPE?\r
185         CAMN TAC,SYSTAP\r
186         JRST ASSG2              ;YES\r
187         LDB T, PJOBN            ;SAVE OLD JOB NUMBER FOR THIS\r
188         TRZ TAC,-1              ;COMPARE LEFT HALF ONLY\r
189         CAMN TAC, T1\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
193 \r
194 ASSG2:  HLRZ DEVDAT, DEVSER(DEVDAT)\r
195         JUMPN DEVDAT, ASSG0\r
196         POP PDP, TAC\r
197         JRST NOTDEV             ;PRINT NO SUCH DEVICE\r
198 \f\r
199 \r
200 ;ALREADY ASSIGNED TO ANOTHER JOB\r
201 \r
202 ASSER1: POP PDP, TAC\r
203         MOVEI TAC, ASSMS2\r
204         PUSHJ PDP, CONMES\r
205         MOVEI TAC1, ^D10\r
206         LDB TAC, PJOBN\r
207         PUSHJ PDP,ANYRDX\r
208         JRST CRLF\r
209 \r
210 ASSMS2: ASCIZ /ALREADY ASSIGNED TO JOB /\r
211 \r
212 ;DEVICE ASSIGNED, GIVE IT A LOGICAL NAME\r
213 \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
219                                 ;BY THIS USER\r
220         JRST ASSF1                      ;NO\r
221         MOVEI TAC,LOGERR        ;YES, PRINT ERROR\r
222         PUSHJ PDP,CONMES\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
228         POP PDP, DEVDAT\r
229         JSP TAC,CONMES\r
230 \r
231         ASCIZ / ASSIGNED\r
232 /\r
233 \r
234 LOGERR: ASCIZ /LOGICAL NAME ALREADY IN USE, /\r
235 \f\r
236 \r
237 ;"DEASSIGN DEV" - DEASSIGNS DEVICE FROM CONSOLE\r
238 \r
239 INTERNAL DEASSIGN, NOTDEV\r
240 EXTERNAL CTEXT1, DEVSRC, CONMES, ERNAM, DEASG, DEASTY\r
241 \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
250 \r
251 NOTDEV:\r
252 DEAER1: JSP TAC,CONMES          ;PRINT NO SUCH DEVICE\r
253 \r
254         ASCIZ /NO SUCH DEVICE\r
255 /\r
256 \r
257 DEAER2: PUSH PDP, DEVDAT        ;PRINT PHYSICAL DEVICE NAME\r
258         PUSHJ PDP, ERNAM\r
259         POP PDP, DEVDAT\r
260         JSP TAC,CONMES\r
261 \r
262         ASCIZ /WASN'T ASSIGNED\r
263 /\r
264 \f\r
265 \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
269 \r
270 INTERNAL ATTACH\r
271 EXTERNAL DECIN,TTYATT,JOBN,ERNAM,CONMES,TTYFND\r
272 \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
286 \r
287 ATT1:   JSP TAC,CONMES\r
288         ASCIZ /ILLEGAL JOB NUMBER\r
289 /\r
290 \r
291 ATT2:   PUSH PDP,DEVDAT\r
292         PUSHJ PDP,ERNAM         ;PRINT TTY DEVICE NAME\r
293         POP PDP,TAC\r
294         JSP TAC,CONMES\r
295         ASCIZ / ALREADY ATTACHED\r
296 /\r
297 \r
298 ATT4:   JSP TAC,CONMES\r
299         ASCIZ /JOB NEVER WAS INITIATED\r
300 /\r
301 \r
302 ; "DETACH" - DETACH CONSOLE FORM JOB\r
303 \r
304 INTERNAL DETACH\r
305 EXTERNAL TTYDET\r
306 \r
307 DETACH: AOS (PDP)       ;SUPRESS CR-LF SO NO TTY DDB SETUP\r
308         JRST TTYDET     ;GO DETACH TTY\r
309 \r
310         END,\r