Cleanup of typos.
[retro-software/dec/tops10/v1.19.git] / src / comini.mac
1         TITLE COMINI - THE COMMAND DECODER\r
2         SUBTTL  T. HASTINGS 8-2-65\r
3 ;CALLED FROM CLOCK ROUTINE WHEN COMCNT IS GREATER THAN 0\r
4 ;AS SET BY TTY SERVICE ROUTINE\r
5 ;ALL ACS HAVE BEEN SAVED BY CLOCK CHANNEL\r
6 ;THE COMMAND DECODER CALLS TTYCOM WHICH SCANS FOR TTY WHICH TYPED\r
7 ;THE COMMAND AND THEN DISPATCHES(PUSHJ) TO APPROPRIATE\r
8 ;COMMAND SETUP ROTUINE OF THE SAME NAME WITH ACS SET AS:\r
9 ;ITEM = JOB NUMBER\r
10 ;TAC = BYTE POINTER TO COMMAND STRING(SSPACE OR CR AFTER COMMAND NAME)\r
11 ;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER\r
12 ;DEVDAT = ADDRESS OF DEVICE DATA BLOCK TYPING COMMAND\r
13 ;JDAT = ADDRESS OF JOB AREA, = 0 IF NO JOB AREA\r
14 ;PROG = ADDRESS OF PROGRAM AREA\r
15 ;DEVDAT IS ALSO PUSHED ON END OF PD LIST SO IT MAY BE DESTROYED\r
16 ;UPON RETURN FROM COMMAND SETUP ROUTINE. A CR-LF IS ADDED TO\r
17 ;MASSAGE AND TTY IS STARTED ON TTY SPCIFIED BY -1(PDP)\r
18 \r
19 ;SINCE THE COMMAND DECODER IS CALLED FROM CLOCK ROUTINE\r
20 ;COMMAND SETUP ROUTINE MUST RUN TO COMPLETION QUICKLY\r
21 ;IF A COMMAND FUNCTION CANNON DO THIS. IT MUST JUST SET\r
22 ;THE JOB TO RUNABLE STATUS AND RETURN IMMEDIATELY\r
23 \r
24 INTERNAL COMMAND\r
25 EXTERNAL TTYCOM,TTYSTR,CTEXT,JBTADR,CONMES\r
26 EXTERNAL COMERR,COMCNT\r
27 EXTERNAL JOBINI,CRLF,CTEXT,RADX10,ASSJOB,JBTSTS\r
28 \r
29 T=BUFPNT  ;TEMPORARY ACS\r
30 T1=BUFWRD\r
31 \f\r
32 COMMAND:  PUSHJ PDP, TTYCOM     ;SETUP DEVDAT,DAT,TAC, AND ITEM\r
33           JRST COM2             ;NONE FOUND\r
34           PUSH PDP,DEVDAT       ;SAVE TTY DDB ADDRESS\r
35           PUSHJ PDP, CTEXT      ;RETURN COMMAND NAME IN TAC1\r
36           JUMPE TAC1, COM2A     ;IGNORE BLANK LINE\r
37           MOVSI T, -DISPL       ;SEARCH FOR COMMAND NAME\r
38           CAME TAC1, COMTAB(T)  \r
39           AOBJN T, .-1\r
40           JUMPGE T,COM2B        ;WAS COMMAND FOUND?\r
41           MOVE TAC1,DISP(T)     ;YES, GET DISPATCH ADDRESS AND BITS\r
42           JUMPN ITEM, COM1      ;HAS A JOB NUMBER BEEN ASSIGNED\r
43           TLNE TAC1,NOJOBN      ;NO, IS A JOB NUMBER NEEDED FOR THIS CO\r
44           JRST COM1 ;NO\r
45           PUSHJ PDP,ASSJOB      ;TRY TO ASSIGN A FREE JOB NUMBER\r
46           JRST COM3A            ;NONE AVAILABLE, ERROR MESSAGE\r
47 \f\r
48           PUSH PDP, TAC         ;SAVE INPUT BYTE POINTER\r
49           PUSH PDP,TAC1         ;SAVE ADDRESS OF COMMAND ROUTINE\r
50           SETZB PROG,JDAT       ;NO CORE, CLEAR REL. ADRESS\r
51           PUSHJ PDP,JOBINI      ;INITIALIZE JOB\r
52           POP PDP,TAC1          ;RESTORE ADR OF COMMAND ROUTINE\r
53           POP PDP, TAC          ;RESTORE INPUT BYTE POINTER\r
54           MOVEM DEVDAT,(PDP)    ;SET ADDRESS OF TTY DEV. DATA BLOCK\r
55 COM1:     HRRZ JDAT, JBTADR(ITEM)       ;AND JOB DATA AREA\r
56           SKIPN PROG,JDAT       ;SET PROG. DOES JOB HAVE CORE?\r
57           TLNE TAC1,NOCORE      ;NO. IS CORE NEEDED FOR THIS COMMAND?\r
58           JRST COM1C            ;NO\r
59           MOVEI TAC,NOCOR       ;YES, PRINT "NO CORE ASSIGNED"\r
60 COM1B:    PUSHJ PDP,CONMES\r
61           JRST COM1A\r
62 \r
63 COM1C:    PUSHJ PDP,(TAC1)      ;DISPATCH TO COMMAND SETUP ROUTINE\r
64 COM1A:    JUMPN ITEM, COM3      ;ADD CR-LF AND CHECK FOR JOB INIT.\r
65 COM1D:    POP PDP,DEVDAT        ;RESTORE TTY DDB ADDRESS\r
66           PUSHJ PDP, TTYSTR     ;START OUTPUT, IF ANY\r
67 COM2:     SOS COMCNT            ;DECREMENT COMMAND COUNT\r
68           POPJ PDP,             ;EXIT\r
69 \r
70 COM2A:    LDB TAC1, TAC         ;NULL FIELD. WAS BREAK CHAR. A CR?\r
71           CAIE TAC1,15          ;A CR?\r
72           CAIN TAC1,";"           ;OR A SEMI COLON?\r
73           JRST COM1D            ;YES. IGNORE LINE\r
74 COM2B:    PUSHJ PDP,COMERR      ;NO. PRINT MONITOR COMMAND ERROR\r
75           JRST COM1D\r
76 \r
77 NOCOR:    ASCIZ /NO CORE ASSIGNED\r
78 /\r
79 \r
80 COM3:     MOVE TAC,JBTSTS(ITEM)         ;GET STATUS WORD\r
81           TLOE TAC,JNA                  ;IS JOB NO ASSIGNED BIT ON YET\r
82           JRST COM3A                    ;YES, JOB INIT. BEFORE\r
83           MOVEM TAC,JBTSTS(ITEM)\r
84           MOVEI TAC,[ASCIZ /JOB /]\r
85           PUSHJ PDP,CONMES      ;PRINT JOB N INITIALIZED\r
86           MOVE TAC,ITEM\r
87           PUSHJ PDP,RADX10      ;PRINT JOB NUMBER\r
88           MOVEI TAC,JOBM\r
89           PUSHJ PDP,CONMES\r
90 COM3A:    PUSHJ PDP,CRLF\r
91           JRST COM1D\r
92 \r
93 JOBM:     ASCIZ / INITIALIZED\r
94 /\r
95 \f\r
96 ;TABLE OF CONSOLE COMMANDS.\r
97 \r
98 NOCORE=400000           ;NO CORE NEEDED FOR COMMAND\r
99 NOJOBN=200000           ;NO JOB NUMBER NEEDED FOR COMMAND\r
100 \r
101 DEFINE NAMES\r
102 <REPEAT 0,<\r
103  C G,COMERR,0\r
104 >\r
105  C CORE,CORE,NOCORE\r
106  C GET,GET,0\r
107  C START,START,0\r
108  C IJOB,IJOB,NOCORE+NOJOBN\r
109  C PJOB,PJOB,NOCORE\r
110  C KJOB,KJOB,NOCORE\r
111  C SAVE,SAVE,0\r
112 REPEAT 0,<\r
113  C RESAVE,COMERR,0\r
114 >\r
115  C CONT,CONT,0\r
116  C DDT,DDTGO,0\r
117  C ASSIGN,ASSIGN,NOCORE\r
118  C DEASSI,DEASSIGN,NOCORE\r
119  C STARTC,STARTC,0\r
120  C CONTC,CONTC,0\r
121  C DETACH,DETACH,NOCORE+NOJOBN\r
122  C ATTACH,ATTACH,NOCORE+NOJOBN\r
123 REPEAT 0,<\r
124  C MTAPE,COMERR,0\r
125  C DAYTIM,COMERR,NOCORE\r
126  C RUNTIM,COMERR,NOCORE\r
127  C TOTTIM,COMERR,NOCORE\r
128  C NULTIM,COMERR,NOCRE\r
129  C SYSDDT,COMERR,NOCORE\r
130  C SYSMAK,SYSMAK,0\r
131 >\r
132  C DIGITAL,DIGITAL,NOCORE+NOJOBN\r
133 >\r
134 \f\r
135 ;GENERATE TABLE OF SIXBIT COMMAND NAMES\r
136 \r
137 DEFINE C(A,B,C)\r
138 <         ZZ=.+1\r
139  SIXBIT /A/\r
140  IFN .-ZZ,<RELOC ZZ> ;ONLY FIRST 6 CHARACTERS\r
141 >\r
142 \r
143 COMTAB:   NAMES\r
144 DISPL=.-COMTAB          ;LENTH OF TABLE\r
145 \f\r
146 ;GENERATE THE DISPATCH TABLE\r
147 \r
148 DEFINE C(A,B,C)\r
149 <         XWD C,B\r
150 EXTERNAL B\r
151 >\r
152 \r
153 DISP:     NAMES\r
154 \r
155           END,\r