|
|
DataMuseum.dkPresents historical artifacts from the history of: IBM System/3 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about IBM System/3 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 14986 (0x3a8a)
Types: s3xseg
Names: »S$E046«
└─⟦827b5bd03⟧ Bits:30009184 5702-sc1.V16.ccp
└─⟦f17e99db6⟧
└─⟦this⟧ »S$E046«
MACRO 00010000
$E046 00020000
GBLB &MTK 00030000
LCLC &# 00040000
TEXT 00050000
&# SETC ' ' 00060000
TITLE 'TASK&#.WAIT&#.ROUTINE&#.$CC4WT' 00070000
* BEGIN MACRO '$E046' 3/13/73 00080000
SPACE 2 00090000
*********************************************************************** 00100000
* NAME -- $CC4WT * 00110000
* * 00120000
* TITLE -- CCP WAIT ROUTINE * 00130000
* * 00140000
* FUNCTION -- * 00150000
* * 00160000
* . TO PROVIDE THE INTERFACE REQUIRED TO ALLOW A CCP TASK * 00170000
* TO WAIT FOR ONE OR MORE ASYNCHRONOUS EVENTS. * 00180000
* * 00190000
* OPERATION -- * 00200000
* * 00210000
* . THE WAIT ROUTINE PERFORMS THE FOLLOWING FUNCTIONS: * 00220000
* * 00230000
* . VALIDATE THAT THE EXPECTED EVENT COUNT IN THE INPUT * 00240000
* PARAMETER LIST IS NON-ZERO. IF IT IS, THE CCP HALT * 00250000
* ROUTINE WILL BE ENTERED WITH A SUBHALT CODE OF 'PS'. * 00260000
* . MOVE THE WAIT PARAMETER LIST WAIT MASK AND EXPECTED * 00270000
* EVENT COUNT TO THE CURRENT TCBS WAIT MASK AND COUNT * 00280000
* FIELDS, SET THE RESIDUAL COUNT EQUAL TO THE EVENT * 00290000
* COUNT, AND ZERO THE TCB POST MASK. * 00300000
* . MOVE THE WAIT PARAMETER LIST FLAG BYTE TO $DPFLG IN * 00310000
* $CCCOM, RESTORE ALL REGISTERS AND INVOKE THE CCP * 00320000
* DISPATCHER VIA LOAD IAR INSTRUCTION. * 00330000
* * 00340000
* INPUT -- THE LINKAGE USED TO INVOKE CCP WAIT IS ... * 00350000
* * 00360000
* EXTRN $CC4WT * 00370000
* B $CC4WT * 00380000
* DC AL2 NNNN TCB WAIT MASK * 00390000
* DC IL1'N' EXPECTED EVENT COUNT * 00400000
* DC AL1 NNNN $DPFLG CONTROL BYTE REPLACEMENT * 00410000
* * 00420000
* OUTPUT -- * 00430000
* * 00440000
* . THE WAIT ROUTINE WILL SET THE TCB WAIT MASK, EXPECTED EVENT * 00450000
* COUNT, THE RESIDUAL EVENT COUNT, AND THE TCB POST MASK. * 00460000
* * 00470000
* EXTERNAL REF -- * 00480000
* * 00490000
* . $CCCOM, REGISTER SAVE AND RESTORE ROUTINES IN $CC4PI, * 00500000
* CCP HALT ROUTINE, AND THE CCP DISPATCHER. * 00510000
* * 00520000
* EXIT, NORMAL -- * 00530000
* * 00540000
* . TO THE CCP DISPATCHER. THE TASK WILL RESUME AT THE * 00550000
* INSTRUCTION FOLLOWING THE WAIT PARAMETER LIST IF THE * 00560000
* REGISTER SAVE BIT IS SET IN THE $DPFLG MASK BYTE IN THE * 00570000
* WAIT PARAMETER LIST. * 00580000
* * 00590000
* EXIT, ERROR -- * 00600000
* * 00610000
* . TO THE CCP HALT ROUTINE IF THE EXPECTED EVENT COUNT * 00620000
* IS ZERO. * 00630000
* * 00640000
* ATTRIBUTES -- * 00650000
* * 00660000
* . SERIALLY REUSEABLE, MUST-COMPLETE MODE PRIOR TO ENTRY, * 00670000
* RESIDENT. * 00680000
* * 00690000
*********************************************************************** 00700000
EJECT 00710000
RCOM EQU XR1 $CCCOM REGISTER 00720000
RTCB EQU XR2 TCB REGISTER 00730000
SPACE 2 00740000
SPACE 2 00750000
$CC4WT ST CCARR,ARR SAVE THE INPUT ARR WHICH ADDRESS 00760000
* THE INPUT PARAMETERS 00770000
B CCPSAV SAVE THE TCB REGISTERS 00780000
LA $CCCOM,RCOM SET UP $CCCOM BASE REG 00790000
L @CURTB(,RCOM),RTCB GET @ OF CURRENT TCB 00800000
SLC TCBPMK+1(2,RTCB),TCBPMK+1(,RTCB) RESET THE TCB POST 00810000
* MASK TO ZERO 00820000
ALC $CCARR(2,RCOM),X$0002(,RCOM) STEP THE INPUT ARR TO ADDRESS 00830000
* THE WAIT MASK INPUT TO $CC4WT 00840000
MVC WTMOD1(2),$CCARR(,RCOM) INITIALIZE THE INSTRUCTION TO 00850000
* MOVE THE WAIT MASK TO THE TCB 00860000
MVC TCBECT(3,RTCB),### MOVE THE WAIT COUNT AND WAIT 00870000
* MASK TO THE TCB 00880000
* 00890000
WTMOD1 EQU *-1 EQUATE FOR INST. MODIFY 00900000
CLI TCBECT(,RTCB),0 IS THE EXPECTED EVENT COUNT 00910000
* NON-ZERO 00920000
BE PS0002 NO, INVALID WAIT--STOP THE C.C.P.00930000
MVC TCBRCT(1,RTCB),TCBECT(,RTCB) YES, SET THE RESIDUAL COUNT 00940000
* EQUAL TO THE EXPECTED EVENT CNT 00950000
L $CCARR(,RCOM),XR2 CLOBBER THE TCB REG 00960000
* WITH THE @ OF THE INPUT WAIT 00970000
* PARAMETER $DPFLG BYTE 00980000
MVC WTMOD2(1),1(,XR2) MOVE THE $DPFLG BYTE INTO A SBN 00990000
* NOTE...THIS DOES NOT RESET 01000000
* THE WHOLE $DPFLG, ONLY THOSE 01010000
* BITS THAT ARE ON IN THE BYTE 01020000
SBN $DPFLG(,RCOM),### SET $DPFLG FOR THE TASK 01030000
WTMOD2 EQU *-2 EQUATE FOR INSTRUCTION MOD 01040000
B CCPRST RESTORE THE TASK'S REGISTERS 01050000
A CC0004,ARR STEP THE USER'S ARR TO THE NSI 01060000
L WT@DP,IAR INVOKE THE DISPATCHERWITHOUT 01070000
* CLOBBERING THE ARR 01080000
WT@DP DC AL2($CC4DP) @ OF CCP DISPATCHER 01090000
SPACE 2 01100000
TITLE 'TASK&#.POST&#.ROUTINE&#.--&#.$CC4PS' 01110000
*********************************************************************** 01120000
* NAME -- $CC4PS * 01130000
* * 01140000
* TITLE -- CCP POST ROUTINE * 01150000
* * 01160000
* FUNCTION -- * 01170000
* * 01180000
* . TO INDICATE TO A WAITING TASK THAT AN EXPECTED * 01190000
* EVENT HAS OCCURRED. * 01200000
* . TO ALLOW A TASK THAT HAS RECOGNIZED THE OCCURENCE OF * 01210000
* AN EVENT WHICH IS BY DEFINITION SIGNIFICANT IN THE CCP * 01220000
* SYSTEM, TO SIGNAL THAT EVENT TO ALL OTHER CCP TASKS * 01230000
* THAT MAY BE WAITING FOR THAT EVENT. * 01240000
* * 01250000
* OPERATION -- THE FOLLOWING OPERATIONS ARE PERFORMED BY POST: * 01260000
* * 01270000
* . VALIDATION OF THE INPUT PARAMETER LIST. IF THE POST * 01280000
* MASK IS ALL ZERO OR THE ADDRESS OF THE TCB TO BE POSTED * 01290000
* IS ALL ZERO (BOTH BYTES), THE CCP HALT ROUTINE WILL BE * 01300000
* ENTERED WITH A SUBHALT CODE OF 'PS'. * 01310000
* . FOLLOWING SUCCESSFUL VALIDATION, THE CCP TRACE ROUTINE * 01320000
* IS INVOKED WITH AN ID OF SEVEN TO RECORD THE POST ENTRY * 01330000
* PARAMETER DATA. * 01340000
* . IF THE POST PARAMETER LIST TCB ADDRESS HAS A NON-ZERO * 01350000
* HIGH BYTE, A SPECIFIC TCB IS TO BE POSTED. IF THE HIGH * 01360000
* BYTE IS ZERO, ALL TCB'S IN THE SYSTEM ARE TO BE TESTED * 01370000
* TO SEE IF THEY ARE AWAITING THIS SPECIFIC EVENT. * 01380000
* . EACH TCB OR THE SPECIFIED TCB IS INSPECTED PRIOR TO * 01390000
* POSTING. FIRST, IT IS DETERMINED IF THE TASK HAS * 01400000
* ALREADY BEEN POSTED FOR THE EVENT AND, IF NOT, AN * 01410000
* ADDITIONAL TEST IS MADE TO SEE IF THE TASK WAIT MASK * 01420000
* INDICATES THAT THE TASK EXPECTS THE EVENT. IF THESE * 01430000
* CONDITIONS ARE MET, THE APPROPRIATE POST MASK BIT IS * 01440000
* TURNED ON TO INDICATE WHICH EVENT THE POST IS FOR, THE * 01450000
* RESIDUAL EVENT COUNT IS DECREMENTED BY ONE AND, IF THE * 01460000
* RESULT IS ZERO THE TASK'S DISPATCHABILITY BIT IS TURNED ON. * 01470000
* . AFTER THE TCB(S) ARE CHECKED, POST RESTORES THE CALLER'S * 01480000
* REGISTERS AND RETURNS VIA BRANCH TO THE INSTRUCTION * 01490000
* FOLLOWING THE POST PARAMETER LIST. * 01500000
* * 01510000
* ENTRY POINT -- * 01520000
* * 01530000
* . $CC4PS * 01540000
* * 01550000
* INPUT -- THE FOLLOWING CALLING SEQUENCE IS USED FOR POST: * 01560000
* * 01570000
* EXTRN $CC4PS * 01580000
* B $CC4PS * 01590000
* DC XL2'POST-MASK' * 01600000
* DC AL2 @ OF TCB TO BE POSTED OR * 01610000
* DC XL2'00NN' INDICATING GENERAL POST (NN IS NON-ZERO). * 01620000
* * 01630000
* OUTPUT -- * 01640000
* * 01650000
* . SEE THE DISCUSSION OF OPERATION FOR AN EXPLANATION OF WHAT * 01660000
* FIELDS ARE SET. * 01670000
* * 01680000
* EXTERNAL REF -- * 01690000
* * 01700000
* . $CCCOM, CCP SAVE AND RESTORE ROUTINES, CCP HALT ROUTINE, * 01710000
* ADDRESS OF HIGHEST PRIORITY SYSTEM TCB, AND THE ADDRESS * 01720000
* OF THE LAST ACTIVE USER TASK. * 01730000
* * 01740000
* EXIT, NORMAL -- * 01750000
* * 01760000
* . TO THE INSTRUCTION FOLLOWING THE INPUT PARAMETER LIST. * 01770000
* * 01780000
* EXIT, ERROR -- * 01790000
* * 01800000
* . CCP HALT ROUTINE WITH A 'PS' SUB-HALT. * 01810000
* * 01820000
* ATTRIBUTES -- * 01830000
* * 01840000
* . RESIDENT, MUST-COMPLETE MODE PRIOR TO ENTRY, REUSEABLE. * 01850000
* * 01860000
* NOTES -- * 01870000
* * 01880000
* . POST IS A PART OF THE $CC4WT (WAIT) ASSEMBLY MODULE. * 01890000
* * 01900000
*********************************************************************** 01910000
EJECT 01920000
SPACE 1 01930000
RBAS EQU XR1 01940000
PSHALT EQU X'3E5D' 'PS' HALT EQUATE 01950000
PSLEN EQU 4 LENGTH OF INPUT PARAMETER LIST 01960000
SPACE 1 01970000
*********************************************************************** 01980000
* POST ROUTINE WORK AREA + CONSTANTS * 01990000
*********************************************************************** 02000000
SPACE 1 02010000
PSBASE EQU * EQUATE FOR BASE REGISTER 02020000
PSCB DS XL1 POST CONTROL BYTE 02030000
* 02040000
* BIT SIGNIFICANCE DEFINITIONS FOR THE PSCB 02050000
* BIT0--ALL TCB'S TO BE LOOKED AT 02060000
* BIT1--CURRENTLY IN SYSTEM TCB CHAIN 02070000
SPACE 1 02080000
PSHOLD DS XL4 HOLD AREA FOR INPUT PARAMETERS 02090000
PSMK1 EQU PSHOLD-3 POST MASK--BYTE 1 02100000
PSMK2 EQU PSHOLD-2 POST MASK--BYTE 2 02110000
PSTCB EQU PSHOLD INPUT TCB @ PARAMETER 02120000
PSZERO DC IL2'0' TWO BYTES OF ZERO 02130000
PSONE DC IL1'1' TWO BYTES OF ONE FOR ADD 02140000
EJECT 02150000
*********************************************************************** 02160000
* POST INITIAL ENTRY AND INITIALIZATION * 02170000
*********************************************************************** 02180000
SPACE 1 02190000
$CC4PS ST CCARR,ARR SAVE THE INPUT ARR 02200000
B CCPSAV AND SAVE REGS IN TCB 02210000
LA PSBASE,RBAS SET UP PGM BASE REGISTER 02220000
USING PSBASE,RBAS 02230000
L CCARR,XR2 RE-ACCESS THE INPUT PARAMETER @ 02240000
MVC PSHOLD(4,RBAS),3(,XR2) MOVE THE INPUT PARAMETERS TO 02250000
* THE PARAMETER HOLD AREA IN POST 02260000
SPACE 1 02270000
*********************************************************************** 02280000
* VERIFY THE INPUT PARAMETER VALIDITY * 02290000
*********************************************************************** 02300000
SPACE 1 02310000
CLC PSMK2(2,RBAS),PSZERO(,RBAS) WAS A NON-ZERO POST MASK INPUT 02320000
JNE PS0001 YES, CONTINUE TO CHECK 02330000
PS0002 B CPHALT NO, STOP THE SYSTEM WTTH A 'U-' 02340000
* HALT AND SUB-HALT OF 'PS' 02350000
DC AL2(PSHALT) PS SUB-HALT CONSTANT 02360000
PS0001 CLC PSTCB(2,RBAS),PSZERO(,RBAS) ANY INPUT TCB @ 02370000
BE PS0002(,RBAS) NO-STOP THE CCP 02380000
SPACE 1 02390000
*********************************************************************** 02400000
* VERIFICATION IS GOOD--TRACE THE POST ENTRY AND INITIALIZE THE * 02410000
* POST WORKING CONTROLS * 02420000
*********************************************************************** 02430000
SPACE 1 02440000
B $CC4TT GO TO TRACE 02450000
DC AL1(TTPOST) TRACE ID FOR POST 02460000
MVI PSCB(,RBAS),0 INITIALIZE THE POST CONTROL BYTE 02470000
SPACE 1 02480000
*********************************************************************** 02490000
* INITIALIZE THE SET AND TEST BIT INSTRUCTIONS WHOSE Q-BYTE IS * 02500000
* DEPENDENT UPON THE INPUT POST MASK * 02510000
*********************************************************************** 02520000
SPACE 1 02530000
MVC PSMODA(1,RBAS),PSMK1(,RBAS) 02540000
MVC PSMODF(1,RBAS),PSMK1(,RBAS) 02550000
MVC PSMODB(1,RBAS),PSMK2(,RBAS) 02560000
MVC PSMODC(1,RBAS),PSMK2(,RBAS) 02570000
MVC PSMODD(,RBAS),PSMK1(,RBAS) MOVE THE POST MASK INTO A SBN 02580000
MVC PSMODE(,RBAS),PSMK2(,RBAS) INSTRUCTION TO SET TCB POST MSK 02590000
EJECT 02600000
*********************************************************************** 02610000
* DETERMINE IF ALL TCBS ARE TO BE CHECKED AS INDICATED * 02620000
* BY A BYTE OF ZERO IN THE INPUT TCB ADDRESS FIELD OR * 02630000
* IF ONLY ONE TCB IS TO BE POSTED * 02640000
*********************************************************************** 02650000
SPACE 1 02660000
L PSTCB(,RBAS),RTCB SET UP THE TCB @ REGISTER 02670000
CLI PSTCB-1(,RBAS),0 ARE ALL TCB'S IN THE SYTEM TO 02680000
* BE LOOKED AT ON THIS ENTRY 02690000
JNE PS0003 NO, CONTINUE 02700000
SBN PSCB(,RBAS),BIT0+BIT1 YES, SET INDICATORS IN CTL BYTE 02710000
L CC@CMT,RTCB GET @ OF FIRST SYSTEM TCB /CM'S/ 02720000
SPACE 1 02730000
*********************************************************************** 02740000
* * 02750000
* RECURSIVE PORTION OF POST * 02760000
* * 02770000
* DETERMINE IF THE TWO FOLLOWING CONDITIONS EXIST... * 02780000
* * 02790000
* 1. HAS THIS TASK ALREADY BEEN POSTED * 02800000
* 2. SEE IF THE TASK IS IN FACT WAITING FOR THIS EVENT * 02810000
* * 02820000
*********************************************************************** 02830000
SPACE 1 02840000
*********************************************************************** 02850000
* TEST TO SEE IF A TASK HAS BEEN POSTED + IF IT IS WAITING FOR * 02860000
* THIS EVENT * 02870000
*********************************************************************** 02880000
SPACE 1 02890000
PS0003 JF *+3 RESET THE FLASE BIT 02900000
TBN TCBPMK(,RTCB),### *M* HAS THE TCB ALREADY BEEN 02910000
* POSTED 02920000
PSMODA EQU *-2 EQUATE FOR INST. MOD. 02930000
TBN TCBPMK+1(,RTCB),### *M* TEST THE SECOND BYTE OF 02940000
* THE POST MASK 02950000
PSMODB EQU *-2 EQUATE FOR INST. MOD. 02960000
JF *+6 NO, NOT YET POSTED 02970000
J PS0010 POSTED--SEE IF MORE TCBS TO LOOK 02980000
* AT 02990000
SPACE 2 03000000
TBN TCBWMK(,RTCB),### *M* SEE IF TCB HAS WAITED ON 03010000
* THIS SPEICIFIC EVENT 03020000
PSMODF EQU *-2 EQUATE FOR INST. MOD. 03030000
TBN TCBWMK+1(,RTCB),### *M* CHECK SECOND WAIT BYTE 03040000
PSMODC EQU *-2 EQUATE FOR INST. MOD. 03050000
JF PS0010 HASN'T WAITED--SEE IF MORE TCB 03060000
* TO LOOK AT 03070000
*********************************************************************** 03080000
* TASK HAS WAITED AND NOT YET BEEN POSTED FOR THIS EVENT * 03090000
*********************************************************************** 03100000
SPACE 1 03110000
* 03120000
SBN TCBPMK(,RTCB),### *M* SET POST BITS INTO TCB MASK 03130000
PSMODD EQU *-2 EQUATE FOR INST. MOD. 03140000
SBN TCBPMK+1(,RTCB),### *M*SET POST BITS INTO TCB MASK 03150000
PSMODE EQU *-2 EQUATE FOR INSTRUCTION MOD 03160000
SPACE 1 03170000
*********************************************************************** 03180000
* POST BITS ARE SET INTO TCB--DECREMENT THE EVENT COUNT BY ONE * 03190000
* AND IF THE RESIDUAL EVENT COUNT IS ZERO THE TASK CAN BE MADE * 03200000
* READY FOR EXECUTION. * 03210000
*********************************************************************** 03220000
SPACE 1 03230000
SLC TCBRCT(,RTCB),PSONE(1,RBAS) DECR THE RESIDUAL COUNT FIELD 03240000
JNZ PS0010 IF NOT ZERO, THE TASK IS NOT 03250000
* READY FOR EXECUTION 03260000
SBN TCBTSK(,RTCB),TCBDSP RESIDUAL IS ZERO--MAKE READY 03270000
SBF CCDPFH,DPPOST INDICATE THAT A TASK CAME READY 03280000
SPACE 1 03290000
*********************************************************************** 03300000
* GO TO THE NEXT TCB IF REQUIRED * 03310000
*********************************************************************** 03320000
SPACE 1 03330000
PS0010 TBN PSCB(,RBAS),BIT0 ARE WE TO DO ALL TCB'S 03340000
JF PSDONE NO, EXIT TO INVOKER 03350000
TBN PSCB(,RBAS),BIT1 YES--ARE WE STILL IN THE SYTEM 03360000
* TCB CHAIN 03370000
JF PS0011 NO, GO TO USER TCB @ ACCESS 03380000
CLI TCBNXT-1(,RTCB),0 IS THIS THE LAST SYSTEM TCB 03390000
L TCBNXT(,RTCB),RTCB GET NEXT TCB @ 03400000
BNE PS0003(,RBAS) NOT THROUGH SYSTEM TCB'S, CHECK 03410000
* THE NEXT ONE FOR WAITING 03420000
* 03430000
SBF PSCB(,RBAS),BIT1 THROUGH SYSTEM TCB'S--TURN OFF 03440000
* THE SYSTEM TCB INDICATOR 03450000
L CCLUTB,RTCB GET 1ST USER TCB TO CHECK 03460000
B PS0003(,RBAS) GO CHECK OUT THE FIRST USER TCB 03470000
SPACE 1 03480000
*********************************************************************** 03490000
* SEE IF ANY REMAINING USER TCB'S ARE TO BE CHECKED AND EXIT * 03500000
* IF NOT. * 03510000
*********************************************************************** 03520000
SPACE 1 03530000
AIF (&MTK NE '1').NXTA MULTI-TASK SYSTEM? 03540000
PS0011 CLC TCBNXT(2,RTCB),CCLUTB THIS TCB POINT TO THE FIRST 03550000
* USER TCB THAT WAS CHECKED 03560000
JNE PS0012 NO--CONTINUE 03570000
.* 03580000
AGO .NXTB 03590000
.NXTA ANOP 03600000
PS0011 EQU * EXIT TO INVOKER 03610000
.NXTB ANOP 03620000
PSDONE L CCARR,XR2 CLOBBER TCB @ WITH RETURN ADDRESS03630000
LA PSLEN(,XR2),XR2 STEP OVER INPUT PARAMETER LIST 03640000
ST PSRET+3(,RBAS),XR2 STORE THE RETURN ADDRESS 03650000
B CCPRST RESTORE THE INPUT REGISTERS 03660000
PSRET BC ####,BR97 RETURN TO INVOKER 03670000
SPACE 1 03680000
AIF (&MTK NE '1').PS12 MULTI-TASKING? 03690000
PS0012 L TCBNXT(,RTCB),RTCB GET NEXT USER TCB TO CHECK 03700000
B PS0003(,RBAS) AND CHECK IT OUT 03710000
.PS12 ANOP NO MULTI-USER TASKS 03720000
* END MACRO $E046 03730000
MEND 03740000