IDENT CAPABLE TITLE ROUTINES TO ACCESS A C-LIST RECS MACRO OPERAND RE OPERAND RJ E.ECS ENDM WECS MACRO OPERAND WE OPERAND RJ E.ECS ENDM * * INTSYS XTEXT * PROCSYM XTEXT * ECSMAC XTEXT CBLOCK MICRO 1,,*/ECAPAB/* EXT E.ECS,E.ERROR EXT E.MOT EJECT * * THIS ROUTINE GETS A CAPABILITY FROM THE FULL C-LIST * IT RETURNS THE ABSOLUTE CM ADDRESS OF THE * CAPABILITY * IT CREATS AN ERROR IF THE CAPABILITY INDEX IS * NEGATIVE OR TOO LARGE * * INPUT B6 = RETURN * X1 = CAPABILITY INDEX * OUTPUT A0 = ABS CM ADDR OF DESIRED CAPABILITY * * REGISTERS USED A0 - X0 * A4 - X4 * A5 - X5 * X1 * X7 * B5 * B6 * * FORM OF CAPABILITY REFERENCE: * LOW ORDER 18 BITS = FULL C-LIST INDEX * NEXT 18 BITS = INDIRECT INDEX IF BIT 59=1 * (LOW ORDER 18 BITS MUST INDEX A * CAPABILITY FOR A C-LIST) ENTRY GETCAP * * GETCAP SX7 B6 RETURN LINK SB6 X1 CAPABILITY INDEX LT B6,B0,ERR5 ERROR- NEGATIVE INDEX SA5 B1+P.CLIST SA5 X5+B1 LENGTH OF LOCAL C-LIST SB5 X5 GE B6,B5,GETCAP1 JP IF NOT IN LOCAL C-LIST * SB6 B6+B6 SB5 B6+P.LOCALC SA0 B1+B5 ABS CM ADDR OF CAPAB SB5 X7 RETURN LINK NG X1,GETCAP2 JP IF INDIRECT C-LIST REFERENCE JP B5 RETURN OTHERWISE * * CAPABILITY NOT IN LOCAL C-LIST * GETCAP1 SA5 A5+2 GET LENGTH OF NEXT C-LIST SB6 B6-B5 SB5 X5 LENGTH OF NEXT C-LIST ZR X5,ERR6 ERROR- INDEX TOO LARGE GE B6,B5,GETCAP1 LOOP TILL PROPER C-LIST * SA5 A5+1 GOT THE C-LIST...NOW GET CAPAB SA0 B1+P.SCR2 SX0 X5+0 MOT INDEX OF PROPER C-LIST SB6 B6+B6 RECS 1 READ MOT ENTRY SA4 A0 MX0 39 BX5 X5-X4 TEST MOT ENTRY BX5 X5*X0 NZ X5,ERRMOT JP IF C-LIST GONE FROM MOT BX0 -X0*X4 ECS ADDR OF PROPER C-LIST SX5 B6+1 SKIP FIRST WD OF C-LIST IN ECS IX0 X0+X5 ECS ADDR OF DESIRED CAPABILITY SB5 X7 RETURN LINK RECS 2 READ CAPABILITY FROM ECS NG X1,GETCAP2 JP IF INDIRECT C-LIST REFERENCE JP B5 RETURN * * INDIRECT CAPABILITY REFERENCE * GETCAP2 AX1 30 SHIFT OVER INDIRECT INDEX SA5 A0 1ST WD OF CAPABILITY FOR A SX5 X5-T.CLIST C-LIST (WE HOPE) NZ X5,ERR7 ERROR- NOT A C-LIST CAPABILITY SA5 A5+1 SX0 X5 MOT INDEX OF CLIST SX1 X1 SA0 B1+P.SCR2 RECS 1 READ MOT ENTRY FOR C-LIST NG X1,ERR5 ERROR- NEGATIVE C-LIST INDEX MX0 39 SA4 A0 TEST MOT ENTRY BX5 X5-X4 BX5 X5*X0 BX0 -X0*X4 ECS ADDR OF INDIRECT C-LIST RECS 1 READ LENGTH OF INDIRECT C-LIST NZ X5,ERRMOT ERROR- C-LIST GONE SA5 A0 LENGTH OF INDIRECT C-LIST IX5 X1-X5 PL X5,ERR6 ERROR- INDIRECT INDEX TOO LARGE LX1 1 SX1 X1+1 IX0 X0+X1 ECS ADDR OF DESIRED CAPABILITY RECS 2 READ THE CAPABILITY JP B5 RETURN * * EJECT SPACE 4 * PUTCAP PUTS A CAPABILITY INTO A SPECIFIED POSITION OF THE FULL C-LIST. * IT CREATES AN ERROR IF THE SPECIFIED INDEX IS NEGATIVE OR TOO LARGE. * * ENTRY: X1 CONTAINS CAPABILITY INDEX * B5 CONTAINS ABSOLUTE CM ADDRESS OF CAPABILITY * B6 CONTAINS RETURN LINK * * CHANGES: A0-X0,A4-X4,A5-X5,A6-X6,X1 * ENTRY PUTCAP * P.PUTTMP EQU P.TEMP7 * PUTCAP NG X1,ERR5 SA5 B1+P.CLIST SA5 X5+B1 . LENGTH OF LOCAL C-LIST IX4 X1-X5 PL X4,PUTCAP1 . CAPABILITY NOT IN LOCAL C-LIST SA4 B5 . FIRST WORD OF CAPABILITY SB5 B1+P.LOCALC BX6 X4 IX5 X1+X1 . OFFSET := 2 * INDEX SA4 A4+1 . SECOND WORD OF CAPABILITY SA6 X5+B5 BX6 X4 SB5 A4-1 SA6 A6+1 EQ PUTCAP2 . NOW WRITE CAPABILITY TO ECS SPACE 2 PUTCAP1 SA5 A5+2 . NEXT C-LIST LENGTH, OR... ZR X5,ERR6 . ERROR - INDEX TOO LARGE IX1 X4-X5 BX4 X1 PL X1,PUTCAP1 . CAPABILITY NOT IN THIS C-LIST IX1 X1+X5 PUTCAP2 SA5 A5+1 . MOT POINTER TO C-LIST SX0 X5 SA0 B1+P.PUTTMP IX1 X1+X1 . OFFSET RECS 1 . MOT ENTRY SA4 A0 BX5 X4-X5 . COMPARE UNIQUE NAMES MX0 39 BX5 X0*X5 NZ X5,ERRMOT . UN-S DO NOT MATCH SX1 X1+1 BX0 -X0*X4 . ECS ADDRESS OF C-LIST IX0 X0+X1 SA0 B5 WECS 2 JP B6 . RETURN EJECT SPACE 4 * ARBCAP IS USED TO GET/PUT A CAPABILITY FROM/INTO AN ARBITRARY C-LIST. * IT CREATES AN ERROR IF A NEGATIVE OR TOO-LARGE C-LIST INDEX IS GIVEN. * * ENTRY: X5 CONTAINS MOT POINTER (WITH UNIQUE NAME) * X1 CONTAINS INDEX TO C-LIST POINTED TO BY X5 * B4 CONTAINS ZERO/NONZERO FOR READ/WRITE RESPECTIVELY * B5 IS ABSOLUTE CM ADDRESS OF 2 WORDS FOR CAPABILITY * B6 IS RETURN LINK * * EXIT: IN READ MODE, B5 NOW POINTS TO CAPABILITY * * CHANGES: A0-X0,A4-X4,X1,X5 * ENTRY ARBCAP * P.ARBTMP EQU P.TEMP7 * ARBCAP NG X1,ERR5 . ERROR - INDEX NEGATIVE SA0 B1+P.ARBTMP SX0 X5 RECS 1 . MOT ENTRY SA4 A0 BX5 X4-X5 . COMPARE UNIQUE NAMES MX0 39 BX5 X0*X5 ZR X5,NEXTARB .. CLIST WAS OK SB3 B2+0 EQ ERRMOT NEXTARB BX0 -X0*X4 RECS 1 . C-LIST LENGTH SA4 A0 IX4 X1-X4 PL X4,ERR6 .ERROR - INDEX TOO LARGE SA0 B5 IX1 X1+X1 . OFFSET := 2 * INDEX SX1 X1+1 IX0 X0+X1 . ADDRESS OF CAPABILITY NZ B4,ARBCAP1 . SELECT READ OR WRITE RECS 2 JP B6 . RETURN ARBCAP1 WECS 2 JP B6 . RETURN TITLE ACTIONS ON A C-LIST * * * DSCAP # DISPLAY A CAPABILITY FROM THE FULL C-LIST * EXT SYSRET ENTRY DSCAP ECSCODE DSCAP DSCAP SA1 B1+P.PARAM SA2 A1+1 BX6 X1 BX7 X2 SA6 B1+P.XPACK+14 SA7 B1+P.XPACK+15 EQ SYSRET ENDECS DSCAP * SPACE 5 * * * MOVEC .. MASK OPTIONS AND MOVE CAPABILITY WITHIN FULL C-LIST * ENTRY MOVEC * P.CPLTMP EQU P.TEMP1 * ECSCODE MOVEC MOVEC SA2 B1+P.PARAM+3 .. FETCH OPTION BITS MASK MX0 18 BX2 -X0*X2 . GUARANTEE : 42 OPTIONS BX0 X0+X2 . MASK MUST TRANSMIT TYPE LX0 18 SA1 B1+P.PARAM .. FETCH OPTION BITS, TYPE SA2 A1+1 .. FETCH UNIQUE NAME, MOT BX6 X0*X1 . DOWNGRADE OPTIONS SB5 B1+P.CPLTMP SA6 B5 BX7 X2 SA1 B1+P.PARAM+2 . TARGET CAPABILITY INDEX SA7 A6+1 SB3 2 .. ERROR MODIFIER SB6 SYSRET . RETURN LINK EQ PUTCAP . STORE CAPABILITY ENDECS MOVEC SPACE 5 * * CAPIN # COPY CAPABILITY FROM ARBITRARY C-LIST TO THE FULL C-LIST * ENTRY CAPIN ECSCODE CAPIN * CAPIN SA5 B1+P.PARAM+1 . MOT POINTER SA1 B1+P.PARAM+2 . CAPABILITY INDEX SB6 CPYTOFL1 . RETURN LINK SB5 B1+P.CPLTMP . RESULT ARE SB4 B0 . READ DESIRED SB3 2 .. ERROR MODIFIER SB2 1 .. ERROR MODIFIER (BAD CLIST) EQ ARBCAP . MOVE CAPABILITY CPYTOFL1 SA1 B1+P.PARAM+3 . INDEX OF TARGET POSITION SB6 SYSRET . RETURN LINK SB5 B1+P.CPLTMP . CAPABILITY LOCATION SB3 3 .. ERROR MODIFIER EQ PUTCAP . ADD TO FULL C-LIST ENDECS CAPIN SPACE 5 * * CAPOU COPY CAPABILITY FROM THE FULL C-LIST TO ARBITRARY C-LIST * ENTRY CAPOU ECSCODE CAPOU * CAPOU SA1 B1+P.PARAM+3 . INDEX OF SOURCE CAPABILITY SB3 3 .. ERROR MODIFIER: INDX IN FULL CLIST SB6 CPYFMFL1 . RETURN LINK EQ GETCAP . GET CM ADDRESS IN A0 CPYFMFL1 SA5 B1+P.PARAM+1 . MOT POINTER SA1 B1+P.PARAM+2 . CAPABILITY INDEX FOR TARGET SB4 1 . WRITE DESIRED SB5 A0+0 . CAPABILITY LOCATION SB3 2 .. ERROR MODIFIER: INDEX IN ARB CLIST SB2 1 .. ERROR MODIFIER: ARB CLIST SB6 SYSRET . RETURN LINK EQ ARBCAP . MOVE CAPABILITY ENDECS CAPOU SPACE 5 * * CPZRO * ZERO A CAPABILITY * * IP1: D. INDEX IN FULL CLIST OF THE CAPABILITY * ENTRY CPZRO ECSCODE CPZRO CPZRO SA1 B1+P.PARAM .. GET INDEX BX2 X1 .. SAVE CAPABILITY INDEX SB6 CPZRO1 .. SET RETURN EQ GETCAP .. GETCAP RETURNS ABS CM ADDR OF CAP IN A0 * CPZRO1 SX6 B0 SX7 B0 SB6 SYSRET .. SET B7 FOR RETURN FROM ^PUTCAP^ SA6 A0 .. ZERO THE CAPABILITY SA7 A0+1 SB5 A0 .. ABS CM ADDR OF CAPBILITY BX1 X2 .. RESET CAPABILITY INDEX FOR ^PUTCAP^ EQ PUTCAP .. PUT ZEROED CAPABILITY INTO CLIST ENDECS CPZRO SPACE 5 * * CREACL # CREATE A C-LIST * EXT BLKADR EXT MAKEOBJ EXT CAPAB ECSCODE CRECL * * TYPES XTEXT P.CPLTMP EQU P.TEMP1 * * CREACL SB3 2 .. ERROR MODIFIER SA1 B1+P.PARAM+2 .. TEST CAPABILITY INDEX NG X1,ERR5 .ERROR..INDEX NEGATIVE SA2 B1+P.CLIST SA2 B1+X2 IX1 X1-X2 NG X1,CREACL0 .JP IF INDEX OK CREACL5 SA2 A2+2 ZR X2,ERR6 . ERROR..INDEX TOO LARGE IX1 X1-X2 PL X1,CREACL5 * CREACL0 SA5 B1+P.PARAM+1 .MOT POINTER FOR ALLOCATION BLOCK SA1 B1+P.PARAM+3 . LENGTH OF DESIRED C-LIST NO SB3 3 .. ERROR MODIFIER ZR X1,ER20 . ERROR IF LENGTH 0 OR LESS NG X1,ER20 IX1 X1+X1 SB2 X1+1 . AX1 16 ERROR IF LENGTH 2**15 OR MORE NZ X1,ER21 SB4 CREACL1 . RETURN LINK SX7 AT.CLIST .TYPE OF OBJECT TO ALLOCATE EQ MAKEOBJ . ALLOCATE C-LIST CREACL1 SA0 B1+P.PARAM+3 BX0 X5 .ECS ADDR OF C-LIST WE 1 . LENGTH OF C-LIST RJ E.ECS SB5 CAPAB SB6 SYSRET SA1 B1+P.PARAM+2 . INDEX FOR CAPABILITY IN FULL C-LIST EQ PUTCAP ENDECS CRECL * * DELCLIST IS AN ECS ACTION TO DESTROY A C-LIST * PARAMETER: AP1: C - C-LIST TO BE DESTROYED * FRETURN IF C-LIST IS IN CURRENT FULL C-LIST ECSCODE DELCL EXT SYSFRET EXT DELOBJ DELCL SB2 1 SA5 B1+P.PARAM+1 MOT AND UNIQUE NAME OF C-LIST SA2 B1+P.CLIST POINTER TO FULL C-LIST TABLE SA2 X2+B1 DCLOOP SA3 A2+B2 ZR X2,DC2 END OF TABLE BX3 X3-X5 SA2 A3+B2 NZ X3,DCLOOP EQ SYSFRET C-LIST MATCHES WITH ENTRY DC2 SB7 SYSRET RETURN FROM DELOBJ SX0 X5 SA0 B1 RECS 1 SA1 B1 MX0 60-21 BX1 X5-X1 BX1 X0*X1 ZR X1,DELOBJ UNIQUE NAMES MATCH SB3 1 .. ERROR MODIFIER EQ ERRMOT ENDECS DELCL EJECT ERRNUMS XTEXT * ERRMOT SX1 B3 LX1 18 SX6 E.MISCE SX7 E.CLMOT BX7 X7+X1 EQ E.ERROR ERR5 SX7 E.NEGIX EQ CL2 ERR6 SX7 E.BIGIX EQ CL2 ERR7 SX1 B3 LX1 18 SX7 E.NOTCL BX7 X7+X1 SX6 E.PARMS JP E.ERROR CL2 SX1 B3 .. ERROR MODIFIER LX1 18 BX7 X1+X7 ER2 SX6 E.PARMS EQ E.ERROR ER21 SX6 E.BIGPAR .. CLIST TOO LONG EQ ER20P ER20 SX7 E.NEGPAR .. CLIST TOO SMALL EQ CL2 ER20P SX1 B3 LX1 18 .. SHIFT SX7 E.BIGPAR BX7 X7+X1 EQ ER2 END