.TITLE CADIS .MCALL CALL,DIR$,MRKT$,RETURN,WTSE$S .MCALL WTLO$S,CMKT$S,RDAF$S,PCBDF$ .MCALL SPWN$S,TCBDF$ .SBTTL EQUATED SYMBOLS CR = 15 ; CARRIAGE RETURN ESC = 033 ; ESCAPE (ALT MODE) HT = 011 ; HORIZONTAL TAB SPA = 040 ; SPACE EFN1 = 1 ; EVENT FLAG FOR TI IO EFN2 = 16. ; EVENT FLAG FOR MARKTIME EF1BIT = 1 ; BIT FOR EFN1 EF2BIT = 100000 ; BIT FOR EFN2 LUN1 = 1 ; "TI" LUN. PCBDF$ ; DEFINE PCB OFFSETS TCBDF$ ; TRANSFER VECTOR INDICES ; ; AT THE BEGINNING OF EACH OVERLAY THERE IS A TABLE OF ; ENTRY POINTS FOR THE OVERLAY. THESE ENTRY POINTS ARE ; FOR COMMANDS, PARSERS OR THE DISPATCHER OR THE ERROR PROCESSER ; THEY ARE USED BY MCRDIS AND MCROOT TO PASS CONTROL TO THE ; CORRECT PROCESSOR. MCROOT EXECUTES AN INDIRECT JUMP ; THROUGH THE FIRST ADDRESS OF THE OVERLAY USING THESE INDICES ; TO INDEX INTO THE TRANSFER VECTOR TABLE. ; $ABOEP = 2 ; ABORT $CANEP = 4 ; CANCEL TASK $FIXEP = 6 ; FIX TASK $LN1EP = 10 ; LUNS FILE SET UP $LUNEP = 0 ; LOGICAL UNIT LIST $PR1EP = 0 ; PARSER 1 $REMEP = 12 ; REMOVE $RESEP = 14 ; RESUME $STPEP = 16 ; STOP TASK ; PL106 $UNFEP = 20 ; UNFIX TASK ; PL106 $UNSEP = 22 ; UNSTOP TASK ; PL106 ;**-1 EXEC:: CALL $LOCKL ; LOCK SYSTEM LISTS CALL $SWSTK,40$ ; SWITCH TO SYSTEM STATE CLR R5 ; ZERO PARENT TCB ADDRESS CALL $SRSTD ; SEARCH FOR TASK BCS 38$ ;SOMETHING SCREWED UP TCB ISN'T THERE ; START TASK UP ; 30$: MOV R0,-(SP) ; SAVE TCB ADDRESS MOV $MUCB,R2 ; GET UCB ADDRESS MOV U.UIC(R2),R1 ; SET DEFAULT UIC MOV R1,R3 ; COPY DEFAULT UIC BIT #FE.MUP,$FMASK ; MULTI-USER PROTECTION? BEQ 31$ ; NO BIT #U2.PRV,U.CW2(R2) ; PRIVILEGED USER? BNE 31$ ; YES, USE R1 AS PROTECTION UIC MOV U.LUIC(R2),R1 ; NO, GET PROTECTION UIC 31$: CALL $TSKRP ; START TASK WITH PROTECTION MOV (SP)+,R0 ; RESTORE TCB ADDRESS BCC 32$ ; GOOD IT'S STARTED BR 38$ ; SET UP MCR COMMAND BUFFER FOR GMCR$ ; 32$: TST $MOCB BEQ 33$ MOV R0,-(SP) MOV $TKTCB,R0 ADD #T.OCBH,R0 CALL $QRMVF MOV (SP),R0 ADD #T.OCBH,R0 CALL $QINSF MOV (SP)+,R0 33$: BIS #T3.REM,T.ST3(R0) ; YES, SET TO REMOVE ON EXIT 34$: CMPB $MTERM,#ESC ; TERMINATED BY ESCAPE? BEQ 35$ ; YES, DON'T PROMPT BIS #T3.MCR,T.ST3(R0) ; NO, SET TO PROMPT ON TASK EXIT 35$: MOV $MBUF,R1 ; GET BUFFER ADDRESS MOV R0,2(R1) ; STORE TCB ADDRESS MOV #84.,R1 ; SET BUFFER SIZE TO GET CALL $ALOCB ; TRY TO GET IT BCS 38$ ; COULDN'T GET ONE MOV DISLEN,R2 ; GET BYTE COUNT-1 ADD R0,R2 ; COMPUTE ADDRESS ADD #4,R2 ; OF TERMINATOR MOVB $MTERM,(R2) ; AND STORE IN BUFFER MOV R0,R1 ; COPY BUFFER ADDRESS MOV DISLEN,R2 ; GET LENGTH-1 AGAIN ADD #4.,R2 ; INCLUDE LINK WORDS MOV $MBUF,R3 ; GET ADDRESS OF COMMAND 37$: MOVB (R3)+,(R1)+ ; MOVE IN COMMAND DEC R2 ; DONE? BGT 37$ ; NO, LOOP UNTIL ALL CHARACTERS ARE COPIED MOV $MCRCB,(R0) ; LINK COMMAND IN MOV R0,$MCRCB ; TO GMCR LIST 38$: RETURN ; SWITCH BACK TO USER STACK ; ; TASK STARTED OR ERROR. DETERMINE WHICH AND PROCESS. ; 40$: CALL $UNLKL ; UNLOCK SYSTEM LISTS RETURN .END .END