|
|
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: 28702 (0x701e)
Types: s3xseg
Names: »S$E072«
└─⟦827b5bd03⟧ Bits:30009184 5702-sc1.V16.ccp
└─⟦f17e99db6⟧
└─⟦this⟧ »S$E072«
MACRO 00010000
.********************************************************************** 00020000
.* NAME: $E072 * 00040000
.********************************************************************** 00650000
$E072 00660000
GBLB &ONE,&NOB,&NOM,&MIN,&NSW,&N2741,&NSCTL,&NBFR,&NCS,&NSWL 00670000
GBLB &BPRT *L00680000
LCLA &MIX 00700000
TEXT 00710000
* R-15,C-00 CHANGE LEVEL 00720000
TITLE '$E072/$$BMCH--CCP-VERSION-TP-CHECK' 00730090
* PRINTER BUSY FLAG 2/22/78 *L00730130
$$BMCH EQU * 00730180
ENTRY $$BMCH 00730270
ENTRY CHBMHL 00730360
AIF (&NOB).H0050 00730450
ENTRY CHBMBS 00730540
.H0050 AIF (&NOM).H0100 00730630
ENTRY CHBMML 00730720
ENTRY CHBMPC 00730810
.H0100 ANOP 00730900
*********************************************************************** 00730990
* * 00731080
*TITLE: $$BMCH - TELEPROCESSING MULTIPLE WAIT. * 00731170
* * 00731260
*FUNCTION: THE FUNCTION OF THIS WAIT ROUTINE IS TO SCAN A LIST OF DTFS* 00731350
* AND, IF NECESSARY, PASS CONTROL AND THE DTF TO THE APPROPRIATE * 00731440
* DEVICE WAIT ROUTINE (BSCA, OR MLTA). THE USER IS THEN NOTIFIED * 00731530
* OF A COMPLETION VIA THE APPROPRIATE DTF. * 00731620
* * 00731710
*INPUT: INPUT TO THE ROUTINE IS THE WAIT LIST OF DTF'S. * 00731800
* * 00731890
*OUTPUT: OUTPUT FROM THE ROUTINE WILL BE REGISTER 2 POINTING AT THE * 00731980
* COMPLETED DTF, WHICH CONTAINS THE COMPLETION CODE. ON RETURN WITH* 00732070
* NO COMPLETIONS OR NO ACTIVE DTF'S, XR2 WILL POINT TO THE LAST DTF * 00732160
* IN THE LIST, ALSO WITH THE APPROPRIATE COMPLETION CODE. * 00732250
* * 00732340
*EXTERNAL ROUTINES: * 00732430
* MSBSCH - BSCA PROGRAM WAIT ROUTINE. * 00732520
* $MLCK0 - MLTA CHECK ROUTINE. * 00732610
* * 00732700
*********************************************************************** 00732790
SPACE 3 00732880
*********************************************************************** 00732970
* INITIALIZATION / TEST FOR DEVICE TYPE * 00733060
*********************************************************************** 00733150
SPACE 1 00733240
CHENTR EQU * 00733330
ST CHSTOR,ARR SAVE RETURN @ 00733420
MVI CHACTV,UNCOND INTITALIZE SWITCH TO FALL THRU 00733510
L CCKLST,LISTRG POINT REGISTER AT WAIT LIST 00733600
SPACE 1 00733690
CHSTRT EQU * 00733780
L DTFADR(,LISTRG),DTFREG POINT REGISTER TO DTF 00733870
TBN FLAGS(,LISTRG),OPGONE WAS THE COMPL. CODE DESTROYED? 00733960
JF CHNODS BRANCH IF NOT 00734050
MVI DTFCMP(,DTFREG),OPACC RESTORE COMPLETION CODE 00734140
CHNODS EQU * 00734230
TBN FLAGS(,LISTRG),SKIP IS THIS ENTRY TO BE SKIPPED? 00734320
JT CHSTND GO TEST FOR END IF YES 00734410
TBN DTFATR(,DTFREG),FILOPN+FILEAC THIS FILE OPEN AND ACTIVE? 00734500
JF CHSTND BRANCH IF NOT 00734590
AIF (&NOM).H0300 00734680
AIF (&NOB).H0200 00734770
CLI DTFDEV(,DTFREG),BSCA BSCA ADAPTER ? 2 00734860
JNL CHBSCA BRANCH IF YES 2 00734950
.H0200 EJECT 00735040
*********************************************************************** 00735130
* PROCESS MLTA DTF * 00735220
*********************************************************************** 00735310
SPACE 2 00735400
CHMLTA EQU * 00735490
CLI CHCHEK,NOMLTA IS MLTA IN THE PROGRAM? M 00735580
JE CHSTND BRANCH IF NOT M 00735670
MVI CHACTV,NOOPED SET ACTIVE DTF FOUND SWITCH M 00735760
ST CHSV1,LISTRG SAVE WAIT LIST POINTER M 00735850
L CCKLST,LISTRG POINT XR1 TO START OF WAIT LIST M 00735940
B *-* GO TO MLTA CHECK ROUTINE M 00736030
CHCHEK EQU *-2 ADDRESS FILLED BY M 00736120
CHBMML EQU *-1 MLTA IOCS OPEN M 00736210
SPACE 00736300
CHSV1 EQU *+3 M 00736390
LA *-*,LISTRG RESTORE WAIT LIST POINTER M 00736480
TBN DTFATR(,DTFREG),FILEAC WAS THE OP. POSTED COMPLETE? M 00736570
JF CHPNTR BRANCH TO SET POINTER IF YES M 00736660
AIF (&NOB).H0400 00736750
J CHSTND GO TEST FOR END OF LIST 2 00736840
.H0300 EJECT 00736930
*********************************************************************** 00737020
* PROCESS BSCA DTF * 00737110
*********************************************************************** 00737200
SPACE 1 00737290
CHBSCA EQU * 00737380
CLI CHCKBS,NOBSCA IS BSCA IN THE PROGRAM? B 00737470
JE CHSTND BRANCH IF NOT B 00737560
CLI DTFCMP(,DTFREG),OPACC IS A BSCA OPERATION PENDING? B 00737650
JNE CHSTND GO TEST FOR END OF LIST IF NOT B 00737740
MVI CHACTV,NOOPED SET ACTIVE DTF FOUND SWITCH B 00737830
CHCKBS EQU *+2 B 00737920
B *-* GO TO BSCA WAIT ROUTINE B 00738010
CHBMBS EQU *-1 ADDRESS FOR BSCA PROGRAM WAIT B 00738100
CLI DTFCMP(,DTFREG),OPACC WAS A COMPLETION POSTED? B 00738190
JNE CHPNTR BRANCH IF POSTED. B 00738280
.H0400 SPACE 3 00738370
*********************************************************************** 00738460
* CHECK FOR END OF WAIT LIST * 00738550
*********************************************************************** 00738640
SPACE 1 00738730
CHSTND EQU * 00738820
AIF (&MIN).H0500 00738910
TBN FLAGS(,LISTRG),LSTEND END OF WAIT LIST? 00739000
JT CHEND BRANCH IF YES 00740100
LA NEXT(,LISTRG),LISTRG POINT TO NEXT LIST ENTRY 00740200
B CHSTRT GO TEST NEXT ENTRY 00740300
AGO .H0540 00740350
.H0500 SPACE 3 00740400
J CHEND NO COMPLETIONS-JUMP 00740430
.H0540 ANOP 00740460
CHBMHL DC XL3'0' BOGUS DC FOR BRACKET HALT 00740500
AIF (&NOM).H0550 00740600
CHBMPC EQU *-1 BOGUS DC FOR PCI INTERUPTS 00740700
.H0550 ANOP 00740800
EJECT 00740900
*********************************************************************** 00741000
* PROCESS END OF LIST CONDITIONS * 00741100
*********************************************************************** 00741200
SPACE 3 00741300
CHEND EQU * 00741400
L DTFADR(,LISTRG),DTFREG POINT XR2 TO DTF 00741500
CLI DTFCMP(,DTFREG),OPACC IS CODE OP ACCEPTED? 00741600
JNE CHNOOP BRANCH IF NOT 00741700
SBN FLAGS(,LISTRG),OPGONE SET BIT FOR DESTROYED CODE 00741800
CHNOOP EQU * 00741900
MVI DTFCMP(,DTFREG),INACTV SET COMPLETION TO NO ACTIVE DTF'S 00742000
** THE FOLLOWING BRANCH IS SET TO NOOP IF AN ACTIVE DTF IS FOUND ** 00742100
CHACTV EQU *+1 ACTIVE DTF SWITCH 00742200
BC CHPNTR,UNCOND BRANCH IF NO ACTIVE DTF'S 00742300
MVI DTFCMP(,DTFREG),NOCOMP SET RETURN ON NO COMPLETIONS CODE 00742400
SPACE 3 00742500
*********************************************************************** 00742600
* RESTORE POINTERS AND EXIT * 00742700
*********************************************************************** 00742800
SPACE 3 00742900
CHPNTR EQU * 00743000
L DTFADR(,LISTRG),DTFREG POINT REGISTER TO DTF 00743100
CHSTOR EQU *+3 RETURN @ PLUGGED HERE 00743200
B # RETURN 00743300
EJECT 00743400
*********************************************************************** 00743500
* EQUATES FOR COMMON CHECK * 00743600
*********************************************************************** 00743700
SPACE 3 00743800
DTFADR EQU 2 DISPLACEMENT TO DTF IN WAIT LIST 00743900
DTFREG EQU 2 DTF POINTER - REGISTER 2 00744000
FLAGS EQU 0 DISPLACEMENT TO FLAGS IN LIST 00744100
LISTRG EQU 1 WAIT LIST POINTER - REGISTER 1 00744200
LSTEND EQU X'20' END OF WAIT LIST INDICATOR 00744300
NEXT EQU 3 DISPLACEMENT TO NEXT LIST ENTRY 00744400
NOBSCA EQU X'00' MASK TO TEST FOR BSCA PRESENCE 00744500
NOMLTA EQU X'00' MASK TO CHECK FOR NO MLTA PRESENT 00744600
NOOPED EQU X'80' NOOP Q-CODE FOR BRANCH 00744700
OPGONE EQU X'08' CODE DESTROYED BIT 00744800
SKIP EQU X'80' SKIP BIT 00744900
UNCOND EQU X'87' UNCONDITIONAL Q-CODE FOR BRANCH 00745000
SPACE 2 00745100
* DTF EQUATES. 00745200
SPACE 00745300
DTFDEV EQU 0 DTF DEVICE TYPE. 00745400
DTFATR EQU 3 DTF ATTRIBUTE BYTE. 00745500
FILEAC EQU X'02' FILE ACTIVE. 00745600
FILOPN EQU X'01' FILE OPENED. 00745700
SPACE 00745800
DTFCMP EQU 14 DTF COMPLETION CODE. 00745900
OPACC EQU X'00' OPERATION ACCEPTED. 00746000
NOCOMP EQU X'56' NO COMPLETED DTF'S. 00746100
INACTV EQU X'57' NO ACTIVE DTF'S. 00746200
TITLE '$E072--CHECK-COMPLETION-CODE' 00750000
CHEND0 EQU * 00755000
SLC CCOECT,CC0001(1) SUBTRACT 1 FROM OP END COUNT 00760000
AIF (&ONE).H4450 00770000
TBF CMSWIT,CMBSCK IS IT MLTA OR BSCA 00780000
CLI $MDCMP(,XR2),$MCSKP CHECK FOR NOTHING COMPLETE 00790000
BC CMOPND,NONE+HI+LO+FALSE BRANCH IF MLTA NOT COMPLETE 00800000
.H4450 ANOP 00810000
AIF (&NOB).C0015 00820000
CLI $BDCMP(,DTF),$BCCMP '56' COMPLETION CODE ? B 00830000
JNE CMNT56 NO-NOT 56, CHECK OTHERS. B 00840000
AIF (&MIN).N0100 00850000
L CCKLST,XR1 POINT TO THE CHECK LIST. B 00860000
CMEXSK EQU * CHECK FOR BSCA SKIP OFF. B 00870000
TBF CKLSTS(,XR1),CKLSKP SKIP BIT OFF, AND B 00880000
L CKLDTF(,XR1),DTF POINT TO THE DTF. B 00890000
AIF (&NOM).C0005 00900000
TBN $BDDEV(,DTF),BSCA * BSCA DTF, AND B 00910000
.C0005 ANOP 00920000
JF CMEXNX NO-GO EXAMINE NEXT ENTRY. B 00930000
.N0100 ANOP 00940000
SLC LCBOPE(1,DTF),CC0001 DECREMENT OP END BY ONE. B 00950000
L LCBPL@(,DTF),PL POINT TO THE PARM LIST. B 00960000
B $CC4TT CALL TRACE TO LOG THISOP END. B 00970000
DC AL1(TTMOPN) TRACE OP END ID. B 00980000
SPACE 1 00990000
AIF (&MIN).N0200 01000000
J CMEXOP GO CHECK FOR MORE OP ENDS. B 01010000
SPACE 1 01020000
CMEXNX EQU * EXAMINE NEXT LIST ENTRY. B 01030000
TBN CKLSTS(,XR1),CKLAST LAST ENTRY IN THE LIST ? B 01040000
LA CKLEN(,XR1),XR1 POINT TO THE NEXT ENTRY. B 01050000
BF CMEXSK NO-GO CHECK THE NEXT B 01060000
.N0200 ANOP 01070000
CMEXOP EQU * * B 01080000
B CMOPND GO CHECK FOR MORE OP ENDS. B 01090000
SPACE 1 01100000
CMNT56 EQU * * B 01110000
AIF (&ONE).C0010 01120000
TBN $BDDEV(,DTF),BSCA BSCA DTF ? 2 01130000
JF CMEXSV NO-GO SAVE DTF @ FROM CHECK. 2 01140000
.C0010 ANOP 01150000
SLC LCBOPE(1,DTF),CC0001 DECREMENT LINE OP END COUNT. B 01160000
CMEXSV EQU * B 01170000
AGO .B0300 01180000
.C0015 ANOP 01190000
SPACE 1 01200000
* XR2 NOW POINTS AT DTF FOR WHICH OP END OCCURRED 01210000
SPACE 01220000
* ANALYZE THE COMPLETION CODE AND ACT ACCORDINGLY 01230000
SPACE 01240000
CLI $MDCMP(,XR2),$MCRET EVENT NOT COMPLETE 01250000
BNL CMOPND GO TO RETEST THE OP END COUNT 01260000
.B0300 ANOP 01270000
SPACE 01280000
* SAVE THE TP LINE DTF ADDRESS 01290000
SPACE 01300000
ST CMSDTF,XR2 SAVE DTF ADDR 01310000
TITLE '$E072/CMSTOP-ABORT-OPERATION-TO-THE-LINE' 01320000
*********************************************************************** 01330000
* DETERMINE IF LCB INDICATION THAT ATTEMPT IS BEING MADE TO STOP THE 01340000
* LINE IS ON 01350000
*********************************************************************** 01360000
SPACE 01370000
CMSTOP EQU * 01380000
AIF (&ONE).C0020 01390000
TBN $BDDEV(,DTF),BSCA BSCA DTF ? 2 01400000
JF CMABRT NO-GO TO CHECK MLTA ABORT. 2 01410000
.C0020 ANOP 01420000
AIF (&NOB).C0025 PRINTER BUSY 01430000
TBF $BDATT(,DTF),$BCOUT OUTPUT SELECTION OPERATION *L 01432000
JF CMEOSO YES, DO NOT SET OFF RVI *L 01434000
SBF LCBOPC(,DTF),LCBRVI SET OFF SEND RVI FLAG *L 01436000
CMEOSO EQU * END PRINTER BUSY *L 01438000
L LCBPL@(,DTF),PL POINT TO THE PARM LIST. B 01440000
&MIX SETA &NCS+&NSWL 01450000
AIF (&MIX EQ '2').S0100 01460000
TBN LCBAT2(,DTF),LCBRCI RECEIVE INITIAL ? B 01470000
JF CMBORT NO-GO CHECK BSCA ABORT. B 01480000
MVI CMB#SB,SBN2 SET FOR POLL SKIP BIT ON. B 01490000
B CMBSKP SKIP TO POLL SKIP BIT RTN. B 01500000
SPACE 1 01510000
CMBORT EQU * * B 01520000
.S0100 ANOP 01530000
TBN LCBAT2(,DTF),LCBABT LINE ABORT IN PROCESS ? B 01540000
JF CMSTPX NO-GO CHECK FOR STOP RECEIVE . B 01550000
SPACE 01560000
* HANDLE THE CONTINUATION OF THE ABORTING OF THE LINE. B 01570000
* TRACE THE OP END COMPLETION CODE. B 01580000
SPACE 01590000
B $CC4TT CALL TRACE. B 01600000
DC AL1(TTMOPN) TRACE OP END STATUS. B 01610000
SPACE 1 01620000
TBN LCBOPC(,DTF),OPPUT ABORT OF A PUT OPERATION ? B 01630000
BT CMWABT YES-GO LET WRITE OP END HANDLE.B 01640000
CLI $BDCMP(,DTF),$BCDNE CCP PURGE COMPLETE ? B 01650000
BE CMPBMP NO-GO BUMP TO NEXT BLOCK. B 01660000
L $BDWKA(,DTF),WKA POINT TO BSCA WORK AREA. B 01670000
SBF BSFLGD(,WKA),FWDABT SET OFF FORWARD ABORT. B 01680000
SLC LCBAT2(2,DTF),LCBAT2(,DTF) CLEAR LCBAT1 AND LCBAT2. B 01690000
B CMRSCH GO TO RESCHEDULE THE LINE. B 01700000
SPACE 01710000
* HANDLE CANCEL OF RECEIVE INITIAL IF ONE HAS BEEN REQUESTED. 01730000
SPACE 01740000
CMSTPX EQU * * B 01750000
TBN LCBAT1(,DTF),LCBCRI STOP INVITE REQUESTED ? B 01760000
JF CMGCMP NO-GO HANDLE THE OP END. B 01770000
AIF (&MIX EQ '2').S0200 01780000
USING CMBSKP,XR1 01790000
LA CMBSKP,XR1 LOAD @ OF POLL SKIP BIT RTN.C/SB 01800000
MVI CMB#SB(,XR1),SBN2 SET OP: SET SKIP BIT ON. C/SB 01810000
.S0200 B $CC4PI CALL PROGRAM REQUEST, TO BRING B 01820000
DC AL1(CC4BQ) * IN $CC4BQ. B 01830000
SPACE 01840000
* $CC4BQ RETURNS CONTROL TO: B 01850000
* NSI, IF LINE IS STOPPED SUCCESSFULLY. B 01860000
* NSI+4, IF STOP FAILED, BUT CONTINUE OP END HANDLING. B 01870000
* NSI+7, IF STOP FAILED, AND ABORT IS REQUIRED. 01880000
SPACE 01890000
B CMRSCH LINE STOPPED, RESCHEDULE WORK. B 01900000
SPACE 01910000
CMGCMP EQU * * B 01920000
J CMCMP NOT STOPPED, HANDLE THE OP END.B 01930000
SPACE 01940000
B CMBSTP NOT STOPPED, ABORT THE LINE. B 01950000
SPACE 01960000
AIF (&ONE).C0025 01970000
CMABRT EQU * * 2 01980000
.C0025 ANOP 01990000
AIF (&NOM).M0050 02000000
TBN LCBATR(,XR2),LCBSTP WAS ABORT TO STOP READ M 02010000
JF CMSWL JUMP IF INDICATOR OFF M 02020000
SPACE 02030000
* BRING IN TRANSIENT TO HANDLE OP END FOR STOP READ REQUEST M 02050000
SPACE 02060000
B $CC4PI BRANCH TO BRING IN TRANSIENT M 02070000
DC AL1(CC4SQ) TRANSIENT ID M 02080000
SPACE 02090000
* CHECK THE LCB SWALLOW BIT M 02100000
* AND THE LCB BIT BUCKET BIT M 02110000
* IF ON - IGNORE THIS OP END M 02120000
SPACE 02130000
CMSWL EQU * CHECK LCB SWALLOW INDICATION M 02140000
SPACE 02150000
* IGNORE THE OP END IS BOTH LCB SWALLOW AND BIT BUCKET BITS ARE ON M 02160000
* NO MATTER WHAT TYPE OF OPERATION WAS SCHEDULED M 02170000
SPACE 02180000
TBN LCBATR(,XR2),LCBSWL+LCBTBK IS OP END TO BE IGNORED M 02190000
JT CMSWLP JUMP IF IGNORE OP END M 02200000
SPACE 02210000
CMSWNT EQU * TEST SWALLOW BIT M 02220000
SPACE 1 02230000
* IF 2741 BIT BUCKET BIT ON OR M 02240000
* IF SWALLOW SET AND THE OP END IS FOR AN INPUT OPERATION M 02250000
* THEN SWALLOW (BIT BUCKET) THE DATA M 02260000
SPACE 02270000
TBF $MDOPC(,XR2),MLWRIT ASSURE IT WAS NOT WRITE OP. M 02280000
JF CMTABT JUMP IF WRITE M 02290000
SPACE 02300000
* HAVE NON-WRITE OP - IF SWALLOW OR BIT BUCKET ON M 02310000
* BIT BUCKET THE DATA THAT CAME IN M 02320000
SPACE 02330000
TBF LCBATR(,XR2),LCBSWL+LCBTBK ISBIT BUCKET OR SWALLOW ON M 02340000
JT CMTABT JUMP IF NEITHER SWALLOW OR BIT M 02350000
* BUCKET SET ON M 02360000
SPACE 02370000
*********************************************************************** 02380000
* BIT BUCKET THE DATA THAT JUST CAME IN 02390000
*********************************************************************** 02400000
SPACE 02410000
CMSWLP SBF LCBATR(,XR2),LCBSWL+LCBTBK RESET LCB IGNORE OP END BITS M 02420000
SPACE 02430000
* HAVE SWALLOW BIT SET - THUS MAY HAVE SKIP BIT OFF WHICH NEEDS TO BE M 02440000
* TURNED ON M 02450000
* BRANCH IN HERE TO TRANSIENT $CC4SK M 02480000
* THIS TRANSIENT WILL SET ALL SKIP BITS ON FOR A POLLING LIST M 02490000
B $CC4PI M 02500000
DC AL1(CC4SK) M 02510000
J CMJTBY M 02520000
SPACE 02540000
* IF OPERATION WAS SUCCESSFUL ABORT - THEN BR TO RESCHEDULE THE LINE M 02550000
SPACE 02560000
CMTABT EQU * TEST FOR ABORT M 02570000
CLI $MDOPC(,XR2),MLABRT WAS OP AN ABORT M 02580000
JNE CMDFSV JUMP IF NOT ABORT M 02590000
SPACE 02600000
* HAD ABORT ATTEMPT - IF RETURN CODE 44 - JUMP TO HANDLE M 02610000
SPACE 02620000
CMLK44 EQU * LOOK FOR 44 RETURN CODE M 02640000
CLI $MDCMP(,XR2),$MCTNR WAS COMP CODE 44 M 02650000
JNE CMDFSV JUMP IF UNSUCCESSFUL ABORT M 02660000
SPACE 02670000
* HAD ABORT ATTEMPT M 02680000
* ABORT WAS SUCCESSFUL SO LINE IS NOW FREE TO SCHEDULE NEXT OP M 02690000
* IF HOLD BUFFER HAS BEEN GETMAINED FOR THIS LINE - FREEMAIN IT NOW M 02700000
SPACE 02710000
CLI LCBIBA-1(,XR2),NOBIT IS HOLD BUFFER POINTER NULL M 02720000
JE CMJPRS JUMP IF NO HOLD BUFFER M 02730000
SPACE 02740000
* HAVE HOLD BUFFER WHICH NEEDS TO BE FREEMAINED M 02750000
SPACE 02760000
L LCBIBA(,XR2),XR2 POINT XR2 AT HOLD BUFFER M 02770000
B CMFMRT BRANCH TO FREEMAIN M 02780000
SPACE 02790000
L CMSDTF,XR2 POINT XR2 BACK AT DTF M 02800000
MVI LCBIBA-1(,XR2),NOBIT SET HOLD BUFFER ADDR NULL M 02810000
SPACE 02820000
* MUST BE SOMETHING IN THE QUEUE BECAUSE ABORT ISSUED TO FREE LINE TO M 02830000
* START ANOTHER REQUEST SO GO TO DETERMINE WHICH REQUEST TO START ANDM 02840000
* START IT M 02850000
SPACE 02860000
CMJPRS B CMRSCH BRANCH TO RESCHEDULE THE LINE M 02870000
SPACE 02880000
* DETERMINE IF OP END WAS FOR ONLINE TEST M 02900000
* CHECK BIT IN LCB WHICH INDICATES IF TEST WAS RUNNING BEFORE OP.END M 02910000
SPACE 02920000
.M0050 ANOP 02930000
CMDFSV EQU * 02940000
AIF (&NOM).M0100 02950000
SBN LCBATR(,XR2),LCBNIT SET INITIAL OP BIT ON M 02960000
TBN LCBATR(,XR2),LCBOLR TEST LCB BIT FOR ONLINE TEST M 02970000
JF CMPARM IF NOT OLT, JUMP TO WORK WITH M 02980000
* PARM LIST M 02990000
SPACE 03000000
* OP END WAS FOR ONLINE TEST REQUEST M 03010000
* FOR WHICH THERE IS NO PARM LIST M 03020000
SPACE 03030000
B $CC4PI BRANCH TO BRING IN TRANSIENT M 03040000
DC AL1(CC4T2) OP END OF ONLINE TEST M 03050000
SPACE 03060000
CMJTBY B CMTSBY BRANCH TO TEST IF LINE IS BUSY M 03070000
TITLE '$E072/CMPARM---LOCATE-OP-ENDED-PARM-LIST' 03080000
************************************************************************03090000
* LOCATE OP ENDED PARAMETER LIST *03100000
************************************************************************03110000
SPACE 03120000
* DETERMINE PARM LIST FOR WHICH OP END OCCURRED M 03130000
* ALSO SET UP FIELD FOR LATER DEQUEING THE PARM LIST M 03140000
* SET PREVIOUS PARM LIST POINTER TO POINT TO ADDR IN DTF OF 1ST PLIST M 03180000
* THIS FIELD WILL BE USED LATER IN DEQUEING THE OP ENDED PARM LIST M 03190000
* XR2 POINTS AT DTF WHICH CONTAINS THE ADDRESS OF THE 1ST PARM LIST INM 03210000
* THE LINE QUEUE M 03220000
SPACE 03230000
CMPARM EQU * GET PARM LIST FOR OPERATION M 03235000
LA LCBPLQ-1(,XR2),XR1 POINT TO ADDR OF 1ST PARM LIST M 03240000
ST CMVPTR,XR1 STORE IN PREVIOUS POINTER FIELDM 03250000
SPACE 03260000
L LCBPLQ(,XR2),XR1 POINT XR1 AT 1ST PARM LIST IN QM 03270000
SPACE 03280000
************************************************************************03290000
* SET UP FOR FINDING OF PARM LIST WHICH OP ENDED 03300000
************************************************************************03310000
SPACE 03320000
* XR1 POINTS AT FIRST PARM LIST IN LINE QUEUE M 03330000
* XR2 POINTS AT MLTA DTF FOR OP ENDED LINE M 03340000
SPACE 03350000
AIF (&NSCTL).S5000 03360000
MVC CMSTMA(2),$MDTMA(,XR2) SAVE THE TERMINAL ADDR OF THE M 03370000
* TERMINAL WHICH OP ENDED M 03380000
SPACE 03390000
.S5000 ANOP 03400000
* SET UP TEST INSTRUCTION FOR EITHER A READ OR WRITE MLTA OP CODE M 03410000
* DEPENDING ON THE OP CODE IN THE DTF WHICH OP ENDED M 03420000
* IF OP IN DTF IS WRITE THEN TEST FOR WRITE OP CODE IN PARM LIST M 03430000
* IF DTF OP CODE IS READ OR ABORT THEN TEST FOR READ OP IN PARM LIST M 03440000
SPACE 03450000
MVI CMTBOP+1,OPGET SET UP TEST INSTRCT. FOR READ M 03460000
SPACE 03470000
AIF (&NSW).A5000 03480000
* FOR SWITCHED LINES ONLY----------------------------------------* 03490000
SPACE 03500000
* WAS OP END FOR WRITE DISCONNECT TO MLTA SWITCHED LINE SM 03510000
SPACE 03520000
CLI $MDOPC(,XR2),$MWTDS WAS OP A WRITE DISCONNECT SM 03530000
JNE CMTSWR JUMP IF OP WAS NOT WRITE DISCOSM 03540000
SPACE 03550000
* HAD OP END OF WRITE DISC. SO SET LCBNIT TO INDICATE LINE DISCONT SM 03560000
SPACE 03570000
SBF LCBATR(,XR2),LCBNIT INDICATE LINE IS DISCONNECTED SM 03580000
J CMOPUT JUMP TO LOOK FOR WRITE OP END SM 03590000
SPACE 03600000
* END OF FOR SWITCHED LINES ONLY -------------------------------* 03610000
.A5000 ANOP 03620000
SPACE 03630000
CMTSWR EQU * TEST FOR WRITE OPERATION M 03640000
TBN $MDOPC(,XR2),MLWRIT WAS OP END FOR A WRITE M 03650000
JF CMMVSC JUMP IF NOT WRITE OP END M 03660000
CMOPUT EQU * OP END WAS FOR PUT PARM LIST M 03670000
MVI CMTBOP+1,OPPUT SET UP TEST FOR OP END OF WRITEM 03680000
SPACE 03690000
* GET THE TERMINAL FEATURE TYPES BYTE FROM MLTA DTF FOR TESTING M 03700000
SPACE 03710000
CMMVSC EQU * FIND PARM LIST M 03720000
AIF (&NSCTL).S5200 03730000
MVC MLSTCL(1),$MDTFT(,XR2) MOVE TERMINAL FEATURES TO HOLDCM 03740000
.S5200 ANOP 03750000
SPACE 03760000
*********************************************************************** 03770000
* LOOK THROUGH PARAMETER LIST LINE QUEUE FOR THE OP ENDED TP REQUEST * 03780000
*********************************************************************** 03790000
SPACE 03800000
CMTBOP TBN PL$OPM(,XR1),# TEST FOR OP CODE MATCH 03810000
AIF (&NSCTL).S5100 CM 03820000
JF CMNXPM JUMP IF NO MATCH CM 03830000
SPACE 03840000
* HAD OP CODE MATCH CM 03850000
* DETERMINE IF STATION CONTROL TERMINAL OR NOT CM 03860000
* IF NOT STATION CONTROL - WE HAVE THE PARM LIST CM 03870000
* IF STATION CONTROL - WE NEED TO MATCH THE TERMINAL ADDRESS ALSO CM 03880000
SPACE 03890000
TBN MLSTCL,MLSTAT IS IT STATION CONTROL CM 03900000
JF CMMTCH JUMP IF NOT SINCE HAVE PL CM 03910000
SPACE 03920000
* IT IS STATION CONTROL SO MUST MATCH TERMINAL ADDRESS CM 03930000
* MUST SEARCH THE TUBS FOR THE ASSOCIATED PARAMETER LISTS UNTIL CM 03940000
* FIND ONE WHOSE TERMINAL ADDRESS MATCHES THAT OF THE TERMINAL ADDR.CM 03950000
* IN THE DTF FOR THE TERMINAL WHICH JUST OP ENDED CM 03960000
SPACE 03970000
L PLTUBA(,XR1),XR2 POINT XR2 AT TUB FOR THIS PL CM 03990000
CLC CMSTMA-1(1),TUBTMA-1(,XR2) COMPARE DTF TMA WITH TUB TMA CM 04000000
JE CMMTCH JUMP IF THEY MATCH CM 04010000
AGO .S5150 04020000
.S5100 ANOP 04030000
JT CMMTCH JUMP IF HAVE PARM LIST 04040000
.S5150 ANOP 04050000
SPACE 04060000
* NO MATCH SO GET NEXT PARAMETER LIST IN QUEUE TO TEST AGAIN 04070000
* IF NO MORE LISTS IN QUEUE - HAVE ERROR CONDITION 04080000
SPACE 04090000
CMNXPM CLI PLCHN-1(,XR1),CMZERO ARE THERE MORE PARM LISTS IN 04100000
* THE LINE QUEUE 04110000
JE CMQERR IF NO,HAVE CCP INTERNAL LINE 04120000
* QUEUEING ERROR 04130000
SPACE 04140000
ST CMVPTR,XR1 STORE NEW PREVIOUS POINTER 04150000
L PLCHN(,XR1),XR1 POINT XR1 AT NEXT PARM LIST IN Q 04160000
B CMTBOP BRANCH TO TRY TO MATCH AGAIN 04170000
SPACE 04180000
CMQERR EQU * CCP LINE QUEUEING ERROR 04190000
*---------------------------------------------------------------------* 04200000
B CPHALT BRANCH TO HALT ROUTINE. 04220000
DC AL1(#4) SUBHALT. 04230000
DC AL1(#BLITZ) SUBHALT. 04240000
*---------------------------------------------------------------------* 04250000
SPACE 04260000
* HAVE FOUND THE PARM LIST WHICH OP ENDED. 04270000
* FOR STATION CONTROL LINE 04290000
* COME HERE WHEN HAVE MATCHED THE TERMINAL ADDRESS AND THUS HAVE FOUND 04300000
* THE PARM LIST WHICH HAS OP ENDED. 04310000
* XR1 POINTS AT THE OP ENDED PARM LIST 04330000
SPACE 04340000
CMMTCH EQU * HAVE MATCH ON TERMINAL ADDRESS 04350000
SPACE 04360000
L CMSDTF,XR2 POINT XR2 AT DTF 04380000
AIF (&NOM).M3566 04390000
MVC CMSRTC(1),PL$RTC(,XR1) SAVE RETURN CODE FROM THE 04400000
* START OF THE OPERATION 04410000
.M3566 ANOP 04420000
MVC PL$RTC(1,XR1),$MDCMP(,XR2) MOVE COMPLETION CODE TO PARM LST04430000
SPACE 04440000
AIF (&NSCTL).S5300 04450000
TBN PL$OPM(,XR1),OPGET WAS OP END FOR A READ CM 04460000
JF CMCMP JUMP IF NOT READ CM 04470000
SPACE 04480000
* HAD OP FOR A READ SO JUMP TO SET SKIP BIT ON CM 04490000
* SKIP BIT ROUTINE WILL CHECK FOR STATION CONTROL OR NOT CM 04500000
SPACE 04510000
B CMONSK BR TO SET POLL SKIP BIT ON CM 04520000
.S5300 ANOP 04530000
.M0100 ANOP 04540000
TITLE '$E072/CMCMP---COMPLETION-CODE-ANALYSIS' 04550000
************************************************************************04560000
* COMPLETION CODE ANALYSIS *04570000
************************************************************************04580000
SPACE 04590000
* XR2 POINTS AT DTF 04600000
SPACE 04610000
CMCMP EQU * COMPLETION CODE ANALYSIS 04620000
SPACE 04630000
* TAKE A TRACE ENTRY NOW 04640000
SPACE 04650000
B $CC4TT BRANCH TO TRACE ROUTINE 04660000
DC AL1(TTMOPN) TRACE ID FOR MLTA OP END 04670000
SPACE 04680000
AIF (&ONE).C0040 04690000
TBN $BDDEV(,DTF),BSCA BSCA DTF ? 2 04700000
JF CMSVPL NO-GO LOAD AND SAVE PARM ADDR. 2 04710000
.C0040 ANOP 04720000
AIF (&NOB).C0050 04730000
ST CMSPL,PL SAVE THE PARM LIST REG. B 04740000
CLI $BDCMP(,DTF),$BCDNE SUCCESSFUL DATA ? B 04750000
JE CMSCCS YES-GO HANDLE IT. B 04760000
CLI $BDCMP(,DTF),$BCEOT EOT RECEIVED, AND B 04770000
TBF LCBAT2(,DTF),LCBRCI * NOT RECEIVE INITIAL ? B 04780000
JC CMSCCS,TRUAEQ YES-GO HANDLE THE EOT. B 04790000
SPACE 1 04790900
* IF SEARCHING FOR EOT FROM ERROR CONDITION,AND ANOTHER ERROR 04791800
* IS ENCOUNTERED-TREAT THE SECOND ERROR AS EOT RECEIVED NORMALLY 04792700
SPACE 1 04793600
TBN LCBOPC(,DTF),LCBERP ERP IN PROCESS - B 04794500
TBN LCBAT1(,DTF),LCBEOT AND SEARCHING FOR EOT ? B 04795400
JF CMNEOT NO-CONTINUE CHECKS B 04796300
MVI $BDCMP(,DTF),$BCEOT YES-MAKE IT *EOT RECEIVED* B 04797200
J CMREND GO HANDLE EOT B 04798100
CMNEOT EQU * * 04799000
JNE CMBERR NOT EOT-GO TO ERP TRANSIENT. B 04800000
TBF LCBAT1(,DTF),LCBCRI+LCBPRI EOT TO CANCEL REQUEST ? B 04810000
JF CMSCCS YES-EOT IS OK THEN. B 04820000
SPACE 1 04830000
* EOT TO RECEIVE INITIAL IS INVALID. B 04840000
SPACE 1 04850000
CMBERR EQU * * B 04860000
SPACE 04870000
* HAVE BSCA ERROR, CALL IN BSCA ERROR RECOVERY. 04880000
SPACE 04890000
AIF (&BPRT).BP100 PRINTER BUSY CODE *L04890500
AGO .BP200 *L04891000
.BP100 ANOP *L04891500
CLI $BDCMP(,DTF),$BCNEG 44 COMPLETION *L04892000
TBN $BDATT(,DTF),$BCINP AND POLLING? @L 04892500
JC CMBER1,FLSNEQ NO-HANDLE ERROR *L04893000
SPACE 1 *L04893500
B $CC4PI YES-CALL CC4BG TO HANDLE *L04894000
DC AL1(CC4BG) ANY BUSY PRINTERS ON THE QUEUE?*L04894500
B CMRSCH THEN GO RESCHEDULE THE LINE *L04895000
.BP200 ANOP *L04895500
CMBER1 EQU * *L04896000
AIF (&BPRT).BP300 *L04896500
AGO .BP400 *L04897000
.BP300 ANOP *L04897500
L PLTUBA(,PL),XR1 POINT TO THE TUB. *L04898000
SBF TUBAT4(,XR1),TUBBSY SET OFF THE BUSY BIT. *L04898500
L CMSPL,PL RELOAD THE PARM LIST REG. *L04899000
.BP400 ANOP END PRINTER BUSY CODE *L04899500
B $CC4PI GO TO CALL IN THE B 04900000
DC AL1(CC4BE) ERROR DETERMINATION TRANSIENT. B 04910000
SPACE 04920000
B CMRETC SET UP TO RETURN TO USER. B 04930000
SPACE 04940000
B CMRSCH GO RESCHEDULE WORK ON THE LINE.B 04950000
SPACE 04960000
J CMSCCS DATA AVAILABLE FOR USER. B 04970000
SPACE 1 04980000
.C0050 ANOP 04990000
AIF (&NOM).M0200 05000000
* SAVE THE ADDRESS OF THE PARM LIST M 05010000
SPACE 05020000
CMSVPL EQU * 05030000
ST CMSPL,XR1 SAVE PARM LIST ADDR M 05040000
SPACE 05050000
* AT THIS POINT XR1 PTS AT PARM LIST AND XR2 AT DTF M 05060000
SPACE 05070000
CMCKER EQU * CHECK FOR ERROR 05080000
SBF PL$RTC(,XR1),BIT1 SET BIT OFF TO FORM RETURN CODEM 05090000
SPACE 05100000
* DETEMINE IF NON-ERROR COMPLETION CODE (X'40' OR X'42') M 05110000
SPACE 05120000
TBF PL$RTC(,XR1),MLSCCS TEST FOR SUCCESSFUL OP END M 05130000
JT CMSCCS JUMP IF SUCCESSFUL M 05140000
AIF (&N2741).B5000 05150000
* FOR 2741 ONLY ------------------------------------------------------* 05170000
* IF TERMINAL INTERRUPT FROM 2741 - HANDLE AS GOOD OP END 1M 05190000
SPACE 05200000
CLI $MDTTP(,XR2),ML2741 IS IT 2741 1M 05210000
JNE CMMERR JUMP IF NOT 2741 1M 05220000
CLI PL$RTC(,XR1),MLCITP WAS IT TERMINAL INTERRPUT 1M 05240000
TBN PL$OPM(,XR1),OPPUT WAS IT OUTPUT OPERATION 1M 05250000
JC CMSCC1,NONE+FALSE+HI+LO JUMP IF 2741 TERMINAL INTERR. 1M 05260000
*---------------------------------------------------------------------* 05280000
.B5000 ANOP 05290000
EJECT 05300000
*********************************************************************** 05310000
* HAD TP ERROR - CALL TRANSIENT TO HANDLE 05320000
*********************************************************************** 05330000
SPACE 05340000
CMMERR EQU * HAD MLTA ERROR 05350000
B $CC4PI BR TO BRING IN TRANSIENT M 05360000
DC AL1(CC4MA) MLTA ERROR HANDLER M 05370000
B CMRETC BR TO FINISH OP END HANDLING M 05380000
B CMTSBY BRANCH TO TEST LINE STATUS AND M 05390000
* RESCHEDULE IF NOT BUSY M 05400000
.* THE FOLLOWING TWO BRANCHES ARE GENERATED ONLY FOR SYSTEMS WITH 2740B 05410000
AIF (&NBFR).R5500 05420000
B CMSCCS BRANCH TO HANDLE AS IF SUCCESSRM 05430000
B CMPAII BRANCH AROUND RESCHEDULING RM 05440000
.R5500 ANOP 05450000
.M0200 ANOP 05460000
EJECT 05470000
*********************************************************************** 05480000
* SUCCESSFUL OP END ANALYSIS * 05490000
*********************************************************************** 05500000
SPACE 05510000
* OP COMPLETED SUCCESSFULLY 05520000
* DETEMINE WHAT KIND OF OPERATION IT WAS AND HANDLE IT ACCORDINLY 05530000
SPACE 05540000
CMSCCS EQU * SUCCESSFUL COMPLETION CODE 05550000
AIF (&NOM).M3567 05560000
SPACE 05570000
* AT THIS POINT SET ANY BITS ON IN THE RETURN CODE FROM THE RETURN M 05580000
* CODE SAVED AS PART OF THE START OF THE OPERATION M 05590000
SPACE 05600000
CMRSTC SBN PL$RTC(,XR1),## RESET RETURN CODE FROM OP. M 05610000
CMSRTC EQU CMRSTC+1 Q BYTE OF SBN INSTRUCTION M 05620000
* START M 05630000
SPACE 05640000
CMSCC1 EQU * GOOD OP END BUT AT THIS LABEL M 05650000
* THE RETURN CODE IS NOT RESET M 05660000
SPACE 05670000
.M3567 ANOP 05680000
* DETERMINE WHAT KIND OF OP COMPLETED BY CHECKING THE OP CODE 05690000
* RESIDING IN THE PARAMETER LIST 05700000
SPACE 05710000
AIF (&NOB).C0200 05720000
ST CMTXR+3,XR1 SAVE XR1 B 05722000
LA $CCCOM,XR1 LOAD CCCOM ADDRESS B 05724000
SBN #TIMEX(,XR1),TXOPND IND. OP END IF TIMER PRESENT B 05726000
CMTXR LA ####,XR1 RESTORE XR1 B 05728000
AIF (&ONE).C0100 05730000
TBN $BDDEV(,DTF),BSCA BSCA DTF ? B 05740000
TBN LCBOPC(,DTF),LCBERP BSCA TERM ERP IN PROCESS ? B 05750000
JT CMREND YES-THEN MUST BE FINISHING GET.B 05760000
AGO .C0200 05770000
.C0100 TBF LCBOPC(,DTF),LCBERP AND NOT TERM ERP FINISHING ? B 05780000
.C0200 ANOP 05790000
TBN PL$OPM(,XR1),OPPUT WAS IT WRITE 05800000
BT CMWEND BRANCH IF WRITE 05810000
SPACE 05820000
* NOT WRITE OP END - SO MUST BE READ 05830000
MEND 05840000