IDENT 1HP,FHP 1HP TITLE 1HP - 885-42 DRIVER. PERIPH BASE MIXED SST *COMMENT 1HP - 885-42 DRIVER. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. 1HP SPACE 4,10 *** 1HP - 885-42 DRIVER. * * P. T. BARNETT. 83/09/04. * R. M. DANISCH. 85/12/23. 1HP SPACE 4,10 *** 1HP PROVIDES THE CAPABILITY TO ACCESS THE 885-42 DRIVE * THROUGH THE 7155-401 (FA211-C) CONTROLLER. 1HP IS A * DEDICATED PROGRAM THAT IS INITIATED AT DEADSTART AND REMAINS * ACTIVE AS LONG AS ITS CHANNEL IS UP AND FUNCTIONAL. 1HP USES * THE *BIOM* MONITOR FUNCTION TO COMMUNICATE WITH *CPUMTR*. 1HP SPACE 4,10 *** CALL FORMAT - * *T,IR 18/*1HP*, 1/0, 5/CP, 6/CCTO, 18/0, 12/CH * * CP CONTROL POINT NUMBER (MUST BE SYSTEM CP). * * CCTO CCT ORDINAL. * CH CHANNEL NUMBER. 1HP SPACE 4,35 *** ORGANIZATION OF 885-42. * * UP TO THREE 885-42 UNITS CAN BE COMBINED TO FORM * A LOGICAL DEVICE. * * EQUIPMENT TYPE = *DB*. * * SECTORS/TRACK = 640 LOGICAL / 160 PHYSICAL. * (4 LOGICAL SECTORS FORM 1 PHYSICAL SECTOR) * * CM WORDS/PHYSICAL SECTOR = 400B. * * LOGICAL SECTORS/PHYSICAL SECTOR = 4. * * LOGICAL SECTORS/LOGICAL TRACK = 1200B (640D). * * LOGICAL SECTORS/BUFFER = 40B. * * TRACKS/UNIT = 3222B (1682D). * * WORDS/UNIT = 68,894,720. * * UNITS/DEVICE = 1-3. * * WORDS/DEVICE = 68,894,720 - 206,684,160. * * MAXIMUM DATA RATE = 491.52 K WORDS/SECOND. 1HP SPACE 4,20 ** MESSAGES. * * * EQXXX CC ERROR RETRY UNDERWAY.* * ISSUED TO THE SYSTEM CONTROL POINT FOR PRESENTATION ON THE * B-DISPLAY TO ALERT THE OPERATOR THAT ERROR RECOVERY IS BEING * PERFORMED ON THE DEVICE WHOSE EST ORDINAL IS XXX. THE TWO * CHARACTER MNEMONIC CC DESCRIBES THE ERROR TYPE. * * * 1HP - UNAUTHORIZED CALL.* * ISSUED TO THE SYSTEM DAYFILE IF 1HP WAS NOT CALLED FROM * THE SYSTEM. 1HP SPACE 4,65 ** IMPLEMENTATION NOTES. * * THE 7155-401 CONTROLLER IS CONNECTED TO ESM THROUGH A LOW * SPEED PORT, AND THE DATA TRANSFER IS DONE THROUGH THAT * CONNECTION. THEREFORE, UPON ISSUING A READ OR WRITE * FUNCTION, A 2-BYTE ESM ADDRESS IS SENT TO THE CONTROLLER * THROUGH THE CHANNEL, AND THEN THE CHANNEL IS DISCONNECTED. * *1HP* IS THEN FREE TO DO AS IT PLEASES WHILE THE CONTROLLER * READS/WRITES THE DATA FROM/TO ESM. SOMETIME BEFORE ISSUING * THE NEXT READ/WRITE FUNCTION *1HP* WILL ISSUE A GENERAL * STATUS FUNCTION. THE CONTROLLER WILL PROVIDE STATUS ONLY * AFTER COMPLETION OF THE DATA TRANSFER. * * IN ORDER TO MAXIMIZE THE TRANSFER RATE, *1HP* WILL SCAN THE * UNIT QUEUE WHILE WAITING FOR I/O COMPLETION TO SEE IF THE * CURRENT TRANSFER CAN BE CONTINUED. IF THE 10B SECTORS * IMMEDIATELY FOLLOWING THE CURRENT 10B SECTORS ARE TO * BE USED IN THE SAME TRANSFER DIRECTION, *1HP* WILL CONTINUE * THE OPERATION, WITHOUT LOSING A DISK REVOLUTION. * DURING THE SUCCEEDING TRANSFER, *1HP* WILL ATTEMPT TO NOTIFY * *CPUMTR* OF COMPLETION ON THE PREVIOUS BUFFER. 1HP SPACE 4,10 * COMMON DECKS. *CALL COMPMAC RICHI$ EQU 1 SELECT DEFERRED INSTRUCTION REDEFINITION *CALL COMPCHI *CALL COMSCPS *CALL COMSDFS LIST X *CALL COMSHIO LIST * *CALL COMSLSD *CALL COMSMSC LIST X *CALL COMSMSP LIST * *CALL COMSPIM *CALL COMS1DS TITLE CONSTANTS, DEFINITIONS, AND MACROS. 1HP SPACE 4,10 ** DIRECT CELL ASSIGNMENTS. RS EQU 16 ERROR RECOVERY STATUS ER EQU 17 ERROR RECOVERY IN PROGRESS CC EQU 20 COMPLETION REQUEST COUNT S1 EQU 21 SCRATCH EC EQU 22 ERROR CODE RW EQU 23 READ/WRITE FLAG IL EQU 24 *PUT* INTERLOCK FLAG SR EQU 25 - 31 SCRATCH WB EQU SR - SR+4 FOR *COMPIMB* COMPATIBILITY PI EQU 32 *PADN* WORD INDEX CN EQU 33 - 37 SCRATCH (5 CELLS) CD EQU 40 - 45 CURRENT DATA (6 CELLS) CS EQU 46 CHANNEL STATUS NB EQU 47 NEXT BUFFER ORDINAL PB EQU 50 PREVIOUS BUFFER ORDINAL CB EQU 51 CURRENT BUFFER ORDINAL TB EQU 52 TOTAL CBT COUNT GS EQU 53 GENERAL STATUS * EQU 54 CHANNEL NUMBER (FROM INPUT REGISTER) TI EQU 57 *TPOR* INDEX CA EQU 60 - 64 CURRENT PHYSICAL ADDRESS (5 CELLS) RC EQU 65 RETRY COUNT PO EQU 66 *PUT* ORDINAL S2 EQU 67 SCRATCH 1HP SPACE 4,10 ** DRIVER FUNCTION CODES. FCSK EQU 1 SEEK 1 TO 1 INTERLACE FCRD EQU 4 READ FCWR EQU 5 WRITE FCOC EQU 10 OPERATION COMPLETE FCCO EQU 14 CONTINUE FCDS EQU 23 DETAILED STATUS FCES EQU 66 EXTENDED GENERAL STATUS FCAL EQU 414 AUTOLOAD 1HP SPACE 4,10 ** STATUS AND CONTROL REGISTER FUNCTION CODE(S). FCTC EQU 3000 TEST AND CLEAR *SCR* BIT 1HP SPACE 4,10 ** ASSEMBLY CONSTANTS. BFRL EQU 10 *EMB* FLUSH RETRY COUNT CH EQU 0 MASS STORAGE CHANNEL EMAI EQU 400 EXTENDED MEMORY ADDRESS INCREMENT FCESL EQU 5 LENGTH OF EXTENDED GENERAL STATUS FCRDL EQU 2 NUMBER OF PARAMETER BYTES FOR READ FCSKL EQU 4 NUMBER OF PARAMETER BYTES FOR SEEK FCWRL EQU 6 NUMBER OF PARAMETER BYTES FOR WRITE MAXU EQU 16D MAXIMUM NUMBER OF UNITS PER CHANNEL PCRL EQU 10 PP CALL RETRY LIMIT MFRL EQU 10 MONITOR FUNCTION RETRY LIMIT PPSLB EQU 10 PHYSICAL SECTORS PER BUFFER PSPT EQU 40 PHYSICAL SECTORS PER PHYSICAL TRACK SOSF EQU 100 SEEK OPTION SELECT FLAGS TPORE EQU 1 LENGTH OF *TPOR* ENTRY SPACE 4,10 ** MACROS. TBLM SPACE 4,10 ** TBLM - CREATE TABLE ENTRY MACRO. * *NAM TBLM * * ENTRY NAM = TABLE NAME. * * EXIT NAM_E MACRO DEFINED. PURGMAC TBLM MACRO TBLM,NAM PURGMAC NAM_E NAM_E MACRO ADDR LOCAL A MACREF NAM_E NOREF A A EQU ADDR T_NAM RMT CON A RMT TBLM ENDM CBTE SPACE 4,10 ** CBTE - CONTROL BUFFER TABLE ENTRY. * * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCBT* * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH * REQUIRES THE FWA OF THE CONTROL BUFFER TABLE. * * CBTE ADDR * * ENTRY (ADDR) = ADDRESS OF INSTRUCTION. * * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TCBT*. CBT TBLM CCBA SPACE 4,15 ** CCBA - COMPUTE *CBT* ENTRY ADDRESS. * * THIS MACRO SETS (A) TO THE REQUESTED *CBT* ENTRY ADDRESS. * * CCBA W,A * * W - OPTIONAL WORD OFFSET TO BE ADDED TO ADDRESS. * A - IF NON-BLANK, BUFFER ORDINAL IS IN ACCUMULATOR. * * ENTRY (A) = BUFFER ORDINAL IF *A* PARAMETER IS NON-BLANK. * (CB) = CURRENT BUFFER ORDINAL. * * EXIT (A) = *CBT* ENTRY ADDRESS + WORD OFFSET. PURGMAC CCBA CCBA MACRO W,A MACREF CCBA IFC EQ,$A$$,1 LDD CB SHN CBTLS CBTE * ADC W CCBA ENDM PUTE SPACE 4,10 ** PUTE - PHYSICAL UNIT TABLE ENTRY. * * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TPUT* * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH * REQUIRES THE FWA OF THE PHYSICAL UNIT TABLE. * * PUTE ADDR * * ENTRY (ADDR) = ADDRESS OF INSTRUCTION. * * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TPUT*. PUT TBLM CPTA SPACE 4,10 ** CPTA - COMPUTE *PUT* ENTRY ADDRESS. * * THIS MACRO SETS (A) TO THE REQUESTED *PUT* ENTRY ADDRESS. * * CPTA W,A * * W - OPTIONAL WORD OFFSET TO BE ADDED TO ADDRESS. * A - IF NON-BLANK, *PUT* ORDINAL IS IN ACCUMULATOR. * * ENTRY (A) = *PUT* ORDINAL IF *A* PARAMETER IS NON-BLANK. * (PO) = *PUT* ORDINAL. * * EXIT (A) = *PUT* ENTRY ADDRESS + WORD OFFSET. PURGMAC CPTA CPTA MACRO W,A MACREF CPTA IFC EQ,$A$$,1 LDD PO SHN PUTLS PUTE * ADC W CPTA ENDM EMBE SPACE 4,10 ** EMBE - ERROR MESSAGE TABLE ENTRY. * * THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TEMB* * THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH * REQUIRES THE FWA OF THE ERROR MESSAGE TABLE. * * EMBE ADDR * * ENTRY (ADDR) = ADDRESS OF INSTRUCTION. * * EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TEMB*. EMB TBLM MONITOR SPACE 4,15 ** MONITOR - ISSUE MONITOR FUNCTION. * * THIS MACRO PROVIDES FUNCTIONALITY IDENTICAL TO THAT OF THE * *MONITOR* MACRO DEFINED IN *COMPMAC*, WHILE ENSURING ANY * PENDING *BIOM* MONITOR FUNCTION IS COMPLETED BEFORE THE NEXT * MONITOR FUNCTION IS ISSUED. * * MONITOR F * * F - MONITOR FUNCTION CODE. * * EXIT (A) = 0. * (CM - CM+4) = COMPLETED PP OUTPUT REGISTER IMAGE. * * CALLS IMF. PURGMAC MONITOR MONITOR MACRO F MACREF MONITOR LDK F RJM IMF MONITOR ENDM 1HP SPACE 4 TITLE MAIN PROGRAM. FHP SPACE 4,10 ** FHP - 885-42 DRIVER. ORG PPFW FHP RJM PRS PRESET MST SPACE 4,10 ** MST - MAIN PROGRAM. MST RJM CCR CHECK FOR CHANNEL REQUESTED/DOWN MJN MST1 IF CHANNEL GLOBALLY DOWN RJM SUQ SCAN UNIT QUEUE ZJN MST IF NO ELIGIBLE ENTRY FOUND RJM ISF ISSUE SEEK FUNCTION NJN MST IF UNIT NOT ON CYLINDER RJM PDT PERFORM DATA TRANSFER UJN MST LOOP MST1 RJM DCH RELEASE CHANNEL MONITOR DPPM DROP PP LJM PPR ENTER IDLE LOOP TPOR SPACE 4,10 ** TPOR - TABLE OF *PUT* ORDINALS. * * THIS TABLE CONTAINS THE ORDINALS OF THE *PUT* ENTRIES FOR ALL * UNITS ACCESSED BY THIS DRIVER-S CHANNEL. * * ENTRY = 1 WORD. * *T 5/ 0, 1/ I, 6/ *PUT* ORDINAL * I EST CHANNEL BYTE INDEX. * * TABLE IS TERMINATED BY A ZERO BYTE. TPOR BSSZ TPORE*MAXU CON 0 TERMINATE *TPOR* TABLE TITLE SUBROUTINES. CCP SPACE 4,10 ** CCP - CHECK FOR CHANNEL PARITY ERROR. * * EXIT (A) .EQ. 0 IF NO CHANNEL PARITY ERROR. * .LT. 0 = COMPLEMENT OF *CHPE* ERROR CODE IF * CHANNEL PARITY ERROR. CCP1 LDN 0 CCP SUBR ENTRY/EXIT LDC FCTC+30 TEST AND CLEAR SCR BIT CCPA EQU *-1 (BIT NUMBER) FJM CCP1,CHSC IF MAINTENANCE CHANNEL IN USE CCPB EQU *-2 OAN CHSC ISSUE REQUEST CCPC EQU *-1 IAN CHSC INPUT RESULT CCPD EQU *-1 ZJN CCPX IF NO CHANNEL PARITY ERROR LCN CHPE UJN CCPX RETURN 1HP SPACE 4 RICHI REDEFINE CHANNEL INSTRUCTIONS CCR SPACE 4,20 ** CCR - CHECK FOR CHANNEL REQUESTED OR DOWN. * * THIS ROUTINE CHECKS TO SEE IF THE CHANNEL TO WHICH THIS PP IS * DEDICATED IS BEING REQUESTED BY ANOTHER PP OR IS GLOBALLY * DOWN. IF THE CHANNEL IS REQUESTED BY ANOTHER PP, IT WILL BE * RELEASED AND WILL BE REQUESTED AGAIN FOLLOWING A ONE SECOND * DELAY. IF THE CHANNEL IS GLOBALLY DOWN, THE DRIVER DROP FLAG * WILL BE SET IN THE CONTROLWARE TABLE AND THE CHANNEL WILL BE * RELEASED. * * EXIT (A) .LT. 0 IF CHANNEL IS GLOBALLY DOWN. * * USES CM - CM+4. * * CALLS DCH, RCH, SCD. * * MACROS DELAY. CCR2 RJM SCD SET DRIVER DROP FLAG LCN 0 SET DROPOUT REPLY CCR SUBR ENTRY/EXIT LDC ** READ CHANNEL TABLE CCRA EQU *-1 (CM ADDRESS OF ENTRY) CRD CM LDD CM+** CHECK REQUESTED FLAG CCRB EQU *-1 (BYTE ADDRESS OF ENTRY) SHN 21-5 MJN CCR2 IF CHANNEL IS GLOBALLY DOWN SHN 22+5-13 PJN CCRX IF CHANNEL NOT REQUESTED RJM DCH RELEASE CHANNEL CCR1 DELAY RJM RCH REQUEST CHANNEL ZJN CCR1 IF CHANNEL NOT ASSIGNED UJN CCRX RETURN CCS SPACE 4,15 ** CCS - CHECK CONSECUTIVE SECTORS. * * THIS ROUTINE CHECKS THE NEXT BUFFER IN THE I/O QUEUE TO * DETERMINE IF IT IS CONSECUTIVE WITH THE REQUEST CURRENTLY * BEING PROCESSED. * * ENTRY (CB) = CURRENT BUFFER ORDINAL. * (NB) = NEXT BUFFER ORDINAL IF CONSECUTIVE REQUEST * ALREADY FOUND. * (TB) = TOTAL BUFFER COUNT. * * EXIT (NB) = NEXT BUFFER ORDINAL. * = 0 IF CONSECUTIVE TRANSFER NOT POSSIBLE. * (TB) = TOTAL BUFFER COUNT. * * USES NB, TB, CM - CM+4, CN - CN+4, T0 - T4. * * MACROS CCBA. CCS3 LDN 0 INDICATE NO CONSECUTIVE REQUEST STD NB CCS SUBR ENTRY/EXIT LDD NB NJN CCSX IF NEXT REQUEST ALREADY FOUND CCBA PAD4 READ CURRENT *CBT* ENTRY CRD CM ADK IOLK-PAD4 CRD CN LDD CN+2 NEXT BUFFER ORDINAL ZJN CCSX IF NO BUFFER STD NB STORE BUFFER ORDINAL OF NEXT REQUEST CCBA PAD1,A GET DISK ADDRESS FOR THIS BUFFER CRD CN ADK IOLK-PAD1 GET WRITE FLAG CRD T0 LDD T0 SHN 0-11 LPN 1 LMD RW NJN CCS3 IF TRANSFER NOT IN SAME DIRECTION LDD CM+1 LMD CN+1 CCS1 NJN CCS3 IF NO CYLINDER MATCH LDD CM+2 ADN 2 LMD CN+2 ZJN CCS2 IF CONSECTUTIVE SECTOR ON SAME TRACK LDD CM+2 ADD HN SCN 77 LMD CN+2 NJN CCS1 IF NOT FIRST SECTOR ON CONSECUTIVE TRACK LDD CM+2 LPN 77 SBN PSPT-2 NJN CCS1 IF NOT CONSECUTIVE REQUEST CCS2 AOD TB INCREMENT TOTAL BUFFER COUNT LJM CCSX RETURN CDS SPACE 4,25 ** CDS - CRACK DETAILED STATUS. * * THIS ROUTINE DETERMINES WHAT ERROR CODE TO SET BY EXAMINING * DETAILED STATUS. IT WILL ALSO ATTEMPT TO RECOVER BY ISSUING * A *CONTINUE* FUNCTION IF GENERAL STATUS INDICATES THE ERROR * IS RECOVERABLE BY THE CONTROLLER. * * ENTRY (EC) = ERROR CODE. * (GS) = GENERAL STATUS. * (RW) = READ/WRITE FLAG. * (T7) = SECTOR COUNT. * * EXIT (A) .EQ. 0 IF ERROR WAS RECOVERED BY CONTROLLER. * .LT. 0 IF A FUNCTION TIMEOUT, CHANNEL PARITY * ERROR, OR DATA TRANSFER ERROR OCCURRED * WHILE TRYING TO OBTAIN STATUS. * .GT. 0 OTHERWISE. * (EC) = ERROR CODE. * * USES CB, EC, PB, RS. * * CALLS GDS, GGS, PCH. CDS SUBR ENTRY/EXIT CDS1 RJM GDS GET DETAILED STATUS MJN CDSX IF ERROR LDD GS SHN 21-13 PJP CDS6 IF NOT ABNORMAL TERMINATION SHN 13-10 PJN CDS3 IF ERROR NOT RECOVERABLE BY CONTROLLER * ATTEMPT CONTROLLER RECOVERY. LDK FCCO ISSUE *CONTINUE* FUNCTION RJM PCH MJN CDSX IF TIMEOUT/DATA TRANSFER ERROR RJM GGS GET GENERAL STATUS MJN CDSX IF STATUS NOT OBTAINED NJN CDS1 IF NOT YET RECOVERED LCN 1 INDICATE CONTROLLER RECOVERY STD RS LDN 0 UJN CDSX RETURN * CHECK FOR *NOT READY* CONDITION. CDS3 SHN 10-4 PJN CDS4 IF NOT *NOT READY* LDM DST+7 LPN 1 NJN CDS4 IF NOT *NOT READY* LDM DST+10 SHN 0-7 LPN 1 ZJP CDS8 IF DRIVE *NOT READY* * DURING SPINUP, THE STATUS OF THE DRIVE CHANGES SO AS TO * APPEAR NOT TO BE A *NOT READY* CONDITION. TO AVOID * MISHANDLING THIS SITUATION THE ERROR PROCESSOR CHECKS FOR * PRIOR DETECTION OF *NOT READY* AND ASSUMES NO CHANGE IN * THE SITUATION UNTIL GENERAL STATUS BECOMES ZERO. CDS4 LDD EC LMK NRDE ZJP CDS8 IF *NOT READY* ALREADY DETECTED * CHECK FOR *BUFFER TO DISK* ERROR. LDD RW ZJN CDS5 IF READ OPERATION LDM DST+14 SHN 21-13 PJN CDS5 IF NOT ERROR ON PREVIOUS SECTOR LDD T7 LMK PPSLB-1 NJN CDS5 IF NOT AT BUFFER BOUNDARY LDD PB BACKUP TO PREVIOUS BUFFER STD CB LDN 0 STD PB UJN CDS6 SET ERROR CODE * CHECK FOR MEDIA ERROR. CDS5 LDM DST+17 LPN 40 NJN CDS6 IF PROCESSOR INSTRUCTION TIMEOUT LDM DST LPN 17 LMN 10 ZJN CDS7 IF MEDIA ERROR LDM DST+1 SHN 21-13 MJN CDS7 IF MEDIA ERROR SHN 13-11 MJN CDS7 IF MEDIA ERROR LDM DST+20 SHN 21-10 MJN CDS7 IF MEDIA ERROR LDM DST+17 SHN 21-6 MJN CDS9 IF CHANNEL PARITY ERROR ON OUTPUT CDS6 LDN DSTE UJN CDS10 SET ERROR CODE CDS7 LDK PARE&NRDE CDS8 LMK NRDE UJN CDS10 SET ERROR CODE CDS9 LDN CHPE SET ERROR CODE CDS10 STD EC LJM CDSX RETURN CRL SPACE 4,10 ** CRL - CHECK FOR ERROR RETRY LIMIT REACHED. * * ENTRY (EC) = ERROR CODE. * (ER) = *RECOVERY IN PROGRESS* FLAG. * (RC) = RETRY COUNT. * (T5) = EST ORDINAL. * * EXIT (A) .GE. 0 IF RETRY LIMIT REACHED. * .LT. 0 IF NOT AT RETRY LIMIT. * (RC) INCREMENTED. * MESSAGE ISSUED TO *MS2W* OF SYSTEM CONTROL POINT FOR * B-DISPLAY PRESENTATION IF HALF WAY TO RETRY LIMIT. * * USES RC. CRL SUBR ENTRY/EXIT LDD ER LMC SHNI+1 STM CRLA AOD RC INCREMENT RETRY COUNT LDM TREC,EC SHN -1 SBD RC PJN CRL1 IF TOO EARLY TO NOTIFY OPERATOR LDD T5 STORE EST ORDINAL IN MESSAGE SHN -3 RJM C2D STM CRLB+1 LDD T5 LPN 7 SHN 6 ADC 2R0 STM CRLB+2 LDM TMNE,EC STORE ERROR MNEMONIC IN MESSAGE STM CRLB+3 LDD CP ADK MS2W CWM CRLB,TR CRL1 LDD RC * IF *RECOVERY IN PROGRESS* IS NOT SET, THE RETRY COUNT IS * SHIFTED SO THAT THE LIMIT CHECK IS MADE AGAINST N/2 (WHERE N * IS THE RETRY LIMIT FOR THE ERROR TYPE IN CELL *EC*). THIS * CAUSES HALF OF THE RETRY ATTEMPTS TO BE PERFORMED ON EACH * CHANNEL, IF AN ALTERNATE ACCESS IS AVAILABLE. IF NO * ALTERNATE ACCESS IS AVAILABLE, ALL RETRIES WILL BE PERFORMED * ON THIS CHANNEL. SHN 0 * SHN 1 (RECOVERY NOT IN PROGRESS) CRLA EQU *-1 SBM TREC,EC SBN 1 UJP CRLX RETURN CRLB DATA C*EQ000 XX ERROR RETRY UNDERWAY.* CRQ SPACE 4,20 ** CRQ - CHECK REQUEST QUEUE. * * THIS ROUTINE ATTEMPTS TO CALL *CPUMTR* TO COMPLETE REQUESTS * IN THE UNIT QUEUE THAT HAVE ALREADY BEEN PROCESSED. * * ENTRY (CC) = COMPLETION REQUEST COUNT. * (PO) = *PUT* ORDINAL. * * EXIT (A) .EQ. 0 IF NO REQUESTS PRESENT. * .NE. 0 IF *CPUMTR* IS STILL BUSY WITH PREVIOUS * FUNCTION OR AN EXCHANGE WAS JUST ISSUED * FOR THE CURRENT FUNCTION. * * USES CC, CN - CN+4, T0 - T4. CRQ SUBR ENTRY/EXIT LDC ** READ XP CRQA EQU *-1 FWA OF XP CRD T0 LDD OA READ OUTPUT REGISTER CRD CN LDD T0+4 (B0) NJN CRQ1 IF MISSED EXCHANGE STD CN+3 LDD CN SHN 21-13 MJN CRQ1 IF REISSUE REQUIRED NJN CRQX IF FUNCTION NOW BEING PROCESSED LDD CC ZJN CRQX IF NO PENDING COMPLETION REQUESTS LDC ** CRQE EQU *-1 CRD T0 LDD T0 ADD T0+1 NJN CRQX IF FUNCTION IN PROGRESS LDN DCBS SET *BIOM* SUBFUNCTION STD CN+1 LDD PO STD CN+2 CRQ1 LDD CC RAD CN+3 LDN 0 STD CC LDK BIOM STD CN LDD OA CWD CN LDC ** CRQB EQU *-1 ADDRESS OF EXCHANGE PACKAGE CWM CRQD,ON WRITE FIRST WORD SBN 1 SET EXCHANGE ADDRESS MXN 0 EXCHANGE CPU CRQC EQU *-1 CPU NUMBER UJP CRQX RETURN CRQD VFD 24/0 (P) VFD 18/0 (A0) VFD 18/0 (B0) DCH SPACE 4,15 ** DCH - RELEASE CHANNEL. * * THIS ROUTINE RELEASES THE CHANNEL IF IT IS CURRENTLY * RESERVED. * * ENTRY (IR+4) = CHANNEL NUMBER. * (CS) = CHANNEL RESERVATION STATUS. * * EXIT (A) = (CS) = 0. * * USES CM+1, CS. * * MACROS MONITOR. DCH SUBR ENTRY/EXIT LDD CS LPN 1 ZJN DCHX IF CHANNEL NOT RESERVED LDD IR+4 RELEASE CHANNEL STD CM+1 MONITOR DCHM SOD CS UJN DCHX RETURN ERR SPACE 4,30 ** ERR - PROCESS ERROR. * * THIS ROUTINE IS CALLED TO PERFORM ERROR PROCESSING. * * ENTRY (EC) = 0 IF THIS IS THE FIRST RETRY OF A RECOVERY * SEQUENCE AND THE CALLER DID NOT SET THE ERROR * CODE. * = ERROR CODE IF NOT THE FIRST RETRY OF A RECOVERY * SEQUENCE AND NOT A CALLER SPECIFIED ERROR CODE. * = COMPLEMENT OF ERROR CODE IF SPECIFIED BY THE * CALLER. * (RC) = RETRY COUNT. * * EXIT (EC) = 0. * (RC) = 0. * TO THE POINT OF CALL IF THE ERROR WAS RECOVERED BY THE * CONTROLLER. * TO *MST* IN ALL OTHER CASES. * * USES EC, RC, RS, T1. * * CALLS CDS, CRL, CRQ, GGS, IBM, ISF, PDT, PFR, PRE, * RLC, SSF, TEP. ERR SUBR ENTRY/EXIT RJM PRE PRESET ERROR PROCESSOR NJP ERR11 IF INTERLOCK/VERIFICATION FAILURE LDD EC SHN 21-13 PJN ERR3 IF ERROR CODE NOT SET BY CALLER ERR2 LCN 0 STORE ERROR CODE LMD EC STD EC UJN ERR3.1 CHECK FOR RETRY LIMIT ERR3 RJM GGS GET GENERAL STATUS MJN ERR2 IF STATUS NOT OBTAINED RJM CDS CRACK DETAILED STATUS MJN ERR2 IF STATUS NOT OBTAINED ERR3.1 LDD RC NJN ERR4 IF NOT FIRST RETRY LDD GS SAVE INITIAL GENERAL STATUS STM BMLGS ERR4 LDD TH FORCE IMMEDIATE COMPLETION ERRNZ SHNI-1000 CODE DEPENDS ON VALUE STM IICA RJM IIC ISSUE I/O COMPLETION REQUEST ERR4.1 RJM CRQ ENSURE NO PENDING MONITOR FUNCTION NJN ERR4.1 IF FUNCTION STILL PENDING RJM IBM ISSUE BML MESSAGE IF FIRST RETRY AOD RS SHN 21-13 MJN ERR6.1 IF ERROR RECOVERED BY CONTROLLER RJM CRL CHECK FOR RETRY LIMIT REACHED MJN ERR7 IF RETRY LIMIT NOT REACHED * ATTEMPT TO RELOAD THE CONTROLLER IF THE ERROR TYPE IS * APPROPRIATE FOR SUCH AN ACTION. LDM TEPF,EC SHN 21-5 PJN ERR5 IF RELOAD INAPPROPRIATE FOR ERROR TYPE RJM RLC RELOAD CONTROLLER ERR5 SOD RC ADJUST FINAL RETRY COUNT AOD RS SET RECOVERY STATUS ERR6.1 UJN ERR11 TERMINATE ERROR PROCESSING * SET THE SUSPECT FLAG IF APPROPRIATE FOR THIS ERROR TYPE. ERR7 RJM SSF SET SUSPECT FLAG (IF APPROPRIATE) * RETRY I/O SEQUENCE. ERR9 RJM ISF ISSUE SEEK FUNCTION ZJN ERR10 IF ON CYLINDER AND NO ERROR LDD GS LMN 2 ZJN ERR9 IF POSITIONER BUSY LMN 10&2 NJN ERR9.1 IF DRIVE NOT RESERVED ON OTHER CHANNEL LDC 4000 CAUSE PRIORITY OVERRIDE ON SEEK RAM ISFA UJN ERR9 REISSUE SEEK ERR9.1 LDD CS LPN 10 ZJN ERR11 IF CONTROLLER WAS NOT CONNECTED LDK DSTE SET ERROR CODE FOR LOST CONTROLLER RESERVE STD EC UJP ERR4 RETRY OPERATION ERR10 RJM PFR PREPARE FOR RETRY ATTEMPT RJM PDT PERFORM READ/WRITE OPERATION * CONTROL RETURNS TO THIS POINT ONLY IF THE ERROR WAS * RECOVERED. ERR11 AOD RS SET RECOVERY STATUS SHN 6 RAD RC ADJUST FOR CONTROLLER RECOVERY * TERMINATE ERROR PROCESSING. INSTRUCTIONS MODIFIED FOR ERROR * PROCESSING WILL BE RESTORED TO THEIR ORIGINAL VALUES, VARIOUS * DATA CELLS WILL BE RESTORED TO THEIR INITIAL STATES, ETC. RJM TEP TERMINATE ERROR PROCESSING LDM ERRA,RS STD T1 LJM 0,T1 EXIT ERROR PROCESSOR ERRA INDEX TABLE OF EXIT ADDRESSES INDEX 0,ERRX INDEX 1,MST INDEX 2,MST INDEX 3,MST INDEX 4 TEPF SPACE 4,25 ** TEPF - TABLE OF ERROR PROCESSING FLAGS. * * THIS TABLE CONTAINS INFORMATION RELATED TO EACH ERROR TYPE. * EACH ENTRY HAS THE FOLLOWING FORMAT - * VFD 2/ERROR COUNT INCREMENT, BML MESSAGE INDICATOR * 0 DO NOT INCREMENT ERROR COUNTS AND DO * NOT ISSUE BML MESSAGE. * 1 INCREMENT ERROR COUNTS AND ISSUE BML * MESSAGE. * 2 INCREMENT ERROR COUNTS AND ISSUE BML * MESSAGE IF UNRECOVERED ERROR. * VFD 2/ERROR LOG MESSAGE INDICATOR * 0 DO NOT ISSUE ERROR LOG MESSAGE. * 1 ISSUE ERROR LOG MESSAGE WITH DETAILED * STATUS. * 2 ISSUE ERROR LOG MESSAGE WITHOUT * DETAILED STATUS. * VFD 1/SUSPECT FLAG * 0 DO NOT SET SUSPECT FLAG. * 1 SET SUSPECT FLAG. * VFD 1/DOWN CHANNEL FLAG * 0 DO NOT DOWN CHANNEL. * 1 DOWN CHANNEL. * VFD 1/CONTROLLER RELOAD FLAG * 0 DO NOT RELOAD CONTROLLER. * 1 RELOAD CONTROLLER. * VFD 5/UNUSED (ZERO) LIST G TEPF EQU *-1 ECHO 1,EC=("DREC") VFD 2/IEC._EC,2/IEM._EC,1/SUS._EC,1/IDC._EC,1/CWR._EC,5/0 LIST * TEPO SPACE 4,10 ** TEPO - TABLE OF IMMEDIATE RETURN ERROR PROCESSING OPTIONS. LIST G TEPO EQU *-1 ECHO 1,ERRCODE=("DREC") CON EPO._ERRCODE "TXT._ERRCODE" ERROR LIST * TMNE SPACE 4,10 ** TMNE - TABLE OF ERROR CODE MNEMONICS. LIST G TMNE EQU *-1 ECHO 1,ERRCODE=("DREC") CON EMN._ERRCODE "TXT._ERRCODE" ERROR LIST * TREC SPACE 4,10 ** TREC - TABLE OF RETRY COUNTS. LIST G TREC EQU *-1 ECHO 1,ERRCODE=("DREC") CON RTC._ERRCODE "TXT._ERRCODE" ERROR LIST * TSYM SPACE 4,10 ** TSYM - TABLE OF BML SYMPTOM CODES. LIST G TSYM EQU *-1 ECHO 1,ERRCODE=("DREC") CON SYM._ERRCODE "TXT._ERRCODE" ERROR LIST * FNC SPACE 4,10 ** FNC - FUNCTION CHANNEL. * * ENTRY (A) = FUNCTION CODE. * * EXIT (A) .LT. 0 IF CHANNEL ACTIVE UPON ENTRY OR FUNCTION * TIMEOUT. (EC) = COMPLEMENT OF ERROR CODE. * .GE. 0 IF NO ERROR. * * USES EC. FNC6 ACN CH ACTIVATE CHANNEL LDN 0 SET REPLY STATUS FNC SUBR ENTRY/EXIT STM FNCA SAVE FUNCTION CODE AJM FNC5,CH IF CHANNEL IS STILL ACTIVE FAN CH FUNCTION CHANNEL * THE DRIVER MUST WAIT AT LEAST 300 MS BEFORE TIMING OUT THE * FUNCTION. FNC1 ADD ON IJM FNC6,CH IF FUNCTION ACCEPTED NJN FNC1 IF NOT TIMEOUT YET FNC2 LCN FTOE SET COMPLEMENT OF *FTOE* ERROR CODE FNC3 STD EC EJM FNC4,CH IF CHANNEL IS EMPTY LDN 1 SAVE LAST FUNCTION ISSUED IAM FNCA,CH FNC4 LCN 0 SET ERROR REPLY STATUS DCN CH+40 UJN FNCX RETURN FNC5 LCN CHFE SET *CHANNEL FAILURE* ERROR CODE UJN FNC3 INPUT DATA/FUNCTION FROM CHANNEL FNCA CON -0 CURRENT FUNCTION GDS SPACE 4,15 ** GDS - GET DETAILED STATUS. * * THIS ROUTINE OBTAINS THE DETAILED STATUS FROM THE CONTROLLER. * * EXIT (A) .EQ. 0 IF STATUS OBTAINED. * .LT. 0 IF STATUS NOT OBTAINED. * (EC) = COMPLEMENT OF *IDTE* ERROR CODE IF INCOMPLETE * TRANSFER OCCURS. * * USES EC, T1. * * CALLS CCP, FNC. GDS1 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE GDS2 STD EC GDS3 LDN MXSL-1 INVALIDATE DETAILED STATUS STD T1 GDS4 LCN 0 STM DST,T1 SOD T1 PJN GDS4 IF MORE BYTES GDS SUBR ENTRY/EXIT LDN FCDS ISSUE DETAILED STATUS FUNCTION RJM FNC MJN GDS3 IF ERROR LDN MXSL IAM DST,CH INPUT DETAILED STATUS NJN GDS1 IF INCOMPLETE DATA TRANSFER RJM CCP CHECK FOR CHANNEL PARITY ERROR ZJN GDSX IF NO CHANNEL PARITY ERROR UJN GDS2 INVALIDATE STATUS AND RETURN GGS SPACE 4,15 ** GGS - GET GENERAL STATUS. * * THIS ROUTINE OBTAINS THE EXTENDED GENERAL STATUS FROM THE * CONTROLLER. * * EXIT (A) .GE. 0 IF GENERAL STATUS OBTAINED. (GS) = STATUS. * .LT. 0 IF STATUS NOT OBTAINED. (GS) = 7777. * (EC) = COMPLEMENT OF *IDTE* ERROR CODE IF INCOMPLETE * TRANSFER OCCURRED. * = COMPLEMENT OF *CHPE* ERROR CODE IF CHANNEL * ERROR OCCURRED. * * USES EC, GS, T1. * * CALLS CCP, FNC. GGS1 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE GGS2 STD EC GGS3 LDN FCESL-1 INVALIDATE EXTENDED GENERAL STATUS STD T1 GGS4 LCN 0 STM GGSA,T1 SOD T1 PJN GGS4 IF MORE BYTES LCN 0 INVALIDATE GENERAL STATUS GGS5 STD GS GGS SUBR ENTRY/EXIT LDM FNCA SAVE FUNCTION BEFORE GENERAL STATUS STM GGSB LDN FCES ISSUE EXTENDED GENERAL STATUS FUNCTION RJM FNC MJN GGS3 IF ERROR LDN FCESL IAM GGSA,CH NJN GGS1 IF INCOMPLETE TRANSFER RJM CCP CHECK FOR CHANNEL PARITY ERROR MJN GGS2 IF CHANNEL PARITY ERROR LDM GGSB RESTORE LAST FUNCTION FOR ERROR PROCESSOR STM FNCA LDM GGSA UJN GGS5 SAVE FIRST STATUS BYTE GGSA BSS FCESL EXTENDED GENERAL STATUS BUFFER GGSB BSS 1 LAST FUNCTION BEFORE GENERAL STATUS IBM SPACE 4,25 ** IBM - ISSUE BML MESSAGE. * * THIS ROUTINE BUILDS A BML MESSAGE AND CALLS ROUTINE *IMB* TO * ISSUE THE MESSAGE TO THE BML. * * ENTRY (CA - CA+3) = SEEK PARAMETERS. * (EC) = ERROR CODE. * (ER) = RECOVERY IN PROGRESS FLAG. * (RC) = RETRY COUNT. * (RS) = RECOVERY STATUS. * 777X INITIAL RETRY. * 0 RECOVERED BY CONTROLLER. * 1 RECOVERED BY DRIVER. * 2 UNRESOLVED. * 3 UNRECOVERED. * (RW) = READ/WRITE FLAG. * (T5) = EST ORDINAL. * (BMLGS) = GENERAL STATUS. * (DST - DST+23) = DETAILED STATUS IF APPLICABLE. * * EXIT (RC) INCREMENTED IF FIRST RETRY. * * USES RC, T1, CM+1 - CM+3. * * CALLS IMB. * * MACROS MONITOR. IBM SUBR ENTRY/EXIT LDM TEPF,EC SHN 0-12 ZJN IBMX IF NO BML MESSAGE/ERROR COUNT INCREMENT LDD RS LMN 2 ZJN IBMX IF UNRESOLVED ERROR SHN 21-13 PJN IBM2 IF FINAL RETRY LDD RC NJN IBMX IF NOT INITIAL RETRY AOD RC INCREMENT RETRY COUNT UJN IBM3 CONTINUE * INCREMENT ERROR COUNTER. IBM2 LDD T5 SET EST ORDINAL STD CM+1 LDD RS SET BYTE NUMBER SHN -1 ADN 3 STD CM+2 LDK ICTS SET SUBFUNCTION STD CM+3 MONITOR SMDM IBM3 LDD RS SET RECOVERED/UNRECOVERED FLAG ADN 5 SHN -3 LPN 1 STD T1 LDC /COMSDFS/D1HP*400 STORE SYMPTOM CODE LMM TSYM,EC STM BMLSC LMK /COMSDFS/HS0040+/COMSDFS/D1HP*400 NJN IBM4 IF NOT A MEDIA ERROR LDD RW SET WRITE MEDIA ERROR SYMPTOM CODE ERRNZ /COMSDFS/HS0041-/COMSDFS/HS0040-1 ERROR RAM BMLSC IBM4 LDD RC STORE RETRY COUNT SHN 6-1 ADD RW ADD READ/WRITE FLAG SHN 1 ADD T1 ADD RECOVERY STATUS STM BMLRC LDD CA UNIT NUMBER LPN 77 STM BMLUN LDD T5 EST ORDINAL STM BMLEO LDD EC ERROR CODE STM BMLEC LDD CA+1 CYLINDER STM BMLCY LDD CA+2 TRACK AND SECTOR SHN 6 LMD CA+3 STM BMLTS LDC BML ISSUE *BML* MESSAGE RJM IMB ISSUE MESSAGE TO BUFFER UJP IBMX RETURN BML SPACE 4,10 * BINARY MAINTENANCE LOG MESSAGE. BML BSS 0 HDR1 VFD 36/0 RESERVED VFD 12/BMS1LC LENGTH OF MESSAGE VFD 12/MLDY MESSAGE TYPE VFD 12//COMSDFS/RM0014 MESSAGE ID BMLSC VFD 4//COMSDFS/D1HP DRIVER TYPE VFD 1/0 RESERVED VFD 7/0 SYMPTOM CODE BMLPP VFD 6/ PP NUMBER VFD 6/ CHANNEL NUMBER BMLUN VFD 6/0 EQUIPMENT NUMBER VFD 6/ UNIT NUMBER VFD 12/0 RESERVED BMLEO VFD 12/ EST ORDINAL BMLRC VFD 6/ RETRY COUNT VFD 4/0 RESERVED VFD 1/0 READ OPERATION * VFD 1/1 WRITE OPERATION VFD 1/0 RECOVERED ERROR * VFD 1/1 UNRECOVERED ERROR BMLCR VFD 6/ CHANNEL USED FOR RECOVERY VFD 6/0 RESERVED BMLMF VFD 12/ MAINFRAME ID VFD 12/0 RESERVED HDR1L EQU *-HDR1 HEADER LENGTH (PP WORDS) HDR1LC EQU HDR1L/5 HEADER LENGTH (CM WORDS) BMLEC VFD 12/ ERROR CODE BMLCY VFD 12/ CYLINDER BMLTS VFD 12/ TRACK AND SECTOR BMLLF VFD 12/ LAST FUNCTION BMLGS VFD 12/ GENERAL STATUS * DETAILED STATUS. DST BSS MXSL BMS1L EQU *-BML LENGTH OF MESSAGE (PP WORDS) .A SET BMS1L+4 BMS1LC EQU .A/5 LENGTH OF MESSAGE (CM WORDS) IIC SPACE 4,10 ** IIC - ISSUE I/O COMPLETION REQUEST. * * ENTRY (CC) = COMPLETION COUNT. * (PB) = PREVIOUS BUFFER ORDINAL, IF ANY. * * EXIT (PB) = 0. * * USES CC ,PB. * * CALLS CRQ. IIC SUBR ENTRY/EXIT LDD PB ZJN IIC1 IF NO PREVIOUS BUFFER ORDINAL AOD CC INCREMENT COMPLETION COUNT LDN 0 CLEAR PREVIOUS BUFFER ORDINAL STD PB IIC1 LDD CC SHN ** IICA EQU *-1 ZJN IICX IF NOT AT THRESHOLD RJM CRQ ISSUE COMPLETION REQUEST UJN IICX RETURN IICB BSS 0 CON SHNI+77-0 CON SHNI+77-1 IMF SPACE 4,10 ** IMF - ISSUE MONITOR FUNCTION. * * ENTRY (A) = MONITOR FUNCTION CODE. * * EXIT (A) = 0. * (CM - CM+4) = COMPLETED PP OUTPUT REGISTER IMAGE. * * USES S1. * * CALLS CRQ, FTN. IMF SUBR ENTRY/EXIT STD S1 SAVE MONITOR FUNCTION CODE IMF1 RJM CRQ CHECK FOR FUNCTION REISSUE REQUIRED NJN IMF1 IF PREVIOUS FUNCTION NOT YET COMPLETE LDD S1 RJM FTN ISSUE MONITOR FUNCTION UJN IMFX RETURN ISF SPACE 4,25 ** ISF - ISSUE SEEK OPERATION. * * THIS ROUTINE ISSUES THE SEEK FUNCTION. * * ENTRY (CB) = BUFFER ORDINAL. * (CS) = CHANNEL RESERVATION STATUS. * * EXIT (A) .EQ. 0 IF UNIT ON-CYLINDER. * .NE. 0 IF CONTROLLER RESERVED TO OPPOSITE ACCESS, * DRIVE RESERVED TO OTHER CONTROLLER, OR * POSITIONER BUSY. * (CA - CA+2) = PHYSICAL ADDRESS OF FIRST SECTOR IN * BUFFER. * (CS) = BIT 3 SET IF CONTROLLER HARDWARE RESERVE IS * HELD. BIT 3 IS CLEAR IF *OPERATION COMPLETE* * FUNCTION WAS ISSUED. * TO *ERR* IF ERROR. * * USES CS, EC, CA - CA+4, CM - CM+4. * * CALLS ERR, FNC, GGS, RHR. * * MACROS CCBA. ISF SUBR ENTRY/EXIT CCBA PAD1 GET DISK ADDRESS FROM CBT ENTRY CRD CA LDD CA SET OPTION SELECT FLAGS LMC SOSF * LMC SOSF+4000 (PRIORITY OVERRIDE REQUIRED) ISFA EQU *-1 STD CA LDD CA+2 SET HEAD NUMBER SHN 14 STD CA+2 SHN -14 SET SECTOR NUMBER STD CA+3 LDD CS LPN 10 NJN ISF1 IF CONTROLLER ALREADY CONNECTED RJM GGS GET GENERAL STATUS MJN ISF2 IF GENERAL STATUS WAS NOT OBTAINED SHN 21-12 MJP ISFX IF COUPLER RESERVED ON OTHER ACCESS LDN 10 SET HARDWARE RESERVE FLAG RAD CS ISF1 LDN FCSK ISSUE SEEK FUNCTION RJM FNC ISF2 MJN ISF5 IF ERROR LDN FCSKL OUTPUT SEEK PARAMETERS OAM CA,CH ZJN ISF3 IF ALL DATA WAS TAKEN LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE UJN ISF4 PROCESS ERROR ISF3 EJM ISF6,CH IF LAST BYTE TRANSFERRED SBN 1 NJN ISF3 IF NOT TIMEOUT LCN CHFE SET *CHANNEL FAILURE* ERROR CODE ISF4 STD EC ISF5 RJM ERR CALL ERROR PROCESSOR ISF6 DCN CH+40 RJM GGS GET GENERAL STATUS ZJN ISF8 IF NO ERROR AND ON-CYLINDER MJN ISF5 IF STATUS WAS NOT OBTAINED SHN 21-3 MJN ISF7 IF UNIT IS RESERVED TO OTHER ACCESS SHN 3-1 PJN ISF5 IF ERROR ISF7 RJM RHR RELEASE HARDWARE RESERVES NJN ISF5 IF ERROR LDN 1 INDICATE NOT ON CYLINDER ISF8 LJM ISFX RETURN OVI SPACE 4,15 ** OVI - OBTAIN AND VERIFY *PUT* INTERLOCK. * * THIS ROUTINE ATTEMPTS TO OBTAIN THE *PUT* INTERLOCK AND IF * SUCCESSFUL, VERIFIES THAT THE BUFFER FOR WHICH THE SEEK WAS * ISSUED IS STILL CURRENT IN THE QUEUE. * * ENTRY (CA+1 - CA+3) = ADDRESS USED FOR SEEK. * (CB) = BUFFER ORDINAL. * (ER) = RECOVERY IN PROGRESS FLAG. * (IL) = NONZERO IF THE *PUT* INTERLOCK IS ALREADY HELD. * (PO) = *PUT* ORDINAL. * * EXIT (A) = 0 IF *PUT* ENTRY IS INTERLOCKED AND BUFFER IS * STILL CURRENT IN QUEUE. * = NONZERO IF *PUT* ENTRY IS INTERLOCKED BY OTHER * DRIVER OR THE BUFFER FOR WHICH THE SEEK WAS * PERFORMED HAS ALREADY BEEN PROCESSED BY THE * OTHER DRIVER. * (IL) = 1 IF (A) = 0. * * USES IL, CM+1 - CM+2, CN - CN+4. * * CALLS RPI. * * MACROS CCBA, CPTA, MONITOR. OVI2 LDN 0 INDICATE *PUT* INTERLOCKED AND BUFFER OK OVI SUBR ENTRY/EXIT LDD IL NJN OVI2 IF THIS DRIVER ALREADY HAS *PUT* INTERLOCK * LDK SUIS ERRNZ SUIS CODE DEPENDS ON VALUE STD CM+1 LDD PO STD CM+2 MONITOR BIOM ISSUE INTERLOCK REQUEST LDD CM+1 NJN OVIX IF *PUT* IS INTERLOCKED BY OTHER DRIVER AOD IL SET *PUT* INTERLOCK FLAG LDC CREQ UPDATE *CCT* TABLE OVIA EQU *-2 (*CCT* FWA SET BY *PRS*) CWD IL LDD ER NJN OVI2 IF RECOVERY IN PROGRESS * VERIFY THAT THE BUFFER FOR WHICH THE SEEK WAS ISSUED IS STILL * CURRENT IN THE QUEUE. CPTA UNCT CRD CN LDD CN+3 LMD CB NJN OVI1 IF CURRENT CBT ORDINAL CHANGED CCBA HSLK GET *PUT* ORDINAL FROM CBT ENTRY CRD CN LDD CN+4 LMD PO NJN OVI1 IF *PUT* ORDINALS DO NOT MATCH CCBA PAD1 GET PHYSICAL ADDRESS FROM CBT ENTRY CRD CN LDD CN+1 LMD CA+1 NJN OVI1 IF NO CYLINDER MATCH LDD CA+2 TRACK SHN 6 LMD CA+3 SECTOR LMD CN+2 ZJN OVI1.1 IF BUFFER OK OVI1 RJM RPI RELEASE *PUT* INTERLOCK LDN 1 INDICATE VERIFICATION FAILURE OVI1.1 UJP OVIX RETURN PCH SPACE 4,20 ** PCH - PROCESS CHANNEL REQUEST. * * THIS ROUTINE IS CALLED TO ISSUE A READ, WRITE OR CONTINUE * FUNCTION TO THE CONTROLLER. * * ENTRY (A) = FUNCTION CODE. * (CD - CD+1) = EXTENDED MEMORY ADDRESS. * (CD+2 - CD+5) = SHORT PRU FLAGS IF WRITE REQUEST. * (RW) = READ/WRITE FLAG. * * EXIT (A) .EQ. 0 IF COMPLETED SUCCESSFULLY. * .LT. 0 IF FUNCTION TIMEOUT, INCOMPLETE DATA * TRANSFER OR CHANNEL FAILURE. * (EC) = COMPLEMENT OF *IDTE* ERROR CODE IF DATA * TRANSFER ERROR. * * USES EC. * * CALLS FNC. PCH3 LCN IDTE SET *INCOMPLETE DATA TRANSFER* ERROR CODE PCH4 STD EC PCH SUBR ENTRY/EXIT RJM FNC FUNCTION CHANNEL MJN PCHX IF ERROR LDC ** OUTPUT PARAMETERS PCHA EQU *-1 (PARAMETER BLOCK SIZE) OAM CD,CH NJN PCH3 IF INCOMPLETE DATA TRANSFER PCH1 EJM PCH2,CH IF LAST BYTE ACCEPTED SBN 1 NJN PCH1 IF NOT TIMEOUT LCN CHFE SET *CHANNEL FAILURE* ERROR CODE UJN PCH4 SET ERROR CODE PCH2 DCN CH+40B LDN 0 SET REPLY = SUCCESSFUL UJN PCHX RETURN PDT SPACE 4,15 ** PDT - PROCESS DATA TRANSFER. * * THIS ROUTINE PREPARES FOR AND STARTS THE DATA TRANSFER WHEN A * REQUEST IS FOUND IN THE *PUT* AND THE SEEK HAS COMPLETED. IT * WILL CALL THE PROPER ROUTINE FOR THE DIRECTION OF THE I/O. * THIS ROUTINE WILL RETURN TO THE MAIN LOOP ONLY WHEN THE * TRANSFER CANNOT CONTINUE ON THE CURRENT UNIT. * * ENTRY (EC) = ERROR CODE, IF RECOVERY IS IN PROGRESS. * (PO) = *PUT* ORDINAL. * (RW) = READ/WRITE FLAG. * * USES NB, PB, PI, T1, T7, CD - CD+1, CN+2 - CN+4. * * CALLS ERR, OVI, RHR, RIO, RPI, WIO. * * MACROS CCBA. PDT SUBR ENTRY/EXIT LDM PDTB,RW STORE PARAMETER BLOCK LENGTH STM PCHA RJM OVI OBTAIN *PUT* INTERLOCK AND VERIFY BUFFER NJN PDT1 IF UNABLE TO INTERLOCK *PUT*/WRONG BUFFER STD NB CLEAR NEXT BUFFER ORDINAL STD PB CLEAR PREVIOUS BUFFER ORDINAL STD PI SET *PADN* WORD OFFSET LDM IICB,RW STM IICA LDM PDTA,RW STORE SUBROUTINE ADDRESS STD T1 CCBA IOLK CRD CD-3 ERRNZ CD-CN-5 CODE IS VALUE DEPENDENT LDN PPSLB SET SECTOR COUNT STD T7 RJM 0,T1 ENTER DATA TRANSFER ROUTINE * CONTROL RETURNS HERE AFTER THE DATA TRANSFER IS COMPLETED. PDT1 RJM RHR RELEASE HARDWARE RESERVES ZJN PDT2 IF NO ERROR LDD EC NJN PDT2 IF ERROR RECOVERY IN PROGRESS RJM ERR CALL ERROR PROCESSOR PDT2 RJM RPI RELEASE *PUT* INTERLOCK UJP PDTX RETURN PDTA BSS 0 PROCESSOR ADDRESS TABLE CON RIO CON WIO PDTB BSS 0 PARAMETER BLOCK LENGTH TABLE CON FCRDL CON FCWRL PFR SPACE 4,15 ** PFR - PREPARE FOR RETRY ATTEMPT. * * THIS ROUTINE DOES WHATEVER IS NECESSARY TO PREPARE FOR THE * NEXT RETRY ATTEMPT. ITS DUTIES INCLUDE PLUGGING INSTRUCTIONS * TO FORCE RETURN TO THE ERROR PROCESSOR FOLLOWING RECOVERY. * * ENTRY (RW) = READ/WRITE FLAG. * * USES T1, T2. PFR SUBR ENTRY/EXIT LDD RW SHN 1 STD T1 LDM PFRA,T1 STD T2 LDM PFRA+1,T1 STI T2 UJN PFRX RETURN PFRA BSS 0 CON RIOA,RIOX CON WIOA,WIO6.1 PRE SPACE 4,15 ** PRE - PRESET ERROR PROCESSOR. * * THIS ROUTINE PERFORMS OPERATIONS NECESSARY TO PREPARE THE * DRIVER FOR ERROR PROCESSOR EXECUTION. * * EXIT (A) = 0 IF ERROR PROCESSING SHOULD CONTINUE. * (RS) = RECOVERY STATUS. * (T5) = EST ORDINAL. * (TEPA) = 1 IF VERIFICATION/INTERLOCK REJECT. * * USES RS, T5, CM - CM+4. * * CALLS CRQ, OVI. * * MACROS CPTA. PRE2 AOM TEPA SET VERIFICATION/INTERLOCK REJECT FLAG STD RS FORCE EXIT TO *MST* PRE SUBR ENTRY/EXIT DCN CH+40 DISCONNECT CHANNEL IN CASE STILL ACTIVE LDM FNCA SAVE CURRENT FUNCTION STM BMLLF LCN 0 INITIALIZE RECOVERY STATUS STD RS LDD HN ERRNZ SOSF-100 CODE DEPENDS ON VALUE STM ISFA RJM OVI GET *PUT* INTERLOCK (IF NOT ALREADY HELD) NJN PRE2 IF INTERLOCK NOT OBTAINED CPTA UNCT GET EST ORDINAL CRD CM LDD CM+1 STD T5 PRE1 RJM CRQ ENSURE NO PENDING MONITOR FUNCTIONS NJN PRE1 IF FUNCTION STILL PENDING UJN PREX RETURN RCH SPACE 4,10 ** RCH - REQUEST CHANNEL. * * ENTRY (IR+4) = CHANNEL NUMBER. * (CS) = CHANNEL RESERVATION STATUS. * * EXIT (A) .NE. 0 IF CHANNEL ASSIGNED. * .EQ. 0 IF CHANNEL NOT ASSIGNED. * * USES CM+1, CS. * * MACROS MONITOR. RCH SUBR ENTRY/EXIT LDD CS LPN 1 NJN RCHX IF CHANNEL ALREADY ASSIGNED LDD IR+4 STD CM+1 MONITOR CCHM LDD CM+2 ZJN RCHX IF CHANNEL NOT ASSIGNED AOD CS SET CHANNEL RESERVATION FLAG UJN RCHX RETURN RHR SPACE 4,10 ** RHR - RELEASE HARDWARE RESERVES. * * ENTRY (CS) = CHANNEL STATUS. * * EXIT (A) = 0 IF NO ERROR. * * USES CS, S1. * * CALLS FNC. RHR SUBR ENTRY/EXIT LDD CS LPN 10 ZJN RHRX IF CONTROLLER NOT RESERVED LDN FCOC ISSUE *OPERATION COMPLETE* FUNCTION RJM FNC SHN 0-21 SAVE ERROR STATUS STD S1 DCN CH+40 LCN 10 CLEAR CONTROLLER RESERVE FLAG RAD CS LDD S1 SET REPLY STATUS UJN RHRX RETURN RIO SPACE 4,15 ** RIO - PERFORM READ OPERATION. * * ENTRY (CB) = CURRENT BUFFER ORDINAL. * (CD - CD+1) = BUFFER ADDRESS. * (NB) = 0. * (PB) = 0. * (PI) = 0. * (T7) = *PPSLB*. * * EXIT (PB) = ORDINAL OF LAST BUFFER PROCESSED. * * USES CB, PB, PI, T7, CD - CD+1, CM - CM+4, CN+2 - CN+4. * * CALLS CCS, CRQ, ERR, GGS, IIC, PCH. * * MACROS CCBA. RIO SUBR ENTRY/EXIT RIO1 LDN FCRD ISSUE READ FUNCTION RJM PCH MJN RIO4 IF ERROR RJM IIC CHECK FOR NEED TO ISSUE COMPLETION REQUEST LDD T7 LPN 1 ZJN RIO3 IF FIRST SECTOR OF CONTROL WORD CCBA PAD1 UPDATE PRU FLAGS ADD PI CRD CM LDM GGSA+3 STD CM+3 LDM GGSA+4 UPDATE LINKAGE BYTE STD CM+4 CCBA PAD1 ADD PI CWD CM AOD PI INCREMENT *PADN* WORD OFFSET RIO3 RJM CCS CHECK FOR CONSECUTIVE REQUEST RJM GGS GET GENERAL STATUS ZJN RIO5 IF NO ERROR RIO4 RJM ERR PROCESS ERROR RIO5 AOD CA+3 ADVANCE CURRENT POSITION LMN PSPT NJN RIO6 IF NOT END OF TRACK STD CA+3 RESET TO SECTOR 0 AOD CA+2 ADVANCE TO NEXT TRACK RIO6 SOD T7 DECREMENT SECTOR COUNT ZJN RIO7 IF FINISHED WITH BUFFER LDC EMAI INCREMENT EXTENDED MEMORY ADDRESS RAD CD+1 SHN -14 RAD CD LJM RIO1 READ NEXT SECTOR RIO7 STD PI RESET *PADN* WORD OFFSET RJM CCS CHECK FOR CONSECUTIVE REQUEST LDD CB ADVANCE BUFFER POINTERS STD PB LDD NB STD CB ZJP RIOX IF NO CONSECUTIVE REQUEST FOUND CCBA IOLK,A INITIALIZE EXTENDED MEMORY ADDRESS CRD CD-3 ERRNZ CD-CN-5 CODE IS VALUE DEPENDENT LDN PPSLB RESET SECTOR COUNT STD T7 LDN 0 CLEAR NEXT BUFFER ORDINAL STD NB LJM RIO1 CONTINUE TRANSFER * LJM RIOX (ERROR RECOVERY IN PROGRESS) RIOA EQU *-1 RLC SPACE 4,15 ** RLC - RELOAD CONTROLWARE. * * THIS ROUTINE CALLS *1DS* TO INITIATE THE CONTROLWARE RELOAD. * * EXIT (A) = 0 IF CONTROLWARE RELOADED. * * USES S2, CM - CM+4, CN - CN+4. * * CALLS *1DS*. * * MACROS DELAY, EXECUTE, MONITOR. RLC6 LDN 1 INDICATE CONTROLWARE NOT RELOADED RLC SUBR ENTRY/EXIT LDC ** RLCJ EQU *-1 NJN RLCX IF RELOAD WAS ALREADY ATTEMPTED LDK DSSL AVOID CONTROLWARE LOAD DURING DEADSTART CRD CM LDD CM+4 LPN 4 NJN RLCX IF DEADSTART IN PROGRESS LDC ** READ CONTROLWARE TABLE RLCA EQU *-1 CM ADDRESS OF TABLE ENTRY CRD CM LDD CM+** RLCB EQU *-1 BYTE ADDRESS OF TABLE ENTRY SHN 21-13 MJN RLCX IF RELOAD IN PROGRESS SHN 13-21-6 LPN 7 CONTROLWARE LOAD COUNT LMK CRTH ZJN RLC6 IF RELOAD LIMIT REACHED AOM RLCJ SET RELOAD ATTEMPTED FLAG * SET RELOAD REQUEST BIT IN CONTROLWARE TABLE. LDN 0 STD CM+2 LDD MA MESSAGE BUFFER ADDRESS CWM RLCG,ON REQUEST WORD LDC ** RLCC EQU *-1 ADDRESS OF CONTROLWARE TABLE ENTRY STD CM+4 SHN -14 STD CM+3 LDN 1 NUMBER OF REQUESTS TO PROCESS STD CM+1 MONITOR UTEM * LDN 0 INITIALIZE RETRY COUNT STD S2 * CALL *1DS* TO INITIATE CONTROLWARE LOAD JOB. RLC1 DELAY LDD MA MESSAGE BUFFER ADDRESS CWM RLCH,ON *1DS* REQUEST EXECUTE 1DS,= MONITOR RPPM REQUEST PP LDD CM+1 NJN RLC2 IF PP ASSIGNED AOD S2 INCREMENT RETRY COUNT LMK PCRL NJN RLC1 IF NOT RETRY LIMIT RLC2 LJM RLCX RETURN RLCG VFD 1/0,5/0,6/1,6/,42/1 *UTEM* REQUEST RLCH VFD 18/3L1DS,6/,12/ILJF,24/0 *1DS* REQUEST RPI SPACE 4,10 ** RPI - RELEASE *PUT* INTERLOCK. * * ENTRY (CC) = COMPLETION COUNT. * (IL) = *PUT* INTERLOCK FLAG. * (PB) = PREVIOUS BUFFER ORDINAL. * (PO) = *PUT* ORDINAL. * (TB) = TOTAL CBT COUNT. * * USES CC, IL, PB, CM - CM+4. * * MACROS MONITOR. RPI SUBR ENTRY/EXIT LDD IL ZJN RPIX IF *PUT* NOT INTERLOCKED LDD TB SET TOTAL BUFFER COUNT STD CM+4 LDD PB ZJN RPI1 IF NO PREVIOUS BUFFER LDN 1 ACCOUNT FOR PREVIOUS BUFFER RPI1 ADD CC LMC 4000 SET *RELEASE INTERLOCK* FLAG STD CM+3 LDD PO STD CM+2 LDN DCBS CLEAR UNIT INTERLOCK STD CM+1 LDN 0 CLEAR COMPLETION COUNT BEFORE *CRQ* CALL STD CC MONITOR BIOM * LDN 0 STD IL CLEAR *PUT* INTERLOCK FLAG STD PB CLEAR PREVIOUS BUFFER ORDINAL LDC CREQ UPDATE *CCT* TABLE RPIA EQU *-2 (*CCT* FWA SET BY *PRS*) CWD IL UJP RPIX RETURN RTM SPACE 4,25 ** RTM - REQUEST TRACK FLAW IF MEDIA ERROR. * * THIS ROUTINE DETERMINES IF THE ERROR RESULTED FROM A MEDIA * FAILURE. IF IT DID, *CPUMTR* WILL BE CALLED TO PLACE THE * LOGICAL TRACK NUMBER IN THE MST SO *1MV* CAN PERFORM A MEDIA * VERIFICATION WHEN THE TRACK IS RELEASED. AN ERROR LOG * MESSAGE IS ISSUED INFORMING THE OPERATOR THAT A MEDIA FAILURE * OCCURRED BUT THE TRACK HAS NOT YET BEEN FLAWED BY THE SYSTEM. * * ENTRY (CA - CA+3) = PHYSICAL ADDRESS. * (CB) = BUFFER ORDINAL. * (EC) = ERROR CODE. * (T5) = EST ORDINAL. * * USES T1, CM - CM+4. * * CALLS C2D, IMB. * * MACROS MONITOR. RTM SUBR ENTRY/EXIT LDD EC LMK PARE NJN RTMX IF NOT MEDIA ERROR LDD T5 CONVERT AND STORE EST ORDINAL IN MESSAGE SHN -3 RJM C2D STM RTMB+1 LDD T5 STD CM+1 STORE EST ORDINAL FOR *SMDM* LPN 7 SHN 6 ADC 2R0, STM RTMB+2 LDD CA+1 COMPUTE LOGICAL TRACK SHN 1 ADC 4000 STD CM+2 LDD CA+2 PHYSICAL TRACK LPN 77 SHN 5 ERRNZ PSPT-40 CODE DEPENDS ON VALUE ADD CA+3 SBK PSLTDB MJN RTM1 IF FIRST LOGICAL TRACK OF CYLINDER AOD CM+2 RTM1 LDD CM+2 SHN -6 CONVERT UPPER 6 BITS RJM C2D STM RTMB+4 STORE RESULT IN DISPLAY BUFFER LDD CM+2 CONVERT LOWER 6 BITS LPN 77 RJM C2D STM RTMB+5 STORE RESULT IN DISPLAY BUFFER LDK SFTS SET SUBFUNCTION STD CM+3 MONITOR SMDM LDD CM+1 NJN RTM2 IF THIS TRACK FLAW ALREADY REQUESTED LDC RTMA ISSUE ERROR LOG MESSAGE RJM IMB RTM2 UJP RTMX RETURN RTMA VFD 24/0 RESERVED VFD 12/1 ERRLOG ALERT FLAG VFD 12/RTMAL MESSAGE LENGTH VFD 12/ELDY ERRLOG DAYFILE RTMB DATA C*EQXXX,TKNNNN, MEDIA DEFECT ENCOUNTERED.* .1 SET *-RTMA+4 RTMAL EQU .1/5 SCD SPACE 4,15 ** SCD - SET DRIVER DROPPED FLAG. * * THIS ROUTINE SETS A FLAG IN THE CONTROLWARE TABLE INDICATING * THAT THE DRIVER OF THIS CHANNEL HAS DROPPED. * * EXIT (A) = 0. * * USES CM+1 - CM+4. * * MACROS MONITOR. SCD SUBR ENTRY/EXIT LDD MA STORE *UTEM* PARAMETERS CWM SCDB,ON LDC ** SCDA EQU *-1 (CONTROLWARE TABLE ADDRESS) STD CM+4 SHN -14 STD CM+3 LDN 1 STD CM+1 LDN 0 STD CM+2 MONITOR UTEM SET DRIVER DROP FLAG UJN SCDX RETURN SCDB VFD 1/0,5/0,6/1,6/,42/1 SSF SPACE 4,15 ** SSF - SET SUSPECT FLAG. * * THIS ROUTINE SETS THE SUSPECT FLAG IN THE MST ENTRY VIA * AN *SEQM* MONITOR FUNCTION IF CERTAIN CRITERIA ARE MET. IT * ALSO SETS AN ERROR CODE IN THE MST THAT APPEARS ON THE *E,M* * DISPLAY. * * ENTRY (EC) = ERROR CODE. * (RC) = RETRY COUNT. * (T5) = EST ORDINAL. * * USES CM+1 - CM+3. * * CALLS RTM. * * MACROS MONITOR. SSF SUBR ENTRY/EXIT LDD RC LMK SURT NJN SSFX IF NOT TIME TO SET SUSPECT FLAG RJM RTM CHECK FOR MEDIA FAILURE LDM TEPF,EC SHN 21-7 PJN SSFX IF SUSPECT FLAG NOT TO BE SET LDD T5 SET SUSPECT FLAG STD CM+1 LDN SSES STD CM+2 MONITOR SEQM LDD T5 SET ERROR CODE IN MST STD CM+1 LDN STDE STD CM+2 LDN SERS STD CM+3 MONITOR SMDM UJN SSFX RETURN SUQ SPACE 4,15 ** SUQ - SCAN UNIT QUEUE. * * THIS ROUTINE SCANS THE *PUT* ENTRIES OF UNITS ACCESSED BY * THIS CHANNEL UNTIL IT HAS SCANNED THE ENTIRE TABLE OR FINDS * AN ENTRY ELIGIBLE FOR PROCESSING. * * ENTRY (TI) = CURRENT *TPOR* INDEX. * * EXIT (A) .EQ. 0 IF ENTIRE TABLE SCANNED AND NO ELIGIBLE * ENTRY FOUND. * .NE. 0 IF ENTRY SELECTED. * (CB) = CURRENT BUFFER ORDINAL. * (ER) = 1 IF ERROR RECOVERY IS IN PROGRESS. * (PO) = ORDINAL OF SELECTED *PUT* ENTRY. * (RC) = 0 IF ELIGIBLE ENTRY FOUND AND *RECOVERY IN * PROGRESS* FLAG IS CLEAR. * = N/2 WHERE N IS THE RETRY LIMIT FOR THE ERROR * CODE SET IN *EC* IF *RECOVERY IN PROGRESS* * FLAG IS SET. * (RW) = READ/WRITE FLAG. * TO *ERR* IF ERROR RECOVERY IS IN PROGRESS FOR * SELECTED BUFFER. * (TB) = TOTAL BUFFER COUNT. * * USES CB, EC, ER, PO, RC, RW, S1, TB, TI, CM - CM+4, * CN - CN+4, T1 - T5. * * CALLS ERR. * * MACROS CCBA, CPTA, SFA. SUQ7 LDD TI LMN 1 SUQA EQU *-1 NJN SUQ1 IF NOT FINISHED WITH *PUT* SCAN SUQ SUBR ENTRY/EXIT SUQ1 AOD TI ADVANCE *TPOR* INDEX ERRNZ TPORE-1 CODE IS VALUE DEPENDENT LDM TPOR-1,TI NJN SUQ2 IF NOT END OF *TPOR* TABLE STD TI RESET INDEX UJN SUQ1 CONTINUE SUQ2 SHN 14 SET CHANNEL BYTE INDEX STD S1 SHN -14 SET *PUT* ORDINAL STD PO CPTA UNCT,A READ *PUT* ENTRY CRD CM LDD CM SHN 21-13 MJN SUQ7 IF UNIT INTERLOCK SET LDD CM+3 NJN SUQ3 IF REQUEST IN QUEUE SUQ2.1 UJN SUQ7 PROCESS NEXT *PUT* SUQ3 STD CB SAVE BUFFER ORDINAL CCBA IOLK,A READ *CBT* ENTRY CRD CN ADK HSLK-IOLK CRD T1 SFA EST,CM+1 READ EST ENTRY ADK EQDE CRD CM LDM CM+1,S1 SHN -11 LPN 3 STD T2 SAVE CHANNEL STATE INDICATOR LMN 3 NJN SUQ4 IF CHANNEL NOT DOWN SUQ3.1 UJN SUQ2.1 PROCESS NEXT *PUT* SUQ4 LDD T1 SHN 0-12 ZJN SUQ4.1 IF NOT CHANNEL SPECIFIC REQUEST CCBA PAD4 GET CHANNEL FROM CBT ENTRY CRD CM LDD CM SHN -6 LMD IR+4 STD T2 SUQ4.1 LDD T2 NJN SUQ3.1 IF IDLE STATE OR OTHER CHANNEL SPECIFIED LDD CN SET/CLEAR READ/WRITE FLAG SHN 0-11 LPN 1 STD RW SHN 13-0 SET TOTAL BUFFER COUNT ADN 1 STD TB LDD T1 SHN 0-13 STD ER SET/CLEAR RECOVERY IN PROGRESS FLAG ZJN SUQ6 IF NOT ERROR RECOVERY LDD T1 SAVE ERROR CODE LPN 77 STD T1 LMC 7777 COMPLEMENT ERROR CODE STD EC LDM TREC,T1 SET RETRY COUNT = LIMIT/2 SHN -1 STD RC RJM ERR CALL ERROR PROCESSOR LJM SUQ1 CONTINUE SCAN SUQ6 LDD TI SET SCAN LIMIT LMC LMNI STM SUQA LJM SUQX RETURN TEP SPACE 4,25 ** TEP - TERMINATE ERROR PROCESSING. * * THIS ROUTINE PERFORMS OPERATIONS NECESSARY TO RESTORE THE * DRIVER TO ITS NORMAL STATE (NON-ERROR PROCESSING). * * ENTRY (EC) = ERROR CODE. * (PO) = *PUT* ORDINAL. * (RS) = RECOVERY STATUS. * (RW) = READ/WRITE FLAG. * * EXIT (EC) = 0. * (ER) = 0. * (RC) = 0. * (RS) = RECOVERY STATUS. * 0 RECOVERED BY CONTROLLER. * 1 RECOVERED BY DRIVER. * 2 UNRESOLVED. * 3 UNRECOVERED. * * USES EC, ER, IL, RC, RS, S2, T1, T2, CM - CM+4. * * CALLS IBM, RHR, RPI. * * MACROS MONITOR. TEP4 LDN 0 STD EC CLEAR ERROR CODE STD ER CLEAR RECOVERY IN PROGRESS FLAG STD RC CLEAR RETRY COUNT STM RLCJ CLEAR RELOAD ATTEMPTED FLAG STM TEPA CLEAR VERIFICATION/INTERLOCK REJECT FLAG LDD HN RESET SEEK SELECTION OPTIONS ERRNZ SOSF-100 CODE DEPENDS ON VALUE STM ISFA TEP SUBR ENTRY/EXIT LDD RW SHN 1 STD T1 LDM TEPB,T1 RESTORE INSTRUCTIONS STD T2 LDM TEPB+1,T1 STI T2 LDC ** TEPA EQU *-1 NJP TEP4 IF OTHER DRIVER HANDLING ERROR LDD RS ZJN TEP1 IF RECOVERED BY CONTROLLER LDD EC SAVE ERROR CODE IN CASE FUNCTION TIMEOUT STD S2 RJM RHR RELEASE HARDWARE RESERVES LDD S2 RESTORE ERROR CODE STD EC LDD RS TEP1 LMN 2 NJN TEP2 IF NOT UNRESOLVED ERROR * ISSUING SUBFUNCTION *SETS* OF THE *BIOM* MONITOR FUNCTION * CAUSES ONE OF THE FOLLOWING TO OCCUR - * A. IF THE RECOVERY IN PROGRESS FLAG IS SET IN THE CBT * ENTRY, THE REQUEST WILL BE TERMINATED WITH STATUS * RETURNED TO THE PROGRAM THAT ISSUED THE REQUEST. * IN THIS CASE IT IS THE RESPONSIBILITY OF THIS * DRIVER TO ISSUE MESSAGES TO THE BML, ERROR LOG, JOB * DAYFILE AND SYSTEM DAYFILE INDICATING AN * UNRECOVERED ERROR OCCURRED. * B. IF THE RECOVERY IN PROGRESS FLAG IS CLEAR AND AN * ALTERNATE CHANNEL EXISTS (WITH AN ACTIVE DRIVER), * THE REQUEST WILL BE MODIFIED TO FORCE CONTINUATION * OF ERROR RECOVERY BY THE OTHER DRIVER. * C. IF THE RECOVERY IN PROGRESS FLAG IS CLEAR BUT * EITHER THERE IS NO ALTERNATE ACCESS PATH OR IT HAS * BEEN DOWNED, THE REQUEST WILL BE MODIFIED TO FORCE * CONTINUATION OF ERROR PROCESSING ON THIS CHANNEL. LDN SETS SET SUBFUNCTION STD CM+1 LDD PO SET *PUT* ORDINAL STD CM+2 LDN 1 SET BUFFER COUNT STD CM+3 LDD EC SET ERROR CODE STD CM+4 MONITOR BIOM STD IL CLEAR *PUT* INTERLOCK FLAG LDD CM+1 ZJN TEP2 IF PROCESSING WILL RESUME ON OTHER CHANNEL AOD RS SET UNRECOVERED STATUS * ISSUE THE BML MESSAGE AND INCREMENT ERROR COUNTERS IF * APPROPRIATE FOR THIS ERROR TYPE AND RESOLUTION OF THE ERROR * HAS BEEN DETERMINED. TEP2 LDD RS LPN 1 ZJN TEP3 IF UNRESOLVED OR RECOVERED BY CONTROLLER RJM RPI RELEASE *PUT* INTERLOCK TEP3 RJM IBM ISSUE BML MESSAGE * CLEAR B-DISPLAY MESSAGE. LDK ZERL CRD CM LDD CP ADK MS2W CWD CM UJP TEP4 CONTINUE CLEARING AND RETURN TEPB BSS 0 CON RIOA,RIO1 CON WIOA,WIO1 WIO SPACE 4,10 ** WIO - PERFORM WRITE OPERATION. * * ENTRY (CB) = CURRENT BUFFER ORDINAL. * (CD - CD+1) = BUFFER ADDRESS. * (NB) = 0. * (PB) = 0. * (PI) = 0. * (T7) = *PPSLB*. * * EXIT (PB) = ORDINAL OF LAST BUFFER PROCESSED. * * USES CB, PB, PI, T1, T7, CA+2 - CA+3, CD - CD+5, * CN+2 - CN+4. * * CALLS CCS, CRQ, ERR, GGS, IIC, PCH. * * MACROS CCBA. WIO SUBR ENTRY/EXIT WIO1 LDD T7 LPN 1 NJN WIO2 IF NOT FIRST SECTOR OF CONTROL WORD LDD CD+1 SAVE EXTENDED MEMORY ADDRESS BYTE STD T1 CCBA PAD1 GET LINKAGE BYTES FROM *CBT* ENTRY ADD PI CRD CD+1 LDD T1 RESTORE EXTENDED MEMORY ADDRESS BYTE STD CD+1 AOD PI INCREMENT *PADN* INDEX WIO2 LDN FCWR ISSUE WRITE FUNCTION RJM PCH MJN WIO4.1 IF ERROR AOD CA+3 ADVANCE CURRENT POSITION LMN PSPT NJN WIO3 IF NOT END OF TRACK STD CA+3 RESET TO SECTOR ZERO AOD CA+2 ADVANCE TO NEXT TRACK WIO3 SOD T7 DECREMENT SECTOR COUNT ZJN WIO5 IF FINISHED WITH BUFFER LMK PPSLB-1 ZJN WIO4 IF FIRST SECTOR OF BUFFER RJM IIC ISSUE I/O COMPLETION REQUEST IF REQUIRED WIO4 LDC EMAI INCREMENT EXTENDED MEMORY ADDRESS RAD CD+1 SHN -14 RAD CD RJM CCS CHECK FOR CONSECUTIVE REQUEST RJM GGS GET GENERAL STATUS ZJP WIO1 IF NO ERROR WIO4.1 UJN WIO8 CALL ERROR PROCESSOR WIO5 STD PI RESET *PADN* WORD INDEX RJM CCS CHECK FOR CONSECUTIVE REQUEST LDD CB ADVANCE BUFFER POINTERS STD PB LDD NB STD CB ZJN WIO6 IF NO CONSECUTIVE REQUEST CCBA IOLK,A SET EXTENDED MEMORY ADDRESS CRD CD-3 ERRNZ CD-CN-5 CODE IS VALUE DEPENDENT LDN PPSLB RESET SECTOR COUNT STD T7 RJM GGS GET GENERAL STATUS NJN WIO7 IF ERROR STD NB CLEAR NEXT BUFFER ORDINAL LJM WIO1 CONTINUE TRANSFER * LJM WIO6.1 (ERROR RECOVERY IN PROGRESS) WIOA EQU *-1 WIO6 RJM GGS GET GENERAL STATUS NJN WIO7 IF ERROR ON LAST SECTOR WIO6.1 RJM GGS GET GENERAL STATUS ZJN WIO9 IF NO ERROR WIO7 LDD PB BACKUP TO PREVIOUS BUFFER STD CB LDN 0 AVOID BUFFER COMPLETION STD PB WIO8 RJM ERR CALL ERROR PROCESSOR WIO9 LJM WIOX RETURN SPACE 4,10 * COMMON DECKS. *CALL COMPC2D *CALL COMPIMB SPACE 4,10 PRS TITLE PRESET PROGRAM. PRS SPACE 4,10 ** PRS - PRESET *1HP*. * * EXIT (CC) = 0. * (CS) = 0. * (EC) = 0. * (ER) = 0. * (IL) = 0. * (PB) = 0. * (RC) = 0. * (TI) = 0. * (BMLCR) = 6/ CHANNEL, 6/0. * (BMLMF) = MAINFRAME ID. * (BMLPP) = 6/ PP NUMBER, 6/ CHANNEL. * (CCPA) = *SCR* CHANNEL PARITY BIT + FCTC + 30B. * (CCPB) = *SCR* CHANNEL OUTPUT INSTRUCTION (OAN). * (CCPC) = *SCR* CHANNEL INPUT INSTRUCTION (IAN). * (CCRA) = WORD ADDRESS OF CHANNEL TABLE ENTRY. * (CCRB) = BYTE ADDRESS OF CHANNEL TABLE ENTRY + LDDI. * (CHRV) = 1. * (CRQA) = FWA OF PP EXCHANGE PACKAGE. * (CRQB) = FWA OF PP EXCHANGE PACKAGE. * (CRQC) = CPU EXCHANGE INSTRUCTION (MXN). * (CRQD) = FIRST WORD OF PP EXCHANGE PACKAGE. * (RLCA) = WORD ADDRESS OF CONTROLWARE TABLE ENTRY. * (RLCB) = BYTE ADDRESS OF CONTROLWARE TABLE ENTRY. * (RLCC) = WORD ADDRESS OF CONTROLWARE TABLE ENTRY. * (RLCG) = BIT NUMBER OF LOAD REQUESTED FLAG. * (SCDA) = WORD ADDRESS OF CONTROLWARE TABLE ENTRY. * (SCDB) = BIT NUMBER OF DRIVER DROP FLAG. * ALL *CCBA* REFERENCES TO *CBT* PLUGGED. * ALL *CPTA* REFERENCES TO *PUT* PLUGGED. * ALL *EMBE* REFERENCES TO *EMB* PLUGGED. * * USES CC, CS, EC, ER, IL, PB, RC, TI, CM - CM+4, CN - CN+4, * T0 - T7. * * CALLS DFM, RCH. * * MACROS CPTA, MONITOR, SFA. PRS SUBR ENTRY/EXIT LDK NCPL VALIDATE CALLER CRD CM AOD CM+1 NUMBER OF CONTROL POINTS SHN 7 LMD CP ZJN PRS1 IF SYSTEM CONTROL POINT LDC =C* 1HP - UNAUTHORIZED CALL.* RJM DFM ISSUE DAYFILE MESSAGE MONITOR ABTM ABORT CONTROL POINT LJM PPR RETURN PRS1 STD CC CLEAR COMPLETION REQUEST COUNT STD CS CLEAR CHANNEL/CONTROLLER STATUS STD EC CLEAR ERROR CODE STD ER CLEAR RECOVERY IN PROGRESS FLAG STD IL CLEAR *PUT* INTERLOCK FLAG STD PB CLEAR PREVIOUS BUFFER ORDINAL STD RC CLEAR RETRY COUNT STD TI INITIALIZE *TPOR* INDEX LDD IR+4 CHANNEL NUMBER STM BMLPP PRS2 RJM RCH REQUEST CHANNEL ZJN PRS2 IF CHANNEL NOT ASSIGNED * PLUG CHANNEL INSTRUCTIONS. LDC PRSD SET FWA OF CHANNEL TABLE STD T1 PRS3 LDI T1 ZJN PRS4 IF END OF CHANNEL TABLE STD T2 LDD IR+4 CHANNEL RAI T2 STORE CHANNEL IN INSTRUCTION AOD T1 ADVANCE CHANNEL TABLE POINTER UJN PRS3 CONTINUE PRS4 LDK PXPP READ PPU STATUS CRD CN ADN 1 CRM CRQD,ON READ FIRST WORD OF PP XP AOM CRQD+4 LDK PPCP READ PP COMMUNICATIONS AREA POINTER CRD CM ADK MMFL-PPCP CRD T1 LDD T1 SAVE MAINFRAME ID STM BMLMF LDD IA GET ((PP NUMBER - 2) * 10B) SBD CM+4 SBN 20 SHN -3 STD T1 PP NUMBER - 2 SBN 10 MJN PRS4.1 IF PP 0-11 ADN 6 ADJUST FOR PP 20-31 PRS4.1 ADN 12 SHN 6 RAM BMLPP SET PP NUMBER SHN 6 STM BMLCR SET RECOVERY CHANNEL LDD IR+4 STD T2 SBN 20 PJN PRS5 IF IN SECOND PPS ADN 20 RAM CCPA SET *SCR* BIT NUMBER LDK CHSC *SCR* - FIRST PPS UJN PRS6 CONTINUE PRS5 RAM CCPA SET *SCR* BIT NUMBER LDK CHSC+20 *SCR* - SECOND PPS PRS6 ADC FJMI STM CCPB ADC IANI-FJMI STM CCPD ADC OANI-IANI STM CCPC LDD T1 PP NUMBER - 2 SHN 4 ADD T1 (PP NUMBER - 2) * 21B RAD CN+4 SET EXCHANGE ADDRESS STM CRQA STM CRQB SHN -14 RAD CN+3 RAM CRQA-1 STM CRQB-1 LDD CN+4 SET *MA* ADDRESS ADN 6 STM CRQE SHN -14 ADD CN+3 RAM CRQE-1 LDK ACPL CHECK CPU STATUS CRD CM LCN 0 STD T1 PRESET CHANNEL TABLE WORD INDEX LDN 60D PRESET BIT POSITION FOR LOAD REQUEST STD T3 LDD CM SHN 6 PJN PRS7 IF CPU 0 ON AOM CRQC SET EXCHANGE TO CPU 1 LDD HN RAM CRQD+3 SET (A0) TO 1 PRS7 AOD T1 ADVANCE CM TABLE INDEX LCN 5 RAD T2 PJN PRS7 IF NOT TO PROPER INDEX ADN 5 RAM CCRB PRESET CHANNEL TABLE BYTE INDEX STM RLCB PRESET CONTROLWARE TABLE BYTE INDEX LPN 7 BYTE ADDRESS STD T2 PRS8 LCN 12D RAD T3 DECREMENT POSITION SOD T2 PJN PRS8 IF NOT TO PROPER POSITION LDD T3 BIT POSITION ADN 13 ADD OFFSET WITHIN BYTE SHN 6 STM RLCG+1 SBK 200 STM SCDB+1 LDK CHTP CHANNEL TABLE(S) POINTER CRD CM LDD CM+2 FWA OF CHANNEL TABLE SHN 14 LMD CM+3 ADD T1 ADD WORD INDEX STM CCRA CM ADDRESS OF CHANNEL TABLE ENTRY SHN -14 RAM CCRA-1 LDD CM+2 COMPUTE FWA OF CONTROLWARE TABLE SHN 14 LMD CM+3 ADN CTALL*2 ADD T1 ADD WORD INDEX STM RLCA CM ADDRESS OF CONTROLWARE TABLE ENTRY STM RLCC STM SCDA SHN -14 RAM RLCA-1 STM RLCC-1 STM SCDA-1 * PLUG *EMB* ADDRESSES. LDN EMBP FETCH *EMB* POINTER CRD CM .CM1 EQU CM+1 LDC .CM1*10000+PRSC RJM STA SET *EMB* ADDRESSES * GET BUFFERED I/O TABLE POINTERS. LDK BIOL READ BUFFERED I/O TABLE POINTERS CRD CM LDD CM+1 SHN 14 LMD CM+2 ADK CCTP GET *CCT* DESCRIPTOR CRD CA ADK PUTP-CCTP GET *PUT* DESCRIPTOR CRD T3 ADN CBTP-PUTP GET *CBT* DESCRIPTOR CRD CN AOD T3 * PLUG *CCT* ADDRESS. LDD IR+2 SET ADDRESS OF *CCT* SHN CCTLS-6 ADD CA+4 RAM OVIA+1 STM RPIA+1 SHN -14 ADD CA+3 RAM OVIA STM RPIA * PLUG *CBT* ADDRESSES. .CN3 EQU CN+3 LDC .CN3*10000+PRSA RJM STA SET *CBT* ADDRESSES * PLUG *PUT* ADDRESSES. LDC T6*10000+PRSB RJM STA SET *PUT* ADDRESSES * BUILD *TPOR* TABLE. PRS12 STD T1 INITIALIZE *TPOR* INDEX PRS13 SOD T3 DECREMENT *PUT* ORDINAL ZJP PRSX IF SCAN COMPLETE CPTA UNCT,A READ *PUT* ENTRY CRD CM SFA EST,CM+1 READ EST ENTRY ADK EQDE CRD CM LDN 0 INITIALIZE EST CHANNEL BYTE INDEX STD T2 LDD CM+1 LPN 37 LMD IR+4 ZJN PRS14 IF DEVICE SUPPORTED BY THIS DRIVER LDD CM+2 ZJN PRS13 IF SINGLE ACCESS DEVICE LPN 37 LMD IR+4 NJN PRS13 IF DEVICE NOT SUPPORTED BY THIS DRIVER AOD T2 INCREMENT CHANNEL BYTE INDEX PRS14 AOD T1 INCREMENT *TPOR* INDEX ERRNZ TPORE-1 CODE DEPENDS ON VALUE LMK MAXU+1 ZJN PRS14.1 IF TOO MANY UNITS ON CHANNEL LDD T2 POSITION CHANNEL BYTE INDEX SHN 6 LMD T3 SET *PUT* ORDINAL STM TPOR-1,T1 UJP PRS13 CONTINUE SCAN PRS14.1 LDC =C* 1HP - TOO MANY UNITS ON CHANNEL.* RJM DFM ISSUE SYSTEM DAYFILE MESSAGE MONITOR HNGM UJN * HANG PRSA BSS 0 TABLE OF *CBT* ADDRESSES TCBT HERE CON 0 TERMINATE TABLE PRSB BSS 0 TABLE OF *PUT* ADDRESSES TPUT HERE CON 0 TERMINATE TABLE PRSC BSS 0 TABLE OF *EMB* ADDRESSES QUAL COMPIMB TEMB HERE QUAL * CON 0 TERMINATE TABLE PRSD BSS 0 TABLE OF CHANNEL INSTRUCTION ADDRESSES CHTB STA SPACE 4,10 ** STA - SET TABLE ADDRESSES. * * ENTRY (A) = 6/ TP, 12/ TA * TP = TABLE POINTER. * TA = INSTRUCTION TABLE ADDRESS. * * EXIT (A) = 0. * * USES T0, T1, T2. STA1 STD T2 SET INSTRUCTION ADDRESS LDM 1,T1 RAM 1,T2 SET LOWER 12 BITS OF ADDRESS SHN -14 ADI T1 SET UPPER 6 BITS OF ADDRESS LPN 37 RAI T2 AOD T0 ADVANCE INSTRUCTION LIST STA2 LDI T0 NJN STA1 IF NOT END OF TABLE STA SUBR ENTRY/EXIT STD T0 SHN -14 SET ADDRESS POINTER STD T1 UJN STA2 ENTER LOOP 1HP SPACE 4,10 OVERFLOW 1HP SPACE 4,10 END