IDENT SCHED RECS MACRO OPERAND RE OPERAND RJ E.ECS ENDM WECS MACRO OPERAND WE OPERAND RJ E.ECS ENDM * INTSYS XTEXT PROCSYM XTEXT * * S.SCHDT DATA 0 . TEMPORARY CELL FOR SCHEDULER S.NXTPRC DATA 0 . MOT INDEX OF NEXT PROCESS, OR ZERO EXT DISASTR EXT E.ECS EJECT * * THIS ROUTINE ADDS A PROCESS TO THE SCHEDULING QUEUE * * PARAMETERS X1 = MOT INDEX OF PROCESS TO SCHEDULE * B7 = RETURN LINK * * REGISTERS NOT USED....B1, B2, B3, B4, B6 * ENTRY SCHED * SCHED SA0 S.SCHDT . TEMPORARY CELL SA2 =XI.LOCK . AM I PROTECTED? SA5 2 . (THE INT CODE IS OK) SX5 X5-3 + ZR X5,*+1 ZR X2,CULPRIT . DAMN IT SX0 X1 . MOT POINTER TO NEW PROCESS RECS 1 SA2 A0 MX7 39 SX5 P.SCHED-P.ROHEAD . OFFSET OF CHAINING WORD BX0 -X7*X2 IX0 X0+X5 . LINK WORD OF NEW PROCESS RECS 1 SA3 A0 NZ X3,SCHDERR . DISASTER MX6 30 SA3 S.NXTPRC ZR X3,SCHED0 SX0 X3 . MOT POINTER TO NEXT PROCESS RECS 1 SA4 A0 BX0 -X7*X4 IX0 X0+X5 . LINK WORD OF NEXT PROC RECS 1 SA4 A0 LX4 30 SB5 X4 . BACK LINK TO LAST PROC BX6 X6*X4 BX6 X1+X6 . SUBSTITUTE LINK TO NEW PROCESS LX6 30 SA6 A4 WECS 1 SX0 B5 .MOT POINTER TO LAST PROC RECS 1 SA4 A0 BX0 -X7*X4 IX0 X0+X5 . LINK WORD OF LAST PROCESS MX6 30 RECS 1 SA4 A0 BX6 X6*X4 BX6 X6+X1 . SUBSTITUTE LINK TO NEW PROCESS SA6 A4 WECS 1 SX6 B5 LX6 30 BX6 X6+X3 SA6 A0 BX0 -X7*X2 IX0 X0+X5 . LINK WORD OF NEW PROCESS WECS 1 JP B7 SCHDERR RJ DISASTR SCHED0 BX6 X1 SA6 A3+0 LX6 30 BX6 X6+X1 SA6 A0+0 WECS 1 JP B7 EJECT * THIS ROUTINE RETURNS A PROCESS TO RUN * * PARAMETERS ... B7 = RETURN LINK * * RETURNS ... X1 = ZERO ( NO PROCESS TO RUN ) OR * ABS ECS ADDRESS OF PROCESS TO RUN * X2 = QUANTUM TO RUN THE PROCESS * * REGISTERS NOT USED .. B1 THRU B6, A3 THRU A6, AND * X3 THRU X6 * ENTRY PRODUCE * PRODUCE SA0 S.SCHDT . TEMPORARY CELL SA1 S.NXTPRC ZR X1,PRODUCE0 SX0 X1 RECS 1 SA1 A0 MX2 39 SX0 P.SCHED-P.ROHEAD BX1 -X2*X1 IX0 X0+X1 . LINK WORD OF NEW PROCESS RECS 1 SA2 A0 SX7 X2 SA7 S.NXTPRC PRODUCE0 SA2 P.QUANT JP B7 . EXIT * P.QUANT DATA 75000 . 0.075 SEC QUANTUM EJECT * THIS ROUTINE REMOVES A PROCESS FROM THE SCHDULING * QUEUE * * PARAMETERS .. X1 = MOT INDEX OF PROCES TO REMOVE * B7 = RETURN LINK * * REGISTERS NOT USED... B1 THRU B6 * ENTRY DESCHED * DESCHED SA0 S.SCHDT . TEMPORARY CELL SA5 I.LOCK . PROTECTED? SA2 2 . ( THE INT CODE IS OK) SX2 X2-3 + ZR X2,*+1 ZR X5,CULPRIT . WHO IS THE CULPRIT??? SX0 X1 . MOT POINTER TO OLD PROCESS RECS 1 SA2 A0 MX7 39 SX5 P.SCHED-P.ROHEAD . OFFSET OF CHAINING WORD BX0 -X7*X2 IX0 X0+X5 . LINK WORD OF OLD PROCESS RECS 1 SA2 A0 ZR X2,DSCHDERR . DISASTER BX6 X6-X6 SA6 A0 SA3 S.NXTPRC IX3 X3-X1 . SEE IF DESCHEDULING NEXT PROCESS NZ X3,DESCHED1 . NO SX6 X2 . YES, SA6 A3 . UPDATE S.NXTPRC DESCHED1 WECS 1 IX3 X1-X6 . SEE IF DESCHEDULING ONLY PROCESS ZR X3,DESCHED0 . YES MX1 30 BX4 X1*X2 SX0 X2 . MOT POINTER TO NEXT PROCESS RECS 1 SA3 A0 BX0 -X7*X3 IX0 X0+X5 . LINK WORD OF NEXT PROCESS RECS 1 SA3 A0 BX3 -X1*X3 BX6 X4+X3 . SUBSTITUTE NEW BACK LINK SA6 A0 WECS 1 LX4 30 SX0 X4 . MOT POINTER TO LAST PROCESS RECS 1 SA3 A0 BX0 -X7*X3 IX0 X0+X5 . LINK WORD TO LAST PROCESS SX2 X2 RECS 1 SA3 A0 BX3 X1*X3 BX6 X3+X2 . SUBSTITUTE NEW FORWARD LINK SA6 A0 WECS 1 JP B7 CULPRIT RJ DISASTR . SCHEDULER NOT PROTECTED * FROM INTERRUPTS DSCHDERR RJ DISASTR DESCHED0 BX6 X6-X6 SA6 A3 . ZERO OUT S.NXT.PRC JP B7 * END