IDENT PROCESS TITLE PROCESS STUFF TITLE PROCESS CREATION TITLE PROCESS CREATION * AND SCHEDULES IT TO RUN * * EXT I.LOCK INTSYS XTEXT PROCSYM XTEXT RECS MACRO K + RE K RJ E.ECS ENDM WECS MACRO K + WE K RJ E.ECS ENDM TYPES XTEXT * ECSMAC XTEXT CBLOCK MICRO 1,,*/EPROC/* * ORG 0 * PARAMETER MNEUMONICS * * MP.ALLOC BSS 2 CAPABILITY FOR ALLOCATION BLOCK MP.CAPI BSS 1 INDEX IN FULL C-LIST TO RETURN CAP MP.CHWD BSS 1 NUMBER OF CHAINING WORDS MP.STACK BSS 1 NUMBER OF WORDS IN THE STACK MP.CLSCD BSS 2 CLASS CODE FOR SUBPROCESS MP.MAP BSS 1 NUMBER OF ENTRIES IN THE SUBP MAP MP.COMP BSS 1 NUMBER OF WORDS RESERVED FOR COMPILED MP.FL BSS 1 FIELD LENGTH OF SUBPROCESS MP.ENTRY BSS 1 ENTRY POINT OF SUBPROCESS MP.CLIST BSS 2 C-LIST FOR SUBPROCESS MP.FILE1 BSS 2 FILE FOR 1ST SWAPPING DIRECTIVE MP.FLAD1 BSS 1 FILE ADDRESS IF 1ST SWAPPING DIRECTIVE MP.CMAD1 BSS 1 CORE ADDRESS FOR 1ST SWAPPING DIR MP.WDCT1 BSS 1 WORD COUNT FOR 1ST SWAPPIND DIRECTIVE MP.FILE2 BSS 2 FILE FOR 2ND SWAPPING DIRECTIVE MP.FLAD2 BSS 1 FILE ADDR FOR 2ND SWAPPING DIRECTIVE MP.CMAD2 BSS 1 CORE ADDR FOR 2ND SWAPPING DIRECTIVE MP.WDCT2 BSS 1 WORD COUNT FOR 2ND SWAPPING DIRECTIVE * USE * * * TEMPORARIES * CLEN EQU P.TEMP1 LENGTH OF C-LIST STACKO EQU P.TEMP2 PTR TO STACK ORIG (REL B1 ) SUBPT EQU P.TEMP3 PTR TO SUBPROCESS TABLE (REL B1 ) COMPMAP EQU P.TEMP4 PTR TO COMPILED MAP AREA ( REL B1 ) CORELEN EQU P.TEMP5 LENTH OF PROCESS IN CORE ECSAD EQU P.TEMP6 COMPSPA EQU P.TEMP7 . SPACE LEFT IN COMPILED MAP * * ECSCODE CPROC EXT E.ECS,ENDSYS,REFER,MAKEOBJ,PUTCAP,CAPAB EXT SYSRET,SCHED * * GET LENGTH OF C-LIST * MAKPROC SA1 B1+P.PARAM+MP.CLIST+1 SX0 X1 SA0 B1 + RE 1 READ MOT ENTRY RJ E.ECS SA2 A0 MX5 39 BX1 X1-X2 CHECK UNIQUE NAME BX1 X5*X1 NZ X1,MKPROC44 ERROR..C-LIST GONE BX0 -X5*X2 ECS ADDR OF C-LIST + RE 1 RJ E.ECS SA1 A0 LENGTH OF C-LIST BX6 X1 SA6 B1+CLEN SAVE LENGTH OF C-LIST * * BEGIN CHECKING PARAMETERS AND ACCUMULATING * CORE AND ECS LENGTH OF THE PARCESS * LX1 1 SPACE FOR LOCAL C-LIST BUFFER * ADD SCRATCH LENGTH, DEAD CELL BEFORE * ACTUAL PARAM AREA, ACTUAL PARAM BUFFER * FIXED LENGTH PROCESS DISCRIPTOR, AND * FULL C-LIST BUFFER SX6 X1+P.ROHEAD-P.SCR+P.PROCRO+P.PROCRW+3 SA6 B1+STACKO SAVE POINTER TO STACK * * CHAINING WORDS * SA1 B1+P.PARAM+MP.CHWD SX2 X1-1 NG X2,MKPROC30 ERROR..LESS THAN 1 CHAINING WORD SX2 X1-P.SCRL-5-1 PL X2,MK30X ERROR - TOO MANY CHAINING WORDS * * SPACE FOR CHAINING WORDS, ZERO WORD * AFTER CHAINING WORDS, CONSTANT LENGTH * PROCESS DISCRIPTOR, AND FULL C-LIST * TABLE SB2 X1+1+P.PROCRO+P.PROCRW+3 * * STACK LENGTH * SA3 B1+P.PARAM+MP.STACK SX2 X3-1 NG X2,MKPROC31 ERROR..LESS THAN 1 STACK ENTRY LX3 1 SB2 B2+X3 IX6 X6+X3 SA6 B1+SUBPT SAVE SUPROCESS TABLE ORIGH * * MAP SIZE * SA1 B1+P.PARAM+MP.MAP BX2 X1 LX2 1 IX2 X2+X1 SX3 X1-2 NG X3,MKPROC33 ERROR..LESS THAN 2 MAP ENTRIES SX3 X2+1+1+8+2 SPACE FOR MAP, ESM, AND SUBP TABLE SB2 B2+X3 IX6 X6+X3 SA6 B1+COMPMAP SAVE ORIG OF COMPILED MAP BUFFER * * SA2 B1+P.PARAM+MP.COMP ADD COMPILED MAP BUFFER NG X2,MKPROC43 ERROR..NEG SPACE FOR COMPILED MAP IX6 X6+X2 SB2 B2+X2 * * CHECK MAP FL * EXT S.CMFL * SA1 B1+P.PARAM+MP.FL NG X1,MKPROC35 ERROR..NEGATIVE FIELD LENGTH DECLARED IX6 X6+X1 SX2 ENDSYS BX2 -X2 SA3 S.CMFL IX2 X3+X2 IX2 X6-X2 PL X2,MK35X ERROR, FL TOO LARGE SA6 B1+CORELEN SAVE CORE SIZE * * ENTRY POINT * SA2 B1+P.PARAM+MP.ENTRY SX3 X2-9 NG X3,MKPROC36 ERROR..ENTRY POINT LESS THAN 2 IX2 X2-X1 SX2 X2+3 PL X2,MK36X RROR - ENTRY .GT. FL SPACE 2 * * MAKE DUMMY RUN ON REFERENCE COUNTS TO TEST FOR * FILE BLOCKS PRESENT * NOTE....^REFER^ DOES NOT DESTROY B2 WHERE WE HAVE * THE TOTAL ECS SPACE NEEDED FOR THE PROCESS * SA1 B1+P.PARAM+MP.FILE1+1 MAKE UP LOGICAL MAP ENTRY SA2 B1+P.PARAM+MP.FLAD1 FOR 1ST SWAPPING DIRECTIVE NG X2,MKPROC38 ERROR..FILE ADDRESS NEGATIVE BX6 X1 BX7 X2 SA6 B1+P.SCR2 SA7 A6+1 SA1 B1+P.PARAM+MP.CMAD1 SX1 X1 NG X1,MKPROC39 ERROR..CORE ADDRESS NEGATIVE LX1 18 SA2 B1+P.PARAM+MP.WDCT1 SX2 X2 NG X2,MKPROC40 ERROR..COUNT OF WORDS NEGATIVE BX7 X1+X2 SA7 A7+1 * SA4 B1+P.PARAM+MP.FL CALL ^REFER^ FOR DUMMY RUN SX1 P.SCR2 PTR TO LOGICAL MAP ENTRY ( REL B1 ) BX5 X5-X5 BUMP REF COUNT = 0 SB3 2 . COUNT OF COMPILED SPACE USED SB4 MKPROC42 RETURN IF BLOCK MISSING SB6 MKPROC99 NORMAL RETURN SB7 MKPROC41 RETURN IF WORD COUNT PLUS CM OR FILE A * ADDR IS TOO LARGE JP REFER * MKPROC99 SA1 B1+P.PARAM+MP.FILE2+1 MAKE LOGICAL MAP ENTRY SA2 B1+P.PARAM+MP.FLAD2 FOR 2ND SWAPPIND DIRECTIVE NG X2,MK38X ERROR - FILE ADD NEGATIVE BX6 X1 BX7 X2 SA6 B1+P.SCR2+3 SA7 A6+1 SA1 B1+P.PARAM+MP.CMAD2 SX1 X1 NG X1,MK39X ERROR - CORE ADDRESS NEGATIVE LX1 18 SA2 B1+P.PARAM+MP.WDCT2 SX2 X2 NG X2,MK40X ERROR - WD COUNT NEGATIVE BX7 X1+X2 SA7 A7+1 * SA4 B1+P.PARAM+MP.FL CALL ^REFER^ FOR DUMMY RUN SX1 P.SCR2+3 PTR TO LOGICAL MAP ENTRY ( REL B1 ) SB4 MKPROC42 RETURN IF MISSING BLOCK SB6 MKPROC98 RETURN IF SUCESSFUL SB7 MKPROC41 RETURN IF WORD COUNT PLUS CM ADDR * OR FILADDR IS ILLEGAL JP REFER * MKPROC98 SA1 B1+P.PARAM+MP.COMP CHECK COMPILED SPACE USED SB4 X1 LT B4,B3,MK43X ERROR - NOT ENOUGH SPACE FOR MAP * * TEST CAPABILITY INDEX * SA1 B1+P.PARAM+MP.CAPI NG X1,MKPROC37 ERROR..CAPABILITY INDEX NEGATIVE SA2 B1+P.CLIST SA2 B1+X2 IX1 X1-X2 NG X1,MKPROC2 JP IF INDEX OK MKPROC1 SA2 A2+2 ZR X2,MK37X ERROR - CAPAB INDEX TOO LARGE IX1 X1-X2 PL X1,MKPROC1 * * GET ECS SPACE, MOT, UNIQUE NAME * NOTE...MAY FAIL DUE TO LACK OF FUNDS * MKPROC2 SA5 B1+P.PARAM+MP.ALLOC+1 SB4 MKPROC3 RETURN LINK SX7 AT.PROC TYPE OF OBJECT TO ALLOCATE JP MAKEOBJ CALL ALLOCATOR * * STORE AWAY THE CAPABILITY MKPROC3 SA1 B1+P.PARAM+MP.CAPI CAPABILITY INDEX BX6 X5 SAVE ECS ADDRESS SA6 B1+ECSAD SB5 CAPAB ADDR OF CAPABILITY CONSTRUCTED BY * ALLOCATION MECHANISM SB6 MKPROC4 RETURN LINK JP PUTCAP CALL ^PUTCAP^ * * INCREMENT REFERENCE COUNTS FOR REAL ON SWAPPING * DIRECTIVES ( AT B1 AND B1+3 ) * MKPROC4 SA4 B1+P.PARAM+MP.FL CALL ^REFER^ FOR BUMP COUNTS SX1 P.SCR2 SX5 1 SB3 2 SB4 MKPROC20 DISASTER RETURN SB6 MKPROC5 SB7 MKPROC20 DISASTER RETURN JP REFER * MKPROC5 SA4 B1+P.PARAM+MP.FL CALL ^REFER^ FOR 2ND SWAPPING DIR SX1 P.SCR2+3 SB6 MKPROC6 SB7 MKPROC20 JP REFER * MKPROC6 SA1 B1+P.PARAM+MP.COMP SX6 B3 . COMPUTE AND SAVE SPACE LEFT IN IX6 X1-X6 . COMPILED MAP BUFFER SA6 B1+COMPSPA * * * BEGIN TO CONSTRUCT THE PROCESS * * PROCESS FIXED LENGTH DISCRIPTOR * * P.ROHEAD * VFD 12/1000B,12/NUM CH WD+1,18/MOT INDEX, * 18/PROC LEN IN CORE * SX2 1000B LX2 12 SA1 B1+P.PARAM+MP.CHWD NUM CHAINING WORDS SX6 X1+1 BX6 X6+X2 LX6 18 SA2 CAPAB+1 GET MOT INDEX FROM CAPABILITY SX2 X2 BX6 X6+X2 LX6 18 SA2 B1+CORELEN CORE LENGTH OF PROCESS BX6 X6+X2 SA6 B1 * * P.ROHEAD+1 * VFD 6/0,18/0,18/FULL C-LIST TAB ORIG (REL P.ROHEAD * IN ECS),18/LEN OF PROC VAR DISC * SX2 X1+P.PROCRO+P.PROCRW+1 COMPUT C-TABLE ORIG LX2 18 * COMPUTE LENGTH OF PROC VARIABLE DISC SA3 B1+STACKO SA4 B1+COMPMAP IX4 X4-X3 LEN OF STACK,SUBP TABLE,LOG MAP,ESM SA5 B1+P.PARAM+MP.COMP IX4 X4+X5 ADD COMPILED MAP BUFFER SX4 X4+3 ADD FULL C-LIST TABLE IX6 X2+X4 SA6 A6+1 * * ZERO SCHEDULER DATA AND EXCHANGE PACKAGE * BX6 X6-X6 SB2 P.SCHEDL+16 MKPROC7 SA6 A6+1 SB2 B2-1 NE B0,B2,MKPROC7 * * SET P-COUNTER * SA1 B1+P.PARAM+MP.ENTRY SX7 X1-3 INTITIAL ENTRY POINT LX7 36 SA7 A6-15 * * SET EXIT MODE = 7 * MX7 3 LX7 36+3+12 SA7 A7+3 * * P.CLIST....POINTER INTO FULL C-LIST TABLE * SX6 X3-3 STACK ORIGIN - 3 SA6 A6+1 * * P.CTABLE * VFD 6/0,18/LEN/2OF LOC C-BUL,18/LEN/2 OF FULL * C-LIST TAB,18/PTR OF ORIG FULL C-TAB * SA4 B1+CLEN LX4 18 SX6 1 BX6 X6+X4 LX6 18 SX7 X3-1 STACK ORIGIN - 1 BX6 X6+X7 SA6 A6+1 * * P.STACK * VFD 6/0,18/STACK END PTR,18/STACK ORIG PTR, * 18/STACK POINTER * SA4 B1+SUBPT ORIG OF SUBPROCESS TABLE SA2 B1+STACKO SX6 X4-2 LX6 18 BX6 X6+X2 LX6 18 BX6 X6+X2 SA6 A6+1 * * P.SUBPDT * VFD 6/0,18/PTR TO LAST SUBP + 9,18/PTR TO * ORIG OF SUBP TABLE,18/NUM SUBPROC * SX6 X4+9 LX6 18 BX6 X6+X4 LX6 18 MX7 59 IX6 X6-X7 SA6 A6+1 * * P.MAPESM * VFD 6/0,18/ORIG OF COMP MAP BUF,18/LEN OF COMP BUF, * 18/LEN OF MAP/ESM AREA * SA3 B1+COMPMAP LX3 18 SA5 B1+P.PARAM+MP.COMP BX6 X3+X5 LX6 18 SA3 B1+P.PARAM+MP.MAP BX5 X3 LX5 1 IX5 X5+X3 SX5 X5+1+1 ADD EXTRA WORD AT END OF MAP AND ESM BX6 X6+X5 SA6 A6+1 * * WRITE OUT PROCESS READ ONLY AND READ WRITE DISCRIPTOR * SA1 B1+ECSAD RECOVER ECS ADDRESS BX0 X1 SA0 B1 + WE P.MAPSIN-P.ROHEAD RJ E.ECS * * LEAVE ALL TEMPORIES AND CHAINING WORDS ZERO * BY INCREMENTING ECS ADDR ,ALLOCATOR ZEROS ECS ) * SA2 B1+P.PARAM+MP.CHWD SX2 X2+1+P.PROCRO+P.PROCRW IX0 X0+X2 * * FULL C-LIST TABLE * SA1 B1+CLEN LENGTH OF LOCAL C-LIST BX6 X1 SA6 B1 SA1 B1+P.PARAM+MP.CLIST+1 UNIQUE NAME AND MOT OF C-LIST BX6 X1 SA6 A6+1 BX6 X6-X6 ZERO WORD MARKS BEGINNING OF FULL CTAB SA6 A6+1 * * STACK WITH ONE ENTRY * SA1 B1+SUBPT ORIG OF SUBP TABLE BX6 X1 LX6 18 BX6 X6+X1 TOP OF PATH = CURRENT SUBPROCESS SA6 A6+1 SA2 B1+P.PARAM+MP.ENTRY BX6 X2 SA6 A6+1 * * WRITE OUT FULL C-LIST TABLE AND STACK ENTRY * + WE 5 RJ E.ECS SA5 B1+P.PARAM+MP.STACK INCREMENT ECS ADDR TO LX5 1 SUBPROCESS TABLE SX5 X5+3 IX0 X0+X5 * * SUBPROCESS TABLE ENTRY * * WORD 0 * SA1 B1+P.PARAM+MP.COMP SA2 B1+COMPMAP IX1 X1+X2 SUBPROCESS RA SA2 B1+P.PARAM+MP.FL IX6 X1+X2 SUBPROCESS FL LX6 18 IX6 X6+X1 LX6 18 SA6 B1 * * WORD 1 * SA1 B1+P.PARAM+MP.CLSCD+1 BX6 X1 SA6 A6+1 * * WORD 2 * SA1 B1+P.PARAM+MP.ENTRY BX6 X1 LX6 36 C-LIST AND MAP ORIGNS = 0 SA6 A6+1 * * WORD 3 * SA1 B1+P.PARAM+MP.COMP LEN OF COMPILED MAP BUFFER SA2 B1+SUBPT SX2 X2+8+2 PTR TO LOGICAL MAP LX1 18 BX6 X1+X2 SA3 B1+COMPMAP COMPILED MAP POINTER LX6 18 BX6 X6+X3 SA6 A6+1 * * WORD 4 * SA1 B1+P.PARAM+MP.MAP NUM ENTRIES IN AMP SA2 B1+CLEN LENGTH OF C-LIST LX1 18 BX6 X1+X2 SA6 A6+1 * * WORD 5 * SA1 B1+P.PARAM+MP.CLIST+1 UNIQUE NAME AND MOT INDEX OF BX6 X1 C-LIST SA6 A6+1 * * WORD 6 * SA1 B1+COMPMAP SX1 X1-1 ESM POINTER LX1 18 SX2 32 NUM OF ERRORS IN ESM BX6 X1+X2 LX6 18 SA1 B1+SUBPT SX1 X1-4 MAX STACK POINTER...LEAVE ROOM FOR * ONE ERROR BY ROOT OF SUBP TREE BX6 X6+X1 SA6 A6+1 * * WORD 7 * BX6 X6-X6 SA6 A6+1 * WRITE OUT SUBP TABLE + WE 8 RJ E.ECS SX1 10 SKIP SUBPT AND 2 WD AREA AT END IX0 X0+X1 * * * LOGICAL MAP ENTRIES * SA1 B1+P.PARAM+MP.FILE1+1 SA2 B1+P.PARAM+MP.FLAD1 BX6 X1 SA6 B1 BX6 X2 SA6 A6+1 SA1 B1+P.PARAM+MP.CMAD1 LX1 18 SA2 B1+P.PARAM+MP.WDCT1 BX6 X1+X2 SA6 A6+1 * SA1 B1+P.PARAM+MP.FILE2+1 SA2 B1+P.PARAM+MP.FLAD2 BX6 X1 SA6 A6+1 BX6 X2 SA6 A6+1 SA1 B1+P.PARAM+MP.CMAD2 LX1 18 SA2 B1+P.PARAM+MP.WDCT2 BX6 X1+X2 MX1 1 BX6 X1+X6 . ADD READ ONLY FLAG SA6 A6+1 * * WRITE OUT SWAPPING DIRECTIVES * + WE 6 RJ E.ECS * INCREMENT ECS ADDR TO END OF LOG MAP SA1 B1+P.PARAM+MP.MAP BX2 X1 LX2 1 IX2 X2+X1 IX0 X0+X2 * MX6 60 -0 FOR END OF MAP SA6 B1 * MX6 1 MAKE ESM TO TAKE ONLY ^NOERROR^ ERROR LX6 60-E.NOERR SA6 A6+1 SA1 B1+COMPSPA . SET GARBAGE COUNT = 0 AND COMPILED BX6 X1 . MAP SPACE LEFT LX6 18 SA6 A6+1 WE 3 . WRITE OUT RJ E.ECS * * SHCEDULE THE PROCESS TO RUN * SA1 CAPAB+1 SX1 X1 SB7 MKPROC10 SX6 1 SET INTERRUPT LOCKOUT FOR SCHEDULER SA6 I.LOCK JP SCHED CALL SCHEDULER AND RETURN TO USER * MKPROC10 BX6 X6-X6 CLEAR PPU LOCK OUT SA6 I.LOCK JP SYSRET * * * * DISASTER EXT DISASTR MKPROC20 RJ DISASTR * ENDECS CPROC TITLE DISPLAY THE STACK * DISPST AND DISSEN ARE ECS ACTIONS TO DISPLAY THE STACK * * DISPST * PARAMETERS : D: USER CM ADDRESS * D: WORD COUNT, MUST BE .GE. 4 * THIS ACTION REFORMATS THE STACJ ENTRIES AND TRANSFERS * THEM TO AP1. IF THE WORD COUNT IS TOO SMALL , THE TOP N * ARE TRANSFERRED,WHERE N=((AP2-1)/3) . THE TOTAL NUMBER * OF ENTRIES IN THE STACK IS GIVEN AS THE FIRST WORD ECSCODE DSPST DISPST SB2 1 SA1 B1+P.XPACK+1 SA2 A1+B2 AX1 36 .RA SA3 B1+P.PARAM NG X3,ERR200 AX2 36 .FL SA4 A3+B2 .WORD COUNT SB3 X2 SB5 X3 SB4 X4+B5 SB4 B4-B2 .END OF WRITE AREA GT B4,B3,ERR210 .FL EXCEEDED SB4 B4-B2 MX0 24 SB7 X4-4 SA2 B1+P.STACK NG B7,ERR201 .ERROR-AP2.LT.4 SX3 X2+B2 .END OF STACK AX2 18 .STACK ORIGIN SX2 X2 IX2 X3-X2 SX2 X2+B2 .STACK LENGTH AX6 X2,B2 .NUMBER OF ENTRIES SB3 X6+B5 SB3 B3+X2 LT B4,B3,DSS2 .SENSE NO ROOM FOR ENTIRE STACK SB4 B3-B2 DSS2 SB3 B4+X1 .END OF WRITE AREA-1 SB7 B1+X3 SA6 B5+X1 SA1 B7+B2 DSS3 SA2 A1-B2 BX7 -X0*X2 SA1 A2-B2 BX6 X0*X1 BX6 X6+X7 .REFORMATTING COMPLETE SB4 X1+B1 SA4 B4+B2 .FETCH CLASS CODE OF SUBP SA6 A6+B2 BX6 X4 AX1 18 SA6 A6+B2 SB4 X1+B1 SA4 B4+B2 BX6 X4 .CLASS CODE OF TOP-OF-PATH SA6 A6+B2 SB4 A6+B2 LT B4,B3,DSS3 .NOT THROUGH EQ SYSRET ENDECS DSPST * * DISSEN DISPLAYS A SPECIFIC STACK ENTRY * PARAMETERS : D: A USER CM ADDRESS * D: STACK INDEX * FORMAT OF ENTRY IS AS IN DISPST ECSCODE DSSTE DISSEN SB2 1 SA4 B1+P.XPACK+1 SA2 A4+B2 AX4 36 .RA SA3 B1+P.PARAM .CM ADDRESS NG X3,ERR200 AX2 36 .FL SB3 X3 SB4 X2 SB4 B4-B2 LE B4,B3,ERR210 .FL EXCEEDED SA1 P.STACK+B1 SA2 A3+B2 .STACK INDEX IX2 X2+X2 NG X2,ERR201 IX2 X1-X2 SB4 X2+B1 .POINTS TO STACK ENTRY AX1 18 SB5 X1+B1 LT B4,B5,ERR211 .STACK INDEX TOO LARGE SA1 B4 MX0 24 SA2 B4+B2 BX6 X0*X1 BX7 -X0*X2 BX6 X6+X7 .ENTRY REFORMATTED SA6 B3+X4 SB4 X1+B1 SA4 B4+B2 BX6 X4 .CLASS CODE OF SUBP SA6 A6+B2 AX1 18 SB4 X1+B1 SA4 B4+B2 BX6 X4 .CLASS CODE OF TOP-OF-PATH SA6 A6+B2 EQ SYSRET ENDECS DSSTE * * ERRORS ERR200 SX1 0 EQ ERR20 ERR201 SX1 1 EQ ERR20 ERR210 SX1 0 EQ ERR21 ERR211 SX1 1 EQ ERR21 TITLE DESTROY A PROCESS * DELPROC IS THE ACTION TO DESTROY A PROCESS. * IT RESETS THE BITS IN P.ROHEAD AND MAKES SURE THE PROCESS * IS RUNNING. AP1: C: PROCESS TO BE DESTROYED ENTRY DLPRO ECSCODE DLPRO DLPRO SA1 B1+P.PARAM+1 SX0 X1 SA0 B1 RE 1 RJ E.ECS SA2 A0 MX3 39 SX7 1 SA7 I.LOCK .LOCK OUT INTERRUPTS BX0 -X3*X2 BX2 X2-X1 BX2 X3*X2 LX7 57 . RUNNING BIT SX5 72B .P,R,W,D BITS RE 1 RJ E.ECS SA4 A0 P.ROHEAD NZ X2,DLPROCE ERROR..PROCESS NOT IN MOT LX5 60-6 .POSITION BITS BX2 X7*X4 .FETCH RUNNING BIT BX6 X5+X4 .SET BITS FOR DESTROY SA6 A4 WE 1 RJ =XE.ECS NZ X2,DELPROC1 .SENSE PROCESS RUNNING SX1 X1 SB7 DELPROC1 EQ SCHED .OTHERWISE SCHEDULE PROCESS * DELPROC1 BX6 X6-X6 .CLEAR I. OCK SA6 I.LOCK JP SYSRET * DLPROCE SX7 0 SA7 I.LOCK JP PUTINT10 ENDECS DLPRO ERRNUMS XTEXT * * * ..... ERROR CONDITIONS ..... * MKPROC30 SX1 2 EQ ERR20 MKPROC31 SX1 3 EQ ERR20 MKPROC33 SX1 5 EQ ERR20 MKPROC43 SX1 6 EQ ERR20 MKPROC35 SX1 7 EQ ERR20 MKPROC36 SX1 8 EQ ERR20 MKPROC38 SX1 11 EQ ERR20 MKPROC39 SX1 12 EQ ERR20 MKPROC40 SX1 13 EQ ERR20 MK38X SX1 16 EQ ERR20 MK39X SX1 17 EQ ERR20 MK40X SX1 18 EQ ERR20 ERR20 SX7 E.NEGPAR EQ CL2 MK30X SX1 2 EQ ERR21 MK35X SX1 7 EQ ERR21 MK36X SX1 8 EQ ERR21 ERR21 SX7 E.BIGPAR EQ CL2 MKPROC41 BX1 -X1-X1 SX7 E.BIGPT EQ CL2 MKPROC37 SX7 E.NEGIX EQ CL2 MK37X SA1 A1 SX7 E.BIGIX CL2 LX1 18 MX2 42 BX1 X1*X2 BX7 X1+X7 SX6 E.PARMS EQ E.ERROR MKPROC44 SX7 E.CLMOT SX6 E.MISCE EQ E.ERROR MKPROC42 SX7 E.BLMISS EQ CL5 MK43X SX7 E.NOROOM CL5 SX6 E.PROC EQ E.ERROR * * * * * TITLE SEND PROCESS INTERRUPT * * * * ECS ACTION.... SEND INTERRUPT * * PARAMS C.. A PROCESS * C.. A SUBPROCESS NAME (CLASS CODE) * D.. 18 BIT DATUM * * ECSCODE PTINT * PUTINT SA1 B1+P.PARAM+1 GET PROCESS ADDRESS SA0 B1 SX0 X1 + RE 1 READ MOT RJ E.ECS SA2 A0 MX7 39 CHECK UNIQUE NAME BX1 X1-X2 BX1 X7*X1 NZ X1,PUTINT10 ERROR - PROCESS GONE BX0 -X7*X2 BX5 X0 X5 = PROCESS ADDRESS + RE P.SCHED-P.ROHEAD RJ E.ECS SA1 A0 SX6 40B CHECK ^INCORE^ FLAG..CANNOT SEND LX6 36+12 INTERRUPT WHILE PROCESS IS INCORE * SINCE IF PROCESS IS HANGING ON A * SERIES OF EVENT CHANNELS, THEN * ^RUNNING^ FLAG IS SET AND MAY BE * RESET LEAVING THE PROCESS HANG WITH * POSSIBLY VALID INTERRUPT PENDING BX6 X6*X1 NZ X6,PUTINT8 EXIT IF INTERRUPT PROCESS IN CORE * SA0 A0+P.SCHED-P.ROHEAD READ IN P.CLIST THRU P.SUBPDT SX1 P.CLIST-P.ROHEAD IX0 X5+X1 + RE P.MAPESM-P.CLIST RJ E.ECS * SA1 A0+P.CTABLE-P.CLIST GET ^P.CTABLE^ SX2 X1 PTR TO CM ORIG C-TABLE (REL B1) LX1 6+36+1 SX1 X1 LENGTH OF C-TABLE IX2 X2-X1 END OF C-TABLE IN CM (REL B1) SA1 B1+1 GET P.ROHEAD+1 LX1 6+36 SX1 X1 C-TABLE IN ECS (REL P.ROHEAD) IX2 X1-X2 IX2 X2+X5 X2=(ECS ADDR OF END OF C-TABLE)- * (CM ADDR END OF C-TABLE (REL B1)) * SEARCH FOR INTERRUPT SUBPROCESS IN ECS * SA1 A0+P.SUBPDT-P.CLIST GET SUBPROCESS TABLE POINTERS SB3 X1 NUM SUBP SA4 B1+P.PARAM+3 NAME OF INTERRUPT SUBP LX1 6+36 SX1 X1+1 IX0 X1+X2 ECS ADDR 1ST SUBP (WD 1) SA0 B1+P.SCR2 SX7 8 * PUTINT1 RE 1 RJ E.ECS SA3 A0 BX6 X3-X4 ZR X6,PUTINT2 JP IF FOUND SUBP SB3 B3-1 EQ B3,B0,PUTINT11 ERROR - NO SUCH SUBP IX0 X0+X7 JP PUTINT1 * PUTINT2 MX7 59 CHECK FOR INTERRUPT ALREADY ON IX0 X0+X7 SUBPROCESS + RE 1 RJ E.ECS SA3 A0 NG X3,PUTINT9 JP IF ALREADY INTERRUPT SUBP * IX7 X0-X2 INDEX OF INTERRUPT SUBP * SX6 1 LOCK OUT PPU INTERRUPTS SA6 I.LOCK BX0 X5 RE-CHECK ^INCORE^ FLAG SA0 B1 + RE 1 RJ E.ECS SA3 A0 SX6 40B LX6 36+12 BX6 X6*X3 NZ X6,PUTINT8 EXIT IF INTERRUPT IMPOSSIBLE * SA4 B1+P.PARAM+4 TEST FOR NEGATIVE INTERRUPT DATUM SX4 X4+0 NG X4,PUTINT12 LX4 36 * SX6 4400B FIX UP FLAGS IN P.ROHEAD LX6 36+12 SET ^PENDING ACTION^ AND ^INTERRUPT^ BX6 X3+X6 SA6 B1 * SA0 B1+P.SCR2 IX0 X7+X2 SET INTERRUPT FLAG AND + RE 5 DATUM IN SUBPROCESS RJ E.ECS SA3 A0 MX6 1 BX6 X6+X3 SA6 A3 SET INTERRUPT FLAG SA3 A3+4 MX6 24 BX6 -X6*X3 BX6 X6+X4 ADD IN INTERRUPT DATUM SA6 A3 + WE 5 RJ E.ECS * SX6 P.INTERR-P.ROHEAD IX0 X5+X6 INCREMENT INTERRUPT COUNT + RE 1 RJ E.ECS SA3 A0 SX6 X3+1 SA6 A3 + WE 1 RJ E.ECS * * BX6 X6-X6 REPLY, X7=0 MEANS INTERRUPT SA6 B1+P.XPACK+15 SENT * * SA0 B1 COPY PROC READ ONLY TO ECS BX0 X5 + WE 1 RJ E.ECS SA3 B1 TEST FOR PROCESS HUNG LX3 2 PL X3,PUTINT4 JP IF PROCESS NOT RUNNING * PUTINT3 BX6 X6-X6 SA6 I.LOCK CLEAR PPU INTRRUPT LOCKOUT JP SYSRET RETURN * * PROCESS HUNG...CHECK FOR INTERRUPT VALID * PUTINT4 SA0 B1+P.SCR2 SA3 B1+P.SCHED-P.ROHEAD+P.STACK-P.CLIST SX3 X3 STACK POINTER IX0 X3+X2 + RE 1 RJ E.ECS SA3 A0 GET TOP STACK ENTRY SX3 X3 INDEX OF CURRENT SUBP SX7 X7 INDEX OF INTERRUPT SUBP JP PUTINT55 * * SEARCH SUBP TREE FOR INTERRUTP SUBPROCESS * PUTINT5 IX0 X2+X3 + RE 1 RJ E.ECS SA3 A0 WD 0 OF SUBP DISCRIPTOR SX3 X3 ZR X3,PUTINT95 JP IF END OF PATH..INTERRUPT DOES NO PUTINT55 IX6 X3-X7 NZ X6,PUTINT5 * SA3 B1 INTERRUPT HAS PRIORITY-SET ^WAKE UP^ MX6 2 AND ^RUNNING^ FLAGS LX6 60-1 BX6 X3+X6 SA6 B1 * WRITE NEW P.ROHEAD TO ECS BX0 X5 ECS ADDR SA0 B1 + WE 1 RJ E.ECS * SA1 B1+P.PARAM+1 CALL SCHEDULER SX1 X1 PROCESS MOT SB7 PUTINT3 JP SCHED * * * UNABLE TO PROCESS INTERRUPT BECAUSE PUTINT8 SX6 1 SA6 B1+P.XPACK+15 JP PUTINT3 3) INTERRUPT WAITING * REPLY IN X7=1 * * INTERRUPT SUBP ALREADY * AN INTERRUPT SUBP PUTINT9 SX6 2 SA6 B1+P.XPACK+15 REPLY IN X7=2 JP PUTINT3 * * INTERRUPT SENT BUT PROCESS IS * NOT RUNNING PUTINT95 SX6 3 SA6 B1+P.XPACK+15 REPLY IN X7 = 3 JP PUTINT3 * * * ERRORS * PUTINT10 SX6 E.PROC PROCESS GONE FROM MOT SX7 E.PGONE JP E.ERROR * PUTINT11 SX6 E.SUBP SUBPROCESS DOESN^T EXIST SX7 E.NOFIND JP E.ERROR * PUTINT12 BX6 X6-X6 CLEAR PPU LOCKOUT SA6 I.LOCK SX6 E.PARMS NEGATIVE INTERRUPT DATUM SX7 3 PUT IN PARAM INDEX LX7 18 SX5 E.NEGPAR BX7 X5+X7 JP E.ERROR ENDECS PTINT TITLE DISPLAY PROCESS DESCRIPTOR EJECT * * * * ECS ACTION DISPLAY PROCESS * * PARAMS C.. A PROCESS * D.. A BUFFER ADDRESS * D.. BUFFER LENGTH * * * ENTRY DPROD ECSCODE DPROD * FIRST CHECK PARAMS DPROD SB2 1 SA3 B1+P.PARAM+2 ADD OF BUFFER NG X3,ERDES1 SA4 A3+B2 BUFFER SIZE NG X4,ERDES2 ZR X4,ERDES2 SA2 B1+P.XPACK+2 AX2 36 SX2 X2 FL IX1 X3-X2 PL X1,ERDES3 SB3 -25 SB4 X4 SB5 B3+B4 NG B5,LENOK SET BUFFER SIZE .LE. 25 SB4 25 LENOK SX1 X3+B4 IX1 X1-X2 PL X1,ERDES4 SA1 B1+P.XPACK+1 RA AX1 36 IX7 X1+X3 SB6 X7 ABS CM ADD OF USER BUFFER SA1 B1+P.PARAM+1 MX7 39 BX0 -X7*X1 GET MOT INDEX FOR PROC * FROM USER CAPAB SA0 B1 RECS 1 READ MOT SA2 B1 BX1 X2-X1 BX1 X7*X1 NZ X1,ERDES5 UNIQUE NAMES DO NOT MATCH BX0 -X7*X2 RECS P.SCHED-P.ROHEAD READ PROCESS DESCRIPTOR SA0 A0+P.SCHED-P.ROHEAD SX0 X0+P.USRTIM-P.ROHEAD RECS P.IPLIST-P.USRTIM READ PROCESS DESCRIPTOR SA1 B1 START MASSAGE - FETCH P.ROHEAD SA2 B1+B2 P.ROHEAD+1 MX7 18 * USER GETS P.ROHEAD (VAR DESC LEN SUBSTITUTED * FOR PROC MOT),P.USRTIM TO P.CLIST,FIELDS * FROM P.CTABLE,P.SUBPDT,P.MAPESM,NO. OF STACK * ENTRIES, P.INTERR, NAME OF CURRENT AND EOP * SUBPROCESSES, IN THAT ORDER LX7 36 BX1 -X7*X1 AX7 18 BX5 X7*X2 LX5 18 BX6 X1+X5 SA6 B1+B2 SA1 B1+P.CTABLE-P.ROHEAD LX1 24 BX1 -X1 SB7 X1-P.USRTIM+P.ROHEAD-P.LOCALC LX1 36 SX5 X2+B7 SA2 B1+P.SUBPDT-P.ROHEAD BX1 -X7*X1 BX2 X7*X2 BX6 X1+X2 SA6 B1+P.CLIST-P.USRTIM+P.SCHED-P.ROHEAD SA1 B1+P.MAPESM-P.ROHEAD LX1 18 BX1 -X7*X1 SA2 B1+P.STACK-P.ROHEAD BX3 X7*X2 BX5 X3+X5 AX2 18 SX2 X2 IX6 X3-X2 AX6 1 SX6 X6+B2 BX6 X1+X6 MX7 6 BX6 -X7*X6 SA6 A6+B2 SA1 B1+P.INTERR-P.ROHEAD BX6 X1 SA6 A6+B2 IX0 X0+X5 ECS ADD TOP OF STACK SA0 B1 RECS 1 SA1 B1 SX2 X1+B2 IX0 X0-X3 IX0 X0+X2 SA0 B1+24 RECS 1 FETCH NAME CURRENT SUBPROC IX0 X0-X2 AX1 18 SX1 X1 IX0 X0+X1 SA0 A0+B2 RECS 1 FETCH NAME EOP SUBP SB3 B1+B2 SB5 B0 SUBPDQ SA1 B3+B5 TRANSMIT TO USER BX6 X1 SA6 B6+B5 SB5 B5+B2 SB4 B4-B2 NZ B4,SUBPDQ EQ SYSRET ERDES1 SX6 E.PARMS SX7 E.NEGPT EQ E.ERROR ERDES2 SX6 E.PARMS SX7 E.NEGPAR EQ E.ERROR ERDES3 SX6 E.PARMS SX7 E.BIGPT EQ E.ERROR ERDES4 SX6 E.PARMS SX7 E.BIGPAR EQ E.ERROR ERDES5 SX6 E.PROC SX7 E.PGONE EQ E.ERROR * ENDECS DPROD END